对于程序里常用的执行机构,最好总结出一个标准功能块,通过改参数,实现这个功能块不同的功能,下面以用的最多执行机构-气缸为例,讲一下达到封装标准的功能块使用的思路。
1、 气缸介绍气缸上下、伺服左右运行、吸气吹气等等,都是具有两个状态的逻辑对象。我们的气缸一般有两个状态,工作状态和非工作状态,我们一般把非工作状态叫做基本位,工作状态叫做工作位。
气缸使用电磁阀来切换气路,一般气缸分为单电磁阀气缸和双电磁阀气缸。
单电磁阀:通过单个电磁阀来控制气缸的正反动作, 用磁性开关是无法使气缸停到中间某个位置的。
双电磁阀:通过两个电磁阀分别控制气缸的正反向运行,例如三位五通的电磁阀执行器的。
检测气缸的到位信号一般有两种方法,第一种通过时间限位来实现:根据气缸的移动速度,计算出到达工作位置的时间,通过这个时间来确实是否到位。第二种通过气缸上的实际到位信号来判断是否到位。一般气缸带有磁性开关(一般2个,检测两端到位),用来检测气缸到位情况 (这个也是PLC的输入信号)
2、标准的气缸功能块气缸功能块FB_Actuator适用于各种气缸(例如单/双电磁阀气缸,时间限位/硬件反馈气缸等),首先了解一下FB_Actuator控制原理。
功能块程序结构
1) FB_Actuator功能块输入输出管脚的介绍
功能块
输入管脚:
inWork: 在工作位置的实际信号输入
inBasic: 在基本位置的实际信号输入
FilterInWork: 在工作位置滤波时间
FilterInBasic: 在基本位滤波时间22
rqWork: 到工作位指令
rqBasic: 到基本位指令
EnableManuWorkBt: 使能到工作位按钮
EnableManuBasicBt: 使能到基本位按钮
btManuWork: 手动按钮
btManuBasic: 手动按钮
TimeOutWork: 到工作位超时报警时间,单位s
TimeOutBasic: 到基本位超时报警时间,单位s
bUseTimeLimit: 利用时间做限位到位开关,不使用实际的反馈点
DoWorkTimeOutId: 超时报警的ID号
DoBasicTimeOutId: 超时报警的ID号
bLockByItself: 是否自锁
bForceEnableManualBt: 强制使用手动按钮功能,不需要转换到手动模式
sName: 执行器名字
输出管脚:
IsWork: 已经到了工作位置
IsBasic: 已经到了基本位
doWork: 开始到工作位置输出信号
doBasic: 开始到基本位输出信号
RqManuWorkALarm: 手动,不在工作位条件不满足报警
RqManuBasicALarm: 手动,不在基本位置条件不满足报警
bError: 错误
MoveWorkTime: 到工作位时间计时,单位s
MoveBasicTime: 到基本位时间计时,单位s
2) 执行器的HMI模板介绍
执行器使用的模板是PH_ACTER,该模板中包括了手动控制执行机构的控件,显示从基本位(工作位)到工作位(基本位)移动的时间控件,到达基本位,工作位的状态显示控件和执行器的名字。
HMI
3) 模板的调用
执行器的程序中,是单电磁阀的气缸,并且有实际信号的反馈。具体调用步骤如下:
第一步:新建变量,实例化功能块
声明
其中FBisManualActive是自动使能,rqwork是要求执行器从基本位运行到工作位。
第二步:调用相关功能块
RqSysAutoModeIsActive:=true; //切换到自动模式
fbActuator.sName:="吸嘴"; //对执行器命名,用于区分
fbActuator(
inWork:=stInput.biSnVacuuSor, //执行器反馈到位信号
FilterInWork:=t#20ms , //反馈信号的滤波
rqWork:=rqwork , //要求执行器动作
sName:= ,
isWork=> ,
isBasic=> ,
doWork=>stOutput.bqClamperSuck, //用输出模块控制执行器的动作
);
第三步:HMI模板调用
通过HMI中的Frame控件来调用HMI模板
HMI
调用Frame控件之后,进入Frame属性里面设置相关参数:
1) 设置调用HMI控件,选择congfigure,添加PH_ACTER作为模板。
2) 通过绑定变量Main.fbActuator,实现控制器上的程序变量和HMI上的控件的对应。
想要原程序看看的可以私信我!
,