//第三部分
// Decide R0 and R1 status GONG
IF N_DR= W#16#1E THEN
R0_RUN:=1;R1_RUN:=1;
TEMP6 :=DR[1].CPU_LED_ID AND W#16#FF00;
IF TEMP6=W#16#F800 THEN R0_MAST:=1;R1_MAST:=0;
ELSE
R1_MAST:=1;R0_MAST:=0;
END_IF;
END_IF;
IF N_DR= W#16#F THEN
TEMP6 :=DR[1].CPU_LED_ID AND W#16#FF00;
IF TEMP6=W#16#F800 THEN R0_RUN:=1;R0_MAST:=1;R1_RUN:=0; R1_MAST:=0;
ELSE
R0_RUN:=0;R0_MAST:=0;R1_RUN:=1; R1_MAST:=1;
END_IF;
END_IF;
// IF DR[10].LED_ON=W#16#0 THEN IFM1_OK:=1; ELSE IFM1_OK:=0; END_IF;
// IF DR[11].LED_ON=W#16#0 THEN IFM2_OK:=1; ELSE IFM2_OK:=0; END_IF;
//End decide GONG
TEMP2 :=TEMP3 AND DW#16#1C79B8F3;
IF TEMP2 <> DW#16#0 THEN
CPU_FAULT :=TRUE;
ELSE
CPU_FAULT :=FALSE;
END_IF;
LED_ID1 := DR[1].CPU_LED_ID;
LED_ID2 := DR[2].CPU_LED_ID;
LED_ID3 := DR[3].CPU_LED_ID;
LED_ID4 := DR[4].CPU_LED_ID;
LED_ID5 := DR[5].CPU_LED_ID;
LED_ID6 := DR[6].CPU_LED_ID;
LED_ID7 := DR[7].CPU_LED_ID;
LED_ID8 := DR[8].CPU_LED_ID;
LED_ID9 := DR[9].CPU_LED_ID;
LED_ID10 := DR[10].CPU_LED_ID;
LED_ID11 := DR[11].CPU_LED_ID;
LED_ID12 := DR[12].CPU_LED_ID;
LED_ID13 := DR[13].CPU_LED_ID;
LED_ID14 := DR[14].CPU_LED_ID;
LED_ID15 := DR[15].CPU_LED_ID;
LED_ID16 := DR[16].CPU_LED_ID;
LED_ID17 := DR[17].CPU_LED_ID;
LED_ID18 := DR[18].CPU_LED_ID;
LED_ID19 := DR[19].CPU_LED_ID;
LED_ID20 := DR[20].CPU_LED_ID;
LED_ID21 := DR[21].CPU_LED_ID;
LED_ID22 := DR[22].CPU_LED_ID;
LED_ID23 := DR[23].CPU_LED_ID;
LED_ID24 := DR[24].CPU_LED_ID;
LED_ID25 := DR[25].CPU_LED_ID;
LED_ID26 := DR[26].CPU_LED_ID;
LED_ID27 := DR[27].CPU_LED_ID;
LED_ID28 := DR[28].CPU_LED_ID;
LED_ID29 := DR[29].CPU_LED_ID;
LED_ID30 := DR[30].CPU_LED_ID;
LED_ON :=TEMP3;
LED_BLINK :=TEMP4;
;
//**********************************************************************************
// Message suppression during the startup
//**********************************************************************************
IF siRUNUPCNT = 0 // RUNUPCYC cycle already elapsed ?
THEN
ALARM_OUT :=TRUE;
ELSE
siRUNUPCNT := siRUNUPCNT - 1;
END_IF;
END_CASE;
//**************************************************************************************
// Messages with ALARM_8P
//**************************************************************************************
// STRING variables must not be linked to ALARM8_P as auxiliary values
// so transfer in array of bytes
ALARM_8P_1
(EN_R := TRUE, // Update output ACK_STATE
ID := 16#EEEE, // Data channel for messages (always 16#EEEE)
EV_ID:= EV_ID, // Message number > 0
SIG_1:= ALARM_OUT AND CPU_FAILURE, // Signal 1 to be monitored
SIG_2:= ALARM_OUT AND CPU_FAULT, // Signal 2 to be monitored
SIG_3:= 0, // Signal 3 to be monitored
SIG_4:= 0, // Signal 4 to be monitored
SIG_5:= 0, // Signal 5 to be monitored
SIG_6:= 0, // Signal 6 to be monitored
SIG_7:= 0, // Signal 7 to be monitored
SIG_8:= 0, // Signal 8 to be monitored
SD_1 := AUX_PR01, // Auxiliary value 1
SD_2 := AUX_PR02, // Auxiliary value 2
SD_3 := AUX_PR03, // Auxiliary value 3
SD_4 := AUX_PR04, // Auxiliary value 4
SD_5 := AUX_PR05, // Auxiliary value 5
SD_6 := AUX_PR06, // Auxiliary value 6
SD_7 := AUX_PR07, // Auxiliary value 7
SD_8 := AUX_PR08, // Auxiliary value 8
SD_9 := AUX_PR09, // Auxiliary value 9
SD_10:= AUX_PR10); // Auxiliary value 10
QMSG_ERR := ALARM_8P_1.ERROR; // ERROR status parameter
MSG_STAT := ALARM_8P_1.STATUS; // STATUS status parameter
MSG_ACK := ALARM_8P_1.ACK_STATE; // Current OS confirmation status
END_FUNCTION_BLOCK
//修改自西门子源程序 交流 QQ275578306