Здравствуйте. Впервые столкнулся с программированием ПЛК. Им волею судеб оказался ПЛК-150-И-М. Ситуация следующая: есть некий девайс, который умеет отдавать данные только по Modbus-ASCII. При опросе через конфигурацию ПЛК - все нормально. Но если в ход идет Modbus.lib - в эфире тишина, постоянно получаю ошибку таймаута. Ради интереса подключил ТРМ-202. В режиме RTU ТРМ-ка отдает данные безупречно. При переходе на ASCII - та же ошибка таймаута (255 в Exception на выходе MB_RD_HOLD_REGS). Просвещенные товарищи, подскажите, в чем может быть дело. Код для опроса самый примитивный:
Код:
PROGRAM PLC_PRG
VAR
	COM_SERVICE0: COM_SERVICE;
	ComSettings: COMSETTINGS;
	ComPort: BYTE := 0;
	ComReady: BOOL;
	state: BYTE;
	mb_get: MB_RD_HOLD_REGS;
	DevAddr: BYTE := 48;
	FirstAddr: BYTE := 1;
	buf: ARRAY [0..255] OF BYTE;
	rt: R_TRIG;
	err: BYTE;
	x: DWORD;
	timer: TON;
	PollingTime: TIME := T#200ms;
	TimeOut: TIME := T#150ms;
END_VAR

IF COM_SERVICE0.Ready = FALSE THEN
	ComSettings.Port := ComPort;
	ComSettings.dwBaudRate := 19200;
	ComSettings.byParity := 0;
	ComSettings.byStopBits := 0;
	ComSettings.dwBufferSize := 0;
	ComSettings.dwScan := 0;
	ComSettings.dwTimeout := 0;

	COM_SERVICE0(Enable := TRUE, Settings := ComSettings, Task := OPEN_TSK);
	ComReady := FALSE;
ELSE
	COM_SERVICE0.Enable := FALSE;
	ComReady := TRUE;
END_IF

IF ComReady = TRUE THEN
	CASE state OF
	0:
		mb_get(
			Mode := MB_RTU,
			Enable := TRUE,
			ComHandle := ComSettings.Port,
			DevAddr := DevAddr,
			FirstAddr := FirstAddr,
			Buffer := buf,
			TimeOut := TimeOut
		);

		rt(CLK := mb_get.Complete);
		IF rt.Q THEN
			err := mb_get.Exception;
			IF err = 0 THEN
				x := buf[0] * 256 + buf[1];
				state := 1;
			END_IF
		END_IF

	1:
		mb_get(
			Mode := MB_RTU,
			Enable := FALSE,
			ComHandle := ComSettings.Port,
			DevAddr := DevAddr,
			FirstAddr := FirstAddr,
			Buffer := buf,
			TimeOut := TimeOut
		);
		timer(IN := TRUE, PT := PollingTime);
		timer;
		state := 2;

	2:
		timer;
		IF timer.Q THEN
			timer(IN := FALSE, PT := PollingTime);
			state := 0;
		END_IF
	END_CASE
END_IF
Код работает нормально ровно до тех пор, пока Mode = MB_RTU. Все настройки времени цикла ПЛК - по умолчанию, (1 мс - мин., 1000 мс - макс.).