# 750-841 Modus Adressen Verständnisfrage



## magic (20 Juli 2019)

Hallo,

ich habe in meinem Haus eine Wago 750-841 verbaut. Damit mache ich die Regelung der Raumtemperatur, Puffersteuerung und ähnliches. 

Aktuell möchte das Projekt erweitern um eine Aufzeichnung und Visualaisierung der Werte mit Grafana und influxdb.  Den Zugriff auf die SPS möchte ich per Modbus realisieren. Was mit den Ein und Ausgängen auch schon problemlos funktioniert.

Was mich vor ein Problem stellt ist wie ich an Werte komme die nicht direkt auf Ein- oder Ausgängen liegt. 

z.B.  Berechne ich in einem FB aus einem 4-20ma Signal die reale Temperatur und schreibe sie auf ein Variable. 
Wie komme ich jetzt per Modbus an die Variable? Ich vermute es geht über einen Merker. Dazu habe ich schon mehrere Versuche gemacht, werde daraus aber nicht schlau.

Könnte mir bitte jemand ein konkretes Beispiel machen? Also Variable auf Merker legen und welche Modbus-Adresse dann das ist.

Schön wäre das Beispiel in ST.

Falls jemand einen Alternativen Weg kennt bin ich natürlich offen dafür.

Danke.


----------



## Dr.MirakulixX (21 Juli 2019)

Guten Morgen,

Du liegst richtig damit das du deine Variable Zwischenspeichern musst. Leider bin ich erst morgen wieder an einem Rechner mit Codesys zwecks Beispiel. Bei Wago habe die MW jedes ihre eigene Adresse. Diese findest du in der Beschreibung der SPS im Bereich der Modbus Beschreibung, soviel weiß ich gerade aus dem Kopf. Und worauf du achten musst, aber das ist dir sicherlich schon bekannt wenn du die I/Os abfragen kannst das du ggf einen Offset der Adresse verwenden musst. Einige Hersteller starten beim Rechnen mit der 0 als erste Adresse für Modbus andere mit 1.
Hoffe das hilft dir schon ein wenig weiter sonst wie gesagt kann ich dir morgen entsprechend was zusammen basteln. 
Schönen Sonntag


----------



## wolfi-sps (21 Juli 2019)

Hallo magic,

wie holt "Grafana und influxdb" die Daten ab? Ab Ver. 2.3.9.45 - glaub ich -  gibt im CoDeSys die Modbus-Master-Konfiguration. 
Mit der sollte das gehen.
Ich hol mit der Daten von meinen Pelletskessel ab- allerdings über RS232. Ist aber egal, da du das einstellen kannst.
In ST eine Var zuordnen die muss aber Global liegen.

Wolfgang


----------



## Thruser (21 Juli 2019)

Hallo,

der Modbus Mater Konfigurator wird nicht benötigt. Die 841 arbeitet schon in der normalen Konfiguration als Modbus Slave. Mit den Ein- und Ausgängen klappt es ja grundsätzlich schon wie Du schreibst.

Du mußt die Variablen auf Merker legen. Abhängig von Deinem Programm kannst Du sie direkt auf die Merker legen oder zusätzlich auf Merkervariablen kopieren.

Sonst am besten in die globalen Variablen:

```
dummy AT %MW0 : WORD;  (* MW0 -> Modbusregister 12288*)
```

Hier im Forum wird auch auf eine Excel liste gelinkt in der die ganzen Adressen den Merkern gegenübergestellt sind. Kann sie nur gerade nicht finden.

Zugriff dann unter anderem über die Holding Register Funktionen. Auch Bitzugriff (Coils) ist möglich. Auch dort ist die STartadresse 12288 für MX0.0

Gruß


----------



## magic (22 Juli 2019)

Danke für die Antworten

@wolfi-sps
Mit einem Java, ich muss aber noch eine passende Modbus-Library suchen

Momentan teste ich noch mit https://www.modbusdriver.com/modpoll.html


```
%MW100 := REAL_TO_WORD(zimmer[2].temp_linear.average);

./modpoll -m tcp 192.168.22.51 -r 12389 -c 1

-- Polling slave... (Ctrl-C to stop)
[12389]: 25
-- Polling slave... (Ctrl-C to stop)
[12389]: 25
-- Polling slave... (Ctrl-C to stop)
[12389]: 25
-- Polling slave... (Ctrl-C to stop)
[12389]: 25
-- Polling slave... (Ctrl-C to stop)
```

Damit klappt der Zugriff. 
Aber durch die Konvertierung von Real zu Word, wird Gleitpunktzahl anscheinend zu einem Integer. Also 24,5 --> 25.

Kennt dafür auch jemand eine Lösung?


----------



## Tobsucht (22 Juli 2019)

Hallo magic,

was für eine Lösung?
Wie willst du eine Gleitkommazahl anders in eine Ganzzahl wandeln?

Grüße


----------



## magic (22 Juli 2019)

Ich wollte damit sagen:

Wie kann ich den Real-Wert per Modbus lesen?


----------



## Thruser (22 Juli 2019)

Hallo,

bei Temperaturen und ähnlichen bietet es sich an den Wert erst mit 10 oder 100 zu multiplizieren bevor in Word gewandelt wird. Auf der Gegenseite muß dann entsprechend geteilt werden. Hat den Vorteil man benötigt nur ein Register.

Ansonsten kannst Du auch ein real auf ein MW bzw MD legen. Du mußt dann nur aufeinanderfolgende zwei Register lesen. Die lesende Seite muß dann nur aus den zwei Register (jeweils 16 Bit) wieder ein real (32 Bit) machen. Gelegentlich muß man dazu dann noch die Wörter tauschen, je nachdem wie ein 32 Bit real/float im Speicher abgelegt wird.

Gruß

PS: Wago 750-881 Modbus TCP Anfängerfragen in Beitrag 21 findest Du den Link zu der Excelmappe


----------



## magic (24 Juli 2019)

Danke. Ich versuche es mal so.


----------

