Ich verwende eine Wago 750-841, dort gibt es einen Modbus Baustein vn Wago, der die Kommunikation mit den unteren Schichten der Protokollebenen (Stichwort: OSI - Schichtmodell) übernimmt.
Der Baustein funktioniert so, dass ein Pointer in einer vorzugebenen Länge Bytes aufnimmt und versendet.
Da es ein ASCII - Zeichen ein Byte lang ist, würde ich die Zeichen in Textform übertragen.
Das Start- / Abschlusszeichen könnte man dann einfach davor / dahinter setzen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2010-06-23
Originally created by: lk-elektro
Hallo,
wenn, dann muss die ganz normale Standard-Lib für Serielle Kommunikation genutzt werden. Alles was bei Wago mit Modbus Seriell zu tun hat, ist RTU. Damit wird der ganze Header und alle Zeichen in Hex-Code verschickt.
Mobdus Ascii verschickt zwar auch Hexcode aber als ASCII.
Beispiel: ich möchte die Dezimal-Zahl 16 als Wert, Funktion oder Adresse verschicken.
Modbus RTU sendet: hex10
Modbus ASCII sendet: hex31 + hex30 -> die Asciicodes für 1 und 0
Wenn die Bausteine von Wago eine Schnittstelle haben, die es ermöglicht, die Funktionscodes und das Adressbyte anders darzustellen, dann kann es mit der Wago Lib klappen. Das geht aber meines Wissens nicht. Die Bausteine haben nur 1 Byte für Adresse und Funktion.
Was bleibt, ist anscheindend selber was basteln.
Trotzdem Danke für den Tipp!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Originally created by: lk-elektro
Hat jemand Erfahrung mit Modbus Ascii?
Gibt es vielleicht eine Bibliothek oder Sources dafür?
Hallo.
Welches Gerät benutzt du denn?
Wie sieht dein empfangenes Protokoll so aus?
Poste mal ein Auszug.
Gruß Schuero
Originally created by: lk-elektro
Hallo,
Modbus Ascii sieht genauso wie Modbus RTU aus. Die Zeichen werden nur als ASCII verschickt und sind damit mit einem Texteditor lesbar.
ASCII vs. RTU Beispiel:
Die Nachricht mit dem Befehl “Lese analoge Register vom Slave mit Adresse
17” würde wie folgt aussehen:
11 03 00 6B 00 03
Zuerst wird im ASCII Modus das Startzeichen “:” hinzugefügt, danach das
11 03 00 6B 00 03 7E CR LF
Jedes Zeichen wird nun als ASCII Zeichen behandelt und mit seinem
jeweiligen Hex Wert ersetzt
3A 3131 3033 3030 3642 3030 3033 3745 0D 0A
Diese Nachricht im ASCII Modus ist 17 Bytes lang
Die gleiche Nachricht in Modbus RTU würde heißen:
11 03 00 6B 00 03 76 87
Diese Modbus RTU Nachricht ist 8 Bytes lang.
Die Antwort ist analog aufgebaut.
O.K.
Soweit klar.
Ich verwende eine Wago 750-841, dort gibt es einen Modbus Baustein vn Wago, der die Kommunikation mit den unteren Schichten der Protokollebenen (Stichwort: OSI - Schichtmodell) übernimmt.
Der Baustein funktioniert so, dass ein Pointer in einer vorzugebenen Länge Bytes aufnimmt und versendet.
Da es ein ASCII - Zeichen ein Byte lang ist, würde ich die Zeichen in Textform übertragen.
Das Start- / Abschlusszeichen könnte man dann einfach davor / dahinter setzen.
Originally created by: lk-elektro
Hallo,
wenn, dann muss die ganz normale Standard-Lib für Serielle Kommunikation genutzt werden. Alles was bei Wago mit Modbus Seriell zu tun hat, ist RTU. Damit wird der ganze Header und alle Zeichen in Hex-Code verschickt.
Mobdus Ascii verschickt zwar auch Hexcode aber als ASCII.
Beispiel: ich möchte die Dezimal-Zahl 16 als Wert, Funktion oder Adresse verschicken.
Modbus RTU sendet: hex10
Modbus ASCII sendet: hex31 + hex30 -> die Asciicodes für 1 und 0
Wenn die Bausteine von Wago eine Schnittstelle haben, die es ermöglicht, die Funktionscodes und das Adressbyte anders darzustellen, dann kann es mit der Wago Lib klappen. Das geht aber meines Wissens nicht. Die Bausteine haben nur 1 Byte für Adresse und Funktion.
Was bleibt, ist anscheindend selber was basteln.
Trotzdem Danke für den Tipp!