Real-Time Measurement and Control

cancel
Showing results for 
Search instead for 
Did you mean: 

RT freq problem

Kedves NI !

Én a Debreceni egyetem Villamosmérnök végzős hallgatója vagyok.
Segítségüket szeretném kérni , hogy szoros határidőnkre ( nov.21) be tudjuk fejezni a szakdolgozatunkkat.
A probléma a következő:

A szakdolgozatunkban egy 9025-ös kontroller  és egy 9111 es keret fogad magába egy 9201-es kártyát , amivel analóg feszültséget szeretnénk mérni és az eredményt letárolni Real Time-ba.
A programunkba csináltunk egy Timed Loop hurkot , szinkronizáljuk a scan engine-el és egy txt-be kiírjuk az eredméyneket.
Amikor megnyitjuk a txt fájlt és kiszámoljuk a futási időből és a mintaszámból sosem kapjuk vissza az álltaunk beállított 1Khz-et.
Tehát nem tudunk mintaszámot és mintavételezési frekvenciát állítani , hiába állítjuk be az 1KHz-et.
kérem segítsenek.

0 Kudos
Message 1 of 6
(5,884 Views)

Kedves Benett!

 

Először is engedje meg, hogy figyemébe ajánljam a NI CompactRIO Developers Guide -ot. 

Az alábbi linken érhető el ez a CRIO-ra történő vezérlést, monitorozást megvalósító alkalmazások fejlesztéséhez részletes segítséget nyújtó (tan)anyag:

http://www.ni.com/compactriodevguide/

https://lumen.ni.com/nicif/us/infocriodevgudfull/content.xhtml

Ez alapján mind az FPGA szinten, mint a Real Time szinten történő programozás elsajátítható, megoldási javaslataimban én is erre fogok hivatkozni.

 

Tehát ahogy írta, a Timed Loop a Scan Engine-hez van szinkronizálva, és 1Khz-es frekvenciával fut. (Tehát 1 ms-os periódusidővel ismétlódik a benne levő kód.)

Ebben mintavételezik az analógfeszültség bemeneti csatoná(ka)t, és a mért értékeket szeretnék txt fájlba menteni.

 

Ilyen esetben érdemes úgy eljárni, hogy egy adatokat mintavételező (producer) loop-ban történik a mintavételezés. A mért értékeket egy RT FIFO-ba gyűjtjük, amit egy másik (consumer) loop-ban olvasunk.

A FIFO-ból kiolvasott értékeket pedig fájlba írjuk. Erre azért van szükség, mert a fájlba írás egy lassabb művelet, ami miatt nem fog teljesülni a kívánt 1KHz-es mintavételi frekvencia.

 

Az alábbi ábra szemlélteti, hogy mire gondolok, csak nem a TDMS VI-okat kell használni, hanem a bináris fájlba íráshoz szükséges VI-okat.

loops.png

Egyébként ez az ábra megtalálható a Developer Guide 30. oldalán.

 

Egy másik lehetséges megoldás, hogy RT FIFO-enabled shared variable-t használnuk a két loop (producer és consumer) közötti adatátvitelhez.

Ezt szemlélteti az alábbi ábra:

 

loops2.png

 

 

Egyébként elérhető egy NI CompactRIO Waveform Reference Library nevű VI csomag, amely a cRIO-val végzett adatgyűjtési feladatok megkönnyítéséhez készült, és a DAQmx VI-okhoz nagyon hasonló szolgáltatásokat nyújt.

Az alábbiakban olvashat erről bővebben: http://zone.ni.com/devzone/cda/epd/p/id/6206

 

Amennyiben további kérdése van, illetve nem oldódna meg a probléma, kérem lépjen velünk kapcsolatba az alábbi elérhetőségeken:

Szakmai tanácsadás: 06 80 204 704
Technikai kérdések: techsupport@ni.com
 

************************************************************************************************************************************************************************************************

English summary of Benett's problem:

 

Benett wants to read the analog inputs of the 9201 voltage module with 1 kHu sampling rate, in a timed loop, which is synchronised with the scan engine. (RT level)

