TIA Modbus TCP 2 Word in Real

helije

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

Ich frage Energie Werte von Janitza Energiezähler über Modbus TCP ab.
Ich benutze dafür Modbus TCP Client, und Kommunikation funktioniert.
Janitza schreibt in Register Werte in Float (32 Bit) Datatyp und Ich bekomme alle Werte in Data Puffer in Word Datatyp.
Jetzt muss ich 2 Word irgendwie kombinieren und in Real umwandeln.
Z.B. U=230,57V

Habt ihr eine Idee?
Bitte um Hilfe

Danke im Voraus
 
Wenn du nur Reals hast, dann kann der Modbus-Client Baustein auch ein Array[n..m] of Real verarbeiten, dann musst du garnichts mehr umwandeln. Habe ich gerade bei den Janitza Geräten schon genau so gemacht.

Ansonsten gibt es mehrere Möglichkeiten, z.B. die einzelnen Bytes mittels Slice Zugriff in ein Array[0..3] of byte zu kopieren (#barr[0] := #Word_lo.%B1 usw.), und dann die Funktion "Deserialize" mit dem Array aufzurufen. Gibt noch etliche weitere Varianten mehr.
 
Bei manchen Kombinationen muss man noch die Byte- oder die Word-Reihenfolge swappen. Versuch macht kluch.
 
Meine Vorgehensweise für gemixte Varianten ist ein UDT zu nutzen. Damit werden die Werte nicht in einem Array abgelegt sondern bereits in der Endstruktur im DB. Somit entfällt fast jede weitere Auswertung, es sei denn, wie Ludewig schon schrieb, es wurde die Reihenfolge verdreht.
 
wenn ich richtig verstanden haben, ich soll nur Array [0...100] in REAL verwenden statt Array in Word?

wenn nicht, kann mir jemand Beispiel geben wie ich das in Real bekomme

Danke
 
Hallo,

hier mein Fall,
ich bekomme DP (230,724) von Gerät über Modbus TCP mit Tool "ModbusPoll" (siehe Bild). Wie bekomme ich dieses Wert auf S7-1200. Hier auch meine Parameter, Data Puffer und Einstellungen (siehe Bilder)
Was mache ich falsch? Kann mir jemand bitte helfen?
Danke
Connect.jpgConnect.jpgModbuspoll.jpgModbus_Client1.jpgModbuspoll1.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Deine Bilder verwirren mehr als das sie helfen, ich verstehe Dein Problem nicht mehr.
Das erste, doppelte zeigt den Status 7005 (senden), das Teilnetzwerk aber 7006 (lesen). Das passt nicht zusammen.

Eine Konfiguration vornehmen, diese Daten und Ergebnis mit der eigentlichen Frage bitte posten.
 
wenn ich richtig verstanden haben, ich soll nur Array [0...100] in REAL verwenden statt Array in Word?

wenn nicht, kann mir jemand Beispiel geben wie ich das in Real bekomme

Ja, einfach so machen. Du musst keine Bytes mehr drehen oder dergleichen, passt direkt. Zumindest erhältst du dort sinnvolle Werte solange du in den Registern die du liest auch ausschließlich Real-Werte hast.
 
Meine Vorgehensweise für gemixte Varianten ist ein UDT zu nutzen. Damit werden die Werte nicht in einem Array abgelegt sondern bereits in der Endstruktur im DB. Somit entfällt fast jede weitere Auswertung, es sei denn, wie Ludewig schon schrieb, es wurde die Reihenfolge verdreht.

Wenn ich das richtig in Erinnerung habe, dann muss der Parameter zwingend ein Array sein. Außer das hat sich z.B. mit einer Version bei TIA V16 geändert?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Frage: wie kann ich gleiche Wert (230,6V) wie bei Modbuspoll bekommen?
Wenn ich online Funktion beobachte, Modbus Client macht ständig 7004-->7005--->7006

Ich bekomme leider mit dieser Konfiguration folgende Werte, damit kann ich leider nichts anfangen
Datapuffer.jpg
 
Also oben im Screenshot sehen die Aktualdaten der Adresse anders aus. Du kannst bei anstehendem Request die Parameter nicht ändern, bzw. dann ändert sich nichts. Du musst REQ auf false, dann kannst du ändern, und dann wieder aktivieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
damit ich schnell testen kann, habe ich mir an HMI die 3 Variablen (Mode, Adresse und Len) erstellt.
ich gebe die 3 Parameter über HMI ein, und das funktioniert, Datapuffer ändert sich auch dementsprechend
 
Ok, ich habe da andere Erfahrung gemacht, aber evtl. gibts da andere Versionen.

Was für ein Janitza Gerät ist das denn welches du lesen willst?

Hast du schon mal die Adresse 34881 die auch in Modpoll angezeigt wird versucht?
 
wie muss ich Modbus Client parametrieren, damit ich folgende Register abfrage:
FC 04
Adresse: 4880
Datatyp: Float
LEN: 2

Ergebnis in Tia soll sein 230,6 (REAL)
 
Zurück
Oben