PDA

Просмотр полной версии : Соединение СПК107 по rs485 c ПК



Alex_Shakhray
27.02.2023, 09:58
Добрый день. Подскажите как решить такую задачу - по нажатию кнопки на экране СПК107 отправить строку в ПК (например "System alert stop"). Спасибо.
PS. Для соединение СПК107 с ПК используется Овен АС4.

Евгений Кислов
27.02.2023, 10:23
Добрый день. Подскажите как решить такую задачу - по нажатию кнопки на экране СПК107 отправить строку в ПК (например "System alert stop"). Спасибо.
PS. Для соединение СПК107 с ПК используется Овен АС4.

Добрый день.
Можно использовать ФБ UNM_SerialRequest из библиотеки OwenCommunication.

Alex_Shakhray
27.02.2023, 11:52
Спасибо, а где посмотреть пример ее использования?

Евгений Кислов
27.02.2023, 11:54
Спасибо, а где посмотреть пример ее использования?

Можно здесь:
https://youtu.be/uH3hnXmc0fw

Там рассмотрен конкретный случай, но вы сможете понять общий принцип и, думаю, после этого без проблем решите свою задачу.

Alex_Shakhray
27.02.2023, 14:20
Спасибо. А на ST пример есть ?

Евгений Кислов
27.02.2023, 14:24
Спасибо. А на ST пример есть ?

Примеры на ST есть в этом документе:
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_UserProtocols_v.3.0.pdf

Alex_Shakhray
28.02.2023, 08:49
Добрый день. Насколько я понял, готового примера нет. Я применил следующее решение
PROGRAM PLC_PRG
VAR
iValue : INT := 10;
res : BOOL := TRUE;
modbus : BOOL := TRUE;
fbComControl1: OCL.COM_Control; // ФБ управления портом COM1
SerialRequest: OCL.UNM_SerialRequest;
iStateCom1: INT; // результат опроса по порту COM1
Data: WSTRING := "System alert stop";
Answer: WSTRING;
END_VAR
-----------------------------------------------------------------------------------------
IF modbus = TRUE THEN
PLC_PRG.fbComControl1
(
xEnable := TRUE,
udiComPort := 1,
udiBaudrate := 9600,
udiByteSize := 8,
eParity := OCL.COM_PARITY.NONE,
eStopBit := OCL.COM_STOPBIT.ONE
);
IF PLC_PRG.fbComControl1.xDone THEN
PLC_PRG.iStateCom1 := 1;
iValue := 100;
modbus := FALSE;
END_IF

END_IF

На экране есть кнопка по нажатию которой выполняется ST код:
PLC_PRG.iValue := 30;

PLC_PRG.SerialRequest
(
xExecute := TRUE,
tTimeout := T#500MS,
usiRetry := 1,
hCom := PLC_PRG.fbComControl1.hCom,
pRequest := ADR(PLC_PRG.Data),
szRequest := SIZEOF(PLC_PRG.Data),
pResponse := ADR(PLC_PRG.Answer),
szResponse := SIZEOF(PLC_PRG.Answer),
szExpectedSize := 0,
wStopChar :=0
);

Проблема в том, что при первом нажатии все хорошо и команда проходит, но потом связь отрубается, хотя код кнопки выполняется судя по изменению переменной iValue.

Евгений Кислов
28.02.2023, 09:48
Проблема в том, что при первом нажатии все хорошо и команда проходит, но потом связь отрубается, хотя код кнопки выполняется судя по изменению переменной iValue.

Лучше перенесите вызов SerialRequest прямо в код PLC_PRG. Ко входу xExecute привяжите булевскую переменную. На время зажатия кнопки присваивайте этой переменной значение TRUE (чтобы после отпускания она вернулась в FALSE).
У вас сейчас проблема связана с тем, что вы не вызываете SerialRequest с xExecute := FALSE, а блок выполняется по переднему фронту этого входа.

Alex_Shakhray
28.02.2023, 11:20
Спасибо, все заработало как надо, проблема действительно была в SerialRequest с xExecute := FALSE.