核心内容摘要
布雷顿森林体系是如何崩溃的?
西门子smart200 MODUBS轮询通讯5个英威腾变频器启动停止状态显示和一个汇邦温控模块的温度显示和设定断线检测实际项目有西门子SMART触摸屏和PLC程序 注释齐全,还有完整的注释IO表凌晨三点盯着HMI上突然灰掉的2号变频器图标手里的浓茶已经凉透——这场景是不是很熟悉今天咱们就聊聊西门子SMART200 PLC调教5台英威腾变频器和温控模块的实战经历重点说说MODBUS轮询那些容易踩坑的细节。
硬件全家福SMART200 SR40主机自带RS485口省了买信号板5台英威腾CHF100A变频器MODBUS地址
汇邦HB-TC12温控模块地址6SMART LINE 700 IE触摸屏!网络拓扑图这里本应该放接线图但甲方爸爸说保密咱就脑补下菊花链走线吧通讯参数统一设成
-N-1这个波特率在30米距离内稳如老狗。
注意英威腾的站号设置有点反人类得长按面板上那个绿色按钮5秒才能进参数模式。
西门子smart200 MODUBS轮询通讯5个英威腾变频器启动停止状态显示和一个汇邦温控模块的温度显示和设定断线检测实际项目有西门子SMART触摸屏和PLC程序 注释齐全,还有完整的注释IO表核心程序结构采用状态机轮询每个设备分配独立轮询时隙//主程序OB1 CALL MBUS_CTRL , MODBUS主站初始化 //背景数据块自动生成 EN_SEND:TRUE MODE:0 //0-轮询模式 BAUD:9600 PORT:0 //使用CPU自带口 TIMEOUT:T#1000MS //超时设1秒足够 DONEM
1
0 //完成位用来触发轮询 ERRORM
1
1 CASE 轮询状态 OF 0: //变频器1控制 CALL MBUS_MSG EN_SEND:TRUE FIRST:轮询状态0 SLAVE:1 RW:0 //0-读取 1-写入 ADDR:16#0001 //启停命令地址 COUNT:4 //读4个寄存器 DATA_PTR:VB100 DONEM
2
0 ERRORM
2
1 IF M
2
0 THEN 轮询状态 : 1; END_IF; 1: //变频器1状态读取 ...类似结构处理状态寄存器... //其他变频器轮询状态
10: //温控模块读取 CALL MBUS_MSG SLAVE:6 ADDR:16#1000 //温度PV值 COUNT:2 DATA_PTR:VB300 ... 11: //温控设定值写入 ...处理设定值修改... END_CASE关键点来了每个MBUS_MSG必须在前一个指令完成DONE或ERROR后才能触发下一个否则会出现指令覆盖。
建议用状态变量CASE结构管理轮询顺序比用定时器靠谱得多。
变频器控制字解析示例//VB100开始的4个寄存器对应
启动命令 : VB
1
0 //位操作直接映射到HMI按钮 频率设定 : INT_TO_REAL(MW
/
1
0 //频率值放大100倍传输注意英威腾的停止命令需要发0x0004而不是简单置0这个坑让我在调试时多花了俩小时查手册。
断线检测用了个骚操作——在HMI画面上放五个隐藏的心跳灯每个对应变频器的通讯状态//每个轮询周期结束时更新心跳 IF 轮询状态9 THEN TON(心跳定时器, T#5S); IF 心跳定时器.Q THEN 断线报警 : 1; ELSE 复位报警; END_IF; END_IF;配合触摸屏的可见性动画哪个设备离线一目了然。
实测发现超过3次通讯失败才触发报警更可靠避免误报。
温控模块的数据处理要特别注意浮点转换//VB300读取到的原始数据 实际温度 : DINT_TO_REAL( (DWORD_TO_DINT(VB
300)
| DWORD_TO_DINT(VB
)/
1
0; //模块自带1位小数这里用联合体Union处理更优雅但考虑到维护人员习惯还是选择了直观的移位操作。
说个踩坑经验某台变频器偶尔会返回错误CRC后来发现是接地不规范导致的信号干扰。
解决方法是在PLC端并联120Ω终端电阻并在程序里加了三次重试机制IF 重试计数器 3 THEN 当前从站 : 异常站号; //记住断联的设备 轮询状态 : 重试专用状态位; 重试计数器 1; ELSE 记入故障日志; 重试计数器 :0; END_IF;最后推荐几个实用技巧在DB块里用注释标出每个寄存器的物理意义比如pascal//DB
DBW20 —— 1#变频器故障代码//0x0001:过流 0x0002:过压...参考CHF100手册P67HMI按钮的Press事件里加50ms延时避免操作太快冲掉指令队列定期用SMART200自带的PLCPROFINET功能备份注释别问我怎么知道的...这个项目最终IO表整理成Excel发给甲方时他们设备部长说了句比我们之前外包的规范多了。
嘿要的就是这种朴实无华的夸奖