Modbus RTU常见问题汇总

最新更新时间:2015-05-05来源: elecfans关键字:Modbus  RTU  常见问题 手机看文章 扫描二维码
随时随地手机看文章
一  ModBus RTU通讯协议与ModBus通讯协议有什么区别?
    ModBus协议是应用层报文传输协议(OSI模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域。
    ModBus协议能够应用在不同类型的总线或网络。对应不同的总线或网络,Modbus协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU。目前,Modbus有下列三种通信方式:
    1.以太网,对应的通信模式是MODBUS TCP。
    2.异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等),对应的通信模式是MODBUS RTU或MODBUS ASCII。
    3.高速令牌传递网络,对应的通信模式是Modbus PLUS。
 
二  关于MODBUS RTU通讯协议的提问?
    modbus 主要由站地址(一个字节)+功能码(一个字节)+首地址(两个字节)+访问字数(两个字节)+校验码(CRC16或LRC两个字节)总共8个字节组成。其实VB中编程很简单从组建添加MSComm组建就行了,难的是校验,
 
三  modbus、rtu、modbus rtu分别是什么?
    modbus协议是工控行业的标准协议,前身为莫迪康所写,现已被施奈德收购
    而modbus分为两种协议:即串口协议(modbus rtu)和网口协议(modbus tcp)协议,一般的工控机只支持rs232或者RS485的串口模式,这个时候工控机的协议栈里就只有modbusRTU协议,当他从串口接收  到数据时,会直接根据报文中的数据进行控制,如果需要用modbusTCP协议进行传输,则需要使用带有网口的PLC
具体的帧格式如下
modbus RTU  地址域 功能码 数据 差错校验
modbus TCP  目的地址 协议id 长度 单元号 功能码 数据
 
简单的说 tcp是由RTU加工而来的
而RTU则是另外一种概念,不包含在modbus协议内
是工控行业对监控设备的简称。
 
四  关于modbus_RTU协议主机发送的命令的一些问题
• 01 读保持线圈状态(Read coil status)
• 02 读输入线圈状态(Read input status)
• 03 读保持寄存器(Read holding register)
• 04 读输入寄存器(Read input register)
• 05 写单个线圈(Force single coil)
• 06 写单个寄存器(Preset single register)
• 15 写多个线圈(Force multiple coils)
• 16 写多个寄存器(Preset multiple registers)
这些都是什么意思?
答:01 读取逻辑线圈组状态
02 读取离散量线圈组状态
03 读取一个或多个保持寄存器的二进制值
04 读取一个或多个输入寄存器的二进制值
05 改变逻辑线圈状态
06 改变单个寄存器的二进制值
15 改变多个寄存器的二进制值
16 指定多个操持寄存器的二进制值
 
五  OPC 转modbus RTU 方式 我现在有一个OPC服务器,里面很多tag,tag是AB里出来的,怎么将tag连到modbus?
     Profibus、Fielbus、Modbus、CC-link等等是各中PLC硬件支持的通讯协议,这个是各厂商的硬件属性一样.只是现在计算机组态软件都支持很多种协议的PLC.你理解反了.
     Profibus、Fielbus、Modbus、CC-link这些协议,是一种通讯协议,一般不需要你去编程,就好象你使用计算机,你不需要编写IP协议一样,只是要遵循它. 
     遵循的意思就是,你必须按照该厂家所支持的协议在PLC或者DCS硬件组态的时候按照该通讯协议设置硬件.其实这个很简单. 这里简单指的是,你学编程,重点是编写执行控制的动作的程序,硬件通讯协议不需要你自己动手写。
 
六  什么是modbus rtu master?
就是选RTU模式,因为MODBUS分为ASCII模式和RTU模式,MASER就是设置为主站,一般为PLC端,变频器设为从站,还要注意主站和从站地址的设置。
 
七  Modbus rtu 为什么没有开始和结束标记?
  由于Modbus rtu帧的每个字节是16进制数,数值范围在00~FF,若像Modbus ASCII那样用02、03表示开始和结束标记,则与数值2、3发生冲突,无法判断其是标记还是数值,无法数据解包。
 
八  modbus tcp 到 rtu的转换?
请仔细查看帧格式,
modbus RTU  地址域 功能码 数据 差错校验
modbus TCP  目的地址 协议id 长度 单元号 功能码 数据
写一个TCP转RTU的程序放到设备里做modbus网桥即可
 
