前言:
而今朋友们对“st算法”大约比较讲究,各位老铁们都想要分析一些“st算法”的相关内容。那么小编同时在网上收集了一些对于“st算法””的相关知识,希望我们能喜欢,同学们快快来学习一下吧!这次讲一下用ST编程具体做项目的案例,搬运码垛比较简单易懂,应用也比较广泛,下面就是搬运码垛的思路,思路有了,就有了做复杂项目的基础。复杂项目都是简单项目堆积起来的,但是框架思路要对,不然稍微复杂点,那程序就没法看了。
1、搬运码垛项目控制逻辑
逻辑控制主要采用面向过程的编程方法,把所有的分解动作串联在一起。分为两部分。
第一部分是控制传送带和剪断机。
第二部分是码垛。
第一部分中分别用一个NC轴来模拟传送带,剪断机中包括两个气缸,压箱气缸和剪断气缸。除此之外,还用到两个传感器,分别检测箱子进入传送带和箱子进入剪断机。
第二部分是码垛,分别用3个NC轴来模拟机械手的X方向,Y方向和Z方向,其中还包括一个吸嘴气缸,除此之外,还包括一个传感器用于检测是否到达码垛位置。
第一部分的动作流程介绍:
第一个传感器检测到箱子进入到传送带----开启传送带,让传送带匀速运动----第二个传感器检测到箱子进入到剪断机,让压箱气缸动作----当第二个传感器检测不到箱子时,让剪断气缸动作----等待设定时间后,复位压箱气缸和剪断气缸----等待下次循环
第二部分的动作流程介绍:
当传感器检测到箱子在码垛位置----Z轴放下固定距离----让吸嘴动作----当吸嘴到达工作位,Z轴上升到固定位置----X,Y轴移动到对应的码垛位置----Z轴下降----复位吸嘴气缸----Z轴上升---XY轴回到初始位置----等待下次循环
2、控制程序讲解
程序使用功能块APP_Conv,功能块可以自己封装,或者网上下载,找我要也可以!
通过APP_Conv功能块,实现第一部分的流程。
APP_Conv里面调用了一个Axis_PTP_COE功能块和两个FB_Actuator功能块,Axis_PTP_COE用于控制传送带,FB_Actuator用于控制压箱气缸和剪断气缸。
APP_Conv包括5个Action,每个Action功能说明:
00_Init:用于系统变量的初始化,以及对伺服轴和气缸命名
10_AUTO:通过Case语句编写动作流程
20_Manual:手动控制传送带轴
30_FB:状态监控及调用气缸功能块
40_Home:让执行器和伺服轴回到初始位置
APP_Conv功能块通过case语句来调用这5个Action,首先进行系统初始化和硬件初始化。接着根据全局变量中的RqSysAutoModeIsActive变量的值,确定到底执行自动或者手动的程序。
具体程序如下:
CASE SysStep OF
0: (*Init*)
00_Init();
SysStep:=100;
100:(*Home*)
40_Home();
IF HomeDone THEN
HomeStep:=0;
SysStep:=200;
END_IF
200:(*Manual*)
IF NOT RqSysAutoModeIsActive THEN
20_Manual();
ELSE
Axis.aMoveOff();(*停止伺服电机的运动*)
SysStep:=300;
END_IF
300:(*Auto*)
IF RqSysAutoModeIsActive
AND RqSysMachineRunInCycle
AND NOT RqSysGoPauseState
AND NOT gbAlarm_NeedPause
AND NOT gbAlarm_StopAlarm THEN
10_AUTO();
ELSE
Axis.aMoveOff();(*停止伺服电机的运动*)
IF NOT RqSysAutoModeIsActive THEN
SysStep:=200;
END_IF
END_IF
END_CASE
30_FB();
通过APP_Clamp实现第二部分的码垛。
APP_Clamp里面调用了三个Axis_PTP_COE功能块和一个FB_Actuator功能块,Axis_PTP_COE用于控制机械手的X方向,Y方向和Z方向,FB_Actuator用于控制吸嘴。
APP_Clamp包括5个Action,每个Action功能说明:
00_Init:用于系统变量的初始化,以及对伺服轴和气缸命名
10_AUTO:通过Case语句编写动作流程
20_Manual:手动控制机械手
30_FB: 状态监控及调用气缸功能块
40_Home:让执行器和伺服轴回到初始位置
APP_Clamp功能块通过case语句来调用这5个Action,首先进行系统初始化和硬件初始化。接着根据全局变量中的RqSysAutoModeIsActive变量的值,确定到底执行自动或者手动的程序。
CASE SysStep OF
0: (*Init*)
00_Init();
SysStep:=100;
100:(*Home*)
40_Home();
IF HomeDone THEN
HomeStep:=0;
SysStep:=200;
END_IF
200:(*Manual*)
IF NOT RqSysAutoModeIsActive THEN
20_Manual();
ELSE
AxisX.aMoveOff();(*停止伺服电机的运动*)
AxisY.aMoveOff();(*停止伺服电机的运动*)
AxisZ.aMoveOff();(*停止伺服电机的运动*)
SysStep:=300;
END_IF
300:(*Auto*)
IF RqSysAutoModeIsActive
AND RqSysMachineRunInCycle
AND NOT RqSysGoPauseState
AND NOT gbAlarm_NeedPause
AND NOT gbAlarm_StopAlarm THEN
10_AUTO();
ELSE
AxisX.aMoveOff();(*停止伺服电机的运动*)
AxisY.aMoveOff();(*停止伺服电机的运动*)
AxisZ.aMoveOff();(*停止伺服电机的运动*)
IF NOT RqSysAutoModeIsActive THEN
SysStep:=200;
END_IF
END_IF
END_CASE
30_FB();
标签: #st算法