昆仑通态MCGS与3台施耐德ATV12变频器通讯程序:稳定可靠,自动准备
昆仑通态MCGS与3台施耐德ATV12变频器通讯程序 实现昆仑通态触摸屏与3台施耐德ATV12变频器通讯,程序稳定可靠,同时解决了施耐德ATV变频器断电重启后,自准备过程。 无需人为再准备。 器件:昆仑通态TPC7062KD触摸屏,3台施耐德ATV12变频器,附送接线说明和设置说明 功能:实现频率设定,启停控制,实际频率读取等,状态指示
工业现场里摸爬滚打过的兄弟都知道,施耐德ATV12这老伙计虽然皮实耐用,但每次断电重启后的自检流程能把人急出高血压——必须手动按RUN键才能继续干活。最近刚好用昆仑通态TPC7062KD搞了个三台联控方案,实测半年没掉过链子,今天给大伙拆解下实现思路。
硬件接线上没玩什么花活,RS485总线手拉手连起来,注意终端电阻和屏蔽层接地这些常规操作。重点说下通讯参数配置:波特率19200、8数据位、偶校验、1停止位,三个变频器分别设站号1/2/3。MCGS这边设备窗口里挂载ModbusRTU主站,关键参数截图放这了:
![设备通道配置截图]
(这里本应有配置截图,主要展示站号1-3对应的设备地址分配)
昆仑通态MCGS与3台施耐德ATV12变频器通讯程序 实现昆仑通态触摸屏与3台施耐德ATV12变频器通讯,程序稳定可靠,同时解决了施耐德ATV变频器断电重启后,自准备过程。 无需人为再准备。 器件:昆仑通态TPC7062KD触摸屏,3台施耐德ATV12变频器,附送接线说明和设置说明 功能:实现频率设定,启停控制,实际频率读取等,状态指示
启停控制脚本是核心中的核心,直接上干货:
//启动1号机 Sub OnStart1() SendData(1, 6, 16#2000, 1) //功能码06写保持寄存器 SetTimer("CheckReady1", 1000) //启动状态轮询 End Sub //停机脚本类似,把写入值改为0就行注意看功能码06的用法,这里直接怼到变频器的控制寄存器(16#2000)。但施耐德的坑在于写入后需要等它内部状态切换,所以后面跟了个定时器轮询。
真正解决断电自启问题的秘诀藏在这个状态检测循环里:
Sub CheckReady1_Timer() Dim status = ReadStatus(1) If status.bit0 = 1 Then //bit0对应运行标志 SetLamp("Run1", 1) //更新触摸屏指示灯 KillTimer("CheckReady1") Else SendData(1, 3, 16#3200, 1) //重读状态寄存器 End If End Sub重点在于3200这个状态寄存器的解析,实测发现断电重启后该寄存器会返回FF直到自检完成。这时候程序会自动重试读取,直到返回正常值才会停止轮询——这就实现了无人值守的自恢复。
频率设定部分有个小细节要注意,施耐德的数据格式是16位有符号整数,但MCGS默认用32位浮点。转换函数这么写:
Function HzToReg(freq) HzToReg = Int(freq * 100) //0.01Hz分辨率 If HzToReg < 0 Then HzToReg = 65536 + HzToReg //处理负数 End If End Function比如要设25.5Hz,实际写入的寄存器值是2550。这里要是没做补码转换,负数频率设定直接跪给你看。
项目上线后发现个邪门问题:偶尔会丢包。后来在设备窗口的高级设置里把超时时间从默认300ms调到800ms,同时把轮询间隔从500ms拉长到1秒,世界顿时清净了。这提醒我们ModbusRTU的时序容错很关键,特别是多从站时总线切换需要时间缓冲。
整套方案现在扔在陶瓷厂的拉坯机上,24小时连轴转没出过幺蛾子。关键是把施耐德的说明书没写清楚的那些寄存器地址都试出来了,各位要是照搬记得把站号改明白,别三台机器一起抽风。源码包里有实测可用的地址映射表,比官方文档靠谱多了。
