西门子1200伺服控制5轴程序:‘152a-多功能机械手与台达伺服应用‘
西门子1200伺服控制5轴程序-152a 程序采用1200系列PLC,项目实现以下功能: (1).三轴机械手联动取放料PTO脉冲定位控制台达B2伺服 (2).台达伺服速度模式应用+扭矩模式应用实现收放卷 (3).
西门子1200玩转五轴伺服:工厂老鸟的实战拆解
最近搞到一套挺有意思的PLC程序——基于西门子1200的五轴控制。这玩意儿把机械手控制、收放卷张力控制这些工厂常见需求打包实现了,最骚的是程序架构做得跟乐高积木似的,随便拆了就能复用。咱今天就扒开代码看看门道。
先说机械手控制
,三轴联动用PTO脉冲控制台达B2伺服这个操作挺典型。程序里直接封装了Axis_Ctrl功能块,调用时填个背景数据块就能生成独立控制单元。看这段速度模式切换代码:
CASE
#Mode_Select OF
1
:
//速度模式
#SINA_PARA( Axis:=Axis1, Mode:=3, VelocLimit:=500.0 );
2
:
//扭矩模式
#SINA_PARA( Axis:=Axis1, Mode:=4, TorqueLimit:=80.0 );
END_CASE
;
这里用SINA_PARA函数块动态改伺服模式,注意扭矩模式给了80%的力矩限制——这个值根据实际卷径要动态计算,程序里用了个Diameter_Calc功能块实时更新,防止断料。
模块化设计是真香
,每个气缸动作都被拆成独立FC。比如夹爪气缸模块:
FUNCTION "Gripper_Cylinder" : Void
VAR_INPUT
Sensor_OK : Bool; //到位信号
TimeOut : Time := T#5S; //超时报警
END_VAR
VAR_OUTPUT
AlarmCode : Byte;
END_VAR
带超时检测和报警编码,要加新气缸直接Ctrl+C改个名字就能用。程序里连手动/自动切换都做成了标准接口,不同设备间移植改个管脚映射就行。
威纶通触摸屏有个骚操作
,把报警信息做成矩阵显示。用了个二维数组变量:
Local_HMI_Alarm
[
0
]
[
0
]
=
"E001 伺服过载"
Local_HMI_Alarm
[
0
]
[
1
]
=
"检查电机温度"
...
配合分页指令实现滚动显示,比传统逐条报警省了70%的界面空间。PLC端用ALARM_8功能块触发对应位,这招适合报警点多的设备。
断电保持处理得很细
,不光记录各轴当前位置,连气缸状态都存了掉电保持变量。关键是用了个Position_Buffer功能块,每100ms把实际位置写入保持区:
IF
NOT
"Power_Fail"
THEN
"DB_Axis1"
.
RetainPos :
=
"ActualPos_Axis1"
;
END_IF
;
这样就算突然断电,上电后直接读取RetainPos就能回原位置。实测位置偏差不超过3个脉冲,比重新回零节省至少20秒。
这套程序最牛逼的是把工厂常见的零碎功能都标准化了,要自己从头写起码得个把月。现在直接拆它的功能块——比如那个带速度前馈的张力控制算法模块,稍改改参数就能套在不同收卷设备上。搞工控的都知道,这种能当积木用的代码才是真生产力工具。
(项目资源在文末,需要的老铁自取。提醒下博图版本建议用V15以上,V14SP1有些FB接口要手动适配下)
最近在调试西门子1200 PLC的五轴控制时,发现结构化编程真是工程项目的救命稻草。这次项目里三轴机械手的联动控制特别有意思,咱们直接上干货看看实现逻辑。
机械手的PTO脉冲控制用到了台达B2伺服的绝对定位功能,这里的关键是轴与轴之间的联动时序。看这段轴组态代码:
AxisGroup[1].MoveAbsolute(Pos:=300.0, Velocity:=50.0);
AxisGroup[2].WaitUntilDone();
IF AxisGroup[1].Done THEN
AxisGroup[3].MoveAbsolute(Pos:=150.0, Velocity:=30.0);
END_IF
这种级联触发方式保证了取料动作的连贯性。注意velocity参数要根据机械结构调整,太快容易导致末端抖动,亲身经历调了三天才找到最佳参数组合。
收放卷部分的双模式切换是项目难点,速度模式跑主线,扭矩模式防断料。核心代码在模式切换逻辑:
IF Material_Tension > Max_Tension THEN
Servo_Mode := Torque_Mode;
MC_WriteParameter(Servo1, 0x2050, 2); //切换扭矩模式
ELSE
Servo_Mode := Speed_Mode;
MC_WriteParameter(Servo1, 0x2050, 1);
END_IF
这里0x2050是台达伺服的运行模式寄存器地址,实测发现模式切换需要至少200ms的稳定时间,否则驱动器会报Fault 09错误。
模块化设计是这个项目的精髓。我建了个通用轴控制块FB500,接口定义贼实用:
FUNCTION_BLOCK FB500
VAR_INPUT
TargetPos : REAL;
JogSpeed : REAL := 50.0;
TorqueLimit : REAL := 80.0;
END_VAR
VAR_OUTPUT
CurrentPos : REAL;
AxisStatus : WORD;
END_VAR
调用时直接FB500(轴1,…),不同规格的伺服只需调整扭矩限制参数。特别要说的是断电保持功能,在DB块里勾选"Retain"属性后,配合S7-1200的超级电容,实测断电72小时位置数据不丢失。
威纶通触摸屏的交互逻辑要和PLC程序严格对应。比如手动模式下,每个轴的JOG按钮都要关联PLC的上升沿触发:
IF HMI_JogFwd[1] AND NOT Last_JogFwd[1] THEN
FB500_Instance[1].Jog(Forward:=TRUE);
END_IF
这种边沿检测能有效防止操作员长按按钮导致的意外动作。报警显示部分建议用字位映射,把16个报警点对应到不同的报警文本,比单个位关联省事多了。
项目里的暂停继续功能有个小技巧:在暂停时立即记录各轴当前位置到保持型DB,继续运行时用MoveRelative指令走剩余距离。千万别用绝对定位,否则重新上电后可能跑飞。
最后丢个调试时发现的坑:博图V15的PTO指令周期和V14有微小差异,升级版本后要重新校准脉冲当量。建议在轴配置里加个校准系数参数,方便现场调整。整个项目包已经整理好,包含电气图纸的EPLAN文件,伺服参数都导出成.csv了,拿过去改改就能用。
西门子1200伺服控制5轴程序-152a
程序采用1200系列PLC,项目实现以下功能:
(1).三轴机械手联动取放料PTO脉冲定位控制台达B2伺服
(2).台达伺服速度模式应用+扭矩模式应用实现收放卷
(3).程序为结构化编程,每一功能为模块化设计,功能:自动_手动_单步_暂停后原位置继续运行_轴断电保持_报警功能_气缸运行及报警.
(4).每个功能块可以重复调用,可以建成库,用时调出即可!(可以复制出来当作自己的块来调用)
(5
).上位机采样威纶通触摸屏
(6).程序博图V14SP1 V15 或者更高版本都可以打开
(7) 内容包括:博途V14SP1程序
项目CAD电气图纸
威纶通触摸屏程序
参考本案例熟悉掌握结构化编程技巧,扩展逻辑思维。
