初学MODBUS,有个问题请教大家:由于项目对实时性要求较高,想问一下如果有6个子节点,
由于项目对实时性要求较高,想问一下如果有6个子节点,不考虑主机数据处理、显示、按键扫描等因素,9600波特率,轮训一遍最快需要多久?再如果提高到115200波特率呢? 3-6s。 每个节点有多少数据呀? 每个节点只是2字节(16bit)数据 3到6秒,时间太长了,项目要求不能大于100ms读一次数据,运算后输出相应的动作,如果3秒读一次再判断可能早出事故了,不知道用MODBUS这种控制方式合适不? ----------------------------------------------------------------------//计算不对,看8楼的新计算
----------------------------------------------------------------------
9600的BPS 一字节大约需要1ms,自己计算下。
看下Modbus消息帧,数据帧与数据帧之间的间隔为3.5char,3.5字符数据的间隔约4ms,数据帧内字节与字节有一个1.5char的时间间隔。以上为标准Modbus。
每个节点 2bytes 数据数据需要2ms,加上数据间隔时间3.5char(4ms)和1.5char(2ms),算6ms。接收每个节点数据需要7ms,算上节点数据间隔,可以做到远小于100ms,足够一切按键操作和屏幕刷新、数据处理。Modbus足够处理完成了。
-------------------------------------------------------------------------------- 谢谢阿丑的分析,这周在硬件上模拟试验一下。实验完后报告结果。 9600波特率不行,看modbus-RTU标准,下行一般不少于8个字节(05等某些功能码除外),比如03功能码 :地址功能码03起始地址高 起始地址低 寄存器数高 寄存器数低 校验低 校验高 共8个字节,上行是:地址功能码字节数 数据高 数据低 ... ... 校验低 校验高,按你的情况,一个来回有8+7共15个字节加上帧间隔最小3.5字节时间*2即7个字节,即使其他时间全部为0也有22个字节的时间,6个节点共132个,9600波特兰按1ms一个字节,也得132ms,115200也许差不多 http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_602236YMRYY0.jpg
(原文件名:2010-12-04_141545.jpg)
是我计算糊涂了。
在简单的消息帧模型下,重新计算下每帧数据耗时时间。9600bps,传送1bit用时1/9600*1000=0.104ms,传送1BYTE大概1.04ms(数据位+停止位+校验位=10bits)。
每节点数据2字节,每帧数据=1(address)+1(function code)+2(Data大于2字节)+2(CRC16)=4 字节,约为4*1.04=4.16ms。加上2*3.5char(1.04*7=7.28ms),每帧数据发送耗时4.16+7.28=12ms。
加上数据接收,数据处理,100ms足够了。具体的可以实际验证下。还有错误的话欢迎请大家指出
Modbus分 发送帧 和 返回帧,以03指令为例
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_602243G0KXBM.jpg
(原文件名:发送帧 和 返回帧.jpg)
发送和返回数据大小就不一样。
modbus通讯中的上位机,下位机处理信息的机制又不一样。是中断还是轮询,就会造成时间响应上的不同,具体看程序设计了。
考虑时间因素的话,可以提高BPS。 mark 算得真仔细,赞一个 什么都不考虑,单独考虑总线负载最大化得话,6个接点,每接点10字节以下,基本500毫秒内足足有余
页:
[1]