# MODBUS-Master-Konfigurator, Generischer Slave, Generische Variablen nicht änderbar



## tomrey (21 Mai 2019)

*750-889 per MODBUS mit node-red verbinden*

Hi all,
komme mit dem MODBUS-Master-Konfigurator nicht klar:
Möchte eine Modbus-Verbindung vom Master 750-889 zu node-red einrichten.
Habe bei Netzwerk-Konfiguration unter dem Master ethernet eingefügt und darunter einen generischen Slave.
Dem füge ich nun eine generische Variable zu und will diese konfigurieren.
Den Typ kann ich ändern.
Für Modbus-Adresse kommt das Unterfenster aber geänderte Werte weren nicht übernommen.
Im Feld Zugriff funktioniert zwar die Auswahlliste, diese speichert aber keine Änderungen.
Was kann da sein?

Mal angenommen, ich bekomme das mit eurer Hilfe gelöst, wie müsste ich dann den generischen Variablen die aus meinem Programm zuordnen ?
Evtl. in den .prg diese generischen Variablen zusätzlich/parallel zu meinen xDI und xDO lesen/beschreiben?
Oder meine xDI/xDO mit einem "slave-FB" verbinden?
Grüße


----------



## Tobsucht (22 Mai 2019)

Hallo,

über einen Rechtsklick/Adresse bearbeiten kannst Du den Funktionscode und die Modbusadresse konfigurieren.
Im Dialog Modbus Adresse kannst Du dann einen lesenden oder schreibenden Zugriff konfigurieren. Dazu wählst Du erst einen Funktionscode aus und trägst dann dezimal oder hexadezimal die Modbusadresse ein.
Bestätigst Du dann mit der Schaltfläche OK wird die Adresse übernommen, über Abbrechen wird natürlich Deine Eingabe verworfen.

Nach erfolgreicher Eingabe des Funktionscodes und der Modbus Adresse kannst Du den Zugriff auf lesend oder schreibend konfigurieren. Der gewählte Zugriff muss natürlich auch zum ausgewählten Funktionscode passen.
Bei einem schreibenden Funktionscode kannst Du zum Beispiel nur den Zugriff schreibend auswählen.

Grüße


----------



## tomrey (23 Mai 2019)

Hi Tobsucht,
vielen Dank, jetzt hab ichs begriffen - blöd wenn kein ok-Feld im Fenster ist.
Was ich noch nicht verstanden habe ist die Festlegung der M-Adressen.
Ich habe meine 889 als Master und will mit node-red auf einem Linux-Server verbinden. 
Diesen habe ich als Slave konfiguriert und das Ganze muß über M-TCP laufen, da node-red wohl kein M-UDP kann.
Dem Slave habe ich 2 Variablen zugeordnet, jeweils 1 word-array mit 20 Elementen als In und eines als Out.
Im Konfigurator kann ich beliebige Adressen eingeben aber wie habe ich trotz Studium der Anwendungshinweise nicht kapiert.
Bei denen geht es nur am Rande um "Fremdgeräte" zu den generischen habe ich nix praktisch verwertbares gefunden.
Im Netz gibt es zwar Anleitungen für andere Steuerungen mit node-red aber die arbeiten alle mit Codesys 3. und müssen wohl gar keine Adressen vergeben.
Auf meiner 889 läuft mein Programm, also muß ich wohl den Bereich der PFC-Adressen benutzen..?
Ich wäre Dir sehr dankbar, wenn Du mir bei diesem hoffentlich letzten missing link für mich mit Modbus helfen würdest.
Grüße


----------



## tomrey (23 Mai 2019)

Hier noch die screenshots dazu:


----------



## Tobsucht (23 Mai 2019)

Hallo,

Du kannst keine beliebigen Adressen im Modbus Master Konfigurator eingeben. Diese Adressen müssen schon im Slave vorhanden sein.
Bring nicht die lokalen Adressen mit den Modbus Adressen durcheinander. Der Controller soll ja auf Node Red und nicht auf sich selbst zugreifen.

Grüße

Edit:
Der generierte Code hat auch einen Fehlerausgang, den kannst Du dir auch mal anschauen.


----------



## tomrey (23 Mai 2019)

Hi, danke
doch das habe ich wohl durcheinandergebracht.
In node-red bin ich ja völlig frei irgendwelche Adresssen zu vergeben, da steckt ja keine HW dahinter.
Kann ich dann einfach durchnummerieren oder muß ich dafür die Längen der Variablen/Arrays berechnen?
Heißt das auch, daß ich meine bestehende Variablennamen aus meinen PRGs als Modbus-Variablen weiter nutzen kann oder muß ich neue Namen vergeben und z.B. in Modbus-Arrays "umfüllen"?

Ich sehe Licht am Ende des...


----------



## holgermaik (23 Mai 2019)

> Kann ich dann einfach durchnummerieren oder muß ich dafür die Längen der Variablen/Arrays berechnen?


Du musst schon die Länge mit einberechnen sonnst überschreibst du die Adresse im Slave.
in Deinem Beispiel schreibst du ModBusOutputs ab Adresse 2 20 Worte. d.H die nächste freie Adresse wäre 22.


> Heißt das auch, daß ich meine bestehende Variablennamen aus meinen PRGs  als Modbus-Variablen weiter nutzen kann oder muß ich neue Namen vergeben  und z.B. in Modbus-Arrays "umfüllen"?


Wenn du deine bestehenden Variablen weiter benutzt, kannst du nur mit FC 6 arbeiten. Dabei werden alle Variablen separat übertragen, was Zeit benötigt.
Ein Array hätte den Vorteil das alle Variablen mit FC16 in "einem Rutsch" übertragen werden. (maximal 125)

Holger


----------



## Tobsucht (23 Mai 2019)

Hallo,

Du kannst auch deine Variablennamen behalten und den Funktionscode 16 angeben. Wenn Du auf dem Datenpunkt Rechtsklick/Kommunikation/optimiert auswählst, dann optimiert der Konfigurator den Zugriff und fasst die nebeneinander liegenden Variablen in einem Zugriff zusammen.

Grüße


----------



## tomrey (24 Mai 2019)

Ok, danke,
nachdem die Kommunikation nicht klappt, (MBCFG_TCP_RTU_ERROR_0x96) habe ich wohl ein grundlegendes Problem mit meiner Architektur.
Ich dachte, der Modbus Master Konfigurator würde mir alle benötigten FB für mein Netzwerk erzeugen, stelle aber gerade fest, daß ich überhaupt keinen Master FB im Projekt habe sondern nur die generierten slaves. Müssen diese überhaupt auf meinem Master laufen oder gehören die in die slaves? Irgendwo im Netz müsste doch ein master-fb vorhanden sein??
Bei meiner Konfiguration (750-889 und node-red) sollte die 889 der master und node-red der slave sein - oder ?
Grüße


----------



## Tobsucht (24 Mai 2019)

Hallo Tomrey,

es gibt einen Master Baustein.
Der generierte Code ist sozusagen das virtuelle Abbild des Slaves. Im Code gibt es aber die Deklaration
 zz_MBCFG_MASTER_ETH :       MBCFG_MASTER_TCP;
Dies ist der Modbus Master der mit dem Slave die konfigurierten Datenpunkte austauscht.

Dein Fehler MBCFG_TCP_RTU_ERROR_0x96 gibt an, dass keine TCP/IP Verbindung zum Slave aufgebaut werden kann.
Hier kannst Du nochmal die IP Adresse und den Port des Slaves überprüfen und ob der Slave auch läuft.

Um den Slave zu testen bieten sich auch diverse Modbus Master Programme für den PC an.

Grüße


----------



## tomrey (24 Mai 2019)

Ah, ok dann ist der Master im Slave versteckt.
Zur TCP-Verbindung: kann es sein, daß Modbus nicht via VPN funktioniert?
Oder wäre dazu etwas anderes zu beachten?
(die 889 steht in Österreich, node-red hab ich auf meinem Laptop dabei)
Die Verbindung steht, Codesys funktioniert ja auch.
Grüße


----------



## tomrey (27 Mai 2019)

