Сообщение от
Спорягин Кирилл
СПС, еще вопрос:
подключил к СПК107 два модуля МВ110-8А и один МВ110-224.2АС
написал код:
Код:
// [1] настраиваем COM-порт
SettingsCOM2.sPort:=2;
SettingsCOM2.byStopBits:=1;
SettingsCOM2.byParity:=0;
SettingsCOM2.ulBaudrate:=9600;
SettingsCOM2.ulTimeout:=0;
SettingsCOM2.ulBufferSize:=0;
SettingsEXCOM2.byByteSize:=8;
// [2] открываем COM-порт
ComServiceCOM2(
Enable:=TRUE,
Settings:=SettingsCOM2,
Sets_Ex:=SettingsEXCOM2,
Task:=OPEN_TSK);
//ОПРОС
IF ComServiceCOM2.Ready THEN
CASE Step OF
0: IF MV110_8ABoks1 THEN Step:=1; ELSE Step:=2;END_IF
1: Enable:=TRUE;
MV110_8aAdr5(
Enable:= Enable,
Mode:= MB_RTU,
DevAddr:= 5,
FirstAddr:= 0,
Quantity:= 47,
ComHandle:= ComServiceCOM2.Handle,
TimeOut:= TimeOut,
Buffer:= Buffer,
Complete=> Complete,
Exception=> ErrorMV110_8aAdr5,
ByteCnt=> DataSize);
IF Complete (*если установлен признак завершения операции, то *)
THEN
IF ErrorMV110_8aAdr5=0 THEN BufferDataM1AI:=Buffer;END_IF
IF ErrorMV110_8aAdr5<>0 AND AlarmMV110_8aAdr5=FALSE THEN AmountMV110_8aAdr5:=AmountMV110_8aAdr5+1; ELSE AmountMV110_8aAdr5:=0;END_IF
IF AmountMV110_8aAdr5>SetAmount THEN AlarmMV110_8aAdr5:=TRUE;END_IF
Enable:=FALSE;
Step:=2; (*переходим к выполнению следующего ФБ*)
END_IF
2: IF MV110_8ABoks2 THEN Step:=3; ELSE Step:=4;END_IF
3: Enable:=TRUE;
MV110_8aAdr6(
Enable:= Enable,
Mode:= MB_RTU,
DevAddr:= 6,
FirstAddr:= 0,
Quantity:= 47,
ComHandle:= ComServiceCOM2.Handle,
TimeOut:= TimeOut,
Buffer:= Buffer,
Complete=> Complete,
Exception=> ErrorMV110_8aAdr6,
ByteCnt=> DataSize);
IF Complete (*если установлен признак завершения операции, то *)
THEN
IF ErrorMV110_8aAdr6=0 THEN BufferDataM2AI:=Buffer;END_IF
IF ErrorMV110_8aAdr6<>0 AND AlarmMV110_8aAdr6=FALSE THEN AmountMV110_8aAdr6:=AmountMV110_8aAdr6+1; ELSE AmountMV110_8aAdr6:=0;END_IF
IF AmountMV110_8aAdr6>SetAmount THEN AlarmMV110_8aAdr6:=TRUE;END_IF
Enable:=FALSE;
Step:=4; (*переходим к выполнению следующего ФБ*)
END_IF
4: IF MV110_2AC THEN Step:=5; ELSE Step:=6;END_IF
5: Enable:=TRUE;
MV110_8acAdr7(
Enable:= Enable,
Mode:= MB_RTU,
DevAddr:= 100,
FirstAddr:= 264,
Quantity:= 6,
ComHandle:= ComServiceCOM2.Handle,
TimeOut:= TimeOut,
Buffer:= Buffer,
Complete=> Complete,
Exception=> ErrorMV110_2acAdr7,
ByteCnt=> DataSize);
IF Complete (*если установлен признак завершения операции, то *)
THEN
IF ErrorMV110_2acAdr7=0 THEN BufferDataM3AI:=Buffer;END_IF
IF ErrorMV110_2acAdr7<>0 AND AlarmMV110_2acAdr7=FALSE THEN AmountMV110_8acAdr7:=AmountMV110_8acAdr7+1; ELSE AmountMV110_8acAdr7:=0;END_IF
IF AmountMV110_8acAdr7>SetAmount THEN AlarmMV110_2acAdr7:=TRUE;END_IF
Enable:=FALSE;
Step:=6; (*переходим к выполнению следующего ФБ*)
END_IF
6: Step:=0;
Enable:=FALSE;
END_CASE
END_IF
В итоге имею ситуацию когда один МВ110-8А или два вместе МВ110-8А опрашиваются все ок, один МВ110-224.2АС - опрашивается все ок, но если к опросу МВ110-224.2АС добавить хотя бы один МВ110-8А, то МВ110-224.2АС зависает (в онлайне выдает ошибку 255 - тайм аут), и его заставить можно работать только сбросом питания. Подобная ситуация у меня была с модулем МВ110-6у (только тогда он всю сеть садил - вылечилось новой прошивкой модуля) - поможет ли новая прошивка модуля МВ110-224.2АС (сейчас 1.05), и правильно ли у меня все в коде?
Схема собрана на столе, сеть собрана витой парой (длина на более 1 м), терминальные резисторы стоят....