西门子S7-200 SMART之Modbus RTU 通信常见问题及错误代码含义
- 格式:doc
- 大小:250.50 KB
- 文档页数:8
功能码主要用于表述该数据报文执行的功能,当服务器对客户机进行响应时,它使用功能码域来指示正常响应(无差错)或者异常响应(即出现某种差错),其中的modbus协议的功能码众多,在此我们一一列出与大家分享。
功能码表
其中物理离散量输入和输入寄存器只能有I/O系统提供的数据类型,即只能是由I/O系统改变离散量输入和输入寄存器的数值,而上位机程序不能改变的数据类型,在数据读写上表现为只读,而内部比特或者物理线圈和内部寄存器或物理输出寄存器(保持寄存器)则是上位机应用程序可以改变的数据类型,在数据读写上表现为可读可写。
错误代码表
我们以Modbus RTU协议为例,地址码为0x01,写操作0x10,寄存器地址为
0x018E,CRC校验。
如寄存器可读写的话,返回正常,如寄存器只读,返回异常。
200SMART MODBUS RTU通讯指令介绍
主站指令1(PLC自带485通讯口)
主站指令2(信号板SB CM01)
从站指令
(1)MBUS—CTRL:主站参数定义
(2)MBUS—MSG:主站读写指令
(3)MBUS—INIT:从站定义指令
(4)MBUS—SLAVE:从站应答
主站定义指令
EN:使能;为1时指令有效,为0时指令不执行
Mode:模式选择;为1时为modbus,为0时为
PPI
Baud:波特率,数据传输速率9600、19200等
Parity:奇偶校验0=无校验1=奇校验2=偶校验
Port:端口;0=PLC自带串口1=信号板CM01
Timeo:通信超时
Done:完成位
Error:错误字节
注:1、此条指令写在主站,写一天即可;
2、波特率和奇偶校验和从站应保持一致,不然无法通信;
主站读写指令
first:触发;需要用沿触发
slave:从站地址
RW:读写0=读取、1=写入
Addr:从数据区
Counl:数据范围
Dataptr:主站数据存放位置
从站定义指令
EN:使能,sm0.1初始化
Mode模式:1=modbus 0=禁用modbus
Buand:波特率
Parity:奇偶校验
Port:端口
Delay:默认为0,表示立即应答
Maxiq:通信最大I/O总数
Maxai:通信最大模拟量通道
Maxhold:通信最大v区
Holdstart;v区起始地址
从站应答指令。
一:S7-200 SMART 通信协议与资源每个S7-200 SMART CPU 都提供一个以太网端口和一个RS485 端口(端口0),标准型CPU 额外支持SB CM01 信号板(端口1),信号板可通过STEP 7-Micro/WIN SMART 软件组态为RS232 通信端口或RS485 通信端口。
S7-200 SMART CPU 可实现CPU、编程设备和HMI(人机界面)之间的多种通信:以太网:● CPU 与STEP 7-Micro/WIN SMART 软件之间的数据交换。
● CPU 与HMI 之间的数据交换。
● CPU 与其它S7-200 SMART CPU 之间的GET/PUT 通信。
● CPU 与第三方设备之间的Open IE( TCP、ISO on TCP、UDP) 通信。
RS485/RS232:● CPU 与HMI 之间的数据交换(PPI协议)。
● CPU 使用自由端口模式与其它设备之间的串行通信(例如:XMT/RCV 通信、Modbus RTU通信、USS通信等)。
S7-200 SMART CPU 可同时支持的最大通信连接资源数如下:以太网:● 1 个连接用于与STEP 7-Micro/WIN SMART 软件的通信。
● 8 个连接用于CPU 与HMI 之间的通信。
● 8 个连接用于CPU 与其它S7-200 SMART CPU 之间的GET/PUT 主动连接。
● 8 个连接用于CPU 与其它S7-200 SMART CPU 之间的GET/PUT 被动连接。
● 8 个连接用于CPU 与第三方设备之间的Open IE主动连接。
● 8 个连接用于CPU 与第三方设备之间的Open IE被动连接。
RS485/RS232:● 4 个连接用于CPU 与HMI 之间的通信(PPI协议)。
注意:●S7-200 SMART CPU以太网通信端口从V2.2版本开始支持TCP、UDP和ISO on TCP 等开放式用户通信及Modbus TCP通信。
s7-200smart故障排除指南S7-200smart故障排除指南
本文档旨在提供S7-200smart控制器的故障排除指南,以帮助用户解决可能遇到的问题。
问题1:控制器无法上电启动
- 可能原因:可能原因:
1. 电源插头未插好;
2. 电源线损坏;
3. 电源供应故障。
- 解决方案:解决方案:
1. 检查电源插头是否正确插入控制器;
2. 检查电源线是否完好,如损坏可更换;
3. 若电源供应故障,建议联系售后服务或更换电源。
问题2:控制器无法与上位机通信
- 可能原因:可能原因:
1. 通信线路连接错误;
2. 上位机设置错误;
3. 控制器通信模块故障。
- 解决方案:解决方案:
1. 检查通信线路连接是否正确,确保连接端口对应无误;
2. 检查上位机的通信设置,确保设置正确;
3. 若排除以上问题仍无法通信,建议联系售后服务或更换控制器的通信模块。
问题3:控制器显示错误代码
- 可能原因:可能原因:
1. 程序错误;
2. 模块故障;
3. 通信异常。
- 解决方案:解决方案:
1. 检查程序是否存在错误,可尝试重新编写或修改程序;
2. 检查相应模块是否正常工作,如存在故障可更换模块;
3. 检查通信是否异常,可重新连接通信线路或更换通信模块。
以上是一些常见问题及其解决方案,如果您遇到其他问题,请参考S7-200smart控制器的使用手册或联系售后服务获取进一步的帮助。
S 7-200 S M A R T 串口通信简介S 7-200 S M A R T 支持的串口通信硬件及连接资源如表 1所示: 注意:1. P P I 模式只支持 S 7-200 S M A R T C P U 与 H M I 设备之间的通信;2. 通信信号板的工作模式(R S 485/R S 232)是由用户决定的,可以在 M i c r o /W I N S M A R T 中通过设置系统块来设置。
详细设置方法见:如何设置串口通信参数 通信端口定义1.S 7-200 S M A R T C P U 本体集成 R S 485 端口 (端口 0)表 2. S 7-200 S M A R T C P U 本体集成 R S 485 端口引脚定义 2.通信信号板 表 1.S 7-200 S M AR T 串口参数CPU 本体集成通讯口通信信号板(S B C M 01)通讯口类型R S 485R S 485R S 232支持的通信协议P P I / 自由口 / M O D B U S / U S S 波特率P P I (9600,19200,187500 b /s )自由口(1200,115200 b /s )连接资源每个通信口可连接 4 个 H M I 设备C P U 插座(9针母头)引脚号信号P o r t 0(端口0)引脚定义1屏蔽机壳接地224V 返回逻辑地(24V 公共端)3R S -485信号 B R S -485信号 B4发送请求R T S (T T L )55V 返回逻辑地(5V 公共端)6+5V +5V ,通过100 O h m 电阻7+24V +24V8R S -485信号 A R S -485信号 A9不用10位协议选择(输入)金属壳屏蔽机壳接地表 3.通信信号板(P o r t 1)引脚定义通信信号板(S B C M 01)引脚标记R S 485R S 232机壳接地机壳接地T X /B R S 485-B R S 232-T x R T S R T S (T T L )R T S (T T L )M 逻辑公共端逻辑公共端R X /AR S 485-AR S 232-R x通信信号板通信信号板可以扩展 C P U 的通信端口,其安装位置如图 1所示。
“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通信中,差错码和异常码是常见的问题。
本文将围绕这两个主题展开,介绍差错码和异常码的含义、原因和解决方法。
差错码是指在Modbus通信过程中出现的错误编码。
这些错误可能由于通信介质故障、设备故障或通信协议不兼容等原因引起。
差错码的出现会导致数据传输错误,影响系统的正常运行。
为了解决差错码问题,我们可以采取以下几种方法:1. 检查通信介质:差错码可能是由于通信介质(如电缆)的损坏或松动造成的。
因此,我们需要检查通信介质的连接状态和质量,确保其正常工作。
2. 检查设备故障:差错码还可能是由于设备本身的故障引起的。
我们可以检查设备的状态和参数,排除设备故障的可能性。
3. 更新通信协议:差错码问题还可能是由于通信协议不兼容或过时引起的。
我们可以尝试更新通信协议或使用兼容性更好的协议,以解决差错码问题。
接下来,我们来介绍一下异常码。
异常码是指在Modbus通信中,设备返回的错误码。
当设备无法正常执行请求时,会返回一个异常码,用于指示错误的类型和原因。
异常码的出现可能是由于设备忙碌、请求格式错误或数据范围超出等原因引起。
为了解决异常码问题,我们可以采取以下措施:1. 确认设备状态:异常码可能是由于设备忙碌或不可用引起的。
我们可以检查设备的状态,确保设备处于可用状态。
2. 检查请求格式:异常码还可能是由于请求格式错误引起的。
我们可以检查请求的格式、参数和数据范围,确保其符合设备的要求。
3. 优化通信速度:异常码问题还可能是由于通信速度过快引起的。
我们可以尝试降低通信速度,以确保设备能够正常处理请求。
差错码和异常码是Modbus通信中常见的问题。
差错码可能由于通信介质故障、设备故障或通信协议不兼容等原因引起,解决方法包括检查通信介质、设备故障排除和更新通信协议。
异常码可能由于设备忙碌、请求格式错误或数据范围超出等原因引起,解决方法包括确认设备状态、检查请求格式和优化通信速度。
错误代码MB_MASTER报错8200(端口正忙于处理传送请求),如何处理?此情况是由于MB_MASTER的DONE或ERROR均未置位从而与后续MB_MASTER冲突导致。
确保接通下一个MB_MASTER的时间大于Blocked_Proc_Timeout的设定时间(默认3S)。
如何检查S7-1200 通信模块CM1241是否已被成功设置为Modbus RTU通信模式?可在程序或监控表中查看“MB_COMM_LOAD”指令的输出位“DONE”,“ERROR”以及“STATUS”状态来判断S7-1200 通信模块CM1241是否已被成功设置为Modbus RTU通信模式。
•如果该模块被成功设置为Modbus RTU通信模式:“MB_COMM_LOAD”指令输出位“DONE”=1,“ERROR”=0,输出状态字“STATUS”=0;•如果该模块未被成功设置为Modbus RTU通信模式:“MB_COMM_LOAD”指令输出位“DONE”=0,“ERROR”=1,输出状态字“STATUS”输出错误代码。
具体错误原因可查看“MB_COMM_LOAD指令STATUS错误代码”表。
执行“MB_MASTER”指令,总是显示输出位“Busy”=1,为什么?因为端口正忙于处理传送请求。
出现该错误时请检查“MB_MASTER“指令输入位”REQ“是否为上升沿触发,或是否有其它的多个“MB_MASTER”指令在执行。
通过执行“MB_MASTER”指令无法写入或读取Modbus RTU丛站地址的数据,但程序中监视“MB_MASTER”指令错误位“Error”=0,错误代码“STATUS”=16#0,为什么?“MB_MASTER”指令上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间,并且 STATUS 参数中的错误代码值仅在 ERROR =TRUE 的一个扫描周期内有效,因此无法通过程序或监控表查看到。
常见问题
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. Modbus RTU 主站指令符号表所示。
6.为什么有的HMI 软件使用Modbus RTU 协议可以读取作为Modbus RTU 从站S7-200 SMART CPU 的数据,但是不能写入数据?
可能此软件使用Modbus功能15写多个开关量输出功能到S7-200 SMART CPU时,没有遵守从站协议中“以整字节地址边界(如Q0.0、Q2.0)开始、以8的整数倍为位个数”的规约。
定义HMI 软件严格执行此规律可以避免发生写入错误的情况
7.为什么有的HMI 软件使用Modbus RTU 协议读取作为Modbus RTU 从站S7-200 SMART CPU 的浮点型数据时会出现错误?
可能此HMI软件使用Modbus RTU通信协议时,处理保持寄存器中浮点数的存储格式与西门子的浮点数存储格式不同。
西门子的PLC遵循“高字节低地址、低字节高地址”的规约。
Modbus RTU的保持寄存器以“字”为单位,1个浮点型数据则由2个“字”构成。
HMI 软件在处理时可能会将保持寄存器的两个“字”互换位置,造成不能识别以西门子格式表示的浮点数。
如果HMI软件一方无法处理这种浮点数,则可在S7-200 SMART CPU中编程将存入保持寄存器区的浮点数的高“字”和低“字”互换。
8.S7-200 SMART紧凑型CPU作为Modbus RTU 从站时,已经将MBUS_INIT 指令的Mode 输入参数设置为“1”了,但是MBUS_SLAVE 指令还是会出现10 号错误(从站功能未启用)?
S7-200 SMART紧凑型CPU 不能扩展信号模块,不具有模拟量输入通道,如果MBUS_INIT 指令的MaxAI 输入参数设置不为“0”,则MBUS_SLAVE 指令会出现10 号错误。
9.S7-200 SMART CPU作为Modbus RTU 从站时,是否支持Modbus RTU 主站发送的广播命令?
S7-200 SMART CPU 作为Modbus RTU 从站时,不支持广播命令。
主站故障代码
从站故障代码
Modbus RTU 从站执行错误代码。