05-13-2012 09:00 AM
merhaba,
9073 crio ile bir fırının sıcaklığını PID ile kontrol etmeye çalışıyorum.Fırının 5 noktasındaki sıcaklık değerlerini olçup kaydedecek bir PC mevcut. FPGA module herhangi bir kod yazmadan butun kontrol programını RT ye yazmayı düşünüyorum. PID ve birkaç basit IO nun kontrolü RT işlemcide çalışacak.yanı bütün program PC ye bağlı kalmadan 9073 şasesinde scan interface modunda çalışacak. Fırın sıcaklık set değerinin crio ya yazılması ve 5 noktanın sıcaklık değerlerinin PC den okunup kaydedilebilmesi için projeye library ekyeyip değişkenleride network-publised olarak tanımlıycam... PC dende shared variable ları okuyup değerleri kaydedeceğim...
yukarıda anlattıklarım içerisinde yanlış düşündüğüm bir nokta varmı acaba... PC ve Crio arasıdaki haberleşme için en hızlı ve uygun yöntem hangisidir...
teşekkür ederim.
05-13-2012 10:05 AM
05-13-2012 10:31 AM
aslında başka bi uygulamada (64 den fazla analog giriş,80 dijital giriş ve çıkış, puls okuma(hız ölçümü) ve PWM kontrolü ) veri toplama yazılımı yapmıştım.Butün dijital ve analog IO ları FPGA e yazdım.Sonra Direk olarak PC programında fpga read/write ile okuyup yazma yaptım. Yani bütün prosesi pc tarafında gerçekleştirdim. pc tarafında analog değerlerin okuma hızı normal iken çıkışa bağlı basit bir uyarı lambasını yarım saniye ON yarım saniye OFF olarak çalışmasında çok ciddi hız problemi yaşadım.Tabi bunun yanında diğer dijital giriş ve çıkışlarinda tepki süreleri çok yüksekti.FPGA modül yapım saniyelik peryodları yakalayamıyordu...çok ama çok yavaş çalışıyordu.Muhtemelen analog girişlerde çok yavaş okuyor ama gözle bunu farketmedim.
Bu hız probleminden kaynaklı sistemin kontrol kısmını (pıd ve diğer ıo kontrolleri) RT da yapıp sadece pc den değer okuyup yazmayı düşünüyorum. En azından yukarda bahsettiğimden daha hızlı çalışacağını düşünüyorum. Siz sadece 5 TC nin okunacağını düşünmeyin,daha fazla IO olduğunda hız ve genel oalrak Compact RIO ların yapısı gereği nasıl bir yapı oluştırmamız gerekiyor.Yukarıda anlattığım uygulamayı nasıl oluşturmam gerekirdi.
Teşekkür ederim.
05-13-2012 10:50 AM
Elinizde cRIO varken uygulamayı PC üzerinden çalıştırmaya çalışmak zaten pek doğru bir seçim olmaz. Sıcaklık okuyup elde ettiğiniz verilere göre PID kontrolü yapacaksanız. PID'yi RT modül üzerinde yapmanız yeterli olur diye düşünüyorum. FPGA üzerinde belki veri okuma (filtreleme) ve PID çıkışları ile sistemi kontrol etme yaparsınız. Doğal olarak da RT üzerinden PC ile haberleşirsiniz. Görünürde PC üzerinde bir işlem aslında yok herşey cRIO üzerinde çalışacak ve PC belki belli aralıklarla okunan değerleri kaydedecek. Hatta işleminiz çok uzun sürmeyecekse verileri de cRIO üzerinde tutup işlem bitince PC'ye aktarmak da olabilir. Eğer PC'den gözlemleyip işleme müdahale etmyi düşünüyorsanız tabi bu işe yaramaz.
Her neyse bence sıcaklık ölçümü olacaksa zaten oldukça yavaş değişen ve az veri demektir. Shared Var sorun çıkarmaz diye düşünüyorum.
Candan okursa onun da fikrini almak iyi olur 🙂
05-13-2012 01:44 PM - edited 05-13-2012 01:46 PM
Özetlemek gerekirse,
- bütün analog ve dijital giriş ve çıkışları FPGA e yazılır.
- Kontrol işlemleri RT üzerinde yapılır.
- PC üzerinde sadece verilerin okunup kayıt yapılması , sistemin gözlemlenmesi ,start stop gibi temel müdahaleler gerçekleştirilir.PC ve Crio arasındaki data alişverişi Shared Variable kullanılarak gerçekleştirilir...
Bu noktada şunu sormak istiyorum.örneğin 100 adet double değerin PC den okunması için Shared variable yeterli olurmu olamaz ise daha geçerli bi çözüm olarak ne yapmamız gerekir??? TCP/IP haberleşmesi mi yapmak gerekir ?
Çok teşekkür ederim.
05-13-2012 02:27 PM
Açıklamalarınız oldukça doğru. 100 dbl/sn ise 100x8 byte/sn demektir ki bu oldukça küçük bir veri. Bunun 100 hatta 1000 katı bile sorun çıkarmamalı. Yalnız verilerinizi 100-200 ms'lerin altında göndermeyin. Paketler oluşturup bu sürelerin üzerinde kalmaya dikkat edin.
05-14-2012
05:07 AM
- last edited on
05-09-2024
06:20 PM
by
Content Cleaner
Merhabalar Aixx,
Genel itibarıyla PID ile fırın kontrolü için ortak bir noktada anlaşıldığını düşünüyorum.
Şahsi kanaatim, FPGA'i de fazla işin içersine katmadan bütün PID'yi RT üzerinde Scan Engine ile senkron bir şekilde çalıştırmak uygulamayı kolayca çözmenizi sağlayacaktır. Piyasada bulunan düşük maliyetli PID kontrolcülerinin çevrim hızlarının 100 - 200 ms. olduğu düşünülürse, Scan Engine'in default 5 ms.lik hızı oldukça yeterli olacaktır. Hatta okunan sıcaklık verisi üzerinde filtreleme yapmak için bile yeterli zamana sahipsiniz.
Özel olarak, cRIO ile Host PC arasında veri transferi için en hızlı yöntem (toplam veri transferi/sn) hangisidir diye sorulacak olursa, bildiğim kadarıyla sıralama şu şekildedir:
1) TCP/UDP Stream
2) Netwrok Streams (bkz. Lossless Communication with Network Streams: Components, Architecture, and Performance https://www.ni.com/en/shop/labview/lossless-communication-with-network-streams--components--archite....)
3) Shared Variables
Linkini vermiş olduğum makalede, bazı benchmark'lar olduğunu göreceksiniz. Temel itibarıyla bu benchmark'lar sistem beklentileriyle de bağdaşmaktadır. Örneğin güncel 9222 / 9223 modüllerimizin veri üretme hızlarını (500 / 1000 MS/s @ 16-bit) ethernet üzerinden PC'ye taşımak için modül başına 4-8 MB/sn. ve üzerinde bir veri transfer hızına ihtiyaç duyulmaktadır.
Öte yandan, latency (gecikme), ethernet üzerinden veri transferi yapılması durumunda önüne geçilemeyen bir olgu ve ne yaparsak yapalım 100 ms.nin altında bir latency yakalayabilmek benim bildiğim kadarıyla pek mümkün değildir.
RIO sistemlerde latency'nin azaltılabilmesi için en etkin yöntem MXI Express RIO ürünleridir (bkz. 9157 ve 9159) ve zaten bunlar da PC ile RIO arasında PCI Express arabirimi üzerinden iletişim kurmaktadırlar.
Umarım bilgiler faydalı olur.
Candan
05-15-2012 05:10 PM
yardımlarınız için teşekkür ederim,
son olarak Shared Variables işimi görecektir.Butun kontrol blokları RT de koşturulup PC sadece sıcaklık değerlerinin kaydedilmesinde kullanılmalıdır.
07-15-2012 05:09 PM
tekrar merhaba,9073 de yukarda bahsettiğim uygulamayı yapmaya çalışıyorum. Sistemde bolca analog input ve dijital IO lar mevcut.FPGA modda butun analog ve dijital IO ların okunduğu FPGA.vi Vİ ını hazırlayıp yüklediim. RT tarafında ise şu an için sadece 8 adet analog değeri okuyorum. PC tarafında ise shared variable kullanarak bu analog değerleri okuyorum... Fakat PC ile CRio arasında ki bağlantı sürekli kesiliyor.Bazen Crio yu resetleyerek ,enerjisinini kapatıp açarak tekrar bağlantı kurabiliyorum. Ama çoğunlukla CRio yu formatlamak zorunda kalıyorum. MAX dada crio yu bağlı olarak göremiyorum.IP leri değiştirmeyi filan denedim ama format atmadan bağlantıyı gerçekleşmiyor.RT.vi çalıştırdıkan 5 - 6 sn sonra bağlantı kopuyor. Bazen 25-30sn sonra kopuyor. Bunun nedeni ne olabilir .crio ya yükladiğim softwareler mi acaba eksik. august 11 i yüklüyorum sadece.
teşekkür ederim...
07-23-2012 07:26 PM
merhaba bağlantı problemini aştım.MAX ı güvenlik duvarı engellememe listesine ekledim şu ana kadar sıkıntı olmadı. Fakat farklı bir sıkıntı ile karşı karşıyayım. Crio altında shared variable ekledim.real time programın çalıştığı vi da start up olarak ayarlı.Compact Rio yu restart ettiğimde içerisindeki program dönmeye başlıyor. PC tarafında shared variableleri okuduğum bir vi var.PC deki VI 'ı çalıştırdığımda startup olarak çalışan RT.vi çalıştığı için hata veriyor. Devam ettiğimde ise RT.VI stop a geçiyor. Bu sıkıntıyı nasıl aşabiliriz acaba.