modbus 通讯常见问题
- 格式:docx
- 大小:18.00 KB
- 文档页数:2
Modbus通讯注意事项及测试经常看到有很多同学在做Modbus通讯时,不知道如何设置参数,同时,如果通讯失败后,如何判断失败原因。
本文将重点介绍Modbus通讯的几个常见注意事项、通讯超时时间计算及常用的Modbus通讯测试工具。
很多同学在做Modbus通讯时,需要连续读取多个现场设备的数据,虽然也编写了Modbus轮询的程序,但是有时还是无法正常通讯。
有时虽然能够保证通讯,但是所有现场设备的轮询周期很长。
本文将从MBUS_CTRL的超时时间参数设置来说明超时时间设置的重要性。
一、通讯地址设定利用Modbus协议可以实现设备间的数据交换。
Modbus通讯理论上支持4种Modicon PLC地址,即0*、1*、3* 和4*四种,分别表示开出(中间线圈)、开入、模入、模出(中间寄存器)等数据地址。
与西门子或其它设备中的开入、开出、模入、模出地址完全不对应。
可以理解为0*和1*对应位地址的读写操作,3* 和4*字地址的读写操作。
此处0*、1*、3* 和4*表示长度有的为5位数字、有的为6位,其实和Modbus通讯无关,只是和软件的表示方式有关。
按照Modbus通讯时最常用的是RTU读请求格式:从站地址(1个字节)、功能代码(1个字节)、从站数据起始地址(2个字节)、读数据长度(2个字节)、CRC校验(2个字节)可见,只需设置起始从站数据区起始地址和通讯长度即可。
特别注意,Modbus地址遵从IEC1的地址标准(最小地址为*1),西门子遵从IEC0的标准(最小地址为0,如M0.0)。
因此,不同标准的地址做通讯时需要做地址变换,即加1的操作。
二、通讯故障诊断在做Modbus通讯时经常会出现通讯失败的现象,如果判断是程序问题还是别的问题,其实完全可以利用常见的Modbus测试软件来判断。
常见的Modbus测试软件有Modscan和Modsim。
也可以使用常见的串口调试工具软件,如SSCOM42等。
其中Modscan软件可以读取Modbus从站的数据,如果利用Modscan软件可以建立连接,但是设备间直连后无法通讯,问题可以在RS485极化、主站上。
常见问题1.S7-200 SMART 是否支持Modbus ASCII 通信模式?STEP 7-Micro/WIN SMART 软件未提供Modbus ASCII 通信模式指令库。
S7-200 SMART CPU若用于Modbus ASCII 通信时,则需要用户使用自由口通信模式进行编程。
2. S7-200 SMART CPU 集成的RS485 端口(端口0 )以及SB CM01 信号板(端口1 )两个通信端口能否同时作为Modbus RTU 主站或者同时作为Modbus RTU从站?S7-200 SMART V2.2版本支持两个通信端口同时做MODBUS RTU主站,不支持同时做MODBUS RTU从站。
3. S7-200 SMART CPU作为Modbus RTU 主站如何访问Modbus 地址范围大于49999 的保持寄存器?通常Modbus 协议的保持寄存器范围在40001 到49999 之间,这个范围对于多数应用来说已经足够了,但有些Modbus 从站保持寄存器区的地址会超出该范围。
Modbus RTU 主站协议库支持保持寄存器地址范围为(40001 到49999)或者(400001 到465536)。
如果Modbus 从站地址范围为400001 –465536,只需在调用MBUS_MSG 子程序时给Addr 参数赋相应的值即可,如416768。
4.S7-200 SMART CPU作为Modbus RTU 主站,多次调用MBUS_MSG 指令时,为什么该指令会出现6# 错误代码?同一时间只能有一条MBUS_MSG 指令处于激活状态,如果激活多条MBUS_MSG 指令,将执行第一条MBUS_MSG 指令,所有后续MBUS_MSG 指令将中止执行并出现6# 错误代码。
多条MBUS_MSG 指令的执行需要采用轮询方式。
5.S7-200 SMART CPU作为Modbus RTU 主站,从站故障或者通信线路断开时,主站会尝试发送多次请求报文,从而导致通信时间过长。
Modbus协议使用常见问题分析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 位有。
“MODBUS”常见问题解答1. 我的设备支持modbus设备,能否直接与组态王软件连接?只要设备是标准的modbus 协议设备,即可使用组态王设备列表下的PLC-->莫迪康-->MODBUSRTU(或者ACSII 码)进行通信。
但具体的寄存器地址对照表必须从设备厂家索取。
2. 我的支持modbus 协议的串口设备,能否与多个上位软件(比如组态王软件和某品牌触摸屏)同时通讯?因为modbus 串口协议不支持多主站,所以不能多个软件同时与modbus 设备同时通信。
3. 在组态王工程中建立多个modbusTCPIPserver 设备定义,分别使用两台客户端对其访问,只有站点高的那个server 通讯ok,站点低的通讯失败,为什么?这是因为在组态王软件中只支持建立一个modbusTCPIPserver,当建立多个server 时,组态王客户端则会自动与站点高的server进行通讯,所以会导致站点低的通讯失败。
4. 如何实现组态王数据通过串口或者以太网驱动方式传送到其他组态软件或者应用程序中?如果其他组态软件或者应用程序支持modbus 协议,则可以通过组态王提供的modRTUserver 或者modbusTCPserver 驱动来实现。
5. 组态王与支持Modbus协议的设备进行通讯时,组态王画面上显示的数据不正确常有哪些原因?引起数据不正确的原因主要有如下几点:1)组态王中定义的寄存器地址跟实际设备不一致导致。
比如某些使用modbus 协议通讯的设备的数据地址是从0 开始的,而组态王modbus 协议驱动寄存器地址是从1 开始的,所以遇到此种情况时在组态王中定义变量时,寄存器地址要进行加1 处理;2)数据词典中最大原始值和最大值定义不不当;比如最大原始值和最大值不一样会导致画面看到的数据和实际设备不一致;3)组态王读取FLOAT 和LONG 类型的数据时,没有使用提供的SwapF 和SwapL 寄存器来调整FLOAT 型和LONG型数据的字节顺序;4)LONG 或FLOAT 型的双字的数据,没有按照间隔隔地址方式定义;因为modbus 协议所对应的参数地址一般按照字为基本单位进行分地址排序的。
Modbus通讯常见故障处理本文对modbus通讯常见的故障进行分析,并提出相应的处理方法。
Modbus通讯故障判断也是要围绕通讯三要素入手,即:通讯接口、通讯参数、数据格式(报文格式)。
1、通讯不上/通讯中断:多半是通讯接口、通讯链路上的问题。
调试软件会显示“connection failed”、“timeout error”的错误提示。
modscan、modbus poll(登录网信智汇wangxinzhihui下载)工具错误提示如下。
更多可能的原因及处理如下表所示:2、通讯不稳定:表现为数据断断续续,多半是由于线路干扰、接口不匹配、程序不稳定、设备老化等原因造成。
可通过modscan或modbus poll工具中的发送接收包数量来判断,两者相差越大,说明通讯越差。
更多可能的原因及处理如下表所示:1)请求功能不存在时,modbus poll显示错误“01 lllega function”,界面如下:Modscan显示错误“Modbus Exception Response from slave device”,界面如下:2)请求的数据不存在时,modbus poll显示错误“02 lllega data function”,界面如下:Modscan显示错误“Modbus Exception Response from slave device”,界面如下:更多可能的原因及处理如下表所示:常见modbus通讯错误码如下:功能码说明01 非法功能。
请求不存在的功能。
02 非法数据地址。
请求不存在的数据地址。
03 非法数据值。
对于服务器(或从站)来说,询问中包括的值是不可允许的值。
例如:隐含长度是不正确的。
04 从站设备故障。
当服务器(或从站)正在设法执行请求的操作时,产生不可重新获得的差错。
05 确认。
与编程命令一起使用,服务器(或从站)已经接受请求,并且正在处理这个请求,但是需要长持续时间进行这些操作,返回这个响应防止在客户机(或主站)中发生超时错误,客户机(或主机)可以继续发送轮询程序完成报文来确认是否完成处理。
Modbus 通讯常见问题这里不介绍过多Modbus的原理和理论,我也不熟悉。
废话少说,直接开始常见问题。
1、接线问题:现在大部分采用两线制(四线制较少用,这里不介绍)接线方式,采用屏蔽双绞线。
大部分厂家的接线端子标识为:A、B,但是由于各厂家之间的有可能采用的规范不太一样,有的A是正极,有的B是正极,再加上有第三方设备接线混乱,正负经常接反。
通讯之前干两件事:a)第三方设备,也就是从站线接好,用万用表量线间电压,通常会量到1~5V(个别的会到8V)的电压,没有电压,通讯肯定不通,检查线路和接线,以及第三方设备;b)量到电压,判断正负,接到主站设备对应端子上来。
2、信号源问题:确认线路正常,通讯配置及读取地址正确,通讯还是不通,有可能就是信号源的问题。
信号源的问题通常是信号衰减或者有干扰源。
Modbus通讯的理论距离是1200M,距离越长,信号衰减越厉害,加上有一些电缆质量较差,衰减更厉害。
干扰源就不用介绍了。
解决的方法如下:a)信号衰减:更换质量更好的电缆,或者在通讯电缆中间加中继器(优点可以延长Modbus通讯的理论距离,缺点是需要供电);b)干扰源:最理想的方法是排除干扰源(比较艰难)。
也可以尝试更换屏蔽效果更好的电缆,尽量减少和供电电缆放到一起。
另外,有些设备Modbus接线端子没有终端电阻,可以在电缆两端各并联一个终端电阻(电阻为120欧,哪端如果有,就不用加了,具体有没有查看设备样本,一般都会有说明)。
3、通讯配置:主从站配置(波特率、数据位数、停止位数、奇偶校验)一致就可以,不多说了。
4、通讯地址:这个是问题最多的,下面我把自己碰到问题列出来及解决方法列出来,供大家参考。
a)地址偏移:有时会发现第三方设备给你的地址表和你自己读取的不一致,甚至是读不出来,你可以尝试往前或往后读一位,比如说,地址是40001,你可以尝试读取40000或者40002;b)读取数量:有一些设备寄存器较小,读太多和通讯错误;还有一些设备,主站读取数量必须与从站一致,比如说,16位模拟量有三个,你就只能读取三个,数字量有7位,你只能读取7位。
modbus slave checksum error -回复
标题:Modbus从站校验错误的原因及解决方法
引言:
Modbus是一种常用的工业通信协议,用于在自动化控制系统中实现设备之间的数据交换。
然而,在使用Modbus通信时,我们可能会遇到一个常见的问题,即Modbus从站校验错误。
本文将深入探讨Modbus从站校验错误的原因,并提供解决该问题的方法。
第一部分:Modbus协议介绍
1.1 Modbus协议概述
1.2 Modbus通信结构
1.3 Modbus通信帧格式
1.4 校验方式简介
第二部分:Modbus从站校验错误的原因
2.1 数据传输中的干扰
2.2 Modbus从站配置错误
2.3 通信速率不匹配
2.4 电气接地问题
第三部分:解决Modbus从站校验错误的方法
3.1 数据传输线路优化
3.2 从站配置检查
3.3 确认通信速率
3.4 正确的电气接地
第四部分:实际案例分析
4.1 案例一:数据传输线路干扰引起校验错误
4.2 案例二:从站配置错误导致校验错误
4.3 案例三:通信速率不匹配引起校验错误
4.4 案例四:电气接地问题导致校验错误
第五部分:结论
5.1 从站校验错误的准确识别
5.2 解决问题的重要性
5.3 今后避免类似问题的建议
结语:
Modbus从站校验错误是Modbus通信中常见的问题之一,但通过理解Modbus协议、正确排查问题所在,并采取相应的解决方法,我们可以有效应对此类错误。
希望本文的内容能够帮助读者更好地理解和解决Modbus从站校验错误,确保通信系统的正常运行。
modbus协议响应帧长度不对,协议不完整让我们来了解一下什么是Modbus协议以及相关的响应帧长度不对和协议不完整的问题。
Modbus协议是一种用于工业领域的通信协议,用于实现设备之间的数据交换和通信。
在Modbus通信中,存在主机和从机的概念,主机负责向从机发送命令并接收响应,而从机负责接收命令并做出相应的响应。
然而,有时在使用Modbus协议进行通信时,会出现响应帧长度不对或协议不完整的问题。
这可能会导致通信数据的丢失或错误,进而影响到整个系统的稳定性和可靠性。
了解如何解决这些问题对于确保Modbus通信的正常运行至关重要。
接下来,让我们从简单到复杂,由浅入深地探讨这个主题。
1. Modbus协议简介Modbus协议是一种开放的通信协议,广泛应用于工业控制领域。
它基于主从架构,主机发送指令给从机,并接收从机的响应。
Modbus协议可以通过串行口或以太网等多种通信方式进行数据传输。
2. 响应帧长度不对的问题在Modbus通信中,响应帧长度不对的问题可能会导致通信数据的丢失或混乱。
这可能是由于数据传输过程中发生了错误,或者是设备本身存在故障。
从机发送的响应帧长度不符合预期,主机在解析响应时无法正确识别数据内容。
3. 协议不完整的原因另协议不完整可能是由于通信过程中发生了中断或丢包等问题导致的。
这可能是由于通信设备、网络环境或软件问题引起的,需要进行全面的排查和分析。
4. 解决响应帧长度不对和协议不完整的方法针对响应帧长度不对和协议不完整的问题,我们可以采取一系列措施来解决。
对通信设备和网络环境进行全面检查,确保设备工作正常且网络畅通。
可以通过调整通信参数或协议格式来避免响应帧长度不对和协议不完整的问题。
还可以优化通信协议的解析算法,提高数据解析的鲁棒性和准确性。
总结回顾:通过对Modbus协议响应帧长度不对和协议不完整的问题进行全面评估,我们深入了解了这些问题可能的原因和解决方法。
在实际应用中,我们需要重视通信设备的稳定性和可靠性,及时排查和解决通信问题,确保系统正常运行。
1. 我的设备支持modbus设备,能否直接与组态王软件连接?只要设备是标准的modbus 协议设备,即可使用组态王设备列表下的PLC-->莫迪康-->MODBUSRTU(或者ACSII 码)进行通信。
但具体的寄存器地址对照表必须从设备厂家索取。
2. 我的支持modbus 协议的串口设备,能否与多个上位软件(比如组态王软件和某品牌触摸屏)同时通讯?因为modbus 串口协议不支持多主站,所以不能多个软件同时与modbus 设备同时通信。
3. 在组态王工程中建立多个modbusTCPIPserver 设备定义,分别使用两台客户端对其访问,只有站点高的那个server 通讯ok,站点低的通讯失败,为什么?这是因为在组态王软件中只支持建立一个modbusTCPIPserver,当建立多个s erver时,组态王客户端则会自动与站点高的server进行通讯,所以会导致站点低的通讯失败。
4. 如何实现组态王数据通过串口或者以太网驱动方式传送到其他组态软件或者应用程序中?如果其他组态软件或者应用程序支持modbus 协议,则可以通过组态王提供的modRTUserver 或者modbusTCPserver 驱动来实现。
5. 组态王与支持Modbus协议的设备进行通讯时,组态王画面上显示的数据不正确常有哪些原因?引起数据不正确的原因主要有如下几点:1)组态王中定义的寄存器地址跟实际设备不一致导致。
比如某些使用modbus 协议通讯的设备的数据地址是从0 开始的,而组态王modbus 协议驱动寄存器地址是从1 开始的,所以遇到此种情况时在组态王中定义变量时,寄存器地址要进行加1 处理;2)数据词典中最大原始值和最大值定义不不当;比如最大原始值和最大值不一样会导致画面看到的数据和实际设备不一致;3)组态王读取FLOAT 和LONG 类型的数据时,没有使用提供的SwapF 和SwapL寄存器来调整FLOAT 型和LONG型数据的字节顺序;4)LONG 或FLOAT 型的双字的数据,没有按照间隔隔地址方式定义;因为m odbus协议所对应的参数地址一般按照字为基本单位进行分地址排序的。
Modbus 通讯常见问题
这里不介绍过多Modbus的原理和理论,我也不熟悉。
废话少说,直接开始常见问题。
1、接线问题:现在大部分采用两线制(四线制较少用,这里不介绍)接线方式,采用
屏蔽双绞线。
大部分厂家的接线端子标识为:A、B,但是由于各厂家之间的有可能采用的规范不太一样,有的A是正极,有的B是正极,再加上有第三方设备接线混乱,正负经常接反。
通讯之前干两件事:
a)第三方设备,也就是从站线接好,用万用表量线间电压,通常会量到1~5V(个
别的会到8V)的电压,没有电压,通讯肯定不通,检查线路和接线,以及第
三方设备;
b)量到电压,判断正负,接到主站设备对应端子上来。
2、信号源问题:确认线路正常,通讯配置及读取地址正确,通讯还是不通,有可能就
是信号源的问题。
信号源的问题通常是信号衰减或者有干扰源。
Modbus通讯的理论距离是1200M,距离越长,信号衰减越厉害,加上有一些电缆质量较差,衰减更厉害。
干扰源就不用介绍了。
解决的方法如下:
a)信号衰减:更换质量更好的电缆,或者在通讯电缆中间加中继器(优点可以延
长Modbus通讯的理论距离,缺点是需要供电);
b)干扰源:最理想的方法是排除干扰源(比较艰难)。
也可以尝试更换屏蔽效果
更好的电缆,尽量减少和供电电缆放到一起。
另外,有些设备Modbus接线端
子没有终端电阻,可以在电缆两端各并联一个终端电阻(电阻为120欧,哪端
如果有,就不用加了,具体有没有查看设备样本,一般都会有说明)。
3、通讯配置:主从站配置(波特率、数据位数、停止位数、奇偶校验)一致就可以,
不多说了。
4、通讯地址:这个是问题最多的,下面我把自己碰到问题列出来及解决方法列出来,
供大家参考。
a)地址偏移:有时会发现第三方设备给你的地址表和你自己读取的不一致,甚至
是读不出来,你可以尝试往前或往后读一位,比如说,地址是40001,你可以
尝试读取40000或者40002;
b)读取数量:有一些设备寄存器较小,读太多和通讯错误;还有一些设备,主站
读取数量必须与从站一致,比如说,16位模拟量有三个,你就只能读取三个,
数字量有7位,你只能读取7位。
由于部分厂家设备数字量读取只能是整个字
读取,也就是只能读取16位的整数倍数,所以从站不够16位整数倍的,可以
在从站设备上用一些没有意义的数补够16位。
c)从站并联:通常情况下,相同设备可以采用并联的方式,最后通过一根电缆接
到主站通讯卡上。
这种方式的优点:占用较少通讯接口,节省电缆;缺点:设
备过多,通讯速率下降,而且并联中有通讯失败的从站,对正常通讯的从站设
备影响更为明显。
注意:主站通讯接口对从站并联数目有限制,不同厂家的设备,数目不尽
相同,而且在要求的数目范围内,也有可能有部分通讯不正常,所以条件
允许的话,尽量减少一个接口并联较多从站设备。
d)主从站数据不一致:有时会发现通讯正常,但是数据与从站数据不一致,除了
检查上面提到的地址偏移问题,还要检查数据格式是否正确。
比如32位模拟
量是否需要前16位与后16位进行反转。
数字量打包后排序是从1到16,还
是从16到1。
还有部分人将数字量是打包成8位,再打包成16位,有可能需
要将前8位和后8位反转。
e)数据转换:通讯中,经常为了提高精度,从站设备数据经常会乘以10或者100,
所以通讯过来之后,主站在显示的时候,需要相应的除以10或者100;还有
部分设备编程时没有做数据处理,通讯过来的数字都是原始数,比如,西门子
S7-200通讯过来的一个量程为0~1.0MPa压力点,但是通讯上来的数是
6400~32000,这时就需要做相应的变换。
实际的调试过程中,遇到过各种奇怪的现象。
这里把我的经验和大家分享,希望对大家有所帮助。
说的不当或错误的地方,请你指出。