After opening the txt file, he realised, that the sampling frequency is not 1 kHz.

 

I suggested him to go through the cRIO developers guide, and use producer consumer desing pattern or shared variables with RT FIFOs enabled.

************************************************************************************************************************************************************************************************

 

Üdvözlettel /Best Regards,

 

CLA, CLED
0 Kudos
Message 2 of 6
(5,861 Views)

Hi Benett!

 

Were you able to try out my suggestions? Did they help you? 

Please if your question is answered, mark it.

 

Of course if you have any questions, feel free to post them.

 

Best regards,

 

 

CLA, CLED
0 Kudos
Message 3 of 6
(5,824 Views)

Köszönöm a segítséget !

Thanks the help !

0 Kudos
Message 4 of 6
(5,820 Views)

Hasonló problémában szeretnék segítségek kérni.

 

Szintén Compact RIO-val két jelet vizsgálok. Az  egyikből 300Hz-en kapok analóg feszültség jelet 3db-ot (feszültség mérő kártyán keresztül) a másik jel pedig rs232-es porton ami 1HZ-es és számokat betüket tartalmaz (string típusú).Scan engine modban vizsgálom 1khz-en ami elegendő mind2 jel pontos vizsgálatához. A problémám az lenne hogy mindkét jelet szeretném egy fileba tárolni úgy hogy 1sor az 1Hz-es jelből és ezt követné 1000db az 1khz-es jelből és így tovább. Ha csak simán összekapcsolom őket és fájlba írom akkor 1000db -ot kapok mindkét jelből és az 1hz-es ből elegendő lenne a másodpercenkénti 1 adat. 

 

Az rs232es portot és a fesz mérő kártyának a 3portját is külön time loopban nézem és rtfifo-val továbbítom (mint ahogyan a példában is) a stringet átalakítom byte array-be mivel rtfifoba nem lehet stringet majd azt file ba írás előtt visszaalakítom. A file-ba írásnál case struktúrába feltételnek kötöttem egy Elapsed Time-ot 1másodpercre állítva hogy az 1Hz-es jelet csak 1szer írjam bele a fileba másodpercenként de ez sem segített. Próbáltam még a Quotient & Remainder -el is de úgy vettem észre hogy az nem nagyon működik 1000-es osztásnál sosem kaptam True értéket.  

 

Előre is köszönöm a segítséget.

0 Kudos
Message 5 of 6
(5,800 Views)

Kedves nbali!

 

Első kérésem feléd az volna, hogy szerkesztd az üzeneted és röviden fogalmazd meg a kérdést angolul is, hogy mások is használhassák a vaálaszokat. 

Illetve arra kérnéléek, hogy a későbbi post-okban angolul fogalmazd meg a kérdéseidet, válaszaid. (Hiszen a fórum nyelve angol.)

 

Szerintem az RS-232 üzeneteket shared variable-be tárold, nem hiszem, hogy 1 Hz-es frekvencia esetén szükség volna FIFO-re, elég ha mindig a lgutolsó, lgfrissebb adatot írjuk a fájlba.

A fájlba írásnál csinálhatsz egy számlálót, hogy hányszor tároltad el az 1 kHz-es jelet, és ha ez eléri az 1000-et, akkor a következő fájlba írásnál a shared variable értékét tárolod el.

 

Ha nem oldódna meg a probléma, akkor jelezd, vagy kérlek nyiss egy új témát.

 

************************************************************************************************************************************************************************************************

English summary of my suggestions for nbali's problem:

My suggestion on nbali's problem was, to use normal shared variabl (without rt fifo) instead of FIFO to store the data from the rs-232 communication.

Because he wanted to store 1 data from RS-232 and 1000 from the signal, I suggested him to use a counter, and after the counter reaches 1000, he could write the actual rs-232 data from the variable into the file.

************************************************************************************************************************************************************************************************

  

 

Üdvözlettel / Best Regards: 

 

CLA, CLED
0 Kudos
Message 6 of 6
(5,775 Views)