西门子/SIEMENS 品牌
经销商厂商性质
上海市所在地
西门子软件6SE7038-6GL84-1JB0
SIEMENS西门子上海朕锌电气设备有限公司
:钟涛
24小时销售及:
电 话:
手 机: :
:
:
地址:上海市金山区枫湾路500号
公司主营:西门子数控系统,S7-200PLC S7-300PLC S7-400PLC S7-1200PLC 6ES5 ET200 人机界面,变频器,DP总线,MM420 变频器MM430 变频器MM440 6SE70交流工程调速变频器6RA70直流调速装置 SITOP电源,电线电缆,数控备件,伺服电机等工控产品。: :
冗余和重组
以太网环网广播会无限循环。冗余程序即为解决此问题。
当冗余故障发生时,例如一个节点的网线损坏或失效,在剩余的网络节点重新恢复正常之前,可能会出现报文丢失的情况。此故障时间称为重组时间。即使冗余恢复-更换了网线或节点-重组时间仍然存在。
链路聚合
链路聚合是将多个LAN端口聚合为一个单一的逻辑信道。 链路聚合存在于两个网络节点之间并为提高其间数据速率。zui多聚合8个端口。逻辑端口的zui大数据速率是所有单端口速率之和。
链路聚合的zui大速率并是总被*利用。通过聚合的节点之间的通讯仍然由其在聚合链路中的zui大速率决定。仅并行连接时更高的数据速率生效。
例如:聚合两个100 Mbit 线路
链路聚合同时支持冗余。当一条线路失效,通过链路聚合的其他线路仍然可以通讯。
图. 1
介质冗余协议(MRP)
MRP 是环网冗余协议。冗余管理器在两个环口上发生测试报文。只要测试报文每次都顺利到达另一个环口,冗余管理器就不会认为环网故障。为防止无限循环的广播,冗余管理器堵塞一个环口中除测试报文之外的所有报文。从而将环网转换为线型网络。
图. 2
当冗余管理器无法接收测试报文时,例如因为环网中的一根网线损坏,冗余管理器重新接通堵塞端口,并使能所有节点之间的完整连接。
环网故障的zui大重组时间为 200 ms。
环网恢复的zui大重组时间为 200 ms。
图. 3
高速冗余协议(HRP)
HRP 也是一种冗余协议。HRP 比 MRP 重组时间更长。与 MRP 不同,HRP 还支持备用功能。
环网故障的zui大重组时间为 300 ms。
环网恢复的zui大重组时间为 300 ms。
西门子软件6SE7038-6GL84-1JB0
HRP 之前称为 HSR。在旧版本的设备可以找到该名称。HSR 全称“高可靠无缝冗余协议”( High Availability Seamless Redundancy Protocol)。
网段冗余连接(热备)
热备功能用于两个 HRP 环网之间的冗余连接。环网中的两个交换机分别连接另一环网的两个交换机。
热备功能仅在一个环网交换机中组态。图. 4 展示了一个光纤环网和一个电气环网之间的热备功能。热备功能在光纤环网的两个交换机或者电气环网的两个交换机中组态。
网线损坏情况下,zui大重组时间为 300 ms。
网络恢复的zui大重组时间为 300 ms。
图. 4
高可靠无缝冗余协议(HSR)
HSR 是一种环网冗余协议。与其他冗余协议通常分离的、单向发送报文不同,HSR 每个报文在环网中都是双向发送。
图. 5
连接非冗余节点的交换机总是接收到两份报文。交换机转发*个报文,舍弃重复报文。该协议的优势是当网线损坏时,通讯不会中断。HSR不会丢失报文。
图. 6
并行冗余协议(PRP)
PRP 是一种网络冗余协议。报文通过并行网络同时传输。这两个网络可以是任意结构,例如一个交换机或者环网。 通过不同网络传输的报文在 Network A 和 Network B 上应保存*。
图. 7
PRP交换机将终端节点的报文发送至两个网络。接收端的PRP交换机转发*个到达的报文并舍弃重复报文。如果出现一根网线损坏或者一个并行网络*失效,PRP通讯不受影响。PRP不会丢失报文。
图. 8
PRP 可以和其他冗余协议混合使用,例如环网。
图. 9
快速生成树协议(RSTP)
RSTP用于网状网络。节点动态规划交换机间的*路径。10 Mbit/s的连接评估比100 Mbit/s连接更差。除此之外,经由两个交换机的连接评估比经由一个交换机(相同的传输速率)或者直接连接的更差。 通过这些计算得出交换机传输报文的优化路径。如果线路或者交换机失效,RSTP 报文丢失的时间会明显高于其他协议。
图. 10
总结
西门子在 Micro/WIN V4.0 SP5 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。
图 1. 西门子标准指令库(Micro/WIN V4.0 SP5)
注意
使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器。
要使用 Modbus RTU 主站指令库,须遵循下列步骤:
1. 调用 Modbus RTU 主站初始化和控制子程序
使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:
图 2. 用 SM0.0 调用 Modbus RTU 主站初始化与控制子程序
各参数意义如下:
a. | EN | 使能: | 必须保证每一扫描周期都被使能(使用 SM0.0) |
---|---|---|---|
b. | Mode | 模式: | 为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议 |
c. | Baud | 波特率: | 支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。 |
d. | Parity | 校验: | 校验方式选择 |
0=无校验 | |||
1=奇较验 | |||
2=偶较验 | |||
e. | Timeout | 超时: | 主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。 |
注意: 这个值必须设置足够大以保证从站有时间响应。 | |||
f. | Done | 完成位: | 初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作(见例程) |
g. | Error | 初始化错误代码(只有在 Done 位为1时有效): | |
0= 无错误 | |||
1= 校验选择非法 | |||
2= 波特率选择非法 | |||
3= 模式选择非法 |
2. 调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;
图 3. 调用Modbus RTU 主站读写子程序
各参数意义如下:
a. | EN | 使能: | 同一时刻只能有一个读写功能(即 MBUS_MSG)使能 |
---|---|---|---|
注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。 | |||
b. | First | 读写请求位: | 每一个新的读写请求必须使用脉冲触发 |
c. | Slave | 从站地址: | 可选择的范围 1 - 247 |
d. | RW | 从站地址: | 0 = 读, 1 = 写 |
注意: | |||
1. 开关量输出和保持寄存器支持读和写功能 | |||
2. 开关量输入和模拟量输入只支持读功能 | |||
e. | Addr | 读写从站的数据地址: | |
选择读写的数据类型 | |||
00001 至 0xxxx - 开关量输出 | |||
10001 至 1xxxx - 开关量输入 | |||
30001 至 3xxxx - 模拟量输入 | |||
40001 至 4xxxx - 保持寄存器 | |||
f. | Count | 数据个数 | 通讯的数据个数(位或字的个数) |
注意: Modbus主站可读/写的zui大数据量为120个字(是指每一个 MBUS_MSG 指令) | |||
g. | DataPtr | 数据指针: | 1. 如果是读指令,读回的数据放到这个数据区中 |
2. 如果是写指令,要写出的数据放到这个数据区中 | |||
h. | Done | 完成位 | 读写功能完成位 |
i. | Error | 错误代码: | 只有在 Done 位为1时,错误代码才有效 |
0 = 无错误 | |||
1 = 响应校验错误 | |||
2 = 未用 | |||
3 = 接收超时(从站无响应) | |||
4 = 请求参数错误(slave address, Modbus address, count, RW) | |||
5 = Modbus/自由口未使能 | |||
6 = Modbus正在忙于其它请求 | |||
7 = 响应错误(响应不是请求的操作) | |||
8 = 响应CRC校验和错误 | |||
- | |||
101 = 从站不支持请求的功能 | |||
102 = 从站不支持数据地址 | |||
103 = 从站不支持此种数据类型 | |||
104 = 从站设备故障 | |||
105 = 从站接受了信息,但是响应被延迟 | |||
106 = 从站忙,拒绝了该信息 | |||
107 = 从站拒绝了信息 | |||
108 = 从站存储器奇偶错误 |
3. 在 CPU 的 V 数据区中为库指令分配存储区(Library Memory)
Modbus Master 指令库需要一个284个字节的全局 V 存储区。
参考:分配库指令数据区
此为西门子正式推出的标准库指令说明资料。
在 Modbus RTU Master 协议和 PPI 协议之间切换:Modbus RTU Master 协议指令库使通信口工作在自由口模式下,此时不能与 Micro/WIN 软件通信。要在切换回 PPI 协议,可以:
Modbus RTU Master 协议库的执行时间:
Modbus RTU Master 协议库的 MBUS_CTRL 指令不需要很长的执行时间。MBUS_需要 1.11 ms 用于初始化,在后续的每个扫描周期中只占用 0.41 ms。
调用 MBUS_MSG 子程序会加长处理时间。大部分时间都用于 CRC 校验的计算。每读、写一个字的数据就需要 1.85 ms 扫描时间。数据zui多的情况下(读、写 120 字的数据),扫描时间大概会扩增加 222 ms。读操作的时间主要消耗在接收数据上;写操作的时间主要消耗在发送数据上。
Modbus 地址
通常 Modbus 地址由 5 位数字组成,包括起始的数据类型代号,以及后面的偏移地址。Modbus Master 协议库把标准的 Modbus 地址映射为所谓 Modbus 功能号,读写从站的数据。Modbus Master 协议库支持如下地址:
Modbus Master 协议库支持的功能
为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能:
表 1. 需要从站支持的功能
Modbus 地址 | 读/写 | Modbus 从站须支持的功能 |
---|---|---|
00001 - 09999 数字量输出 | 读 | 功能 1 |
写 | 功能 5:写单输出点 功能 15:写多输出点 | |
10001 - 19999 数字量输入 | 读 | 功能 2 |
写 | - | |
30001 - 39999 | 读 | 功能 4 |
写 | - | |
40001 - 49999 保持寄存器 | 读 | 功能 3 |
写 | 功能 6:写单寄存器单元 功能 16:写多寄存器单元 |
Modbus 地址和 S7-200 存储区地址的映射
S7-200 通过 Modbus Master 和 Slave 协议库通信时,Modbus 地址和 S7-200 内存储区地址的 映射关系都类似。
Modbus 保持寄存器地址映射举例:
Modbus 数字量地址映射举例:
位地址(0xxxx 和 1xxxx)数据总是以字节为单位打包读写。*个字节中的zui低有效位对应 Modbus 地址的起始地址。如下图所示:
图 4. 数字量地址映射举例
为了更好地理解 Modbus 主站的编程,可参考下面的例程。
例子程序1: 多个MBUS_MSG指令轮询执行,
注意
Modbus RTU 主站指令库应用例程
例子程序2:反复激活单个MBUS_MSG指令:
Modbus RTU 主站变址方式轮询访问应用例程
注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险*由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和支持,用户不必为 此西门子与服务部门。
Modbus RTU 主站库对 CPU 的版本是否有要求,为什么编译例子程序时,会遇到 4 个错误?
Modbus RTU 主站库对 CPU 的版本确实有要求,CPU 的版本必须为 2.00 或者 2.01(即订货号为6ES721*-***23-0BA*),1.22 版本之前(包括 1.22 版本)的 S7-200 CPU 不支持。
Modbus 指令库启动后,如何通过同一个通信端口进行 CPU 监控?
Modbus 指令库使用的是 CPU 的自由口通信功能,工作在自由口模式下的通讯口不能使用 Micro/WIN 的 PPI 编程通信监控。如果通信口都已经被占用,可以考虑:
如何理解 Modbus 地址与功能码的区别?
Modbus 地址与 Modbus 的功能码是两个层次的概念。
根据 Modbus 通信协议,Modbus 数据的地址使用 0xxxx、1xxxx、3xxxx 和 4xxxx 的形式,分别表示数字量输出、数字量输入、模拟量输入等数据地址。在使用 S7-200 的指令库时,Modbus 数据地址与 S7-200 的 I/O 和数据存储区地址间有特定的对应关系。
有些设备表明它支持 Modbus RTU 通信协议,但也详细提供了读写数据的详细通信帧格式,其中包括如何 Modbus 站的地址,需要读写数据类型、长度等等。数据帧有特定字节指出此指令读写的数据类型和地址,此字节的数据内容即所谓"功能码",如功能 1 读取单个/多个数字量输出点的值。
支持 Modbus 协议的设备或软件,使用时用户直接设置或看到的应当是 Modbus 数据地址。Modbus 地址所访问的数据,是通过各种"功能"读写而来。功能码是 Modbus 地址的底层。如果 Modbus 通信的一方提供的所谓 Modbus 协议只有功能码,则需要注意了解此功能号与 Modbus 地址间的对应关系。
如何访问大于 9999 的保持寄存器地址?
通常 Modbus 协议的保持寄存器地址范围在 40001 - 49999 之间。对于多数应用来说已经够了。但有些 Modbus 从站把地址映射到保持寄存器区的地址超过 9999 的部分。
Modbus Master 协议库支持超过 9999 的保持寄存器地址。地址范围为 400001 - 465536。只需在调用 MBUS_MSG 子程序时给 Addr 参数赋相应的值即可,如 416768。
Modubs Master 扩展地址模式仅支持保持寄存器区,不支持其他地址类型。
S7-200 作为 Modbus 主站方接收上来的数据格式与第三方设备不一样怎么办?
西门子PLC数据的存储格式为高位低存方式。举例:VD200中包含VW200和VW202,其中VW202是低字,VW200是高字。若第三方设备与西门子数据存储格式不同,是低位低存的方式,那么通信上来的数据就会存在错误,需要进行转换才能使用。编程的方式比较多样,针对双字中高低字的交换可以使用SWAP(字交换)指令,若是字节交换可以考虑循环移位指令。
S7-200 是否支持如 Modbus TCP 等其它协议?
不支持。S7-200自身的通信端口或其通信扩展模块均不支持 Modbus TCP、CANopen、DeviceNet 以及 BACnet 通信协议。
为什么 S7-200 作 Modbus 主站时 MBUS_MSG 指令报6号错误?
引起6号错误主要有两方面的原因:1.多个 MBUS_MSG 指令同时使能执行;2. Modbus库存储区中分配的建议地址区与编程中已使用的V存储区有重叠。