А без использования ComService работает?
Вот небольшой фрагмент:
2014-03-19 10-05-07 Скриншот экрана.png
Реализация алгоблока для опроса ИВК-101
FUNCTION_BLOCK IVK
VAR_INPUT
HandleWORD;
EN:BOOL;
END_VAR
VAR_OUTPUT
LINK_FLT:BOOL;
FLOW:REAL;
VOLUME:REAL;
END_VAR
VAR
Get_Vol: MB_RD_INP_REGS;
Get_Flow: MB_RD_INP_REGS;
Buffer: ARRAY [0..255] OF BYTE;
cmpl: BOOL;
STAGE: BYTE:=0;
err:INT;
DataSize, X1,X2:INT;
ptr_D, ptr_D1: POINTER TO BYTE;
vINT;
d,d1:REAL;
enabl: BOOL;
END_VAR
IF EN = TRUE THEN
CASE STAGE OF
0:
Get_Flow(
Enable:=enabl,
Mode:=0,
DevAddr:=1,
FirstAddr:=49424,
Quantity:=2,
ComHandle:=Handle,
TimeOut:=T#500MS,
Buffer:=Buffer,
Complete=>cmpl,
Exception=>err,
ByteCnt=>DataSize);
IF cmpl THEN
IF err=0 THEN
LINK_FLT:=FALSE;
ptr_D:=ADR(d);
ptr_D^:=Buffer[3];
ptr_D:=ptr_D+1;
ptr_D^:=Buffer[2];
ptr_D:=ptr_D+1;
ptr_D^:=Buffer[1];
ptr_D:=ptr_D+1;
ptr_D^:=Buffer[0];
FLOW:=d*1.44;
ELSE LINK_FLT:=TRUE;
END_IF
STAGE := 1;
END_IF
1:
Get_Vol(
Enable:=enabl,
Mode:=0,
DevAddr:=1,
FirstAddr:=33040,
Quantity:=4,
ComHandle:=Handle,
TimeOut:=T#500MS,
Buffer:=Buffer,
Complete=>cmpl,
Exception=>err,
ByteCnt=>DataSize);
IF cmpl THEN
IF err=0 THEN
LINK_FLT := FALSE;
X1:=BYTE_TO_WORD(BUFFER[1]) OR SHL(BYTE_TO_WORD(BUFFER[0]),8);
X2:=BYTE_TO_WORD(BUFFER[3]) OR SHL(BYTE_TO_WORD(BUFFER[2]),8);
v:=WORD_TO_DINT(X2) OR SHL(WORD_TO_DINT(X1),16);
ptr_D1:=ADR(d1);
ptr_D1^:=Buffer[7];
ptr_D1:=ptr_D1+1;
ptr_D1^:=Buffer[6];
ptr_D1:=ptr_D1+1;
ptr_D1^:=Buffer[5];
ptr_D1:=ptr_D1+1;
ptr_D1^:=Buffer[4];
VOLUME:=DINT_TO_REAL(v)+d1;
ELSE LINK_FLT := TRUE;
END_IF
STAGE := 0;
END_IF
END_CASE
IF enabl = FALSE THEN
enabl := TRUE;
END_IF
IF err <> 0 THEN
enabl := FALSE;
LINK_FLT := TRUE;
END_IF
END_IF




WORD;
Ответить с цитированием