Код:
VAR
phase_rs1: BYTE; (*фаза обмена по rs-485-1*)
OWEN_GET_REAL_1: OWEN_GET_REAL; (*блок чтения переменной типа REAL*)
Com_settings_1: comsettings := (Port:=0,dwBaudRate:=9600,byStopBits:=0,byParity:=0,dwTimeout:=0,dwBufferSize:=0); (*настройки порта 2*)
COM_SERVICE_1: COM_SERVICE; (*Блок операций с портом*)
OWEN_SET_REAL_1: OWEN_SET_REAL; (*Блок записи переменной Real*)
Connection_Error_TON: TON; (*Таймер индикации обрыва связи*)
Connection_Error_TON_2: TON; (*Таймер индикации обрыва связи*)
OWEN_GET_DINT_1: OWEN_GET_DINT; (*блок чтения переменной типа DINT*)
OWEN_GET_DINT_2: OWEN_GET_DINT; (*блок чтения переменной типа DINT*)
END_VAR
CASE phase_rs1 OF
0:(*открываем порт*)
COM_SERVICE_1(Enable:=TRUE , Settings:=Com_settings_1 , Task:=OPEN_TSK );
IF COM_SERVICE_1.Ready THEN
phase_rs1:=phase_rs1+1;
END_IF
1: (*записываем коэффициент трансформации тока*)
OWEN_SET_REAL_1(
Enable:=TRUE ,
Addr:=16 ,
AddrLen:=8 ,
Name:='n.i' ,
Index:=16#FFFF ,
RealType:=float32 ,
Value:=Ktri ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms);
IF OWEN_SET_REAL_1.Complete THEN (*ответ пришел?*)
phase_rs1:=phase_rs1+1;
END_IF
2: (*читаем ток по фазе А*)
OWEN_GET_REAL_1(
Enable:=TRUE ,
Addr:=16 ,
AddrLen:=8 ,
Name:='in.i1' ,
Index:=16#FFFF ,
RealType:=float32 ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms );
IF OWEN_GET_REAL_1.Complete THEN (*ответ пришел?*)
IF OWEN_GET_REAL_1.Error=0 THEN (*нет ошибок?*)
Ia:=OWEN_GET_REAL_1.Value;
END_IF
phase_rs1:=phase_rs1+1;
END_IF
3: (*читаем ток по фазе В*)
OWEN_GET_REAL_1(
Enable:=TRUE ,
Addr:=16 ,
AddrLen:=8 ,
Name:='in.i2' ,
Index:=16#FFFF ,
RealType:=float32 ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms );
IF OWEN_GET_REAL_1.Complete THEN (*ответ пришел?*)
IF OWEN_GET_REAL_1.Error=0 THEN (*нет ошибок?*)
Ib:=OWEN_GET_REAL_1.Value;
END_IF
phase_rs1:=phase_rs1+1;
END_IF
4: (*читаем ток по фазе С*)
OWEN_GET_REAL_1(
Enable:=TRUE ,
Addr:=16 ,
AddrLen:=8 ,
Name:='in.i3' ,
Index:=16#FFFF ,
RealType:=float32 ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms );
IF OWEN_GET_REAL_1.Complete THEN (*ответ пришел?*)
IF OWEN_GET_REAL_1.Error=0 THEN (*нет ошибок?*)
Ic:=OWEN_GET_REAL_1.Value;
END_IF
phase_rs1:=phase_rs1+1;
END_IF
5: (*читаем режим работы*)
OWEN_GET_DINT_1(
Enable:=TRUE ,
Addr:=16 ,
AddrLen:=8 ,
Name:='Mode' ,
Index:=16#FFFF ,
IntType:=UINT_FRM ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms ,
Complete=> ,
Value=> ,
Error=> );
IF OWEN_GET_DINT_1.Complete THEN (*ответ пришел?*)
IF OWEN_GET_DINT_1.Error=0 THEN (*нет ошибок?*)
Phase_Rotation_Error := OWEN_GET_DINT_1.Value.14; (*читаем бит ошибки чередования фаз*)
END_IF
phase_rs1:=phase_rs1+1;
END_IF
6: (*записываем коэффициент трансформации напряжения*)
OWEN_SET_REAL_1(
Enable:=TRUE ,
Addr:=16 ,
AddrLen:=8 ,
Name:='n.u' ,
Index:=16#FFFF ,
RealType:=float32 ,
Value:=Ktru ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms);
IF OWEN_SET_REAL_1.Complete THEN (*ответ пришел?*)
phase_rs1:=phase_rs1+1;
END_IF
7: (*читаем напряжение по фазе А*)
OWEN_GET_REAL_1(
Enable:=TRUE ,
Addr:=16 ,
AddrLen:=8 ,
Name:='in.u1' ,
Index:=16#FFFF ,
RealType:=float32 ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms );
IF OWEN_GET_REAL_1.Complete THEN (*ответ пришел?*)
IF OWEN_GET_REAL_1.Error=0 THEN (*нет ошибок?*)
Ua:=OWEN_GET_REAL_1.Value;
END_IF
phase_rs1:=phase_rs1+1;
END_IF
8: (*читаем напряжение по фазе В*)
OWEN_GET_REAL_1(
Enable:=TRUE ,
Addr:=16 ,
AddrLen:=8 ,
Name:='in.u2' ,
Index:=16#FFFF ,
RealType:=float32 ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms );
IF OWEN_GET_REAL_1.Complete THEN (*ответ пришел?*)
IF OWEN_GET_REAL_1.Error=0 THEN (*нет ошибок?*)
Ub:=OWEN_GET_REAL_1.Value;
END_IF
phase_rs1:=phase_rs1+1;
END_IF
9: (*читаем напряжение по фазе С*)
OWEN_GET_REAL_1(
Enable:=TRUE ,
Addr:=16 ,
AddrLen:=8 ,
Name:='in.u3' ,
Index:=16#FFFF ,
RealType:=float32 ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms );
IF OWEN_GET_REAL_1.Complete THEN (*ответ пришел?*)
IF OWEN_GET_REAL_1.Error=0 THEN (*нет ошибок?*)
Uc:=OWEN_GET_REAL_1.Value;
END_IF
phase_rs1:=phase_rs1+1;
END_IF
10: (*читаем состояние дискретных входов модуля МК110-8Д.4Р*)
IF Configuration<>3 THEN (*если это не конфигурация 3, пропускаем этот опрос*)
phase_rs1:=phase_rs1+1; (*переходим к следующему опросу*)
RETURN; (*выходим из подпрограммы*)
END_IF
OWEN_GET_DINT_2(
Enable:=TRUE ,
Addr:=1 ,
AddrLen:=8 ,
Name:='r.Cn' ,
Index:=16#FFFF ,
IntType:=UINT_FRM ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms);
IF OWEN_GET_DINT_2.Complete THEN (*ответ пришел?*)
IF OWEN_GET_DINT_2.Error=0 THEN (*нет ошибок?*)
MK110_8D_4R_1_Inputs := OWEN_GET_DINT_2.Value; (*читаем бит ошибки чередования фаз*)
END_IF
phase_rs1:=phase_rs1+1;
END_IF
11:(*пишем дискретный выход в модуль МК110-8Д.4Р*)
IF Configuration<>3 THEN (*если это не конфигурация 3, пропускаем этот опрос*)
phase_rs1:=phase_rs1+1; (*переходим к следующему опросу*)
RETURN; (*выходим из подпрограммы*)
END_IF
OWEN_SET_REAL_1(
Enable:=TRUE ,
Addr:=1 ,
AddrLen:=8 ,
Name:='r.OE' ,
Index:=16#FFFF ,
RealType:=FLOAT24 ,
Value:=MK110_8D_4R_1_Output[1] ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms);
IF OWEN_SET_REAL_1.Complete THEN (*ответ пришел?*)
phase_rs1:=phase_rs1+1;
END_IF
12: (*пишем дискретный выход в модуль МК110-8Д.4Р*)
IF Configuration<>3 THEN (*если это не конфигурация 3, пропускаем этот опрос*)
phase_rs1:=phase_rs1+1; (*переходим к следующему опросу*)
RETURN; (*выходим из подпрограммы*)
END_IF
OWEN_SET_REAL_1(
Enable:=TRUE ,
Addr:=2 ,
AddrLen:=8 ,
Name:='r.OE' ,
Index:=16#FFFF ,
RealType:=FLOAT24 ,
Value:=MK110_8D_4R_1_Output[2] ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms);
IF OWEN_SET_REAL_1.Complete THEN (*ответ пришел?*)
phase_rs1:=phase_rs1+1;
END_IF
13:(*пишем дискретный выход в модуль МК110-8Д.4Р*)
IF Configuration<>3 THEN (*если это не конфигурация 3, пропускаем этот опрос*)
phase_rs1:=phase_rs1+1; (*переходим к следующему опросу*)
RETURN; (*выходим из подпрограммы*)
END_IF
OWEN_SET_REAL_1(
Enable:=TRUE ,
Addr:=3 ,
AddrLen:=8 ,
Name:='r.OE' ,
Index:=16#FFFF ,
RealType:=FLOAT24 ,
Value:=MK110_8D_4R_1_Output[3] ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms);
IF OWEN_SET_REAL_1.Complete THEN (*ответ пришел?*)
phase_rs1:=phase_rs1+1;
END_IF
14: (*пишем дискретный выход в модуль МК110-8Д.4Р*)
IF Configuration<>3 THEN (*если это не конфигурация 3, пропускаем этот опрос*)
phase_rs1:=phase_rs1+1; (*переходим к следующему опросу*)
RETURN; (*выходим из подпрограммы*)
END_IF
OWEN_SET_REAL_1(
Enable:=TRUE ,
Addr:=4 ,
AddrLen:=8 ,
Name:='r.OE' ,
Index:=16#FFFF ,
RealType:=FLOAT24 ,
Value:=MK110_8D_4R_1_Output[4] ,
ComHandle:=Com_settings_1.Port ,
TimeOut:=T#100ms);
IF OWEN_SET_REAL_1.Complete THEN (*ответ пришел?*)
phase_rs1:=phase_rs1+1;
END_IF
ELSE
phase_rs1:=1;
END_CASE
(*контроль связи*)
IF OWEN_GET_REAL_1.Complete THEN
Connection_Error_TON(IN:=OWEN_GET_REAL_1.Error<>0 , PT:=Modul_Timeout , Q=>Modul_Connection_Error );
END_IF
IF OWEN_GET_DINT_2.Complete THEN
Connection_Error_TON_2(IN:=OWEN_GET_DINT_2.Error<>0 , PT:=Modul_Timeout , Q=>MK110_8D_4R_1_Connection_Error );
END_IF