Hier lese ich aber wie gesagt nur die Analogwerte aus und das auch erst bei Adresse 400001 beginnend.
erst ab Adresse 400001 - Dazu hat der Captain ja schon geschrieben das Siemens 400001 = Adresse 0 bei Modbus ist. In der TIA-Hilfe ist eine Tabelle, da steht es beschrieben. Also liest Du nicht erst bei Adresse 400001 sondern tatsächlich bei 0 bzw 1 bei Wolf. Die 400000 davor dienen Siemens nur dafür um eine "Kodierung" einzufügen damit zwischen Coils und Holding Register unterschieden werden kann.
Meine Frage wäre jetzt noch wie komme ich an die Digitalwerte?
Soll ich dazu das Ganze im Master_comm[2] machen mit der DATA_ADDR 1? Oder wie sollte ich das anstellen?
Genau. DATA_ADDR 1 bei Mode 0 liest die Bits/Coils, also die digitalen Werte.
(Anmerkung: Du hast die DATA_LEN bei den Halteregistern auf 255 stehen. Die wird er nicht alle einlesen, eventuell im Status ein Fehler stehen, obwohl Werte ankommen. Du darfst nur 125 Wörter lesen und müsstest für 255 dann 2 Abfragen erstellen. Da Wolf aber weniger als die 125 anbietet dürfte das bisher nicht auffallen.
Bei Bits dürfen es, öh, 20**? Bits sein, werden aber ja auch nicht so viele benötigt.)
Ob Du es im Comm[2] liest oder ob Du die DATA_ADDR und den Empfangspuffer veränderst bleibt Dir überlassen. Denke nur daran das immer nur eine Abfrage aktiv sein darf, also der aktive muss fertig sein, dann erst den nächsten Auftrag anstossen, und das hier dann scheinbar ja im Wechsel. Es sei denn es muss noch geschrieben werden, dann hat man bereits 3 Aufträge, 4 wenn Digitale und Analoge Werte gelesen und geschrieben werden.
Als Orientierungshilfe:
Ich erstelle in meinen Programmen für jeden Auftrag einen eigenen DB (bei Dir Comm[1], Comm[2]), damit es übersichtlicher bleibt, besonders bei der Fehlersuche, und für die Steuerung dann hierfür eine Integer-Variable welche ich bei jedem Done um 1 addiere, also als Zähler (vorletztes Netzwerk als P_Trig alle Done als Oder einfügen). Die Aufträge arbeiten dann immer nur wenn Variable=X und am Ende des Bausteins (letztes Netzwerk) wird einfach abgefragt ob die Variable >=4 ist (bei 3 Aufträgen) und dadurch auf 1 gesetzt. So kann ich jederzeit Aufträge hinzufügen und muss nicht alle überarbeiten. Im Panel kommt dann noch ein Button "Kommunikation aktivieren", der die Variable auf 0 legt bei Inaktiv und auf 1 bei aktiv, Gestaltung mache ich so das der Button grundsätzlich als aktiv angezeigt wird, dann aber dynamisch bei 0 als grau. So sind alle aktiven Aufträge abgedeckt, falls die Kommunikation unterbrechbar sein soll.