PDA

Просмотр полной версии : PLC210 - опрос 2ТРМ1 по Modbus



ScreamerXXI
08.12.2024, 17:34
Доброго дня!
Уже несколько дней бьюсь над простейшей задачей - опросить 2ТРМ1 (свежий, новый) с ПЛК210.
Пересмотрел все видео по теме, читал документацию - не работает. В ответ всегда тайм-аут. ТРМ рабочий, его опросил с компа через преобразователь без проблем. На ПЛК пробовал оба интерфейса. Светодиод RS на ТРМ мигает в момент запроса и всё.
Версия OCL 3.5.11.7.
Настройки на трм: rtu, 10, 9.6, 8n1.
Сделал отдельный чистый проект, там только код для опроса:

PROGRAM PLC_PRG
VAR
iStateCOM: BOOL := 0;
fbComControl: OCL.COM_Control; // ФБ настройки и открытия порта COM
fbMBRead: OCL.MB_SerialRequest;
arrAI1: ARRAY [0..1] OF WORD;
VAL: REAL;
iError: INT := 0;
END_VAR

IF NOT iStateCOM THEN
fbComControl
(
xEnable := TRUE,
udiComPort := 5,
udiBaudrate := 9600,
udiByteSize := 8,
eParity := OCL.COM_PARITY.NONE,
eStopBit := OCL.COM_STOPBIT.ONE
);
IF fbComControl.xDone THEN
iStateCOM := 1;
END_IF
END_IF
IF iStateCom THEN
fbMBRead
(
xExecute := fbComControl.xActive,
tTimeout := T#200MS,
usiRetry := 0,
hCom := fbComControl.hCom,
xIsAsciiMode := FALSE ,
usiSlaveId := 10,
eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
uiDataAddr := 4105,
uiDataCount := 2,
pData := ADR(arrAI1),
szSize := SIZEOF(arrAI1)
);
IF fbMBRead.xDone OR fbMBRead.xError THEN
iError := fbmbread.eError;
VAL := OCL.WORD2_TO_REAL(arrAI1[0], arrAI1[1], FALSE);
fbMBRead(xExecute := FALSE);
END_IF
END_IF

Прошу помочь!

Николай Суриков
08.12.2024, 17:51
PROGRAM PLC_PRG
VAR
iStateCOM: INT := 0;
fbComControl: OCL.COM_Control; // ФБ настройки и открытия порта COM
fbMBRead: OCL.MB_SerialRequest;
arrAI1: ARRAY [0..1] OF WORD;
VAL: REAL;
iError: INT := 0;
END_VAR


CASE iStateCOM OF
0:
fbComControl
(
xEnable := TRUE,
udiComPort := 5,
udiBaudrate := 9600,
udiByteSize := 8,
eParity := OCL.COM_PARITY.NONE,
eStopBit := OCL.COM_STOPBIT.ONE
);
IF fbComControl.xError THEN
iStateCOM := 2;
fbComControl(xEnable := FALSE);
END_IF
IF fbComControl.xDone THEN
iStateCOM := 1;
END_IF

1:
fbMBRead
(
xExecute := fbComControl.xActive,
tTimeout := T#200MS,
usiRetry := 0,
hCom := fbComControl.hCom,
xIsAsciiMode := FALSE ,
usiSlaveId := 10,
eFuncCode := OCL.MB_FC.READ_HOLDING_REGISTERS,
uiDataAddr := 4105,
uiDataCount := 2,
pData := ADR(arrAI1),
szSize := SIZEOF(arrAI1)
);
IF fbMBRead.xDone OR fbMBRead.xError THEN
iError := fbmbread.eError;
VAL := OCL.WORD2_TO_REAL(arrAI1[1], arrAI1[0], FALSE);
fbMBRead(xExecute := FALSE);
iStateCOM := 2;
END_IF
2:
iStateCOM := 0;
END_CASE

ScreamerXXI
08.12.2024, 18:39
Я из уважения попробовал этот вариант, но он ожидаемо также не работвет. Кроме того, в нём есть ошибка, из-за которой он выполняется один раз и потом никогда не выходит из iStateCom=0. В последнем присваивании его надо iStateCOM := 1, тогда запросы повторяются.

kondor3000
08.12.2024, 19:17
Я из уважения попробовал этот вариант, но он ожидаемо также не работвет. Кроме того, в нём есть ошибка, из-за которой он выполняется один раз и потом никогда не выходит из iStateCom=0. В последнем присваивании его надо iStateCOM := 1, тогда запросы повторяются.

Если не работает, то проблема либо в неправильном номере порта, либо в настройках RS485. Ещё тайм аут можно добавить до 500-1000 мс.

ScreamerXXI
08.12.2024, 19:20
Еслиб дело было в неверном номере порта, ТРМ бы не зажигал диод обмена данными по RS.
таймаут итак 200, куда еще больше?

kondor3000
08.12.2024, 19:36
Еслиб дело было в неверном номере порта, ТРМ бы не зажигал диод обмена данными по RS.
таймаут итак 200, куда еще больше?

Код у вас рабочий, только поменял регистры в массиве наоборот. 80635
Так же как и рабочий код Николай Суриков, с исправлением iStateCOM := 1 в конце. Сборка из массива у него правильная.
Проверял на ПЛК слейве, на скорости 115200, а вот для скорости 9600 тайм аут может быль слишком маленький.

Николай Суриков
08.12.2024, 20:03
Попробуйте опрашивать регистр 2, вместо 4105.

Sergey361
09.12.2024, 07:05
Можно попробовать комп опросить с ПЛК
Можно попробовать стандартной конфигурацией опросить
Может резистор согласующий у ПЛК отключен
Может не удален интерфейс из дерева проекта

Евгений Кислов
09.12.2024, 07:15
ScreamerXXI, если вопрос еще актуален - пожалуйста, подготовьте доступ по AnyDesk и напишите мне в телеграм (см. в подписи) или на support@owen.ru

ScreamerXXI
09.12.2024, 09:14
Большое человеческое спасибо Евгению, с ним за 15 минут нашли в чем было дело - у меня время цикла задачи, в которой был размещен код опроса Модбас, было 500 мс, а для нормальной работы требуется сильно меньше (20 мс всё отлично работает).
Всем спасибо за участие, однако гадание на кофейной гуще вообще не помогло, а помог подход техподдержки (подключиться и проверить онлайн все параметры, влияющие на процесс).