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

cancel
Showing results for 
Search instead for 
Did you mean: 

Event queue

Merhaba, 

 

Bir butona bağlı event structure oluşturdum. Bu event structure içinde de bir while döngüsü çalışıyor ve 3 saniye sonra sonlanıyor.

 

İstediğim şu; bu döngü sonlanana kadar butona tekrar basıldığında başka bir event kuyruğa alınmasın ya da kuyruktakiler silinsin.  

 

Event oluştururken "Limit maximum instances of this event in event queue" seçeneğini işaretleyip "1 instances" yaptığımda,

 

kuyruktaki eventlardan 1 tanesini çalıştırıp diğerlerini uçuruyor. O bir tane de çalışmasın istiyorum ancak 1'den küçük yapmama da izin vermiyor,

 

bu while döngüsü çalışırken başka hiçbir tetiklemeden etkilenmesin istiyorum bunu en pratik yoldan nası yapabilirim ?

 

 

0 Kudos
Message 1 of 5
(4,228 Views)

VI package manager vasıtasıyla AMC (Asyncronous Message Communication) kütüphanesini yükleyiniz. Kütüphanede örnek bir şablon (template) bulacaksınız. Mesaj işleme ile mesaj üretme ayrı döngülerde tanımlı olduğu için arayüz işlemlerini sıralamak (işleme almak)/sıradan çıkarmak ve çok daha karmaşık uygulamalar için oldukça kullanışlı bir kütüphanedir. Bu kütüphane ile istediğinizi rahatlıkla yapabilirsiniz.

 

Şablonla ilgili kısa bilgi aşağıdadır.

 

AMC Şablon.png

0 Kudos
Message 2 of 5
(4,217 Views)

Merhabalar.

Set ve Unset busy vilarınıda deniyebilirsiniz. Zafer Beyin çözümü daha geçerli bir çözüm ancak bu da işinizi görebilir.

Ermaksan Machine R&D
Electronics Engineer
0 Kudos
Message 3 of 5
(4,208 Views)

Merhaba, 

 

Set Busy kullanırsanız Event esnasında kursor ile başka bir işlem yapamazsınız. Bunu "Edit Events" da "Lock panel until the event case completes."

 

seçeneğini işaretliyerek de yapmanız mümkün. Ancak paneli kilitlemek değil event kuyruğunu düzenlemek istiyorum.

 

Zafer bey kütüphaneyi yükledim, "0 instances" yapmaya neden engel olmuşlar anlayamadım ama bu kütüphaneyi öğrenmiş oldum. 

 

Cevaplarınız için teşekkür ederim.

İyi çalışmalar

 

 

 

 

0 Kudos
Message 4 of 5
(4,183 Views)

"0 instances" ile kastınız nedir? Aşağıdaki mesaj işleyen döngü bir mesaj yoksa "timeout" koşulunda boşta bekleyecektir. Zaman aşımı (timeout) süresini mesela 1000ms yaparsanız nerdeyse hiç işlem yapmayacaktır. Kuyruktaki mesaj sayısını sınırlandırmak istiyorsanız alttaki döngünün girişinde oluşturduğumuz sıra (queue) eleman sayısını mesela 1 yapabilirsiniz (bunun yerine tüm mesajları alarak  ayrıştırma/yönlendirme (parse/dispatch) yapmak daha uygun olacaktır). Ayrıca mesaj yollarken öncelik vererek mesajın kuyruğun önüne alınmasını sağlayabilirsiniz.

 

Kısacası bu yapıyı (mimariyi) kullanarak yapamayacağınız uygulama yoktur diyebilirim.

0 Kudos
Message 5 of 5
(4,179 Views)