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
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.
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ý.