九  MODBUS RTU通讯线被烧?
   用万用表量一下出来的通讯线,电压不超过5V应该没问题,一般不会烧东西,接的时候区分正和负。很多产品B是正,量一下看看。[page]
 
十  触摸屏modbus rtu怎么设置?
   一般是通过宏指令自己编程实现,当然也有支持RTU的,在通讯类型菜单
 
十一  MODBUS RTU协议中浮点数是如何存储,读到浮点数寄存器的数值如何转换成所需的浮点数?
浮点数保存的字节格式如下:
地址        +0                         +1                     +2                     +3
内容    SEEE EEEE   EMMM MMMM    MMMM MMMM    MMMM MMMM
 
这里
S 代表符号位,1是负,0是正
E 偏移127的幂,二进制阶码=(EEEEEEEE)-127。
M 24位的尾数保存在23位中,只存储23位,最高位固定为1。此方法用最较少的位数实现了较高的有效位数,提高了精度。零是一个特定值,幂是0 尾数也是0。
浮点数-12.5作为一个十六进制数0xC1480000保存在存储区中,这个值如下:
地址 +0     +1     +2     +3
内容0xC1   0x48   0x00   0x00
浮点数和十六进制等效保存值之间的转换相当简单。下面的例子说明上面的值-12.5如何转换。浮点保存值不是一个直接的格式,要转换为一个浮点数,位必须按上面的浮点数保存格式表
所列的那样分开,例如:
 
地址       +0           +1            +2            +3
格式   SEEE EEEE    EMMM MMMM     MMMM MMMM     MMMM MMMM
二进制  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。
 
十二  RS-485的设备,遵守MODBUS-RTU协议。怎样用的电脑读取信息?
   用电脑的串口,接个485转换器,接到设备的485接口,再找个串口软件,根据设备资料上的寄存器地址发送modbus报文,modbus报文通过串口软件发送啊,报文格式:01 03 00 00 00 01 84 0A 读寄存器命令。
 
十三  vb modbus给modScan32 rtu发送数据应该怎么写?
   确定两个软件哪个是主,哪个是从。然后再确定通讯协议是RTU、ASCII还是TCP。如果是TCP,就用socket控件。RTUASCII就用COM控件。然后给对应的口按照协议收发数并解析就可以了。
 
十四  ModBus RTU通讯协议与ModBus通讯协议有什么区别?
modbus 协议包括了MODBUS RTU
 
 
十五  modbus rtu通讯协议 如何判断超时?
    设置一个标志量用来表示是否超时;再用一个定时器,定时时长为发送3.5个字符的时间(当然为了保险时间可以长一些);在定时器中置超时标志;在串口中断中每收到一个字节时定时器清零;主程序中根据超时标志做相应处理。
 
十六  如何理解MODBUS协议RTU模式中的1.5和3.5字符间隔?
   发送两帧数据之间要有一定的时间间隔,以保证接收方UART能够区分。这个时间间隔在MODBUS RTU模式中要求是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
 
十七  MODBUS RTU 测试软件?
推荐:modscan32 
 
十八  MODBUS RTU协议,上位机与仪表通信,读写数据都正确,为什么仪表掉电,写入的参数又丢失了?怎么保存?
两种可能:
如果在仪表上设置参数掉电后都保存不了的话,基本可以确定是仪表问题;
有些仪表写入参数后还需要向固定的寄存器写入确认参数,为了保证写入参数真确,需要检查仪表通信部分说明书。 
关键字:Modbus  RTU  常见问题 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/qrs/2015/0505/article_22269.html

上一篇:Modbus和RS485是什么关系
下一篇:Modbus现场总线通讯协议

推荐阅读

STM32F103单片机modbus通信示例
前两天在研究STM32F103单片机的串口空闲中断时,突然想起来Modbus通信非常适合用空闲中断来处理。先看看Modbus RTU模式下的通信规范。 可以看到Modbus RTU通信模式下,数据的开始和结束是由空闲字符间隔时间来区分的,而STM32F103单片机自带串口空闲模式检测。 在通常情况下Modbus通信一帧数据的检测可以用时间判断,不停的去读取接收数据的长度是否发送变化,如果在一定时间内,接收数据的长度没有发生变化,就认为一帧数据结束完毕。具体实现可参考 STM8学习笔记---Modbus通信协议简单移植。 通过时间来判断一帧数据是否接收完成,会导致单片机不停的进入中断。而STM32F103单片机自
发表于 2022-01-05
STM32F103单片机<font color='red'>modbus</font>通信示例
Modbus转Profinet网关连接ABB变频器配置案例分析
本案例客户需求是将ABB变频器接入到西门子网络中,用到设备为西门子1200PLC,ABB变频器及开疆智能Modbus转profinet网关一个。首先打开西门子组态软件,新建一个项目。单机选项-管理通用站描述文件(GSD)安装GSD文件。点击浏览,找到GSD文件所在位置。(注意,是文件夹位置,不是找文件本身)选择Modbus转profinet网关KJ-PNG-101设置Modbus转Peofinet网关的IP地址及设备名称。(要与网关配置软件中保持一致)设置读写参数的总数据量(本例为8个字节共四个寄存器)Profinet端配置完成可以下载组态到PLC设置Modbus转Peofinet网关的modbus配置打开Modbus转Peofin
发表于 2021-12-29
<font color='red'>Modbus</font>转Profinet网关连接ABB变频器配置案例分析
STM8单片机串口同时识别自定义协议和Modbus协议
  在单片机开发中,串口是最常用的和外界交换数据的渠道,要使用串口,那必不可少的就是通信协议,通信协议就是单片机和外界通信的语言,要想正常和其他设备正常交流,首先语言必须相通。  在实际开发过程中由于各种原因,导致很多时候单片机和外界其他设备协议不兼容,在使用的时候就比较麻烦。比如单片机要和两个设备通信,但是这两个设备的通信协议的不一样,在使用时单片机就必须使用两个串口分别和两个设备通信。如果这两个设备同时使用时还不感觉到资源浪费,如果每次只接一个设备,那么另一个串口也不能作为其他功能使用,还得留着备用。这样的话单片机的资源就被白白浪费掉了。于是想着能不能在一个串口上支持两个协议,让单片机自动去识别接收到的数据使用的是哪个协议。  
发表于 2021-12-27
STM8单片机串口同时识别自定义协议和<font color='red'>Modbus</font>协议
stm8 stm8s stm8af 485接口 modbus协议代码
本人使用stm8af62a6,stm8s和stm8af大多数是互通的,只用一个库函数62a6只能使用uart3!485接口是硬件,不需要管,任何硬件接线都可以实现代码见附件,已实现通信主函数代码,主要为初始化函数,以及modbus帧接收处理函数,帧接收处理按自己的需求自行修改,本例的处理函数为接收数据再多输出一点数据单片机源程序如下:/******************************************************************mian.c文件部分******************************************************************/void mai
发表于 2021-11-12
#51单片机#Modbus通信协议的特点及其RTU协议帧数据介绍
Modbus通信协议的特点Modbus协议是应用于电子控制器上的一种通用语言。 通过此协议,控制器之间,控制器经由网络和其他设备之间可进行通信。不同厂商生产的控制设备可以连成工业网络,进行集中控制,这已成为了一种工业标准。该协议定义了控制器能够认识和使用的数据结构,描述了控制器请求访问其他设备的过程,回应其他设备的请求的方式,侦测错误记录的方法,同时制定了通信数据的格局和内容的公共格式。多机通信时,Modbus协议规定每个控制器必须知道自己的设备地址,识别按照地址发来的数据并对其做出反应,包括:决定是否产生动作,产生何种动作,若需回应,反馈消息应按Modbus协议发出。Modbus协议的整体框架和格式较为复杂庞大。Modbus协议允
发表于 2021-10-25
#51单片机#Modbus通信协议的特点及其<font color='red'>RTU</font>协议帧数据介绍
Softing推出新的软件模块,将Modbus TCP控制器连接到工业物网
Softing推出新的软件模块,用于将Modbus TCP控制器连接到工业物联网应用Softing拓展了基于Docker技术的edgeConnector产品系列。新的edgeConnector Modbus是一款灵活的Docker容器应用程序,用于连接Modbus TCP控制器。图:edgeConnector Modbus支持创新的工业边缘解决方案。(来源: Softing Industrial)继用于连接SIMATIC S7控制器的edgeConnector Siemens和用于从SINUMERIK 840D控制器访问数据的edgeConnector 840D两款产品之后,Softing又推出了edgeConnector Modb
发表于 2021-09-22
Softing推出新的软件模块,将<font color='red'>Modbus</font> TCP控制器连接到工业物网
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved