“MODBUS”常见问题解答

合集下载

Modbus协议使用常见问题分析

Modbus协议使用常见问题分析

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通讯错误代码

Modbus通讯错误代码

常见的错误代码有:3:基本上是从站无响应,从站地址错了102:从站不支持此种数据地址,地址40000,30000等不对,在从站中没有对应的地址103:从站不支持此种数据类型,类型不对,开头的4,3,1,0没有选择正确,应看清楚是读写型整型还是只读型整型还是读写型开关量。

读写型整型是4开头,只读型整型是3开头,读写型开关量是0开头,只读型开关量是1开头。

计算方法为:3个字符包含9-10个位(8个数据位+1或2个停止位),即27-30个位,在波特率为9600的情况下,传输速率约为3ms。

MODBUS最高能到多少波特率?38.4k应该没有问题;我公司是SIEMENS PLC 和MODBUS 通信,最大19200;这个跟从站有很大的关系,与所选的接口芯片有直接关系;西门子S7-200的居然可以达到115200最大的都是理论值,现实中用的很少;115200的话,就该用ASCii协议了,RTU估计是容易丢包了;根据需要设置,与串口通讯波特率一样,常用的有19200、38400;根据下位机的波特率来决定通讯的波特率。

RS485是硬件连接,modbus是软件协议,波特率是串口通信的比特流速率。

Modbus从属协议执行错误代码:错误代码说明0 无错误1 内存范围错误2 非法波特率或校验3 非法从属地址4 非法Modbus参数值5 保持寄存器与Modbus从属符号重叠6 收到校验错误7 收到CRC错误8 非法功能请求/功能不受支持9 请求中的非法内存地址10 从属功能未启用1、重新设置主站询问时间,波特率、奇偶检验,停止位。

2、主、从站地址不能相同。

范围1-2473、检查通信线连接是否正常。

4、可采用MODBUS 串口软件测试下从站是否正常。

错误是10是未使能。

1、编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用MBUS_SLAVE。

2、检查相关参数是否正常:、模式选择:启动/停止Modbus,1=启动;0=停止。

S1111111111

S1111111111

S7
请教:
在MODBUS通讯中,我方为从站,主站为和利时DCS。

主站用MODSCAN32发送请求,此时从站MODBUS模块上的RX灯闪烁,闪烁频率2~3秒一次,TX灯一直保持熄灭状态,主站显示无响应超时;
主站不发送请求时,此时从站MODBUS模块上的RX 灯和TX灯均保持熄灭状态。

请问:以上状况是否可以判定通讯线路连接没有问题?
出现以上状况的原因一般是什么?
最佳答案
你上面出现的问题是正常的问题,RX灯闪烁,TX灯不亮,主要检查以下二点,一是你可以检查一下接线,把2根线换一下,二是检查一下主站访问地址是否正确,比如:西门子作为主站时,访问从站地址1001时,需要将地址改为1000,才可以访问到,所以以此反三,考虑一下啊是否和利时DCS也有这方面的要求,其他的情况基本不用考虑,因为你的现象已经证明了,通信已经建立,只是访问时出现问题。

但是如果你有条件的话,可以通过第三方软件,检查一下,
但是我从始至终都不认为这是一个好办法,因为如果通信异常,不用试也通不上,但是现在RX灯闪烁了,说明通信正常,所以,建议你不要去浪费时间和精力去研究别人大多数推荐的什么测试通信的方式,你只要根据我说的2点就一定能解决,因为这是我最近一个项目中才悟出来的,根本没那么复杂。

希望能帮到你,记得给个好评。

(完整word版)西门子S7-200 SMART之Modbus RTU 通信常见问题及错误代码含义

(完整word版)西门子S7-200 SMART之Modbus RTU 通信常见问题及错误代码含义

常见问题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 主站,从站故障或者通信线路断开时,主站会尝试发送多次请求报文,从而导致通信时间过长.如何减少主站的重发次数,以提高通信效率?MBUS_MSG 指令被激活时将发送 Modbus 请求报文帧,如果在Timeout 参数定义的时间间隔内主站未接收到从站应答,Modbus RTU 主站协议库默认的情况下还会再发送 2 次 Modbus 请求报文帧;在最后一次请求报文帧发送后,经过 Timeout 参数定义的时间间隔后还未收到应答时, MBUS_MSG 指令的 Done 完成位才被设置为 1 .将mModbusRetries 变量的数值由 2 改为0 ,即可取消Modbus 请求报文帧的重试次数.mModbusRetries 变量的绝对地址可通过查询Modbus RTU 主站协议库的符号表获取,如图 1。

通讯协议002——Modbus通讯常见故障处理

通讯协议002——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 通讯常见问题

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的adam4000模块的常见问题

开发带modbus的adam4000模块的常见问题

开发带Modbus 的ADAM-4000常见问题Q: 如何处理用户的Modbus 通信软件和ADAM-4000连接不上?1. 在ADAM-4000-5000 Utility 中查看Protocol 是否是Modbus 协议.2. 如果不是,将ADAM-4000模块进入init 状态,并设置为Modbus 协议。

3. 默认的通信规约为9600/8/N/1,请察看波特率、有无校验等。

4. 用通用的Modbus 调试软件进行调试,比如Modscan 。

5. Modbus 协议的寄存器地址、功能码等是否支持。

Q: 支持Modbus 协议的ADAM-4000模块支持哪些功能码?不同功能的ADAM-4000模块支持的功能码也不尽相同,一般来讲,01,03,05,06,15,16常用的功能码都支持,请在使用之前先进行测试。

