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

cancel
Showing results for 
Search instead for 
Did you mean: 

Genel Proje Soruları

Merhabalar,

LabVIEW üstadlarına birkaç genel sorum olacak. Yardımcı olabilirseniz sevinirim.

 

* Bir LabVIEW projesinde State Machine tarzı programlamayı kullanmak ne kadar şarttır?

*State Machine tarzını kullanmadan veya bir programlama mimarisine bağımlı kalmadan yazılan programların verimi daha mı düşük oluyor?

*AMC (Asynchoronus Message Communication) kütüphanesinin projeye dahil edilmesi ne denli önemlidir? Çünkü birçok video izlememe rağmen tam olarak AMC'yi projemde nasıl kullanmam gerektiğine karar veremedim. 

Not: Bugüne kadar çok fazla ufak boyutlu projeler yaptım hatta lisansta LabVIEW'in eğitimini de aldım 1 dönem. Fakat bu tarz mevzulardan hiç bahsedilmediği için çok bir bilgi sahibi değilim. Eksikliğimin kusuruna bakmayın eğer sorular saçma ise.

Saygılarımla.

Add 273 on whatever Celcius said.
-Kelvin
0 Kudos
Message 1 of 10
(4,251 Views)

Sorularınızın altına yorumlarımı yazıyorum.

 

* Bir LabVIEW projesinde State Machine tarzı programlamayı kullanmak ne kadar şarttır?

Açıkçası çok göreceli bir kavram, her tasarım belirli bir amaca hizmet eder. Şart diye bir durum söz konusu değil. Öncelikle state machine uygulanmış örnekler üzerinden yapıyı yorumlamaya çalışın. Zaten projeniz bu yapıya mecbur kaldığında hissedip bunu uygulayacaksınız.

 

*State Machine tarzını kullanmadan veya bir programlama mimarisine bağımlı kalmadan yazılan programların verimi daha mı düşük oluyor?

Tek başına verimi düşük oluyor demek çok doğru değil. Bir mimariye bağlı kalmak zorunda değilsiniz tabiki. Fakat bu tasarımlar yazılımcıların çekmiş olduğu zorluklar sonrası ortaya çıktığı için bunları kullanmak bir tecrübenin sonucu olarak aşağıdaki faydaları sağlayacaktır.

Okunabilirlik

Optimizasyon

Ölçeklenebilir

Tekrar kullanılabilirlik

Bakım kolaylığı vb. birçok fayda sağlayacaktır.

 

*AMC (Asynchoronus Message Communication) kütüphanesinin projeye dahil edilmesi ne denli önemlidir? Çünkü birçok video izlememe rağmen tam olarak AMC'yi projemde nasıl kullanmam gerektiğine karar veremedim. 

Yukarıdaki cevabım gibi buda göreceli bir kavram. Projenin gerek duyduğu durumlarda kullanmanız mantıklı. AMC kütüphanesi process'ler arası haberleşme(mesajlaşma) amacı ile kullanılmakta. (Ayrıca network üzerinden haberleşme imkanıda sağlamaktadır.) Kısa bir örnekle açıklamak gerekirse, bir görüntü işleme projesi yapıyorsunuz. Process'in birtanesi kameradan gelen görüntüleri alsın. Gelen görüntüler işlenmek üzere(örn. filtrelenmek vb) image processing yapan process'e gönderilsin. İşte burada AMC devreye giriyor. Görüntüyü alan process'teki veriler AMC ile image processing yapan process'e gönderilir. Görüntü işleme yapıldıktan sonra görüntü değerlendirilmek üzere değerlendirme process'ine gönderilsin. (Görüntü işleme process'inden değerlendirme process'ine AMC ile veriler gönderilir.) Değerlendirme sonrası karar verilmesi için veriler karar process'ine gönderilir.(Değerlendime process'inden karar process'ine AMC ile veriler gönderilir.) 

 

Gördüğünüz üzere AMC kullanmadan bunları sırası ile oku->işle->değerlendir->karar ver şeklinde sırası ile yapsa idim, tekrardan görüntü okuma işlemine geç kalabilir görüntü kaçırabilirdim. Processler arası mesajlaşma ile asenkron iletişim sağlayarak daha sağlıklı bir yapı elde etmiş oluyorum.

 

Umarım sizlere yardımcı olabilmişimdir.

 

Himmet GENCER
Software Development Coordinator at TDG
himmetgencer@gmail.com

View Himmet Gencer's profile on LinkedIn

View on Instagram
Message 2 of 10
(4,229 Views)

Ben şu an G# ve Actor Framework (OOP) karışık kullanıyorum. AMC, State Machine, vs de kullandım ve yaklaşık 12 yıldır Labview kullanıyorum. Tecrübelerime dayanarak mimari kullanarak yazılım geliştirmek ile sıralı (spagetti) kod geliştirmek tamamen ayrı ufuklardır. Birbirleriyle hiç alakaları yoktur. Yazılımda hızlı ilerlemek ve profesyonel bir alt yapı için temel yada gelişmiş bir mimari kullanmak (kurmak) zorunludur.

 

1.State Machine hem "Queue" tabanlı hem de "Event" tabanlı yapıların temelini oluşturur. Dolayısıyla bir döngü üzerinde harici kaynaktan gelen (arayüz de olabilir) verilere (tetiklere) bağlı olarak iş yaptırmak ve gelişmiş mimariler için olmazsa olmaz yapıdır. State Machine mantığını iyi öğrenmenizi tavsiye ederim.

2.Mimari kullanılmadan yazılan kod esnek olmaz, geliştirmeye kapalıdır ve kod düzenlemeleri ile hata giderme çok daha zordur. Kodlama hatta mantık hatalarına da çok açıktır. Bir yerden sonra ekleme yapmak dahi imkansız hale gelir.

3.AMC nesne tabanlı olmayan (metin tabanlı) gelişkin bir mimaridir. Projenizi parçalar halinde yazarak birleştirmenize imkan verir. Nesne tabanlı programlama öncesi kullanabileceğiniz ve üst seviye programlar kurabileceğiniz bir alt yapı sağlar.

4.Mimariler nasıl kullanılır yada nedir sorusunun cevabını, yukarıda dediğim gibi, o bakışa sahip değilseniz anlamanız zor olacaktır. Mimariler (özellike OOP - Nesne Tabanlı Programlama) küçük blokların birleştirilmesi mantığı üzerine inşa edilmiş yapılardır. Her blok ana yapının bir parçasıdır ama sadece kendi içeriği ile ilgilidir. Bununla ilgili Software architecture sayfasını inceleyiniz ama bu başlı başına bir daldır. Ciddi iseniz eğitim almanızı öneririm.

Message 3 of 10
(4,226 Views)

Bu arada Himmet Bey'in dediklerine de katılıyorum ama çok önemli bir nokta var ki bu işin ayrımı o noktada oluyor kanaatindeyim. Eğer bir sistem tasarlıyorsanız ve o sistemi çabucak hayata geçirip üzerine bir şey ilave etmeyecekseniz mimari kullanmadan o sistemi tasarlayabilirsiniz. Performans sorunları da olmayan hatta hızlı çalışan bir yazılım da olabilir ama temel seviye yazılımcılıktan öteye geçmez. Her projenizde temel bir alt yapıyı tekrar tekrar kurarsınız ve projelerinizde ortak bir alt yapı olmaz. Sistem çözümlerken bileşenlere ayırma kabiliyetiniz düşük olur. Güçlü mimari kullanma ve nesne tabanlı programlamak başta daha uzun süre alır ama esnek ve farklı işlerde kullanabileceğiniz bir yazılımınız olur. Projenizi tasarlarken küçük parçalara nasıl ayıracağınızı baştan bilirsiniz. Yani mimari ile yazılım yapmak ilerisinde "yazılım mimarı" denilen bir noktadan bakmanıza imkan verir. Çok soyut kavramlar olduğu için kendiniz tecrübe etmeden anlamanız pek kolay olmayabilir. Ama uzun süre yazılım geliştirmeyi ve bu işin uzmanı olmayı düşünüyorsanız mimarilere hatta nesne tabanlı programlamaya hakim olmanız gerekir.

0 Kudos
Message 4 of 10
(4,221 Views)

Hem size hem de Himmet beye yorumlarınız için çok teşekkür ediyorum. Uzun süredir kafamı kurcalayan bir mevzu idi. Yazdığım proje aşırı büyük boyutlarda ve karmaşada değil. Hızlı bir biçimde istediğimi yaptırabiliyorum şuan için. Tabi ki içerisinde çok miktarda SubVI mevcut ve bu da kontrolü kolaylaştırıyor. Fakat daha fazla geliştirmek ve optimizasyon aşamasını tamamlamak için bahsettiğiniz tavsiye ve yönlendirmeleri mutlaka dikkate alıp üzerinde çalışacağım.

