Auswerten von Low- und High-Byte eines Word

Leider konnte ich auch nach einigem probieren noch keine Lösung finden, wie ich bei einem Modbus Register (Word) das Low- bzw. High-Byte einzeln auswerten kann. Zum Beispiel besteht eines der Register das ich lese aus einem Fehlerstatus (Low-Byte) und aus einem Kessestatus (High-Byte). Daher wäre es unsinnig den Wert als Word zu verarbeiten. Wenn ich aber als Einheit Byte in der Instanz wähle, kann ich nicht wählen welches Byte ich will, sondern ich bekomme nur das Low-Byte. Selbes Problem wird man vermutlich auch haben wenn man einzelne Bits aus einem Register (Word) auswerten will…

Am einfachsten wäre man könnte das entsprechende Byte/Bit wählen und ich kann für jedes eine eigene Instanz erzeugen.

Jemand eine Idee?

Danke

Hallo kann das aktuell nicht testen

aber sie Bild
Bildschirmfoto 2016-02-17 um 20.10.18.png

Als Type Byte wählen und so Adresse 0 == lowbyte Adresse 1 == highbyte

So kannst du 2 Instanzen anlegen

Gruß Jens

Danke, werde es nochmal versuchen, aber bisher bin ich davon ausgegangen dass es sich bei der Leseadresse um die bei Modbus übliche Register-Adresse handelt daher (16Bit Word) daher kann ich über Modbus keine einzelnen Bytes lesen. Ich müsste aber zumindest für dieverse Modbus Geräte sowohl Bytes als auch Bits eines Word einzeln interpretieren können.Ist dies nicht gegeben ist die Lösung leider mit diversen Modbus Geräten nicht kompatibel mit denen ich beruflich zu tun habe…

Beispiel:

Register#___Byte#____Inhalt
1__________0_______Fehlerstatus
___________1_______Kesselstatus

mfg

hier ist eine superDoku Punkt 1.3 Aufbau Modus bytes

https://www.gossenmetrawatt.com/resources/me/sineax_cam/modbus_basics_d.pdf

über Modbus

Viel erfolg

Danke, ich arbeite bereits seit über 10 Jahren mit hunderten verschiedenen Modbus Geräten beruflich…

Da würde ich dir ehrlich gesagt eher die original Spezifikation empfehlen:

Modbus Specifications and Implementation Guides

Es gibt laut Spezifikation Seite 5-6 wie von mir erwähnt nur die Möglichkeit Register oder Bit-Werte zu adressieren.

Was ich leider nicht verstehe ist wie Symcon an der Stelle arbeitet und ich eben ein Register (16 Bit) lesen kann und die Bytes eben einzeln interpretieren kann da dies für viele Geräte zwingend erforderlich ist.

Ja Jetzt ist mir dein Problem klar geworden ,

habe es nachgestellt … verdammt

Adresse bei IPS ist immer die Register Adresse

Also die variable in Hex Wandeln und auseinander nehmen :Eck:

Gruß Jens

So mit Stellenverschiebung in einem Script könntest Du auch weiter kommen.
So wie ab diesem Beitrag im Pokeys gemacht. Ev. kann ich Dir mit einem Beispiel helfen.

Gruß Helmut

Jetzt fühle ich mich verstanden, danke :slight_smile:

Wollte zwar nicht gleich von Anfang an mit Scripten arbeiten bei solchen einfachen Dingen aber wenn es nicht anders geht…

So, für einen Modbus Slave konnte ich nun das Problem lösen indem ich das angeschlossene CAN auf Modbus Gateway entsprechend umprogrammiert habe und nun jeden Byte-Wert einzeln in ein eigenes Register geschrieben wird.
Da ein Byteswap der Temperaturwerte (Word-Werte, High-Low-Byte Swap) nur für alle Werte eines Modbus Gateways und nicht pro Wert einfach in IPS einzustellen war, musste ich dieses auch gleich im Gateway erledigen.

Mit der Wetterstation von Elsner habe ich jetzt leider das selbe Problem.

Wieder ein Register mit unterschiedlichem Dateninhalt für Low- und Highbyte… Hier kann ich aber die Wetterstation nicht umprogrammieren.

Register#___Byte#____________Inhalt
12_________0(HighByte)_______GPS
12_________1(LowByte)_______Regen

Es ist für mich extrem ärgerlich das IPS nicht in der Lage ist die Daten auf einfache Weise richtig zu interpretieren. Bin mir noch nicht sicher ob das IPS wirklich ein guter Kauf war…
Ich würde mir gerne einiges Arbeit ersparen die Daten der Wetterstation über die Wago-SPS zu schleifen um IPS dann jedes Byte einzeln in einem Register zur Verfügung zu stellen damit es dort verarbeitet werden kann, daher wäre ich wirklich dankbar um ein Beispiel.