PDA

Просмотр полной версии : Проблема с работой COM порта ПЛК154-A-L



skinnbatter
10.09.2017, 13:08
Доброго времени суток !
Решил поработать с COM портом на ПЛК ОВЕН 154,задачка простая слать кодировку ASCII в порт. Почитал мануалы и увидел что есть две функции COMSETTING (1-RS232 и 4-RS232DEBUG) в чём их разница и что выставлять??При отсылке буфера в COM порт контроллера, он перезагружается каждый раз, c чем это может быть связано??
Ещё вопрос кабель КС1 для соединения с устройством ,я так понимаю не подходит???

Мастеренко Иван
11.09.2017, 10:58
Доброго времени!
RS-232 debug - предназначен для связи со средой программирования, загрузки программы, отладки. Также порт Debug RS-232 может быть использован
для подключения Hayes – совместимых модемов (в том числе GSM), а также устройств, работающих по протоколам Modbus, ОВЕН и DCON.
RS-232 - предназначен для связи с устройствами.

Опишите поподробнее, как делаете отсылку буфера в com-порт контроллера?

Кабель кс1 применяется для прошивки и программирования контроллеров: ПЛК100, ПЛК150, ПЛК154, ПЛК110, ПЛК160, ПЛК73 (порт RS-232 DEBUG).

skinnbatter
11.09.2017, 22:13
Отрезал перемычку на кабеле, перезагрузка пропала и принтер печатает то что надо.Но остались вопросы. Когда перезагружаю ПЛК при инициализации какая то гадость автоматически шлётся в порт(поставил таймер на задержку открытия порта).Порт при инициализации выбран в режиме RS-232(Debug),есть подозрение что из за этого попадают какие то данные от ПЛК в порт. Когда выставляю просто порт RS-232(принципиально хочу)))) порт не хочет отвечать..может какие то нюансы платформы не учёл(( Подскажите пути решения,кто сталкивался..
VAR
com_num: PORTS; (*Номер порта*)
Settings: COMSETTINGS; (*Параметры порта*)
COM_SERVICE1: COM_SERVICE; (*Блок открытия и настройки порта*)
com_ready: BOOL; (*Переменная, разрешающая обмены*)
i: INT;
END_VAR

IF COM_SERVICE1.ready=FALSE THEN
(*
Номер порта (com_number):
0 - RS-485
1 - RS-232
4 - RS-232 DEBUG
*)
com_num:=4;

Settings.PORT:=com_num;
Settings.dwBaudRate:=9600;
Settings.byParity:=0;
Settings.dwTimeout:=0;
Settings.byStopBits:=0;
Settings.dwBufferSize:=0;
Settings.dwScan:=0;


0 - Открытие и настройка порта в соответствии с настройками в структуре Settings
1 - Изменение настроек уже открытого порта на настройки указанные в Settings
2 - Закрытие порта, номер порта берется из Settings.Port
*)
COM_SERVICE1(Enable:=TRUE , Settings:=Settings , Task:=OPEN_TSK );
com_ready:=FALSE;
ELSE
COM_SERVICE1.Enable:=FALSE;
com_ready:=TRUE;
END_IF
IF com_ready=TRUE THEN
(*Порт открыт и инициализирован, теперь можно работать с портом*)
i:=i+1;
END_IF

А данные просто формирую из STRING_TO_ASCIIBYTE и по тригеру шлю в порт.
IF TrigWrite.Q THEN
SysComWrite(comnum(номер порта), ADR(SEND_BUFFER), 100, 0);
END_IF

capzap
12.09.2017, 06:54
Бибка написана не под один контроллер, а пол все, на Вашем нет обычного ком порта

petera
12.09.2017, 10:19
Отрезал перемычку на кабеле, перезагрузка пропала и принтер печатает то что надо.Но остались вопросы. Когда перезагружаю ПЛК при инициализации какая то гадость автоматически шлётся в порт(поставил таймер на задержку открытия порта).Порт при инициализации выбран в режиме RS-232(Debug),есть подозрение что из за этого попадают какие то данные от ПЛК в порт.

Это не гадость. А действительно данные от ПЛК. И не какие-то, а лог загрузки ПЛК, который Вы можете увидеть если подключите терминальную программу(тот же гипертерминал).
33093 33094

skinnbatter
12.09.2017, 21:02
Народ, подскажите тогда, можно как то исключить попадание этих данных ко мне на принтер, а то выходит я ПЛК запускаю и ко мне в порт летит задание и принтер выводит бяку). Дальше всё окей.

petera
12.09.2017, 21:12
Народ, подскажите тогда, можно как то исключить попадание этих данных ко мне на принтер, а то выходит я ПЛК запускаю и ко мне в порт летит задание и принтер выводит бяку). Дальше всё окей.
Штатно - никак. На то он и Debug. В этот порт ВСЕГДА выводится диагностическая информация при включении или рестарте ПЛК, при чем ДО старта самой программы в ПЛК.
Попробуйте принтер включать с помощью выхода ПЛК, который включать в самой программе. Ну или линию данных пропустить через релейных выход ПЛК.

skinnbatter
13.09.2017, 20:07
Эх думал можно как то изящно штатно сделать)) без костылей)) Всё работает , тему можно закрывать) Всем спасибо!!!