Hallo Leute,
nun bin ich schon ein ganzes Stück weitergekommen.
Ich habe die AN27K22 MODBUS TCP Master/Slave XC/XV eingebunden und 3 FunctionCodes (2, 3, 16) über eine CASE-Schrittkette sequentiell aufgerufen um 1. Eingänge direkt zu lesen und 100 Merkerworte für die Kommunikation freigegeben (2. 80 worte Lesen, 3. 20 Worte schreiben).
Das Panel brauchte noch ein Firmwareupdate auf TargetFirmwareWinCE_V2.4.20.
Jetzt bin ich dabei successive im Codesys 2 die Can/Net-Kommunikatrion auf Modbus-TCP umzstellen.
Variablen und Routinen wie MyGetStruct.byModuleNumber, Net_, Get(byNetDrvNr, MyGetStruct.xNewDataReceived etc. müssen ersetzt werden.
Das Lesen aus der easyE4 funktioniert soweit.
Jetzt habe ich ein Verständnisproblem mit dem Schreiben.
Eigentlich brauche ich im Wesentlichen nur die Übertragung eines Störungquittierbits aus Galileo über die XV-102 softPLC an die easyE4.
Bei Betätigung der Schaltfläche auf der Galileo-Visu wird auch die Variable in der softPLC gesetzt.
Die Merker im Doppelwortberich 1 bis 38 sind in der easyE4 in Verwendung.
Wie kann ich eine softPLC-Bit-Variable an ein Merkerbit in der easyE4 weitergeben?
Wenn ich 80 Merkerworte lese entspricht das den MW1 ... MW80 in der easyE4.
Das entspricht den Merker-Bits 1 bis 1280.
Wenn ich 20 Merkerworte schreibe einspricht das MW 81 ... MW 100.
Das entspricht den Merker-Bits 1281 bis 1600.
Nun ist mir nicht klar, wir ich das in der easySoft adressieren kann. Es lassen sich scheinbar nur Merker-bits 1 bis 128 adressieren.
Wo denke ich faslch? Oder:
Wie kann man das richtig machen?
Mein Sendeaufruf zur Info:
--------------------------------
PROGRAM ModbusTCP
VAR
Comm1, Comm2, Comm3: MBM_COMMUNICATE; (*Instanz des FB *)
WriteRegisterMD :ARRAY[0..MB_MAXDATAWORDVALUE] OF WORD; (*Data-array for FCs that write Data (words)(FC 6,16,23)*)
[...]
--------------------------------
* XV-102 softPLC writing to easyE4 *)
Comm3 (
xStrobe:= StrobeMDW,
dwIPAddress:= MB_MakeIP(192,168,1,101),
wPort:= 502,
bUnitIdentifier:=001,
bFunctionCode:=16,
wOffset:=1081,
wCount:= 20,
wOffsetAdd:=,
wCountAdd:=,
warDataOut:= WriteRegisterMD,
xCloseImmediate:= TRUE,
tTimeout:= T#3s,
xBusy=> ,
iErrorCode=> ,
wDatacount=> ,
warDataIn =>
);
--------------------------------
Hat jemand einen Tip?
Schöne Urlaubsgrüße von Rügen,
Euer Ralf