PDA

Просмотр полной версии : ПЛК154 и связь по RS232



close_observer
05.01.2011, 21:40
Имеется ПЛК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 3271

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

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

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

Нужно подключить прибор со своим протоколом обмена. А тут такое :(

Александр Приходько
07.01.2011, 08:48
Рекомендую вам взять за основу данный пример (UNM):
http://www.owen.ru/forum/showpost.php?p=48013&postcount=63
ну или работа через SysLibCom:
http://www.owen.ru/forum/showpost.php?p=41631&postcount=58

close_observer
08.01.2011, 14:01
Спасибо за совет проблему решил при помощи 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 тк нужно было задать количество бит данных.
Проверил с последней прошивкой с сайта, результат аналогичный моему предыдущему посту.

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

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

Скриншот:3309

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

Gans
25.01.2011, 20:57
Тут надо убедиться, что 3-х вольтовое (кажется, но точно не 12 В) питание драйвера порта RS323 не является проблемой иногда для теплосчетчиков с батареечным питанием это принципиально :-( Это надо уточнить у производителя.