Add 273 on whatever Celcius said.
-Kelvin
0 Kudos
Message 5 of 10
(4,213 Views)

Şunu da eklemek gerek. Mimari yazılım işletimidir. Yani process/thread/task dediğimiz işlem parçacıklarının yönetimidir. Mesela bir haberleşme kanalından veri alıyorsunuz, aynı zamanda raporlama yapıyorsunuz, ayrıca ara yüz işlemleri ve analizler yapıyorsunuz, farklı donanımlar kontrol ediyorsunuz, vs... Bu gibi yazılımı oluşturan her alt işlem ayrı ayrı ve bağımsız ele alınmalı. Bunun için mimari gerekir (uygun olur). Ancak en alt seviye bir analiz mimari ile yazılmaz. Böyle bir analiz (işlem) bir alt fonksiyondur ve hızlı (en iyi biçimde) çalışmak üzere oluşturulur.

0 Kudos
Message 6 of 10
(4,209 Views)

Benim karşı karşıya olduğum tam olarak bu Zafer Bey. Birkaç farklı modülü birbirinden bağımsız şekilde kontrol ediyorum. Birbirlerinden bağımsız çalışmaması gereken modülleri de case structure ve event structure'lar ile programa uygun hale getiriyorum. Henüz projeyi tamamlamadım belki ileride bahsettiğimiz mimari yapılarına ihtiyacım olacak. Şuan onu tam olarak kestiremiyorum. Ama anladığım kadarı ile küçük-büyük demeden her projeyi düzgün bir mimariye uydurmak sistem açısından ciddi önem taşımakta.

Add 273 on whatever Celcius said.
-Kelvin
0 Kudos
Message 7 of 10
(4,207 Views)

Bileşenleri olan bir projeden bahsediyorsak cevap "evet" olacak...

0 Kudos
Message 8 of 10
(4,204 Views)

Yani modüller arası haberleşme yaparken AMC kullanmam gerekecek doğru mu anlamışım Zafer Bey?

Add 273 on whatever Celcius said.
-Kelvin
0 Kudos
Message 9 of 10
(4,200 Views)

Evet, kullanmanız daha doğru bir yaklaşım olur. Yalnız mimariler de sınırsız esnekliktedir ve istediğinizi yapabilirsiniz anlamı çıkarmayın. AMC metin tabanlı çalışan bir mimari. Her "process" için bir "Processor Loop" oluşturduğunuzda durumları (state) Case Structure içine tek tek oluşturmanız gerekiyor ve o işleme ait değişkenleri "state variables" olarak bir Shift Register üzerinde tutuyorsunuz. İşlemler arası ise "AMC Queue" üzerinden mesajlaşarak haberleşiyorsunuz. Burada da yine metin tabanlı komutlar kullanılıyor ve değişkenlerin metne çevrilmesi "flatten/serialization" gerekiyor. Komuta karşılık gelen Case ele alınıyor ve parametre dönüştürülerek "unflatten/deserialize" kullanılıyor.

 

Ayrıca her işlemi (process) Start Asynchronous Call ile çağırarak bir thread olarak çalıştırıyorsunuz. Elinizde haberleşme Queue referansları oluyor ve bu işleme (process) onun üzerinden erişiyorsunuz. Bunun dışında o işlem dışarıdan soyutlanmış! oluyor.

 

Kısacası bağımsız çalışan "call&forget" işlemleriniz oluyor ve her biri atadığınız görevi yerine getirirken aralarında mesajlar ile haberleşerek birbirlerine işlemler yaptırıyorlar. Böylece siz işlemleri (process) ve işlemler arası ilişkileri (mesajları) tasarlıyorsunuz. Ana yapıyı hazır kullandığınız için kod belli düzende oluyor ve ana yapı oluşturmakla uğraşmıyorsunuz. Ayrıca ilaveler/değişiklikler yapma imkanınız da oluyor.

 

Belli mimarileri öğrendikten sonra size uygun daha esnek bir mimariyi (mevcut mimariler üzerinden) kendiniz de oluşturabilirsiniz. Ancak Nesne Tabanlı Programlamaya (OOP) hakim olmadan AMC nin üzerine çıkmanız pek mümkün değil. Yine de nesne tabanlı olmasa da gelişkin bir mimaridir. Process programlama için yeterlidir.

0 Kudos
Message 10 of 10
(4,195 Views)