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

Anladım Zafer Bey. 

Benim kullanacağım VI larda olabilecek muhtemel arayüz değişiklikleri şu şekilde:

Arka plan dekorasyonunun büyütülmesi, butonların birbirinden uzaklaştırılması, graph yada image ekranları gibi izleme indikatörlerin büyütülmesi vs. işlemler olacak ve bu bir çok VI da olabilir. Yani hemen hemen her çağrılacak dinamik VI için bu düzenleme olacaktır. Önerdiğiniz seçenekler arasında property işlemi en uygun gibi geliyor. Çünkü kontrol ve indikatörlerin miktarında ve türünde değişiklik olmayacaktır. Aslında iki VI aynı amaca hizmet edecek tek fark dediğim gibi arayüz. Arka plan yazılımında ortak yanları da olacak farklı yanları da. Bu zaten işlemin otomatik yada manuel yapılmasına göre değişiklik gösterecek.


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

Anladım Zafer Bey. 

Benim kullanacağım VI larda olabilecek muhtemel arayüz değişiklikleri şu şekilde:

Arka plan dekorasyonunun büyütülmesi, butonların birbirinden uzaklaştırılması, graph yada image ekranları gibi izleme indikatörlerin büyütülmesi vs. işlemler olacak ve bu bir çok VI da olabilir. Yani hemen hemen her çağrılacak dinamik VI için bu düzenleme olacaktır. Önerdiğiniz seçenekler arasında property işlemi en uygun gibi geliyor. Çünkü kontrol ve indikatörlerin miktarında ve türünde değişiklik olmayacaktır. Aslında iki VI aynı amaca hizmet edecek tek fark dediğim gibi arayüz. Arka plan yazılımında ortak yanları da olacak farklı yanları da. Bu zaten işlemin otomatik yada manuel yapılmasına göre değişiklik gösterecek.


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

Ayrıca Zafer Bey,

 

VI script fonksiyonlarından Traverse for GObject ve Get Gobject Label fonksiyonları da run-time engine de çalışmıyor mu? 

Subpanel içine VI'ların tam olarak istediğimiz gibi yani ortanlamış şekilde konumlandırma methodu var mıdır?


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

Script fonksiyonlarının hiç biri run-time üzerinde çalışmıyor. Aslında bu kütüphane dinamik nesneler oluşturmaktan ziyade kodlama yaparken sık kullanılan işlemleri otomatik hale getirmek, kullanıcı tanımlı menüler, şablonlar vs oluşturmak için türetilmiş. Visual Studioda kullanılan "new object instance" ile ilgisi yok. Yalnızca VI'lar böyle değil. VI'lar dinamik olarak çoğullanabiliyor. Bunun dışında run-time da nesne oluşturmak, dinamik kod eklemek imkanı yok. Aslında VI'ların dinamik oluşturulması bu kısıtlamayı büyük ölçüde ortadan kaldırıyor. Dinamik olarak oluşturulacak şeyleri VI şablonları şeklinde oluşturup gerektiği yerde eklediğiniz özellikler nispetinde değiştirerek kullanabiliyorsunuz. LV'ı 7.0 dan beri kullanıyorum (hatta LV 6 da kullandım). Bugün LV de olan bu dinamik yapı ve nesne tabanlı programlama o zamanlar hiç yoktu. Neredeyse tamamen statik bir kod yapısı ile proje yazıyorduk. Öğrenmekle çok zaman kaybettiğimi söylesem de bu yapılar ben başladığımda zaten yoktu 🙂 Şu an, bilmiyorum kullanıyor musunuz, LV 2016 ile "channel wires" diye bir özellik de eklendi. Önceden yeni başlayan için veri paylaşımı (data propagation) büyük sıkıntıydı. Mimari bilmiyorsanız mecburen yerel/global değişken kullanırdınız bol bol. Şimdi yeni başlayanlar için bile büyük kolaylıklar getirildi.

 

Ara yüz tasarımında "splitter" kullanmanızı şiddetle tavsiye ederim. VI'ı menü çubuğu, durum çubuğu, sağ/sol menü, merkez tablo, vs şeklinde bölümlendirirseniz otomatik yerleştirme yapabilirsiniz. Yani formu köşesinden tutup boyutunu değiştirdiğinizde ekranda otomatik yerleşim ve boyutlandırma olacaktır. İlaveten iç içe paneller de koyabilirsiniz. Property ile değiştirmeyi bunlar yetmediği yerde yaparsınız. Size bir uygulama örneği göstermek isterim. İstanbul'da ikamet ediyorsanız ofisimize gelebilirsiniz.

0 Kudos
Message 24 of 34
(1,769 Views)

Evet haklısınız. NI da zamanla kendini epey yeniledi. Ben LV 2011 ile başladım. Şuan LV 2016 kullanıyorum. Ancak LV de profesyonel anlamda 1 yıldır çalışıyorum. Bahsettiğiniz channel wires gayet güzel bir yenilik bir kaç yerde kullandım ancak sizin söylediğiniz gibi artık döngüler prosesler arası çok fazla iletişim aracı olduğu için gerek duymadım. Tabi özel olarak kullanılması faydalı yerler olabilir. 🙂

