ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx

上传人:b****6 文档编号:8604376 上传时间:2023-05-12 格式:DOCX 页数:9 大小:23.02KB
下载 相关 举报
ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx_第1页
第1页 / 共9页
ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx_第2页
第2页 / 共9页
ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx_第3页
第3页 / 共9页
ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx_第4页
第4页 / 共9页
ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx_第5页
第5页 / 共9页
ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx_第6页
第6页 / 共9页
ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx_第7页
第7页 / 共9页
ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx_第8页
第8页 / 共9页
ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx

《ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx》由会员分享,可在线阅读,更多相关《ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx(9页珍藏版)》请在冰点文库上搜索。

ModBus RTU通讯协议与ModBus通讯协议有什么区别之欧阳美创编Word下载.docx

•01读保持线圈状态(Readcoilstatus)

•02读输入线圈状态(Readinputstatus)

•03读保持寄存器(Readholdingregister)

•04读输入寄存器(Readinputregister)

•05写单个线圈(Forcesinglecoil)

•06写单个寄存器(Presetsingleregister)

•15写多个线圈(Forcemultiplecoils)

•16写多个寄存器(Presetmultipleregisters)

这些都是什么意思

答:

01读取逻辑线圈组状态

02读取离散量线圈组状态

03读取一个或多个保持寄存器的二进制值

04读取一个或多个输入寄存器的二进制值

05改变逻辑线圈状态

06改变单个寄存器的二进制值

15改变多个寄存器的二进制值

16指定多个操持寄存器的二进制值

5、OPC转modbusRTU方式我现在有一个OPC服务器,里面很多tag,tag是AB里出来的,怎么将tag连到modbus?

Profibus、Fielbus、Modbus、CC-link等等是各中PLC硬件支持的通讯协议,这个是各厂商的硬件属性一样.只是现在计算机组态软件都支持很多种协议的PLC.你理解反了.

Profibus、Fielbus、Modbus、CC-link这些协议,是一种通讯协议,一般不需要你去编程,就好象你使用计算机,你不需要编写IP协议一样,只是要遵循它. 

遵循的意思就是,你必须按照该厂家所支持的协议在PLC或者DCS硬件组态的时候按照该通讯协议设置硬件.其实这个很简单.这里简单指的是,你学编程,重点是编写执行控制的动作的程序,硬件通讯协议不需要你自己动手写。

6、什么是modbusrtumaster?

就是选RTU模式,因为MODBUS分为ASCII模式和RTU模式,MASER就是设置为主站,一般为PLC端,变频器设为从站,还要注意主站和从站地址的设置。

7、Modbusrtu为什么没有开始和结束标记?

由于Modbusrtu帧的每个字节是16进制数,数值范围在00~FF,若像ModbusASCII那样用02、03表示开始和结束标记,则与数值2、3发生冲突,无法判断其是标记还是数值,无法数据解包。

8、modbustcp到rtu的转换?

请仔细查看帧格式,

写一个TCP转RTU的程序放到设备里做modbus网桥即可

9、MODBUSRTU通讯线被烧?

用万用表量一下出来的通讯线,电压不超过5V应该没问题,一般不会烧东西,接的时候区分正和负。

很多产品B是正,量一下看看。

10、触摸屏modbusrtu怎么设置?

一般是通过宏指令自己编程实现,当然也有支持RTU的,在通讯类型菜单

11、MODBUSRTU协议中浮点数是如何存储,读到浮点数寄存器的数值如何转换成所需的浮点数?

浮点数保存的字节格式如下:

地址 

+0 

+1 

+2 

+3

内容 

SEEEEEEE 

EMMMMMMM 

MMMMMMMM 

MMMMMMMM

这里

S代表符号位,1是负,0是正

E偏移127的幂,二进制阶码=(EEEEEEEE)-127。

M24位的尾数保存在23位中,只存储23位,最高位固定为1。

此方法用最较少的位数实现了较高的有效位数,提高了精度。

零是一个特定值,幂是0尾数也是0。

浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值如下:

地址+0 

内容0xC1 

0x48 

0x00 

0x00

浮点数和十六进制等效保存值之间的转换相当简单。

下面的例子说明上面的值-12.5如何转换。

浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表

所列的那样分开,例如:

+0 