Danke, habe alles so wie empfohlen umgesetzt.
Bin trotzdem mit meinem Latein am Ende - es funktioniert nicht.
Ich habe jetzt 2 clients konfiguriert, 1x TCP für meinen Linux-server und 1x UDP für meinen Win7 laptop.
Ich versuche ein array mit 20 words per FC16 mit Startadresse 0 oder alternativ mit 12288 schreibend und ein Bool-array mit 20 Elementen per FC5 ab Adresse 40 lesend zu übertragen.
In node-red habe ich Gleiches spiegelbildlich mit FC4 und FC16 konfiguriert.
In beiden clients signalisiert mir node-red eine aktive Verbindung und es werden Daten übertragen, leider sind es nicht die erwarteten.
In Codesys wird weiterhin beim TCP client MBCFG_TCP_RTU_ERROR_0x96 angezeigt und es kommen keine Daten an.
Beim UDP-client wechselt die Fehleranzeige zwischen time out und no error aber auch da kommen keine Daten an.
Das gleiche Verhalten kann ich mit pyModSlave im localhost des win7 laptops nachstellen.
Mit dem qModMaster bekomme ich eine Verbindung zur Wago aber weder zum Linux-server noch zum win7 laptop.
Weder im linux-server noch im win7 laptop sind firewalls aktiv, der linux-server hängt im gleichen lan wie die Wago, der win7 laptop ist per vpn angebunden.
Weil ich gelesen habe, daß in linux die ports unterhalb 1024 zumindest früher nur mit root rechten funktionieren, lasse ich node-red als root-service laufen, bringt aber auch keine Änderung.
Vom Gefühl her besteht eine IP-Verbindung ohne daß die Übertragung auf TCP oder UDP funktioniert.
Wie gesagt, bin mit meinem Latein am Ende.


----------



## tomrey (27 Mai 2019)

Nachtrag:
Es erscheint mir absurd aber die node-red Verbindung zur Wago wird auch als aktiv dargestellt, wenn die Wago auf stop steht.
Sobald ich aber eine falsche IP-Adresse eingebe, verschwindet aktiv...


----------



## Thruser (28 Mai 2019)

Hallo,

so ganz komme ich mit Deiner BBeschreibung noch nicht klar.


> Ich versuche ein array mit 20 words per FC16 mit Startadresse 0 oder  alternativ mit 12288 schreibend und ein Bool-array mit 20 Elementen per  FC5 ab Adresse 40 lesend zu übertragen.
> In node-red habe ich Gleiches spiegelbildlich mit FC4 und FC16 konfiguriert.



Hast Du Node Red als Slave/Server konfiguriert?
Hast Du mal versucht mit z.B. qmodmaster vom PC aus versucht auf den Node Red Rechner zuzugreifen?

Kannst DU sonst noch einma die aktuelle Konfiguration zeigen, eventuell auch von Node Red?

Gruß


----------



## holgermaik (28 Mai 2019)

Hallo
Wenn ich dich richtig verstehe hast du einen Modbus Server (Node Red) auf Linux aufgesetzt und einen Client auf deiner Wago.
Fange doch erstmal klein an. 1 Register schreiben mit FC 6 und ein Register lesen mit FC 3.
Wenn das funktioniert ein Array schreiben mit FC16 und ein Array lesen mit FC 3.
Wenns läuft die Coils dazu mit FC 5 schreiben und FC 1 lesen.
Alles von der Wago aus gesehen.

Ich denke FC4 ist die falsche Wahl da du ja keine Input Register hast oder ich habe dich völlig falsch verstanden.
Holger

Adressen
Bei der Wahl der Adresse bist du völlig frei. Die 12288 wäre nur die Wahl wenn die Wago der Modbus Server ist.


----------



## tomrey (28 Mai 2019)

Danke Thruser und holgermaik, daß Ihr noch nicht mit mir aufgegeben habt.
Ich habe nachfolgend versucht den derzeitigen Stand möglichst komplett zu dokumentieren.
Ich fange mal mit einem Übersichtsbild an warum das Ganze und was ich will:


Wago und terra stehen am gleichen Standort, lb-tr ist ein laptop der per VPN an das lan angebunden ist.

Ich habe mir einen testaufbau überlegt um zwischen Master und Clients jeweils 1 array und 1 bool zu übertragen.
Nach enstprechenden Hinweisen aus dem Forum habe ich diese Übersicht erstellt:


und mittels Modbus-Master-Konfigurator wie folgt umgesetzt:


