上一章节,我们给出的功能块源码实现的功能是输出一个占空比以及周期可调的脉冲信号。这个功能,我们可以映射成IO的高低电平功能,控制蜂鸣器报警。
全局变量-Main
//{attribute 'qualified_only'} 这句要注释掉,否则有范围限制,需要使用Main.变量
VAR_GLOBAL
//------2种报警功能声明-----------------------
FB_启动报警 : YJ_BeepAlarm;
FB_缺料报警 : YJ_BeepAlarm;
END_VAR
上面属于全局变量区,在全局变量区,我们有两个全局变量,它们的名字分别是“FB启动报警”和“FB缺料报警”,他们指向的类型都是YJ_BeepAlarm类型。实际上“YJ_BeepAlarm”我们称之为功能块。
接下来,咱们看看“YJ_BeepAlarm”功能块里面的内容。
//--代码作者: 朱子文------------------
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
上面这功能块变量部分代码包括:输入变量,输出变量以及功能块里的局部变量。这三种变量类型里面,我们可以看到,声明了很多变量。每个变量都有“单独唯一”的名字,而他们的类型使用的是“:”后面跟一个数据类型。代表的是这个变量到底是什么数据类型的数据。这里就涉及到数据类型了,常用的数据类型有“BOOL、REAL、INT、DINT、TIME”等等。
接下来的功能块里的内容,使用了RTrig上升沿功能块的调用。以及IF-ELSE等基本语法。
接下来的PRG函数文件下,我们也有变量区,都是局部变量,也有变量赋值,变量类型,以及功能块的实例化调用等等。
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);