+2 

+3

格式 

SEEEEEEE 

EMMMMMMM 

MMMMMMMM 

MMMMMMMM

二进制 

11000001 

01001000 

00000000 

00000000

十六进制 

C1 

48 

00 

00

从这个例子可以得到下面的信息:

符号位是1表示一个负数 

幂是二进制10000010或十进制130,130减去127是3,就是实际的幂。

尾数是后面的二进制数10010000000000000000000

在尾数的左边有一个省略的小数点和1,这个1在浮点数的保存中经常省略,加上一个1和小数点到尾数的开头,得到尾数值如下:

1.10010000000000000000000

接着,根据指数调整尾数.一个负的指数向左移动小数点.一个正的指数向右移动小数点.因为指数是3,尾数调整如下:

1100.10000000000000000000

结果是一个二进制浮点数,小数点左边的二进制数代表所处位置的2的幂,例如:

1100表示(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)=12。

小数点的右边也代表所处位置的2的幂,只是幂是负的。

例如:

.100...表示(1*2^(-1))+(0*2^(-2))+(0*2^(-2))...=0.5。

这些值的和是12.5。

因为设置的符号位表示这数是负的,因此十六进制值0xC1480000表示-12.5。

12、RS-485的设备,遵守MODBUS-RTU协议。

怎样用的电脑读取信息?

用电脑的串口,接个485转换器,接到设备的485接口,再找个串口软件,根据设备资料上的寄存器地址发送modbus报文,modbus报文通过串口软件发送啊,报文格式:

010300000001840A读寄存器命令。

13、vbmodbus给modScan32rtu发送数据应该怎么写?

确定两个软件哪个是主,哪个是从。

然后再确定通讯协议是RTU、ASCII还是TCP。

如果是TCP,就用socket控件。

RTU\ASCII就用COM控件。

然后给对应的口按照协议收发数并解析就可以了。

14、ModBusRTU通讯协议与ModBus通讯协议有什么区别?

modbus协议包括了MODBUSRTU

15、modbusrtu通讯协议如何判断超时?

设置一个标志量用来表示是否超时;

再用一个定时器,定时时长为发送3.5个字符的时间(当然为了保险时间可以长一些);

在定时器中置超时标志;

在串口中断中每收到一个字节时定时器清零;

主程序中根据超时标志做相应处理。

16、如何理解MODBUS协议RTU模式中的1.5和3.5字符间隔?

发送两帧数据之间要有一定的时间间隔,以保证接收方UART能够区分。

这个时间间隔在MODBUSRTU模式中要求是1.5和3.5字符间隔,也即是传输1.5和3.5个字符的时间,它与设置的通信参数有关,计算为:

若串口通信参数设置为(注:

开始位固定为1):

数据位8,奇偶校验位1,停止位1,波特率9600bps,

则传输一个字符(即1个字节)的时间为:

(1+8+1+1)/9600=0.00114583s=1.1454583ms

1.5字符间隔=1.5x1.1454583ms=1.71818745ms

3.5字符间隔=3.5x1.1454583ms=4.00910405ms

17、MODBUSRTU测试软件?

推荐:

modscan32 

18、MODBUS RTU协议,上位机与仪表通信,读写数据都正确,为什么仪表掉电,写入的参数又丢失了?

怎么保存?

两种可能:

如果在仪表上设置参数掉电后都保存不了的话,基本可以确定是仪表问题;

有些仪表写入参数后还需要向固定的寄存器写入确认参数,为了保证写入参数真确,需要检查仪表通信部分说明书。

MODBUS结论总结

2012年04月20日10:

22

Modbus协议最初由Modicon公司开发出来,现在Modbus已经是工业领域全球最流行的协议。

支持传统的RS-232、RS-422、RS-485和以太网设备。

有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。

如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。

Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。

协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。

标准的Modicon控制器使用RS232C实现串行的Modbus。

Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以 

发送数据到Master端以响应请求;

Master端也可以直接发消息修改Slave端的数据,实现双向读写。

Modbus协议需要对数据进行校验,另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。

因此,Modbus协议的可靠性较好。

ASCII协议和RTU协议进行的比较:

协议

开始标记

结束标记

校验

传输效率

程序处理

ASCII

:

(冒号)

CR,LF

LRC

直观,简单,易调试

RTU

CRC

不直观,稍复杂

LRC校验:

LRC域是一个包含一个8位二进制值的字节。

LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。

LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。

它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。

CRC校验:

CRC域是两个字节,包含一16位的二进制值。

它由传输设备计算后加入到消息中。

接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。

1、读可读写数字量寄存器(线圈状态):

计算机发送命令:

[设备地址][命令号01][起始寄存器地址高8位][低8位][读取的寄存器数高8位][低8位][CRC校验的低8位][CRC校验的高8位] 

例:

[10][01][00][13][00][25][CRC低][CRC高] 

意义如下:

<

1>

设备地址:

在一个485总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备通讯。

例子中为想和16号(十进制的16是十六进制的10)通讯。

2>

命令号01:

读取数字量的命令号固定为01。

3>

起始地址高8位、低8位:

表示想读取的开关量的起始地址(起始地址为0)。

比如例子中的起始地址为19。

4>

寄存器数高8位、低8位:

表示从起始地址开始读多少个开关量。

例子中为37个开关量。

5>

CRC校验:

是从开头一直校验到此之前。

在此协议的最后再作介绍。

此处需要注意,CRC校验在命令中的高低字节的顺序和其他的相反。

设备响应:

[设备地址] 

[命令号01] 

[返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位] 

[CRC校验的高8位]例:

[10][01][05][CD][6B][B2][0E][1B][CRC低][CRC高]意义如下:

设备地址和命令号和上面的相同。

返回的字节个数:

表示数据的字节个数,也就是数据1,2...n中的n的值。

数据1...n:

由于每一个数据是一个8位的数,所以每一个数据表示8个开关量的值,每一位为0表示对应的开关断开,为1表示闭合。

比如例子中,表示20号(索引号为19)开关闭合,21号断开,22闭合,23闭合,24断开,25断开,26闭合,27闭合...如果询问的开关量不是8的整倍数,那么最后一个字节的高位部分无意义,置为0。

CRC校验同上。

2、读只可读数字量寄存器(输入状态):

和读取线圈状态类似,只是第二个字节的命令号不再是1而是2。

3、写数字量(线圈状态):

[命令号05] 

[需下置的寄存器地址高8位] 

[低8位] 

[下置的数据高8位] 

[CRC校验的低8位] 

[CRC校验的高8位] 

[10][05][00][AC][FF][00][CRC低][CRC高] 

设备地址和上面的相同。

命令号:

写数字量的命令号固定为05。

需下置的寄存器地址高8位,低8位:

表明了需要下置的开关的地址。

下置的数据高8位,低8位:

表明需要下置的开关量的状态。

例子中为把该开关闭合。

注意,此处只可以是[FF][00]表示闭合[00][00]表示断开,其他数值非法。

注意此命令一条只能下置一个开关量的状态。

如果成功把计算机发送的命令原样返回,否则不响应。

4、读可读写模拟量寄存器(保持寄存器):

[命令号03] 

[起始寄存器地址高8位] 

[读取的寄存器数高8位] 

[10][03][00][6B][00][03][CRC低][CRC高] 

读模拟量的命令号固定为03。

表示想读取的模拟量的起始地址(起始地址为0)。

比如例子中的起始地址为107。

表示从起始地址开始读多少个模拟量。

例子中为3个模拟量。

注意,在返回的信息中一个模拟量需要返回两个字节。

[10][03][06][02][2B][00][00][00][64][CRC低][CRC高] 

例子中返回了3个模拟量的数据,因为一个模拟量需要2个字节所以共6个字节。

其中[数据1][数据2]分别是第1个模拟量的高8位和低8位,[数据3][数据4]是第2个模拟量的高8位和低8位,以此类推。

例子中返回的值分别是555,0,100。

5、读只可读模拟量寄存器(输入寄存器):

和读取保存寄存器类似,只是第二个字节的命令号不再是2而是4。

6、写单个模拟量寄存器(保持寄存器):

[命令号06] 

[10][06][00][01][00][03][CRC低][CRC高] 

写模拟量的命令号固定为06。

表明了需要下置的模拟量寄存器的地址。

表明需要下置的模拟量数据。

