您的当前位置:首页正文

气缸控制-功能块记录

来源:华佗健康网

最近,在写程序的时候需要控制一些气缸。虽然写过很多气缸控制的程序,但从来没有写成功能块。以至于每次都要重新写。一个是懒,没有管理好自己做过的一些程序。一个是对气缸的控制有很多种方式,可能这次写的下次也不一定能很好的用上。

不过防止自己下回还要重新写,这里还是写一个做个记录。

软件: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

程序段调用:

不同机器上的气缸控制各不相同,有的有磁性开关,有的无,有的单信号控制有的多信号控制。上述只是其中一种,有好的控制思路及方式还希望各位朋友多多分享。

因篇幅问题不能全部显示,请点此查看更多更全内容