三菱FX5U通讯(rtu方式)三台台达变频器资料 采用modrw指令,同时通讯三台台达变频器。 另有采用fb方式通讯4台三菱E700变频器程序。

工业现场最让人头疼的就是设备联调,尤其是面对不同品牌的变频器混搭组网。最近刚做完一个项目,FX5U通过485总线同时控制3台台达VFD-E系列变频器和4台三菱FR-E700变频器,过程中踩了不少坑,这里把核心通讯逻辑拆解给大家。

先说台达变频器这组方案。Modbus RTU模式下,三菱的MODRW指令用起来比想象中顺手。关键点在于站号切换和功能码选择,这里我采用分时轮询方式处理三台设备:

// 台达1号变频器频率写入
MOV K1 D100       // 站号存入D100
MOV H06 D101      // 功能码06写单寄存器
MOV K2001 D102    // 频率指令地址2001H
MOV K500 D103     // 设定50.0Hz
CALL P_MODRW

// 台达2号运行指令写入
MOV K2 D100
MOV H06 D101
MOV K2000 D102    // 控制命令地址2000H
MOV K1 D103       // 正转启动
CALL P_MODRW

注意台达的寄存器地址需要换算成十进制地址,比如面板上标注2000H对应的实际地址是8192。这里有个隐藏的坑:变频器参数Pr.00需要设置为03(Modbus通信模式),否则指令死活不响应。

再来看三菱自家E700变频器的通讯实现。采用FB块封装后,程序可读性明显提升。这里我做了个带超时检测的通用功能块:

// FR-E700通讯功能块
FUNCTION_BLOCK E700_COM
VAR_INPUT
   StationNo: INT;     // 站号1-4
   Command: BYTE;      // 命令类型
   Frequency: REAL;     // 频率设定值
END_VAR
VAR_OUTPUT
   Status: BOOL;       // 通讯状态
   ErrorCode: WORD;    // 错误代码
END_VAR

// 核心通讯程序
IF Command = 1 THEN    // 启动命令
   MOV K1 D200
   MOV H1000 D201      // 运行指令地址
   MOV H0002 D202      // 正转指令
   RS485_SEND(StationNo, D200, 3)
ELSEIF Command = 2 THEN // 频率设定
   REAL_TO_WORD(Frequency, D210)
   MOV H1001 D211      // 频率设定地址 
   RS485_SEND(StationNo, D211, 2)
END_IF

实际调用时,四个变频器的控制就像搭积木:

// 控制1号E700以40Hz正转
CALL E700_COM(
   StationNo := 1,
   Command := 1,
   Frequency := 40.0,
   Status => M100,
   ErrorCode => D1000)

这里有个特别实用的技巧:在FB块里预置了频率换算公式,工程人员可以直接输入实数频率值,不用再手动处理BCD码转换。

几点实战经验:

  1. 波特率建议统一设为19200,实测这个速率下7台设备轮询周期能控制在300ms以内
  2. 台达的响应延迟比三菱多约50ms,编程时要预留缓冲时间
  3. 485终端电阻一定要接!曾经因为少接一个电阻导致3号站频繁掉线
  4. 关键参数建议做双备份,通讯失败时自动切换本地预设值

最后附上接线注意事项:台达的485端子是R+/R-,三菱是SDA/SDB,别接反极性。建议用双绞屏蔽线,每隔2米做个接地处理。程序源码已上传GitHub,需要自取(链接见评论区置顶)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