S7MonAn08 – Èçìåðåíèå àíàëîãîâîãî çíà÷åíèÿ ñ 8 ïðåäåëàìè
Äàòà: 2017-01-30
Äîáàâëåíî: komatic
Òåìà: SCL
S7MonAn08 âçÿò èç PCS 7 Industry Library for S7.
Áëîê êîíòðîëèðóåò çíà÷åíèå ñèãíàëà íà âõîäå U è èìååò 8 íàñòðàèâàåìûõ ïðåäåëîâ êàæäûé ñî ñâîåé çàäåðæêîé âðåìåíè è îäíèì îáùèì äëÿ âñåõ ãèñòåðåçèñîì.
Íà çàäåéñòâîâàííûõ ïðåäåëàõ áëîê âûñòàâëÿåò íà ñîîòâåòñòâóþùèå âûõîäû Q_LIM_1...Q_LIM_8 ëîãè÷åñêóþ 1 ïðè ñðàáàòûâàíèè ïðåäåëà è ãåíåðèðóåò àâàðèéíûå ñîîáùåíèÿ â WinCC ñîãëàñíî íàñòðîéêàì:
Bit 0: 0=Êîíòðîëü íèæíåãî ïðåäåëà / 1= Êîíòðîëü âåðõíåãî ïðåäåëà
Bit 1: 1=Òèï ñîîáùåíèÿ - ñòàòóñ (öâåò = ôèîëåòîâûé)
Bit 2: 1= Òèï ñîîáùåíèÿ - àâàðèÿ (öâåò = êðàñíûé)
Bit 3: 1= Òèï ñîîáùåíèÿ - ïðåäóïðåæäåíèå (öâåò = æåëòûé)
Bit 4,5,6: íå íàçíà÷åíû
Bit 7: Âõîä àêòèâíûé/íå àêòèâíûé
Øåñòíàäöàòåðè÷íûå çíà÷åíèÿ äëÿ ââîäà â CFC:
16#85: Âåðõíÿÿ àâàðèéíàÿ ãðàíèöà (HHH)
16#89: Âåðõíÿÿ ïðåäóïðåäèòåëüíàÿ ãðàíèöà (HH)
16#83: Âåðõíÿÿ ãðàíèöà ñòàòóñà (H)
16#81: Âåðõíÿÿ òî÷êà ïåðåêëþ÷åíèÿ
16#80: Íèæíÿÿ òî÷êà ïåðåêëþ÷åíèÿ
16#82: Íèæíÿÿ ãðàíèöà ñòàòóñà (L)
16#88: Íèæíÿÿ ïðåäóïðåäèòåëüíàÿ ãðàíèöà (LL)
16#84: Íèæíÿÿ àâàðèéíàÿ ãðàíèöà (LLL)
Òàêæå áëîê èìååò âõîäû äëÿ çàäàíèÿ è âêëþ÷åíèÿ ïîäñòàíîâî÷íîãî çíà÷åíèÿ U_MAN : REAL è MAN_EN : BOOL.
Âõîä äëÿ âêëþ÷åíèÿ/îòêëþ÷åíèÿ ìîíèòîðèíãà - ENABLE, âõîä âíåøíåé îøèáêè - CSF è âîçìîæíîñòü âêëþ÷åíèÿ ïîäñòàíîâî÷íîãî çíà÷åíèÿ ïðè íàëè÷èè îøèáêè U_SUBST è SUBST_EN.
Ôóíêöèÿ ÷èòàåò äàííûå èç óäàëåííîãî êîíòðîëëåðà ÷åðåç ñêîíôèãóðèðîâàííûå ñîåäèíåíèÿ.
Name: FB272
Symbolic Name: S7MonAn08
Symbol Comment: Measured value monitoring on 8 limits
Family: MONITOR
Version: 1.0
Author: S7LibIL
Last modified: 04/27/2012
Use: UDT287, SFC6, SFC19, SFC107
Size: 6266 bytes
Signature: generiert vom SCL Übersetzer Version: SCLCOMP K05.03.07.00_01.02.00.01 release
{
Scl_ResetOptions ;
Scl_OverwriteBlocks:=
'y' ;
Scl_GenerateReferenceData := 'y' ;
Scl_S7ServerActive:=
'y' ;
Scl_CreateObjectCode:=
'y' ;
Scl_OptimizeObjectCode:=
'y' ;
Scl_MonitorArrayLimits:=
'n' ;
Scl_CreateDebugInfo :=
'n' ;
Scl_SetOKFlag:=
'n' ;
Scl_SetMaximumStringLength:= '254'
}
FUNCTION_BLOCK FB11272
TITLE ='S7MonAn08 value monitoring with 8 limits'
{ S7_m_c := 'true'; S7_alarm_ui :=
'1'; S7_tasklist :=
'OB100' }
AUTHOR : S7LibIL
FAMILY : MONITOR
NAME : S7MonA08
VERSION : '1.0'
//reversed by komatic
VAR_INPUT
ENABLE : BOOL
:= TRUE;
//Enable Function
RESTART { S7_visible :=
'false'; S7_link :=
'false' }: BOOL
; //Manual Restart
U { S7_dynamic :=
'true' }: REAL
; //Measured Value
MO_PVLR { S7_m_c :=
'true'; S7_shortcut :=
'Low Range' }: REAL
:= -1.000000e+002; //Low
Range Bar
MO_PVHR { S7_m_c :=
'true'; S7_shortcut :=
'High Range' }: REAL
:= 1.000000e+002;
//High Range Bar
HYS { S7_m_c :=
'true'; S7_link :=
'false'; S7_shortcut := 'Hysteresis'; S7_unit := '' }: REAL := 1.0; //Hysteresis
DELAY_T1 : REAL
; //Delaytime for Limit 1 Monitoring
DELAY_T2 : REAL
; //Delaytime for Limit 2 Monitoring
DELAY_T3 : REAL
; //Delaytime for Limit 3 Monitoring
DELAY_T4 : REAL
; //Delaytime for Limit 4 Monitoring
DELAY_T5 : REAL
; //Delaytime for Limit 5 Monitoring
DELAY_T6 : REAL
; //Delaytime for Limit 6 Monitoring
DELAY_T7 : REAL
; //Delaytime for Limit 7 Monitoring
DELAY_T8 : REAL
; //Delaytime for Limit 8 Monitoring
MODE_1 { S7_m_c :=
'true' }: BYTE
:= B#16#80;
//Mode Limit 1
MODE_2 { S7_m_c :=
'true' }: BYTE
:= B#16#80;
//Mode Limit 2
MODE_3 { S7_m_c :=
'true' }: BYTE
:= B#16#80;
//Mode Limit 3
MODE_4 { S7_m_c :=
'true' }: BYTE
:= B#16#80;
//Mode Limit 4
MODE_5 { S7_m_c :=
'true' }: BYTE
:= B#16#80;
//Mode Limit 5
MODE_6 { S7_m_c :=
'true' }: BYTE
:= B#16#80;
//Mode Limit 6
MODE_7 { S7_m_c :=
'true' }: BYTE
:= B#16#80;
//Mode Limit 7
MODE_8 { S7_m_c :=
'true' }: BYTE
:= B#16#80;
//Mode Limit 8
U_MAN { S7_m_c :=
'true'; S7_link :=
'false'; S7_shortcut := 'Manual Value' }: REAL ; //Manual Value
U_SUBST { S7_m_c :=
'true'; S7_link :=
'false'; S7_shortcut := 'Subst. Value' }: REAL ; //Substitution
Value
CSF : BOOL
; //External Failure (Channel fault)
MAN_EN { S7_m_c :=
'true'; S7_string_0 :=
'Manual=Off'; S7_string_1 := 'Manual=On' }:
BOOL ; //Manual
Value Enable
SUBST_EN { S7_m_c :=
'true'; S7_string_0 :=
'Substitution=Off'; S7_string_1 := 'Substitution=On'
}: BOOL ; //Substituion
Value Enable
M_SUP_1 { S7_visible :=
'false'; S7_m_c :=
'true'; S7_string_1 :=
'activ'; S7_string_0 := 'inactiv' }: BOOL ; //Suppress Alarm 1
M_SUP_2 { S7_visible :=
'false'; S7_m_c :=
'true'; S7_string_1 :=
'activ'; S7_string_0 := 'inactiv' }: BOOL ; //Suppress Alarm 2
M_SUP_3 { S7_visible :=
'false'; S7_m_c :=
'true'; S7_string_1 :=
'activ'; S7_string_0 := 'inactiv' }: BOOL ; //Suppress Alarm 3
M_SUP_4 { S7_visible :=
'false'; S7_m_c :=
'true'; S7_string_1 :=
'activ'; S7_string_0 := 'inactiv' }: BOOL ; //Suppress Alarm 4
M_SUP_5 { S7_visible :=
'false'; S7_m_c :=
'true'; S7_string_1 :=
'activ'; S7_string_0 := 'inactiv' }: BOOL ; //Suppress Alarm 5
M_SUP_6 { S7_visible :=
'false'; S7_m_c :=
'true'; S7_string_1 :=
'activ'; S7_string_0 := 'inactiv' }: BOOL ; //Suppress Alarm 6
M_SUP_7 { S7_visible :=
'false'; S7_m_c :=
'true'; S7_string_1 :=
'activ'; S7_string_0 := 'inactiv' }: BOOL ; //Suppress Alarm 7
M_SUP_8 { S7_visible :=
'false'; S7_m_c :=
'true'; S7_string_1 :=
'activ'; S7_string_0 := 'inactiv' }: BOOL ; //Suppress Alarm 8
MSG_LOCK { S7_visible :=
'false'; S7_m_c :=
'true'; S7_link :=
'false'; S7_string_0 := 'inactiv'; S7_string_1 := 'activ' }: BOOL ; //Message Lock
L_MSGLCK : BOOL
; //Linkable Message Lock
LIMIT_OP { S7_m_c :=
'true' }: BOOL
:= TRUE;
//1=Limits enabled for operator
SAMPLE_T { S7_visible :=
'false'; S7_link :=
'false'; S7_sampletime := 'true' }: REAL := 1.000000e-001; //Sampletime
RUNUPCYC { S7_visible :=
'false'; S7_link :=
'false' }: INT
:= 10; //Lag: Number of Run Up Cycles
MSG_EVID_1 { S7_visible := 'false';
S7_link := 'false';
S7_param := 'false';
S7_server := 'alarm_archiv';
S7_a_type := 'alarm_s'
}: DWORD ; //Message
ID
MSG_EVID_2 { S7_visible := 'false';
S7_link := 'false';
S7_param := 'false';
S7_server := 'alarm_archiv';
S7_a_type := 'alarm_s'
}: DWORD ; //Message
ID
MSG_EVID_3 { S7_visible := 'false';
S7_link := 'false';
S7_param := 'false';
S7_server := 'alarm_archiv';
S7_a_type := 'alarm_s'
}: DWORD ; //Message
ID
MSG_EVID_4 { S7_visible := 'false';
S7_link := 'false';
S7_param := 'false';
S7_server := 'alarm_archiv';
S7_a_type := 'alarm_s'
}: DWORD ; //Message
ID
MSG_EVID_5 { S7_visible := 'false';
S7_link := 'false';
S7_param := 'false';
S7_server := 'alarm_archiv';
S7_a_type := 'alarm_s'
}: DWORD ; //Message
ID
MSG_EVID_6 { S7_visible := 'false';
S7_link := 'false';
S7_param := 'false';
S7_server := 'alarm_archiv';
S7_a_type := 'alarm_s'
}: DWORD ; //Message
ID
MSG_EVID_7 { S7_visible := 'false';
S7_link := 'false';
S7_param := 'false';
S7_server := 'alarm_archiv';
S7_a_type := 'alarm_s'
}: DWORD ; //Message
ID
MSG_EVID_8 { S7_visible := 'false';
S7_link := 'false';
S7_param := 'false';
S7_server := 'alarm_archiv';
S7_a_type := 'alarm_s'
}: DWORD ; //Message
ID
MSG_EVID_9 { S7_visible := 'false';
S7_link := 'false';
S7_param := 'false';
S7_server := 'alarm_archiv';
S7_a_type := 'alarm_s'
}: DWORD ; //Message
ID
MSG_FILTER { S7_visible := 'true';
S7_link := 'true'
}: DINT ; //Message
filter
AUX { S7_dynamic :=
'true'; S7_qc :=
'true'; S7_m_c :=
'true' }: REAL
; //Auxiliary Value
BA_EN { S7_visible :=
'false'; S7_m_c :=
'true' }: BOOL
; //Batch Enable
OCCUPIED { S7_visible :=
'false'; S7_m_c :=
'true' }: BOOL
; //Occupied by Batch
BA_ID { S7_visible :=
'false'; S7_m_c :=
'true' }: DWORD
; //Batch ID
BA_NA { S7_visible :=
'false'; S7_m_c :=
'true' }: STRING
[32 ]; //Batch
Name
STEP_NO { S7_visible :=
'false'; S7_m_c :=
'true' }: DWORD
; //Batch Step Number
CMP_ID : DWORD
:= DW#16#1;
//area code
PERMIS { S7_dynamic :=
'true'; S7_m_c :=
'true'; S7_enum :=
'OP_Conf1'; S7_edit :=
'para' }: INT
:= 2; //Switch authority
END_VAR
VAR_OUTPUT
V { S7_dynamic :=
'true'; S7_m_c :=
'true'; S7_unit :=
''; S7_archive :=
'shortterm'; S7_trend := 'MO_PVLR,MO_PVHR'
}: REAL ; //Measured
Value
QCSF { S7_m_c :=
'true'; S7_dynamic :=
'true' }: BOOL
; //External Failure
QERR { S7_dynamic :=
'true' }: BOOL
; //Group Error
Q_LIM_1 { S7_dynamic :=
'true' }: BOOL
; //Limit 1 active
Q_LIM_2 { S7_dynamic :=
'true' }: BOOL
; //Limit 2 active
Q_LIM_3 { S7_dynamic :=
'true' }: BOOL
; //Limit 3 active
Q_LIM_4 { S7_dynamic :=
'true' }: BOOL
; //Limit 4 active
Q_LIM_5 { S7_dynamic :=
'true' }: BOOL
; //Limit 5 active
Q_LIM_6 { S7_dynamic :=
'true' }: BOOL
; //Limit 6 active
Q_LIM_7 { S7_dynamic :=
'true' }: BOOL
; //Limit 7 active
Q_LIM_8 { S7_dynamic :=
'true' }: BOOL
; //Limit 8 active
V_LIM_1 : REAL
; //Limit 1
V_LIM_2 : REAL
; //Limit 2
V_LIM_3 : REAL
; //Limit 3
V_LIM_4 : REAL
; //Limit 4
V_LIM_5 : REAL
; //Limit 5
V_LIM_6 : REAL
; //Limit 6
V_LIM_7 : REAL
; //Limit 7
V_LIM_8 : REAL
; //Limit 8
QOS_STAT { S7_m_c :=
'true' }: BYTE
; //Status Mask of Outputs Q_LIM_x
QMSG_ERR { S7_visible :=
'false'; S7_dynamic :=
'false' }: BOOL
; //Message Error
QMSG_SUP { S7_m_c :=
'true'; S7_dynamic :=
'false' }: BOOL
; //Message suppressed
MSG_STAT_1 { S7_visible := 'false' }: WORD ; //Message Status
MSG_STAT_2 { S7_visible := 'false' }: WORD ; //Message Status
MSG_STAT_3 { S7_visible := 'false' }: WORD ; //Message Status
MSG_STAT_4 { S7_visible := 'false' }: WORD ; //Message Status
MSG_STAT_5 { S7_visible := 'false' }: WORD ; //Message Status
MSG_STAT_6 { S7_visible := 'false' }: WORD ; //Message Status
MSG_STAT_7 { S7_visible := 'false' }: WORD ; //Message Status
MSG_STAT_8 { S7_visible := 'false' }: WORD ; //Message Status
MSG_STAT_9 { S7_visible := 'false' }: WORD ; //Message Status
MSG_ACK_1 { S7_visible := 'false' }: BOOL ; //Message
acknowledge
MSG_ACK_2 { S7_visible := 'false' }: BOOL ; //Message
acknowledge
MSG_ACK_3 { S7_visible := 'false' }: BOOL ; //Message
acknowledge
MSG_ACK_4 { S7_visible := 'false' }: BOOL ; //Message
acknowledge
MSG_ACK_5 { S7_visible := 'false' }: BOOL ; //Message
acknowledge
MSG_ACK_6 { S7_visible := 'false' }: BOOL ; //Message
acknowledge
MSG_ACK_7 { S7_visible := 'false' }: BOOL ; //Message
acknowledge
MSG_ACK_8 { S7_visible := 'false' }: BOOL ; //Message
acknowledge
MSG_ACK_9 { S7_visible := 'false' }: BOOL ; //Message
acknowledge
QOP_STAT : STRUCT
//Operator Panel status
UDT_IDENT : BYTE
:= B#16#5;
// UDT Identifier for UDT_S7PMonAn08
QOP_V : REAL
; // Status Process Value
MO_PVHR : REAL
:= 1.000000e+002;
// High Range
MO_PVLR : REAL
; // Low Range
MAN_EN : BOOL
; // Manual Enabled
QOP_QERR : BOOL
; // Status 1=Operator Panel 1=Error
QOS_STAT_F : WORD
; // Status for Operator Panel messages
END_STRUCT
;
END_VAR
VAR_IN_OUT
U_LIM_1 { S7_visible :=
'true'; S7_m_c :=
'true'; S7_link :=
'true'; S7_shortcut :=
'Limit 1'; S7_unit :=
'' }: REAL
; //Limit 1
U_LIM_2 { S7_visible :=
'true'; S7_m_c :=
'true'; S7_link :=
'true'; S7_shortcut :=
'Limit 2'; S7_unit :=
'' }: REAL
; //Limit 2
U_LIM_3 { S7_visible :=
'true'; S7_m_c :=
'true'; S7_link :=
'true'; S7_shortcut :=
'Limit 3'; S7_unit :=
'' }: REAL
; //Limit 3
U_LIM_4 { S7_visible :=
'true'; S7_m_c :=
'true'; S7_link :=
'true'; S7_shortcut :=
'Limit 4'; S7_unit :=
'' }: REAL
; //Limit 4
U_LIM_5 { S7_visible :=
'true'; S7_m_c :=
'true'; S7_link :=
'true'; S7_shortcut :=
'Limit 5'; S7_unit :=
'' }: REAL
; //Limit 5
U_LIM_6 { S7_visible :=
'true'; S7_m_c :=
'true'; S7_link :=
'true'; S7_shortcut :=
'Limit 6'; S7_unit :=
'' }: REAL
; //Limit 6
U_LIM_7 { S7_visible :=
'true'; S7_m_c :=
'true'; S7_link :=
'true'; S7_shortcut :=
'Limit 7'; S7_unit :=
'' }: REAL
; //Limit 7
U_LIM_8 { S7_visible :=
'true'; S7_m_c :=
'true'; S7_link :=
'true'; S7_shortcut :=
'Limit 8'; S7_unit :=
'' }: REAL
; //Limit 8
END_VAR
VAR
siRunUpCounter : INT
; //Hochlaufzähler
sbMsgLock : BOOL
; //Meldungen sperren
sbCSF : BOOL
; //Externer Fehler
sbMsgGroupError : BOOL
; //Gruppenfehler
sbTempAlarmLow : BOOL
;
sbLimit1 : BOOL
;
sbLimit2 : BOOL
;
sbLimit3 : BOOL
;
sbLimit4 : BOOL
;
sbLimit5 : BOOL
;
sbLimit6 : BOOL
;
sbLimit7 : BOOL
;
sbLimit8 : BOOL
;
sbDelayEn1 : BOOL
;
sbDelayEn2 : BOOL
;
sbDelayEn3 : BOOL
;
sbDelayEn4 : BOOL
;
sbDelayEn5 : BOOL
;
sbDelayEn6 : BOOL
;
sbDelayEn7 : BOOL
;
sbDelayEn8 : BOOL
;
srU : REAL
;
srCountLimit1 : REAL
;
srCountLimit2 : REAL
;
srCountLimit3 : REAL
;
srCountLimit4 : REAL
;
srCountLimit5 : REAL
;
srCountLimit6 : REAL
;
srCountLimit7 : REAL
;
srCountLimit8 : REAL
;
srDelayCycle1 : REAL
;
srDelayCycle2 : REAL
;
srDelayCycle3 : REAL
;
srDelayCycle4 : REAL
;
srDelayCycle5 : REAL
;
srDelayCycle6 : REAL
;
srDelayCycle7 : REAL
;
srDelayCycle8 : REAL
;
pwOSStatus : WORD
; //Status-Doppelwort
liRetVal : INT
; //Fehler vom SFC Aufruf
sbState : BOOL
; //Status der Meldung
sb_MSG_TRIG1 : BOOL
; //Trigger MSG1
sb_MSG_TRIG2 : BOOL
; //Trigger MSG2
sb_MSG_TRIG3 : BOOL
; //Trigger MSG3
sb_MSG_TRIG4 : BOOL
; //Trigger MSG4
sb_MSG_TRIG5 : BOOL
; //Trigger MSG5
sb_MSG_TRIG6 : BOOL
; //Trigger MSG6
sb_MSG_TRIG7 : BOOL
; //Trigger MSG7
sb_MSG_TRIG8 : BOOL
; //Trigger MSG8
sb_MSG_TRIG9 : BOOL
; //Trigger MSG9
AuxValue : STRUCT
AUX : REAL
;
BA_ID : DWORD
;
MSG_FILTER : DINT
;
END_STRUCT
;
END_VAR
VAR_TEMP
pbERR_PT1 : BOOL
;
TOP_SI : STRUCT
EV_CLASS : BYTE
;
EV_NUM : BYTE
;
PRIORITY : BYTE
;
NUM : BYTE
;
TYP2_3 : BYTE
;
TYP1 : BYTE
;
ZI1 : WORD
;
ZI2_3 : DWORD
;
END_STRUCT
;
START_UP_SI : STRUCT
EV_CLASS : BYTE
;
EV_NUM : BYTE
;
PRIORITY : BYTE
;
NUM : BYTE
;
TYP2_3 : BYTE
;
TYP1 : BYTE
;
ZI1 : WORD
;
ZI2_3 : DWORD
;
END_STRUCT
;
i_ret_val : INT
;
END_VAR
BEGIN
IF ENABLE THEN
i_ret_val:=RD_SINFO(TOP_SI
:=TOP_SI,START_UP_SI :=START_UP_SI
);
IF
TOP_SI.NUM=B#16#64 OR
RESTART THEN
siRunUpCounter:=RUNUPCYC;
END_IF;
IF
siRunUpCounter>0
THEN
siRunUpCounter:=siRunUpCounter-1;
QMSG_SUP:=TRUE;
sbMsgLock:=TRUE;
sbCSF:=FALSE;
sbMsgGroupError:=FALSE;
srCountLimit1:=0.0;
srCountLimit2:=0.0;
srCountLimit3:=0.0;
srCountLimit4:=0.0;
srCountLimit5:=0.0;
srCountLimit6:=0.0;
srCountLimit7:=0.0;
srCountLimit8:=0.0;
sbLimit1:=FALSE;
sbLimit2:=FALSE;
sbLimit3:=FALSE;
sbLimit4:=FALSE;
sbLimit5:=FALSE;
sbLimit6:=FALSE;
sbLimit7:=FALSE;
sbLimit8:=FALSE;
sb_MSG_TRIG1:=FALSE;
sb_MSG_TRIG2:=FALSE;
sb_MSG_TRIG3:=FALSE;
sb_MSG_TRIG4:=FALSE;
sb_MSG_TRIG5:=FALSE;
sb_MSG_TRIG6:=FALSE;
sb_MSG_TRIG7:=FALSE;
sb_MSG_TRIG8:=FALSE;
sb_MSG_TRIG9:=FALSE;
ELSE
IF
DELAY_T1>0.0
THEN
srDelayCycle1:=DELAY_T1/SAMPLE_T;
sbDelayEn1:=TRUE;
ELSE
sbDelayEn1:=FALSE;
srDelayCycle1:=0.0;
END_IF;
IF
DELAY_T2>0.0
THEN
srDelayCycle2:=DELAY_T2/SAMPLE_T;
sbDelayEn2:=TRUE;
ELSE
sbDelayEn2:=FALSE;
srDelayCycle2:=0.0;
END_IF;
IF
DELAY_T3>0.0
THEN
srDelayCycle3:=DELAY_T3/SAMPLE_T;
sbDelayEn3:=TRUE;
ELSE
sbDelayEn3:=FALSE;
srDelayCycle3:=0.0;
END_IF;
IF DELAY_T4>0.0 THEN
srDelayCycle4:=DELAY_T4/SAMPLE_T;
sbDelayEn4:=TRUE;
ELSE
sbDelayEn4:=FALSE;
srDelayCycle4:=0.0;
END_IF;
IF DELAY_T5>0.0 THEN
srDelayCycle5:=DELAY_T5/SAMPLE_T;
sbDelayEn5:=TRUE;
ELSE
sbDelayEn5:=FALSE;
srDelayCycle5:=0.0;
END_IF;
IF DELAY_T6>0.0 THEN
srDelayCycle6:=DELAY_T6/SAMPLE_T;
sbDelayEn6:=TRUE;
ELSE
sbDelayEn6:=FALSE;
srDelayCycle6:=0.0;
END_IF;
IF DELAY_T7>0.0 THEN
srDelayCycle7:=DELAY_T7/SAMPLE_T;
sbDelayEn7:=TRUE;
ELSE
sbDelayEn7:=FALSE;
srDelayCycle7:=0.0;
END_IF;
IF DELAY_T8>0.0 THEN
srDelayCycle8:=DELAY_T8/SAMPLE_T;
sbDelayEn8:=TRUE;
ELSE
sbDelayEn8:=FALSE;
srDelayCycle8:=0.0;
END_IF;
sbMsgLock:=(MSG_LOCK) OR
L_MSGLCK;
sbCSF:=(NOT(MAN_EN))
AND CSF;
srU:=U;
IF sbCSF AND
SUBST_EN THEN
srU:=U_SUBST;
END_IF;
IF MAN_EN THEN
srU:=U_MAN;
END_IF;
IF (MODE_1 AND
B#16#1)=B#16#1 THEN
IF srU>=U_LIM_1
THEN
sbLimit1:=TRUE;
ELSIF srU<(U_LIM_1-HYS) THEN
sbLimit1:=FALSE;
END_IF;
ELSE
IF srU<=U_LIM_1
THEN
sbLimit1:=TRUE;
ELSIF srU>(U_LIM_1+HYS) THEN
sbLimit1:=FALSE;
END_IF;
END_IF;
IF (MODE_2 AND
B#16#1)=B#16#1 THEN
IF srU>=U_LIM_2
THEN
sbLimit2:=TRUE;
ELSIF srU<(U_LIM_2-HYS) THEN
sbLimit2:=FALSE;
END_IF;
ELSE
IF srU<=U_LIM_2
THEN
sbLimit2:=TRUE;
ELSIF srU>(U_LIM_2+HYS) THEN
sbLimit2:=FALSE;
END_IF;
END_IF;
IF (MODE_3 AND
B#16#1)=B#16#1 THEN
IF srU>=U_LIM_3
THEN
sbLimit3:=TRUE;
ELSIF srU<(U_LIM_3-HYS) THEN
sbLimit3:=FALSE;
END_IF;
ELSE
IF srU<=U_LIM_3
THEN
sbLimit3:=TRUE;
ELSIF srU>(U_LIM_3+HYS) THEN
sbLimit3:=FALSE;
END_IF;
END_IF;
IF (MODE_4 AND
B#16#1)=B#16#1 THEN
IF srU>=U_LIM_4
THEN
sbLimit4:=TRUE;
ELSIF srU<(U_LIM_4-HYS) THEN
sbLimit4:=FALSE;
END_IF;
ELSE
IF srU<=U_LIM_4
THEN
sbLimit4:=TRUE;
ELSIF srU>(U_LIM_4+HYS) THEN
sbLimit4:=FALSE;
END_IF;
END_IF;
IF (MODE_5 AND
B#16#1)=B#16#1 THEN
IF srU>=U_LIM_5
THEN
sbLimit5:=TRUE;
ELSIF srU<(U_LIM_5-HYS) THEN
sbLimit5:=FALSE;
END_IF;
ELSE
IF srU<=U_LIM_5
THEN
sbLimit5:=TRUE;
ELSIF srU>(U_LIM_5+HYS) THEN
sbLimit5:=FALSE;
END_IF;
END_IF;
IF (MODE_6 AND
B#16#1)=B#16#1 THEN
IF srU>=U_LIM_6
THEN
sbLimit6:=TRUE;
ELSIF srU<(U_LIM_6-HYS) THEN
sbLimit6:=FALSE;
END_IF;
ELSE
IF srU<=U_LIM_6
THEN
sbLimit6:=TRUE;
ELSIF srU>(U_LIM_6+HYS) THEN
sbLimit6:=FALSE;
END_IF;
END_IF;
IF (MODE_7 AND
B#16#1)=B#16#1 THEN
IF srU>=U_LIM_7
THEN
sbLimit7:=TRUE;
ELSIF srU<(U_LIM_7-HYS) THEN
sbLimit7:=FALSE;
END_IF;
ELSE
IF srU<=U_LIM_7
THEN
sbLimit7:=TRUE;
ELSIF srU>(U_LIM_7+HYS) THEN
sbLimit7:=FALSE;
END_IF;
END_IF;
IF (MODE_8 AND
B#16#1)=B#16#1 THEN
IF srU>=U_LIM_8
THEN
sbLimit8:=TRUE;
ELSIF srU<(U_LIM_8-HYS) THEN
sbLimit8:=FALSE;
END_IF;
ELSE
IF srU<=U_LIM_8
THEN
sbLimit8:=TRUE;
ELSIF srU>(U_LIM_8+HYS) THEN
sbLimit8:=FALSE;
END_IF;
END_IF;
IF (sbLimit1) AND
sbDelayEn1 THEN
IF srCountLimit1<=srDelayCycle1
THEN
srCountLimit1:=srCountLimit1+1.0;
END_IF;
ELSE
srCountLimit1:=0.0;
END_IF;
IF (sbLimit2) AND
sbDelayEn2 THEN
IF srCountLimit2<=srDelayCycle2
THEN
srCountLimit2:=srCountLimit2+1.0;
END_IF;
ELSE
srCountLimit2:=0.0;
END_IF;
IF (sbLimit3) AND
sbDelayEn3 THEN
IF srCountLimit3<=srDelayCycle3
THEN
srCountLimit3:=srCountLimit3+1.0;
END_IF;
ELSE
srCountLimit3:=0.0;
END_IF;
IF (sbLimit4) AND
sbDelayEn4 THEN
IF srCountLimit4<=srDelayCycle4
THEN
srCountLimit4:=srCountLimit4+1.0;
END_IF;
ELSE
srCountLimit4:=0.0;
END_IF;
IF (sbLimit5) AND
sbDelayEn5 THEN
IF srCountLimit5<=srDelayCycle5
THEN
srCountLimit5:=srCountLimit5+1.0;
END_IF;
ELSE
srCountLimit5:=0.0;
END_IF;
IF (sbLimit6) AND
sbDelayEn6 THEN
IF srCountLimit6<=srDelayCycle6
THEN
srCountLimit6:=srCountLimit6+1.0;
END_IF;
ELSE
srCountLimit6:=0.0;
END_IF;
IF (sbLimit7) AND
sbDelayEn7 THEN
IF srCountLimit7<=srDelayCycle7
THEN
srCountLimit7:=srCountLimit7+1.0;
END_IF;
ELSE
srCountLimit7:=0.0;
END_IF;
IF (sbLimit8) AND
sbDelayEn8 THEN
IF srCountLimit8<=srDelayCycle8
THEN
srCountLimit8:=srCountLimit8+1.0;
END_IF;
ELSE
srCountLimit8:=0.0;
END_IF;
sbLimit1:=(srCountLimit1>srDelayCycle1) OR
((NOT(sbDelayEn1)) AND
sbLimit1);
sbLimit2:=(srCountLimit2>srDelayCycle2) OR
((NOT(sbDelayEn2)) AND
sbLimit2);
sbLimit3:=(srCountLimit3>srDelayCycle3) OR
((NOT(sbDelayEn3)) AND
sbLimit3);
sbLimit4:=(srCountLimit4>srDelayCycle4) OR
((NOT(sbDelayEn4)) AND
sbLimit4);
sbLimit5:=(srCountLimit5>srDelayCycle5) OR
((NOT(sbDelayEn5)) AND
sbLimit5);
sbLimit6:=(srCountLimit6>srDelayCycle6) OR
((NOT(sbDelayEn6)) AND
sbLimit6);
sbLimit7:=(srCountLimit7>srDelayCycle7) OR
((NOT(sbDelayEn7)) AND
sbLimit7);
sbLimit8:=(srCountLimit8>srDelayCycle8) OR
((NOT(sbDelayEn8)) AND
sbLimit8);
QOP_STAT.QOP_V:=V;
QOP_STAT.MO_PVHR:=MO_PVHR;
QOP_STAT.MO_PVLR:=MO_PVLR;
QOP_STAT.MAN_EN:=MAN_EN;
QOP_STAT.QOP_QERR:=QERR;
pwOSStatus:=W#16#0;
QOP_STAT.QOS_STAT_F:=W#16#0;
IF (NOT(M_SUP_1))
AND sbLimit1 THEN
pwOSStatus:=W#16#1;
END_IF;
QOP_STAT.QOS_STAT_F:=QOP_STAT.QOS_STAT_F OR
pwOSStatus;
IF (NOT(M_SUP_2))
AND sbLimit2 THEN
pwOSStatus:=W#16#2;
END_IF;
QOP_STAT.QOS_STAT_F:=QOP_STAT.QOS_STAT_F OR
pwOSStatus;
IF (NOT(M_SUP_3))
AND sbLimit3 THEN
pwOSStatus:=W#16#4;
END_IF;
QOP_STAT.QOS_STAT_F:=QOP_STAT.QOS_STAT_F OR
pwOSStatus;
IF (NOT(M_SUP_4))
AND sbLimit4 THEN
pwOSStatus:=W#16#8;
END_IF;
QOP_STAT.QOS_STAT_F:=QOP_STAT.QOS_STAT_F OR
pwOSStatus;
IF (NOT(M_SUP_5))
AND sbLimit5 THEN
pwOSStatus:=W#16#10;
END_IF;
QOP_STAT.QOS_STAT_F:=QOP_STAT.QOS_STAT_F OR
pwOSStatus;
IF (NOT(M_SUP_6))
AND sbLimit6 THEN
pwOSStatus:=W#16#20;
END_IF;
QOP_STAT.QOS_STAT_F:=QOP_STAT.QOS_STAT_F OR
pwOSStatus;
IF (NOT(M_SUP_7))
AND sbLimit7 THEN
pwOSStatus:=W#16#40;
END_IF;
QOP_STAT.QOS_STAT_F:=QOP_STAT.QOS_STAT_F OR
pwOSStatus;
IF (NOT(M_SUP_8))
AND sbLimit8 THEN
pwOSStatus:=W#16#80;
END_IF;
QOP_STAT.QOS_STAT_F:=QOP_STAT.QOS_STAT_F OR
pwOSStatus;
IF sbCSF THEN
pwOSStatus:=W#16#100;
END_IF;
QOP_STAT.QOS_STAT_F:=QOP_STAT.QOS_STAT_F OR
pwOSStatus;
AuxValue.AUX:=AUX;
AuxValue.BA_ID:=BA_ID;
AuxValue.MSG_FILTER:=MSG_FILTER;
IF (NOT
M_SUP_1 AND sbLimit1 AND
NOT sbMsgLock) <>
sb_MSG_TRIG1 THEN
MSG_STAT_1:=INT_TO_WORD(ALARM_DQ(SIG
:= ((NOT
M_SUP_1 ) AND sbLimit1) AND (NOT sbMsgLock)
,ID := W#16#EEEE
,EV_ID := MSG_EVID_1
,CMP_ID := CMP_ID
,SD := AuxValue
));
ELSE
;
END_IF;
sb_MSG_TRIG1:=((NOT(M_SUP_1))
AND sbLimit1) AND
(NOT(sbMsgLock));
liRetVal:=ALARM_SC(EV_ID := MSG_EVID_1
,STATE := sbState
,Q_STATE := MSG_ACK_1
);
IF (NOT
M_SUP_2 AND sbLimit2 AND
NOT sbMsgLock) <>
sb_MSG_TRIG2 THEN
MSG_STAT_2:=INT_TO_WORD(ALARM_DQ(SIG
:= ((NOT
M_SUP_2 ) AND sbLimit2) AND (NOT sbMsgLock)
,ID := W#16#EEEE
,EV_ID := MSG_EVID_2
,CMP_ID := CMP_ID
,SD := AuxValue
));
ELSE
;
END_IF;
sb_MSG_TRIG2:=((NOT(M_SUP_2))
AND sbLimit2) AND
(NOT(sbMsgLock));
liRetVal:=ALARM_SC(EV_ID := MSG_EVID_2
,STATE := sbState
,Q_STATE := MSG_ACK_2
);
IF (NOT
M_SUP_3 AND sbLimit3 AND
NOT sbMsgLock) <>
sb_MSG_TRIG3 THEN
MSG_STAT_3:=INT_TO_WORD(ALARM_DQ(SIG
:= ((NOT
M_SUP_3 ) AND sbLimit3) AND (NOT sbMsgLock)
,ID := W#16#EEEE
,EV_ID := MSG_EVID_3
,CMP_ID := CMP_ID
,SD := AuxValue
));
ELSE
;
END_IF;
sb_MSG_TRIG3:=((NOT(M_SUP_3))
AND sbLimit3) AND
(NOT(sbMsgLock));
liRetVal:=ALARM_SC(EV_ID := MSG_EVID_3
,STATE := sbState
,Q_STATE := MSG_ACK_3
);
IF (NOT
M_SUP_4 AND sbLimit4 AND
NOT sbMsgLock) <>
sb_MSG_TRIG4 THEN
MSG_STAT_4:=INT_TO_WORD(ALARM_DQ(SIG
:= ((NOT
M_SUP_4 ) AND sbLimit4) AND (NOT sbMsgLock)
,ID := W#16#EEEE
,EV_ID := MSG_EVID_4
,CMP_ID := CMP_ID
,SD := AuxValue
));
ELSE
;
END_IF;
sb_MSG_TRIG4:=((NOT(M_SUP_4))
AND sbLimit4) AND
(NOT(sbMsgLock));
liRetVal:=ALARM_SC(EV_ID := MSG_EVID_4
,STATE := sbState
,Q_STATE := MSG_ACK_4
);
IF (NOT
M_SUP_5 AND sbLimit5 AND
NOT sbMsgLock) <>
sb_MSG_TRIG5 THEN
MSG_STAT_5:=INT_TO_WORD(ALARM_DQ(SIG
:= ((NOT
M_SUP_5 ) AND sbLimit5) AND (NOT sbMsgLock)
,ID := W#16#EEEE
,EV_ID := MSG_EVID_5
,CMP_ID := CMP_ID
,SD := AuxValue
));
ELSE
;
END_IF;
sb_MSG_TRIG5:=((NOT(M_SUP_5))
AND sbLimit5) AND
(NOT(sbMsgLock));
liRetVal:=ALARM_SC(EV_ID := MSG_EVID_5
,STATE := sbState
,Q_STATE := MSG_ACK_5
);
IF (NOT
M_SUP_6 AND sbLimit6 AND
NOT sbMsgLock) <>
sb_MSG_TRIG6 THEN
MSG_STAT_6:=INT_TO_WORD(ALARM_DQ(SIG
:= ((NOT
M_SUP_6 ) AND sbLimit6) AND (NOT sbMsgLock)
,ID := W#16#EEEE
,EV_ID := MSG_EVID_6
,CMP_ID := CMP_ID
,SD := AuxValue
));
ELSE
;
END_IF;
sb_MSG_TRIG6:=((NOT(M_SUP_6))
AND sbLimit6) AND
(NOT(sbMsgLock));
liRetVal:=ALARM_SC(EV_ID := MSG_EVID_6
,STATE := sbState
,Q_STATE := MSG_ACK_6
);
IF (NOT
M_SUP_7 AND sbLimit7 AND
NOT sbMsgLock) <>
sb_MSG_TRIG7 THEN
MSG_STAT_7:=INT_TO_WORD(ALARM_DQ(SIG
:= ((NOT
M_SUP_7 ) AND sbLimit7) AND (NOT sbMsgLock)
,ID := W#16#EEEE
,EV_ID := MSG_EVID_7
,CMP_ID := CMP_ID
,SD := AuxValue
));
ELSE
;
END_IF;
sb_MSG_TRIG7:=((NOT(M_SUP_7))
AND sbLimit7) AND
(NOT(sbMsgLock));
liRetVal:=ALARM_SC(EV_ID := MSG_EVID_7
,STATE := sbState
,Q_STATE := MSG_ACK_7
);
IF (NOT
M_SUP_8 AND sbLimit8 AND
NOT sbMsgLock) <>
sb_MSG_TRIG8 THEN
MSG_STAT_8:=INT_TO_WORD(ALARM_DQ(SIG
:= ((NOT
M_SUP_8 ) AND sbLimit8) AND (NOT sbMsgLock)
,ID := W#16#EEEE
,EV_ID := MSG_EVID_8
,CMP_ID := CMP_ID
,SD := AuxValue
));
ELSE
;
END_IF;
sb_MSG_TRIG8:=((NOT(M_SUP_8))
AND sbLimit8) AND
(NOT(sbMsgLock));
liRetVal:=ALARM_SC(EV_ID := MSG_EVID_8
,STATE := sbState
,Q_STATE := MSG_ACK_8
);
IF (NOT
sbMsgLock AND sbCSF) <>
sb_MSG_TRIG9 THEN
MSG_STAT_9:=INT_TO_WORD(ALARM_DQ(SIG
:= (NOT(sbMsgLock))
AND sbCSF
,ID := W#16#EEEE
,EV_ID := MSG_EVID_9
,CMP_ID := CMP_ID
,SD := AuxValue
));
ELSE
;
END_IF;
sb_MSG_TRIG9:=(NOT(sbMsgLock))
AND sbCSF;
liRetVal:=ALARM_SC(EV_ID := MSG_EVID_9
,STATE := sbState
,Q_STATE := MSG_ACK_9
);
QMSG_ERR:=((((((((MSG_STAT_1<>W#16#0) OR (MSG_STAT_2<>W#16#0)) OR
(MSG_STAT_3<>W#16#0))
OR
(MSG_STAT_4<>W#16#0))
OR (MSG_STAT_5<>W#16#0)) OR
(MSG_STAT_6<>W#16#0))
OR (MSG_STAT_7<>W#16#0)) OR
(MSG_STAT_8<>W#16#0))
OR (MSG_STAT_9<>W#16#0);
sbMsgGroupError:=(((((((((((MODE_1 AND B#16#2)=B#16#0) AND sbLimit1) AND (NOT(M_SUP_1))) OR
((((MODE_2 AND B#16#2)=B#16#0) AND sbLimit2) AND (NOT(M_SUP_2)))) OR
((((MODE_3 AND B#16#2)=B#16#0) AND sbLimit3) AND (NOT(M_SUP_3)))) OR
((((MODE_4 AND B#16#2)=B#16#0) AND sbLimit4) AND (NOT(M_SUP_4)))) OR
((((MODE_5 AND B#16#2)=B#16#0) AND sbLimit5) AND (NOT(M_SUP_5)))) OR
((((MODE_6 AND B#16#2)=B#16#0) AND sbLimit6) AND (NOT(M_SUP_6)))) OR
((((MODE_7 AND B#16#2)=B#16#0) AND sbLimit7) AND (NOT(M_SUP_7)))) OR
((((MODE_8 AND B#16#2)=B#16#0) AND sbLimit8) AND (NOT(M_SUP_8)))) OR
sbCSF;
V:=srU;
QCSF:=(NOT(MAN_EN))
AND CSF;
QERR:=(NOT(sbMsgLock))
AND sbMsgGroupError;
Q_LIM_1:=sbLimit1;
Q_LIM_2:=sbLimit2;
Q_LIM_3:=sbLimit3;
Q_LIM_4:=sbLimit4;
Q_LIM_5:=sbLimit5;
Q_LIM_6:=sbLimit6;
Q_LIM_7:=sbLimit7;
Q_LIM_8:=sbLimit8;
QOS_STAT:=B#16#0;
IF Q_LIM_1 THEN
QOS_STAT:=QOS_STAT OR
B#16#1; END_IF;
IF Q_LIM_2 THEN
QOS_STAT:=QOS_STAT OR
B#16#2; END_IF;
IF Q_LIM_3 THEN
QOS_STAT:=QOS_STAT OR
B#16#4; END_IF;
IF Q_LIM_4 THEN
QOS_STAT:=QOS_STAT OR
B#16#8; END_IF;
IF Q_LIM_5 THEN
QOS_STAT:=QOS_STAT OR
B#16#10;END_IF;
IF Q_LIM_6 THEN
QOS_STAT:=QOS_STAT OR
B#16#20;END_IF;
IF Q_LIM_7 THEN
QOS_STAT:=QOS_STAT OR
B#16#40;END_IF;
IF Q_LIM_8 THEN
QOS_STAT:=QOS_STAT OR
B#16#80;END_IF;
V_LIM_1:=U_LIM_1;
V_LIM_2:=U_LIM_2;
V_LIM_3:=U_LIM_3;
V_LIM_4:=U_LIM_4;
V_LIM_5:=U_LIM_5;
V_LIM_6:=U_LIM_6;
V_LIM_7:=U_LIM_7;
V_LIM_8:=U_LIM_8;
END_IF;
QMSG_SUP:=sbMsgLock;
END_IF;
END_FUNCTION_BLOCK
Block checksum îðèãèíàëüíîãî è âîññòàíîâëåííîãî áëîêà ñîâïàäàåò.
Äîêóìåíòàöèÿ íà áëîê (Process Control System PCS 7 PCS 7 Industry Library for S7, 09/2015) (pdf, 9Mb)
Ïðîñìîòðîâ: 4406
Êîììåíòàðèè ê ìàòåðèàëó
Âàø áóäåò ïåðâûì.
Äîáàâèòü êîììåíòàðèé