Q: 如何获取ADAM-4000模块的Modbus 寄存器地址?在ADAM-4000的手册(ADAM-4000 user’s Manual)的最后几页,有支持Modbus 协议的ADAM-4000协议的寄存器地址列表,可以查看。

Q: ADAM-4015/ADAM-4018+ Modbus 寄存器地址中的值如何对应温度?模块分辨率是16位,从Modbus 寄存器中读取的值为0000H-FFFFH (十六进制),按比例对应输入范围。

计算公式为:65535L a d view =,其中,a 是Modbus 显示值,L 是输入量程,d 为计算所得值。

例如输入范围为K 型热电偶 0-1370℃, 则2EFFH 对应得温度为 2F7/FFFF * 1370℃ = 759 / 65535 * 1370 =15.88℃Q: ADAM-4017+/ADAM-4019+ Modbus 寄存器地址中的值如何对应电压/电流?ADAM-4000模块分辨率是16位,即分成0-65535等份,从Modbus 寄存器中读取的值为0000H-FFFFH (十六进制),按比例对应输入范围。

modbus RTU常见问题

modbus RTU常见问题
• • 6、什么是modbus rtu master? • 就是选RTU模式,因为MODBUS分为ASCII模式和RTU模式,MASER就是设
置为主站,一般为PLC端,变频器设为从站,还要注意主站和从站地址的设 置。

A
6
• 、Modbus rtu 为什么没有开始和结束标记? • 由于Modbus rtu帧的每个字节是16进制数,数值范围在00~FF,若像
• 1.以太网,对应的通信模式是MODBUS TCP。 • 2.异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线
等),对应的通信模式是MODBUS RTU或MODBUS ASCII。 • 3.高速令牌传递网络,对应的通信模式是Modbus PLUS。
A
2
• 2、关于MODBUS RTU通讯协议的提问?
A
9
• 13、vb modbus给modScan32 rtu发送数据应该怎么写?
• 确定两个软件哪个是主,哪个是从。然后再确定通讯协议是RTU、ASCII还是TCP。如果是TCP, 就用socket控件。RTU\ASCII就用COM控件。然后给对应的口按照协议收发数并解析就可以了。

• 14、ModBus RTU通讯协议与ModBus通讯协议有什么区别?
• • 答:01 读取逻辑线圈组状态 • 02 读取离散量线圈组状态 • 03 读取一个或多个保持寄存器的二进制值 • 04 读取一个或多个输入寄存器的二进制值 • 05 改变逻辑线圈状态 • 06 改变单个寄存器的二进制值 • 15 改变多个寄存器的二进制值 • 16 指定多个操持寄存器的二进制值
• 这些值的和是12.5。因为设置的符号位表示这数是负的,因此十六进制值0xC1480000表示-12.5。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

“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 协议所对应的参数地址一般按照字为基本单位进行分地址排序的。

6. 组态王与西门子200plc自由口协议通过modem 通讯,硬件接线怎样实现?
设备上插标准PPI 电缆,modem9 针口通过一个标准232 交叉线接到PPI 电缆上即可,232交叉线的modem侧需要1 4 6 短接,7 和8 短接。

7. 西门子200plc通过modbus协议与组态王通讯时,组态王中定义的寄存器地址与plc
地址是如何对应的?
映射关系如下:
0-Q,1-I,3、4、8、9-V;
3,4,8,9的dd 号与PLC中V寄存器的偏移地址(实际地址-1000)的对应关系:
组态王中(寄存器的dd 号-1)*2=PLC中的V寄存器的偏移地址。

组态王中40031 对应PLC:VW1060 (组态王中寄存器4 表示SHORT 型变量)组态王中90640 对应PLC:
VD2278 (组态王中寄存器9 表示FLOAT型变量)。

注:上面的对应关系是针对用户使用的是亚控公司提供了PLC(MODBUS)通讯的初
始化程序,如果用户是自己编程写的初始化程序,则根据实际程序规定的modbus 对应地址定义变量。

8. 西门子200plc通过modbus协议与组态王通讯,需要注意哪些事项?
需要注意如下几点:
1)需要向PLC中下载对应的初始化程序(KVmoddbus.mwp),由亚控提供。

此程
序默认的plc 通讯端口为port0,地址为2,波特率9600,无校验(地址和波特率可由程
SBR0 中的VB8,SMB30 进行修改);
2)由于PLCModbus 协议程序占用V1000及以前的地址,所以用户在编写逻辑控制程序中用到的寄存器不能和亚控提供的协议中所占用的V区地址冲突;
3)西门子S7200PLC 和通过modbus 协议和组态王通讯时,CPU上的开关必须拨在RUN状态,否则PLC中的modbus 通讯程序没有处于运行状态,组态王和设备通过自由口协议肯定通讯失败;
9. 西门子200plc通过GPRS链路和组态王通讯,使用哪种协议方式比较好?
推荐使用自由口/modbusRTu协议。

ppi 协议实际上也支持通过GPRS 链路和组态王通讯,但由于PPI 协议的特殊性,GPRS方式下通讯效果不是很好,因此不推荐客户使用。

10. 组态王提供的ModbusRTUServer 和ModbusRTU驱动的寄存器是怎样对应的?
ModbusRTUServer 的B寄存器对应ModbusRTU的0 寄存器;ModbusRTUServer 的R寄存器对应ModbusRTU的4 寄存器。

相关文档
最新文档