全局变量-Main
//{attribute 'qualified_only'} 这句要注释掉,否则有范围限制,需要使用Main.变量
VAR_GLOBAL
//------2种报警功能声明-----------------------
FB_启动报警 : YJ_BeepAlarm;
FB_缺料报警 : YJ_BeepAlarm;
END_VAR
FB功能块-局部变量
FB功能块中有输入变量部分,输出变量部分以及程序内使用到的局部变量
//--代码作者: 朱子文------------------
FUNCTION_BLOCK YJ_BeepAlarm
//---局部变量-------------------------
VAR_INPUT
ib_报警启动 : BOOL;
ib_报警停止 : BOOL;
if_报警周期 : REAL;//周期设置,单位ms
if_报警占比 : REAL;//0-1,代表周期中高低电平的占空比
id_报警次数 : DINT;//报警次数为0,则报警输出一直输出报警信号
END_VAR
//---输出变量-------------------------
VAR_OUTPUT
ob_报警完成 : BOOL;//如果报警次数为0,则报警完成无效
ob_报警输出 : BOOL;
END_VAR
//---程序自用局部变量------------------
VAR
vt_Time : TON;
vb_Out : BOOL;
vr_RunTrig : R_TRIG;
vr_AlarmTrig : R_TRIG;
vr_StopTrig : R_TRIG;
vd_报警次数 : DINT;
vb_报警启动 : BOOL;
vb_报警停止 : BOOL;
END_VAR
FB功能块中的程序
//------参数设置------------------------
if_报警占比 := LIMIT(0,if_报警占比,1.0);
IF if_报警周期 <= 0 THEN
if_报警周期 := 100;
END_IF
IF id_报警次数 < 0 THEN
id_报警次数 := 0;
END_IF
vb_报警启动 S= ib_报警启动;
vb_报警停止 S= ib_报警停止;
//------上升沿复位报警完成标志位--------
vr_RunTrig(
CLK:= vb_报警启动,
Q=> );
ob_报警完成 R= vr_RunTrig.Q;
vr_StopTrig(
CLK:= ib_报警停止,
Q=> );
IF vr_StopTrig.Q AND vb_报警启动 THEN
ob_报警完成 := FALSE;
ob_报警输出 := FALSE;
vb_报警启动 := FALSE;
vb_Out := FALSE;
vd_报警次数 := 0;
END_IF
//------定时时间输出--------------------
vt_Time(
IN:= vb_报警启动 AND (NOT vt_Time.Q),
PT:= REAL_TO_TIME(if_报警周期),
Q=> ,
ET=> );
vb_Out := (vb_报警启动 AND (TIME_TO_REAL(vt_Time.ET) <= (if_报警周期 * if_报警占比)));
vr_AlarmTrig(
CLK:= vb_Out,
Q=> );
//------报警输出------------------------
IF id_报警次数 = 0 THEN
ob_报警输出 := vb_Out;
ob_报警完成 := FALSE;
ELSE
IF vr_AlarmTrig.Q AND (NOT ob_报警完成) THEN
vd_报警次数 := vd_报警次数 + 1;
END_IF
IF vd_报警次数 <= id_报警次数 AND (NOT ob_报警完成) THEN
ob_报警输出 := vb_Out;
ELSE
vd_报警次数 := 0;
ob_报警输出 := FALSE;
ob_报警完成 := TRUE;
vb_报警启动 R= TRUE;
END_IF
END_IF
PRG函数中局部变量
PROGRAM PLC_PRG
VAR
gr_停止RTrig : R_TRIG;
vb_启动信号 : BOOL;
vb_停止信号 : BOOL;
vb_RunAlramDone : BOOL;
vb_RunAlarmOut : BOOL;
vf_启动报警周期 : REAL;
vf_启动报警占空比 : REAL;
vi_启动报警次数 : DINT;
vb_缺料信号 : BOOL;
vb_ShortageAlarmDone : BOOL;
vb_ShortageAlarmOut : BOOL;
END_VAR
PRG程序内容
gr_停止RTrig(CLK:= vb_停止信号, Q=> );
vf_启动报警周期 := 1000;
vf_启动报警占空比 := 0.4;
vi_启动报警次数 := 5;
//------启动报警功能块的调用--------------------
FB_启动报警(
ib_报警启动:= vb_启动信号,
ib_报警停止:= gr_停止RTrig.Q,
if_报警周期:= vf_启动报警周期,
if_报警占比:= vf_启动报警占空比,
id_报警次数:= vi_启动报警次数,
ob_报警完成=> vb_RunAlramDone,
ob_报警输出=> vb_RunAlarmOut);
//-------缺料报警停机功能--------------------------
FB_缺料报警(
ib_报警启动:= vb_缺料信号,
ib_报警停止:= gr_停止RTrig.Q,
if_报警周期:= 500,
if_报警占比:= 0.3,
id_报警次数:= 3,
ob_报警完成=> vb_ShortageAlarmDone,
ob_报警输出=> vb_ShortageAlarmOut);
本套程序麻雀虽小五脏俱全,包含了ST语言以及Codesys平台编程的大部分知识点。具体代码的解析,请见我们下回分解~