| |
Fortgeschrittene ProgrammierungRe: Modbus in VB | | | Autor: Wöllmi | Datum: 29.04.03 18:56 |
| Hi redo,
also erstmal ist dies nicht ganz so einfach in 10 Zeilen bsp. Code zu fassen.
Da gibt ein paar grundlegende Dinge, die man verstehen sollte, um
dann auf einige Schwerpunkte konzentriert einzugehen.
Zuallererst sollte man sich mit dieser Unterlage mal etwas vertraut machen.
http://www.eecs.umich.edu/~modbus/documents/PI_MBUS_300.pdf
Modicon ist ja der "Erfinder" von Modbus und hier sind so einige wesentliche
Aspekte beleuchtet. Vielleicht ist ja schon einiges geklärt.
Weiterhin ein paar Basisausführungen:
1. Für MODBUS gibt es z.B. Ankoppelmöglichkeiten über RS232 und RS485
(weiterhin geht natürlich auch MODBUS über TCP/IP, sei hier aber nur
erwähnt)
2. Mal abgesehen von der Hardware der seriellen Schnittstelle ist das
Protokoll (die Befehlsbildung) identisch.
3. Ergo liegt eigentlich das Hauptproblem darin eine derartige Schnittstelle
zu bedienen und die gewünschten Befehle umzusetzen.
Weiterhin muß man sich darüber im Klaren sein, ob man MASTER oder SLAVE
spielen will!
Also will ich Befehle senden und die Antworten vom Slave bekommen, oder will
ich auf Befehle warten und darauf reagieren?
4. Die grundlegenden Befehle beziehen sich immer auf festgelegte Speichertypen
z.B. Coils, Holding Register, Input Register usw.
Dazu ist es natürlich erforderlich die Spezifika des Hardwareherstellers bzgl. der
konkreten Umsetzung zu kennen. Z.B. welche Daten entsprechen in der SPS vom
Hersteller XY den Holding Registers? Sonst kann ich zwar einen Befehl erzeugen,
aber habe keine Ahnung was ich da gerade auslese oder wohin ich was schreibe.
5. Die Erzeugung der CRC. Wie wird diese gebildet. Wie wird das ergebnis an den
Befehl angehängt.
Dann erst spielt die Umsetzung in die Programmiersprache eine Rolle.
Also eine Vielzahl von diesen Grundlagen-Fragen wird in dem genanntem Dokument
beantwortet. Die genaue Beziehung der relativen MODBUS Adressirung zur absoluten
Adresse eines Hardwareanbieters ist dann beim Hardwarehersteller zu finden.
Versuche also bitte einfach mal dein Problem etwas einzugrenzen. Evtl. kann ich ja
ein paar Hinweise geben
RTU, die Befehle werden binär übertragen, es wird eine CRC16 erwendet
Adresse: FF = Master, 01..FE= Slave, Adr: 00 = Befehl gilt für alle
Bsp.: CMD03 "0203000A0002E43A" = Read holding register
02 = Slave Adresse, 03 = Befehlsnummer,
000A = ab rel. Adresse 10 (&h0A) => Referenzadresse 40011 = 10 + 40001
0002 = Anzahl = 2 Register
E43A = CRC16 (&h3AE4) => erst LOW dann HIGH
'Wenn in sCMD das Bsp. CMD03 also "0203000A0002E43A" steht,
'einfach sCMDHex draus machen und ab auf die Reise über die RS232!
Dim iIdx as Integer
Dim sCMD as String
Dim sCMDHex as String
sCMD="0203000A0002E43A"
sCMDHex=""
For iIdx = 0 To Len(sCmd) / 2 - 1
sCmdHex = sCmdHex & Chr$(CInt("&h" & Mid(sCmd, iIdx * 2 + 1, 2)))
Next iIdx Viel Erfolg!
Tschaui
Woellmi | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|