核心内容摘要
烈火燃情,牌局风云:当剧烈运动遇上心跳扑克
西门子200Smart加威纶触摸屏工位控制系统程序。
西门子200smart_PLC程序加威纶触摸屏画面功能有6路模拟量输入2台8路温控仪和一台伺服驱动器的modbus 485轮询通讯腹读写数据伺服电机脉冲定位控制冒泡排序法还有TCP通讯指令使得用户可以对设备的检测数据实时追溯。
最近在搞工控项目用到了西门子200Smart PLC和威纶通触摸屏搭了个工位控制系统。
这系统看着不复杂但实际调试时真被几个通讯协议折腾得够呛。
特别是那两路Modbus轮询搞不好就数据打架伺服定位还时不时抽风。
今天把核心代码扒出来晒晒太阳权当给同行避坑指南。
先看模拟量处理这块。
6路
mA信号接入SM1231模块程序里直接映射到AIW寄存器。
关键是要做量程转换和滤波处理。
下面这段代码用梯形图实现LD SM
0 MOVW AIW0, VW100 //压力传感器原始值 ITD VW100, VD200 DTR VD200, VD204 MOVR VD204, VD208 -R
6
0, VD208 //减去4mA对应值 /R
2
0, VD208 //除以量程跨度 *R
1
0, VD208 //量程
bar MOVR VD208, VD300 //最终工程值存入VD300这段代码最骚的操作在量程转换那块。
4mA对应640020mA对应32000通过减基值再按比例缩放最后换算成实际物理量。
调试时发现偶尔有跳变后来在触摸屏上加了移动平均滤波才稳住。
Modbus通讯是重头戏。
两台温控仪加伺服驱动器共用485总线必须做好轮询节奏。
用西门子自带的Modbus库指令时必须严格遵守状态机流程LDN SM
1 M
0 //初始化完成标志 LD M
0 AN T40 //10ms间隔 CALL MBUS_MSG:SBR1, 03, 1, 40001, 8, VB1000 //读温控仪1参数 LD M
0 A T40 AN T41 CALL MBUS_MSG:SBR1, 03, 2, 40001, 8, VB1100 //读温控仪2参数 LD M
0 A T41 AN T42 CALL MBUS_MSG:SBR1, 06, 3, 40100, 1, VB1200 //写伺服目标位置这里用T40/T41定时器做轮询间隔每个报文必须等前一个完成才能触发。
调试时发现伺服响应超时后来把站号3的超时参数从1000ms调到2000ms才正常。
VB1000开始的区域存放的是温控仪的PV值、SV值需要配合触摸屏做数据绑定。
西门子200Smart加威纶触摸屏工位控制系统程序。
西门子200smart_PLC程序加威纶触摸屏画面功能有6路模拟量输入2台8路温控仪和一台伺服驱动器的modbus 485轮询通讯腹读写数据伺服电机脉冲定位控制冒泡排序法还有TCP通讯指令使得用户可以对设备的检测数据实时追溯。
伺服定位这块用了PTO脉冲输出。
200Smart的Q
0口发脉冲方向信号接Q
1。
关键是要处理好加速曲线LD SM
0 PLS 0, 5000, 500, 0 //通道05000Hz目标频率500ms加速时间 MOVD 200000, SMD72 //设置脉冲数 ATCH INT_0:INT0, 19 //脉冲完成中断 ENI这个PLS指令配置的S曲线加速实测比梯形加减速更顺滑。
中断程序里要记得复位定位完成标志位否则下次触发会报错。
遇到过伺服偶尔丢步的情况最后发现是急停回路接触不良导致使能信号闪断。
数据追溯功能用TCP通讯实现。
PLC做客户端主动上传数据LDN SM
1 CALL ETHx_Config //以太网初始化 LD M
1
0 //上传触发信号 CALL TCP_Send:TSEND, 1, VB2000, 50, 5000VB2000里打包了时间戳、工艺参数和报警代码。
上位机用Python写了个简单的接收服务数据直接扔进MySQL。
调试时被防火墙拦截过后来改用502端口才畅通。
最有趣的当属用冒泡排序处理质量检测数据。
虽然PLC跑排序有点勉强但对付十几个数据点还行FUNCTION_BLOCK BubbleSort VAR_INPUT Data: ARRAY[
.10] OF REAL; END_VAR VAR_TEMP i,j: INT; temp: REAL; END_VAR FOR i : 1 TO 9 DO FOR j : 1 TO 10-i DO IF Data[j] Data[j1] THEN temp : Data[j]; Data[j] : Data[j1]; Data[j1] : temp; END_IF END_FOR END_FOR这个FB块用在检测工位把10组尺寸测量值排序后取中位数。
虽然效率比不上快排但胜在稳定不丢数据。
实测排序10个浮点数约需30ms对产线节奏影响不大。
调试这系统最大的教训是Modbus设备一定逐个调通后再组网伺服使能回路要加冗余保护TCP通讯心跳包不能省。
现在产线跑得挺稳就是触摸屏画面被操作工吐槽太丑——这事儿得找UI设计背锅咱程序猿只管功能正常。