Modbus RTU in Twincat, wie anfangen?

damiche

Level-1
Beiträge
22
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe eine Beckhoff CX9010 mit EL6022 und einen Vacon Frequenzumrichter mit Modbus RTU Schnittstelle sowie die Schnittstellenbeschreibung.

Ebenfalls habe ich die Beckhof Modbus RTU Library.

Ich möchte dem FU einen Startbefehl senden, ebenso einen Sollwert und dann das Drehmoment und die Drehzahl zurückbeommen.

Lt. Doku des Umrichters liegt in Adresse 2107 (Modbus-Register 32107 und 42107) das Motordrehmoment in %.
In Adresse 2001 (Modbus-Register 32001, 42001) muss ich das Feldbus-Steuerwort binärcodiert schreiben, damit der FU läuft.

Der FU hat Slave-Adresse 1.

Wie fange ich an? Könnt Ihr mir auf die Sprünge helfen?
Ich habe ein Programm in FBS, aus dem ich das Programm für die Modbus-Kommunikation aufrufen würde. Dieses würde ich in ST schreiben, nur bin ich mir nicht im Klaren, wie ich anfange.

Wie muss ich im System-Manager die Variablen zuordnen?

Danke im Voraus!

Gruß
Michi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
gleiche Frage

Hi, ich sehe dass der Post schon recht alt ist. Habe aber das gleiche Problem, ich muss über EL6022 mit einem Slave über Modbus kommunizieren und weiß nicht ganz wo ich anfangen soll. Ich habe gesehen, dass es für KL6x22B vorgefertigte Funktionsbausteine gibt. Gibt es sowas auch für die ELs?
 
Es sind dieselben. Nicht von der Bezeichnung verwirren lassen: Dem Baustein ist es egal ob EL oder KL Klemmen dran hängen.
Entscheidend ist es, die Bibliothek richtig einzubinden und dann geht es (fast) wie von alleine ;)
 
@weißnix_, vielen Dank, dass sind gute Nachrichten.
Nach einer kurzen Pause solls jetzt wieder weiter gehen. Ich wollt die Klemme (EL6022) Konfigurieren bzw. die Baudrate usw. jetzt hatte ich den Funktionsbaustein "KL6configuration(...)" endeckt, allerdings heißt es in der Beckhoffhilfe:*
"Hinweis: Der Funktionsbaustein verwendet die bei KL-Klemmen übliche Registerkommunikation zur Konfiguration. Bei EtherCAT Klemmen EL ist diese Registerkommunikation nicht möglich. EL-Klemmen können mit Funktionsbausteinen aus der EtherCAT-Bibliothek konfiguriert werden (FB_EcCoeSdoWrite)."
Bei "FB_EcCoeSdoWrite" finde ich aber nicht die typischeb Parameter für serielle Kommunikation.
Kann mir noch jemand einen Tipp geben?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist auch klar das Du das da nicht findest. Der Baustein KL6configuration ist speziell für serielle Karten gedacht und hat dann natürlich auch Eingänge wie Baudrate, Datenbits, usw.
Der Baustein FB_EcCoeSdoWrite ist aber ganz allgemein zum Schreiben von SDO-Objekten in EtherCAT Klemmen da. Hier musst Du Dir aus dem Objektverzeichnis die gewünschten Objekte heraussuchen und diese dann jeweils einzeln schreiben. Für die Baudrate des ersten Kanals müsstest Du 0x8000 als Index und 0x11 als Subindex angeben. Außerdem musst Du noch die AMS.NetID des EtherCAT Masters und die Slave-Adresse der EL6022 Karte angeben.
 
Also Leutz, macht mal langsam.
Die Kommunikation mit einem Slave ist m.E. nicht so hochdynamisch, das man die serielle Schnittstelle laufend umparametrieren muß. Ich würde die Parameter der SS einmalig im Systemmanager (CoE-Parameter) festlegen. Eventuell ist es sinnvoll, gegenüber der Werkseinstellung geänderte Parameter als Startup festzulegen. Aber das sollte es doch schon gewesen sein.
Im laufenden Programm ändert sich nicht die Baudrate und auch nicht die Parität. Ergo: Spar Dir den Streßß, aus dem Programm auf die Konfig zuzugreifen (in diesem Fall).

Du willst Kommunizieren und dafür ist nur der Baustein ModbusRtuMaster in der (5 Byte oder 22Byte Version, je nach Klemmenkonfig) erforderlich.
 
Zuletzt bearbeitet:
Vielen Dank für die Tipps.
Die Antwort weißnix_ habe ich irgendwie überlesen, und ja da hatte ich mich wohl tatsächlich verrannt.

Nach längerer Pause hab ich mich jetzt wieder an das Thema gemacht, stecke aber schon wieder fest und dachte vielleicht kann mir jemand von euch auch hier wieder weiterhelfen.

