欧姆龙CP1H MODBUS RTU通讯功能块程序 ~ CP1H PLC与变频器使用MODBUS RTU功能通讯,走MODBUS-RTU通讯用功能块写的梯形图注释齐全,方便理解程序 #Omron/欧姆龙 #Omron/欧姆龙

(直接进入正文)

最近在车间折腾欧姆龙CP1H和变频器的MODBUS RTU通讯,发现很多新手卡在功能块配置这一关。其实只要搞清楚MSG指令的脾气,这事没想象中那么玄乎。今天就拿手头调试成功的案例拆开说说,咱们直接上干货。

先唠硬件配置。CP1H自带RS485口(记得把终端电阻拨码打开),变频器那边站号设成1,波特率19200/8N1是实测最稳的组合。重点来了——串口参数必须用MOV指令提前灌到D寄存器:

// 串口参数设置

MOV #0000 D200 // 通讯格式:19200bps, 无校验, 1停止位

MOV #0001 D201 // 协议模式:MODBUS-RTU

这俩参数直接决定握手成败。见过有人把校验位设成偶校验,结果报文死活对不上,折腾一整天最后发现是这里填错了数字,血泪教训啊老铁们。

核心功能块用的是MSG指令,这货的工作逻辑得吃透。写控制字时要特别注意位状态:

// MSG指令配置示例

MSG

控制字: &D100 // 必须用地址指针!

发送区: #0 // 使用D300起始的发送数据区

接收区: #1 // 使用D400起始的接收缓冲区

超时: 3000 // 3秒超时比较稳妥

重点说说控制字D100的结构:

  • bit00: 执行标志(自动复位)
  • bit03: 错误标志(常亮说明翻车)
  • bit04: 完成标志(收到应答会自己跳)
  • bit15: 启停控制(上升沿触发)

发送数据区构造是门学问。比如要写变频器频率到40001H寄存器,得这么拼报文:

欧姆龙CP1H MODBUS RTU通讯功能块程序 ~ CP1H PLC与变频器使用MODBUS RTU功能通讯,走MODBUS-RTU通讯用功能块写的梯形图注释齐全,方便理解程序 #Omron/欧姆龙 #Omron/欧姆龙

D300: 0001 // 从站地址

D301: 1006 // 功能码06(写单寄存器)

D302: 4000 // 寄存器地址高字

D303: 0001 // 寄存器地址低字(实际是40001)

D304: 1388 // 写入值5000(对应50.00Hz)

D305: 0000 // 校验码由PLC自动计算

这里有个坑——MODBUS地址要减1。比如要操作40001,填4000就行,千万别手贱+1。之前有个小哥填了4001,结果变频器直接报非法地址,查了三小时才反应过来。

接收处理更考验细节。正常应答应该返回同样的数据帧,用CMP指令比对前4个字节能快速判断是否通讯成功:

CMP D400 D300 // 比较返回站号

<> D400 D300

JMP ERROR_HANDLE

CMP D401 D301 // 比较功能码

<> D401 D301

JMP ERROR_HANDLE

错误处理建议做成子程序复用。重点监控A393通道(通讯错误代码),常见错误码比如:

  • E@0001:端口被占用
  • E@0002:校验错误
  • E@0005:应答超时

调试时强烈建议用串口监听工具抓包。曾经遇到变频器返回数据长度不对,用监听工具发现是站号设成了十进制1而PLC发的是十六进制01,这种低级错误没工具辅助真的很难发现。

最后说个提速技巧:周期性通讯时,在MSG完成位后面加个0.5秒的TON定时器再触发下次发送,比死等超时更高效。特别是需要轮询多个从站时,这个时间差刚好能让总线喘口气。

Logo

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

更多推荐