Splitter kullanımını irdelemek lazım o halde Zafer bey. Ofisinize gelmeyi isterim ancak Bursa da ikamet etmekteyim. İstanbul'a geldiğimde fırsat bulursam gelebilirim. 🙂

Son olarak dün bahsettiğiniz 0xC0 bayrağı type specifier VI refnum istiyor. Farklı connector pane sahip VI ları çoklu olarak nasıl kullanıyorsunuz? Ben genelde Run VI methodu ve Get set control value methodları ile çalışıyordum.


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

@G.Sungur wrote:

....

Son olarak dün bahsettiğiniz 0xC0 bayrağı type specifier VI refnum istiyor. Farklı connector pane sahip VI ları çoklu olarak nasıl kullanıyorsunuz? Ben genelde Run VI methodu ve Get set control value methodları ile çalışıyordum.


Evet Strictly Typed VI Ref istiyor. Kullanımı aşağıdaki gibi;

Strictly Typed VI Ref.PNG

Farklı connector pane sahip VI'ları bu şekilde çağırma ihtiyacı hiç hissetmedim. Nesne tabanlı çalıştığınızda connector pane ler zaten dinamik dispacth sebebiyle aynı olmak zorunda. Nesne içeriği değişebildiği için de giriş çıkışlara farklı farklı controlller eklemek gerekmiyor. Söylediğiniz yöntemle Get/Set kullanmak gerekecektir. Aslında o yöntem Asynchronous Call gelmeden önde RunVI metodu ile VI serverdan VI çağırıp çalıştırıldığında yoğun kullanılıyordu. Nesne tabanlı programlamanın esnekliği yokken kullanılıyordu. Zira o yapı daha statik diye düşünüyorum. Kontrol indekslerine/isimlerine bağlı ve fazlaca sabit metin içeriyor. Ayrıca VI performansını da düşürecektir. Pek hissedilmeyecek kadar az olsa da çoklu çağırmalarda/erişimlerde hissedilebilir. Kullanımı daha kolay olduğu için biraz kaçak bir yöntem gibi 🙂 Bir de Visual Studio'da form üzerindeki nesnelere doğrudan erişme alışkanlığı etken sanırım 🙂

 

Tavsiyem VI üzerindeki nesnelere kesinlikle doğrudan erişmeyin. Actor Framework, AMC gibi mimariler bu ihtiyacı ortadan kaldırıyor. Üç temel prensibe mümkün mertebe bağlı kalın (kapsülleme, devralma ve çok biçimlilik).

 

Splitter ve subPanel kullanmak ara yüz tasarımını tamamen farklı boyutlara taşıyor. Son projemden birkaç arayüz paylaşıyorum...

 

2017-11-08_10-18-21.png2017-11-08_10-19-12.png2017-11-08_10-20-09.png

Sağ/sol listeler, üst menü, alt durum çubuğu, merkez resim "splitter" ile ayrılmış paneller içerisinde. Dolayısıyla boyut değiştirdiğimde yada kaydrıdığımda ana görüntüleri tekrar tekrar düzenlemek durumunda kalmıyorum. Farklı işler için subPanellere farklı VI'lar yükleniyor. Ortadaki resim istenirse ayrı form olarak açılabiliyor istenirse subPanele yapışıyor. Ayrı form açtığınızda istediğiniz gibi boyutlandırıyorsunuz ve görüntü otomatik yerleşiyor...

Message 26 of 34
(1,745 Views)

Anladım Zafer Bey. Arayüzün de gerçekten güzel gözüküyor. Bende dediklerinizi dikkate alarak çalışmalarıma uyarlamaya çalışacağım. 🙂 Cevaplarınız için teşekkür ederim. İyi çalışmalar.


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

Fırsat bulursanız XControl" oluşturmayı da incelemenizi öneririm. Normal kontrollerin yeterli olmadığı yerlerde işinize yarayabilir. Ayrıca aşağıda verdiğim bağlantıları da gözden geçirin. Tamamını denemek için vaktim olmadı ama işe yarar şeyler çıkabilir 🙂

 

Front Panel Layout Tool

User Interface Manager

 

0 Kudos
Message 28 of 34
(1,676 Views)

Teşekkürler Zafer Bey,

Front Panel Layout toolu işime yarayabilir 🙂


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

Merhaba Zafer Bey,

 

AMC ve G# yapılarını birlikte kullanmaya çalışıyorum. Daha önceki konuşmalarımıza göre bir sorum olacaktı. Ana program arayüzü ile dinamik çağrılan arayüzler AMC yapısı ile haberleşmektedir. G# ile oluşturduğum sınıfların nesne ve methodlarını kullanarak bu dinamik çağrılan arayüzlere iş yaptırıyorum. Buradaki sorum şu ki aynı nesne verilerini hem ana programda hemde bu dinamik çağrılan arayüzler de kullanmanın en uygun yolu nedir? 

- Her iki yerde aynı isimli user counterlı Create methodu ile mi aynı verileri kullanırlar yoksa ana programda yaratılan Create methodunun verilerini serialize edip AMC üzerinden çağrılan arayüzlere mi göndermeliyim?

 

İyi çalışmalar. 


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