Vous êtes sur la page 1sur 2

FUNCTION_BLOCK FB2

{S7_tasklist:='OB86,OB100'}
VAR
//Enthlt die Lokaldaten des aktuellen OBs
TOP_SI : STRUCT
EV_CLASS : BYTE;
EV_NUM : BYTE;
PRIORITY : BYTE;
NUM : BYTE;
TYP2_3: BYTE;
TYP1 : BYTE;
ZI1:WORD;
ZI2_3 : DWORD; //Byte 0 enthlt die Profibusadresse
//Byte 1 enthlt die Subnet-Nummer
END_STRUCT;
//Daten werden nicht bentigt
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;
RUECK : INT;
END_VAR
VAR_OUTPUT
QRACKF : BOOL; //= 1, wenn Station ausfllt
QRACKOK : BOOL; //= 1, wenn Station wiederkommt
SUBN_ID : BYTE; //Nummer des DP_Mastersystems
RACK_NO : WORD; //Profiusadresse des Racks
END_VAR
BEGIN
RUECK:=SFC6(TOP_SI:=TOP_SI,START_UP_SI:=START_UP_SI);
//wenn der Baustein im OB100 aufgerufen wird:
IF (TOP_SI.NUM = 100) THEN
//Initialisierungen beim Neustart der CPU
;
ELSE
//Initialisierung von QRACKF und QRACKOK
QRACKF :=0;
QRACKOK:=0;
//Prfen auf Strung
IF (TOP_SI.EV_NUM=16#C5) THEN
QRACKF := 1;
END_IF;
//Prfen auf Ausfall
IF ((TOP_SI.EV_NUM=16#C4) AND NOT(TOP_SI.EV_CLASS=16#38)) THEN
QRACKF := 1;
END_IF;
//Prfen auf Wiederkehr
IF ((TOP_SI.EV_NUM=16#C4) AND (TOP_SI.EV_CLASS=16#38)) THEN
QRACKOK := 1;
END_IF;
//Profibusadresse ermitteln (Byte0)
RACK_NO := DWORD_TO_WORD(TOP_SI.ZI2_3 & 16#FF);
//Subnetz-Nummer ermitteln (Byte1)
SUBN_ID := DWORD_TO_BYTE(SHR(IN:=TOP_SI.ZI2_3 & 16#FF00, N:=16#08));
//Auswertungsvorschlag
IF (QRACKF) THEN
CASE WORD_TO_INT(BYTE_TO_WORD(SUBN_ID)) OF
1 : CASE WORD_TO_INT(RACK_NO) OF
1 :
//DB1.SUBN_ID1_RACK_NO1 :=1;
;
5 :
//DB1.SUBN_ID1_RACK_NO5 :=1;
;
END_CASE;
;
2 :
// Anweisungen_fr Subnet2
;
3 :
// Anweisungen fr Subnet3
;
END_CASE;
END_IF;
IF (QRACKOK) THEN
CASE WORD_TO_INT(BYTE_TO_WORD(SUBN_ID)) OF
1 : CASE WORD_TO_INT(RACK_NO) OF
1 :
//DB1.SUBN_ID1_RACK_NO1 :=0;
;
5 :
//DB1.SUBN_ID1_RACK_NO5 :=0;
;
END_CASE;
;
2 :
// Anweisungen_fr Subnet2
;
3 :
// Anweisungen fr Subnet3
;
END_CASE;
END_IF;
END_IF;
END_FUNCTION_BLOCK

Vous aimerez peut-être aussi