Das Testprogramm bindet die beiden generierten slave.prgs ein und deklariert die Variablen für modbus:



.....


----------



## tomrey (28 Mai 2019)

dazu die task-konfig:


Jetzt die node-red-Seite zunächst auf lb-tr dem laptop mit VPN:





...


----------



## tomrey (28 Mai 2019)

jetzt das selbe für terra (Linux-server):






...


----------



## tomrey (28 Mai 2019)

jetzt bilder vom node-red debug zur Laufzeit:


das habe ich nicht bestellt, s. Deklaration awMo nur in [1] der laufzeitzähler, alles andere leer
und hier die Sendung an wago:


leider sieht das auf der Wago-Seite online so aus:


jetzt noch wiresharks von terra und laptop:



demnach müsste doch alles richtig sein???


----------



## tomrey (28 Mai 2019)

zum Schluß noch die tasks online:


und jetzt Ihr!
Vielen Dank im Voraus denn dies sind meine ersten Gehversuche in Modbus und dabei will ich doch die ganze web-visu...


----------



## Thruser (29 Mai 2019)

Hallo,

das sehe ich mir tagsüber genauer an. Das Hauptproblem auf dem ersten Blick ist die Konfiguration der Node Red Knoten.

Begriffserklärung:
Master == Client
Slave   == Server

Master und Slave sind sehr verbreitet im Automatisierungsumfeld, bei Modbus wird standardmäßig aber Client und Server verwendet.

Du hast also auch die Node Red Knoten als Master (client) konfiguriert.

Gruß


----------



## tomrey (29 Mai 2019)

Thruser schrieb:


> Du hast also auch die Node Red Knoten als Master (client) konfiguriert.


Aha, soso, das ist mir nichtbewußt, denn ich bin ja vom Wago Modbus-Master-Konfigurator ausgegangen und damit war die Rollenverteilung für mich eigentlich klar:
Wago=Master, Rest=slaves.
Schaun wir mal, was Du sonst noch rausbringst - DANKE!


----------



## tomrey (29 Mai 2019)

Zwischendurch nachgefragt:
Kann es sein, daß ein Modbus-slave, also der "Server" gar keine Abfragen beim master machen kann, sondern immer nur auf Abfragen des masters antwortet?
Dann müsste ich ja die Wago als slave konfigurieren und node-red als master lassen?
Damit würde der Wago Modbus-Master-Konfigurator überflüssig und ich müsste in Codesys wohl mit irgendeinem slave FB arbeiten - richtig?
Wenn ja, wie muss ich dann meine Variablen aus den PRG nach Modbus bekannt machen?


----------



## Tobsucht (29 Mai 2019)

Ja, ein Server wartet auf eine Anfrage eines Clients und antwortet darauf.

Für den Slave auf dem 889 brauchst Du keinen Baustein.
Du kannst Variablen in der Steuerungskonfiguration unter Fieldbus Variables anlegen.

Die Modbusadressen ergeben sich aus der Speicheradresse. Das Handbuch hilft.

Grüße


----------



## holgermaik (29 Mai 2019)

Hallo 
dein Konzept stimmt so nicht.
Wenn ich mir deine Anforderung so durchlese würde ich folgende Konfiguration empfehlen:
Die Wago wird der Server. Das bedeutet hier musst du nur die Variablen veröffentlichen. Den eigendlichen Server bringt die Wago schon mit und er braucht nicht programmiert werden.
Hier würde %MW0 dann der Adresse 12288 entsprechen für Datentyp Word
IM Beitrag #21 Wago 750-881 Modbus TCP Anfängerfragen  ist eine schöne Tabelle verlinkt mit den Adressen.
Deine beiden anderen Teilnehmer werden Client und greifen nach Bedarf auf die Wago zu. So hälst du auch den Datenverkehr in Grenzen.
Die uID wird bei Server - Client nicht ausgewertet.

Holger

PS.
Um Missverständnisse zu vermeiden.
Von Master - Slave spricht man bei einer seriellen Übertragung.  z.B. Modbus RTU - der Master sendet eine Anfrage und der Slave antwortet
Server - Client ist Ethernet TCP oder UDP  - der Server stellt die Daten bereit und der Client kann sie abholen oder auch nicht.

