NI Ürünleri İle İlgili Tartışmalar

cancel
Showing results for 
Search instead for 
Did you mean: 

Alt prosesli yazılım mimarisi

Solved!
Go to solution

Merhabalar,

Kullanıcının yazılım yazacağı bir yazılım oluşturacağım. Bu yazılımda proses listesi olacak ve prosesler sırayla işleyecektir. Ancak burada alt proseslerde olacaktır. Yani 5 katmanlı iç içe proses listesi mevcut olacaktır. Bu durumda alt katmanlı bir prosese gelindiğinde içinde mevcut olan listeyi program otomatik olarak işleyecektir. Listelere bir çok proses eklenilmesi gerekiyor. Bunu gerçekleştirebilmem için tecrübeli kullanıcılardan esnek, büyütülebilir ve sürdürülebilir bir yazılım mimarisi önerileri alabilir miyim?

Şimdiden teşekkürler.


Görkem SUNGUR
Mechatronics Engineer
0 Kudos
Message 1 of 34
(4,664 Views)

Yanlış anlamadıysam. Bu işlemi xml ya da json formatlarıyla halledebilirsin. Ancak kullanacak personel teknik seviyesi iyi düzeyde değilse çok sorun yaşarsın. C# ile ya da labview de kullanıcının anlayacağı bir arayüz yapabilirsin. Kullanıcının kaydettiği her ayara da bir isim yazmasını sağlarsın. Bu ayarları xml e kaydedersin. Liste gibi birşey yapıp kullanıcıya oradan ayarları seçtirebilirsin. 

0 Kudos
Message 2 of 34
(4,641 Views)

Şu an yapay görme için benzer bir uygulama geliştiriyorum. Eğer çok esnek bir yapı kurmak istiyorsanız kendi kullandığım alt yapıları (G# ve Actor Framework) önerebilirim. Geliştirdiğim uygulamada bir iş düzenleyicisi (job editor) bulunuyor. Kullanıcı fonksiyon listesinden istediği fonksiyonları seçerek bir iş oluşturuyor. Oluşturduğu iş içerisinde veri paylaşımı için dinamik veri adreslemeleri yapabiliyor (daha önceki fonksiyon çıktılarını). Kendi veri tiplerimi oluşturduğum için veri paylaşımında ve işleme de dinamik metotlar kullanıyorum. Ana programa ait iş parçacıkları (processler) "Actor" tabanlı çalışıyor. Fonksiyonlar ve veri paylaşımı ise "G#" ile kurduğum sınıflar ile gerçekleşiyor. Oluşturulan iş çekirdek "execute" metodu ile dinamik işleniyor. Bağımlı olmayan adımların paralel çalışabilmesi için de bir alt yapı oluşturuyorum. İsteğiniz hangi safhada ve Labview hakimiyetiniz nasıl? Eğer uzun soluklu ve profesyonel bir uygulama geliştirecekseniz eğitim almanızı öneririm. Ama bu kadar kapsamlı olmayan ve sadece oluşturduğunuz metin tabanlı bir fonksiyon listesinden iş oluşturmak isterseniz "AMC-Asynchronous Message Communication" mimarisini kullanmanızı tavsiye edebilirim. Bu mimari nesne tabanlı olmadığı için daha kısıtlayıcıdır. Mesajlar metin tabanlı olduğu için verileri metin/variant dönüşümleri yaparak iş parçacıkları arasında aktarabilirsiniz. Ancak üstte söylediğim yapıya göre çok daha hızlı bir uygulama geliştirebilirsiniz.

Message 3 of 34
(4,632 Views)

İç içe 5 katmana neden gerek duyduğunuzu da anlamadım. Bu sadece görsellik içinse "tree control" ile bu görselliği sağlayabilirsiniz. Arka planda ise bağımlı fonksiyonlar sıralı, bağımsızlar ise paralel çalışır. Neticede 5 katman dediğiniz ya sıralı bağımlı yada paralel iş parçalarından oluşmaktadır.

0 Kudos
Message 4 of 34
(4,631 Views)

Zafer Bey cevap için teşekkür ederim.

5 katmanlı yazılım aslında dediğiniz gibi bağımlı sıralı listeler oluyor. Bunlar alt proses olarak düşünülmüş. Örneğin bir motorun istenilen bir noktaya getirilip iş yaptırılması bir proses iken bu motorun o noktada iş yapması benim başka yapımın alt prosesi olabilir gibi. Bu tarzda iç içe 5 katman sınırlamalı bir işlem listesi düşünmüştük. Siz bu durumda nesne tabanlı bir mimari öneriyorsunuz sanırım. OOP tabanlı mimari bilmiyorum açıkçası eğitim almam gerekiyor. En üst manada metin tabanlı olarak ileri QDMH mimarisini kullandım. AMC yapısı da bu mimariye benzer diye biliyorum. Listeye eklenecek bir çok prosesler olacak bu prosesler dinamik olarak çalıştırılıp işlem yapılacak. Kullanıcıya if-else, call gibi bir çok fonksiyonu kullanma imkanı verilecek. Tüm proseslerin verileri kaydedilecek liste ile birlikte. Dediğiniz gibi her proses kendinden sonra gelen proseslerle veri paylaşacak. Açıkçası tamamen kullanıcının oluşturacağı bir program olacak. Bu tarzda bir yazılım düşünüyoruz. 


Görkem SUNGUR
Mechatronics Engineer
0 Kudos
Message 5 of 34
(4,620 Views)

Aslında geliştireceğimiz yazılım sizin yazılıma benzer mantıkta olacak. "Proses Editör" kısmında kullanıcı istediği yazılımı yapabilecek. Bu proses editör bile dinamik aslında. Bir tab control içerisinde subpanele çağrılacak. Diğer tüm prosesler de proses editörün içindeki subpanele açılacak. Yapılan işlemler gösterilirken ve veri kayıt işlemleri yapılırken kullanılacak bu subpaneldeki fonksiyonlar. 


Görkem SUNGUR
Mechatronics Engineer
0 Kudos
Message 6 of 34
(4,619 Views)

Serkan Bey, yorumunuz icin tesekkurler ancak istedigim sey o tarzda degildi. Aciklamayi yaptigim gibi.


Görkem SUNGUR
Mechatronics Engineer
0 Kudos
Message 7 of 34
(4,606 Views)

Sizin uygulamanızda benimkinden farklı olarak proses kontrol olacak. Aslında kullanıcı proses programlayacak ve koşullu dallanmalar da olacağını düşünüyorum. OOP kullanarak çok esnek ve genişletilebilir tasarlayacağınız kesin. AMC ile metin tabanlı bir editör gibi de çözülebileceğini düşünüyorum. Kullanıcının metin tabanlı bir komut listesi oluşturduğunu ve uygulamanın komutları çözerek ilgili adımlara dallandığını varsayabiliriz. Ama isteklerinize bakarak OOP tabanlı kurmanız çok daha isabetli olacaktır. Ancak OOP ile geliştirme sürecinin çok kısa olmayacağını baştan kabul etmek gerek. Actor Framework ve G# hazır mimariler ama yazılım senaryosunu da bu mimarilere göre en iyi şekilde tasarlamak lazım. Uygulamanız iyi çözümlenmeli. Bağımsız en küçük iş parçacıklarına ayrıştırılmalı. İş parçacıkları arasında veri paylaşımı nasıl olacağı iyi belirlenmeli. Hasılı kullanacağınız donanımların davranışlarına kadar pek çok detay olacaktır. Tasarım kısmının biraz uzun tutulması gerekebilir ki ileride "bu da olmadı baştan yazalım" noktasına gelinmesin.

0 Kudos
Message 8 of 34
(4,592 Views)

Profesyonel bir çalışma olması beklendiğinden OOP tabanlı çalışmam daha uygun olacak diye düşünüyorum bende. Aslında burada beni düşündüren mevzu ana yada alt proses listelerine eklenecek VI fonksiyonların birden fazla kullanılması ve her kullanımında farklı veriler içerebilmesi. Bu VI fonksiyonların belli başlı görevleri var zaten mesela toplama işlemi yapan bir VI gibi. Ama kullanıcı toplanacak değerleri başka prosesten de atayabilir yada kendi içinde sayı olarak da kaydedebilir. Bunun analizi biraz zaman alacak gibi duruyor. Ana yazılım yani proses editör ve main AMC tabanlı olup proses fonksiyonları OOP tabanlı olsa sizce uygun olur mu?


Görkem SUNGUR
Mechatronics Engineer
0 Kudos
Message 9 of 34
(4,577 Views)
Solution
Accepted by topic author G.Sungur

Eğer alt fonksiyon (VI) kendi bünyesinde bir değer saklamıyorsa çoklu kullanımı hiç sorun teşkil etmez. Bunun için o VI çoklu girişe (reentrant) göre ayarlanmalıdır. Bunu VI özelliklerinden ayarlayabiliyorsunuz. Paylaşımlı kopya (shared clone) olarak seçtiğinizde çağrı miktarına göre kopyalar oluşturuluyor. Farklı noktalardan aynı anda çağrılar yoksa (bir anda bir çağrı varsa) tek kopya ilk çalışmayı bitirdikten sonra ikinci çağrıda da kullanılıyor. Bu VI kopya sayısını asgari düzeyde tuttuğu için hafıza kullanımını da olumlu etkiler. Ancak şunu tekrar belirteyim. Eğer VI içerisinde saklanan değer varsa bu hiç beklenmedik sonuçlar üretilmesine neden olacaktır. İlk çağrı noktasında saklanan değer diğer çağrı noktasında kullanılır. Böylece girişlerde hiç sorun yokken VI yanlış sonuçlar üretir. Bu da genelde VI içerisinde her girişte ilk değer ataması yapılmayan "shift register", "feedback node" vs gibi hafıza noktalarını kullanımından kaynaklanır. Önceden belirlenmiş kopya (preallocated clone) yapmanız durumunda ise her çağrı noktası için bir kopya en başta oluşturulmaktadır. Birbirinden tamamen bağımsız VI'lar gibi kullanmanızı sağlar.

 

AMC+OOP benim de kullandığım bir yapı. AMC ile iş parçacıklarını yönetirken OOP ile fonskiyonları oluşturmak tam olarak benim bir uygulamamda mevcut. AMC ile uygulama tasarlamak Actor Framework ile tasarlamaya göre çok daha hızlı olacaktır. Zaten Actor Framework konusunda yetkin değilseniz öğrenme süreciniz muhtemelen ilk projenizi tekrar yazma ihtiyacı hissettirecektir. AMC de böyle bir sorun olmaz. Geliştirirken öğrenme süreci devam eder ve daha sıkı bir yapısı olduğu için çok büyük hatalar yapmazsınız. AMC deki sıkıntı metin tabanlı mesajlaşması. Tüm nesneleri serialize/deserialize yapmanız gerekecek. Yine de işinizi göreceğini düşünüyorum. Benim AMC ile yaptığım uygulama da yine iş oluşturma ve koşturma yapısı mevcuttu.

 

0 Kudos
Message 10 of 34
(4,572 Views)