三菱FX3U与台达VFD-M两台变频器485BD板通讯案例,有教学,有注释,三菱Fx3U485-BD板.有频率设定,电流输出,正转反转停止,运行状态。
先看硬件接线,485通讯线不是随便拧的。BD板的SDA接变频器S+,SDB接S-,记得把两个设备的RDA/RDB也并上去。重点来了:每个变频器的终端电阻拨码必须关掉,就留最后一台设备打开,实测不这么干通讯必丢包。
程序方面直接上核心代码:
//通讯初始化 MOV H0C96 D8120 //波特率19200/8/N/1 MOV K1 M8161 //8位数据处理模式 //频率设定(站号1) RS D100 K8 D200 K10 //发送帧存D100,接收存D200 MOV H01 D100 //站号 MOV H06 D101 //功能码06写寄存器 MOV H20 D102 //寄存器地址高位 MOV H00 D103 //寄存器地址低位 MOV D0 D104 //设定值高位(频率*100) MOV D1 D105 //设定值低位这串代码里藏了个坑:台达的寄存器地址是16进制表示的2000H,但实际通讯时要转成十进制8192,换算成十六进制就是2000H右移一位变成1000H?别,直接按手册填2000H对应的寄存器地址,这里有个寄存器地址换算的玄学问题,实测填H2000会报错,得拆成H20和H00。
正反转控制更刺激:
//正转命令(站号1) MOV H01 D110 MOV H06 D111 MOV H20 D112 MOV H72 D113 //控制命令寄存器 MOV K1 D114 //正转01 MOV K0 D115重点在控制命令寄存器的位置,台达这个系列的隐藏命令地址是2072H,手册里得翻到附录才找得到。遇到过现场师傅死活调不动电机,最后发现是这里填成了2001H,直接问候变频器厂家的亲戚。
状态监控这块容易翻车:
//读取运行电流(站号1) RS D120 K8 D220 K7 MOV H01 D120 MOV H03 D121 //功能码03读寄存器 MOV H20 D122 //电流寄存器高位 MOV H0C D123 //电流寄存器低位 MOV K0001 D124 //读取1个寄存器 MOV K0000 D125电流值读回来是16位有符号数,得用DINT转换。有个骚操作:当电流值超过32767时会变成负数,这时候需要加65536换算,程序里记得做溢出处理。
调试时建议先用串口助手抓包,看看变频器到底有没有响应。遇到过最扯的情况——客户把485线的屏蔽层接到了设备接地,结果通讯时好时坏,用万用表量出地线有1.8V电压差,最后断开屏蔽层立马正常。
还有个祖传的坑:三菱的RS指令执行完成标志位M8029,如果在发送过程中被急停信号复位,会导致整个通讯栈崩溃。解决方法是在RS指令后面跟个延时定时器,或者用脉冲执行方式。