Показано с 1 по 5 из 5

Тема: ПЛК150 - не работает опрос по Modbus-ASCII через Modbus.lib

  1. #1

    По умолчанию ПЛК150 - не работает опрос по Modbus-ASCII через Modbus.lib

    Здравствуйте. Впервые столкнулся с программированием ПЛК. Им волею судеб оказался ПЛК-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 мс - макс.).

  2. #2

    По умолчанию

    Дело не в том девайсе. С овеновской ТРМ-202 в режиме Modbus-ASCII та же ошибка. Но, если это важно, да, протокол определен жестко - Modbus ASCII. И имени у него нет пока
    Последний раз редактировалось awel; 14.09.2012 в 07:31.

  3. #3
    Пользователь
    Регистрация
    03.03.2008
    Адрес
    Новосибирск
    Сообщений
    262

    По умолчанию

    Попробуйте сделать эмулятор этого устройства из ПК. С помощью какой-нибудь терминальной программы можно будет посмотреть что выдаёт ПЛК.

  4. #4

    По умолчанию

    Спасибо, я попытался запустить этот код из видео, но думаю, что у меня не получилось достоверно воспроизвести блок OpenPort485. Подскажите, что у него внутри? Я так понял, CS это структура типа COM_SERVICE, но каким образом формируются остальные параметры? Прошу прощения за ламерские вопросы, но для меня программирование ПЛК еще непаханное поле

  5. #5

    По умолчанию

    Благодарю. Но все равно не работает Видимо, придется делать через конфигурацию, хоть это и выйдет неудобно и некрасиво.

Похожие темы

  1. Ответов: 3
    Последнее сообщение: 13.09.2011, 10:45
  2. Modbus ASCII МСД-100
    от eupsychian в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 27.04.2011, 15:55
  3. ПЛК + Delta VFD Modbus ASCII
    от Доренский Алексей в разделе ПЛК1хх
    Ответов: 17
    Последнее сообщение: 24.09.2010, 11:55
  4. ПЛК63 Modbus-ASCII
    от Доренский Алексей в разделе ПЛК63/73
    Ответов: 6
    Последнее сообщение: 20.09.2010, 10:41
  5. Связь через Modbus TCP нескольких ПЛК150
    от Антон в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 10.04.2008, 07:34

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •