PDA

Просмотр полной версии : Подключение не стандартного устройва



Стас Ц.
14.08.2023, 10:40
При подключении устройства не через стандартный протокол мы смогли отправить на устройство сигнал(протокол был настроен).
Но получить ответ мы не можем, хотя сигнал точно уходит.
Предполагается что закрыт порт приёма сигнала.

Проблема решена всем спасибо за помощь.

melky
14.08.2023, 11:45
возможно вы в программе закрываете порт после отправки своего сообщения?

Стас Ц.
14.08.2023, 11:56
Явно мы порт не закрываем, возможно по стандарту есть какое-то автоматическое закрытие порта.

melky
14.08.2023, 11:59
Какой протокол вы реализовывали?, устройство на такую же посылку данных с ПК отвечает?

Стас Ц.
14.08.2023, 12:22
fbComControl1: OCL.COM_Control; // ФБ управления портом COM1
fbComControl4: OCL.COM_Control; // ФБ управления портом COM4
fbMU110_8R_DO: OCL.MB_SerialRequest; // ФБ опроса модуля МУ110-8Р (данный блок рабочий)
fbRS603_DI: OCL.UNM_SerialRequest; // ФБ опроса лазерного дальномера (а этот нет)

При подключение через ПК устройство отвечает.

melky
14.08.2023, 13:10
Сравнивайте посылаемые пакеты, что тут еще можно еще сказать. станьте при помощи ПК на прослушку порта и смотрите, что там у вас посылается

Стас Ц.
14.08.2023, 14:46
Наш протокол состоит из отправки двух байтового запроса и получения назад 4 байтового ответа.

Уходит 2 байта, 4 байта назад отправляются, но СПК их не принимает.

melky
14.08.2023, 15:05
Я не спрашивал про прием, я спросил а отправляет ли он на самом деле?

Стас Ц.
14.08.2023, 15:19
Да он отправляет.

melky
14.08.2023, 15:21
Прибор при этом отвечает?

Опять же, я не спрашиваю, принимает ли ПЛК, я спрашиваю отвечает ли при этом устройство?

Стас Ц.
14.08.2023, 15:30
Мы отправляем, устройство принимает, а затем отвечает нам.

melky
14.08.2023, 15:45
ох уж эти программисты... нам это кому? Дедушке Василию на деревню?

ПЛК - отправил
Устроство - Ответило

ищите проблемы в ПЛК. Если ИНОЕ, то пишите подробнее. Как вы убедились что отправка произошла, как убедились что ответ произошел и так далее.

Стас Ц.
14.08.2023, 15:47
Мы и ищем в ПЛК.
Мы даже меняли порт, но от этого ничего не поменялось.

Отслеживали данные на конце провода с помощью компьютера.

Стас Ц.
15.08.2023, 10:00
Вот наш протокол. Возможно ли, что он после отправки закрывает порт или не открывает порт приёма?

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

Евгений Кислов
15.08.2023, 10:16
На fbComControl4.xDone генерируется единичный импульс при открытии COM-порта - так что с помощью приведенного выше кода вы отправите на дальномера только один запрос при запуске проекта.

В общем случае вам должно помочь что-то вроде:



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 вы подключили только дальномер и не пытаетесь опрашивать через него другие устройства.

Стас Ц.
15.08.2023, 10:51
На COM4 мы больше ничего не опрашиваем.
Ваш код был реализован но к сожалению он не поменялось.

Возможно ли, что в CODESYS надо что-то включить, чтобы ПЛК начал принимать сигналы?

Евгений Кислов
15.08.2023, 10:52
На COM4 мы больше ничего не опрашиваем.
Ваш код был реализован но к сожалению он не поменялось.

Возможно ли, что в CODESYS надо что-то включить, чтобы ПЛК начал принимать сигналы?

Ничего дополнительно включать не надо.
Обеспечьте удаленный доступ по AeroAdmin - посмотрим, что у вас происходит.
Данные для подключения и ваш контактный телефон пришлите мне на почту или telegram (в подписи).

Sulfur
15.08.2023, 12:40
Стас Ц
Дальномер случаем не Рифтек?
Если да, то там свой фирменный протокол, и нужен бубен достаточно большого диаметра, что бы плк Овен начали его понимать.

Стас Ц.
15.08.2023, 12:47
Спасибо за помощь.
Проблема было из-за добавления новой задачи, а также изменения интервала и приоритета текущий задач.
Желательно это всё не трогать тогда и проблем не будет.