您现在所在的是:

无线通信

回帖:10个,阅读:13351 [上一页] [1] [2] [下一页]
1085
刹那
文章数:246
年度积分:50
历史总积分:1085
注册时间:2017/5/30
发站内信
发表于:2018/1/15 11:56:06
#0楼
看了网上的资料:
MODBUS-RTU报文模型
设备地址 功能代码 数据格式 CRC校验L CRC校验H
8bit           8bit          N*8bit   8bit          8bit
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。



请教个事,MODBUS-RTU下,RS指令发送一个报文,也就是发送一帧数据吧?modbus读取两个寄存器的值,选用8位数据位无校验1个停止位1个起始位的通讯格式,大概要花费多少时间怎么算的?波特率9600的话,是1/9600*1000=0.104ms/bit,10bit*4字节(两个寄存器)=40bit,然后40*0.104=4.16ms吗?
Modbus指令中站号,命令,还有最后的校验都是8位的需要加上去进行计算吗?也就是40是不是少算了,需要加上4*8位不?也就是40+32=72吗然后72*0.104??
modbus-rtu指令报文格式:地址位 8bit,命令:8bit,数据位N*8,校验高8bit,校验低8bit,这么一个报文 时间是不是如上所述的计算方式? 数据位那里是怎么算的? 如果是两个寄存器就是32bit?
学习电子电路、工控、计算机高级语言编程(软件方向)及网络(web方向)编程。
28283
guanyumou 版主
文章数:10587
年度积分:261
历史总积分:28283
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2018/1/15 12:11:10
#1楼
波特率的意思是,比如9600bps,指的是1000ms内传送9600个bit,你既然是8位数据位、无校验、1位停止位,那么一帧数据就是1+8+1=10bit,以读操作为例,假设PLC发01 03 00 00 00 01 84 0A,共计8个,那么基本上所耗费的时间可以粗略的计算为:10bit*8=80bit,X=80*1000/9600=8.33ms,假如从站返回01 03 02 12 34 B5 33,那么所需要的时间为:10bit*7=70bit,Y=70*1000/9600=7.29ms,所以,一次通信所需要的时间就为8.33+7.29=15.62ms,当然这还不包括Modbus RTU帧间的3.5个字符时间,在9600bps下,此时间约为4ms。
我说的不够准确,请见谅!
16644
李东泽 版主
文章数:7102
年度积分:50
历史总积分:16644
注册时间:2013/4/20
发站内信
2018春节活动(三)
英威腾变频器(三)
龙诚PLC体验(三)
三菱电机活动(一)
发表于:2018/1/15 14:15:10
#2楼
这个设置的时间应该略长一点,还要考虑信号不好的情况
1358
hmy12138
文章数:131
年度积分:50
历史总积分:1358
注册时间:2014/7/9
发站内信
发表于:2018/1/15 15:37:22
#3楼
回复 #1楼 guanyumou
厉害了
1085
刹那
文章数:246
年度积分:50
历史总积分:1085
注册时间:2017/5/30
发站内信
发表于:2018/1/15 16:40:32
#4楼
回复 #1楼 guanyumou
8N1=1+8+1=10bit  相当于正常传输一个字节 它需要传10个位对吧,那么,假设PLC发01 03 00 00 00 01 84 0A(读取一个寄存器) 这样子称为发送一帧数据? 因为根据定义,一个完整的MODBUS-RTU报文就是一帧。那假如说要读取两个寄存器PLC发01 03 00 00 00 02 84 0A  这样子也称为发送一帧数据吗?还是就变成两帧数据呢?另外,根据您举得例子,假如说返回一个01 03 02 12 34 B5 33 那么所需要的时间为:10bit*7=70bit  ;那要读取2个寄存器的值,是不是所需要的时间为:10bit*8=80bit??

最后的定义是不是就是说:不管(读或写多少个数据)一条MODBUS-RTU模式下的RS指令都只是1帧数据,对吗?

以下是我的误解,有点离谱。
我当时的理解是这样的,如读取寄存器  (01 03) 00 00 00 01 (84 0A)  括号内固定 4个字节 4x8=32bit,中间蓝色数据位为一个寄存器是2个字节,8N1的话,一个字节发送10位,那么2个字节的寄存器空间需要发送2x10=20bit,而不是16bit, 数据个数如果是2个 那就是20x2=40bit 再加上中间蓝色是4个字节的大小,那就是 40x4=160bit,以此类推,如果数据个数为100个 那就是20x100x4=8000bit,那在加上两头的32bit,也是就发送一帧modbus-rut数据包(其中包含读100个寄存器的值)需要发送8000+32=8032bit。
[此贴子已经被作者于2018/1/15 16:42:28编辑过]
39102
知道一点
文章数:23057
年度积分:794
历史总积分:39102
注册时间:2004/6/12
发站内信
工控人谈电商
2013国庆活动
2011国庆活动
发表于:2018/1/15 17:43:41
#5楼
还是用实物测试一下吧
我前边遇到的传感器,一个命令读取到2个温度+1个湿度很快,另一个要等大约13-14秒。
21718
bnnyygy
文章数:6202
年度积分:614
历史总积分:21718
注册时间:2012/3/15
发站内信
2018论坛分享达人
发表于:2018/1/15 21:44:20
#6楼
9600,就是1秒钟内能发送的位。

好像是这样的,
28283
guanyumou 版主
文章数:10587
年度积分:261
历史总积分:28283
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2018/1/16 6:36:16
#7楼
以下是引用刹那2018/1/15 11:56:06的发言:
看了网上的资料:
MODBUS-RTU报文模型
设备地址 功能代码 数据格式 CRC校验L CRC校验H
8bit           8bit          N*8bit   8bit          8bit
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。



请教个事,MODBUS-RTU下,RS指令发送一个报文,也就是发送一帧数据吧?modbus读取两个寄存器的值,选用8位数据位无校验1个停止位1个起始位的通讯格式,大概要花费多少时间怎么算的?波特率9600的话,是1/9600*1000=0.104ms/bit,10bit*4字节(两个寄存器)=40bit,然后40*0.104=4.16ms吗?
Modbus指令中站号,命令,还有最后的校验都是8位的需要加上去进行计算吗?也就是40是不是少算了,需要加上4*8位不?也就是40+32=72吗然后72*0.104??
modbus-rtu指令报文格式:地址位 8bit,命令:8bit,数据位N*8,校验高8bit,校验低8bit,这么一个报文 时间是不是如上所述的计算方式? 数据位那里是怎么算的? 如果是两个寄存器就是32bit?
你用RS指令的话,其实和这个时间关系不大,你基本不用考虑这个时间啊!如果你是三菱FX比较低端的PLC,要考虑一点就是:接收完成到下一次开始发送之间需要人为的进行一点延时!
28283
guanyumou 版主
文章数:10587
年度积分:261
历史总积分:28283
注册时间:2008/7/13
发站内信
2018论坛优秀版主
2018春节活动(三)
2017论坛优秀版主
2017国庆活动(二)
2017春节活动(三)
发表于:2018/1/16 6:36:49
#8楼
以下是引用hmy121382018/1/15 15:37:22的发言:
厉害了
不敢当!都是从前人那里学来的,也不知道对不对!
1085
刹那
文章数:246
年度积分:50
历史总积分:1085
注册时间:2017/5/30
发站内信
发表于:2018/1/16 10:20:14
#9楼
回复 #7楼 guanyumou
谢谢版主。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

62.4004