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

Тема: ПЛК154 и связь по RS232

  1. #1

    По умолчанию ПЛК154 и связь по RS232

    Имеется ПЛК154-УМ (прошивка 2.10.5), провод RS232 (без перемычки), HyperTerminal и сл. код в ПЛК:

    Код:
    IF NOT COM_OPEN THEN
    	RES1 := SysComOpen(COM_PORT);
    	IF RES1 = 16#FFFFFFFF THEN
    		RES2 := SysComClose(COM_PORT);
    		RES1 := SysComOpen(COM_PORT);
    	END_IF
    	COM_OPEN := RES1 <> 16#FFFFFFFF;
    END_IF
    
    IF NOT COM_OPEN THEN RETURN; END_IF
    
    IF NOT COM_INIT THEN
    	COM_SETTINGS.Port := COM_PORT;
    	COM_SETTINGS.dwBaudRate := 1200;
    	COM_SETTINGS.byStopBits := 0;
    	COM_SETTINGS.byParity := 2;
    	COM_SETTINGS.dwTimeout := 0;
    	COM_SETTINGS.dwBufferSize := 0;
    	COM_SETTINGS.dwScan := 0;
    	COM_SETTINGS.cByteSize := 7; (* ??? *)
    	COM_SETTINGS.Size := SIZEOF(COM_SETTINGS);
    	RES2 := SysComSetSettingsEx(COM_PORT, ADR(COM_SETTINGS));
    	COM_INIT := RES2 = 0;
    END_IF
    
    IF NOT COM_INIT THEN RETURN; END_IF
    
    IF Timer1.Q OR NOT Timer1.IN THEN
    	Timer1(IN := FALSE);
    	COM_SND_RES := SysComWrite(COM_PORT, ADR(COM_CMD), SIZEOF(COM_CMD), 0);
    	Timer1(IN := TRUE, PT := T#1s);
    ELSE
    	Timer1;
    END_IF
    Настройки HyperTerminal Hyper.jpg

    COM_CMD это строка 'N'.

    Результат тишина, в настройках HyperTerminal'а вместо 7 ставлю 8 бит данных. Странно, но работает: получаю сообщения "N" от ПЛК.

    Похоже COM_SETTINGS.cByteSize никак не влияет на биты данных. Как сменить на 7 бит?

    Нужно подключить прибор со своим протоколом обмена. А тут такое
    Последний раз редактировалось close_observer; 05.01.2011 в 22:31. Причина: Уточнение, что такое COM_CMD

  2. #2

    По умолчанию

    Рекомендую вам взять за основу данный пример (UNM):
    http://www.owen.ru/forum/showpost.ph...3&postcount=63
    ну или работа через SysLibCom:
    http://www.owen.ru/forum/showpost.ph...1&postcount=58

  3. #3

    По умолчанию

    Спасибо за совет проблему решил при помощи UNM.

    Вот код:
    Код:
    (* Захват интерфейса *)
    IF NOT COM_LOCK THEN
    	COM_LOCK := LockDevice(0) = 1;
    	IF NOT COM_LOCK THEN
    		ReleaseDevice(0);
    		COM_LOCK := LockDevice(0) = 1;
    	END_IF
    END_IF
    
    (* Отбой *)
    IF NOT COM_LOCK THEN RETURN; END_IF
    
    (* Отправка сообщения *)
    IF Timer1.Q OR NOT Timer1.IN THEN
    	Timer1(IN := FALSE);
    	COM_SND := SetByte(0, 'N', 1);
    	Timer1(IN := TRUE, PT := T#1s);
    ELSE
    	Timer1;
    END_IF
    Насчёт SysLibCom в примерах используется COM_SERVICE, а у него параметры соединения задаются, как COMSETTINGS. В моём же случае используется тип COMSETTINGSEX тк нужно было задать количество бит данных.
    Проверил с последней прошивкой с сайта, результат аналогичный моему предыдущему посту.

  4. #4

    По умолчанию

    Поторопился!!! HyperTerminal сбил с толку. Проверил при помощи Advanced Serial Port Monitor, он сказал следующее: UART receiver framing error. С прибора данные при помощи Advanced Serial Port Monitor считываются нормально. С ПЛК прибор не соединяется.

    Что это за работа такая с COM портом, что просто соединение с нужными параметрами нельзя установить.

    Скриншот:rcv_error.jpg

    BaudRate = 1200;
    Parity = even;
    Data bits = 7;
    Stop bits = 1;

  5. #5

    По умолчанию

    Тут надо убедиться, что 3-х вольтовое (кажется, но точно не 12 В) питание драйвера порта RS323 не является проблемой иногда для теплосчетчиков с батареечным питанием это принципиально :-( Это надо уточнить у производителя.
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

Ваши права

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