LabVIEWForum.de - MODBUS-RTU_RS-485_Ni9871

LabVIEWForum.de

Normale Version: MODBUS-RTU_RS-485_Ni9871
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe LabVIEW-Gemeinde,
ich möchte gerne einen Aktuator über die RT/FPGA ebene ansteuern. Als Schnittstelle dient die RS-485 mit MODBUS-RTU. System: cRIO 9075 mit Ni 9871 RS-485) und NI 9215 (Spannungsmesskarte).
Viel Erfahrung habe ich noch nicht mit LabVIEW, daher fallen mir derzeit noch einige Dinge etwas schwer. Ich habe einige Modbus-libs bei NI gefunden. So wie es aussieht laufen die jedoch nur bis max RT Ebene, so dass mir der Zugriff auf die FPGA ebene verwehrt bleibt.
Diese habe ich gefunden.

https://decibel.ni.com/content/docs/DOC-30140

http://www.ni.com/example/29756/en/#reviews

Gibt es eine Lib bei der auch der Zugriff auf den FPGA möglich ist? Oder ist es sogar mit den aufgeführten möglich?

Zum Funktionstest habe ich das Beispiel genutzt:
http://www.ni.com/example/31166/en/
Nach Anpassung auf das entsprechende Modul funktioniert dies auch soweit.

Jetzt ist der Punkt gekommen an dem das Programmdesign ansteht und ich mir in einigen Dingen nicht ganz sicher bin. Probleme offenbaren sich da mir vor allem mit timing und Regelung. Daher erhoffe ich mir hier den einen oder anderen guten Tip bzw. Ratschlag zu erhaschen, der mich auf den Richtigen Weg führt.

Problem 1: Über die Spannungsmesskarte soll ein Schwellwert erfasst werden und den Aktuator steuern (Das Einleiten der Gegenrichtung muss so schnell wie möglich sein)
Ablauf:
1. Der Motor fährt los.
2. Ab 0,5 V sollen Werte aufgezeichnet werden (Spannung und Position vom Aktuator)
3. bei 5 V soll die Gegenrichtung eingeleitet werden.
4. Werte < 0,5 V Aufzeichnung wieder stoppen
5. (Die Werterfassung soll in verschiedenen Messfrequenzen (bis 1500kHz möglich sein)
Fragen:
Da die Messfrequenz > 1000 kHz liegt scheidet Scan Engine aus?
Lasse ich die Abfragen auf der FPGA ebene auswerten und den Befehl zum Einleiten der Gegenrichtung ebenfalls vom FPGA senden oder schicke ich diese erst an die RT und zurück an den FPGA?
Reichen für die Anwendung while schleifen (auf dem FPGA) oder muss ich hier mit Zeitgesteuerten Schleifen arbeiten?

Vielen Dank für schon im Voraus für eure Antworten und Anregungen
Cheers
Ich vermute du meinst eine Samplingrate von 1,5 kHz? Für das cRIO gibt es aktuell kein Modul welches 1500 kHz Samplingrate kann.
Man kann mit der Scan-Engine auch mehr als 1 kHz realiseren aber davon ist im Allgemeinen abzuraten.
Wenn man die Scan-Engine für die Erfassung des Analogsignals außen vor lässt, müsstest du folgendermaßen vorgehen:

1. Sampling des Analogsignal und Signalisierung von Schwellwertüberschreitung an RT (z.B. über Interrupt)
2. Versenden der notwendigen Kommunikationsbefehle über die direkte VISA-Einbindung deines seriellen Moduls (Scan-Engine Support)

Für die Schleifen im FPGA sind While-Schleifen mit Metronom vollkommend ausreichend.
Moin Holy,

danke für die Antwort.


Sorry hab mich verschrieben...meinte 1,5 kHz! Blush

Mit direkter VISA-Einbindung meinst du das nutzen der Modbus-lib auf der RT-Ebene?
Kann ich die Kommunikation denn teils "selbst" bewältigen wie im oben aufgeführten Beispiel und dies dann noch mit der MODBUS-lib auf RT-Ebene kombinieren?

edit: Hab grad mal Rücksprache mit NI gehalten....dort sagte man mir, dass eine Kombination von VISA mit selbstgeschriebenen FPGA-code nicht möglich ist, es sei denn man unterbricht das FPGA-Programm...was für mich auch soweit Sinn macht.

Cheers Brainbug
Also ich denke einie Implementierung des Modbus-Protokolls direkt im FPGA ist prinzipiell nicht unmöglich aber denke ich nicht wirklich sinnvoll. Daher der Vorschlag das Modul im Scan Engine Mode zu betreiben und damit direkt auf RT-Ebene mit VISA zu arbeiten und damit letztendlich auch direkt mit den verfügbaren Modbus-Implementierungen.
Hinsichtlich des Einwandes von NI ist es korrekt das du dieses Modul entweder direkt im FPGA oder per Scan Engine einbinden kannst. Was aber trotzdem geht ist die Kombination von Einbindung des seriellen Moduls über Scan Engine und Verwendung des analogen Moduls über FPGA.
Kann es dann nicht zu timing Problemen kommen, wenn ich beide Module in unterschiedlichen "Modis" betreibe?
Und wenn ich die Scan Engine nutze falle ich dann nicht wieder unter meine 1,5 kHz? Der Motor muss schnellst möglich reagieren.
Nein es gibt deswegen keine Timingprobleme. Der Scan-Engine Support für das serielle Modul bedeutet, dass innerhalb der Scan-Engine die sonst übliche Einbindung des seriellen Moduls erfolgt und im RT-Teil dieses dem VISA untergejubelt wird. Ist nur bedingt vergleichbar mit Scan-Engine für analoge und digitale Module.
Die Ansteuerung erfolgt ja über Modbus und daher ist der limitierende Faktor eher die Baudrate etc. Hinsichtlich der Schwellwertermittlung kannst du ja im FPGA direkt mit der maximalen Abtastrate deines analogen Erfassungsmoduls arbeiten und eine Schwellwertverletzung per Interrupt dem RT mitteilen. Hier versendest du bei auftreten des Interrupt direkt die notwendigen Befehle per Modbus.
Referenz-URLs