Das Verwechseln bringt immer wieder Probleme. Ich persöhnlich finde auch die Bezeichnung im Konfigurator ungünstig gewählt.


----------



## tomrey (31 Mai 2019)

Vielen Dank Euch beiden, ich sehe Licht am Ende des Tunnels...!
Ich habe noch ein paar Detailfragen zur konkreten Umsetzung:

Was ist der Unterschied für die Benutzung zwischen den PFC- und den Merkervariablen?

Wo/wie deklariere ich die Modbus-Variablen am Besten:
- Ergänzung der bisherigen Deklarationen meiner Vars in den diversen PRG/FB?
- neue Liste in Global (analog Netvars)?
-Steuerungskonfig/Hardware? Dort sind wohl die Fieldbus=PFC und Flag=Merker - richtig? Wenn ich diese Variante nutzen würde, müsste die Deklarationen aller meiner bestehenden Vars neu machen oder Modbus-Vars zusätzlich deklarieren und dann "Umfüllen" -  stimmt das so?

Ich habe bei dieser Slave/Server-Konfig nirgends die Möglichkeit gefunden "optimiert" auszuwählen um das "Umfüllen" meiner bestehenden in neue Modbus-Register für z.B. F16 zu sparen.
Gibt es das nur bei Wago=Master?

Gibt es die Möglichkeit (welche FC23?) eine große gemeinsame Modbus-STRU anzulegen, die von allen Visu-Masters sowohl beschrieben als auch gelesen werden kann? Das Risiko gleichzeitigen Zugriffs sehe ich nicht. In der Steuerungskonfig kann ich kein ARRAY deklarieren geschweigen denn eine STRU...? Müsste ich das ARRAY of STRU im PRG aus/in DWORDS auf- und zudröseln?
LG


----------



## holgermaik (31 Mai 2019)

> Was ist der Unterschied für die Benutzung zwischen den PFC- und den Merkervariablen?




```
Temperatur_Eingangsword AT %IW0:WORD;
Temperatur_Merkerword AT %MW0:WORD;
Temperatur_Merkerword:= Temperatur_Eingangsword;
```
Mal am Beispiel einer Temperaturmesskarte
Temperatur_Eingangsword - wäre ein Inputregister (3x0000)
Temperatur_Merkerword - ware ein Holdingregister (4x0000)
Ob  du das Temperatur_Eingangsword jetzt im Programm, in einer Globalen  Variablenliste oder direkt in der Steuerungskonfig deklarierst macht  technisch gesehen hier kein Unterschied. Die Vor und Nachteile liegen in  der Hardware (wenn was dazu kommt oder wegfällt)



> Wo/wie deklariere ich die Modbus-Variablen am Besten:
> ..- neue Liste in Global (analog Netvars)?


Ich  persöhnlich würde eine neue globale Liste anlegen und umfüllen. Das hat  den Vorteil das du genau weist welche Variable in welchem Datenword  steckt. Das ist aber Geschmackssache. Du kannst auch deinen bestehenden  Variablen die im Programm verstreut liegen den Zusatz AT %MWxx  verpassen. Dabei verliert man allerdings bei vielen Variablen schnell  den Überblick. Technisch gesehen macht das keinen Unterschied.



> Ich habe bei dieser Slave/Server-Konfig nirgends die Möglichkeit  gefunden "optimiert" auszuwählen um das "Umfüllen" meiner bestehenden in  neue Modbus-Register für z.B. F16 zu sparen.
> Gibt es das nur bei Wago=Master?


Das ist Sache des Client wie  der die Variablen abfragt. Der Server antwortet nur. Wenn der Client  einen Block abfragt antwortet der Server auch mit einem Block. Wenn der  Client einzelne Var abfragt antwortet der Server auch einzeln.



> Gibt es die Möglichkeit (welche FC23?) eine große gemeinsame Modbus-STRU  anzulegen, die von allen Visu-Masters sowohl beschrieben als auch  gelesen werden kann? Das Risiko gleichzeitigen Zugriffs sehe ich nicht.  In der Steuerungskonfig kann ich kein ARRAY deklarieren geschweigen denn  eine STRU...? Müsste ich das ARRAY of STRU im PRG aus/in DWORDS auf-  und zudröseln?


Diese Möglichkeit besteht. Da aber Codesys 2.3 keine Union beherscht ist Handarbeit angesagt und rechnen.

```
TYPE Modbus :
STRUCT
    Word1:WORD;
    Byte1:BYTE;
    Fuellbyte:BYTE;
END_STRUCT
END_TYPE

VAR_GLOBAL
    Modbusvariablen AT %MW0:Modbus;
END_VAR

    Modbusvariablen.Word1 := meinWord;
    Modbusvariablen.Byte1 := meinByte;
```

Bei der Structur darauf achten, dass du immer ein komplettes Word zusammenbekommst -> siehe Füllbyte
Bei dem Beispiel wäre jetzt Word1 das Word0, Byte1 das Word1...
Das ganze lässt sich dann auch in ein Array verpacken.
Holger


----------



## tomrey (31 Mai 2019)

Hallo Tobsucht und holgermaik,
es ist geschafft, Modbus läuft sowohl vom Linux-Server lokal als auch vom win7 laptop per VPN.
Ganz herzlichen Dank, ohne Euch hätte ich das nicht geschafft!
@holgermaik:
Danke auch für die Detailerklärungen, den Unterschied zwischen Merkern und PFC bzw. input und holding Registern habe ich nicht verstanden. Wann nutzt man was?
Ich habe Testvars beider Art ausprobiert, gehen beide.
Zur Deklaration nutze ich momentan die Steuerungskonfiguration, werde aber vermutlich Deinem Vorschlag folgen und eine separate Globalenliste machen.
Nebenher habe ich eine EXCEL-Tabelle für die Speicheradressen.
Dabei habe fand ich es heute seltsam, daß die Adressen bei einzelnen Bitvars trotz 8 zu 1 genauso weiterlaufen wie bei Words.
Da muß ich noch ein wenig forschen.
Das Thema FC23 hat sich insofern erledigt als node-red das nicht kann.
Wünsche allerseits ein sonniges Wochenende!


----------



## tomrey (3 Juni 2019)

So, nach weiteren Tests brauche ich nochmal Unterstützung beim Ver- und Entpacken von Bool-Vars in WORD, falls jemand damit Erfahrung hat auch auf der node-red-Seite:
In der Steuerungskonfiguration bearbeite ich die bit-Kanäle, die ich ja dan einzeln im PRG ansprechen kann. Wie sieht das mit einem ankommenden WORD aus, wie wird das aufgeteilt?
WORD_TO_BOOL macht das wohl nur für das erste bool..
Auf der node-red Seite genau umgekehrt: Für das Entpacken habe ich einen node gefunden (Digital Input aus node-red-contrib-remote-io) aber fürs Packen vor dem Rücksenden an die 889 habe ich nix gefunden.
Habe ich den Unterschied zwischen Merkern und PFC bzw. input und holding Registern richtig so verstanden, daß PFC entweder les- oder schreibbar sind, die Merker dagegen les- und schreibbar?
Grüße


----------



## holgermaik (3 Juni 2019)

> daß PFC entweder les- oder schreibbar sind


Eine PFC Variable bezieht sich ja direkt auf die Hardware. Wenn du also eine Eingangskarte hast kannst du diese nur lesen. Ein Merker(word) kannst du lesen & schreiben.

Zum Packen auf der Codesys Seite

```
WordVar.0 - Bit0
WordVar.15 - Bit 15
WordVar.B0 - Byte 0
WordVarB1 - Byte 1
```
Ist sowohl les- als auch schreibbar.
Zu NodeRed kann ich leider nichts sagen


----------



## tomrey (4 Juni 2019)

holgermaik schrieb:


> Eine PFC Variable bezieht sich ja direkt auf die Hardware.


Das verstehe ich nicht, ich denke das ist lt. Steuerungskonfig doch ein eigener Feldbus-Variablenbereich...?


----------



## holgermaik (4 Juni 2019)

Von PFC Variablen spricht Wago immer bei direkter Adressierung. z.B. %IW, %QW, %MW, %IX, % QX.....
Auch der Feldbus aus deinem Bild ist ja direkt adressiert: %IW256. Der Unterschied zur Steuerungskonfiguration ist, dass die Verwaltung hier nicht vom Controller sondern vom Feldbus übernommen wird.


----------



## tomrey (16 August 2019)

Hi all,
bevor ich nun den Testbetrieb verlasse und "produktiv" werde, möchte ich Euch mein aktuelles Konzept nochmal zur Diskussion stellen, weil ich doch noch einige Unsicherheiten habe:
node-red verfolge ich als Visu-Ersatz nicht weiter sondern werde für die neue Visu und alles was nicht "SPS-geeignete" Verarbeitung ist, eine Modbus-Kopplung zwischen meiner 889 und einem raspi mit codesys v3 runtime machen. node-red kommt für die nicht "SPS-geeignete" Verarbeitung zum Einsatz also z.B. für die Steuerung eines Yamaha-AVR.

Nun zu Modbus:
Für die Visu benötige ich natürlich zunächst die aktuellen Zustände, die kann ich mir direkt von den physischen DO's holen.
Damit entfiele "Umfüllen" nach PFC-OUT - richtig? Sind demnach PFC-OUT nur für Variablen vorgesehen, die kein physisches OUT haben? 
Die Abfrage vom raspi mache ich mit FC1 mit Länge 160, damit habe ich alle phys. DO's erschlagen und spare mir "Umfüllen" von Bools in Words - richtig so?
Die Bedienbefehle vom raspi->889 mache ich per PFC-IN, indem ich meine vorhandenen "xVisuDI's" auf PFC-IN in einer neuen GVL mappe.
Dafür muß ich dann allerdings sämtliche VisuVar's aus den PRG und FB in eine GVL bringen (habe bisher nur die global, die von mehreren PRG/FB genutzt werden).
Die VisuVar's schicke ich dann vom raspi per FC5 ebenfalls alle auf einmal zur 889. Ist das korrekt und sinvoll so?
Offen sind "nicht-BOOL"-Vars:
Ich habe den Wago-scheduler mehrfach im Einsatz, der arbeitet mit einer VAR_INOUT vom "TYPE typSchedule":
Anhang anzeigen 46775

	

		
			
		

		
	
 und darin gibt es "TYPE typScheduleWeekly":
Anhang anzeigen 46776

	

		
			
		

		
	
deren Werte ich in der Visu ein-/ausgebe.
Die Visu dazu ist eine Visu-Vorlage aus dem Wago-Anwendungshinweis, die ich mit Platzhalter und Ersetzung für meine unterschiedlichen Timer in die bisherige Visu eingebunden habe.
Wie bekomme ich so ein Platzhalter/Ersetzungskonstrukt nach Modbus? 
Ich denke, dazu müsste ich mit MerkerVars für In-/OUT arbeiten aber wie bekomme ich die TYPE/STRU's nach Modbus?
Eine ähnliche Baustelle ist für mich die KNX-Heizugssteuerung. Dort arbeite ich aber nur mit Byte/Int und Real, mein Ansatz wäre diese ggf. in Word umgefüllt per Merker zu transportieren.
Für einen Zisternenfüllstand habe ich eine analoge Klemme mit einem Word, daß ich wieder direkt physikalisch abgreifen könnte (nur lesen).
Für die Bedienung von Rollos und Dimmern unterscheide ich zwischen kurzem und langem Tasten sowohl bei den xDI's als auch den xVisuDI's.
Dafür verwende ich den FB_kurzlang aus der Wago Gebaeude_allgemein.lib
Wie teile ich dem per Modbus einen langen Tastendruck mit?

Letzte Grundsatzfrage:
Das Ganze mache ich um:
-Die 889 von der Visu zu entlasten
-Die Visu per Codesys V3 unabhängig von Java wieder im aktuellen browser zu haben.
Kann ich erwarten, daß die neue abgesetzte Visu per Modbus mindestens genauso schnell ist wie bisher auf der 889?
(Der raspi hängt im LAN am gleichen giga-swich wie die 889 oder sollte ich den raspi direkt auf die 2. Ethernet Schnitstelle vom 889 z.B. mit gekreuztem patch-Kabel hängen?
Wie sollte ich den Modbus/Visu-Task auf dem raspi timen (z.B. freilaufend?)
Soweit ich das sehe, gibt es auf der 889 keine Einstellmöglichkeit für einen Modbus-task als slave/server - richtig?

Vielen Dank für Eure Hilfe und ein schönes WE


----------

