Działa!!! Drugi kontakt z Wago rozwiązał problem. Dla wszystkich potomnych. W sterowniku Wago PFC 200, wyłączono bezpośrednie pisanie do zmiennych MX... A eCockpit ma własny serwer Modbus. Tak więc jak będziecie instalowali powyższą blibliotekę nie wystarczy usunąć tylko urządzenia generic modbus master/slave, ale trzeba wyłączyć w panelu WBM serwer Modbusa, ewentulanie serwer uruchamiany z poziomu programu odpalić na innym porcie! Masakra tydzień z tym walczyłem.
Wrzucam kod:
VAR
ModbusTcp: FbMbSimpleServerTcp :=( xOpen := TRUE,
wPort := 502,
utKeepAlive := (xEnable := TRUE, // Switch keep-alive mechanism on
tMaxIdleTime := T#5S, // Maximum time of inactivity
tInterval := T#2S, // Interval between two successive KA-Packets
udiProbes := 5 // Number of KA retry before giving up
),
bUnitId := 1
);
//--- Data Areas ---------------------------------------------------------------------
// You may use your own bounds for this arrays.
// NOTE: The bounds are the addresses for modbus access too.
//------------------------------------------------------------------------------------
myDiscreteInputs : ARRAY[0..20] OF BOOL; // Modbus bit address 0 .. 20
myCoils : ARRAY[0..20] OF BOOL; // Modbus bit address 0 .. 20
myInputRegisters : ARRAY[100..200] OF WORD; // Modbus word address 100 .. 200
myHoldingRegisters : ARRAY[0..20] OF WORD; // Modbus word address 0 .. 20
//------------------------------------------------------------------------------------
xModbus : bool;
END_VAR
//--- Call the server ---------------------------------------------
mySimpleTcpServer( axDiscreteInputs := myDiscreteInputs,
axCoils := myCoils,
awInputRegisters := myInputRegisters,
awHoldingRegisters := myHoldingRegisters
);
//-----------------------------------------------------------------
xModbus:=myCoils[0];
I wszystko pięknie działa tak jak za pośrednictwem zmiennych MX. W moim przypadku myCoils[0] ma adres 0. Jedyny "problem" jest taki, że jeden bit pamięci zajmuje w sterowniku cały bajt, bo zmienne są trzymane w tablicy. Pewnie można by było to jakoś obchodzić, ale dla tych kilkudziesięciu nawet zmiennych chyba nie warto sobie tym głowy zawracać. No i bonusowo łatwo można wdrożyć "pamiętanie" stanu zmiennych po restarcie sterownika- nie wiem jeszcze czy mi się to przyda, czy nie, ale opcja jest.