Один из вариантов:
Код:
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 ErrorMV110_8aAdr5:=0;Step:=2;END_IF
1: TON(IN:= Step=1, PT:=T#1MS , Q=> Enable, ET=> );
MV110_8aAdr5(
Enable:= Enable,
Mode:= MB_RTU,
DevAddr:= 10,
FirstAddr:= 0,
Quantity:= 35,
ComHandle:= ComServiceCOM2.Handle,
TimeOut:= T#100MS,
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
MV110_8aAdr5(Enable:= FALSE, Buffer:=Buffer);
TON(IN:=FALSE);
Step:=2; (*переходим к выполнению следующего ФБ*)
END_IF
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2: IF MV110_8ABoks2 THEN Step:=3; ELSE ErrorMV110_8aAdr6:=0;Step:=4;END_IF
3: TON(IN:= Step=3, PT:=T#1MS , Q=> Enable, ET=> );
MV110_8aAdr6(
Enable:= Enable,
Mode:= MB_RTU,
DevAddr:= 30,
FirstAddr:= 0,
Quantity:= 35,
ComHandle:= ComServiceCOM2.Handle,
TimeOut:= T#100MS,
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
MV110_8aAdr6(Enable:= FALSE, Buffer:=Buffer);
TON(IN:=FALSE);
Step:=4; (*переходим к выполнению следующего ФБ*)
END_IF
и так далее......