PDA

Просмотр полной версии : Таймаут при использовании ModBus.lib



Vasily777
22.10.2016, 14:57
ПЛК160.
Запись 2 регистров 16-я фунция modbus-RTU (слейв частотник atv312). Таймауты пробовал разные 10-300мс. Запись в устройство происходит (утиллитой modscan32 с компа записанные значения вижу). Частотник отвечает (обмен в терминале вижу). Но постоянно err=255. В чем может быть проблема?

1:
PUMP1.FR_IN:=500;
Buffer[0]:=16#10;
Buffer[1]:=16#0F;
Buffer[2]:=WORD_TO_BYTE(SHR(PUMP1.FR_IN,8));
Buffer[3]:=WORD_TO_BYTE(PUMP1.FR_IN);
send2_modbus(
Enable:= enabl,
Mode:=MB_RTU ,
DevAddr:=FR_ADDR1,
FirstAddr:= 8501,
Quantity:= 2,
ComHandle:=Settings.Port ,
TimeOut:=TimeOut ,
Buffer:=Buffer ,
Complete=>cmpl ,
Exception=>err ,
RegCnt=> DataSize);
IF cmpl THEN
IF (err=0) THEN
master1:=2;
ELSE
master1:=20;
t:=0;
SEMA:=0;
END_IF

smk1635
22.10.2016, 16:21
Ну так как это Modbus RTU, то первое что приходит на ум, поменять нумерацию в Buffer на 1,0,3,2.

energvk
22.10.2016, 16:31
Ну и формирование буфера а другой кейс вынесите

alexfromnn
22.10.2016, 22:46
Мне кажется тайм-аутом вряд ли чего добьешься.
Попробуйте следующее:
1) проверьте еще раз правильность подключения кабеля R485, не перепутана ли полярность сигналов (была такая ситуация с частотником Eaton, на любой запрос приходил один и тот же байт ответа 00h
2) уменьшите на 1 адрес 1-го регистра в запросе, т.е. FirstAddr := 8500

Vasily777
23.10.2016, 15:32
Ну и формирование буфера а другой кейс вынесите

Спасибо, вот это помогло.