Modbus协议最初由Modicon公司开发出来,是针对PLC设备设计的基于串行总线的主从模式的应用层总线设备协议。ModbusTCP是封装在TCP包内的Modbus协议,虽然有一些变化,但是根本上还是主从模式。
随着嵌入式技术的发展,国内很多系统的控制和采集单元部分为公司自主研发,一般建议这些公司的串行通讯协议采用Modbus协议,很多用户在modbus协议存在着理解错误,现在分析如下:
一、modbus的保持和输入寄存器是以word(16bit)为单位的。
比如4****(保持寄存器/输出寄存器)和3****(输入寄存器)是以字为单位的。所以,如果读40001寄存器开始的一个16位的无符号数,那么返回2个Byte,并可以从40002开始读下一个16位的无符号数。
但是,如果读40001寄存器开始的一个32位浮点数,那么,返回4个Byte,而且,下一个32位浮点数必须从40003开始。
常见问题:
1)、将40001定义为一个Byte的数据;
2)、将40001定义为32位浮点数,40002为下一个32位浮点数。
二、寄存器最小地址为1,而报文起始地址为0。
在数据报文中,所有的modbus地址都是从0开始的。也就是首次出现的数据项在报文中的地址为0。比如:
1.在控制器中,“线圈1”在Modbus报文的地址域中的地址为00 00。
2.线圈127的十六进制报文地址为007E hex(十进制的126)
3.保持寄存器40001的报文地址为00 00。因为报文功能码明确要操作“保持寄存器”,所以,协议就以“4XXXX”代表这个寄存器。
4.保持寄存器40108的报文地址为006B hex (十进制107)
总之,Modbus地址一般指4****(保持寄存器/输出寄存器)和3****(输入寄存器),这时应用层面的:
比如设备说明书可以简要说明设备支持Modbus RTU标准协议,并详细描述其地址对应关系为:40001 -- 模拟量采集通道1,16位有符号数,.....。比如组态软件的地址设置,一般为输出寄存器,从地址1开始,连续多少个。或者指明400001:16位有符号数。但是,在数据报文层面,寄存器起始地址从0开始。
数据报文包括:设备地址+功能码+起始地址+寄存器个数+校验位。其中,起始地址是从0开始的。
举例说明:从设备17读40001开始的2个寄存器数据的报文
设备地址 功能码 起始地址 寄存器个数 校验
11 03 00 00 00 02 --
常见问题:
1、使用和定义40000地址;
2、分析报文时,直接将报文起始地址当作应用层寄存器地址。
3、Modbus的写寄存器命令的不同。
常用Modbus寄存器有:线圈(Coil)、输入(Input)、保持寄存器(Holding Registers)和输入寄存器(Input Registers)。
从Modbus设备角度看,输入是上位机采集Modbus设备的信息,也就是这些寄存器是只读的,所以,Modbus协议没有写输入(Input)和输入寄存器(Input Registers)的命令。
线圈(Coil)是状态量,对应Modbus设备的开关量输出(DO),保持寄存器(Holding Registers)是模拟量,对应Modbus设备模拟量输出(AO),这些寄存器需要Modbus设备的上位机进行设置,也就是为可以写的寄存器。
在Modicon_Modbus协议 协议中,写线圈(Coil)和保持寄存器(Holding Registers)都有两种写命令:
1)、写单个寄存器:
置单线圈(Force Single Coil)功能码05(0x05)
写单个寄存器(Preset Single Holding Register)功能码06(0x06)
2)、写多个寄存器
写多线圈(Force Multiple Coils)功能码15(0x0F)
写多个寄存器(Preset Multiple Registers)功能码16(0x10)
关键字:Modbus协议 常见问题
引用地址:Modbus协议使用常见问题分析
随着嵌入式技术的发展,国内很多系统的控制和采集单元部分为公司自主研发,一般建议这些公司的串行通讯协议采用Modbus协议,很多用户在modbus协议存在着理解错误,现在分析如下:
一、modbus的保持和输入寄存器是以word(16bit)为单位的。
比如4****(保持寄存器/输出寄存器)和3****(输入寄存器)是以字为单位的。所以,如果读40001寄存器开始的一个16位的无符号数,那么返回2个Byte,并可以从40002开始读下一个16位的无符号数。
但是,如果读40001寄存器开始的一个32位浮点数,那么,返回4个Byte,而且,下一个32位浮点数必须从40003开始。
常见问题:
1)、将40001定义为一个Byte的数据;
2)、将40001定义为32位浮点数,40002为下一个32位浮点数。
二、寄存器最小地址为1,而报文起始地址为0。
在数据报文中,所有的modbus地址都是从0开始的。也就是首次出现的数据项在报文中的地址为0。比如:
1.在控制器中,“线圈1”在Modbus报文的地址域中的地址为00 00。
2.线圈127的十六进制报文地址为007E hex(十进制的126)
3.保持寄存器40001的报文地址为00 00。因为报文功能码明确要操作“保持寄存器”,所以,协议就以“4XXXX”代表这个寄存器。
4.保持寄存器40108的报文地址为006B hex (十进制107)
总之,Modbus地址一般指4****(保持寄存器/输出寄存器)和3****(输入寄存器),这时应用层面的:
比如设备说明书可以简要说明设备支持Modbus RTU标准协议,并详细描述其地址对应关系为:40001 -- 模拟量采集通道1,16位有符号数,.....。比如组态软件的地址设置,一般为输出寄存器,从地址1开始,连续多少个。或者指明400001:16位有符号数。但是,在数据报文层面,寄存器起始地址从0开始。
数据报文包括:设备地址+功能码+起始地址+寄存器个数+校验位。其中,起始地址是从0开始的。
举例说明:从设备17读40001开始的2个寄存器数据的报文
设备地址 功能码 起始地址 寄存器个数 校验
11 03 00 00 00 02 --
常见问题:
1、使用和定义40000地址;
2、分析报文时,直接将报文起始地址当作应用层寄存器地址。
3、Modbus的写寄存器命令的不同。
常用Modbus寄存器有:线圈(Coil)、输入(Input)、保持寄存器(Holding Registers)和输入寄存器(Input Registers)。
从Modbus设备角度看,输入是上位机采集Modbus设备的信息,也就是这些寄存器是只读的,所以,Modbus协议没有写输入(Input)和输入寄存器(Input Registers)的命令。
线圈(Coil)是状态量,对应Modbus设备的开关量输出(DO),保持寄存器(Holding Registers)是模拟量,对应Modbus设备模拟量输出(AO),这些寄存器需要Modbus设备的上位机进行设置,也就是为可以写的寄存器。
在Modicon_Modbus协议 协议中,写线圈(Coil)和保持寄存器(Holding Registers)都有两种写命令:
1)、写单个寄存器:
置单线圈(Force Single Coil)功能码05(0x05)
写单个寄存器(Preset Single Holding Register)功能码06(0x06)
2)、写多个寄存器
写多线圈(Force Multiple Coils)功能码15(0x0F)
写多个寄存器(Preset Multiple Registers)功能码16(0x10)
上一篇:PROFIBUS使用一定时间后故障
下一篇:PCS7冗余系统的PROFINET通讯问题
推荐阅读最新更新时间:2024-05-02 23:32
PROFINET常见问题解答
PROFINET与以太网之间的关系?
过去,工业以太网是自动化领域控制层和管理层的主要网络类型之一,用于连接PLC和PLC或者PLC和上位机。这仅仅提到的是连接网络的物理介质,即工业以太网。PLC之间或者PLC和PC之间通讯的时候,常常会使用网络协议,例如TCP/IP,UDP/IP,S7,ISO on TCP甚至FTP,Email等IT协议,这些协议运行在工业以太网上,通过这些协议完成设备之间的数据交换。与TCP等协议一样PROFINET运行在工业以太网上,只不过该协议主要用于现场级设备PLC和分布式IO之间的通讯,以及控制级PLC和PLC以及PC之间的通讯。所以从狭义上来说,PROFINET就是工业以太网中的一个
[嵌入式]
汽车发动机ECU原理 改装ECU常见问题
如果把发动机比喻成汽车的“心脏”,那么汽车的“大脑”就应该是ECU了。何为ECU?ECU是如何工作的?本文详细解析。 何为ECU?ECU有两个全称,即Engine Control Unit和Electronic Control Unit,不难看出前者为“发动机控制单元”而后者是“电子控制单元”。这是两个比较容易混淆的概念,今天我们先主要解析“Engine Control Unit”。 ECU的出现 在1967年之前,汽油机的供给系统是由化油器来供油的,这与今天的电喷发动机原理完全不同。化油器利用节气门前后的压力差吸油,不仅无法精准地控制燃油补给量,更制约了汽车动力性、环保性能的提升。Bosch等一批企业因此开发了电子燃油喷射系
[嵌入式]
万用表的常见问题使用注意事项
对于电气维修工作人员来说,万用表的使用方法我们都要注意的事项: 一、36V以下的电压为安全电压,在测高于36V直流,25V交流电时,要检查表笔是否可靠接触,是否正确连接,是否绝缘良好等,以免电击. 二、换功能和量程时,表笔应离开测试点,测试时选择正确的功能和量程,谨防误操作, 三、直流电压测量,先将量程开关转至相应的DCV量程上,然后将测试表笔跨接在被测电路上,红表笔所接的该点电压与极性显示在屏幕上. 四、交流电压测量,先将量程开关转至相应的ACV量程上,然后将测试表笔跨接在被测电路上. 五、直流电流测量,先将量程开关转至相应的DCA档位上,然后将仪表串入被测电路上. 六、交流电流测量,先将量程开关转至相应的ACA档位上,然后将仪
[测试测量]
使用水分测定仪常见问题解答
问题一:在开启水分测定仪后显示保持黑屏。 答:可能的原因有:无电压;未连接电源线;保险丝熔断;仪器损坏。 问题二:水分测定仪测量时间过长。 答:可能是选择了的关闭模式不合适。请尝试更换一种合适的关闭模式。 问题三:水分测定仪在开始测试后不能加热。 答:可能干燥单元过热导致热过载保护功能启动。为了安全操作,水分测定仪配备双重过热保护:干燥单元拥有热过载保护(双金属传感器),可以关闭加热单元。在这种情况下,请联系您的供应商。 问题四:水分测定仪测量的重复性差。 答:可能的原因有: 1.样品不均匀。例如它们有不同的成分。样品越不平均则需要更多的样品来获得较好重复性的结果。 2.选择的干燥时间太短。
[测试测量]
基于MODBUS协议的智能控制系统设计
引言 现场总线作为生产过程自动化发展的重点,对推动自动化技术起到巨大的推动作用,是现代化工业的标志。MODBUS作为现场总线的一种通信协议,它实现了PLC控制器、工控仪表与设备间的通讯和信息交换。具有MODBUS功能的工控仪表虽然应用比较广泛,但是工控仪表和PLC控制器价格较高并且没有形成自主知识产权的产品,阻碍了它的进一步发展。本文从这个问题着手,设计基于MODBUS协议的单片机控制系统,设计合理,价格低廉,自主性强,在工业控制领域具有广泛的应用前景。 1 系统总体设计 系统中计算机PC作为主机,AVR单片机作为从机,采用RS-485工业现场总线通信。由于计算机的串口采用RS232总线标准,因此在主机的串行
[单片机]
基于Modbus协议的智能压力传感器研发
1 引言
20世纪90年代以来,在 传感技术 基础上结合微处理器技术发展起来的智能能传感技术成为国际上研究的热点。传感器领域的智能化得到了快速发展,出现了不同种类的智能化传感器产品。但是,单一智能化传感器并不能充分发挥智能化的优点,只有将其与计算机联网才能真正将智能化传感器的特点全面发挥出来。本文根据 rs-485总线以差分平衡方式传输信号,具有抗干扰性好、传输距离远等特点,通过一对双绞线作为传输介质将现场设备与上位机连起来,使系统结构大为简化,同时这也大大降低了系统安装、调试以及维护的成本。通过目前国际上普遍采用的modbus通信协议进行编写,方便操作人员的阅读及使用。 2 modb
[嵌入式]
RS485中继器常见问题及解答
Q:RS485中继器的功能如何? A:RS485中继器是指RS485通讯中,用于总线隔离但能维持通讯的设备。我们知道,RS485总线上的节点数量是有限的,能做到128个节点已经相当不错了(注:每个节点代表1个末端设备),更多的节点可能会导致通讯异常。而且,以下情况的发生也会使通讯失败:电缆绝缘遭到破坏、电缆短路、末端设备的损坏使总线挂死等等。因此,我们为系统配备了RS485总线中继器,一方面可以扩展通讯节点;另一方面,能够将故障隔离,便于故障的查找和系统维护。 Q:RS485出现故障的原因? A:1. RS485总线的A、B端接反了。 2. 总线与端子接触不良。 3. 连接的端子不对。 Q:红外通讯出现
[嵌入式]
示波器使用常见问题宝典
1、如何测量直流电压? 答:首先需要设置耦合方式为直流,根据大概的范围调节垂直档位到一个合适的值,然后比较偏移线跟通道标志的位移。 2、什么是混淆抑制作用? 答:混淆是指示波器采集的频率低于实际信号最大频率的2倍采集产生的一种状况。混淆抑制是为了防止混淆的产生而专门设计的,混淆抑制可判别信号的最大频率,并以2倍的最大频率采集信号。 3、如何捕捉非周期性的信号? 答:①、设定触发电平至需要的值。②、点击主控按钮SINGLE,机器开始等待,如果有某一信号达到设定的触发电平,即采样一次,显示在屏幕上。利用此功能可以轻易捕捉到偶然发生的事件,例如幅度较大的突发性毛刺:将触发电平设置到刚刚高
[测试测量]