jan Programování Mosaic 21. 6. 2023 18:03 21. 6. 2023 17:38

Dobrý deň,

chcel by som sa opýtať na knižnicu ModbusRTU v4.4. Mám CP-2090 a vypadáva mi komunikácia cez Modbus TCP. Skúšal som 2 vezie:

// Verzia 1. Log v prílohe. Deje sa to ,že spojenie sa dookolo reštartuje. Niekedy správy prejdú ale to je skôr sporadicky (viď. log).

ModbusMas : fbModbusTCPmas2;

ModbusCmdTCP(Gr := 1, IP := '192.168.0.109', UnitID := 1, FNC := 03,StAdr := 32064, NoPoint := 2, PtrData := ADR(MdbData4),Cmd := Command[1]);

ModbusMas(EN := 1, GrSel := 1,MaxCmd := sizeof(Command)/sizeof(TCmdStructTCP),chanCode := ETH2_uni0, Commands := Command[1],Delay:=T#4s);

//-----------------------------------------------------------------

//Verzia 2 Pri tejto verzii mi logy ani nezačne zapisovať

MDB_TCP : fbModbusTCPmas2;

ModbusCmdTCP(Gr := 1, IP :=  '192.168.0.109', UnitID := 1, FNC := 3,StAdr := 32064, NoPoint := 2, PtrData := ADR(MdbData4),Cmd := CmdCH1TCP[1]);

//zalozeni socketu (Foxtrot 2)

    IF MDB_TCP.chanCode = 0 THEN

       MDB_TCP.chanCode := OpenUniSocket(protocol := UNI_TCP_CLIENT);

    END_IF;

 MDB_TCP(EN := 1, GrSel := 1,MaxCmd := sizeof(CmdCH1) / sizeof(TCmdStructTCP),Commands := CmdCH1TCP[1]);

//-----------------------------------------------------------------

Čitanie z daného zariadenia som testoval aj cez Modbus TCP simulator v PC a cez ten to ide bez problémov. Prvú verziu som testoval ešte aj na CP-1013 verzia knižnice ModbusRTU v3.6 a tam to ide bez problémov. Neviete kde by mohol byť problém ?

Ďakujem.

Odpovědi 2

M.B. 21. 6. 2023 14:49

Dobrý den,

dle přiloženého logu protistrana na dotazy neodpovídá. Při uplynutí MBtimeOut (dle logu 2 sekundy) je spojení zavřeno a blok se pokusí navázat spojení znovu. Je zajímavé, že když zařízení odpovídá není v logu vidět prodleva, kterou by měl zajištovat Delay:=T#4s, ale dotazy následují okamžitě po odpovědi. Konec logu pak vypadá, že se celý funkční blok přestal volat a zapnutý UNI kanál se jen snaží navazovat spojení. Odpovídá log skutečně verzi 1?

Pro získání logu z verze 2 musí za OpenUniSocket následovat řádek SetUniLog( chanHandle := MDB_TCP.chanCode, logMode := ONE_TIME_LOG, logSizeKB := 512, logName := 'MODBUS.LOG');

Pokud zařízení vyžaduje větší prodlevy mezi dotazy, prodlužte MBtimeOut a zkontrolujte zda je skutečně přiřazen nenulový parametr Delay.

jan 21. 6. 2023 17:38

Dobrý deň, 

super tieto logy som potreboval: SetUniLog( chanHandle := MDB_TCP.chanCode, logMode := ONE_TIME_LOG, logSizeKB := 512, logName := 'MODBUS.LOG');

Predĺžil som MBtimeOut a pomohlo to. 

Ďakujem za rýchlu pomoc. 

 

Tento dotaz je vyřešený.