气缸功能块的封装和抽象
气缸有去工作位和去原位两种动作,同时为了检测是否到位,一般会配备磁性开关或者光电检测是否到达工作位和原位。如果给出输出,超时未到位,需要触发报警。
通常在急停状态下,需要断开去工作位和去原位的动作输出;在手动模式下,可以直接输出DO
信号;在自动模式下,还需要考虑一些业务逻辑,比如互锁逻辑。
功能块声明如下:
FUNCTION_BLOCK Cylinder
VAR_INPUT
emStop_nc : BOOL; // 急停信号常闭点
cmdReset : BOOL; // 复位信号
cmdWork : BOOL; // 去工位
cmdHome : BOOL; // 去原位
AutoMode : BOOL; // true: 自动模式; false: 手动模式
snWorkPos : BOOL; // 工作位传感器
snHomePos : BOOL; // 原位传感器
timeoutWork : TIME; // 工作位超时时间
timeoutHome : TIME; // 原位超时时间
END_VAR
VAR_OUTPUT
doWork : BOOL; // 气缸伸出
doHome : BOOL; // 气缸缩回
errWorkTimeout : BOOL; // 工作位置超时报警
errHomeTimeout : BOOL; // 原位超时报警
workPosDone : BOOL; // 工作位到位完成
homePosDone : BOOL; // 原位到位完成
END_VAR
VAR
timerWork : TON; // 工作位置超时定时器
timerHome : TON; // 原位超时定时器
emStopActive : BOOL; // 急停激活标志
resetHandled : BOOL; // 复位已处理标志
END_VAR
气缸的业务非常简单,直接把业务逻辑翻译成代码即可: