Мы отправляем, устройство принимает, а затем отвечает нам.
Вид для печати
Мы отправляем, устройство принимает, а затем отвечает нам.
ох уж эти программисты... нам это кому? Дедушке Василию на деревню?
ПЛК - отправил
Устроство - Ответило
ищите проблемы в ПЛК. Если ИНОЕ, то пишите подробнее. Как вы убедились что отправка произошла, как убедились что ответ произошел и так далее.
Мы и ищем в ПЛК.
Мы даже меняли порт, но от этого ничего не поменялось.
Отслеживали данные на конце провода с помощью компьютера.
Вот наш протокол. Возможно ли, что он после отправки закрывает порт или не открывает порт приёма?
Код:fbComControl4: OCL.COM_Control; // ФБ управления портом COM4
fbRS603_DI: OCL.UNM_SerialRequest; // ФБ опроса лазерного дальномера
awAO2: ARRAY [0..1] OF BYTE; // регистры, записывающие в модуль RS603
awAI2: ARRAY [0..3] OF BYTE; // регистры, считанные с модуля RS603
CASE iStateCom4 OF
0: // открытие COM-порта COM4
fbComControl4
(
xEnable := TRUE,
udiComPort := 4,
udiBaudrate := 9600,
udiByteSize := 8,
eParity := OCL.COM_PARITY.EVEN,
eStopBit := OCL.COM_STOPBIT.ONE
);
IF fbComControl4.xDone THEN
iStateCom4 := 1;
END_IF
1: // опрос модуля RS603
awAO2[0] := 16#01;
awAO2[1] := 16#86;
fbRS603_DI
(
xExecute := fbComControl4.xDone,
tTimeout := T#500MS,
usiRetry := 3,
hCom := fbComControl4.hCom,
pRequest := ADR(awAO2),
szRequest := 2,
pResponse := ADR(awAI2),
szResponse := 4,
szExpectedSize := 0,
wStopChar := 16#0000
);
END_CASE
На fbComControl4.xDone генерируется единичный импульс при открытии COM-порта - так что с помощью приведенного выше кода вы отправите на дальномера только один запрос при запуске проекта.
В общем случае вам должно помочь что-то вроде:
Надеюсь, на COM4 вы подключили только дальномер и не пытаетесь опрашивать через него другие устройства.Код:1: // опрос модуля RS603
awAO2[0] := 16#01;
awAO2[1] := 16#86;
fbRS603_DI
(
xExecute := TRUE,
tTimeout := T#500MS,
usiRetry := 3,
hCom := fbComControl4.hCom,
pRequest := ADR(awAO2),
szRequest := 2,
pResponse := ADR(awAI2),
szResponse := 4,
szExpectedSize := 0,
wStopChar := 16#0000
);
IF fbRS603_DI.xDone OR fbRS603_DI.xError THEN
fbRS603_DI(xExecute := FALSE);
END_IF
END_CASE
На COM4 мы больше ничего не опрашиваем.
Ваш код был реализован но к сожалению он не поменялось.
Возможно ли, что в CODESYS надо что-то включить, чтобы ПЛК начал принимать сигналы?
Стас Ц
Дальномер случаем не Рифтек?
Если да, то там свой фирменный протокол, и нужен бубен достаточно большого диаметра, что бы плк Овен начали его понимать.
Спасибо за помощь.
Проблема было из-за добавления новой задачи, а также изменения интервала и приоритета текущий задач.
Желательно это всё не трогать тогда и проблем не будет.