西门子S7-200 SMART之Modbus RTU 通信常见问题及错误代码含义
Modbus通讯协议中功能码错误

功能码主要用于表述该数据报文执行的功能,当服务器对客户机进行响应时,它使用功能码域来指示正常响应(无差错)或者异常响应(即出现某种差错),其中的modbus协议的功能码众多,在此我们一一列出与大家分享。
功能码表
其中物理离散量输入和输入寄存器只能有I/O系统提供的数据类型,即只能是由I/O系统改变离散量输入和输入寄存器的数值,而上位机程序不能改变的数据类型,在数据读写上表现为只读,而内部比特或者物理线圈和内部寄存器或物理输出寄存器(保持寄存器)则是上位机应用程序可以改变的数据类型,在数据读写上表现为可读可写。
错误代码表
我们以Modbus RTU协议为例,地址码为0x01,写操作0x10,寄存器地址为
0x018E,CRC校验。
如寄存器可读写的话,返回正常,如寄存器只读,返回异常。
200SMART MODBUS RTU通讯指令介绍

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 通信协议与资源每个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故障排除指南
本文档旨在提供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控制器的使用手册或联系售后服务获取进一步的帮助。
S7-200 SMART PLC 串口通信说明(图文并茂)

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所示。
S7-200错误代码及其描述

000D
重新定义已经使用的脉冲输出
000E
PTO个数设为0
0091
范围错误(带地址信息);检查操作数范围
0092
某条指令的计数域错误(带计数信息);确认最大计数范围
0094
范围错误(带地址信息);写无效存储器
009A
用户中断程序试图转换成自由口模式
在程序正常运行中,可能会产生非致命错误(如寻址错误)。此时CPU产生一个非致命运行时刻错误代码。
0000
无错误
0001
执行HDEF之前,HSC不允许
0002
输入中断分配冲突,已分配给HSC
0003
到HSC的输入分配冲突,已分配给输入中断
0004
在中断程序中企图执行ENI,DISI,或HDEF指令
0005
第一个HSC/PLS未执行完之前,又企图执行同编号的第二个HSC/PLS
(中断程序中的HSC同主程序中的HSC/PLS冲突)
错误代码
编译错误(非致命)
0080
程序太大无法编译;你必须缩短程序
0081
堆栈溢出;你必须把一个网络分成多个网络
0082
非法指令;检查指令助记符
0083
无MEND或主程序中有不允许的指令;加条MEND或删去错误指令
0084
保留
0085
无FOR指令;加上FOR指令或删条NEXT指令
0086
无NEXT;加条NEXT指令,或删条FOR指令
内部软件错误
0011
比较接点间接寻址错误
0012
比较接点非法值错误
0013
存储器卡空,或者CPU不识别该卡
致命错误会导致CPU停止执行用户程序,导致CPU无法执行某个或所有功能。致命错误发生时,CPU执行以下任务:进入STOP模式,点亮系统致命、系统错误和STOP指示灯,断开输出。
modbus RTU常见问题

置为主站,一般为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。
S7-200组态王通讯的问题MODBUS介绍

“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协议所对应的参数地址一般按照字为基本单位进行分地址排序的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常见问题
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 从站执行错误代码。