西门子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 的一个扫描周期内有效,因此无法通过程序或监控表查看到。
S7-200通讯连不上问题解决方法1 将CPU打到STOP位置试试2 关闭所有的软件,尤其是占用通讯口的软件,只保留200PLC编程软件。
3 要与西门子最新推出的S7-200 CN CPU 正常通信,必须满足以下条件:使用编程软件STEP 7-Micro/WIN V4.0 SP3 以上版将编程软件的工作环境设置为中文状态。
如果不满足上述条件,会在下载通信时遇到82 号错误。
如果已经满足上述条件而仍然遇到错误,请检查是否其他原因。
4 使用原装USB/PPI电缆,需要将编程软件升级到当前发布的最新版本,并且在设置PG/PC接口的时候要选择USB,非原装USB电缆需要正确选择COM口(电脑-属性-硬件-设备管理器-端口)5 在“Set PG/PC”通信属性时,COM口的符号前为什么会有一个星号“*”?COM口前面的星号说明它被其他软件占用,Micro/WIN不能使用。
6 非原装USB电缆实际上是COM电缆,是USB-COM电缆加上COM电缆,所以设置应该根据COM口来设置。
7 安装了USB-COM驱动后,一定要将电缆重新启动。
另参考:检查编程通信的主要步骤如果有时能够通信但不正常,请检查如下“1-4”项,如果根本不通,请检查全部项目:1 检查STEP 7-Micro/WIN与Windows操作系统是否完全兼容2 检查是否使用西门子的原装编程电缆,以及电缆是否符合编程PC机或笔记本电脑的硬件条件3 检查编程电脑上的COM通信口设置鼠标右键单击“我的电脑”,选择“属性”打开“设备管理器”标签(对于Windows2000,选择“硬件”标签,按“设备管理器”按钮)双击“端口(COM和LPT)”双击所使用的通信口,如COM1在端口设置标签,选择“高级”在对话框中把接收和发送缓冲区都设置为最小值,并保持选中“FIFO”选择框重新启动计算机使设置有效4 检查编程电缆的DIP开关设置,是否与Micor/WIN的通信速率设置相同在Micro/WIN左边的浏览条中鼠标单击Communication(通信)大图标,检查通信参数设置。
西门⼦S7-200SMART之ModbusRTU通信常见问题及错误代码含义常见问题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 指令的执⾏需要采⽤轮询⽅式。
西门子伺服故障代码(附件五)S7-200可编程控制器系统手册位控模块和位控指令的错误代码表9-20指令错误代码错误代码描述0无错1用户放弃2组态错误使用EM253控制面板的诊断标签查看错误代码3非法命令4由于没有有效的组态而放弃使用EM253控制面板的诊断标签查看错误代码5由于没有用户电源而放弃6由于没有定义的参考点而放弃7由于STP输入激活而放弃8由于LMT--输入激活而放弃9由于LMT+输入激活而放弃10由于运动执行的问题而放弃11没有为指定包络所组态的包络块12非法操作模式13该命令不支持的操作模式14包络块中非法的步号15非法的方向改变16非法的距离17RPS触发在达到目标速度前出现18RPS有效区域宽度不足19速度超出范围20没有足够的距离执行所希望的速度改变21非法位置22零位置未知23to127保留128位控模块不能处理该指令:位控模块可能正在忙于处理另一个指令或该指令无启动脉冲。
129位控模块错误模块ID不正确或模块已注销。
其它错误条件请参看SMB8到SMB21(I/O模块ID和错误寄存器)。
130位控模块未使能131位控模块不能使用由于模块故障或未使能(参见POSx_CTRL状态)132由位控向导组态的Q内存地址与位控模块在该位置处模块的内存地址不一致。
S7--200开环运动控制第9章表9-21模块错误代码错误代码描述0无错1无用户电源2没有组态块3组态块指针错误4组态块的大小超过了可用的V区5非法的组态块格式6定义了太多的包络7非法的STP_RSP定义8非法LIM--定义9非法LIM+定义10非法的FILTER_TIME定义11非法的MEAS_SYS定义12非法的RP_CFG定义13非法的PLS/REV值14非法的UNITS/REV值15非法的RP_ZP_CNT值16非法的JOG_INCREMENT值17非法的MAX_SPEED值18非法的SS_SPD值19非法的RP_FAST值20非法的RP_SLOW值21非法的JOG_SPEED值22非法的ACCEL_TIME值23非法的DECEL_TIME值24非法的JERK_TIME值25非法的BKLSH_COMP值S7-200Programmable Controller System ManualError Codes for the Position Module and the Position InstructionsT able9-20Instruction Error CodesError Code Description0No error1Aborted by user2Configuration errorUse the EM253Control Panel Diagnostics tab to view error codes3Illegal command4Aborted due to no valid configurationUse the EM253Control Panel Diagnostics tab to view error codes5Aborted due to no user power6Aborted due to no defined reference point7Aborted due to STP input active8Aborted due to LMT--input active9Aborted due to LMT+input active10Aborted due to problem executing motion11No profile block configured for specified profile12Illegal operation mode13Operation mode not supported for this command14Illegal number of steps in profile block15Illegal direction change16Illegal distance17RPS trigger occurred before target speed reached18Insufficient RPS active region width19Speed out of range20Insufficient distance to perform desired speed change21Illegal position22Zero position unknown23to127Reserved128Position module cannot process this instruction:either the Position module is busy withanother instruction,or there was no Start pulse on this instruction129Position module error:Module ID incorrect or module logged out.Refer to SMB8to SMB21 (I/O Module ID and Error Register)for other error conditions.130Position module is not enabled131Position module is not available due to a module error or module not enabled(See the POSx_CTRL status)132The Q memory address that was configured with the Position Control wizard does notmatch the memory address for the module at this location.Open Loop Motion Control with the S7-200Chapter9T able9-21Module Error CodesError Code Description0No error1No user power2Configuration block not present3Configuration block pointer error4Size of configuration block exceeds available V memory 5Illegal configuration block format6T oo many profiles specified7Illegal STP_RSP specification8Illegal LMT--_RPS specification9Illegal LMT+_RPS specification10Illegal FILTER_TIME specification11Illegal MEAS_SYS specification12Illegal RP_CFG specification13Illegal PLS/REV value14Illegal UNITS/REV value15Illegal RP_ZP_CNT value16Illegal JOG_INCREMENT value17Illegal MAX_SPEED value18Illegal SS_SPD value19Illegal RP_FAST value20Illegal RP_SLOW value21Illegal JOG_SPEED value22Illegal ACCEL_TIME value23Illegal DECEL_TIME value24Illegal JERK_TIME value25Illegal BKLSH_COMP value。
采用S7-200smartModbusRTU通信如何配置,一文全明白软件版本:S7-200 SMART V2.2注意:一个CPU支持两个通信端口同时做MODBUS RTU主站一、背景知识普及概述1、S7-200 SMART CPU上的通信口0(Port0)通过指令库支持Modbus RTU从站模式。
2、S7-200 SMART CPU 上的通讯口0和1(Port0和Port1)通过指令库支持Modbus RTU主站模式。
3、S7-200 SMART CPU 上的通讯口0和1(Port0和Port1)不能同时作为Modbus RTU主站或从站。
S7-200 SMART CPU 本体集成通信口(Port 0)、可选信号板(Port 1)可以支持Modbus RTU协议,成为Modbus RTU主站站。
此功能是通过 S7-200 SMART的自由口通信模式实现,因此可以通过无线数据电台等慢速通信设备传输。
注:SB CM01(RS485/RS232) 订货号:6ES7 288-5CM01-0AA0 S7-200 SMART 软件的帮助有明确说明打开软件找到库选择初始化主站或者从站程序块然后按F1从站参数“端口”(Port) 设置物理通信端口(0 = CPU 中集成的 RS-485,1 = 可选信号板上的 RS-485 或 RS-232)。
主站参数“端口”(Port)设置物理通信端口(0 = CPU 中集成的RS-485,1 = 可选 CM01 信号板上的 RS-485 或 RS-232)。
清晰的写着他们都可以既做主又可以做从而且两个口是独立的既可以同时做主可以同时做从还可以向你说的一个做主一个做从关键词“独立的”Modbus RTU 主站协议Modbus 主站指令使用以下 CPU 资源:执行MBUS_CTRL 会初始化Modbus 主站协议,并使分配的CPU 端口(0 或 1)专用于 Modbus 主站通信。
S7-200与多台变频器 Modbus_RTU主站通讯超时处理的问题【工控老鬼】问题:S200与多台变频器 Modbus_RTU 主站通讯,超时处理的问题。
各位大侠,我现在在做一个S200通过Modbus RTU主站协议与多台变频器通讯的小实验,于是连接了一台变频器模拟测试。
结果发现因为找不到其他站,数据传输很慢,读写指令要4-5s才能传过去。
现在通讯是没有问题,做单台程序测试很快,只是程序里加了几个点后发现慢了很多,终端电阻已经设好。
分析应该是程序搜索不存在的地址,造成通讯超时所致。
但我试了很长时间也没有找到一个有效的方法来优化程序,请大家帮助一下,希望可以实现:当存在某台变频器掉线时,可以自动屏蔽对它的周期性访问,但5s左右还要再尝试与这台变频器的通讯,以便在故障恢复时加上这个站。
谢谢!!!问题补充:谢谢wb210xa的热情回答:我利用上一条(a)modbus_msg的Done位做为下一条指令(b)的En和First 触发,同时复位a的En和Done位,如此循环。
按此计算,Timeout=100ms,读写共计10条指令,应该循环时间为100*10=1s。
也不应该到4-5s呀,因此,我想以减少对不存在站点的访问次数的方法来提高扫描速度,如果有其他方法请指教,谢谢!问题分析和解答:其实比较简单,就是设置合适的超时时间。
比如楼主要读取10台变频器,超时时间假如为1s,正常时可能100ms即有数据返回。
1)如果通讯正常时,10台变频的轮询时间为10*100=1s(我只考虑读取状态信息,如果同时读写时时间可能更长,当然和读写数据量有关)。
2)同样情况下,如果有5台变频通讯故障时,总的轮询时间为:5*100+5*1000=5500ms。
而如果超时时间设为150ms时:1)正常通讯时,10台变频的轮询时间为10*100=1s2)而同样情况下,如果有5台变频通讯故障时,总的轮询时间为:5*100+5*150=1250ms。
常见问题
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 从站执行错误代码。