西门子1200博图编写伺服步进FB功能块 可以多轴多次调用,中文注释详细。 真实可用,经过在专用设备真实调试运行,可以直接应用到实际项目中,提供,包成功 此FB块适合PTO脉冲和PN网口模式,适合西门子伺服和第三方伺服,以及步进电机 已经成功应用的有西门子伺服s120,v90, 雷赛步进,三菱私服。

最近在给某包装产线做设备升级时遇到多轴同步控制的难题,老项目的伺服控制程序每个轴都要单独写一遍重复代码,调试起来简直要命。索性在TIA Portal里封装了个通用型伺服步进控制FB块,实测支持西门子S7-1200的PTO脉冲输出和Profinet轴控模式,顺手把调试心得整理成干货。

先看这个FB块的参数配置部分:
// 输入参数
#Axis_Enable : BOOL; // 轴使能信号
#Jog_Forward : BOOL; // 正转点动
#Jog_Backward : BOOL; // 反转点动
#Position_Set : REAL; // 目标位置(单位:mm或脉冲)
#Velocity_Set : REAL; // 运行速度(单位:mm/s或Hz)
// 输出参数
#Axis_Ready : BOOL; // 轴准备就绪
#Position_Reached : BOOL; // 定位完成信号
#Current_Position : REAL; // 当前位置反馈
参数设计上兼容了物理脉冲和总线控制两种模式,实际调试中发现PN总线模式下的V90伺服需要添加0.5ms的延时补偿,这个坑值得注意。接下来是核心运动控制逻辑:
IF #Axis_Enable THEN
CASE #Control_Mode OF
0: // PTO脉冲模式
PTO_CTRL(
ENABLE:=TRUE,
POSITION:=DINT_TO_INT(#Position_Set * #PulsePerMM),
SPEED:=DINT_TO_INT(#Velocity_Set * #PulsePerMM),
JOG_FWD:=#Jog_Forward,
JOG_REV:=#Jog_Backward,
BUSY=>#Axis_Busy,
POSITION_FB=>#Current_Position);
1: // PN总线模式
MC_Power(
ENABLE:=TRUE,
SERVO_ON=>#Servo_Status);
MC_MoveAbsolute(
EXECUTE:=#Start_Move,
POSITION:=#Position_Set,
VELOCITY:=#Velocity_Set,
DONE=>#Position_Reached);
END_CASE;
END_IF;
这个选择结构的设计让同一FB块适配不同硬件,实测雷赛DM542步进驱动器用PTO模式时,需要特别注意脉冲当量换算。比如当机械导程5mm的丝杠配1600脉冲/转的驱动器时:
#PulsePerMM := 1600 / 5; // 320脉冲/mm
有个有趣的发现:在同时控制8个步进轴做插补运动时,PTO模式下的脉冲输出间隔必须大于2μs,否则会出现丢脉冲现象。解决方法是在轴配置里勾选"Enable Smooth Frequency Change"选项。

对于总线型伺服,建议在OB30循环中断中调用FB块确保时序:
CALL "AxisControl_FB", "DB_AxisX"
(Control_Mode := 1,
Position_Set := 150.0,
Velocity_Set := 300.0);
调试三菱MR-JE-200A伺服时发现,位置到达信号需要做滤波处理,否则会因为信号抖动导致提前触发下一步动作。解决方法是在FB内部添加了20ms的延时确认:
#Position_Reached := #Internal_Done AND TON_Delay.Q;
TON_Delay(IN:=#Internal_Done, PT:=T#20ms);
实际项目应用证明,这个FB块在不同硬件间的移植非常方便。比如从V90伺服切换到台达ASDA-B3系列,只需修改轴参数DB中的硬件标识符即可。目前已稳定运行在16轴联动的物料分拣系统,连续工作72小时无异常。

需要完整FB代码的工程师朋友可以留言区扣1,看到会发完整工程文件。下次准备分享如何在这个基础上扩展电子凸轮功能,有兴趣的可以关注一波。

1287

被折叠的 条评论
为什么被折叠?



