西门子1214PLC博图程序例程,版本V15及以上,加KTP700Basic PN触摸屏画面,双相机四轴多工位检测设备案例。 程序主要有: 上下双工位4轴脉冲控制步进电机; 与上位机双相机的TCP/IP通讯; 有一台第三设备的modbus rtu通讯; 触摸屏包含多重画面,配方功能,密码功能等,可参考。
最近手上有个挺有意思的工业自动化项目,用到了西门子1214C PLC(博图V15.1)搭配KTP700 Basic PN触摸屏。这套系统控制着双工位四轴检测设备,还带着两台工业相机和第三方仪表通讯,今天给大伙儿拆解几个核心代码片段。
先看电机控制这part,四个步进轴用了脉冲+方向控制。这里用到了博图的工艺对象TO(Technology Object),直接上干货:
//轴控制功能块调用 #Axis_Control( Axis:=TO_Axis_1, //绑定工艺对象 Enable:=TRUE, JogForward:=NOT xManualMode, Position:=rTargetPos, Velocity:=1200.0); //脉冲频率Hz重点是这个TO配置里有个"硬件接口"选项,记得勾选脉冲输出类型为PTO(脉冲串输出)。之前有同事栽过跟头——选成PWM的话电机直接抽搐给你看。
双工位切换的骚操作在数据块里:
L "工位切换标志位" JC M001 L P#DB200.DBX0.0 BYTE 20 //工位1参数区 T P#DB100.DBX0.0 BYTE 20 //运行参数区 JU M002 M001: L P#DB200.DBX20.0 BYTE 20 //工位2参数区 M002: NOP 0其实就是用数组索引切换参数区,实测比直接复制数据块快30%以上。注意DB200要设成非优化访问,不然指针操作会报错。
西门子1214PLC博图程序例程,版本V15及以上,加KTP700Basic PN触摸屏画面,双相机四轴多工位检测设备案例。 程序主要有: 上下双工位4轴脉冲控制步进电机; 与上位机双相机的TCP/IP通讯; 有一台第三设备的modbus rtu通讯; 触摸屏包含多重画面,配方功能,密码功能等,可参考。
通讯方面,TCP/IP和相机交互用TSENDC/TRCVC这对黄金搭档:
[TSEND_C] -REQ=上升沿触发 -CONNECT=DB301(里面填了IP和端口) -DATA= P#DB302.Data_Area -LEN= 64调试时发现个坑:博图的TSEND_C默认带32字节头部,需要在上位机做数据偏移。后来改用RawData模式才解决,两边约定好0xAA开头0x55结尾的协议帧。
Modbus RTU部分搞了个轮询机制:
IF "200ms定时脉冲" THEN CASE #nState OF 0: //读40001保持寄存器 MB_MASTER.MB_ADDR := 3; MB_MASTER.DATA_ADDR := 40001; MB_MASTER.DATA_LEN := 2; nState := 1; 1: //处理返回数据 IF MB_MASTER.DONE THEN "仪表数据" := MB_MASTER.DATA_BLK[0]; nState := 0; END_IF; END_CASE; END_IF;注意串口参数要和仪表严格匹配,特别是停止位。之前有个项目因为仪表默认1.5停止位没改,硬是排查了两天。
触摸屏的配方功能是真香:
'配方选择事件 Sub Recipe_Select_Change() Dim recipeNo As Integer recipeNo = SmartTags("Recipe_No") Recipe.Load recipeNo Recipe.Activate End Sub配方数据直接映射到PLC的DB块,搭配下拉菜单使用美滋滋。权限功能建议别用系统自带的用户管理,自己用DB块做权限分级更灵活,比如:
[密码验证] A "输入密码" L W#16#1234 ==I = "操作员权限"最后说个踩坑经验:相机触发信号和PLC程序扫描周期不同步的话,容易丢帧。后来加了个硬件中断OB40,用DI信号触发立即处理,稳如老狗。
这套系统现在在客户那跑了大半年,据说每天14小时连轴转没掉过链子。不过调试那会儿真是掉头发,光是四轴同步精度就调了三版参数。搞自动化的兄弟都懂,现场永远比仿真器魔幻...(溜了溜了,老板喊我去修机械臂了)