气缸控制-功能块记录
最近,在写程序的时候需要控制一些气缸。虽然写过很多气缸控制的程序,但从来没有写成功能块。以至于每次都要重新写。一个是懒,没有管理好自己做过的一些程序。一个是对气缸的控制有很多种方式,可能这次写的下次也不一定能很好的用上。
不过防止自己下回还要重新写,这里还是写一个做个记录。
软件:codesysV3.5SP16
气缸控制思路:
手动模式切换到自动模式,使气缸回位
手动模式下,手动按钮点一次气缸到工作位,再点一次气缸回原点位
开机模式,到工作位上升沿触发,气缸到工作位,到原点位上升沿触发,气缸回位。
气缸回原点位,到工作位计时,到时间工作位,或原点位的磁性开关无信号报警。
手动复位。
功能块程序:
定义:
(*
Description: 气缸控制 Type01
Version : V1.0.0
Author : Lee
Date : 2024.12.27
Company :
*)
FUNCTION_BLOCK FB_Cylinder_Ctrl_Type01
VAR_INPUT
bManual_Mode : BOOL; //手动模式
bCylinder_Manual : BOOL; //手动按钮
bCylinder_ToWork : BOOL; //到工作位自动
bCylinder_ToHome : BOOL; //到原点位自动
bCylinder_InWork : BOOL; //气缸在工作位
bCylinder_InHome : BOOL; //气缸在原点位
bClear_Error : BOOL; //气缸报警清除
rCylinder_InWork_Time : REAL; //到工作位时间判断-s
rCylinder_InHome_Time : REAL; //到工作位时间判断-s
END_VAR
VAR_OUTPUT
bCylinder_Enable : BOOL; //气缸输出
bCylinder_ToWork_Error : BOOL; //到工作位报警
bCylinder_ToHome_Error : BOOL; //到原点位报警
END_VAR
VAR
fb_Manual_Mode_F : F_TRIG; //手动模式下降沿
fb_Cylinder_Manual_R : R_TRIG; //手动按钮上升沿信号
fb_Cylinder_ToWork_R : R_TRIG; //自动到工作位上升沿
fb_Cylinder_ToHome_R : R_TRIG; //自动到原点位上升沿
fb_Cylinder_SR : SR; //气缸控制SR
fb_Cylinder_ToWork_Ton : TON; //气缸到工作位判断
fb_Cylinder_ToHome_Ton : TON; //气缸到原点位判断
END_VAR
功能块程序段:
//控制信号
fb_Manual_Mode_F(CLK:= bManual_Mode);
fb_Cylinder_Manual_R(CLK:= bCylinder_Manual);
fb_Cylinder_ToWork_R(CLK:= bCylinder_ToWork);
fb_Cylinder_ToHome_R(CLK:= bCylinder_ToHome);
(*
气缸控制,手动模式切换到自动模式后,复位气缸
手动模式下,手动按钮点一次气缸工作,再点一次气缸回位
开机模式,到工作位上升沿触发,气缸到工作位,到原点位上升沿触发,气缸回位
*)
fb_Cylinder_SR(SET1:= ((bManual_Mode AND fb_Cylinder_Manual_R.Q) OR fb_Cylinder_ToWork_R.Q) AND fb_Cylinder_SR.Q1=FALSE,
RESET:= ((bManual_Mode AND fb_Cylinder_Manual_R.Q) OR fb_Cylinder_ToHome_R.Q OR fb_Manual_Mode_F.Q) AND fb_Cylinder_SR.Q1,
Q1=> );
bCylinder_Enable := fb_Cylinder_SR.Q1;
//气缸报警
fb_Cylinder_ToWork_Ton(IN:= bCylinder_Enable=TRUE ,PT:= REAL_TO_TIME(rCylinder_InWork_Time*1000.0));
fb_Cylinder_ToHome_Ton(IN:= bCylinder_Enable=FALSE ,PT:= REAL_TO_TIME(rCylinder_InHome_Time*1000.0));
IF fb_Cylinder_ToWork_Ton.Q AND bCylinder_InWork=FALSE THEN
bCylinder_ToWork_Error := TRUE;
END_IF
IF fb_Cylinder_ToWork_Ton.Q AND bCylinder_InHome=FALSE THEN
bCylinder_ToHome_Error := TRUE;
END_IF
IF bClear_Error THEN
bCylinder_ToWork_Error := FALSE;
bCylinder_ToHome_Error := FALSE;
END_IF
程序段调用:
不同机器上的气缸控制各不相同,有的有磁性开关,有的无,有的单信号控制有的多信号控制。上述只是其中一种,有好的控制思路及方式还希望各位朋友多多分享。
因篇幅问题不能全部显示,请点此查看更多更全内容