Hallo,
um externe Messwerte in die UVR16xx reinzubekommen, habe ich den Weg über den Modbus vom C.M.I gewählt.
Mit einem Modbus/TCP-Slave Server z.B. ("diagslave"), der auf dem Raspi läuft, lässt sich z.B eine UVR16xx, RSM610 oder CANIOxx über C.M.I über Modbus/TCP übers Netzwerk mit der Aussenwelt verbinden.
Ich hab mir inzwischen eine C.M.I für meine UVR16xx Steuerungen zugelegt und bin fleissig am erkunden der vielen Schnittstellen, Busse und Protokolle.
Das übertragen der Funktionsdaten von TAPS2 in die Steuerung und vieles andere ist mit der C.M.I sehr komfortabel geworden
und die meisten Programme dazu sind auch in Linux verfügbar.
Im C.M.I arbeitet ein ModBus/TCP-Master-Server, der über die ModBus-Eingänge 64 analoge und 64 digitale Werte einlesen kann.
Über die ModBus-Ausgänge können die analogen und digitalen Werte ausgegeben werden.
Für meine Solar und Heizungssteuerung hab ich zum Testen die Werte vom Lamdacheck in die UVR16xx übertragen. Damit können in der UVR die Werte vom
Abgassensor, Restsauerstoff usw. des Lambdachecks verwendet werden, obwohl z.B. kein Abgassensor an der UVR hängt, man spart sich doppelte Sensoren durch
Mehrfachverwendung von Sensordaten.
Eine weitere wichtige Anwendung ist für mich das Versorgen von meinen Test-UVR16xx im Testumfeld mit Echtdaten, also mit Sensorwerten vom produktiv-System vom produktivem CAN-Bus.
Das Testumfeld mit eigenem CAN-Bus kann ich wie ein Simulator mit Echtwerten betreiben. Z.B wenn ich im Testumfeld einen bestimmen Wert benötige, den mir die Prod-Anlage grad nicht liefert,
dann überschreibe ich zum testen auf dem Raspi im Modbus/TCP-Slave Server einfach das entprechende Modbus-Register mit dem benötigten Wert für den Testfall (ist wie ein digitales Simboard).
Mein Ziel wird sein: Mit einem Python-Script gespeicherte produktiv-Werte von einem ganzen Tag im Zeitraffer im Test-UVR16xx durchzuspielen.
Damit kann z.B ein ganzer Tag im Testsystem simuliert, mit gespeicherten Logdaten beliebig oft nachgefahren werden, um z.B. einen Programmfehler zu finden
oder komplexe Funktionsbausteine besser zu verstehen.
Weiterhin hab ich zum testen an den Modbus/TCP-Slave Server der auf dem Raspi läuft den iobroker angeschlossen, um dort die UVR-Werte weiter zu verarbeiten,
oder von dort Werte zur UVR zu schicken.
Bevor die externen Werte von den ModBus-Eingängen über die C.M.I zur UVR16xx übertragen werden können,
ist ein sorgfältiges Mapping der C.M.I Ein- und Ausgänge vom Modbus zum CAN-Bus und zu den Netzwerkeingängen der UVR16xx notwendig.
Diese Arbeit ist sehr aufwendig, muss aber nur einmal gemacht werden und sollte dokumentiert werden um später noch einen Überblick zu haben
woher oder wohin die vielen Werte von und zum Modbus ihren Weg zur UVR16xx nehmen. Bei der Fehlersuche ist eine Dokumentation dieses Mappings auch sehr hilfreich.
Da die über den Modbus übertragbaren C.M.I Werte nur einen kleinen Teil der zur Verfügung stehenden Modbus-Register belegen,
habe ich bei mir grosszügig die Adressen der verwendeten Modbus-Register im ModBus/TCP SLAVE-Server auf dem Raspi ausgewählt.
C.M.I Modbus-Ausgang-Analog Adresse 1-64 für Analog Ausgänge unit 1 zur Adresse 101-164 Modbus-HoldingRegister schreiben mit Funktion 06
C.M.I Modbus-Eingang-Analog Adresse 1-64 für Analog Eingänge unit 1 von Adresse 201-264 Modbus-HoldingRegister lesen mit Funktion 03
C.M.I Modbus-Ausgang-digital Adresse 1-64 für digital Ausgänge unit 1 zur Adresse 301-364 Modbus-Coils schreiben mit Funktion 05
C.M.I Modbus-Eingang-digital Adresse 1-64 für digital Eingänge unit 1 von Adresse 401-464 Modbus-Coils lesen mit Funktion 01
Wenn der "diagslave" auf dem Raspberry Pi im TCP-Mode gestartet ist und das Mapping im C.M.I fehlerfrei ist, beginnt der C.M.I sofort mit der Datenübertragung (schreiben und lesen)
der Modbus-Register und coils) zum ModBus/TCP-Slave-Server auf dem Raspberry Pi.
Ich habe zum Testen und Programmieren auf dem Raspberry Pi die Python Modbus Pakete pyModbus und pyModbusTCP installiert.
Dazu gibt es eine pyModbus.console mit der man sich als Client an den ModBus/TCP-Slave-Server auf dem Raspberry Pi connecten kann und Modbus-Register lesen und schreiben kann
oder man programmiert sich mit einem Python-script einen Python Client zum individuellen auslesen und schreiben der Modbus-Register.
Der ModBus/TCP-Slave-Server auf dem Raspberry Pi lässt sich mehrfach connecten.
Z.B. lassen sich auch SmartHome-Systeme, wie iobroker direkt an den "diagslave" anschliessen.
Im iobroker muss dazu der Master-Mode im modbus-adapter gesetzt werden und die ipadresse vom "diagslave" eingetragen werden
und ein mapping (konfigurieren) der verwendeten Modbus-Register auf die Adressen im iobroker durchgeführt werden.
Dann beginnt der iobroker nach start der modbus-Instanz auch sofort mit der Datenübertragung der UVR16xx-Werte. Die Objektstruktur für die Modbus-Register
Werte wird intern angelegt und steht sofort zur Verfügung. Wenn man diese Struktur aufklappt, dann sieht man sofort die aktuell übertragenen Werte
und kann durch farbliche Markierung der einzelnen Felder ein Update der einzelnen Werte verfolgen.
Gruß
Jürgen