发布于 2013-07-04 16:20:14
30楼
本人编写的报警程序(FC调用),给大家参考以下,使用间接寻址和循环语句,适合批量处理同类设备报警,设备有故障时报警灯(红或黄)闪烁,蜂鸣器报警,按下消音报警灯继续闪烁,报警声消失,当又发生其它故障时,蜂鸣器再次响起。
如同前面提到过的报警必要集中到一个DB块,这段程序报警源来自于存储电机数据的多重背景DB块,每个电机数据占用字节长为70(下面Loop语句DI1的步长),电机状态集中到电机数据里的一个字即状态字,状态字的高字节为报警信息(本程序用了4个位),低字节为运行状态。
带引号的为符号地址(I ,Q,M或DB),非临时变量!
程序段1 消音按钮
O “Alarm ReleaseBtn" //来自门板或HMI消音按钮
O(
A "Setc1_MotorAlarmBuzzer" //30s后自动消音
L S5T#30S
SD T 900
NOP 0
NOP 0
NOP 0
A T 900
)
= #MotorAlarmReleaseButton //临时变量
L 100
T #MotorNum //临时变量
程序段2 报警处理
OPN DI 1 //报警源-电机块多重背景DB1
LAR1 P#DIX 21.0 //背景DB里报警状态起始地址
OPN "DB_Motor" //报警状态保存DB, 一台电机占一个字
LAR2 P#DBX 0.0 //报警状态临时保存DB起始地址
L #MotorNum //电机数量,工艺段电机数量即要报警的设备数量
lop1: T #LoopCounter1 //循环
//以下是报警循环,=1 报警
//隔离开关报警
A DIX [AR1,P#0.0]
FP DBX [AR2,P#0.0]
S DBX [AR2,P#1.0]
ON DIX [AR1,P#0.0]
O #MotorAlarmReleaseButton //报警复位按钮
R DBX [AR2,P#1.0]
//变频器或馈电器故障
A DIX [AR1,P#0.1]
FP DBX [AR2,P#0.1]
S DBX [AR2,P#1.1]
ON DIX [AR1,P#0.1]
O #MotorAlarmReleaseButton //报警复位按钮
R DBX [AR2,P#1.1]
//变频器保护开关过载
A DIX [AR1,P#0.2]
FP DBX [AR2,P#0.2]
S DBX [AR2,P#1.2]
ON DIX [AR1,P#0.2]
O #MotorAlarmReleaseButton //报警复位按钮
R DBX [AR2,P#1.2]
//变频器保护开关短路
A DIX [AR1,P#0.3]
FP DBX [AR2,P#0.3]
S DBX [AR2,P#1.3]
ON DIX [AR1,P#0.3]
O #MotorAlarmReleaseButton //报警复位按钮
R DBX [AR2,P#1.3]
//总报警
O DIX [AR1,P#0.0]
O DIX [AR1,P#0.1]
O DIX [AR1,P#0.2]
O DIX [AR1,P#0.3]
S "Setc1_MotorTotalAlarm" //总报警
//本地开关报警 指示灯
A DBX [AR2,P#0.0]
S "Sect1_QS_Alarm_Yellow"
//变频器、馈电器故障及保护开关跳闸报警 指示灯
O DBX [AR2,P#0.1]
O DBX [AR2,P#0.2]
O DBX [AR2,P#0.3]
S "Setc1_FC_QB_Alarm_Red"
//蜂鸣器
O DBX [AR2,P#1.0]
O DBX [AR2,P#1.1]
O DBX [AR2,P#1.2]
O DBX [AR2,P#1.3]
S "Setc1_MotorAlarmBuzzer" //报警蜂鸣器
+AR1 P#70.0 //在电机单元块(使用多重背景DB)里每个电机数据占用70个字节
+AR2 P#2.0 //报警字临时存储DB
L #LoopCounter1
LOOP lop1
程序段3 报警指示
//本地开关指示灯报警--黄灯
A "Sect1_QS_Alarm_Yellow"
A "FreePulse_0.8s"
= "AlarmHI_YH" //PLC模板输出点
//变频器、馈电器指示灯报警--复位
A "Sect1_QS_Alarm_Yellow"
R "Sect1_QS_Alarm_Yellow"
//变频器、馈电器指示灯报警--红灯
A "Setc1_FC_QB_Alarm_Red"
AN "FreePulse_0.8s"
= _AlarmHI_RH" //PLC模板输出点
//变频器、馈电器指示灯报警--复位
A "Setc1_FC_QB_Alarm_Red"
R "Setc1_FC_QB_Alarm_Red"
//蜂鸣器
A "Setc1_MotorAlarmBuzzer"
A "FreePulse_0.8s"
= "AlarmBuzzer" //PLC模板输出点
//电机报警蜂鸣器消音
O #MotorAlarmReleaseButton
ON "Setc1_MotorTotalAlarm"
R "Setc1_MotorAlarmBuzzer"
//电机报警蜂鸣器报警--复位
A "Setc1_MotorTotalAlarm"
R "Setc1_MotorTotalAlarm"