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