Ich habe die Konfiguration im CoE-online Reiter verglichen und die default Einstellungen passen ganz gut. 9600 Baud und Datenframe 8N1 passen, nur Halfduplex muss ich enablen.
Im SPS-Projekt hab ich unter References die Tc2_ModbusRTU (und Tc2_Standard, Tc2_System, Tc3_Module).
Dann habe ich ein Programm erstellt in dem ich den Funktionsblock „ModbusRtuMaster_KL6x22B“ aufrufe. Hier ist mir nicht klar was man überhaupt mit dem FB macht, erstmal garnichts oder? Weil wenn ich dann die Aktionen zB. ReadInputsRegs aufrufe. Wird sowieso wieder ein kompletter FB geöffnet „ModbusRtuMaster_KL6x22B.ReadInputRegs“ der die gleichen Eingangs und Ausgangsparameter hat.
Naja, ich habe Ihm dann mal entsprechente Variablen zugewiesen. (UnitID := 1; Qauntity := 1, MBAdrr 4999; cbLength mit Sizeof(ModbusDaten) (Modbusdaten habe ich im gleichen Programm definiert.) pMemoryAddr mit ADR (ModbusDaten). Timeout einfach mal mit T#1s. Und Execute als NO den ich dann zum Test als True force.
Beim builden (es tut mir leid ich habe ein englisches Visio und bin mit den TwinCat Begriffen noch nicht so vertraut). Werden mir dann Instanzen von „ModbusRtuMaster_KL6x22B_0“ (der ModbusMaster FB wo ich nicht weis wofür er gedacht ist) und ModbusRtuMaster_KL6x22B_1“ der FB „ModbusRtuMaster_KL6x22B.ReadInputRegs“) erstellt. Diese habe ich dann über change link mit den I0 von meiner EL6022B erstellt.
Mein Problem ist, das jetzt nicht wirklich was passiert.
Das erste was mit Merkwürdig erschien, ist dass ich als ich das Programm neu erstellt habe kein Assingment and Busy machen konnte, beim ersten Versuch ging das noch.
Dann bekomme ich die Warnung „No initial value for const variable #stLibVersion_Tc2_Modbus_RTU“ (vielleicht liegt dort auch mein Fehler (nach Hinweis von)
Über andere Software oder auch über ein Terminal Programm (Hterm) kann ich den Slave problemlos ansprechen und bekomme die erwartete Antworten. Daher vermute ich den Fehler in meiem SPS Programm. Außerdem habe ich verstgestellt, dass weder mit den den Werten in der Instanz noch mit den Eingängen irgendetwas passiert, sie bleiben in der Online Ansicht immer Null.
(Als Hinweis, dass ist mein erstes TwinCat Projekt, also es kann auch gut sein, dass ich irgendwo einen groben Anfängerfehler begangen habe.)
Wen mir jemand nochmal einen Tipp geben kann, würde ich mich super freuen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bin jetzt von FUP auf ST umgestiegen und damit haben sich einige Probleme von oben selbst gelöst.
Gerne kann ich das Programm mal hochladen.
Wenn man noch daran dennkt am 9-Pol Stecker Tx und Rx zu Brücken, dann läuft es (hatte ich erst vergessen).
 
Zuletzt bearbeitet:
Hallo Tobias5,
ich habe mit ähnlichen Anfangsschwierigkeiten wie Du zu kämpfen. Könntest Du Dein Programm, wie angeboten, zum Download zur Verfügung stellen?
Danke und Grüße
Chreischei
 
OffTopic:
SChaut sich überhaupt noch jemand die Beispiele an?
Ich hatte auch gelegentlich so ein Problem. Da hab ich einfach erstmal die Beckhoff-Hilfe durchforstet und den Beispielcode ausprobiert.
Der war einfach an mein Problem anpassbar - Problem gelöst.
 
Hallo und zwar habe ich ein sehr ähnliches Problem und weiß nicht so recht wie ich anfangen soll Code für die Modbus Kommunikation zu schreiben.
Habe leider bei Beckhoff auch keinen Beispiel Code gefunden mit dem ich hätte rumspielen können.

@weißnix_ du meintest es gäbe welchen könntest du mir den verlinken ?

MfG

Christian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"Bei einer PC-Steuerung oder einer CX1000-Steuerung wird die verwendetet serielle Schnittstelle im TwinCAT System Manager mit dem Modbus-RTU Funktionsbaustein verknüpft."

Versteh ich das richtig, dass die ModbusRtuMaster_PcCom automatisch mit den RS232 Input und Output verbunden wird ? Ansonsten frage ich mich wie das geschehen soll. Bzw. wie man das am besten macht.
Und woher weiß das Programm welche Serielle Schnittstelle es nehme nsoll ?
 
"Bei einer PC-Steuerung oder einer CX1000-Steuerung wird die verwendetet serielle Schnittstelle im TwinCAT System Manager mit dem Modbus-RTU Funktionsbaustein verknüpft."

Versteh ich das richtig, dass die ModbusRtuMaster_PcCom automatisch mit den RS232 Input und Output verbunden wird ? Ansonsten frage ich mich wie das geschehen soll. Bzw. wie man das am besten macht.
Und woher weiß das Programm welche Serielle Schnittstelle es nehme nsoll ?
In dem Du die I/Os der gewünschten seriellen Schnittstelle im System Manager mit den passenden Variablen der gewünsten Instanz des FBs ModbusRtuMaster_PcCom verknüpfst.
 
Hast Du Dir denn schonmal die Hilfe durchgelesen?
Es ist zwar schon eine Weile her aber ich habe damals die Kommunikation zu meinem Stromzähler mit der Hilfe und dem Beispielprojekt hinbekommen.

Die Verknüpfung der Hardware mit der Software ist eigentlich in allen aktuellen .pdf-Hilfedateien ausführlich und fast idiotensicher beschrieben. Das war in den alten Hilfen noch nicht so.
 
Hallo Tobias5,

ich habe ebenfalls mit Anfangsschwierigkeiten zu kämpfen. Kannst Du bitte Dein Programm zur Verfügung stellen?

Betsen Dank im Voraus!

Adelic
 
Zurück
Oben