电工学习网

 找回密码
 立即注册
查看: 1692|回复: 0
打印 上一主题 下一主题

关于MODBUS通讯轮询

[复制链接]
跳转到指定楼层
楼主
发表于 2021-12-14 11:38:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做个小项目,1200带10个变频器,采用MODBUS通信方式,由于每个变频器除控制起停以外,还要读取,电压、电流、状态等参数,因此数据量也不小,而MODBUS通信只能做轮询,所以写参数的时候会有延迟,轮询时间超过1S估计客户很难接受,所以考虑尽可能缩短轮询时间,从网上查了一些资料,总结一下思路吧。
  • 采用类似于步进的方式,用MB_COMM_LOAD的done引脚作为开始步进标志位,利用MB_COMM_MASTER的done和error引脚做步进标志。
  • 在第1条轮询的基础上,采用读或写连续地址,减少master功能块的数量,此种方法受功能码的限制,以本次项目为例说明,本项目控制的变频器,写报文为06H功能码,读为03H功能码(据了解设备厂家很少支持所有的功能码,可能跟芯片价格有关,再者编程工作量也比较大),06H功能码数据长度为1个WORD不能写到连续多个地址,03H可以读多个连续地址,写的不可避免要增加工作量。
  • 利用FB多重背景和间接寻址来做,将MB通信块放入FB选择多重背景,LOAD功能块可以建立常量,MASTER功能块引脚MB_ADDR、MODE、DATA_ADDR、DATA_LEN、DATA_PTR分别建立到STRUCT数组里面,利用数组索引,给这些参数赋不同的值,从而读或写MB数据,本次项目中DATA_PTR长度不同,STRUCT数组是统一的数据长度,定义接收数据长度时,我按我需要的最长4个WORD定义的,由于写只能是1WORD所以可能会有问题,后来实测我只写到第一个WORD即可写过去,不知道这样做会不会有问题,目前运行正常。
  • 利用串口服务器或者类似设备转为TCP通信,串口服务器据说可以自动轮询,效果无法用数据表达,数据量大有条件可以使用。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-4-28 12:00

Powered by © 2011-2022 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表