比如例子中就把1号寄存器的值设为3。

注意此命令一条只能下置一个模拟量的状态。

modbus通讯协议与R485通讯协议的区别?

可以通用吗?

strura 

3级 

被浏览269次 

2013.07.12

检举

LongTech

采纳率:

54% 

4级 

2013.07.13

RS485是接线口modbus是协议。

他是建立在RS485是接线口的基础上进行通讯的。

所以modbus离不开485,485也离不开MODBUS前半部分说的基本正确,(RS485是接线口)与(485也离不开MODBUS)回答错误RS485不不完全是接线口,它是一种电气标准,包含机械特性,电气特性等特点,可以找一些通信书籍看看,描述有很多特点;

485也离不开MODBUS,理解也狭隘了,用485通信的规约很多,modbus只是其中比较常用的有一种规约,如IEC103,CDT等全是RS485通信方式,还有一点modbus不完全在RS485通信方式,还有TCP方式,modbusplus有详细介绍,很简单

Modbus通讯协议通讯格式及模式区别的疑问

lnn0032 

被浏览20次 

2013.11.21

资料上都是说:

“ASCII模式:

一个信息中的每8位字节作为2个ASCII字符传输的,这种模式的主要优点是允许字符之间的时间间隔长达IS,也不会出现错误。

RTU模式:

,信息中的每8位字节分成2个4位16进制的字符,该模式的主要优点是在相同波特率下其传输的字符的密度高于ASCII模式,每个信息必须连续传输。

“能否各据一个实例。

另外,两种模式传输的一个字节的格式:

“1起始位,7位数据,,奇/偶校验时1位;

无奇偶校验时0位,(LRC)1位,带校验1停止位;

无校验2止位”总长度超过了一个字节8位的长度,是不是数据位是软件给定,其他是在传输中由硬件根据设定自动产生。

QQ124914603

51% 

回答第一个问题:

ASCII协议的起始和结束有固定字符表示,比如收到"

"

就认为报文开始,收到回车就认为报文结束。

其报文均为ASCII码可见字符,因此较16进制字节使用效率较低。

RTU协议使用数据传输的间隔表示数据的起始和结束,报文前有大于3.5个字节的空闲那么认为报文开始,报文后有3.5以上个字节的间隔就认为报文结束。

第二个问题:

一个字节8位的长度指的是数据存储占用的寄存器空间,而问题中提到的传输格式中单个字节加起始位、校验位、停止位后长度大于8,这个和一个字节8个位没有冲突。

串行通信为了确保数据传输的准确性、完整性,在每发送一个字节有效数据的时候前后加上了起始位、校验位、停止位。

也就是说为了有效准确的传输一个8位数据,在通信链路中实际传输了11个位

关于MODBUSRTU通讯协议的提问

5

我想用VB编写一个关于具有MODBUSRTU通讯协议的温控表的软件,但是我对MODBUSRTU通讯协议从未涉及,希望能够提供关于MODBUSRTU通讯协议的一些具体的内容,以及结合相应的VB程序给与具体的讲解。

我在网上也能搜到一些关于MODBUSRTU的介绍和VB程序代码,但是依照我现在的能力无法正确解读其内容的实质,希望各位能给与帮助,我需要的是详尽和细致的内容。

满意答案

傅晓华 

2009-02-21

modbus桢结构:

地址功能码开始地址数据长度CRC检验码像你这种应该是使用功能3例如要问RTU(地址是0x01,要问得数据在0x02上,长度是一个字)就准备一个数组MESSAGE[255],从MESSAGE[0]开始赋值&

H01,&

H03,&

H00,&

H02,&

Hxx,&

Hxx,(最后两个是CRC校验码,我没算)这样得一串数据叫一帧(MODBUS就是主问一帧从回一帧来运行的),接着就是打开MSCOMM,用个循环把数组按顺序放到输出缓冲发送就好了,接着就是读接受缓冲,分析数据了,回来的应该是&

Hxx,(地址,功能码,长度,数据,CRC校验)CRC校验完成后你就可以提取中间得数据部分了,大概过程就是这样,最近一直在自己搞PIC单片机,通讯就是用得MODBUS。

要学MODBUS最好就是下个MOSBUS得测试软件,有好多的

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2