S7-1200 可编程控制器 通信处理器

2018年6月23日07:37:22 发表评论 1,056 阅读

11 通信处理器 607

12.1 使用串行通信接口 607

12.2 偏置和端接 RS485 网络连接器 608

12.3 点对点 (PtP) 通信 609

12.3.1 点对点指令 610

12.3.1.1 点对点指令的公共参数 610

12.3.1.2 PORT_CFG 指令 613

12.3.1.3 SEND_CFG 指令 615

12.3.1.4 RCV_CFG 指令 616

12.3.1.5 SEND_PTP 指令 622

12.3.1.6 RCV_PTP 指令 625

12.3.1.7 RCV_RST 指令 627

12.3.1.8 SGN_GET 指令 628

12.3.1.9 SGN_SET 指令 629

12.3.2 组态通信端口 630

12.3.2.1 管理流控制 632

12.3.3 组态传送(发送)和接收参数 634

12.3.3.1 组态传送(发送)参数 634

12.3.3.2 组态接收参数 635

12.3.4 设计 PtP 通信 643

12.3.4.1 轮询架构 644

12.3.5 示例: 点对点通信 645

12.3.5.1 组态通信模块 646

12.3.5.2 组态 RS422 和 RS485 648

12.3.5.3 编写 STEP 7 程序 651

12.3.5.4 组态终端仿真器 652

12.3.5.5 运行示例程序 652

12.3 通用串行接口 (USS) 通信 653

12.4.1 使用 USS 协议的要求 654

12.4.2 USS_DRV 指令 657

12.4.3 USS_PORT 指令 660

12.4.4 USS_RPM 指令 661

12.4.5 USS_WPM 指令 662

12.4.6 USS 状态代码 664

12.4.7 常规驱动器设置信息 666

12.4 Modbus 通信 670

12.4.1 Modbus RTU 和 TCP 通信概述 670

12.4.2 Modbus TCP 673

12.4.2.1 MB_CLIENT (Modbus TCP) 673

12.4.2.2 MB_SERVER (Modbus TCP) 680

12.4.2.3 MB_SERVER 示例: 多个 TCP 连接 686

12.4.2.4 MB_CLIENT 示例 1: 通过公共 TCP 连接发送多个请求 687

12.4.2.5 MB_CLIENT 示例 2: 通过不同的 TCP 连接发送多个请求 688

12.4.2.6 MB_CLIENT 示例 3: 输出映像写入请求 690

12.4.2.7 MB_CLIENT 示例 4: 协调多个请求 690

12.4.3 Modbus RTU 691

12.4.3.1 MB_COMM_LOAD 692

12.4.3.2 MB_MASTER 695

12.4.3.3 MB_SLAVE 701

12.4.3.4 Modbus RTU 主站示例程序 708

12.4.3.5 Modbus RTU 从站示例程序 709

12.5 采用 CP 1242-7 的遥控和远程服务 710

12.5.1 连接到 GSM 网络 710

12.6.2 CP 1242-7 的应用 711

12.6.3 CP 的其它属性 713

12.6.4 附件 714

12.6.5 遥控组态示例

通信处理器 12

使用串行通信接口

以下两个通信模块 (CM, Communication Module) 和一个通信板 (CB, Communication

Board) 提供了用于 PtP 通信的接口:

      • CM 1241 RS232 (页 909)
      • CM 1241 RS422/485 (页 910)
      • CB 1241 RS485 (页 906)

最多可以连接三个 CM(类型不限)外加一个 CB,因而总共可提供四个通信接口。 请将CM 安装到 CPU 或另一个 CM 的左侧。将 CB 安装在 CPU 的前端。 有关模块安装和拆卸的详细说明,请参见 S7-1200 系统手册中的“安装”一章 (页 55)。

串行通信接口具有以下特征:

      • 具有隔离的端口
      • 支持点对点协议
      • 通过扩展指令和库功能进行组态和编程
      • 通过 LED 显示传送和接收活动
      • 显示诊断 LED(仅限 CM)
      • 均由 CPU 供电: 不必连接外部电源。请参见 通信接口 (页 895)的技术规范。
LED 指示灯

通信模块有三个 LED 指示灯:

        • 诊断 LED (DIAG): 在 CPU 找到通信模块前,诊断 LED 将一直以红色闪烁。 CPU 在上电后会检查 CM,并对其进行寻址。 诊断 LED 开始以绿色闪烁。 这表示 CPU 寻址到 CM,但尚未为其提供组态。 将程序下载到 CPU 后,CPU 会将组态下载到组态的 CM。 执行下载到 CPU 操作后,通信模块上的诊断 LED 应为绿色常亮。
        • 发送 LED (Tx): 从通信端口向外传送数据时,发送 LED 将点亮。
        • 接收 LED (Rx): 通信端口接收数据时,该 LED 将点亮。

通信板具有发送 LED (TxD) 和接收 LED (RxD)。 但没有诊断 LED。

    1. 偏置和端接 RS485 网络连接器
    2. 偏置和端接 RS485 网络连接器

Siemens 提供了一个 RS485 网络连接器 (页 923),可用来方便地将多台设备连接到

RS485 网络。 该连接器带有两组端子,分别用于连接输入和输出网络电缆。 连接器还包括用于选择性地偏置和端接网络的开关。

说明

但只能端接和偏置 RS485 网络的两端。 不会端接或偏置这两个终端设备之间的设备。无电缆屏蔽: 所有位置的金属导线必须接触大约 12 mm (1/2 in)。

S7-1200 可编程控制器 通信处理器-1 S7-1200 可编程控制器 通信处理器-2 S7-1200 可编程控制器 通信处理器-3 1 2 3

〩 〩

S7-1200 可编程控制器 通信处理器-4

A1 B1 A2 B2

A1 B1 A2 B2

A1 B1 A2 B2

① 开关位置 = 开 (On):端接且偏置

② 开关位置 = 关 (Off):无端接或偏置

③ 开关位置 = 开 (On):端接且偏置

表格 12- 1 RS485 连接器的端接和偏置

S7-1200 可编程控制器 通信处理器-5 S7-1200 可编程控制器 通信处理器-6 S7-1200 可编程控制器 通信处理器-7

① 引脚编号

② 网络连接器

③ 电缆屏蔽

CB 1241 提供了用于端接和偏置网络的内部电阻。 要终止或偏置连接,应将 TRA 连接到TA,将 TRB 连接到 TB,以便将内部电阻接到电路中。 CB 1241 没有 9 针连接器。 下表列出了与通信伙伴上的 9 针连接器之间的连接。

表格 12- 2 CB 1241 的端接和偏置

S7-1200 可编程控制器 通信处理器-8 S7-1200 可编程控制器 通信处理器-9 S7-1200 可编程控制器 通信处理器-10 S7-1200 可编程控制器 通信处理器-11 S7-1200 可编程控制器 通信处理器-12 S7-1200 可编程控制器 通信处理器-13 S7-1200 可编程控制器 通信处理器-14 S7-1200 可编程控制器 通信处理器-15 S7-1200 可编程控制器 通信处理器-16 S7-1200 可编程控制器 通信处理器-17 S7-1200 可编程控制器 通信处理器-18 S7-1200 可编程控制器 通信处理器-19 S7-1200 可编程控制器 通信处理器-20 S7-1200 可编程控制器 通信处理器-21 S7-1200 可编程控制器 通信处理器-22 S7-1200 可编程控制器 通信处理器-23 S7-1200 可编程控制器 通信处理器-24

通信处理器 12

使用串行通信接口

以下两个通信模块 (CM, Communication Module) 和一个通信板 (CB, Communication

Board) 提供了用于 PtP 通信的接口:

      • CM 1241 RS232 (页 909)
      • CM 1241 RS422/485 (页 910)
      • CB 1241 RS485 (页 906)

最多可以连接三个 CM(类型不限)外加一个 CB,因而总共可提供四个通信接口。 请将CM 安装到 CPU 或另一个 CM 的左侧。将 CB 安装在 CPU 的前端。 有关模块安装和拆卸的详细说明,请参见 S7-1200 系统手册中的“安装”一章 (页 55)。

串行通信接口具有以下特征:

      • 具有隔离的端口
      • 支持点对点协议
      • 通过扩展指令和库功能进行组态和编程
      • 通过 LED 显示传送和接收活动
      • 显示诊断 LED(仅限 CM)
      • 均由 CPU 供电: 不必连接外部电源。请参见 通信接口 (页 895)的技术规范。
LED 指示灯

通信模块有三个 LED 指示灯:

        • 诊断 LED (DIAG): 在 CPU 找到通信模块前,诊断 LED 将一直以红色闪烁。 CPU 在上电后会检查 CM,并对其进行寻址。 诊断 LED 开始以绿色闪烁。 这表示 CPU 寻址到 CM,但尚未为其提供组态。 将程序下载到 CPU 后,CPU 会将组态下载到组态的 CM。 执行下载到 CPU 操作后,通信模块上的诊断 LED 应为绿色常亮。
        • 发送 LED (Tx): 从通信端口向外传送数据时,发送 LED 将点亮。
        • 接收 LED (Rx): 通信端口接收数据时,该 LED 将点亮。

通信板具有发送 LED (TxD) 和接收 LED (RxD)。 但没有诊断 LED。

    1. 偏置和端接 RS485 网络连接器
    2. 偏置和端接 RS485 网络连接器

Siemens 提供了一个 RS485 网络连接器 (页 923),可用来方便地将多台设备连接到

RS485 网络。 该连接器带有两组端子,分别用于连接输入和输出网络电缆。 连接器还包括用于选择性地偏置和端接网络的开关。

说明

但只能端接和偏置 RS485 网络的两端。 不会端接或偏置这两个终端设备之间的设备。无电缆屏蔽: 所有位置的金属导线必须接触大约 12 mm (1/2 in)。

S7-1200 可编程控制器 通信处理器-25 S7-1200 可编程控制器 通信处理器-26 S7-1200 可编程控制器 通信处理器-27 1 2 3

〩 〩

S7-1200 可编程控制器 通信处理器-28

A1 B1 A2 B2

A1 B1 A2 B2

A1 B1 A2 B2

① 开关位置 = 开 (On):端接且偏置

② 开关位置 = 关 (Off):无端接或偏置

③ 开关位置 = 开 (On):端接且偏置

表格 12- 1 RS485 连接器的端接和偏置

S7-1200 可编程控制器 通信处理器-29 S7-1200 可编程控制器 通信处理器-30 S7-1200 可编程控制器 通信处理器-31

端接设备(偏置 ON) 非端接设备 (偏置 OFF)
1 7['/5[' +

7['/5['

%2

$2

1
7['/5[' +

7['/5['

%1

$1

2 3

7['/5[' +

7['/5['

%1

$1

2
3 3

① 引脚编号

② 网络连接器

③ 电缆屏蔽

CB 1241 提供了用于端接和偏置网络的内部电阻。 要终止或偏置连接,应将 TRA 连接到TA,将 TRB 连接到 TB,以便将内部电阻接到电路中。 CB 1241 没有 9 针连接器。 下表列出了与通信伙伴上的 9 针连接器之间的连接。

表格 12- 2 CB 1241 的端接和偏置

S7-1200 可编程控制器 通信处理器-32 S7-1200 可编程控制器 通信处理器-33 S7-1200 可编程控制器 通信处理器-34 S7-1200 可编程控制器 通信处理器-35 S7-1200 可编程控制器 通信处理器-36 S7-1200 可编程控制器 通信处理器-37 S7-1200 可编程控制器 通信处理器-38 S7-1200 可编程控制器 通信处理器-39 S7-1200 可编程控制器 通信处理器-40 S7-1200 可编程控制器 通信处理器-41 S7-1200 可编程控制器 通信处理器-42 S7-1200 可编程控制器 通信处理器-43 S7-1200 可编程控制器 通信处理器-44 S7-1200 可编程控制器 通信处理器-45 S7-1200 可编程控制器 通信处理器-46 S7-1200 可编程控制器 通信处理器-47 S7-1200 可编程控制器 通信处理器-48 S7-1200 可编程控制器 通信处理器-49

端接设备(偏置 ON) 非端接设备 (偏置 OFF)
9 8

0

7$

75$ $

75% %

7%

390 ˖

150 ˖

390 ˖

9 8

0

7$

3 3 75$ $
75% %
1 1 7%

① 将 M 连接到电缆屏蔽

② A = TxD/RxD -(绿色线/针 8)

③ B = TxD/RxD +(红色线/针 3)

点对点 (PtP) 通信

CPU 支持下列有关基于字符的串行协议的点对点通信 (PtP)。 PtP 可提供最大的自由度和灵活性,但需要在用户程序中包含大量的实现。

      • PtP (页 609)
      • USS (页 653)
      • Modbus (页 670)

PtP 可用于实现多种可能性:

S7-1200 可编程控制器 通信处理器-50 S7-1200 可编程控制器 通信处理器-51 S7-1200 可编程控制器 通信处理器-52 S7-1200 可编程控制器 通信处理器-53

        • 能够将信息直接发送到外部设备,例如,打印机
        • 能够从其它设备(例如,条码阅读器、RFID 阅读器、第三方照相机或视觉系统以及许多其它类型的设备)接收信息
        • 能够与其它设备(例如,GPS 设备、第三方照相机或视觉系统、无线调制解调器以及更多其它设备)交换信息(发送和接收数据)

PtP 通信属于串行通信,它使用标准 UART 来支持多种波特率和奇偶校验选项。 RS232

和 RS422/485 通信模块及 RS485 通信板提供了用于执行 PtP 通信的电气接口。

点对点指令

点对点指令的公共参数

表格 12- 3 PTP 指令的常见输入参数

参数 说明
REQ 许多 PtP 指令使用 REQ 输入在由低电平向高电平切换时启动操作。 REQ 输入在指令执行一次的时间内必须为高电平 (TRUE),不过 REQ 输入可以在所需时间内一直保持为 TRUE。 在 REQ 输入为 FALSE 时调用指令以便能复位 REQ 输入的历史状态之前,指令不会启动其它操作。 只有这样,指令才能检测低电平到高电平的跳变以启动下一个操作。

将 PtP 指令放入程序时,STEP 7 会提示用户指定背景数据块。 对每个 PtP 指令调用使用一个唯一的背景数据块。 这样可确保每个指令都能正确地处理诸如 REQ 等输入。

PORT 在通信设备组态过程中分配端口地址。 组态后,可以从参数帮助下拉列表中选择默认端口的符号名称。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口

符号名称在 PLC 变量表的“常量”(Constants) 选项卡中分配。

位时间精度 有几个参数以位时间(通过组态的波特率确定)为单位指定的。 以位时间为单位指定参数可以使参数与波特率无关。 所有以位时间为单位的参数都可以被指定为最多

65535 个位。但 CM 或 CB 可测量的最长时间是 8 秒。

PtP 指令的输出参数 DONE、NDR、ERROR 和 STATUS 可提供 PtP 操作的执行完成状态。

表格 12- 4 DONE、NDR、ERROR 和 STATUS 输出参数

参数 数据类型 默认值 说明
DONE Bool FALSE 设置为 TRUE 并持续执行一次所需的时间,以表明上一请求已经完成且没有出现错误;否则为 FALSE。
NDR Bool FALSE 设置为 TRUE 并持续执行一次所需的时间,以表明请求的动作已经完成且没有出现错误并已接收新的数据;否则为FALSE。
参数 数据类型 默认值 说明
ERROR Bool FALSE 设置为 TRUE 并持续执行一次所需的时间,以表明上一请求已经完成但出现了错误,相应的错误代码在 STATUS

中;否则为 FALSE。

STATUS Word 0 结果状态:

  • 如果设置了 DONE 或 NDR 位,则 STATUS 被设置为

0 或信息代码。

  • 如果设置了 ERROR 位,则 STATUS 被设置为一个错误代码。
  • 如果没有设置以上任何一位,则指令会返回说明功能当前状态的状态结果。

STATUS 在该功能执行期间一直保持其值。

说明

DONE、NDR 和 ERROR 参数仅置位一个执行周期的时间。 程序逻辑必须将临时输出状态值保存在数据锁存器中,以便能检测到后续程序扫描中的状态变化。

表格 12- 5 公共条件代码

STATUS (W#16#....) 说明
0000 无错误
7000 功能不忙
7001 功能忙于处理第一个调用。
7002 功能忙于处理后续调用(第一个调用后的轮询)。
8x3A 参数 x 中的指针非法
8070 所有内部实例存储器都被占用,正在执行的并发指令过多
8080 端口号非法。
8081 超时、模块错误或其它内部错误
8082 由于正在后台进行参数化,参数化失败。
8083 缓冲区溢出:

CM 或 CB 返回一条接收到的消息,该消息的长度大于长度参数所允许的值。

STATUS (W#16#....) 说明
8090 内部错误: 错误的消息长度、错误的子模块或非法消息请联系客户支持。
8091 内部错误: 参数化消息中的版本错误请联系客户支持。
8092 内部错误: 参数化消息中的记录长度错误请联系客户支持。

表格 12- 6 常见的错误类别

类别说明 错误类别 说明
端口组态 80Ax 用于定义常见端口组态错误
传送组态 80Bx 用于定义常见传送组态错误
接收组态 80Cx 用于定义常见接收组态错误
传送运行时 80Dx 用于定义常见传送运行时错误
接收运行时 80Ex 用于定义常见接收运行时错误
信号处理 80Fx 用于定义与所有信号处理相关的常见错误
PORT_CFG 指令

表格 12- 7 PORT_CFG(端口组态)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-54 "PORT_CFG_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, PROTOCOL:=_uint_in_, BAUD:=_uint_in_, PARITY:=_uint_in_, DATABITS:=_uint_in_, STOPBITS:=_uint_in_, FLOWCTRL:=_uint_in_, XONCHAR:=_char_in_, XOFFCHAR:=_char_in_, WAITTIME:=_uint_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

PORT_CFG 可用于通过用户程序更改端口参数,如波特率等参数。

可以在设备配置属性中设置端口的初始静态组态,或者仅使用默认值。 可以在用户程序中执行 PORT_CFG 指令来更改组态。

1 STEP 7 会在插入指令时自动创建 DB。

PORT_CFG 组态更改不会永久存储在 CPU 中。 CPU 从 RUN 模式切换到 STOP 模式和循环上电后将恢复设备配置中组态的参数。 更多信息,请参见 组态通信端口 (页 630)和管理流控制 (页 632)。

表格 12- 8 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿激活组态更改。 (默认值: False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表

的“系统常量”(System constants) 选项卡中分配。 (默认值:0)

PROTOCOL IN UInt 0 - 点对点通信协议(默认值)

1..n - 用于在将来定义特定的协议

BAUD IN UInt 端口波特率(默认值:0):

1 = 300 波特、2 = 600 波特、3 = 1200 波特、4 = 2400 波特、5

= 4800 波特、6 = 9600 波特、7 = 19200 波特、8 = 38400 波特、9 = 57600 波特、10 = 76800 波特、11 = 115200 波特

参数和类型 数据类型 说明
PARITY IN UInt 端口奇偶校验(默认值:0):

1 = 无奇偶校验、2 = 偶校验、3 = 奇校验、4 = 传号校验、5 = 空号校验

DATABITS IN UInt 每个字符的位数(默认值:):

1 = 8 个数据位、2 = 7 个数据位

STOPBITS IN UInt 停止位(默认值:0):

1 = 1 个停止位、2 = 2 个停止位

FLOWCTRL IN UInt 流控制(默认值:0):

1 = 无流控制、2 = XON/XOFF、3 = 硬件 RTS 始终激活、4 = 硬件 RTS 切换

XONCHAR IN Char 指定用作 XON 字符的字符。 这通常是 DC1 字符 (11H)。 只有启用流控制时,才会评估该参数。(默认值:0)
XOFFCHAR IN Char 指定用作 XOFF 字符的字符。 这通常是 DC3 字符 (13H)。 只有启用流控制时,才会评估该参数。(默认值:0)
XWAITIME IN UInt 指定在接收 XOFF 字符后等待 XON 字符的时间,或者指定在启用

RTS 后等待 CTS 信号的时间(0 到 65535 ms)。 只有启用流控制时,才会评估该参数。 (默认值:2000)

DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个执行周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个执行周期时间
STATUS OUT Word 执行条件代码(默认值:0)

表格 12- 9 条件代码

STATUS (W#16#....) 说明
80A0 特定协议不存在。
80A1 特定波特率不存在。
80A2 特定奇偶校验选项不存在。
80A3 特定数据位数不存在。
80A4 特定停止位数不存在。
80A5 特定流控制类型不存在。
80A6 等待时间为 0 且流控制启用
80A7 XON 和 XOFF 是非法值(例如,同一个值)
SEND_CFG 指令

表格 12- 10 SEND_CFG(发送组态)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-55 "SEND_CFG_DB"( SEND_CFG 可用于动态组态 PtP 通信端口的串行传输参数。 执行 SEND_CFG 时,将放弃 CM 或 CB 内所有排队的消息。
REQ:=_bool_in_,
PORT:=_uint_in_,
RTSONDLY:=_uint_in_,
RTSOFFDLY:=_uint_in_,
BREAK:=_uint_in_,
IDLELINE:=_uint_in_,
DONE=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_);

1 STEP 7 会在插入指令时自动创建 DB。

可以在设备配置属性中设置端口的初始静态组态,或者仅使用默认值。 可以在用户程序中执行 SEND_CFG 指令来更改组态。

SEND_CFG 组态更改不会永久存储在 CPU 中。 CPU 从 RUN 模式切换到 STOP 模式和循环上电后将恢复设备配置中组态的参数。 请参见 组态传送(发送)参数 (页 634)。

表格 12- 11 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿激活组态更改。(默认值: False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常量”(System constants) 选项卡中分配。 (默认值:0)

RTSONDLY IN UInt 启用 RTS 后执行任何 Tx 数据传输前要等待的毫秒数。 只有启用硬件流控制时,该参数才有效。 有效范围是 0 - 65535 ms。值 0 表示禁用此功能。 (默认值:0)
RTSOFFDLY IN UInt 执行 Tx 数据传输后禁用 RTS 前要等待的毫秒数: 只有启用硬件流控制时,该参数才有效。 有效范围是 0 - 65535 ms。值 0 表示禁用此功能。 (默认值:0)
BREAK IN UInt 该参数指定在各消息开始时将发送指定位时间的中断。 最大值是

65535 个位时间,最多为 8 秒。 值 0 表示禁用该功能。 (默认值:12)

参数和类型 数据类型 说明
IDLELINE IN UInt 该参数指定在各消息开始前线路将保持空闲指定的位时间。 最大值是 65535 个位时间,最多为 8 秒。 值 0 表示禁用该功能。

(默认值:12)

DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个执行周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个执行周期时间
STATUS OUT Word 执行条件代码(默认值:0)

表格 12- 12 条件代码

STATUS (W#16#....) 说明
80B0 不允许传送中断组态。 请联系客户支持。
80B1 中断时间大于允许的最大值。
80B2 空闲时间大于允许的最大值。
RCV_CFG 指令

表格 12- 13 RCV_CFG(接收组态)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-56 "RCV_CFG_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, CONDITIONS:=_struct_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

RCV_CFG 可用于动态组态 PtP 通信端口的串行接收方参数。 该指令可组态表示接收消息开始和结束的条件。 执行 RCV_CFG

时,将放弃 CM 或 CB 内所有排队的消息。

1 STEP 7 会在插入指令时自动创建 DB。

可以在设备配置属性中设置通信端口的初始静态组态,或者索性使用默认值。 可以在用户程序中执行 RCV_CFG 指令来更改组态。

RCV_CFG 组态更改不会永久存储在 CPU 中。 CPU 从 RUN 模式切换到 STOP 模式和循环上电后将恢复设备配置中组态的参数。 有关详细信息,请参见 组态接收参数(页 634)。

表格 12- 14 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿激活组态更改。(默认值:False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。分配的 CM 或

CB 端口值为设备配置属性“硬件标识符”。端口符号名称在

PLC 变量表的“系统常量”(System constants) 选项卡中分配。 (默认值:0)

CONDITIONS IN CONDITIONS 如下文所述,条件数据结构指定消息开始和结束条件。
DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个扫描周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个扫描周期时间
STATUS OUT Word 执行条件代码(默认值:0)
RCV_PTP 指令的开始条件

RCV_PTP 指令使用 RCV_CFG 指令指定的组态来确定点对点通信消息的开始和结束。消息开始由开始条件确定。 消息开始可以由一个开始条件或开始条件的组合来确定。 如果指定多个开始条件,则只有满足所有条件后才能使消息开始。

有关消息开始条件的说明,请参见主题“组态接收参数 (页 635)”。

参数 CONDITIONS 数据类型结构的第 1 部分(开始条件)

表格 12- 15 开始条件的 CONDITIONS 结构

参数和类型 数据类型 说明
STARTCOND IN UInt 指定开始条件(默认值:1)

  • 01H - 开始字符
  • 02H - 任意字符
  • 04H - 线路中断
  • 08H - 线路空闲
  • 10H - 序列 1
  • 20H - 序列 2
  • 40H - 序列 3
  • 80H - 序列 4
IDLETIME IN UInt 线路空闲超时所需的位时间数。 (默认值:40)。 仅与线路空闲条件一起使用。 0 到 65535
STARTCHAR IN Byte 用于开始字符条件的开始字符。 (默认值: B#16#2)
STRSEQ1CTL IN Byte 针对每个字符执行的序列 1 忽略/比较控制: (默认值:

B#16#0)

它们是为开始序列中各字符启用的位。

  • 01H - 字符 1
  • 02H - 字符 2
  • 04H - 字符 3
  • 08H - 字符 4
  • 10H - 字符 5

禁用与某个字符关联的位意味着该序列位置中的任意字符均符合条件。

STRSEQ1 IN Char[5] 序列 1 开始字符(5 个字符)。 默认值: 0
STRSEQ2CTL IN Byte 针对每个字符执行的序列 2 忽略/比较控制。 (默认值:

B#16#0)

STRSEQ2 IN Char[5] 序列 2 开始字符(5 个字符)。 默认值: 0
STRSEQ3CTL IN Byte 针对每个字符执行的序列 3 忽略/比较控制。 默认值:

B#16#0

STRSEQ3 IN Char[5] 序列 3 开始字符(5 个字符)。 默认值: 0
参数和类型 数据类型 说明
STRSEQ4CTL IN Byte 针对每个字符执行的序列 4 忽略/比较控制。默认值:

B#16#0

STRSEQ4 IN Char[5] 序列 4 开始字符(5 个字符),默认值:0
示例

请注意以下所接收的十六进制编码消息: "“68 10 aa 68 bb 10 aa 16”以及下表中列出的已组态开始序列。 在成功接收到第一个 68H 字符时,开始评估开始序列。 在成功接收到第

四个字符(第二个 68H)时,开始条件 1 得到满足。 只要满足了开始条件,就会开始评估结束条件。

开始序列处理会因各种奇偶校验、成帧或字符间时间错误而终止。 由于不再满足开始条件,因而这些错误将导致不会有接收消息。

表格 12- 16 开始条件

开始条件 第一个字符 第一个字符 +1 第一个字符 +2 第一个字符 +3 第一个字符 +4
1 68H xx xx 68H xx
2 10H aaH xx xx xx
3 dcH aaH xx xx xx
4 e5H xx xx xx xx
RCV_PTP 指令的结束条件

消息结束由指定的结束条件确定。 消息结束由第一次出现的一个或多个已组态结束条件来确定。 主题“组态接收参数 (页 635)”中“消息结束条件”部分介绍了可以在 RCV_CFG 指令中组态的结束条件。

可以在设备配置的通信接口的属性中组态结束条件,或者通过 RCV_CFG 指令组态结束条件。 只要 CPU 从 STOP 模式切换到 RUN 模式,接收参数(开始条件和结束条件)就将恢复为设备配置设置。 如果 STEP 7 用户程序执行 RCV_CFG,则这些设置将更改为

RCV_CFG 的条件。

参数 CONDITIONS 数据类型结构的第 2 部分(结束条件)

表格 12- 17 结束条件的 CONDITIONS 结构

参数 参数类型 数据类型 说明
ENDCOND IN UInt 0 该参数指定消息结束条件:

  • 01H - 响应时间
  • 02H - 消息时间
  • 04H - 字符间隙
  • 08H - 最大长度
  • 10H - N + LEN + M
  • 20H - 序列
MAXLEN IN UInt 1 最大消息长度: 仅当选择最大长度结束条件时使用。 1 到 1024 个字节
N IN UInt 0 长度域在消息中的字节位置。 仅与 N + LEN + M

结束条件一起使用。 1 到 1022 个字节

LENGTHSIZE IN UInt 0 字节域的大小(1、2 或 4 个字节)。 仅与 N + LEN + M 结束条件一起使用。
LENGTHM IN UInt 0 指定跟在长度域后、不包含在长度域值内的字符数。 该参数仅与 N + LEN + M 结束条件一起使用。 0 到 255 个字节
RCVTIME IN UInt 200 指定接收第一个字符所需的等待时间。 如果在指定时间内没有成功接收到字符,接收操作将被终
止且包含错误。 该参数仅与响应时间条件一起使
用。 (0 到 65535 个位时间,最多 8 秒)
此参数不是消息结束条件,因为在接收到第一个
响应字符时评估即终止。 由于在预期有响应时却
接收不到响应,因此仅就其能够终止接收方操作
而言,它又是一个结束条件。 必须选择一个单独
的结束条件。
MSGTIME IN UInt 200 指定在接收到第一个字符后完成接收整条消息所需的等待时间。 只有选择了消息超时条件时,才会使用该参数。 (0 到 65535 毫秒)
参数 参数类型 数据类型 说明
CHARGAP IN UInt 指定字符间的位时间数。 如果字符间的位时间数
12 超出指定值,则结束条件得到满足。 该参数仅与
字符间隙条件一起使用。 (0 到 65535 个位时
间,最多 8 秒)
ENDSEQ1CTL IN Byte 针对每个字符执行的序列 1 忽略/比较控制:
B#16#0 它们是为结束序列中各字符启用的位。 字符 1 是
位 0,字符 2 是位 1,依此类推,字符 5 是位 4。
禁用与某个字符关联的位意味着该序列位置中的
任意字符均符合条件。
ENDSEQ1 IN Char[5] 0 序列 1 开始字符(5 个字符)

表格 12- 18 条件代码

STATUS (W#16#....) 说明
80C0 所选开始条件非法
80C1 所选结束条件非法;未选择结束条件
80C2 启用了接收中断,但不允许此操作。
80C3 启用了最大长度结束条件,最大长度是 0 或大于 1024。
80C4 启用了计算长度,但 N >= 1023。
80C5 启用了计算长度,但长度不是 1、2 或 4。
80C6 启用了计算长度,但 M 值大于 255。
80C7 启用了计算长度,但计算长度大于 1024。
80C8 启用了响应超时,但响应超时为零。
80C9 启用了字符间隙超时,但该字符间隙超时为零。
80CA 启用了线路空闲超时,但该线路空闲超时为零。
80CB 启用了结束序列,但所有字符均“不相关”。
80CC 启用了开始序列(4 个中的任何一个),但所有字符均“不相关”。
SEND_PTP 指令

表格 12- 19 SEND_PTP(发送点对点数据)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-57 "SEND_PTP_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, BUFFER:=_variant_in_, LENGTH:=_uint_in_, PTRCL:=_bool_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

SEND_PTP 用于启动数据传输,并将分配的缓冲区传送到通信接口。 在 CM 或 CB 块以指定波特率发送数据的同时,CPU 程序会继续执行。 仅一个发送操作可以在某一给定时间处于未决状态。 如果在 CM 或 CB 已经开始传送消息时执行第二个 SEND_PTP,CM

或 CB 将返回错误。

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 20 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该传送使能输入的上升沿激活所请求的传送。 这会启动将缓冲区数据传送到点对点通信接口。 (默认值: False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在 PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常

量”(System constants) 选项卡中分配。 (默认值:0)

BUFFER IN Variant 该参数指向传送缓冲区的起始位置。 (默认值:0) 注: 不支持布尔数据或布尔数组。
LENGTH IN UInt 传输的帧长度(字节)(默认值:0) 传输复杂结构时,始终使用长度 0。
PTRCL IN Bool 该参数选择普通点对点协议或 Siemens 提供的特定协议所在的缓冲区,这些协议在所连接的 CM 或 CB 中实施。 (默认值: False)

FALSE = 用户程序控制的点对点操作。 (仅限有效选项)

DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个扫描周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个扫描周期时间
STATUS OUT Word 执行条件代码(默认值:0)

传送操作进行期间,DONE 和 ERROR 输出均为 FALSE。 传送操作完成后,DONE 或

ERROR 输出将被设置为 TRUE 以显示传送操作的状态。 当 DONE 或 ERROR 为 TRUE

时,STATUS 输出有效。

如果通信接口接受传送数据,则该指令将返回状态值 16#7001。 如果 CM 或 CB 仍在忙于传送,则后续的 SEND_PTP 执行将返回 16#7002。 传送操作完成后,CM 或 CB 将返回传送操作状态 16#0000(如果未出错)。 后续执行 REQ 为低电平的 SEND_PTP 时, 将返回状态 16#7000(不忙)。

下图显示了输出值与 REQ 的关系。 假设定期调用该指令以检查传送过程的状态。 在下图中,假设每次扫描都调用该指令(用 STATUS 值表示)。

S7-1200 可编程控制器 通信处理器-58

下图显示通过 REQ 线路脉冲(持续一个扫描周期)启动传送操作时,DONE 和 STATUS

参数是如何仅在一个扫描周期内有效。

S7-1200 可编程控制器 通信处理器-59

下图显示了出错时 DONE、ERROR 和 STATUS 参数之间的关系。

S7-1200 可编程控制器 通信处理器-60

只有 SEND_PTP 再次使用相同的背景 DB 执行后,DONE、ERROR 和 STATUS 值才有效。

表格 12- 21 条件代码

STATUS (W#16#....) 说明
80D0 传送方激活期间发出新请求
80D1 由于在等待时间内没有 CTS 信号,传送中止
STATUS (W#16#....) 说明
80D2 由于没有来自 DCE 设备的 DSR,传送中止
80D3 由于队列溢出(传送 1024 个字节以上),传送中止
80D5 反向偏置信号(断线检测)
833A BUFFER 参数的 DB 不存在。
SEND_PTP 的 LENGTH 和 BUFFER 参数的交互作用

SEND_PTP 指令可以传送的最小数据单位是一个字节。 BUFFER 参数决定要传送的数据的大小。 BUFFER 参数不接受 Bool 数据类型或 Bool 数组。

可以将 LENGTH 参数始终设置为 0,从而确保 SEND_PTP 发送 BUFFER 参数表示的整个数据结构。 如果仅要传送 BUFFER 参数中的部分数据结构,则可对 LENGTH 进行以下设置:

表格 12- 22 LENGTH 和 BUFFER 参数

LENGTH BUFFER 说明
= 0 未使用 发送 BUFFER 参数中定义的全部数据。 当 LENGTH = 0 时,用户无须指定传送字节数。
> 0 基本数据类型 LENGTH 值必须包含此数据类型的字节计数。 例如,对于 Word 值,LENGTH 值必须为二。 对于 Dword 或 Real,LENGTH 值必须为四。 否则,不会传送任何数据并返回错误 8088H。
结构 LENGTH 值可以包含小于结构完整字节长度的字节数,在这种情况下,将仅发送 BUFFER 中的结构的前 LENGTH 个字节。 由于
结构的内部字节组织不总是确定不变的,所以可能得到无法预料
的结果。 在这种情况下,使用值为 0 的 LENGTH 来发送整个结
构。
数组 LENGTH 值必须包含小于数组完整字节长度的字节数,而且还必须为数据元素字节计数的倍数。 例如,对于 Word 数组,

LENGTH 参数值必须为二的倍数;对于 Real 数组,必须为四的倍数。 指定 LENGTH 后,将传送 LENGTH 字节中包含的相应数量的数组元素。 例如,如果 BUFFER 包含由 15 个 Dword 构成的数组(总共 60 个字节),LENGTH 指定为 20,则将传送数组

中的前五个 Dword。

LENGTH 值必须为数据元素字节数的倍数。 否则,STATUS = 8088H,ERROR = 1,且不进行任何传送。
LENGTH BUFFER 说明
String 参数 LENGTH 包含要传送的字符数。 只传送 String 中相应数量的字符。 而不会传送 String 的最大长度和实际长度的字节数。
RCV_PTP 指令

表格 12- 23 RCV_PTP(接收点对点)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-61 "RCV_PTP_DB"( RCV_PTP 用于检查 CM 或 CB 中已接收的消息。 如果有消息,则会将其从 CM 或 CB 传送到 CPU。 如果发生错误,则会返回相应的

STATUS 值。

EN_R:=_bool_in_,
PORT:=_uint_in_,
BUFFER:=_variant_in_,
NDR=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_,
LENGTH=>_uint_out_);

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 24 参数的数据类型

参数和类型 数据类型 说明
EN_R IN Bool 该输入为 TRUE 并且有消息时,会将消息从 CM 或 CB 传送到

BUFFER。 EN_R 为 FALSE 时,将检查 CM 或 CB 是否收到消息并更新 NDR、ERROR 和 STATUS 输出,但不会将消息传送到

BUFFER。 (默认值:0)

PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在 PORT 功能框连接的参数助手下拉列表中。分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常

量”(System constants) 选项卡中分配。 (默认值:0)

BUFFER IN Variant 该参数指向接收缓冲区的起始位置。 该缓冲区应该足够大,可以接收最大长度消息。

不支持布尔数据或布尔数组。 (默认值:0)

NDR OUT Bool 新数据就绪且操作无错完成后,保持为 TRUE 一个执行周期时间。
ERROR OUT Bool 操作已完成但出现错误后,保持为 TRUE 一个执行周期时间。
STATUS OUT Word 执行条件代码(默认值:0)
LENGTH OUT UInt 返回消息的长度(字节)(默认值:0)

NDR 或 ERROR 为 TRUE 时,STATUS 值有效。 STATUS 值提供 CM 或 CB 中的接收操作终止的原因。 它通常是正值,表示接收操作成功且接收过程正常终止。 如果

STATUS 值为负数(十六进制值的最高有效位置位),则表示接收操作因错误条件终止,例如,奇偶校验、组帧或超限错误。

每个 PtP 通信接口最多可缓冲 1024 字节。 这可以是一个大消息或几个较小的消息。 如果 CM 或 CB 中存在多个消息,则 RCV_PTP 指令将返回最早的可用消息。 随后执行

RCV_PTP 指令将返回下一个最早的可用消息。

表格 12- 25 条件代码

STATUS

(W#16#...)

说明
0000 没有提供缓冲区
80E0 因接收缓冲区已满,消息被终止
80E1 因出现奇偶校验错误,消息被终止
80E2 因组帧错误,消息被终止
80E3 因出现超限错误,消息被终止
80E4 因计算长度超出缓冲区大小,消息被终止
80E5 反向偏置信号(断线检测)
0094 因接收到最大字符长度,消息被终止
0095 因消息超时,消息被终止
0096 消息因字符间超时而终止
0097 消息因响应超时而终止
0098 因已满足“N+LEN+M”长度条件,消息被终止
0099 因已满足结束序列,消息被终止
833A BUFFER 参数的 DB 不存在。
RCV_RST 指令

表格 12- 26 RCV_RST(接收方复位)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-62 "RCV_RST_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

RCV_RST 可清空 CM 或 CB 中的接收缓冲区。

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 27 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 该使能输入出现上升沿时将激活接收方复位(默认值:False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在 PORT 功能框连接的参数助手下拉列表中。分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。端口符号名称在 PLC 变量表的“系统常

量”(System constants) 选项卡中分配。 (默认值:0)

DONE OUT Bool 在一个扫描周期内为 TRUE 时,表示上一个请求已完成且没有错误。
ERROR OUT Bool 为 TRUE 时,表示上一个请求已完成但有错误。 此外,该输出为

TRUE 时,STATUS 输出还会包含相关错误代码。

STATUS OUT Word 错误代码(默认值:0)
SGN_GET 指令

表格 12- 28 SGN_GET(获取 RS232 信号)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-63 "SGN_GET_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, NDR=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, DTR=>_bool_out_, DSR=>_bool_out_, RTS=>_bool_out_, CTS=>_bool_out_, DCD=>_bool_out_, RING=>_bool_out_);

SGN_GET 用于读取 RS232 通信信号的当前状态。

该功能仅对 RS232 CM 有效。

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 29 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿获取 RS232 信号状态值(默认值:False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在 PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常

量”(System constants) 选项卡中分配。

NDR OUT Bool 新数据就绪且操作无错误地完成时,在一个扫描周期内为 TRUE
ERROR OUT Bool 操作已完成但出现错误后,保持为 TRUE 一个扫描周期时间
STATUS OUT Word 执行条件代码(默认值:0)
DTR OUT Bool 数据终端就绪,模块就绪(输出)。 默认值: False
DSR OUT Bool 数据设备就绪,通信伙伴就绪(输入)。 默认值: False
RTS OUT Bool 请求发送,模块已做好发送准备(输出)。 默认值: False
CTS OUT Bool 允许发送,通信伙伴可以接收数据(输入)。 默认值: False
DCD OUT Bool 数据载波检测,接收信号电平(始终为 False,不支持)
RING OUT Bool 响铃指示器,来电指示(始终为 False,不支持)

表格 12- 30 条件代码

STATUS (W#16#....) 说明
80F0 CM 或 CB 是 RS485 且没有信号可用
SGN_SET 指令

表格 12- 31 SGN_SET(设置 RS232 信号)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-64 "SGN_SET_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, SIGNAL:=_byte_in_, RTS:=_bool_in_, DTR:=_bool_in_, DSR:=_bool_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

SGN_SET 用于设置 RS232 通信信号的状态。该功能仅对 RS232 CM 有效。

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 32 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿启动设置 RS232 信号的操作(默认值:

False)

PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在PORT 功能框连接的参数助手下拉列表中。分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。端口符号名称在 PLC 变量表的“系统常量”(System constants) 选项卡中分配。 (默认

值:0)

SIGNAL IN Byte 选择要设置的信号: (允许多个)。 默认值: 0

  • 01H = 设置 RTS
  • 02H = 设置 DTR
  • 04H = 设置 DSR
RTS IN Bool 请求发送,模块准备好将值发送到设备(真或假),默认值:

False

参数和类型 数据类型 说明
DTR IN Bool 数据终端就绪,模块准备好将值发送到设备(真或假)。 默认值: False
DSR IN Bool 数据设备就绪(仅适用于 DCE 型接口),不使用。
DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个执行周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个执行周期时间
STATUS OUT Word 执行条件代码(默认值:0)

表格 12- 33 条件代码

STATUS (W#16#....) 说明
80F0 CM 或 CB 是 RS485 且无法设置任何信号
80F1 因硬件流控制的原因而无法设置信号
80F2 因模块是 DTE 而无法设置 DSR
80F3 因模块是 DCE 而无法设置 DTR

组态通信端口

可以通过以下两种方式组态通信接口:

  • 使用 STEP 7 中的设备组态组态端口参数(波特率和奇偶校验)、发送参数和接收参数。 设备组态设置存储在 CPU 中。 在循环上电和从 RUN 模式切换到 STOP 模式后会应用这些设置。
  • 使用 PORT_CFG (页 613)、SEND_CFG (页 615) 和 RCV_CFG (页 616) 指令设置参数。 这些指令设置的端口设置在 CPU 处于 RUN 模式期间有效。 在切换到 STOP 模式或循环上电后,这些端口设置会恢复为设备组态设置。

组态硬件设备 (页 121)之后,通过选择机架上的某个 CM 或 CB(如果已组态)来组态通信接口的参数。

S7-1200 可编程控制器 通信处理器-65 巡视窗口中的“属性”(Properties) 选项卡显示所选 CM 或 CB 的参数。 选择“端口组态”(Port

configuration) 以编辑以下参数:

    • S7-1200 可编程控制器 通信处理器-66 波特率
    • 奇偶校验
    • 每个字符的数据位数
    • 停止位的数目
    • 流控制(仅限 RS232)
    • 等待时间

对于 CM 1241 RS232 和 RS485 以及 CB RS485(除仅 CM 1241 RS232 支持的流控制

外),无论是组态 RS232 或 RS485 通信模块还是 RS485 通信板,端口组态参数都是相同的。 但是,参数值可以不同。

对于 CM 1241 RS422/485,将按不同的方式执行端口组态,如下图所示。 CM 1241

RS422/485 模块的 422 模式还支持软件流控制。

S7-1200 可编程控制器 通信处理器-67 选择“端口组态”(Port configuration) 以编辑以下

RS422/485 参数:

  • “工作模式”(Operating mode):
    • 全双工 (RS422) 四线制模式(点对点连接)
    • 全双工 (RS422) 四线制模式(多点主站)
    • 全双工 (RS422) 四线制模式(多点从站)
    • 半双工 (RS485) 两线制模式
  • “接收线路初始状态”(Receive line initial state):
    • 正向偏置(信号 R(A) 0V、信号 R(B) 5V) STEP 7 用户程序还可通过 PORT_CFG 指令 (页 613)组态端口或更改现有组态。

说明

在用户程序中通过 PORT_CFG 指令设置的参数值会覆盖设备组态中设定的端口组态设置。 请注意,发生掉电时,S7-1200 不会保留通过 PORT_CFG 指令设置的参数。

参数 定义
波特率 波特率的默认值为 9.6 Kbps。 有效选项有: 300 波特、600 波特、1.2 Kb、2.4 Kb、4.8 Kb、9.6 Kb、19.2 Kb、38.4 Kb、57.6 Kb、76.8 Kb 和 115.2

Kb。

奇偶校验 奇偶校验的默认值是无奇偶校验。 有效选项有: 无奇偶校验、偶校验、奇校验、传号(奇偶校验位始终设为 1)和空号(奇偶校验位始终设为 0)。
每个字符的数据位数 字符中的数据位数。 有效选择为 7 或 8。
停止位的数目 停止位的数目可以是 1 或 2。 默认值是 1。
流控制 对于 RS232 通信模块,可以选择硬件或软件流控制,如“管理流控制 (页 632)”

部分所述。 如果选择硬件流控制,则可以选择是 RTS 信号始终激活还是切换

RTS。 如果选择软件流控制,则可以定义 XON 和 XOFF 字符。

RS485 通信接口不支持流控制。 CM 1241 RS422/485 模块的 422 模式支持软件流控制。

等待时间 等待时间是指 CM 或 CB 在断言 RTS 后等待接收 CTS 的时间,或者在接收

XOFF 后等待接收 XON 的时间,具体取决于流控制类型。 如果在通信接口收到预期的 CTS 或 XON 之前超过了等待时间,CM 或 CB 将中止传送操作并向

用户程序返回错误。 指定等待时间,以毫秒表示。 范围是 0 到 65535 毫秒。

工作模式 选择工作模式 RS422 或 RS485 以及网络组态。
接收线路初始状态 选择偏置选项。 有效值为无、正向偏置和反向偏置。 反向偏置用于检测电缆断线。
        1. 管理流控制

流控制是指为了不丢失数据而用来平衡数据发送和接收的一种机制。 流控制可确保传送设备发送的信息量不会超出接收设备所能处理的信息量。 流控制可以通过硬件或软件来实现。 RS232 CM 支持硬件及软件流控制。 RS485 CM 和 CB 不支持流控制。 CM 1241 RS422/485 模块的 422 模式支持软件流控制。 可在组态端口 (页 630)时或使用PORT_CFG 指令 (页 613)指定流控制类型。

硬件流控制通过请求发送 (RTS, Request To Send) 和允许发送 (CTS, Clear To Send) 通信信号来实现。 对于 RS232 CM,RTS 信号从引脚 7 输出,而 CTS 信号通过引脚 8 接收。RS232 CM 是 DTE(Data Terminal Equipment,数据终端设备)设备,其将 RTS 断言为输出并将 CTS 作为输入来监视。

硬件流控制: RTS 切换

如果为 RS232 CM 启用 RTS 切换的硬件流控制,则模块会将 RTS 信号设置为激活状态以发送数据。 它还会监视 CTS 信号以确定接收设备是否能接收数据。 CTS 信号激活后,只要 CTS 信号保持激活状态,模块便可发送数据。 如果 CTS 信号变为非激活状态,则传送必须停止。

CTS 信号变为激活状态时,传送会继续执行。 如果 CTS 信号在组态的等待时间内未激活,则模块会中止传送并向用户程序返回错误。 在端口组态 (页 630)中指定等待时间。

对于需要“传送已激活”信号的设备,适合使用 RTS 切换流控制。 例如,无线调制解调器使用 RTS 作为“键”信号来激励无线发送器。 RTS 切换流控制对于标准电话调制解调器不起作用。 对电话调制解调器使用“RTS 始终激活”选项。

硬件流控制: RTS 始终激活

在“RTS 始终激活”模式下,CM 1241 默认情况下将 RTS 设置为激活状态。 设备(如电话调制解调器等)监视来自 CM 的 RTS 信号,并将该信号用作允许发送信号。 调制解调器仅在 RTS 处于激活状态时才向 CM 传送数据,即,电话调制解调器在见到激活的 CTS 信号后发送数据。如果 RTS 处于非激活状态,电话调制解调器不向 CM 传送数据。

要使调制解调器随时都能向 CM 发送数据,请组态“RTS 始终激活”硬件流控制。 CM 因此会将 RTS 信号设置为始终激活。 即使模块无法接受字符,CM 也不会将 RTS 设置为非激活状态。 传送设备必须确保不会使 CM 的接收缓冲区超负荷运行。

利用数据终端就绪 (DTR) 和数据设备就绪 (DSR) 信号

对于这两种硬件流控制类型的任何一种,CM 都会将 DTR 设置为激活状态。 只有当 DSR 信号变为激活状态时,模块才会进行传送。 仅在发送操作开始时评估 DSR 的状态。 如果 DSR 在传送操作开始后变为非激活状态,将不能暂停传送操作。

软件流控制

软件流控制使用消息中的特殊字符来实现流控制。 将组态表示 XON 和 XOFF 的十六进制字符。

XOFF 指示传送必须停止。 XON 指示传送可以继续。 XOFF 和 XON 不得是相同的字符。

传送设备从接收设备收到 XOFF 字符时,将停止传送。 传送设备收到 XON 字符时,传送又继续进行。 如果 CM 在通过端口组态 (页 630)指定的等待时间内没有收到 XON 字符,它将中止传送并向用户程序返回错误。

软件流控制需要全双工通信,因为在传送过程中接收伙伴必须能够将 XOFF 发送到传送伙伴。 软件流控制只能用于仅包含 ASCII 字符的消息。 二进制协议无法使用软件流控制。

组态传送(发送)和接收参数

在 CPU 可进行 PtP 通信前,必须组态传送(或发送)消息和接收消息的参数。 这些参数决定了在向目标设备传送消息或从目标设备接收消息时的通信工作方式。

组态传送(发送)参数

S7-1200 可编程控制器 通信处理器-68 在设备组态中,可以通过指定所选接口的“已传送消息的组

态”(Configuration of transmitted

message) 属性,来组态通信接口传送数据的方式。

还可以使用 SEND_CFG (页 615) 指令,通过用户程序动态组态或更改传送消息参数。说明

在用户程序中通过 SEND_CFG 指令设置的参数值会覆盖该端口组态设置。 请注意,发生掉电时,CPU 不会保留通过 SEND_CFG 指令设置的参数。

参数 定义
RTS 接通延时 (RTS On delay) 指定在 RTS 激活后传送启动前需等待的时间。 范围是 0 到 65535 ms,默认值为 0。仅当 端口组态 (页 630)指定的是硬件流控制时,该参数才有效。 在经过

RTS 接通延迟时间后才会评估 CTS。

该参数仅适用于 RS232 模块。

RTS 关断延时 (RTS Off delay) 指定传送完成后 RTS 禁用前需等待的时间。 范围是 0 到 65535 ms,默认值为

0。仅当 端口组态 (页 630)指定的是硬件流控制时,该参数才有效。

该参数仅适用于 RS232 模块。

参数 定义
在消息开始时发送中断 指定在每条消息开始时,在 RTS 接通延时(如果已组态)已到且 CTS 已激活
(Send break at message start) 的情况下先发送中断。

用户指定多少个位的时间构成一个中断,线路在中断期间保持空号状态。 默认

中断期间的位时间数 值为 12,最大值为 65535,即最长 8 秒的限制。
(Number of bit times in a

break)

发送中断后线路空闲信号 指定在消息开始前发送线路空闲信号。 如果组态了中断,则将在中断后发送。
(Send idle line after a break)

中断后线路空闲 (Idle line after a break)

“中断后线路空闲”(Idle line after a break) 参数指定多少个位时间构成一次线路空闲,线路在空闲期间保持传号状态。 默认值为 12,最大值为 65535,即最长8 秒的限制。
组态接收参数

S7-1200 可编程控制器 通信处理器-69 通过设备组态,可以组态通信接口接收数据以及识别消息开始和结束的方式。 在所选接口的接收消息组态中指定以上参数。

还可以在用户程序中使用 RCV_CFG 指令 (页 616)来动态组态或更改接收消息参数。说明

在用户程序中通过 RCV_CFG 指令设置的参数值会覆盖该端口组态设置。 请注意,发生掉电时,CPU 不会保留通过 RCV_CFG 指令设置的参数。

消息开始条件

用户可以决定通信接口识别消息开始的方式。 在满足所组态的结束条件之前,开始字符以及组成消息的字符会一直进入接收缓冲区。

可以指定多个开始条件。 如果指定多个开始条件,则只有在满足所有开始条件后才认为消息开始。 例如,如果用户组态了线路空闲时间和特定开始字符,CM 或 CB 将首先查找要满足的线路空闲时间要求,然后 CM 将查找指定的开始字符。 如果收到其它某个字符而不是指定的开始字符,CM 或 CB 将通过再次查找线路空闲时间来重新启动消息开始条件搜索。

参数 定义
以任意字符开始 “任意字符”条件指定,成功接收任何字符都将表示消息开始。 该字符是消息中的第一个字符。
线路中断 “线路中断”条件指定在接收中断字符后开始消息接收操作。
线路空闲 “线路空闲”条件指定在接收线路空闲或平静了指定位时间后开始消息接收操作。 一旦出现该条件,即启动消息接收。

S7-1200 可编程控制器 通信处理器-70 S7-1200 可编程控制器 通信处理器-71 S7-1200 可编程控制器 通信处理器-72

ཱ ཱ ི

① 字符

② 重启线路空闲定时器

③ 检测到线路空闲并启动消息接收操作

特殊条件:

通过单个字符识别消息开始

指定通过特殊字符指示消息开始。 然后,该字符便成为消息中的第一个字符。在该特定字符前接收到的任何字符都将被丢弃。 默认字符是 STX。
特殊条件:

通过字符序列识别消息开 始 (Recognize message start with a character sequence)

指定通过最多四个组态序列中的一个特殊字符序列来指示消息开始。 可以为每个序列最多指定 5 个字符。 对于每个字符位置,可以指定一个特定的十六进制字符,或者指定在序列匹配时忽略该字符(通配符字符)。 字符序列中最后一个特定字符终止该开始条件序列。

程序根据组态的开始条件对进入序列进行评估,直到满足开始条件为止。 只要满足了开始序列,就会开始评估结束条件。

最多可组态四个特定字符序列。 如果几个不同的字符序列都指示消息开始,则使用多序列开始条件。 如果与其中一个字符序列相匹配,消息就会开始。

检查开始条件的顺序是:

          • 线路空闲
          • 线路中断
          • 字符或字符序列

检查多个开始条件时,如果有一个条件没有满足,则 CM 或 CB 将从第一个所需的条件开始重新启动检查。 CM 或 CB 确定已满足启动条件后,将开始评估结束条件。

组态示例 - 消息在两个字符序列出现一个时开始

请注意以下消息开始条件组态:

S7-1200 可编程控制器 通信处理器-73 S7-1200 可编程控制器 通信处理器-74

S7-1200 可编程控制器 通信处理器-75

对于该组态,只要出现其中一个序列,即会满足开始条件:

  • 接到一个由五个字符构成的序列,且其第一个字符是 0x6A 而第五个字符是 0x1C

时。 对于该组态,位置 2、3 和 4 的字符可以是任意字符。 在接到第五个字符后,将开始评估结束条件。

  • 接到两个连续的 0x6A 字符(前面为任意字符)时。 在这种情况下,会在接到第二个

0x6A 后开始评估结束条件(3 个字符)。 第一个 0x6A 前面的字符包含在开始条件中。

满足该开始条件的实例序列有:

  • <任意字符> 6A 6A
  • 6A 12 14 18 1C
  • 6A 44 A5 D2 1C
消息结束条件

用户还可以组态通信接口识别消息结束的方式。 可以组态多个消息结束条件。 如果出现组态条件中的任何一个,消息就会结束。

例如,可以采用消息超时 300 ms、字符间超时 40 个位的时间以及最大长度 50 个字节作为消息结束的结束条件。 如果接收消息的时间超过 300 ms、任意两个字符间的间隔超过

40 个位的时间或接收到 50 个字节,消息即会结束。

参数 定义
通过消息超时识别消息结束 (Recognize message end by message timeout) 经过了组态的消息结束等待时间后,视为消息结束。 消息超时时间从满足开始条件开始计算。 默认值是 200 ms,有效范围是 0 到 65535 ms。

S7-1200 可编程控制器 通信处理器-76 S7-1200 可编程控制器 通信处理器-77

ཱ ི

① 接收的字符

② 满足消息开始条件: 消息定时器启动

③ 消息定时器时间已到并终止消息

通过响应超时识别消息结束 (Recognize message end by response timeout) 如果在接收到有效的开始序列之前超过了组态的响应等待时间,视为消息结

束。 响应超时时间从传送结束和 CM 或 CB 开始接收操作时开始计算。 默认响应超时时间为 200 ms,取值范围是 0 到 65535 ms。如果在响应时间段RCVTIME 内没有接收到字符,将向相应的 RCV_PTP 指令返回错误。 响应超时不定义具体结束条件。 它仅指定必须在指定时间内成功接收字符。 用户必须另组态一个结束条件来指示实际的消息结束。

཰ ཱ

5&97,0(

S7-1200 可编程控制器 通信处理器-78

① 传送的字符

② 接收的字符

③ 必须在该时间之前成功接收到第一个字符。

参数 定义
通过字符间隙识别消息结 经过了组态的消息中两个连续字符间的最大超时后,视为消息结束。 字符间隙的默认值是 12 个位的时间,最大值是 65535 个位的时间,即最长 8 秒。

S7-1200 可编程控制器 通信处理器-79 S7-1200 可编程控制器 通信处理器-80 S7-1200 可编程控制器 通信处理器-81

ཱ ཱ ི

① 接收的字符

② 重启字符间定时器

③ 字符间定时器时间已到并终止消息。

束 (Recognize message
end by inter-character
gap)
通过最大长度识别消息结 在接收到组态的最大字符数后,视为消息结束。 最大长度的有效范围是 1 到
束 (Recognize message 1023。
end by max length) 使用该条件可以防止消息缓冲区超负荷运行错误。 如果将该结束条件与超时结
束条件结合使用,在出现超时条件时,即使未达到最大长度也会提供所有有效
的已接收字符。 仅当最大长度已知时,该条件才支持长度可变的协议。
从消息读取消息长度(Read message length from message) 消息本身指定消息长度。 在接收到指定长度的消息后,视为消息结束。 以下说明了用于指定和解释消息长度的方法。
通过字符识别消息结束(Recognize message end with a character) 在接收到指定的字符后,视为消息结束。
通过字符序列识别消息结 在接收到指定的字符序列后,视为消息结束。 可以指定最多由 5 个字符组成的
束 (Recognize message 序列。 对于每个字符位置,可以指定一个具体的十六进制字符,或者指定在序
end with a character 列匹配时忽略该字符。
sequence) 结束条件不包括被忽略的前导字符。 结束条件包括被忽略的尾随字符。
组态示例 - 出现字符序列时结束消息

请注意以下消息结束条件组态:

S7-1200 可编程控制器 通信处理器-82

在这种情况下,在接收到两个连续的 0x7A 字符(后跟任意两个字符)时,即满足结束条件。 0x7A 0x7A 序列前面的字符不是结束字符序列的组成部分。 终止结束字符序列时需要跟在 0x7A 0x7A 序列后面的两个字符。 字符位置 4 和 5 中接收的值不相关,但必须接收它们才能满足结束条件。

在消息中指定消息长度

选择在消息中包括消息长度这一特殊条件时,必须提供三个用于定义消息长度相关信息的参数。

实际消息结构会因所用的协议而变化。 三个参数如下所示:

  • n: 消息中出现长度说明符的字符位置(从 1 开始)
  • 长度大小: 长度说明符的字节数(1、2 或 4)
  • 长度 m: 跟在长度说明符后、不包括在长度计数范围内的字符数

结束字符可不连续。 “长度 m”值可用于指定大小不包含在长度字段中的校验和字段的长度。

这些字段位于设备属性的接收消息组态中:

S7-1200 可编程控制器 通信处理器-83

实例 1: 假设某条消息是根据以下协议构造的:

STX Len (n) 长度计数包括字符 3 到 14
ADR PKE INDEX PWD STW HSW BCC
1 2 3 4 5 6 7 8 9 10 11 12 13 14
STX 0x0C xx xxxx xxxx xxxx xxxx xxxx xx

请按以下说明组态该消息的接收消息长度参数:

  • n = 2(消息长度从字节 2 开始。)
  • 长度大小 = 1(消息长度在一个字节中定义。)
  • 长度 m = 0(长度说明符后没有不包括在长度计数中的字符。 长度说明符后有 12 个字符。)

在本例中,从 3 到 14(包括 3 和 14)的字符都是 Len (n) 计数的字符。实例 2: 假设另一条消息是根据以下协议构造的:

SD1 Len (n) Len (n) SD2 长度计数包括字符 5 到 10 FCS ED
DA SA FA 数据单元 = 3 个字节
1 2 3 4 5 6 7 8 9 10 11 12
xx 0x06 0x06 xx xx xx xx xx xx xx xx xx

请按以下说明组态该消息的接收消息长度参数:

  • n = 3(消息长度从字节 3 开始。)
  • 长度大小 = 1(消息长度在一个字节中定义。)
  • 长度 m = 3(长度说明符后有 3 个字符不包括在长度计数中。 在本实例的协议中,字符 SD2、FCS 和 ED 不包括在长度计数中。 其它 6 个字符均包括在长度计数中;因此,长度说明符后总共有 9 个字符。)

在本例中,从 5 到 10(包括 5 和 10)的字符都是 Len (n) 计数的字符。

设计 PtP 通信

STEP 7 提供了一些扩展指令,使得用户程序能够使用程序中设计和指定的协议来执行点对点通信。 这些指令可以分为以下两类:

  • 组态指令
  • 通信指令
组态指令

必须先组态通信接口端口以及用于发送数据和接收数据的参数,然后才能通过用户程序执行 PtP 通信。

可以通过设备配置或用户程序中的如下指令,对各个 CM 或 CB 执行端口组态和消息组态:

  • PORT_CFG (页 613)
  • SEND_CFG (页 615)
  • RCV_CFG (页 616)
通信指令

PtP 通信指令使用户程序能够与通信接口交换消息。 有关使用这些指令传送数据的信息,请参见 数据一致性 (页 154)部分。

所有 PtP 功能都是异步运行的。 用户程序可以使用轮询架构来确定传送和接收的状态。

SEND_PTP 和 RCV_PTP 可以同时执行。 通信模块和通信板根据需要对传送和接收消息进行缓冲,最大缓冲区大小为 1024 字节。

CM 和 CB 与实际的点对点设备交换消息。 消息协议位于一个缓冲区中,该缓冲区与特定通信端口交换信息。 缓冲区和端口是发送和接收指令的参数:

  • SEND_PTP (页 622)
  • RCV_PTP (页 625)

以下指令可用于复位接收缓冲区,以及获取和设置特定的 RS232 信号:

  • RCV_RST (页 627)
  • SGN_GET (页 628)
  • SGN_SET (页 629)
轮询架构

必须循环/周期性调用 S7-1200 点对点指令以检查收到的消息。 发送轮训可在发送结束时刻即告知用户程序。

轮询架构: 主站

主站的典型轮询顺序如下:

          1. SEND_PTP 指令启动到 CM 或 CB 的传送。
          2. 后续扫描期间会执行 SEND_PTP 指令以轮询传送完成状态。
          3. 当 SEND_PTP 指令指示传送完成时,用户代码可以准备接收响应。
          4. RCV_PTP 指令反复执行以检查响应。 在 CM 或 CB 收到响应消息后,RCV_PTP 指令将响应复制到 CPU 并指示已接收到新数据。
          5. 用户程序随即可处理响应。
          6. 转到第 1 步并重复该循环。
轮询架构: 从站

从站的典型轮询顺序如下:

  1. 每次扫描用户程序都会执行 RCV_PTP 指令。
  2. CM 或 CB 收到请求后,RCV_PTP 指令将指示新数据准备就绪并将请求复制到 CPU

中。

  1. 用户程序随即处理请求并生成响应。
  2. 使用 SEND_PTP 指令将该响应往回发送给主站。
  3. 反复执行 SEND_PTP 以确保执行传送。
  4. 转到第 1 步并重复该循环。

从站在等待响应期间,必须尽量频繁地调用 RCV_PTP,以便能够在主站超时之前接到来自主站的传送。 要完成该任务,用户程序可以从循环 OB 调用 RCV_PTP,且循环时间应足够大,以便能在超时时间用完之前接到来自主站的传送。 如果将 OB 循环时间设置为可在主站的超时时间内执行该指令两次,则用户程序便可接到主站的传送,而不会错过任何传送。

示例: 点对点通信

在此示例中,S7-1200 CPU 通过 CM 1241 RS232 模块与装有终端仿真器的 PC 通信。此示例中的点对点组态和 STEP 7 程序说明了 CPU 如何从 PC 接收消息和将该消息回送到 PC。

. . .

S7-1200 可编程控制器 通信处理器-84 S7-1200 可编程控制器 通信处理器-85 S7-1200 可编程控制器 通信处理器-86 S7-1200 可编程控制器 通信处理器-87 S7-1200 可编程控制器 通信处理器-88 S7-1200 可编程控制器 通信处理器-89 S7-1200 可编程控制器 通信处理器-90 S7-1200 可编程控制器 通信处理器-91 S7-1200 可编程控制器 通信处理器-92 S7-1200 可编程控制器 通信处理器-93

必须将 CM 1241 RS232 模块的通信接口连接到 PC 的 RS232 接口(通常为 COM1)。由于这两个端口都是数据终端设备 (DTE),所以在连接这两个端口时必须交换接收和发送引脚(引脚 2 和 3),可通过以下任何一种方法实现交换:

        • 使用 NULL 调制解调器适配器和标准 RS232 电缆交换引脚 2 和 3。
        • 使用已交换引脚 2 和 3 的 NULL 调制解调器电缆。 通常可以将电缆两端是否带有两个 9 针 D 型母头连接器作为识别 NULL 调制解调器电缆的依据。
组态通信模块

可通过 STEP 7 中的设备组态或通过用户程序指令来组态 CM 1241。 此示例使用设备组态方法。

          • 端口组态: 在“设备组态”(Device configuration) 中单击 CM 模块的通信端口,然后如下所示组态该端口:

S7-1200 可编程控制器 通信处理器-94

说明

“操作模式”和“接收线路初始状态”的组态设置,只适用于 CM 1241 (RS422/RS485) 模块。 其它 CM 1241 模块没有这些端口组态设置。 请参见组态 RS422 和 RS485

(页 648)

          • 传送消息组态: 接受传送消息组态的默认值。 在消息开始时将不发送中断信号。
          • 接收消息开始组态: 将 CM 1241 组态为在通信线路处于非激活状态至少 50 个位时间(在 9600 波特时约为 5 毫秒 = 50 * 1/9600)时开始接收消息:

S7-1200 可编程控制器 通信处理器-95

接收消息结束组态: 将 CM 1241 组态为在最多接收到 100 个字节或换行字符(十进制数 10 或十六进制数 A)时结束消息。 结束序列最多允许序列中具有五个结束字符。 该序列中的第五个字符是换行字符。 前面四个结束序列字符均是“不相关”字符或不选择的字符。 CM 1241 不评估“不相关”字符,但会在零或更多“不相关”字符后面寻找指示消息结束的换行字符。

S7-1200 可编程控制器 通信处理器-96 S7-1200 可编程控制器 通信处理器-97

组态 RS422 和 RS485

组态 RS422

对于 RS422 模式,有三种工作模式,具体取决于网络组态。 根据网络中的设备选择其中一种工作模式。 接收线路初始状态的不同选择参考了如下所示的详细情况。

  • 全双工 (RS422) 四线制模式(点对点连接): 在网络中有两台设备时选择此选项。在接收线路初始状态中:
    • 在提供偏置和终端时(第 3 种情况),选择无。
    • 选择正向偏置以使用内部偏置和终端(第 2 种情况)。
    • 选择反向偏置以使用内部偏置和终端,并为两台设备启用电缆断线检测(第 1 种情况)。
  • 全双工 (RS422) 四线制模式(多点主站): 当网络具有一个主站和多个从站时,为主站选择此选项。 在接收线路初始状态中:
    • 在提供偏置和终端时(第 3 种情况),选择无。
    • 选择正向偏置以使用内部偏置和终端(第 2 种情况)。
    • 在此模式下,不能进行电缆断线检测。
  • 全双工 (RS422) 四线制模式(多点从站): 当网络具有一个主站和多个从站时,为所有从站选择此选项。 在接收线路初始状态中:
    • 在提供偏置和终端时(第 3 种情况),选择无。
    • 选择正向偏置以使用内部偏置和终端(第 2 种情况)。
    • 选择反向偏置以使用内部偏置和终端,并为从站启用电缆断线检测(第 1 种情况)。
第 1 种情况: RS422,带电缆断线检测
      • 工作模式:RS422
      • 接收线路初始状态: 反向偏置(有偏置,R(A) > R(B) > 0V)
      • 电缆断线: 启用电缆断线检测(发送器始终处于激活状态)

S7-1200 可编程控制器 通信处理器-98

0 9

 

2

9

330 ˖

㓎⡙

3 5(%) +

8 5($)

5

9

0 9

5(%) +

5($)

5 9

5

3

5 9

2

 

⨿我俱䰘䙞杤 330 ʼn

2

8

第 2 种情况: RS422,不带电缆断线检测,正向偏置
        • 工作模式:RS422
        • 接收线路初始状态: 正向偏置(有偏置,R(B) > R(A) > 0V)
        • 电缆断线: 无电缆断线检测(发送器仅在发送时才启用)

S7-1200 可编程控制器 通信处理器-99

5 9

5(%) +

5($)

 

5 9

5(%) +

5($)

0 9

0 9

第 3 种情况: RS422: 不带电缆断线检测,无偏置
        • 工作模式:RS422
        • 接收线路初始状态: 无偏置
        • 电缆断线: 无电缆断线检测(发送器仅在发送时才启用)

偏置和终端由用户在网络末端节点处添加。

 

㲌⽡ⅸ傗

ⳋ㍠䰘/⍟慉儮

2

9

5 9

3

5(%) +

8

5($)

0 9

㜉ⅸ傗

3 5(%) +

S7-1200 可编程控制器 通信处理器-100

8

5($)

㠶⏊➑ lῷ䰂

2

9

5 9

5(%) +3

5($) 8

0 9

㠶⏊➑ 2ῷ䰂

㲌⽡ⅸ傗

9

2

组态 RS485

对于 RS485 模式,只有一种工作模式。 接收线路初始状态的不同选择参考了如下所示的详细情况。

  • 半双工 (RS485) 两线制模式。 在接收线路初始状态中:
    • 在提供偏置和终端时(第 5 种情况),选择无。
    • 选择正向偏置以使用内部偏置和终端(第 4 种情况)。
第 4 种情况:RS485: 正向偏置
      • 工作模式:RS485
      • 接收线路初始状态: 正向偏置(有偏置,R(B) > R(A) > 0V)

 

5 9

5(%) +

5($)

0 9

0 9

5(%) +

5($)

5 9

第 5 种情况:RS485: 无偏置(外部偏置)
      • 工作模式:RS485
      • 接收线路初始状态: 无偏置(需要外部偏置)

 

5(%) +

5($)

5(%) +

5($)

编写 STEP 7 程序

此示例程序使用全局数据块作为通信缓冲区,使用 RCV_PTP 指令 (页 625)从终端仿真器接收数据,使用 SEND_PTP 指令 (页 622)向终端仿真器回送缓冲数据。 要对该示例编程,需要添加数据块组态和程序 OB1,如下所述。

全局数据块“Comm_Buffer”: 创建一个全局数据块 (DB) 并将其命名为“Comm_Buffer”。在该数据块中创建一个名为“buffer”,数据类型为“字节数组 [0 .. 99]”的值。

程序段 1: 只要 SEND_PTP 未激活,就启用 RCV_PTP 指令。 在程序段 4 中,

MW20.0 中的 Tag_8 在发送操作完成时进行指示,因此是在通信模块相应地准备好接收消息时进行指示。

S7-1200 可编程控制器 通信处理器-101

程序段 2: 使用由 RCV_PTP 指令设置的 NDR 值(M0.0 中的 Tag_1)来复制接收到的字节数,并使一个标记(M20.0 中的 Tag_8)置位以触发 SEND_PTP 指令。

S7-1200 可编程控制器 通信处理器-102

程序段 3: M20.0 标记置位时启用 SEND_PTP 指令。 同时还使用此标记将 REQ 输入设置为 TRUE 一个扫描周期时间。 REQ 输入会通知 SEND_PTP 指令要传送新请求。

REQ 输入必须仅在 SEND_PTP 的一个执行周期内设置为 TRUE。 每个扫描周期都会执行 SEND_PTP 指令,直到传送操作完成。 CM 1241 传送完消息的最后一个字节时,传

送操作完成。传送操作完成后,DONE 输出(M10.0 中的 Tag_5)将被置位为 TRUE 并持续 SEND_PTP 的一个执行周期。

S7-1200 可编程控制器 通信处理器-103

程序段 4: 监视 SEND_PTP 的 DONE 输出并在传送操作完成时复位传送标记(M20.0 中的 Tag_8)。 传送标记复位后,程序段 1 中的 RCV_PTP 指令可以接收下一条消息。

S7-1200 可编程控制器 通信处理器-104

组态终端仿真器

必须设置终端仿真器以支持此示例程序。 几乎可以在 PC 上使用任何终端仿真器,例如,超级终端。 确定终端仿真器处于断开模式后,如下所述编辑各设置:

  1. 将终端仿真器设置为使用 PC 上的 RS232 端口(通常为 COM1)。
  2. 将端口组态为 9600 波特、8 个数据位、无奇偶校验(无)、1 个停止位和无流控制。
  3. 更改终端仿真器设置使其仿真 ANSI 终端。
  4. 组态终端仿真器 ASCII 设置,使其在每行后(用户按下 Enter 键后)发送换行信号。
  5. 本地回送字符,以便终端仿真器显示输入的内容。
运行示例程序

要运行示例程序,请执行以下步骤:

  1. 将 STEP 7 程序下载到 CPU 并确保其处于 RUN 模式。
  2. 单击终端仿真器上的“连接”(connect) 按钮以应用组态更改并启动与 CM 1241 的终端会话。
  3. 在 PC 中键入字符并按 Enter 键。

终端仿真器会将输入的字符发送到 CM 1241 和 CPU。 然后,CPU 程序将这些字符回送到终端仿真器。

12.4 通用串行接口 (USS) 通信

USS 指令可控制支持通用串行接口 (USS) 的电机驱动器的运行。 可以使用 USS 指令通过与 CM 1241 RS485 通信模块或 CB 1241 RS485 通信板的 RS485 连接与多个驱动器通信。 一个 S7-1200 CPU 中最多可安装三个 CM 1241 RS422/RS485 模块和一个 CB 1241 RS485 板。 每个 RS485 端口最多操作十六台驱动器。

USS 协议使用主从网络通过串行总线进行通信。主站使用地址参数向所选从站发送消 息。 如果未收到传送请求,从站本身不会执行传送操作。 各从站之间无法进行直接消息传送。 USS 通信以半双工模式执行。 以下 USS 图示显示了一个驱动器应用示例的网络图。

#- l24l 23422/23485

㭊⢀

37—l200 #05 #05

殚 ⏑➑ 1 2 3 4 5

S7-1200 可编程控制器 通信处理器-105

533

偺 倅 l

殚 ⏑➑ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

533

偺 倅 2

使用 USS 协议的要求

四条 USS 指令使用 1 个 FB 和 3 个 FC 来支持 USS 协议。 一个 USS 网络使用一个USS_PORT 背景数据块 (DB)。 USS_PORT 背景数据块包含供该 USS 网络中所有驱动器使用的临时存储区和缓冲区。 各 USS 指令共享此数据块中的信息。

533?$26?$" 㚙㒗⢀㝘┓刦慃惰 533 㐰‍朝㓎峨朗䞭值⋛④Ѧ

866B'59B'%

866B3257

866B'%

866B'59B'%

#- l24l 23485

#" l24l 23485

㳸ὓ慃ℊ䰘┌㠩⩃㙘㐪l6 ὓ殚⏑➑Ѧ₨䙑 l ⍙ l6 ₅ὣ 殚⏑➑⓫㚙㥯悼

2 ⊎Ѧ

866B'59B'%

866B'59

'5,9(

䚂 ⃄ 040

#/- 㚙㒗₨䙑

50 ὓⲀ 厫

1
'ULYH 2 GDWD
3
4
5
6
7
8
9
10
11
12
13
14
15
16

2

'ULYH 2

'ULYH 1

866B530 '5,9(

2

866B:30 '5,9(

连接到一个 RS485 端口的所有驱动器(最多 16 个)是同一 USS 网络的一部分。 连接到另一 RS485 端口的所有驱动器是另一 USS 网络的一部分。 各 USS 网络通过单独的数据块进行管理。 与各 USS 网络相关的所有指令必须共享该数据块。 这包括用于控制各

USS 网络上的所有控制器的所有 USS_DRV、USS_PORT、USS_RPM 和 USS_WPM

指令。

USS_DRV 指令是函数块 (FB)。 在程序编辑器中放置 USS_DRV 指令时,系统将通过“调用选项”(Call options) 对话框提示您为该 FB 分配 DB。 如果对于该 USS 网络而言,它是该程序中的第一条 USS_DRV 指令,则可以接受默认的 DB 分配(或根据需要更改名

称),将相应地创建一个新 DB。 但是,如果对于该通道它不是第一条 USS_DRV 指令,则必须使用“调用选项”(Call options) 对话框中的下拉列表选择先前为该 USS 网络分配的 DB 名称。

指令 USS_PORT、USS_RPM 和 USS_WPM 全部都是函数 (FC)。 在编辑器中放置这些

FC 时不分配 DB。 而您必须给这些指令的“USS_DB”输入分配合适的 DB 引用。 双击该参数字段,然后单击参数助手图标可查看可用的 DB 名称。

USS_PORT 函数通过点对点 (PtP) RS485 通信端口处理 CPU 和驱动器之间的实际通信。 每次调用此功能可处理与一个驱动器的一次通信。 用户程序必须尽快调用此功能以防止与驱动器通信超时。 可在主程序循环 OB 或任何中断 OB 中调用此函数。

通常,应在循环中断 OB 中调用 USS_PORT 函数。该循环中断 OB 的循环时间应设置为最小调用间隔的一半左右(例如,1200 波特的通信应使用 350 ms 或更短的循环时

间)。

用户程序通过 USS_DRV 函数块可访问 USS 网络上指定的驱动器。 其输入和输出是驱动器的状态和控制。 如果网络上有 16 个驱动器,则用户程序必须具有至少 16 个

USS_DRV 调用,每个驱动器一个调用。 应该以控制驱动器工作所需的速率调用这些块。

只能在主程序循环 OB 中调用 USS_DRV 函数块。

S7-1200 可编程控制器 通信处理器-106小心
只能在主程序循环 OB 中调用 USS_DRV、USS_RPM 和 USS_WPM。可在任何 OB 中调用 USS_PORT 函数,通常是在循环中断 OB 中调用。

不要在优先级比 USS_PORT 指令所在 OB 的优先级高的 OB 中使用指令 USS_DRV、

USS_RPM 或 USS_WPM。 例如,不要将 USS_PORT 放置在主程序循环 OB 中,而将

USS_RPM 放置在循环中断 OB 中。如果未能防止 USS_PORT 执行的中断,则会产生

意外错误。

USS_RPM 和 USS_WPM 功能可读取和写入远程驱动器工作参数。 这些参数控制驱动器的内部运行。 有关这些参数的定义,请参见驱动器手册。 用户程序可包含尽可能多的这些功能,但在任何特定时刻,每个驱动器只能激活一个读或写请求。 只能在主程序循环

OB 中调用 USS_RPM 和 USS_WPM 函数。

计算与驱动器通信所需的时间

与驱动器进行的通信与 S7-1200 扫描周期不同步。 在完成一个驱动器通信事务之前,

S7-1200 通常完成了多个扫描。

USS_PORT 间隔是一个驱动器事务所需的时间。 下表列出了各个通信波特率下的最小

USS_PORT 时间间隔。 比 USS_PORT 间隔更频繁地调用 USS_PORT 功能不会增加事务数。 如果通信错误导致尝试 3 次才能完成事务,则驱动器超时间隔是处理该事务可能花费的时间。 默认情况下,USS 协议库对每个事务最多自动进行 2 次重试。

表格 12- 34 计算时间要求

波特率 计算的最小 USS_PORT 调用间隔(毫秒) 每个驱动器的驱动器消息间隔超时(毫秒)
1200 790 2370
2400 405 1215
4800 212.5 638
9600 116.3 349
19200 68.2 205
38400 44.1 133
57600 36.1 109
115200 28.1 85

USS_DRV 指令

表格 12- 35 USS_DRV 指令

LAD/FBD SCL 说明
默认视图

S7-1200 可编程控制器 通信处理器-107

"USS_DRV_DB"(

RUN:=_bool_in_, OFF2:=_bool_in_, OFF3:=_bool_in_, F_ACK:=_bool_in_, DIR:=_bool_in_, DRIVE:=_usint_in_, PZD_LEN:=_usint_in_, SPEED_SP:=_real_in_, CTRL3:=_word_in_, CTRL4:=_word_in_, CTRL5:=_word_in_, CTRL6:=_word_in_, CTRL7:=_word_in_, CTRL8:=_word_in_, NDR=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, RUN_EN=>_bool_out_, D_DIR=>_bool_out_, INHIBIT=>_bool_out_, FAULT=>_bool_out_, SPEED=>_real_out_, STATUS1=>_word_out_, STATUS3=>_word_out_, STATUS4=>_word_out_, STATUS5=>_word_out_, STATUS6=>_word_out_, STATUS7=>_word_out_, STATUS8=>_word_out_);

USS_DRV 指令通过创建请求消息和解释驱动器响应消息与驱动器交换数据。 每个驱动器应使用一个单独的函数块,但与一个 USS 网络和

PtP 通信端口相关的所有 USS 函数必须使用同一个背景数据块。 必须在放置第一个USS_DRV 指令时创建 DB 名称,然后引用初次指令使用时创建的 DB。

STEP 7 会在插入指令时自动创建该 DB。

展开后的视图

S7-1200 可编程控制器 通信处理器-108

1 LAD 和 FBD: 通过单击功能框的底部,可展开该功能框,以显示所有参数。 灰显的参数引脚可选,不需要进行参数分配。

表格 12- 36 参数的数据类型

参数和类型 数据类型 说明
RUN IN Bool 驱动器起始位: 该输入为真时,将使驱动器以预设速度运行。 如果在驱动器运行时 RUN 变为假,电机将减速直至停止。 这种行为不同于切断电源 (OFF2) 或对电机进行制动

(OFF3)。

OFF2 IN Bool 电气停止位: 该位为假时,将使驱动器在不经过制动的情况下逐渐自然停止。
OFF3 IN Bool 快速停止位: 该位为假时,将通过制动的方式使驱动器快速停止,而不只是使驱动器逐渐自然停止。
F_ACK IN Bool 故障确认位: 设置该位以复位驱动器上的故障位。 清除故障后会设置该位,以告知驱动器不再需要指示前一个故障。
DIR IN Bool 驱动器方向控制: 设置该位以指示方向为向前(对于正

SPEED_SP)。

DRIVE IN USInt 驱动器地址: 该输入是 USS 驱动器的地址。 有效范围是驱动器 1 到驱动器 16。
PZD_LEN IN USInt 字长度: 这是 PZD 数据的字数。 有效值为 2、4、6 或 8 个字。 默认值为 2。
SPEED_SP IN Real 速度设定值: 这是以组态频率的百分比表示的驱动器速度。正值表示方向向前(DIR 为真时)。 有效范围是 200.00 到 -

200.00。

CTRL3 IN Word 控制字 3: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL4 IN Word 控制字 4: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL5 IN Word 控制字 5: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL6 IN Word 控制字 6: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL7 IN Word 控制字 7: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL8 IN Word 控制字 8: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
NDR OUT Bool 新数据就绪: 该位为真时,表示输出包含新通信请求数据。
参数和类型 数据类型 说明
ERROR OUT Bool 出现错误: 此参数为真时,表示发生错误,STATUS 输出有效。 其它所有输出在出错时均设置为零。 仅在 USS_PORT

指令的 ERROR 和 STATUS 输出中报告通信错误。

STATUS OUT Word 请求的状态值指示扫描的结果。 这不是从驱动器返回的状态字。
RUN_EN OUT Bool 运行已启用: 该位指示驱动器是否在运行。
D_DIR OUT Bool 驱动器方向: 该位指示驱动器是否正在向前运行。
INHIBIT OUT Bool 驱动器已禁止: 该位指示驱动器上禁止位的状态。
FAULT OUT Bool 驱动器故障: 该位指示驱动器已注册故障。 用户必须解决问题,并且在该位被置位时,设置 F_ACK 位以清除此位。
SPEED OUT Real 驱动器当前速度(驱动器状态字 2 的标定值): 以组态速度百分数形式表示的驱动器速度值。
STATUS1 OUT Word 驱动器状态字 1: 该值包含驱动器的固定状态位。
STATUS3 OUT Word 驱动器状态字 3: 该值包含驱动器上用户可组态的状态字。
STATUS4 OUT Word 驱动器状态字 4: 该值包含驱动器上用户可组态的状态字。
STATUS5 OUT Word 驱动器状态字 5: 该值包含驱动器上用户可组态的状态字。
STATUS6 OUT Word 驱动器状态字 6: 该值包含驱动器上用户可组态的状态字。
STATUS7 OUT Word 驱动器状态字 7: 该值包含驱动器上用户可组态的状态字。
STATUS8 OUT Word 驱动器状态字 8: 该值包含驱动器上用户可组态的状态字。

首次执行 USS_DRV 时,将在背景数据块中初始化由 USS 地址(参数 DRIVE)指示的驱动器。 完成初始化后,随后执行 USS_PORT 即可开始与具有此驱动器编号的驱动器通信。

更改驱动器编号操作将要求 CPU 从 STOP 模式切换到 RUN 模式以初始化相应的背景数据块。 将输入参数组态到 USS TX 消息缓冲区中,并从“前一个”有效响应缓冲区(如果存在)读取输出。 USS_DRV 执行期间不进行数据传送。 驱动器在 USS_PORT 执行时通 信。USS_DRV 仅组态要发送的消息并解释已从前一个请求中接收的数据。

用户可以使用 DIR 输入 (Bool) 或使用符号(正或负)和 SPEED_SP 输入 (Real) 控制驱动器旋转方向。 下表假定电机按正向旋转接线,说明这些输入如何一起决定驱动器旋转方向。

表格 12- 37 SPEED_SP 和 DIR 参数的交互作用

SPEED_SP DIR 驱动器旋转方向
数值 > 0 0 反转
数值 > 0 1 正转
数值 < 0 0 正转
数值 < 0 1 反转

USS_PORT 指令

表格 12- 38 USS_PORT 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-109 USS_PORT(

PORT:=_uint_in_, BAUD:=_dint_in_, ERROR=>_bool_out_, STATUS=>_word_out_, USS_DB:=_fbtref_inout_);

USS_PORT 指令用于处理 USS 网络上的通信。

表格 12- 39 参数的数据类型

参数和类型 数据类型 说明
PORT IN Port 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB

端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常量”(System constants) 选项卡中分配。

BAUD IN DInt 用于 USS 通信的波特率。
USS_DB INOUT USS_BASE 将 USS_DRV 指令放入程序时创建并初始化的背景数据块的名称。
ERROR OUT Bool 该输出为真时,表示发生错误,且 STATUS 输出有效。
STATUS OUT Word 请求的状态值指示扫描或初始化的结果。 对于有些状态代码, 还在“USS_Extended_Error”变量中提供了更多信息。

通常,程序中每个 PtP 通信端口只一个 USS_PORT 指令,且每次调用该功能都会处理与单个驱动器的通信。 与同一个 USS 网络和 PtP 通信端口相关的所有 USS 功能都必须使用同一个背景数据块。

用户程序执行 USS_PORT 指令的次数必须足够多,以防止驱动器超时。通常从循环中断

OB 调用 USS_PORT 以防止驱动器超时并确保 USS_DRV 调用可使用最新的 USS 数据更新内容。

USS_RPM 指令

表格 12- 40 USS_RPM 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-110 USS_RPM(REQ:=_bool_in_, USS_RPM 指令用于从驱动器读取参数。 与同一个 USS 网络和 PtP 通信端口相关的所有

USS 功能都必须使用同一个数据块。必须从主程序循环 OB 调用 USS_RPM。

DRIVE:=_usint_in_,
PARAM:=_uint_in_,
INDEX:=_uint_in_,
DONE=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_,
VALUE=>_variant_out_,
USS_DB:=_fbtref_inout_);

表格 12- 41 参数的数据类型

参数类型 数据类型 说明
REQ IN Bool 发送请求: REQ 为真时,表示需要新的读请求。 如果该参数的请求已处于待决状态,将忽略新请求。
DRIVE IN USInt 驱动器地址: DRIVE 是 USS 驱动器的地址。 有效范围是驱动器 1 到驱动器 16。
PARAM IN UInt 参数编号: PARAM 指示要写入的驱动器参数。 该参数的范围是 0 到 2047。在某些驱动器上,最高有效字节可以访问大于2047 的 PARAM 值。有关如何访问扩展范围的详细信息,请参

见驱动器手册。

INDEX IN UInt 参数索引: INDEX 指示要写入的驱动器参数索引。 索引为一个

16 位值,其中最低有效字节是实际索引值,其范围是 0 到

255。 最高有效字节也可供驱动器使用,且取决于具体的驱动器。 有关详细信息,请参见驱动器手册。

USS_DB INOUT USS_BASE 将 USS_DRV 指令放入程序时创建并初始化的背景数据块的名称。
参数类型 数据类型 说明
VALUE IN Word, Int, UInt, DWord, DInt, UDInt,

Real

这是已读取的参数的值,仅当 DONE 位为真时才有效。
DONE1 OUT Bool 该参数为真时,表示 VALUE 输出包含先前请求的读取参数值。

USS_DRV 发现来自驱动器的读响应数据时会设置该位。 满足以下条件之一时复位该位: 用户通过另一个 USS_WPM 轮询请求响应数据,或在执行接下来两个 USS_DRV 调用的第二个时

请求

ERROR OUT Bool 出现错误: ERROR 为真时,表示发生错误,并且 STATUS 输出有效。 其它所有输出在出错时均设置为零。 仅在

USS_PORT 指令的 ERROR 和 STATUS 输出中报告通信错

误。

STATUS OUT Word STATUS 表示读请求的结果。 对于有些状态代码,还在

“USS_Extended_Error”变量中提供了更多信息。

1 DONE 位表示已从参考电机驱动器读取有效数据并已将其传送给 CPU。 它不表示 USS 库能够立即读取另一参数。 必须将空的 PKW 请求发送到电机驱动器并由指令确认,才能使用特定驱动器的参数通道。 立即调用指定电机驱动器的 USS_RPM 或 USS_WPM FC 将导致 0x818A 错误。

USS_WPM 指令

说明

EEPROM 写操作(用于 USS 驱动器内部的 EEPROM)

请勿过多使用 EEPROM 永久写操作。 请尽可能减少 EEPROM 写操作次数以延长

EEPROM 的寿命。

表格 12- 42 USS_WPM 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-111 USS_WPM(REQ:=_bool_in_, DRIVE:=_usint_in_, PARAM:=_uint_in_, INDEX:=_uint_in_, EEPROM:=_bool_in_, VALUE:=_variant_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, USS_DB:=_fbtref_inout_); USS_WPM 指令用于修改驱动器中的参数。 与同一个 USS 网络和 PtP 通信端口相关的所有

USS 功能都必须使用同一个数据块。

必须从主程序循环 OB 中调用 USS_WPM。

表格 12- 43 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 发送请求: REQ 为真时,表示需要新的写请求。 如果该参数的请求已处于待决状态,将忽略新请求。
DRIVE IN USInt 驱动器地址: DRIVE 是 USS 驱动器的地址。 有效范围是驱动器 1 到驱动器 16。
PARAM IN UInt 参数编号: PARAM 指示要写入的驱动器参数。 该参数的范围是 0 到 2047。在某些驱动器上,最高有效字节可以访问大于

2047 的 PARAM 值。有关如何访问扩展范围的详细信息,请参

见驱动器手册。

INDEX IN UInt 参数索引: INDEX 指示要写入的驱动器参数索引。 索引为一个

16 位值,其中最低有效字节是实际索引值,其范围是 0 到

255。 最高有效字节也可供驱动器使用,且取决于具体的驱动器。 有关详细信息,请参见驱动器手册。

EEPROM IN Bool 存储到驱动器 EEPROM: 该参数为真时,写驱动器参数事务将存储在驱动器 EEPROM 中。 如果为假,则写操作是临时的,

在驱动器循环上电后不会保留。

VALUE IN Word, Int, UInt, DWord, DInt, UDInt,

Real

要写入的参数值。 它必须在 REQ 切换时有效。
USS_DB INOUT USS_BASE 将 USS_DRV 指令放入程序时创建并初始化的背景数据块的名称。
参数和类型 数据类型 说明
DONE1 OUT Bool DONE 为真时,表示输入 VALUE 已写入驱动器。 USS_DRV 发现来自驱动器的写响应数据时会设置该位。如果用户通过另一个 USS_WPM 轮询请求响应数据,或在执行接下来两个

USS_DRV 调用的第二个时请求响应数据,则复位该位。

ERROR OUT Bool ERROR 为真时,表示发生错误,并且 STATUS 输出有效。 其它所有输出在出错时均设置为零。 仅在 USS_PORT 指令的

ERROR 和 STATUS 输出中报告通信错误。

STATUS OUT Word STATUS 表示写请求的结果。 对于有些状态代码,还在

“USS_Extended_Error”变量中提供了更多信息。

1 DONE 位表示已从参考电机驱动器读取有效数据并已将其传送给 CPU。 它不表示 USS 库能够立即读取另一参数。 必须将空的 PKW 请求发送到电机驱动器并由指令确认,才能使用特定驱动器的参数通道。 立即调用指定电机驱动器的 USS_RPM 或 USS_WPM FC 将导致 0x818A 错误。

USS 状态代码

在 USS 功能的 STATUS 输出端返回 USS 指令状态代码。

表格 12- 44 STATUS 代码 1

STATUS

(W#16#....)

说明
0000 无错误
8180 驱动器响应的长度与从驱动器收到的字符数不匹配。 出错的驱动器编号在

“USS_Extended_Error”变量中返回。 请参见本表格下方的扩展错误描述。

8181 VALUE 参数不是 Word、Real 或 DWord 数据类型。
8182 用户提供了 Word 参数值,但从驱动器响应中收到 DWord 或 Real 值。
8183 用户提供了 DWord 或 Real 参数值,但从驱动器响应中收到 Word 值。
8184 驱动器响应报文的校验和有错误。 出错的驱动器编号在“USS_Extended_Error”变量中返回。 请参见本表格下方的扩展错误描述。
8185 非法的驱动器地址(有效驱动器地址范围: 1 到 16)
8186 速度设定值超出有效范围(有效速度 SP 范围: -200% 到 200%)。
8187 对已发送的请求响应了错误的驱动器编号。 出错的驱动器编号在“USS_Extended_Error”变量中返回。 请参见本表格下方的扩展错误描述。
STATUS

(W#16#....)

说明
8188 指定的 PZD 字长度非法(有效范围 = 2、4、6 或 8 个字)
8189 指定了非法的波特率。
818A 参数请求通道正在由该驱动器的另一个请求使用。
818B 驱动器尚未对请求和重试做出响应。 出错的驱动器编号在“USS_Extended_Error”变量中返回。 请参见本表格下方的扩展错误描述。
818C 驱动器返回了有关参数请求操作的扩展错误。 请参见本表格下方的扩展错误描述。
818D 驱动器返回了有关参数请求操作的非法访问错误。 有关可能限制参数访问的原因信息,请参见驱动器手册。
818E 驱动器尚未初始化。 若从未调用过该驱动器的 USS_DRV,则该错误代码将返回到

USS_RPM 或 USS_WPM。 这会防止首次扫描 USS_DRV 的初始化过程覆盖未决的参数读/写请求,因为它会将驱动器初始化为新条目。 要修复该错误,请针对此驱动器编号调

用 USS_DRV。

80Ax-80Fx 从 USS 库调用的 PtP 通信 FB 返回的特定错误 - 这些错误代码值不会被 USS 库修改且在

PtP 指令说明中定义。

1 除了上述列出的 USS 指令错误,还可能返回底层 PtP 通信指令 (页 610)的错误信息。

对于一些 STATUS 代码,在 USS_DRV 背景数据块的“USS_Extended_Error”变量中提供更多信息。 对于 STATUS 代码 8180、8184、8187 和 818B(十六进制), USS_Extended_Error 包含出现通信错误的驱动器编号。 对于 STATUS 代码 818C(十六进制),USS_Extended_Error 包含使用 USS_RPM 或 USS_WPM 指令时从驱动器返回的驱动器错误代码。

仅报告有关 USS_PORT 指令(而非 USS_DRV 指令)的通信错误 (STATUS =

16#818B)。 例如,如果没有正确地终止网络,则驱动器可能切换到 RUN 模式,但

USS_DRV 指令将为相关输出参数全部显示 0。 在这种情况下,只能检测有关

USS_PORT 指令的通信错误。 由于该错误仅在一个扫描周期内可见,所以需要添加一些捕获逻辑,如下面的示例所示。 在本例中,当 USS_PORT 指令的错误位为 TRUE 时,

STATUS 和 USS_Extended_Error 值将保存到 M 存储器中。 当 STATUS 代码值是十六进制的 8180、8184、8187 或 818B 时,驱动器编号将放在 USS_Extended_Error 变量中。

S7-1200 可编程控制器 通信处理器-112网络 1 "PortStatus" 端口状态和

"USS_DRV_DB".USS_Extended_Err

or 扩展错误代码值仅在一个程序扫描周期内有效。 必须捕获这些值以便后期处理。

S7-1200 可编程控制器 通信处理器-113网络 2“PortError”触点触发将

“PortStatus”值存储在“LastPortStatus”中以及将"USS_DRV_DB".USS_Extended_Err

or 值存储在“LastExtError”中。

USS 驱动器支持对驱动器的内部参数进行读写访问。 通过该功能可进行驱动器的远程控制和组态。 由于发生类似值超出范围或驱动器当前模式的请求非法等错误,驱动器参数访问操作可能会失败。 驱动器会生成在“USS_Extended_Error”变量中返回的错误代码值。 该错误代码值仅对 USS_RPM 或 USS_WPM 指令的最后一次执行有效。 当STATUS code 值为十六进制的 818C 时,驱动器错误代码将放入 USS_Extended_Error 变量中。 “USS_Extended_Error”的错误代码值取决于驱动器型号。 有关读写参数操作的扩展错误代码的描述,请参见驱动器手册。

常规驱动器设置信息

常规驱动器设置要求
        • 驱动器必须设置为使用 4 个 PKW 字。
        • 驱动器可组态为使用 2、4、6 或 8 个 PZD 字。
        • 驱动器中 PZD 字的数量必须与该驱动器的 USS_DRV 指令的 PZD_LEN 输入相匹配。
        • 所有驱动器的波特率必须与 USS_PORT 指令的 BAUD 输入相匹配。
        • 驱动器必须设置为可进行远程控制。
        • 驱动器必须设置为使用适合通信链路上 USS 的频率设定值。
        • 驱动器地址必须设置为 1 到 16,并且与 USS_DRV 块上对应该驱动器的 DRIVE 输入相匹配。
          • 驱动器的方向控制必须设置为使用驱动器设定值的极性。
          • 必须正确终止 RS485 网络。
连接 MicroMaster 驱动器

本部分以 SIEMENS MicroMaster 驱动器为例提供相关信息。 对于其它驱动器,请参见驱动器手册查看相关设置说明。

要建立与 MicroMaster 系列 4 (MM4) 驱动器的连接,请将 RS485 电缆的两端插入两个用于 USS 操作的笼式夹持无螺丝端子中。 可使用标准 PROFIBUS 电缆和连接器连接 S7-

1200。

S7-1200 可编程控制器 通信处理器-114小心
参考电位不同的互连设备可导致互连电缆中有不想要的电流流过

这些不想要的电流可引发通信错误或损坏设备。 确保要使用通信电缆连接的所有设备都共用一个公共电路参考点,或者进行隔离以防止出现不想要的电流。 屏蔽层必须与外壳地或 9 针连接器的引脚 1 连接。 建议将 MicroMaster 驱动器上的接线端子 2--0V 与外壳

地连接。

RS485 电缆另一端的两根线必须插入

S7-1200 可编程控制器 通信处理器-115

B (P)

A (N)

MM4 驱动器的接线板中。 要实现

MM4 驱动器上的电缆连接,请去掉驱动器的盖,露出接线板。 有关如何去掉特定驱动器的盖的详细信息,请参见 MM4 用户手册。

接线板连接标有数字。 使用 S7-1200 侧的 PROFIBUS 连接器,将电缆的 A 端子连接到驱动器的端子 15(对于 MM420)或端子 30 (MM440)。 将 B (P) A (N) 电缆连接器的 B 端子连接到端子 14 (MM420) 或端子 29 (MM440)。

如果 S7-1200 是网络中的终止节点,或者如果是点对点连接,则需要使用连接器的端子

A1 和 B1(不是 A2 和 B2),这是因为通过这两个端子可进行终端设置(例如,使用6ES7 972--0BA40--0X40 型号的 DP 连接器)。

S7-1200 可编程控制器 通信处理器-116小心
确保给设备通电之前已正确装上了驱动器盖。

如果驱动器被组态为网络中的终止节点, 则还必须将终端电阻和偏压电阻连接到适当的终端连接。 此图显示了终止和偏压所需的 MM4 驱动器连接示例。

P 14

N 15

0V 2

+10 V 1

MM420

1.5K ohm

S7-1200 可编程控制器 通信处理器-117 S7-1200 可编程控制器 通信处理器-118 S7-1200 可编程控制器 通信处理器-119 S7-1200 可编程控制器 通信处理器-120

120 ohm

470 ohm

P 29

N 30

0V 2

+10 V 1

MM440

1.5K ohm

S7-1200 可编程控制器 通信处理器-121 S7-1200 可编程控制器 通信处理器-122 S7-1200 可编程控制器 通信处理器-123 S7-1200 可编程控制器 通信处理器-124

120 ohm

470 ohm

设置 MM4 驱动器

将驱动器与 S7-1200 连接之前,必须确保驱动器具有下列系统参数。 使用驱动器上的小键盘设置参数:

1. 恢复驱动器的出厂设置(可选)。 P0010=30 P0970=1
如果跳过步骤 1,则请确保这些参数被设置成所指示的值。 USS PZD 长度 = P2012 索引 0 =

(2、4、6 或 8)

USS PKW 长度 = P2013 索引 0 = 4

2. 启用对所有参数的读/写访问(专家模式)。 P0003=3
3. 检查驱动器的电机设置。 所使用的电机不同,设置也会不同。

要设置参数 P304、P305、P307、P310 和 P311,首先必须将参数 P010 设置为 1(快速调试模式)。 这些参数设置完毕后,将参数 P010 设置为 0。参数 P304、P305、P307、P310 和 P311 只

能在快速调试模式下更改。

P0304 = 电机额定电压 (V) P0305 = 电机额定电流 (A) P0307 = 电机额定功率 (W) P03010 = 电机额定频率 (Hz) P0311 = 电机额定速度
4. 设置本地/远程控制模式。 P0700 索引 0=5
5. 根据通信链路的 USS 选择频率设定值。 P1000 索引 0=5
6. 加速时间(可选)

这是电机加速到最大频率所需的时间(秒)。

P1120 =(0 到 650.00)
7. 减速时间(可选)

这是电机减速到完全停止所需的时间(秒)。

P1121 =(0 到 650.00)
8. 设置串行链路的基准频率: P2000 =(1 到 650 Hz)
9. 设置 USS 标准化: P2009 索引 0=0
10. 设置 RS485 串行接口的波特率: P2010 索引 0= 4(2400 波特)

5(4800 波特)

6(9600 波特)

7(19200 波特)

8(38400 波特)

9(57600 波特)

12(115200 波特)

11. 输入从站地址。

可通过总线操作每台驱动器(最多 31 台)。

P2011 索引 0 =(0 到 31)
12. 设置串行链路超时。

这是两份传入数据报文之间所允许的最长时间段。 此功能用于在出现通信故障时关闭反相器。 收到有效的数据报文后开始计时。 如果在指定的时间段内未收到其它数据报文,则反相器脱扣并显示故

障代码 F0070。 将该值设置为零将关闭控制。

P2014 索引 0 =(0 到 65,535 ms)

(0 = 禁用超时)

13. 将数据从 RAM 传送到 EEPROM: P0971=1(启动传送)将参数设置更改内容保存到 EEPROM

Modbus 通信

Modbus RTU 和 TCP 通信概述

Modbus 功能代码
        • CPU 作为 Modbus RTU 主站(或 Modbus TCP 客户端)运行时,可在远程 Modbus

RTU 从站(或 Modbus TCP 服务器)中读/写数据和 I/O 状态。 可以在用户程序中读取和处理远程数据。

        • CPU 作为 Modbus RTU 从站(或 Modbus TCP 服务器)运行时,允许监控设置在远程 CPU 中读/写数据和 I/O 状态。 监控设备可在远程 CPU 储存器中写入可在用户程序中处理的新值。

表格 12- 45 读取数据功能: 读取远程 I/O 及程序数据

Modbus 功能代码 读取从站(服务器)功能 - 标准寻址
01 读取输出位: 每个请求 1 到 2000 个位
02 读取输入位: 每个请求 1 到 2000 个位
03 读取保持寄存器: 每个请求 1 到 125 个字
04 读取输入字: 每个请求 1 到 125 个字

表格 12- 46 写入数据功能: 写入远程 I/O 及修改程序数据

Modbus 功能代码 写入从站(服务器)功能 - 标准寻址
05 写入一个输出位:每个请求 1 个位
06 写入一个保持寄存器: 每个请求 1 个字
15 写入一个或多个输出位:每个请求 1 到 1968 个位
16 写入一个或多个保持寄存器:每个请求 1 到 123 个字
        • Modbus 功能代码 08 和 11 提供从站设备通信诊断信息。
        • Modbus 功能代码 0 将消息广播到所有从站(无从站响应)。 广播功能不能用于

Modbus TCP,因为通信是以连接为基础的。

表格 12- 47 Modbus 网络站地址

地址
RTU 站 标准站地址 1 到 247
扩展站地址 1 到 65535
TCP 站 站地址 IP 地址和端口号
Modbus 存储区地址

实际可用的 Modbus 存储区地址数取决于 CPU 型号、存在多少工作存储器以及其他程序数据占用多少 CPU 存储区。 下表给出地址范围的额定值。

表格 12- 48 Modbus 存储区地址

地址范围
RTU 站 标准存储区地址 10K
扩展存储区地址 64K
TCP 站 标准存储区地址 10K
Modbus RTU 通信

Modbus RTU(远程终端单元)是一个标准的网络通信协议,它使用 RS232 或 RS485 电气连接在 Modbus 网络设备之间传输串行数据。 可在带有一个 RS232 或 RS485 CM 或一个 RS485 CB 的 CPU 上添加 PtP(点对点)网络端口。

Modbus RTU 使用主/从网络,单个主设备启动所有通信,而从设备只能响应主设备的请求。 主设备向从一个从设备地址发送请求,然后该从设备地址对命令做出响应。

Modbus TCP 通信

Modbus TCP(传输控制协议)是一个标准的网络通信协议,它使用 CPU 上的

PROFINET 连接器进行 TCP/IP 通信。 不需要额外的通信硬件模块。

Modbus TCP 使用开放式用户通信 (OUC, Open User Communication) 连接作为 Modbus 通信路径。 除了 STEP 7 和 CPU 之间的连接外,还可能存在多个客户端-服务器连接。 支持的混合客户端和服务器连接数最大为 CPU 型号所允许的最大连接数 (页 458)。

每个 MB_SERVER 连接必须使用一个唯一的背景数据块和 IP 端口号。 每个 IP 端口只能用于 1 个连接。 必须为每个连接单独执行各 MB_SERVER(带有其唯一的背景数据块和

IP 端口)。

说明

只有使用 CPU 固件版本 V1.02 或更高版本时,Modbus TCP 才能正确运行。 尝试在早期固件版本上执行 Modbus 指令会导致出错。

Modbus TCP 客户端(主站)必须通过 DISCONNECT 参数控制客户端-服务器连接。 基本的 Modbus 客户端操作如下所示。

  1. 连接到特定服务器(从站)IP 地址和 IP 端口号
  2. 启动 Modbus 消息的客户端传输,并接收服务器响应
  3. 根据需要断开客户端和服务器的连接,以便与其它服务器连接。
程序中的 Modbus RTU 指令
        • MB_COMM_LOAD:通过执行一次 MB_COMM_LOAD 设置 PtP 端口参数,如波特率、奇偶校验和流控制。 为 Modbus RTU 协议组态 CPU 端口后,该端口只能由MB_MASTER MB_SLAVE 指令使用。
        • MB_MASTER:该 Modbus 主指令使 CPU 充当 Modbus RTU 主设备,并与一个或多个 Modbus 从设备进行通信。
        • MB_SLAVE:该 Modbus 从指令使 CPU 充当 Modbus RTU 从设备,并与一个

Modbus 主设备进行通信。

程序中的 Modbus TCP 指令
        • MB_CLIENT:进行客户端-服务器 TCP 连接、发送命令消息、接收响应,以及控制服务器断开
        • MB_SERVER:根据要求连接至 Modbus TCP 客户端、接收 Modbus 消息及发送响应

Modbus TCP

MB_CLIENT (Modbus TCP)

表格 12- 49 MB_CLIENT 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-125 "MB_CLIENT_DB"(

REQ:=_bool_in_, DISCONNECT:=_bool_in_, CONNECT_ID=_uint_in_, IP_OCTET_1:=_byte_in_, IP_OCTET_2:=_byte_in_, IP_OCTET_3:=_byte_in_, IP_OCTET_4:=_byte_in_, IP_PORT:=_uint_in_, MB_MODE:=_usint_in_, MB_DATA_ADDR:=_udint_in_, MB_DATA_LEN:=_uint_in_, DONE=>_bool_out_, BUSY=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, MB_DATA_PTR:=_variant_inout_);

MB_CLIENT 作 为 Modbus TCP 客户端,通过 S7-1200 CPU 上的 PROFINET 连接器进行通信。 不需要额外的通信硬件模块。

MB_CLIENT 可进行客户端- 服务器连接、发送 Modbus 功能请求、接收响应,以及控制 Modbus TCP 服务器的断开。

表格 12- 50 参数的数据类型

参数和类型 数据类型 说明
REQ In Bool FALSE = 无 Modbus 通信请求

TRUE = 请求与 Modbus TCP 服务器通信

DISCONNECT IN Bool DISCONNECT 参数允许程序控制与 Modbus 服务器设备的连接和断开。

如果 DISCONNECT = 0 且不存在连接,则 MB_CLIENT 尝试连接到分配的 IP 地址和端口号。

如果 DISCONNECT = 1 且存在连接,则尝试断开连接操作。 每当启用此输入时,无法尝试其它操作。

CONNECT_ID IN UInt CONNECT_ID 参数必须唯一标识 PLC 中的每个连接。

MB_CLIENT 或 MB_SERVER 指令的各唯一实例必须含有一个唯一的 CONNECT_ID 参数。

参数和类型 数据类型 说明
IP_OCTET_1 IN USInt Modbus TCP 服务器 IP 地址: 八位位组 1

Modbus TCP 服务器(客户端将通过 Modbus TCP 协议与其进行连接及通信)的 32 位 IPv4 IP 地址中的 8 位部分。

IP_OCTET_2 IN USInt Modbus TCP 服务器 IP 地址: 八位位组 2
IP_OCTET_3 IN USInt Modbus TCP 服务器 IP 地址: 八位位组 3
IP_OCTET_4 IN USInt Modbus TCP 服务器 IP 地址: 八位位组 4
IP_PORT IN UInt 默认值 = 502: 服务器(客户端尝试通过 TCP/IP 协议与其连接并最终通信)的 IP 端口号。
MB_MODE IN USInt 模式选择: 分配请求类型(读、写或诊断)。 请参见下面的

Modbus 功能表了解详细信息。

MB_DATA_ADDR IN UDInt Modbus 起始地址: 分配 MB_CLIENT 访问的数据的起始地址。请参见下面的 Modbus 功能表了解有效地址信息。
MB_DATA_LEN IN UInt Modbus 数据长度: 分配此请求中要访问的位数或字数。 请参见下面的 Modbus 功能表了解有效长度信息。
MB_DATA_PTR IN_OUT Variant 指向 Modbus 数据寄存器的指针: 寄存器缓冲数据进入 Modbus

服务器或来自 Modbus 服务器。 该指针必须分配一个标准全局

DB 或一个 M 存储器地址。

DONE OUT Bool 上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫描周期时间。
BUSY OUT Bool
  • 0 - 无 MB_CLIENT 操作正在进行
  • 1 - MB_CLIENT 操作正在进行
ERROR OUT Bool MB_CLIENT 执行因错误而终止后,ERROR 位将保持为 TRUE

一个扫描周期时间。 STATUS 参数中的错误代码值仅在 ERROR

= TRUE 的一个循环周期内有效。

STATUS OUT Word 执行条件代码
REQ 参数

FALSE = 无 Modbus 通信请求

TRUE = 请求与 Modbus TCP 服务器通信

如果 MB_CLIENT 的实例没有激活且参数 DISCONNECT=0,当 REQ=1 时,将启动一个新的 Modbus 请求。 如果尚未建立连接,则建立一个新的连接。

如果在当前请求完成前 DISCONNECT=0 且 REQ=1,从而再次执行 MB_CLIENT 的同一个实例,则不会进行后续 Modbus 传送。 但是,一旦完成当前请求,如果通过 REQ=1 执行 MB_CLIENT,可处理新的请求。

完成当前 MB_CLIENT 通信请求后,DONE 位将在一个周期内保持为 TRUE。 DONE 位可用作定时门,对多个 MB_CLIENT 请求进行排序。

说明

MB_CLIENT 处理期间输入数据的一致性

Modbus 客户端启动 Modbus 操作后,将在内部保存所有输入状态,然后在每次后续调用时进行比较。 比较用于确定此特定调用是否是活动客户端请求的发起者。 可使用一个公用背景数据块执行多个 MB_CLIENT 调用。

因此,在主动处理 MB_CLIENT 操作期间应不改变输入,这一点很重要。 若不遵循此规则,MB_CLIENT 无法确定其为活动实例。

MB_MODE 和 MB_DATA_ADDR 参数用于选择 Modbus 通信功能

MB_DATA_ADDR 分配要访问数据的起始 Modbus 地址。 MB_CLIENT 指令使用

MB_MODE 输入而非功能代码输入。

MB_MODE 和 MB_DATA_ADDR 值一起确定实际 Modbus 消息中使用的功能代码。 下表列出了 MB_MODE 参数、Modbus 功能和 Modbus 地址范围之间的对应关系。

表格 12- 51 Modbus 功能

MB_MOD

E

Modbus

功能

数据长度 操作和数据 MB_DATA_ADDR
0 01 1 到 2000 读取输出位:

每个请求 1 到 2000 个位

1 到 9999
0 02 1 到 2000 读取输入位:

每个请求 1 到 2000 个位

10001 到 19999
0 03 1 到 125 读取保持寄存器:

每个请求 1 到 125 个字

40001 到 49999 或

400001 到 465535

0 04 1 到 125 读取输入字:

每个请求 1 到 125 个字

30001 到 39999
1 05 1 写入一个输出位: 每个请求 1 个位 1 到 9999
MB_MOD

E

Modbus

功能

数据长度 操作和数据 MB_DATA_ADDR
1 06 1 写入一个保持寄存器: 每个请求 1 个字 40001 到 49999 或

400001 到 465535

1 15 2 到 1968 写入多个输出位:

每个请求 2 到 1968 个位

1 到 9999
1 16 2 到 123 写入多个保持寄存器: 每个请求 2 到 123 个字 40001 到 49999 或

400001 到 465535

2 15 1 到 1968 写入一个或多个输出位: 每个请求 1 到 1968 个位 1 到 9999
2 16 1 到 123 写入一个或多个保持寄存器: 每个请求 1 到 123 个字 40001 到 49999 或

400001 到 465535

11 11 0 读取服务器通信状态字和事件计数

器。 状态字指示忙闲情况(0 - 不忙, 0xFFFF - 忙)。 每成功完成一条消 息,事件计数器的计数值递增。

对于该功能,MB_CLIENT 的

MB_DATA_ADDR 和 MB_DATA_LEN

参数都将被忽略。

80 08 1 利用数据诊断代码 0x0000 检查服务器状态(回送测试 - 服务器回送请求)

每个请求 1 个字

81 08 1 利用数据诊断代码 0x000A 重新设置服务器事件计数器

每个请求 1 个字

3 到 10、

12 到

79、

82 到 255

保留

说 明 MB_DATA_PTR 分配一个缓冲区来存储从 Modbus TCP 服务器读取或写入到该服务器的数据

数据缓冲区可位于标准的全局 DB 或 M 存储器地址中。

对于 M 存储器中的缓冲区,使用标准的 Any 指针格式。 具体格式为 P#“位地址” “数据类型” “长度”,例如 P#M1000.0 WORD 500。

MB_DATA_PTR 分配一个通信缓冲区
          • MB_CLIENT 通信功能:

从 Modbus 服务器地址(00001 到 09999)读写 1 位数据

从 Modbus 服务器地址(10001 到 19999)读取 1 位数据

– 从 Modbus 服务器地址(30001 到 39999)和(40001 到 49999)读取 16 位字数据

向 Modbus 服务器地址(40001 到 49999)写入 16 位字数据

          • 向/从 MB_DATA_PTR 分配的 DB 或 M 储存器缓冲区传输字或位大小的数据。
          • 如果通过 MB_DATA_PTR 分配 DB 为缓冲区,必须为所有 DB 数据元素分配数据类型。

1 位 Bool 数据类型代表一个 Modbus 位地址

16 位单字数据类型(如 WORD、UInt 和 Int)代表一个 Modbus 字地址

32 位双字数据类型(如 DWORD、DInt 和 Real)代表两个 Modbus 字地址

          • 可以通过 MB_DATA_PTR 分配复杂的 DB 元素,例如

标准数组

指定的结构,其中每个元素都是唯一的。

指定的复杂结构,其中每个元素都具有唯一的名称以及 16 或 32 位数据类型。

          • 不要求 MB_DATA_PTR 数据区位于同一个全局数据块(或 M 存储器区)中。 可分配一个数据块供 Modbus 读取,分配另一个数据块供 Modbus 写入,或分配一个数据块用于各个 MB_CLIENT 站。
多个客户端连接

Modbus TCP 客户端支持的并发连接数最多为 PLC 允许的开放式用户通信最大连接数。

PLC 的连接总数(包括 Modbus TCP 客户端和服务器)不得超过 支持的开放式用户通信最大连接数 (页 458)。 可以在客户端和/或服务器类型的连接间共享 Modbus TCP 连接。

单独的客户端连接必须遵循以下规则:

  • 每个 MB_CLIENT 连接必须使用一个不同的背景数据块
  • 每个 MB_CLIENT 连接必须指定一个唯一的服务器 IP 地址
  • 每个 MB_CLIENT 连接必须指定一个唯一的连接 ID
  • 是否需要唯一的 IP 端口号取决于服务器组态

连接 ID 对于每个单独的连接必须是唯一的。 这意味着单个的唯一连接 ID 只能与每个单独的背景数据块配合使用。 总之,背景数据块和连接 ID 成对使用,且对每个连接必须是唯一的。

表格 12- 52 MB_CLIENT 实例数据块用户可访问静态变量

变量 数据类型 默认值 说明
Blocked_Proc_Timeo ut Real 3.0 在 Modbus 客户端实例受阻后,移除该激活的实例前需等待的时间(秒)。 例如,当已发出客户端请求,但应用程序在彻底完成该请求前停止执行该客户端功能时,就会出现这种情

况。 最大 S7-1200 限值是 55 秒。

MB_Unit_ID Word 255 Modbus 设备标识符

Modbus TCP 服务器通过其 IP 地址寻址。 因此 MB_UNIT_ID

参数不用于 Modbus TCP 寻址。

MB_UNIT_ID 参数与 Modbus RTU 协议中的从站地址相对

应。 如果 Modbus TCP 服务器用于采用 Modbus RTU 协议的网关,MB_UNIT_ID 可用于标识在串行网络上连接的从站设备。 MB_UNIT_ID 将用于将请求转发给正确的 Modbus RTU 从站地址。

请注意,某些 Modbus TCP 设备可能需要在受限的值范围内初始化 MB_UNIT_ID 参数。

RCV_TIMEOUT Real 2.0 MB_CLIENT 等待服务器响应请求的时间(秒)。
已连接 Bool 0 指示与所分配服务器的连接是已接通还是已断开: 1 = 接通,

0 = 断开

表格 12- 53 MB_CLIENT 协议错误

STATUS 发送到 Modbus Modbus 协议错误
(W#16#) 客户端的响应代
(B#16#)
8381 01 不支持此功能代码
8382 03 数据长度错误
8383 02 数据地址错误或访问的数据超出 MB_HOLD_REG 地址区的界限
8384 03 数据值错误
8385 03 不支持此数据诊断代码值(功能代码 08)

表格 12- 54 MB_CLIENT 执行条件代码 1

STATUS

(W#16#)

MB_CLIENT 参数错误
7001 MB_CLIENT 正在等待 Modbus 服务器响应指定 TCP 端口处的连接或断开连接请求。 仅在第一次执行连接或断开操作时才报告此代码。
7002 MB_CLIENT 正在等待 Modbus 服务器响应指定 TCP 端口处的连接或断开连接请求。 等待连接或断开操作完成时,将针对任何后续执行报告此代码。
7003 断开操作已成功完成(仅在一个 PLC 扫描周期内有效)。
80C8 服务器在分配的时间内无响应。 MB_CLIENT 必须在分配的时间内使用最初传送的事务 ID

接收响应,否则将返回此错误。 检查与 Modbus 服务器设备的连接。

尝试过任何组态的重试操作(若适用)后,才报告此错误。

8188 模式值无效
8189 数据地址值无效
818A 数据长度值无效
818B 指向 DATA_PTR 区的指针无效。 可以是 MB_DATA_ADDRESS 与 MB_DATA_LEN 的组合。
818C 指向优化的 DATA_PTR 区(必须是标准 DB 区或 M 储存器区)的指针
8200 端口正忙于处理现有的 Modbus 请求。
8380 接收到的 Modbus 帧有缺陷或接收到的字节太少。

 

STATUS

(W#16#)

MB_CLIENT 参数错误
8387 分配的连接 ID 参数和用于先前请求的 ID 不同。 只能有一个单个连接 ID 与每个

MB_CLIENT 背景数据块配合使用。

如果从一个服务器接收到的 Modbus TCP 协议 ID 不是 0,也可作为内部错误使用。

8388 Modbus 服务器返回一些和请求内容不同的数据。 这只适用于 Modbus 功能 15 或 16。

1 除了上面列出的 MB_CLIENT 错误外,也可以从底层传输块通信指令(TCON、TDISCON、TSEND 和

TRCV)返回错误。

参见

TCON、TDISCON、TSEND 和 TRCV (页 473)

MB_SERVER (Modbus TCP)

表格 12- 55 MB_SERVER 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-126 "MB_SERVER_DB"(

DISCONNECT:=_bool_in_, CONNECT_ID:=_uint_in_, IP_PORT:=_uint_in_, NDR=>_bool_out_, DR=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, MB_HOLD_REG:=_variant_inout_);

MB_SERVER 作 为 Modbus TCP 服务器,通过 S7-1200 CPU 上的PROFINET 连接器进行通信。 不需要额外的通信硬件模块。

MB_SERVER 可接收与 Modbus

TCP 客户端连接的请求、接收

Modbus 功能请求,以及发送响应消息。

表格 12- 56 参数的数据类型

参数和类型 数据类型 说明
DISCONNECT IN Bool MB_SERVER 尝试与伙伴设备进行“被动”连接。 也就是说,服务器被动地侦听来自任何请求 IP 地址的 TCP 连接请求。

如果 DISCONNECT = 0 且连接不存在,则可以启动被动连接。

如果 DISCONNECT = 1 且连接存在,则启动断开操作。 这允许程序控制何时接受连接。 每当启用此输入时,无法尝试其他操作。

CONNECT_ID IN UInt CONNECT_ID 唯一标识 PLC 中的每个连接。 MB_CLIENT 或

MB_SERVER 指令的各唯一实例必须含有一个唯一的

CONNECT_ID 参数。

IP_PORT IN UInt 默认值 = 502: 用来标识 IP 端口的 IP 端口号,将监视该端口是否有来自 Modbus 客户端的连接请求。

以下 TCP 端口号不允许用于 MB_SERVER 被动连接: 20、21、

25、80、102、123、5001、34962、34963 和 34964。

MB_HOLD_RE G IN_OUT Variant 指向 MB_SERVER Modbus 保持寄存器的指针: 保持寄存器必须是一个标准全局 DB 或 M 存储区地址。 储存区用于保存值,允许

Modbus 客户端使用 Modbus 寄存器功能 3(读)、6(写)和 16

(写)访问这些值。

NDR OUT Bool 新数据就绪: 0 = 没有新数据,1 = 表示 Modbus 客户端已写入新数据
DR OUT Bool 数据读取: 0 = 没有读取数据,1 = 表示 Modbus 客户端已读取该数据。
ERROR OUT Bool MB_SERVER 执行因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间。 STATUS 参数中的错误代码值仅在 ERROR =

TRUE 的一个循环周期内有效。

STATUS OUT Word 执行条件代码

MB_SERVER 允许进入的 Modbus 功能代码(1、2、4、5 和 15)在 S7-1200 CPU 的输入过程映像及输出过程映像中直接读或写位和字。 对于数据传输功能代码(3、6 和16),MB_HOLD_REG 参数必须定义为大于一个字节的数据类型。 下表显示了 Modbus 地址到 CPU 中过程映像的映射。

表格 12- 57 Modbus 地址到过程映像的映射

Modbus 功能 S7-1200
代码 功能 数据区 地址范围 数据区 CPU 地址
01 读位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7
02 读位 输入 10001 18192 输入过程映像 I0.0 到 I1023.7
04 读字 输入 30001 30512 输入过程映像 IW0 到 IW1022
05 写位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7
15 写位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7

进入的 Modbus 消息功能代码(3、6 和 16)在 Modbus 保持寄存器中读取或写入字,该寄存器可以是 M 存储区地址范围或数据块。 保持寄存器的类型由 MB_HOLD_REG 参数指定。

说明

MB_HOLD_REG 参数分配

Modbus 保持寄存器可以位于标准全局 DB 或 M 存储区地址中。

对于 M 存储区地址中的 Modbus 保持寄存器,使用标准的 Any 指针格式。 其格式为

P#“位地址”“数据类型”“长度”。 例如 P#M1000.0 WORD 500

下表给出了 Modbus 地址到保持寄存器的映射示例,这种映射用于 Modbus 功能代码 03

(读取字)、06(写入字)和 16(写入字)。 DB 地址的实际上限取决于每种 CPU 型号的最大工作存储器限值和 M 存储器限值。

表格 12- 58 Modbus 地址到 CPU 存储器地址的映射示例

Modbus 地址 MB_HOLD_REG 参数示例
P#M100.0 Word 5 P#DB10.DBx0.0 Word 5 "Recipe".ingredient
40001 MW100 DB10.DBW0 "Recipe".ingredient[1]
40002 MW102 DB10.DBW2 "Recipe".ingredient[2]
40003 MW104 DB10.DBW4 "Recipe".ingredient[3]
40004 MW106 DB10.DBW6 "Recipe".ingredient[4]
40005 MW108 DB10.DBW8 "Recipe".ingredient[5]
多个服务器连接

可以创建多个服务器连接。 这允许单个 PLC 建立与多个 Modbus TCP 客户端的并发连接。

Modbus TCP 服务器支持的并发连接数最多为 PLC 允许的开放式用户通信最大连接数。

PLC 的连接总数(包括 Modbus TCP 客户端和服务器)不得超过 支持的开放式用户通信最大连接数 (页 458)。 可以在客户端和/或服务器类型的连接间共享 Modbus TCP 连接。

单独的服务器连接必须遵循以下规则:

  • 每个 MB_SERVER 连接必须使用一个不同的背景数据块。
  • 必须通过一个唯一的 IP 端口号建立每个 MB_SERVER 连接。 每个端口只能用于 1

个连接。

  • 每个 MB_SERVER 连接必须使用一个唯一的连接 ID。
  • 必须为每个连接(带有各自的背景数据块)单独调用 MB_SERVER。

连接 ID 对于每个单独的连接必须是唯一的。 这意味着单个的唯一连接 ID 只能与每个单独的背景数据块配合使用。 总之,背景数据块和连接 ID 成对使用,且对每个连接必须是唯一的。

表格 12- 59 Modbus 诊断功能代码

MB_SERVER Modbus 诊断功能
代码 子功能 说明
08 0x0000 返回查询数据回送测试: MB_SERVER 将向 Modbus 客户端回送接收到的数据字。
08 0x000A 清除通信事件计数器: MB_SEVER 将清除用于 Modbus 功能 11 的通信事件计数器。
11 获取通信事件计数器: MB_SERVER 使用内部通信事件计数器来记录发送到

Modbus 服务器的 Modbus 成功读取和写入请求次数。 该计数器不会因功能 8 或功能 11 请求而增加。 同时也不会因导致通信错误的任何请求而增加。

广播功能不能用于 Modbus TCP,因为在任何时刻仅存在一个客户端-服务器连接。

MB_SERVER 变量

下表给出了存储在 MB_SERVER 背景数据块中的公共静态变量(可在用户程序中使用)。

表格 12- 60 MB_SERVER 公共静态变量

变量 数据类型 默认值 说明
HR_Start_Offset Word 0 指定 Modbus 保持寄存器的起始地址
Request_Count Word 0 该服务器接收到的所有请求的数量。
Server_Message_Cou nt Word 0 该特定服务器接收到的请求的数量。
Xmt_Rcv_Count Word 0 出现错误的传输或接收的数量。 此外,如果接收到一条无效的 Modbus 消息,该值加 1。
Exception_Count Word 0 需要返回例外的 Modbus 特定错误数
Success_Count Word 0 该特定服务器接收到的没有协议错误的请求数量。
已连接 Bool 0 指示与所分配客户端的连接是已接通还是已断开: 1 = 接通,

0 = 断开

用户程序可以将值写入 HR_Start_Offset ,以控制 Modbus 服务器操作。 可读取其它变量以监视 Modbus 的状态。

HR_Start_Offset

Modbus 保持寄存器地址从 40001 开始。 这些地址与保持寄存器的 PLC 存储器起始地址对应。 不过,可以组态“HR_Start_Offset”变量,将 Modbus 保持寄存器的起始地址定义为除 40001 之外的其它值。

例如,如果保持寄存器被组态为起始于 MW100 并且长度为 100 个字。 偏移量 20 可指 定保持寄存器的起始地址为 40021 而不是 40001。低于 40021 和高于 40119 的任何地址都将导致寻址错误。

表格 12- 61 Modbus 保持寄存器寻址示例

HR_Start_Offset 地址 最小值 最大值
0 Modbus 地址(字) 40001 40099
S7-1200 地址 MW100 MW298
20 Modbus 地址(字) 40021 40119
S7-1200 地址 MW100 MW298

HR_Start_Offset 是一个字值,用于指定 Modbus 保持寄存器的起始地址,存储在

MB_SERVER 背景数据块中。 将 MB_SERVER 放入程序后,可利用参数助手下拉列表设置该公共静态变量值。

例如,将 MB_SERVER 放入 LAD 网络后,可以切换到先前的网络,并分配

HR_Start_Offset 值。 该值必须在执行 MB_SERVER 前分配。

S7-1200 可编程控制器 通信处理器-127 使用默认 DB 名称

输入 Modbus 服务器变量:

  1. S7-1200 可编程控制器 通信处理器-128 将光标放在参数字段中,然后输入 m 字符。
  2. 从 DB 名称的下拉列表中选择

“MB_SERVER_DB”。

  1. 从 DB 变量的下拉列表中选择

S7-1200 可编程控制器 通信处理器-129 “MB_SERVER_DB.HR_Start_Offset”。

表格 12- 62 MB_SERVER 执行条件代码 1

STATUS (W#16#) 发送到 Modbus 服务器的响应代码

(B#16#)

Modbus 协议错误
7001 MB_SERVER 正在等待 Modbus 客户端连接到指定的 TCP 端口。 仅在第一次执行连接或断开操作时才报告此代码。
7002 MB_SERVER 正在等待 Modbus 客户端连接到指定的 TCP 端口。 等待连接或断开操作完成时,将针对任何后续执行报告此代码。
7003 断开操作已成功完成(仅在一个 PLC 扫描周期内有效)。
8187 指向 MB_HOLD_REG 的指针无效: 区域太小
818C 指向优化的 MB_HOLD_REG 区(必须是标准 DB 区或 M 储存器区)的指针或受阻的过程超时超过 55 秒的限值。 (仅适用于 S7-1200)
8381 01 不支持此功能代码
8382 03 数据长度错误
8383 02 数据地址错误或访问的数据超出 MB_HOLD_REG 地址区的界限
8384 03 数据值错误
8385 03 不支持此数据诊断代码值(功能代码 08)

1 除了上面列出的 MB_SERVER 错误外,也可以从底层传输块通信指令(TCON、

TDISCON、TSEND 和 TRCV)返回错误。

参见

TCON、TDISCON、TSEND 和 TRCV (页 473)

MB_SERVER 示例: 多个 TCP 连接

可以拥有多个 Modbus TCP 服务器连接。 为此,必须为每个连接单独执行

MB_SERVER。 每个连接必须使用单独的背景数据块、连接 ID 和 IP 端口。 S7-1200 仅允许每个 IP 端口进行一个连接。

为达到最佳性能,每个连接的每次循环都必须执行 MB_SERVER。

程序段 1: 带有独立 IP_PORT、连接 ID 和背景数据块的 1 号连接

S7-1200 可编程控制器 通信处理器-130

程序段 2: 带有独立 IP_PORT、连接 ID 和背景数据块的 2 号连接

S7-1200 可编程控制器 通信处理器-131

MB_CLIENT 示例 1: 通过公共 TCP 连接发送多个请求

多个 Modbus 客户端请求可通过同一连接发送。 为此,必须使用相同的背景数据块、连接 ID 和端口号。

在任意给定时间,只能有一个客户端处于激活状态。 在一个客户端完成执行后,下一个客户端再开始执行。 执行顺序由您的程序负责指定。

以下示例显示的是对同一存储区执行写操作的两个客户端。 此外,还捕获了返回的错误,这是可选的。

程序段 1: Modbus 功能 1 - 读取 16 个输出映像位

S7-1200 可编程控制器 通信处理器-132

程序段 2: Modbus 功能 2 - 读取 32 个输入映像位

S7-1200 可编程控制器 通信处理器-133

MB_CLIENT 示例 2: 通过不同的 TCP 连接发送多个请求

Modbus 客户端请求可通过不同连接来发送。 为此,必须使用不同的背景数据块、IP 地址和连接 ID。

如要与同一 Modbus 服务器建立连接,端口号必须不同。 如果与不同的服务器建立连接,则端口号方面没有限制。

以下示例显示的是对同一存储区执行写操作的两个客户端。 此外,还捕获了返回的错误,这是可选的。

程序段 1:

Modbus 功能 4 - 读取(S7-1200 存储器中的)输入字

S7-1200 可编程控制器 通信处理器-134

程序段 2:

Modbus 功能 3 - 读取(S7-1200 存储器中的)保持寄存器字

S7-1200 可编程控制器 通信处理器-135

MB_CLIENT 示例 3: 输出映像写入请求

S7-1200 可编程控制器 通信处理器-136 此示例显示了 Modbus 客户端请求写入 S7-1200 输出映像。程序段 1: Modbus 功能 15 - 写入 S7-1200 输出映像位

MB_CLIENT 示例 4: 协调多个请求

必须确保各个 Modbus TCP 请求都完成执行。 此协调必须由程序提供。 下面示例显示了首个和第二个客户端请求的输出如何用于协调执行。

以下示例显示的是对同一存储区执行写操作的两个客户端。 此外,还捕获了返回的错误,这是可选的。

程序段 1: Modbus 功能 3 - 读取保持寄存器字

S7-1200 可编程控制器 通信处理器-137

程序段 2: Modbus 功能 3 - 读取保持寄存器字

S7-1200 可编程控制器 通信处理器-138

Modbus RTU

在 STEP 7 中可使用两个版本的 Modbus RTU 指令:

        • 版本 1 最初在 STEP 7 Basic V10.5 中提供。
        • 版本 2 在 STEP 7 Basic/Professional V11 中提供。 版本 2 将参数 REQ 和 DONE 添加到 MB_COMM_LOAD。 而且,MB_MASTER 和 MB_SLAVE 的 MB_ADDR 参数现在还允许一个 UInt 值以进行扩展寻址。

可以从兼容性和移植便利性方面考虑,选择将相应的指令版本插入用户程序中。

不要在同一 CPU 程序中同时使用 1.x 和 2.y 指令版本。 用户程序的 Modbus 指令必须具有相同的主版本号(1.x、2.y 或 V.z)。 主版本组内的各个指令可具有不同的次版本号

(1.x)。

S7-1200 可编程控制器 通信处理器-139 单击指令树任务卡上的图标可启用指令树的标题和列。

S7-1200 可编程控制器 通信处理器-140 要更改 Modbus 指令的版本,请从下拉列表中选择相应版本。 可以选择一组指令或分别选择各个指令。

使用指令树将 Modbus 指令放入程序时,将在项目树中创建新的 FB 实例。 在项目树的“PLC_x > 程序块 > 系统块 > 程序资源”(PLC_x > Program blocks > System blocks > Program resources) 下可看到新的 FB 实例。

要确认程序中 Modbus 指令的版本,必须检查项目树的属性而不是程序编辑器中显示的框的属性。 选择项目树的 Modbus FB 实例,单击右键,选择“属性”(Properties),然后选择

“信息”(Information) 页查看 Modbus 指令的版本号。

MB_COMM_LOAD

表格 12- 63 MB_COMM_LOAD 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-141 "MB_COMM_LOAD_DB"(

REQ:=_bool_in, PORT:=_uint_in_, BAUD:=_udint_in_, PARITY:=_uint_in_, FLOW_CTRL:=_uint_in_, RTS_ON_DLY:=_uint_in_, RTS_OFF_DLY:=_uint_in_, RESP_TO:=_uint_in_, DONE=>_bool_out, ERROR=>_bool_out_, STATUS=>_word_out_, MB_DB:=_fbtref_inout_);

MB_COMM_LOAD 指令可组态用于

Modbus RTU 协议通信的 PtP 端口。

Modbus 端口硬件选项: 最多安装三个

CM(RS485 或 RS232),及一个 CB

(R4845)。 将 MB_COMM_LOAD 指令放

入程序时自动分配背景数据块。

表格 12- 64 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 通过由低到高的(上升沿)信号启动操作。

(仅版本 2.0)

PORT IN Port 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常量”(System constants) 选项卡中分配。

BAUD IN UDInt 波特率选择:

300、600、1200、2400、4800、9600、19200、38400、

57600、76800、115200,其它所有值均无效

PARITY IN UInt 奇偶校验选择:

  • 0 – 无
  • 1 – 奇校验
  • 2 – 偶校验
参数和类型 数据类型 说明
FLOW_CTRL IN UInt 流控制选择:

  • 0 –(默认)无流控制
  • 1 – RTS 始终为 ON 的硬件流控制(不适用于 RS485 端口)
  • 2 - 带 RTS 切换的硬件流控制
RTS_ON_DLY IN UInt RTS 接通延时选择:

  • 0 –(默认)从 RTS 激活一直到传送消息的第一个字符之前无延时
  • 1 到 65535 – 从 RTS 激活一直到传送消息的第一个字符之前以毫秒表示的延时(不适用于 RS485 端口)。 不管

FLOW_CTRL 选择为何,都将应用 RTS 延时。

RTS_OFF_DLY IN UInt RTS 关断延时选择:

  • 0 –(默认)从传送最后一个字符一直到 RTS 转入非活动状态之前无延时
  • 1 到 65535 – 从传送最后一个字符一直到 RTS 转入非活动状态之前以毫秒表示的延时(不适用于 RS485 端口)。 不管

FLOW_CTRL 选择为何,都将应用 RTS 延时。

RESP_TO IN UInt 响应超时:

MB_MASTER 允许用于从站响应的时间(以毫秒为单位)。 如果从站在此时间段内未响应,MB_MASTER 将重试请求,或者在发送指定次数的重试请求后终止请求并提示错误。

5 ms 到 65535 ms(默认值 = 1000 ms)。

MB_DB IN Variant 对 MB_MASTER 或 MB_SLAVE 指令所使用的背景数据块的引用。 在用户的程序中放置 MB_SLAVE 或 MB_MASTER 后,该

DB 标识符将出现在 MB_DB 功能框连接的参数助手下拉列表

中。

DONE OUT Bool 上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫描周期时间。 (仅版本 2.0)
ERROR OUT Bool 上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间。 STATUS 参数中的错误代码值仅在 ERROR =

TRUE 的一个扫描周期内有效。

STATUS OUT Word 执行条件代码

可执行 MB_COMM_LOAD 来组态端口以使用 Modbus RTU 协议。 为使用 Modbus RTU

协议组态端口后,该端口只能由 MB_MASTER 或 MB_SLAVE 指令使用。

对用于 Modbus 通信的每个通信端口,都必须执行一次 MB_COMM_LOAD 来组态。 为要使用的每个端口分配一个唯一的 MB_COMM_LOAD 背景数据块。 最多可在 CPU 中安装三个通信模块(RS232 或 RS485)和一个通信板 (RS485)。 从启动 OB 调用

MB_COMM_LOAD 并执行它一次,或使用 第一个扫描系统标记 (页 85)发起调用以执行它一次。 只有在必须更改波特率或奇偶校验等通信参数时,才再次执行MB_COMM_LOAD。

将 MB_MASTER 或 MB_SLAVE 指令放入用户程序中时,将为其分配背景数据块。 指定

MB_COMM_LOAD 指令的 MB_DB 参数时将引用该背景数据块。

MB_COMM_LOAD 数据块变量

下表给出存储在 MB_COMM_LOAD 的背景数据块中的公共静态变量(可在用户程序中使用)。

表格 12- 65 背景数据块中的静态变量

变量 数据类型 说明
ICHAR_GAP Word 字符间隙延时。 此参数以毫秒为单位指定,用于增加预期的接收字符间的时间量。 与此参数对应的位时间个数加到 Modbus 默认的 35

个位时间(3.5 个字符时间)。

RETRIES Word 主站在返回无响应错误代码 0x80C8 之前的重试次数。

表格 12- 66 MB_COMM_LOAD 执行条件代码 1

STATUS (W#16#) 说明
0000 无错误
8180 端口 ID 值无效(通信模块的端口/硬件标识符错误)
8181 波特率值无效
8182 奇偶校验值无效
8183 流控制值无效
8184 响应超时值无效(响应超时小于最小值 5 ms)
8185 MB_DB 参数不是 MB_MASTER 或 MB_SLAVE 指令的背景数据块。

1 除了上述列出的 MB_COMM_LOAD 错误,还可能返回底层 PtP 通信指令的错误。

参见

点对点指令 (页 610)

MB_MASTER

表格 12- 67 MB_MASTER 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-142 "MB_MASTER_DB"(

REQ:=_bool_in_, MB_ADDR:=_uint_in_, MODE:=_usint_in_, DATA_ADDR:=_udint_in_, DATA_LEN:=_uint_in_, DONE=>_bool_out_, BUSY=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, DATA_PTR:=_variant_inout_);

MB_MASTER 指令作为 Modbus 主站利用之前执行 MB_COMM_LOAD 指令组态的端口进行通信。 将 MB_MASTER 指令放入程序时自动分配背景数据块。 指定

MB_COMM_LOAD 指令的 MB_DB 参数时将使用该 MB_MASTER 背景数据块。

表格 12- 68 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 0 = 无请求

1 = 请求将数据传送到 Modbus 从站

MB_ADDR IN V1.0: USInt Modbus RTU 站地址:
V2.0: UInt 标准寻址范围(1 到 247)
扩展寻址范围(1 到 65535)
值 0 被保留用于将消息广播到所有 Modbus 从站。 只有
Modbus 功能代码 05、06、15 和 16 是可用于广播的功能代
码。
MODE IN USInt 模式选择: 指定请求类型(读、写或诊断)。 请参见下面的

Modbus 功能表了解详细信息。

DATA_ADDR IN UDInt 从站中的起始地址: 指定要在 Modbus 从站中访问的数据的起始地址。 请参见下面的 Modbus 功能表了解有效地址信息。
DATA_LEN IN UInt 数据长度: 指定此请求中要访问的位数或字数。 请参见下面的

Modbus 功能表了解有效长度信息。

参数和类型 数据类型 说明
DATA_PTR IN Variant 数据指针: 指向要写入或读取的数据的 M 或 DB 地址(标准

DB 类型)。

DONE OUT Bool 上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫描周期时间。
BUSY OUT Bool
  • 0 – 无正在进行的 MB_MASTER 操作
  • 1 – MB_MASTER 操作正在进行
ERROR OUT Bool 上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间。 STATUS 参数中的错误代码值仅在 ERROR =

TRUE 的一个扫描周期内有效。

STATUS OUT Word 执行条件代码
Modbus 主站通信规则
          • 必须先执行 MB_COMM_LOAD 组态端口,然后 MB_MASTER 指令才能与该端口通信。
          • 如果要将某个端口用于初始化 Modbus 主站的请求,则 MB_SLAVE 不应使用该端口。 MB_MASTER 执行的一个或多个实例可使用该端口,但是对于该端口,所有

MB_MASTER 执行都必须使用同一个 MB_MASTER 背景数据块。

          • Modbus 指令不使用通信中断事件来控制通信过程。 用户程序必须轮询

MB_MASTER 指令以了解传送和接收的完成情况。

          • 建议对于给定的端口,从程序循环 OB 中调用所有 MB_MASTER 执行。Modbus 主站指令只能在一个程序循环或循环/延时执行等级执行。 它们不能同时在两种执行优先级中执行。 如果一个 Modbus 主站指令被另一个执行优先级更高的 Modbus 主站取代,将导致不正确的操作。 Modbus 主站指令不能在启动、诊断或时间错误执行优先级执行。
          • 主站指令启动传输后,必须连续执行已启用 EN 输入的该实例直到返回状态 DONE=1 或状态 ERROR=1 为止。 在这两个事件其中之一发生前,一个特殊的 MB_MASTER 实例被视为已激活。 原始实例激活后,调用已启用 REQ 输入的其它任何实例都将导致错误。 如果原始实例的连续执行过程停止,则请求状态保持激活一段时间,该时间由静态变量 Blocked_Proc_Timeout 指定。 一旦超出该时间段,则下一个使用激活的

REQ 输入调用的主站指令成为激活实例。 这可以防止单个 Modbus 主站指令独占或锁定对端口的访问。 如果在由静态变量“Blocked_Proc_Timeout”指定的时间段内没有启用原始激活的实例,则下次执行此实例(未设置 REQ)时将清除激活状态。 如果设置了 REQ,则此次执行将启动新的主站请求,如同其它实例未曾激活一样。

REQ 参数

0 = 无请求;1 = 请求将数据传送到 Modbus 从站

可使用电平或边沿触发的触点控制此输入。 只要此输入启用,状态机便会启动,以确保在当前请求完成前不允许使用同一背景数据块的任何其它 MB_MASTER 发出请求。 在当前请求执行期间,将捕获所有其它输入状态并内部保存,直到接收到响应或检测到错误。

如果在当前请求完成前 REQ 输入 = 1,从而再次执行 MB_MASTER 的同一实例,则不会进行任何后续传送。 但是,如果当前请求已完成,因为 REQ 输入 = 1 而再次执行

MB_MASTER 时,便会发出新请求。

DATA_ADDR 和 MODE 参数用于选择 Modbus 功能类型

DATA_ADDR(从站中的 Modbus 起始地址): 指定要在 Modbus 从站中访问的数据的起始地址。

MB_MASTER 指令使用 MODE 输入而非功能代码输入。 MODE 和 Modbus 地址一起确定实际 Modbus 消息中使用的功能代码。 下表列出了 MODE 参数、Modbus 功能代码和Modbus 地址范围之间的对应关系。

表格 12- 69 Modbus 功能

MODE Modbus

功能

数据长度 操作和数据 Modbus

地址

0 01 1 到 2000

1 到 1992 1

读取输出位:

每个请求 1 到 1992 或 2000 个位

1 到 9999
0 02 1 到 2000

1 到 1992 1

读取输入位:

每个请求 1 到 1992 或 2000 个位

10001 到 19999
0 03 1 到 125

1 到 124 1

读取保持寄存器:

每个请求 1 到 124 或 125 个字

40001 到 49999 或

400001 到 465535

0 04 1 到 125

1 到 124 1

读取输入字:

每个请求 1 到 124 或 125 个字

30001 到 39999
1 05 1 写入一个输出位: 每个请求 1 个位 1 到 9999
1 06 1 写入一个保持寄存器: 每个请求 1 个字 40001 到 49999 或

400001 到 465535

1 15 2 到 1968

2 到 1960 1

写入多个输出位:

每个请求 2 到 1960 或 1968 个位

1 到 9999
MODE Modbus

功能

数据长度 操作和数据 Modbus

地址

1 16 2 到 123

2 到 122 1

写入多个保持寄存器:

每个请求 2 到 122 或 123 个字

40001 到 49999 或

400001 到 465535

2 15 1 到 1968

2 到 1960 1

写入一个或多个输出位:

每个请求 1 到 1960 或 1968 个位

1 到 9999
2 16 1 到 123

1 到 122 1

写入一个或多个保持寄存器: 每个请求 1 到 122 或 123 个字 40001 到 49999 或

400001 到 465535

11 11 0 读取从站通信状态字和事件计数器。 状态字指示忙闲情况(0 – 不忙,0xFFFF - 忙)。 每成功完成一条消息,事件计数器的计数值递增。

对于该功能,MB_MASTER 的 DATA_ADDR 和

DATA_LEN 操作数都将被忽略。

80 08 1 利用数据诊断代码 0x0000 检查从站状态(回送测试 - 从站回送请求)

每个请求 1 个字

81 08 1 利用数据诊断代码 0x000A 重新设置从站事件计数器

每个请求 1 个字

3 到

10、

12 到

79、

82 到

255

保留

1 对于“扩展寻址”模式,根据功能所使用的数据类型,数据的最大长度将减小 1 个字节或 1 个字。

DATA_PTR 参数

DATA_PTR 参数指向要写入或读取的 DB 或 M 地址。 如果使用数据块,则必须创建一个全局数据块为读写 Modbus 从站提供数据存储位置。

说明

DATA_PTR 数据块类型必须允许直接寻址

该数据块必须允许直接(绝对)寻址和符号寻址。 创建该数据块时,必须选择“标准”(Standard) 访问属性。

DATA_PTR 参数的数据块结构

这些数据类型对 Modbus 地址 30001 到 39999、40001 到 49999 和 400001 到

465536 的字读取有效,对 Modbus 地址 40001 到 49999 和 400001 到 465536 的字写入也有效。

WORD、UINT 或 INT 数据类型的标准数组

指定的 WORD、UINT 或 INT 结构,其中每个元素都具有唯一的名称和 16 位数据类型。

指定的复杂结构,其中每个元素都具有唯一的名称以及 16 或 32 位数据类型。

用于 Modbus 地址 00001 到 09999 的位读取和写入和 10001 到 19999 的位读取。

布尔数据类型的标准数组。

具有唯一名称的布尔变量的指定布尔结构。

尽管不是必需的,但还是建议每个 MB_MASTER 指令都具有各自的单独存储区。 此建议的原因在于,如果多个 MB_MASTER 指令读取和写入同一个存储区,发生数据损坏的可能性会更大。

不要求 DATA_PTR 数据区位于同一个全局数据块中。 可创建一个具有多个区域的数据块供 Modbus 读取、一个数据块供 Modbus 写入或一个数据块用于各个从站。

Modbus 主站数据块变量

下表给出存储在 MB_MASTER 的背景数据块中的公共静态变量(可在用户程序中使用)。

表格 12- 70 背景数据块中的静态变量

变量 数据类型 初始值 说明
Blocked_Proc

_Timeout

Real 3.0 在 Modbus 主站实例受阻后,移除该激活的实例前需等待的时间

(秒)。 例如,当已发出主站请求,但程序在彻底完成该请求前停

止调用该主站功能时,就会出现这种情况。 时间值必须大于 0 且小于 55 秒,否则发生错误。 默认值为 .5 秒。

Extended_Ad dressing Bool False 组态单字节或双字节从站寻址。 默认值 = 0。

(0= 单字节地址、1= 双字节地址)

用户程序可以将值写入 Blocked_Proc_Timeout 和 Extended_Addressing 变量,以控制Modbus 主站操作。 有关如何在程序编辑器中使用这些变量的示例以及有关 Modbus 扩展寻址的详细信息,请参见 HR_Start_Offset 和 Extended_Addressing 的 MB_SLAVE 主题说明 (页 701)。

条件代码

表格 12- 71 MB_MASTER 执行条件代码(通信和组态错误)1

STATUS (W#16#) 说明
0000 无错误
80C8 从站超时。 检查波特率、奇偶校验和从站的接线。
80D1 接收方发出了暂停主动传输的流控制请求并且在指定的等待时间内未重新激活该传输。

在硬件流控制期间,如果接收方在指定的等待时间内没有声明 CTS,也会产生该错误。

80D2 传送请求中止,因为没有从 DCE 收到任何 DSR 信号。
80E0 因接收缓冲区已满,消息被终止。
80E1 因出现奇偶校验错误,消息被终止。
80E2 因组帧错误,消息被终止。
80E3 因出现超限错误,消息被终止。
80E4 因指定长度超出总缓冲区大小,消息被终止。
8180 无效端口 ID 值或 MB_COMM_LOAD 指令出错
8186 Modbus 站地址无效
8188 指定给广播请求的模式无效
8189 数据地址值无效
818A 数据长度值无效
818B 指向本地数据源/目标的指针无效: 大小不正确
818C DATA_PTR 的指针无效或 Blocked_Proc_Timeout 无效: 数据区必须是 DB(允许符号访问和直接访问)或 M 存储器。
8200 端口正忙于处理传送请求。

表格 12- 72 MB_MASTER 执行条件代码(Modbus 协议错误)1

STATUS (W#16#) 从站的响应代码 Modbus 协议错误
8380 - CRC 错误
8381 01 不支持此功能代码
8382 03 数据长度错误
8383 02 数据地址错误或地址超出 DATA_PTR 区的有效范围
8384 大于 03 数据值错误
8385 03 不支持此数据诊断代码值(功能代码 08)
8386 - 响应中的功能代码与请求中的代码不匹配。
8387 - 响应的从站错误
8388 - 从站对写请求的响应不正确。 从站返回的写请求与主站实际发送的写请求不匹配。

1 除了上述列出的 MB_MASTER 错误,还可能返回底层 PtP 通信指令的错误。

参见

点对点指令 (页 610)

MB_SLAVE

表格 12- 73 MB_SLAVE 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-143 "MB_SLAVE_DB"(

MB_ADDR:=_uint_in_, NDR=>_bool_out_, DR=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, MB_HOLD_REG:=_variant_inout_);

MB_SLAVE 指令允许用户程序作为

Modbus 从站通过 CM(RS485 或RS232)和 CB (RS485) 上的 PtP 端口进行通信。 远程 Modbus RTU 主站发

出请求时,用户程序会通过执行

MB_SLAVE 进行响应。 STEP 7 在插入
指令时自动创建背景数据块。 在为
MB_COMM_LOAD 指令指定 MB_DB 参

数时使用此 MB_SLAVE_DB 名称。

表格 12- 74 参数的数据类型

参数和类型 数据类型 说明
MB_ADDR IN V1.0: USInt V2.0: UInt Modbus 从站的站地址: 标准寻址范围(1 到 247)

扩展寻址范围(0 到 65535)

MB_HOLD_REG IN Variant 指向 Modbus 保持寄存器 DB 的指针: Modbus 保持寄存器可以是 M 存储器或数据块。
NDR OUT Bool 新数据就绪:

  • 0 – 无新数据
  • 1 – 表示 Modbus 主站已写入新数据
DR OUT Bool 数据读取:

  • 0 – 无数据读取
  • 1 – 表示 Modbus 主站已读取数据
ERROR OUT Bool 上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间。 如果执行因错误而终止,则 STATUS 参数的错误代码值仅在 ERROR = TRUE 的一个扫描周期

内有效。

STATUS OUT Word 执行错误代码

Modbus 通信功能代码(1、2、4、5 和 15)可以在 CPU 的输入过程映像及输出过程映像中直接读写位和字。 对于这些功能代码,MB_HOLD_REG 参数必须定义为大于一个字节的数据类型。 下表给出了 Modbus 地址与 CPU 过程映像的映射示例。

表格 12- 75 Modbus 地址到过程映像的映射

Modbus 功能 S7-1200
代码 功能 数据区 地址范围 数据区 CPU 地址
01 读位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7
02 读位 输入 10001 18192 输入过程映像 I0.0 到 I1023.7
04 读字 输入 30001 30512 输入过程映像 IW0 到 IW1022
05 写位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7
15 写位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7

Modbus 通信功能代码(3、6、16)使用 Modbus 保持寄存器,该寄存器可以是 M 存储器地址范围或数据块。 保持寄存器的类型由 MB_SLAVE 指令的 MB_HOLD_REG 参数指定。

说明

MB_HOLD_REG 数据块类型

Modbus 保持寄存器数据块必须允许直接(绝对)寻址和符号寻址。 创建该数据块时,必须选择“标准”(Standard) 访问属性。

下表给出了 Modbus 地址到保持寄存器的映射示例,这种映射用于 Modbus 功能代码 03

(读取字)、06(写入字)和 16(读取字)。 DB 地址的实际上限取决于每种 CPU 型号的最大工作存储器限值和 M 存储器限值。

表格 12- 76 Modbus 地址到 CPU 存储器的映射

Modbus 主站地址 MB_HOLD_REG 参数示例
MW100 DB10.DBw0 MW120 DB10.DBW50 "Recipe".ingredient
40001 MW100 DB10.DBW0 MW120 DB10.DBW50 "Recipe".ingredient[1]
40002 MW102 DB10.DBW2 MW122 DB10.DBW52 "Recipe".ingredient[2]
40003 MW104 DB10.DBW4 MW124 DB10.DBW54 "Recipe".ingredient[3]
40004 MW106 DB10.DBW6 MW126 DB10.DBW56 "Recipe".ingredient[4]
40005 MW108 DB10.DBW8 MW128 DB10.DBW58 "Recipe".ingredient[5]

表格 12- 77 诊断功能

S7-1200 MB_SLAVE Modbus 诊断功能
代码 子功能 说明
08 0000H 返回查询数据回送测试: MB_SLAVE 将向 Modbus 主站回送接收到的数据字。
08 000AH 清除通信事件计数器: MB_SLAVE 将清除用于 Modbus 功能 11 的通信事件计数器。
11 获取通信事件计数器: MB_SLAVE 使用内部通信事件计数器来记录发送到

Modbus 从站的 Modbus 成功读取和写入请求次数。 该计数器不会因功能

8、功能 11 或广播请求而增加。 同样也不会因任何导致通信错误(例如, 奇偶校验错误或 CRC 错误)的请求而增加。

MB_SLAVE 指令支持来自任何 Modbus 主站的广播写请求,只要该请求是用于访问有效地址的请求即可。 对于广播不支持的功能代码,MB_SLAVE 将生成错误代码 0x8188。

Modbus 从站通信规则
          • 必须先执行 MB_COMM_LOAD 组态端口,然后 MB_SLAVE 指令才能通过该端口通信。
          • 如果某个端口作为从站响应 Modbus 主站,则请勿使用 MB_MASTER 指令对该端口进行编程。
          • 对于给定端口,只能使用一个 MB_SLAVE 实例,否则将出现不确定的行为。
          • Modbus 指令不使用通信中断事件来控制通信过程。 用户程序必须通过轮询

MB_SLAVE 指令以了解传送和接收的完成情况来控制通信过程。

          • MB_SLAVE 指令必须以一定的速率定期执行,以便能够及时响应来自 Modbus 主站的进入请求。 建议每次扫描时都从程序循环 OB 执行 MB_SLAVE。也可以从循环中 断 OB 执行 MB_SLAVE,但并不建议这么做,因为中断例程的延时过长可能会暂时阻止其它中断例程的执行。
Modbus 定时信号

必须周期性执行 MB_SLAVE,才能接收来自 Modbus 主站的每个请求并随之按要求响应。 MB_SLAVE 的执行频率取决于 Modbus 主站的响应超时时间。 下图对此进行了说明。

$'5 )&

'DWD

&5&

◶⾽

庮㜟㜟朝

ὤ䰂⓺愪

ῷ䰂⓺愪

庠⫴

朝枽 = 3.5 ὓⲀ䱏㜟朝

◶⾽

〟愈㜟朝 $'5 )&

'DWD

庠⫴

&5& 朝 枽

$'5

响应超时时间 RESP_TO 是 Modbus 主站等待 Modbus 从站开始响应的时间。 该时间段不是由 Modbus 协议定义的,而是属于每个 Modbus 主站的一个参数。 必须基于用户

Modbus 主站的具体参数确定 MB_SLAVE 的执行频率(相邻两次执行之间的时间)。 在

&5&

Modbus 主站的响应超时时间内至少应执行两次 MB_SLAVE。

Modbus 从站变量

下表给出了存储在 MB_SLAVE 背景数据块(可在用户程序中使用)中的公共静态变量。

表格 12- 78 Modbus 从站变量

变量 数据类型 说明
HR_Start_Offset Word 指定 Modbus 保持寄存器的起始地址(默认值 = 0)
Extended_Addressing Bool 组态单字节或双字节从站寻址

(0= 单字节地址、1= 双字节地址、默认 = 0)

Request_Count Word 该从站接收到的所有请求的数量
Slave_Message_Cou nt Word 该特定从站接收到的请求的数量
Bad_CRC_Count Word 接收到的具有 CRC 错误的请求的数量
Broadcast_Count Word 接收到的广播请求的数量
Exception_Count Word 需要返回例外的 Modbus 特定错误数
Success_Count Word 该特定从站接收到的没有协议错误的请求数量

程序可以将值写入 HR_Start_Offset 和 Extended_Addressing 变量以控制 Modbus 从站操作。 可读取其它变量以监视 Modbus 的状态。

HR_Start_Offset

Modbus 保持寄存器的地址以 40001 或 400001 开始。这些地址与保持寄存器的 PLC 存储器起始地址对应。 不过,可以组态“HR_Start_Offset”变量,将 Modbus 保持寄存器的起始地址定义为除 40001 或 400001 之外的其它值。

例如,如果保持寄存器被组态为起始于 MW100 并且长度为 100 个字。 偏移量 20 可指定保持寄存器的起始地址为 40021 而不是 40001。低于 40021 和高于 400119 的任何地址都将导致寻址错误。

表格 12- 79 Modbus 保持寄存器寻址示例

HR_Start_Offset 地址 最小值 最大值
0 Modbus 地址(字) 40001 40099
S7-1200 地址 MW100 MW298
20 Modbus 地址(字) 40021 40119
S7-1200 地址 MW100 MW298

HR_Start_Offset 是一个字值,用于指定 Modbus 保持寄存器的起始地址,存储在

MB_SLAVE 背景数据块中。 将 MB_SLAVE 放入程序后,可利用参数助手下拉列表设置该公共静态变量值。

例如,将 MB_SLAVE 放入 LAD 程序段后,可以切换到先前的程序段,分配

HR_Start_Offset 值。 该值必须在执行 MB_SLAVE 前分配。

S7-1200 可编程控制器 通信处理器-144 使用默认 DB 名称输入 Modbus 从站变量:

  1. 将光标放在参数字段中,然后输入 m 字符。
  2. S7-1200 可编程控制器 通信处理器-145 从下拉列表中选择“MB_SLAVE_DB”。
  3. 将光标放在 DB 名称的右侧(引号字符的后面),然后输入句点字符。
  4. 从下拉列表中选择

S7-1200 可编程控制器 通信处理器-146 “MB_SLAVE_DB.HR_Start_Offset”。

Extended_Addressing

Extended_Addressing 变量的访问方式与上述的 HR_Start_Offset 参考相似,只是

Extended_Addressing 变量是布尔值。 布尔值必须通过输出线圈(不是移动框)写入。

Modbus 从站寻址可组态为单字节(Modbus 标准方式)或双字节。 扩展寻址用于对单一网络内超过 247 台设备进行寻址。 选择扩展寻址后,最多可以对 64000 个地址进行寻址。 下面以 Modbus 功能 1 的帧为例进行显示。

表格 12- 80 单字节从站地址(字节 0)

功能 1 字节 0 字节 1 字节 2 字节 3 字节 4 字节 5
请求 从站地址 F 代码 起始地址 线圈长度
有效响应 从站地址 F 代码 长度 线圈数据
错误响应 从站地址 0x81 E 代码

表格 12- 81 双字节从站地址(字节 0 和字节 1)

字节 0 字节 1 字节 2 字节 3 字节 4 字节 5 字节 6
请求 从站地址 F 代码 起始地址 线圈长度
有效响应 从站地址 F 代码 长度 线圈数据
错误响应 从站地址 0x81 E 代码
条件代码

表格 12- 82 MB_SLAVE 执行条件代码(通信和组态错误)1

STATUS (W#16#) 说明
80D1 接收方发出了暂停主动传输的流控制请求并且在指定的等待时间内未重新激活该传输。

在硬件流控制期间,如果接收方在指定的等待时间内没有声明 CTS,也会产生该错误。

80D2 传送请求中止,因为没有从 DCE 收到任何 DSR 信号。
80E0 因接收缓冲区已满,消息被终止。
80E1 因出现奇偶校验错误,消息被终止。
80E2 因组帧错误,消息被终止。
80E3 因出现超限错误,消息被终止。
80E4 因指定长度超出总缓冲区大小,消息被终止。
8180 无效端口 ID 值或 MB_COMM_LOAD 指令出错
8186 Modbus 站地址无效
8187 指向 MB_HOLD_REG DB 的指针无效: 区域太小
818C 指向 M 存储器或 DB(DB 区域必须允许符号地址和直接地址)的

MB_HOLD_REG 指针无效

表格 12- 83 MB_SLAVE 执行条件代码(Modbus 协议错误)1

STATUS (W#16#) 从站的响应代码 Modbus 协议错误
8380 无响应 CRC 错误
8381 01 不支持功能代码或在广播内不支持
STATUS (W#16#) 从站的响应代码 Modbus 协议错误
8382 03 数据长度错误
8383 02 数据地址错误或地址超出 DATA_PTR 区的有效范围
8384 03 数据值错误
8385 03 不支持此数据诊断代码值(功能代码 08)

1 除了上述列出的 MB_SLAVE 错误,还可能返回底层 PtP 通信指令的错误。

参见

点对点指令 (页 610)

Modbus RTU 主站示例程序

启动期间通过第一个扫描标志启用 MB_COMM_LOAD。 通过此方式执行

S7-1200 可编程控制器 通信处理器-147 MB_COMM_LOAD 时,必须保证串口组态在运行时不会更改。程序段 1 仅在第一次扫描期间初始化一次 RS485 模块参数。

在程序循环 OB 中使用一个 MB_MASTER 指令,以与单个从站进行通信。 要与其它从站通信,可在程序循环 OB 中使用另外的 MB_MASTER 指令,也可以重新使用一个MB_MASTER FB。

网络 2 从从站保持寄存器读取 100 个字。

S7-1200 可编程控制器 通信处理器-148

网络 3 这是一个可选网络,仅显示读操作完成后前 3 个字的值。

S7-1200 可编程控制器 通信处理器-149

网络 4 将 64 个位写入起始于从站地址 Q2.0 的输出映像寄存器。

S7-1200 可编程控制器 通信处理器-150

Modbus RTU 从站示例程序

每次启用“Tag_1”启用时,初始化下面显示的 MB_COMM_LOAD。

通过此方式执行 MB_COMM_LOAD 时,必须保证串口组态在运行时会根据 HMI 配置进行更改。

程序段 1 每次 HMI 设备更改 RS485 模块参数时,都会初始化该参数。

S7-1200 可编程控制器 通信处理器-151

下面显示的 MB_SLAVE 置于每 10 ms 执行一次的循环 OB 中。 尽管这样不会使从站的绝对响应速度达到最快,但却可使短消息(在请求中占 20 字节或更低)达到 9600 波特的良好性能。

程序段 2 每次扫描期间检查 Modbus 主站请求。 Modbus 保持寄存器被组态为 100 个字

(从 MW1000 开始)。

S7-1200 可编程控制器 通信处理器-152

采用 CP 1242-7 的遥控和远程服务

连接到 GSM 网络

通过 GPRS 且基于 IP 的 WAN 通信

可以使用 CP 1242-7 通信处理器将 S7-1200 连接到 GSM 网络。 使用 CP 1242-7 可以实现远程站与控制中心的 WAN 通信,以及站间通信。

站间通信只能通过 GSM 网络实现。 要在远程站和控制室之间进行通信,控制中心必须具备可以访问 Internet 的 PC。

CP 1242-7 支持通过 GSM 网络的以下通信服务:

        • GPRS(General Packet Radio Service,通用分组无线服务) 通过 GSM 网络处理用于数据传输“GPRS”且面向数据包的服务。
        • SMS(Short Message Service,短消息服务)

CP 1242-7 可以接收和发送 SMS 消息。 通信伙伴可以是移动电话或 S7-1200。CP 1242-7 适用于世界各地的工业行业,支持以下频段:

        • 850 MHz
        • 900 MHz
        • 1800 MHz
        • 1900 MHz
要求

站或控制中心使用的设备取决于具体的应用。

        • 要与中央控制室通信或者要通过中央控制室进行通信,控制中心需要具备可以访问

Internet 的 PC。

        • 除站设备之外,具有 CP 1242-7 的远程 S7-1200 站必须满足以下要求才能通过 GSM

网络进行通信:

          • 与相应的 GSM 网络供应商签订了合约

如果使用 GPRS,合约必须允许使用 GPRS 服务。

如果存在仅通过 GSM 网络的站间直接通信,则 GSM 网络供应商必须给 CP 分配固定 IP 地址。 在这种情况下,站间通信不经过控制中心。

          • 合约中包含 SIM 卡

SIM 卡已插入 CP 1242-7 中。

          • 可在站范围内本地使用 GSM 网络

12.6.2 CP 1242-7 的应用

CP 1242-7 可用于以下应用:

遥控应用
  • 通过 SMS 发送消息

通过 CP 1242-7,远程 S7-1200 站的 CPU 可以接收来自 GSM 网络的 SMS 消息,或者通过 SMS 向已组态的移动电话或 S7-1200 发送消息。

  • 与控制中心的通信

远程 S7-1200 站通过 GSM 网络和 Internet 与主站中的遥控服务器进行通信。 要使用

GPRS 进行数据传送,需在主站中的遥控服务器上安装“TELECONTROL SERVER

BASIC”应用程序。 遥控服务器使用集成的 OPC 服务器功能与上层中央控制系统通信。

  • S7-1200 站之间通过 GSM 网络进行通信

可以用两种不同的方式处理配有 CP 1242-7 的远程站之间的通信:

    • 通过主站进行站间通信

在该组态情况下,互相通信的 S7-1200 站与遥控服务器间的永久安全连接在主站中建立。 各个站通过遥控服务器通信。 CP 1242-7 在“Telecontrol”模式下运行。

    • 站间直接通信

若要各个站直接进行通信而不经由主站迂回通信,可以使用具有固定 IP 地址的SIM 卡使得站可以直接互相寻址。 可能的通信服务和安全功能(例如 VPN)取决于网络供应商所提供的服务。 CP 1242-7 在“GPRS 直连”模式下运行。

通过 GPRS 实现 TeleService

可以通过 GSM 网络和 Internet 在装有 STEP 7 的工程师站与具有 CP 1242-7 的远程S7-1200 站间建立 TeleService 连接。 连接从工程师站通过用于中转帧和建立授权的遥控服务器或 TeleService 网关向外延伸。 这些 PC 使用“TELECONTROL SERVER BASIC”应用程序的功能。

可以将 TeleService 连接用于以下方面:

      • 将组态或程序数据由 STEP 7 项目下载到工作站。
      • 查询工作站中的诊断数据

CP 的其它属性

CP 1242-7 的其它服务和功能
        • 通过 Internet 执行 CP 的日时钟同步可以按照以下方法设置 CP 的时间:
          • 在“Telecontrol”模式下,由遥控服务器传送日时钟。 CP 使用该时间来设置其自身的时间。
          • 在“GPRS 直接”模式下,CP 可通过 SNTP 请求时间。为同步 CPU 时间,可以用块从 CP 读出当前时间。
        • 在存在连接问题时临时缓冲要发送的消息
        • 由于可以选择连接到备用遥控服务器而增强的可用性
        • 优化的数据量(临时连接)

除与远程控制服务器建立永久连接的方式外,还可以在 STEP 7 中使用与远程控制服务器建立的临时连接来组态 CP。这种情况下,仅在需要时建立与遥控服务器的连接。

        • 记录数据量

记录已传送的数据量,并根据特定需要进行评估。

组态和模块替换

要组态该模块,需要以下组态工具:

STEP 7 版本 V11.0 SP1 或更高版本

对于 STEP 7 V11.0 SP1,还需要支持包“CP 1242-7”(HSP0003001)。

要使用 GPRS 传输过程数据,请在相应站的用户程序中使用遥控指令。

CP 1242-7 的组态数据存储在本地 CPU 中。 这样就可以在必要时方便地替换 CP。

每个 S7-1200 中最多可插入三个 CP 1242-7 类型的模块。这样便可建立冗余通信路径。

电气连接
  • CP 1242-7 的电源

CP 具有一个用来外接 24 VDC 电源的独立连接器。

  • GSM 网络的无线接口

GSM 通信需要另外使用天线。 这通过 CP 的 SMA 插座进行连接。

更多信息

CP 1242-7 手册包含详细信息。 您可以在 Internet 的西门子工业自动化客户支持页面上找到该手册,相应的条目 ID 如下:

42330276 (http://support.automation.siemens.com/WW/view/zh/42330276)

附件

ANT794-4MR GSM/GPRS 天线

以下天线可以在 GSM/GPRS 网络中使用,并且可以安装在室内和室外:

        • S7-1200 可编程控制器 通信处理器-153 四频天线 ANT794-4MR

图 12-1 ANT794-4MR GSM/GPRS 天线

简称 订货号 说明
ANT794-4MR 6NH9 860-1AA00 四 频 天 线 (900 、 1800/1900 MHz, UMTS);防风雨,可在室内和室外使用;天线永久连接 5 m 连接电缆;SMA 连接器(包

括安装支架、螺钉、墙用插头)

  • 平面天线 ANT794-3M

S7-1200 可编程控制器 通信处理器-154 S7-1200 可编程控制器 通信处理器-155 S7-1200 可编程控制器 通信处理器-156 S7-1200 可编程控制器 通信处理器-157 S7-1200 可编程控制器 通信处理器-158 S7-1200 可编程控制器 通信处理器-159 S7-1200 可编程控制器 通信处理器-160 S7-1200 可编程控制器 通信处理器-161 S7-1200 可编程控制器 通信处理器-162 S7-1200 可编程控制器 通信处理器-163 S7-1200 可编程控制器 通信处理器-164 S7-1200 可编程控制器 通信处理器-165

图 12-2 平面天线 ANT794-3M

简称 订货号 说明
ANT794-3M 6NH9 870-1AA00 平面天线(900、1800/1900 MHz);防风雨,可在室内和室外使用;天线永久连接 1.2 m 连接电缆;SMA 连接器(包括粘板),可

使用螺钉安装

天线必须单独订购。

更多信息

有关详细信息,请参见设备手册。 您可以在 Internet 的西门子工业自动化客户支持页面上找到该手册,相应的条目 ID 如下:

23119005 (http://support.automation.siemens.com/WW/view/zh/23119005)

遥控组态示例

下文针对配有 CP 1242-7 的站提供了几个组态示例。

通过 SMS 发送消息

S7-1200 可编程控制器 通信处理器-166 S7-1200 可编程控制器 通信处理器-167 S7-1200 可编程控制器 通信处理器-168 S7-1200 可编程控制器 通信处理器-169 S7-1200 可编程控制器 通信处理器-170 S7-1200 可编程控制器 通信处理器-171

*356

䬤⏑䙞崆

盤㌿ 37̱l200 䰂盥

⊠㠲 #0?l242̱7䞭 37̱l200

图 12-3 通过 SMS 从 S7-1200 站发送消息

配有 CP 1242-7 的 SIMATIC S7-1200 可以通过 SMS 向移动电话或已组态的 S7-1200 站发送消息。

通过控制中心进行遥控

图 12-4 S7-1200 站与控制中心之间的通信

S7-1200 可编程控制器 通信处理器-172 S7-1200 可编程控制器 通信处理器-173 S7-1200 可编程控制器 通信处理器-174 S7-1200 可编程控制器 通信处理器-175 S7-1200 可编程控制器 通信处理器-176 S7-1200 可编程控制器 通信处理器-177 S7-1200 可编程控制器 通信处理器-178 S7-1200 可编程控制器 通信处理器-179 S7-1200 可编程控制器 通信处理器-180 S7-1200 可编程控制器 通信处理器-181 S7-1200 可编程控制器 通信处理器-182 S7-1200 可编程控制器 通信处理器-183 S7-1200 可编程控制器 通信处理器-184 S7-1200 可编程控制器 通信处理器-185 S7-1200 可编程控制器 通信处理器-186 S7-1200 可编程控制器 通信处理器-187

⽏n4%,%#/.42/, 3%26%2

"!3)#o⾽䙑

䬴⾸䞭愅䬴㓐⍟㠶⏊➑

㓐⍟ὖレ

$3, 弘䙚➑

)NTERNET

,QGXVWULDO (WKHUQHW

*356

⽏㠲 #0 l242—7 䞭

䰂 37—l200

⽏㠲 -$720—3 䞭

䰂 37—200

⽏㠲 #0 l242—7 䞭

䰂 37—l200

在遥控应用中,配有 CP 1242-7 的 SIMATIC S7-1200 通过 GSM 网络和 Internet 与控制中心通信。主站中的遥控服务器已安装“TELECONTROL SERVER BASIC”(TCSB) 应用程序。 如此可实现以下应用:

        • 工作站和控制中心之间的遥控通信

在该应用中,工作站通过 GSM 网络和 Internet 将现场数据发送到主站中的遥控服务器。遥控服务器用于监控远程站。

        • 工作站和装有 OPC 客户机的控制室之间的通信

与第一种应用类似,工作站与遥控服务器进行通信。通过其集成 OPC 服务器,遥控服务器会与控制室的 OPC 客户机交换数据。

OPC 客户机和遥控服务器可位于单台计算机上,例如当 TCSB 安装在装有 WinCC 的控制中心计算机上时。

        • 通过控制中心进行站间通信

对于配有 CP 1242-7 的 S7 站,可以进行站间通信。

遥控服务器会将发送站的消息转发给接收站,从而实现站间通信。

站间直接通信

图 12-5 两个 S7-1200 站间直接通信

S7-1200 可编程控制器 通信处理器-188 S7-1200 可编程控制器 通信处理器-189 S7-1200 可编程控制器 通信处理器-190 S7-1200 可编程控制器 通信处理器-191 S7-1200 可编程控制器 通信处理器-192 S7-1200 可编程控制器 通信处理器-193

偺倅㓹⃄♯⌯扶⠣ⳃ )0 ⡙⡩

*356

⊠㠲⠣ⳃ )0

⡙⡩ 䞭 #0

⊠㠲⠣ⳃ )0

⡙⡩ 䞭 #0

扶⨰ #0?l242̱7

䰂 䞭 37̱l200

扶⨰ #0?l242̱7

䰂 䞭 37̱l200

在该组态情况下,两个 SIMATIC S7-1200 站使用 CP 1242-7 通过 GSM 网络彼此直接通信。 各 CP 1242-7 具有固定 IP 地址。 GSM 网络供应商的相关服务必须支持该操作。

GPRS TeleService

在 GPRS TeleService 中,安装了 STEP 7 的工程师站通过 GSM 网络和 Internet 与

S7-1200 中的 CP 1242-7 进行通信。

由于防火墙因外部连接请求通常处于关闭状态,因此需要在远程站与工程师站之间设交换站。交换站可以是遥控服务器或 TeleService 网关(如果组态中没有遥控服务器)。

带遥控服务器的 TeleService

通过遥控服务器进行连接。

  • 工程师站和遥控服务器通过 Intranet (LAN) 或 Internet 连接。
  • 遥控服务器和远程站通过 Internet 和 GSM 网络连接。

工程师站和遥控服务器也可以是同一台计算机;换言之,STEP 7 和 TCSB 安装在同一台计算机上。

S7-1200 可编程控制器 通信处理器-194 S7-1200 可编程控制器 通信处理器-195 S7-1200 可编程控制器 通信处理器-196 S7-1200 可编程控制器 通信处理器-197 S7-1200 可编程控制器 通信处理器-198 S7-1200 可编程控制器 通信处理器-199 S7-1200 可编程控制器 通信处理器-200 S7-1200 可编程控制器 通信处理器-201 S7-1200 可编程控制器 通信处理器-202 S7-1200 可编程控制器 通信处理器-203 S7-1200 可编程控制器 通信处理器-204

ᏺᑨ⫼⿟ᑣⱘ䖰⿟᥻ࠊ᳡ࡵ఼

"7(/(&21752/ 6(59(5 %$6,&"

,QWHUQHW

'6/ 䏃⬅఼

*356

,QGXVWULDO (WKHUQHW

䜡 ໛ &3 1242ϋ7

キ ⱘ 67ϋ1200

䜡 ໛ 67(3 7 ⱘᎹ ⿟Ꮬキ

图 12-6 带遥控服务器的组态中的 GPRS TeleService

不带遥控服务器的 TeleService

通过 TeleService 网关进行连接。

工程师站与 TeleService 网关之间的连接可通过 LAN 在本地实现,也可以通过 Internet

实现。

图 12-7 带 TeleService 网关的组态中的 GPRS TeleService

S7-1200 可编程控制器 通信处理器-205 S7-1200 可编程控制器 通信处理器-206 S7-1200 可编程控制器 通信处理器-207 S7-1200 可编程控制器 通信处理器-208 S7-1200 可编程控制器 通信处理器-209 S7-1200 可编程控制器 通信处理器-210 S7-1200 可编程控制器 通信处理器-211 S7-1200 可编程控制器 通信处理器-212 S7-1200 可编程控制器 通信处理器-213 S7-1200 可编程控制器 通信处理器-214 S7-1200 可编程控制器 通信处理器-215 S7-1200 可编程控制器 通信处理器-216 S7-1200 可编程控制器 通信处理器-217 S7-1200 可编程控制器 通信处理器-218

扶㠲 34%0?7 䞭⼎䬴⼱䰂

扶㠲 34%0?7 䞭⼎䬴⼱䰂

4ELE3ERVICE 偺⊜

)NTERNET

$3, 弘䙚➑

*356

,QGXVWULDO (WKHUQHW

扶㠲 #0?l242̱7䞭 37̱l200

② A = TxD/RxD -(绿色线/针 8)① 将 M 连接到电缆屏蔽

③ B = TxD/RxD +(红色线/针 3)

点对点 (PtP) 通信

CPU 支持下列有关基于字符的串行协议的点对点通信 (PtP)。 PtP 可提供最大的自由度和灵活性,但需要在用户程序中包含大量的实现。

      • PtP (页 609)
      • USS (页 653)
      • Modbus (页 670)

PtP 可用于实现多种可能性:

S7-1200 可编程控制器 通信处理器-219 S7-1200 可编程控制器 通信处理器-220 S7-1200 可编程控制器 通信处理器-221 S7-1200 可编程控制器 通信处理器-222

        • 能够将信息直接发送到外部设备,例如,打印机
        • 能够从其它设备(例如,条码阅读器、RFID 阅读器、第三方照相机或视觉系统以及许多其它类型的设备)接收信息
        • 能够与其它设备(例如,GPS 设备、第三方照相机或视觉系统、无线调制解调器以及更多其它设备)交换信息(发送和接收数据)

PtP 通信属于串行通信,它使用标准 UART 来支持多种波特率和奇偶校验选项。 RS232

和 RS422/485 通信模块及 RS485 通信板提供了用于执行 PtP 通信的电气接口。

点对点指令

点对点指令的公共参数

表格 12- 3 PTP 指令的常见输入参数

参数 说明
REQ 许多 PtP 指令使用 REQ 输入在由低电平向高电平切换时启动操作。 REQ 输入在指令执行一次的时间内必须为高电平 (TRUE),不过 REQ 输入可以在所需时间内一直保持为 TRUE。 在 REQ 输入为 FALSE 时调用指令以便能复位 REQ 输入的历史状态之前,指令不会启动其它操作。 只有这样,指令才能检测低电平到高电平的跳变以启动下一个操作。

将 PtP 指令放入程序时,STEP 7 会提示用户指定背景数据块。 对每个 PtP 指令调用使用一个唯一的背景数据块。 这样可确保每个指令都能正确地处理诸如 REQ 等输入。

PORT 在通信设备组态过程中分配端口地址。 组态后,可以从参数帮助下拉列表中选择默认端口的符号名称。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口

符号名称在 PLC 变量表的“常量”(Constants) 选项卡中分配。

位时间精度 有几个参数以位时间(通过组态的波特率确定)为单位指定的。 以位时间为单位指定参数可以使参数与波特率无关。 所有以位时间为单位的参数都可以被指定为最多

65535 个位。但 CM 或 CB 可测量的最长时间是 8 秒。

PtP 指令的输出参数 DONE、NDR、ERROR 和 STATUS 可提供 PtP 操作的执行完成状态。

表格 12- 4 DONE、NDR、ERROR 和 STATUS 输出参数

参数 数据类型 默认值 说明
DONE Bool FALSE 设置为 TRUE 并持续执行一次所需的时间,以表明上一请求已经完成且没有出现错误;否则为 FALSE。
NDR Bool FALSE 设置为 TRUE 并持续执行一次所需的时间,以表明请求的动作已经完成且没有出现错误并已接收新的数据;否则为FALSE。
参数 数据类型 默认值 说明
ERROR Bool FALSE 设置为 TRUE 并持续执行一次所需的时间,以表明上一请求已经完成但出现了错误,相应的错误代码在 STATUS

中;否则为 FALSE。

STATUS Word 0 结果状态:

  • 如果设置了 DONE 或 NDR 位,则 STATUS 被设置为

0 或信息代码。

  • 如果设置了 ERROR 位,则 STATUS 被设置为一个错误代码。
  • 如果没有设置以上任何一位,则指令会返回说明功能当前状态的状态结果。

STATUS 在该功能执行期间一直保持其值。

说明

DONE、NDR 和 ERROR 参数仅置位一个执行周期的时间。 程序逻辑必须将临时输出状态值保存在数据锁存器中,以便能检测到后续程序扫描中的状态变化。

表格 12- 5 公共条件代码

STATUS (W#16#....) 说明
0000 无错误
7000 功能不忙
7001 功能忙于处理第一个调用。
7002 功能忙于处理后续调用(第一个调用后的轮询)。
8x3A 参数 x 中的指针非法
8070 所有内部实例存储器都被占用,正在执行的并发指令过多
8080 端口号非法。
8081 超时、模块错误或其它内部错误
8082 由于正在后台进行参数化,参数化失败。
8083 缓冲区溢出:

CM 或 CB 返回一条接收到的消息,该消息的长度大于长度参数所允许的值。

STATUS (W#16#....) 说明
8090 内部错误: 错误的消息长度、错误的子模块或非法消息请联系客户支持。
8091 内部错误: 参数化消息中的版本错误请联系客户支持。
8092 内部错误: 参数化消息中的记录长度错误请联系客户支持。

表格 12- 6 常见的错误类别

类别说明 错误类别 说明
端口组态 80Ax 用于定义常见端口组态错误
传送组态 80Bx 用于定义常见传送组态错误
接收组态 80Cx 用于定义常见接收组态错误
传送运行时 80Dx 用于定义常见传送运行时错误
接收运行时 80Ex 用于定义常见接收运行时错误
信号处理 80Fx 用于定义与所有信号处理相关的常见错误
PORT_CFG 指令

表格 12- 7 PORT_CFG(端口组态)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-223 "PORT_CFG_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, PROTOCOL:=_uint_in_, BAUD:=_uint_in_, PARITY:=_uint_in_, DATABITS:=_uint_in_, STOPBITS:=_uint_in_, FLOWCTRL:=_uint_in_, XONCHAR:=_char_in_, XOFFCHAR:=_char_in_, WAITTIME:=_uint_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

PORT_CFG 可用于通过用户程序更改端口参数,如波特率等参数。

可以在设备配置属性中设置端口的初始静态组态,或者仅使用默认值。 可以在用户程序中执行 PORT_CFG 指令来更改组态。

1 STEP 7 会在插入指令时自动创建 DB。

PORT_CFG 组态更改不会永久存储在 CPU 中。 CPU 从 RUN 模式切换到 STOP 模式和循环上电后将恢复设备配置中组态的参数。 更多信息,请参见 组态通信端口 (页 630)和管理流控制 (页 632)。

表格 12- 8 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿激活组态更改。 (默认值: False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表

的“系统常量”(System constants) 选项卡中分配。 (默认值:0)

PROTOCOL IN UInt 0 - 点对点通信协议(默认值)

1..n - 用于在将来定义特定的协议

BAUD IN UInt 端口波特率(默认值:0):

1 = 300 波特、2 = 600 波特、3 = 1200 波特、4 = 2400 波特、5

= 4800 波特、6 = 9600 波特、7 = 19200 波特、8 = 38400 波特、9 = 57600 波特、10 = 76800 波特、11 = 115200 波特

参数和类型 数据类型 说明
PARITY IN UInt 端口奇偶校验(默认值:0):

1 = 无奇偶校验、2 = 偶校验、3 = 奇校验、4 = 传号校验、5 = 空号校验

DATABITS IN UInt 每个字符的位数(默认值:):

1 = 8 个数据位、2 = 7 个数据位

STOPBITS IN UInt 停止位(默认值:0):

1 = 1 个停止位、2 = 2 个停止位

FLOWCTRL IN UInt 流控制(默认值:0):

1 = 无流控制、2 = XON/XOFF、3 = 硬件 RTS 始终激活、4 = 硬件 RTS 切换

XONCHAR IN Char 指定用作 XON 字符的字符。 这通常是 DC1 字符 (11H)。 只有启用流控制时,才会评估该参数。(默认值:0)
XOFFCHAR IN Char 指定用作 XOFF 字符的字符。 这通常是 DC3 字符 (13H)。 只有启用流控制时,才会评估该参数。(默认值:0)
XWAITIME IN UInt 指定在接收 XOFF 字符后等待 XON 字符的时间,或者指定在启用

RTS 后等待 CTS 信号的时间(0 到 65535 ms)。 只有启用流控制时,才会评估该参数。 (默认值:2000)

DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个执行周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个执行周期时间
STATUS OUT Word 执行条件代码(默认值:0)

表格 12- 9 条件代码

STATUS (W#16#....) 说明
80A0 特定协议不存在。
80A1 特定波特率不存在。
80A2 特定奇偶校验选项不存在。
80A3 特定数据位数不存在。
80A4 特定停止位数不存在。
80A5 特定流控制类型不存在。
80A6 等待时间为 0 且流控制启用
80A7 XON 和 XOFF 是非法值(例如,同一个值)
SEND_CFG 指令

表格 12- 10 SEND_CFG(发送组态)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-224 "SEND_CFG_DB"( SEND_CFG 可用于动态组态 PtP 通信端口的串行传输参数。 执行 SEND_CFG 时,将放弃 CM 或 CB 内所有排队的消息。
REQ:=_bool_in_,
PORT:=_uint_in_,
RTSONDLY:=_uint_in_,
RTSOFFDLY:=_uint_in_,
BREAK:=_uint_in_,
IDLELINE:=_uint_in_,
DONE=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_);

1 STEP 7 会在插入指令时自动创建 DB。

可以在设备配置属性中设置端口的初始静态组态,或者仅使用默认值。 可以在用户程序中执行 SEND_CFG 指令来更改组态。

SEND_CFG 组态更改不会永久存储在 CPU 中。 CPU 从 RUN 模式切换到 STOP 模式和循环上电后将恢复设备配置中组态的参数。 请参见 组态传送(发送)参数 (页 634)。

表格 12- 11 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿激活组态更改。(默认值: False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常量”(System constants) 选项卡中分配。 (默认值:0)

RTSONDLY IN UInt 启用 RTS 后执行任何 Tx 数据传输前要等待的毫秒数。 只有启用硬件流控制时,该参数才有效。 有效范围是 0 - 65535 ms。值 0 表示禁用此功能。 (默认值:0)
RTSOFFDLY IN UInt 执行 Tx 数据传输后禁用 RTS 前要等待的毫秒数: 只有启用硬件流控制时,该参数才有效。 有效范围是 0 - 65535 ms。值 0 表示禁用此功能。 (默认值:0)
BREAK IN UInt 该参数指定在各消息开始时将发送指定位时间的中断。 最大值是

65535 个位时间,最多为 8 秒。 值 0 表示禁用该功能。 (默认值:12)

参数和类型 数据类型 说明
IDLELINE IN UInt 该参数指定在各消息开始前线路将保持空闲指定的位时间。 最大值是 65535 个位时间,最多为 8 秒。 值 0 表示禁用该功能。

(默认值:12)

DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个执行周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个执行周期时间
STATUS OUT Word 执行条件代码(默认值:0)

表格 12- 12 条件代码

STATUS (W#16#....) 说明
80B0 不允许传送中断组态。 请联系客户支持。
80B1 中断时间大于允许的最大值。
80B2 空闲时间大于允许的最大值。
RCV_CFG 指令

表格 12- 13 RCV_CFG(接收组态)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-225 "RCV_CFG_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, CONDITIONS:=_struct_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

RCV_CFG 可用于动态组态 PtP 通信端口的串行接收方参数。 该指令可组态表示接收消息开始和结束的条件。 执行 RCV_CFG

时,将放弃 CM 或 CB 内所有排队的消息。

1 STEP 7 会在插入指令时自动创建 DB。

可以在设备配置属性中设置通信端口的初始静态组态,或者索性使用默认值。 可以在用户程序中执行 RCV_CFG 指令来更改组态。

RCV_CFG 组态更改不会永久存储在 CPU 中。 CPU 从 RUN 模式切换到 STOP 模式和循环上电后将恢复设备配置中组态的参数。 有关详细信息,请参见 组态接收参数(页 634)。

表格 12- 14 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿激活组态更改。(默认值:False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。分配的 CM 或

CB 端口值为设备配置属性“硬件标识符”。端口符号名称在

PLC 变量表的“系统常量”(System constants) 选项卡中分配。 (默认值:0)

CONDITIONS IN CONDITIONS 如下文所述,条件数据结构指定消息开始和结束条件。
DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个扫描周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个扫描周期时间
STATUS OUT Word 执行条件代码(默认值:0)
RCV_PTP 指令的开始条件

RCV_PTP 指令使用 RCV_CFG 指令指定的组态来确定点对点通信消息的开始和结束。消息开始由开始条件确定。 消息开始可以由一个开始条件或开始条件的组合来确定。 如果指定多个开始条件,则只有满足所有条件后才能使消息开始。

有关消息开始条件的说明,请参见主题“组态接收参数 (页 635)”。

参数 CONDITIONS 数据类型结构的第 1 部分(开始条件)

表格 12- 15 开始条件的 CONDITIONS 结构

参数和类型 数据类型 说明
STARTCOND IN UInt 指定开始条件(默认值:1)

  • 01H - 开始字符
  • 02H - 任意字符
  • 04H - 线路中断
  • 08H - 线路空闲
  • 10H - 序列 1
  • 20H - 序列 2
  • 40H - 序列 3
  • 80H - 序列 4
IDLETIME IN UInt 线路空闲超时所需的位时间数。 (默认值:40)。 仅与线路空闲条件一起使用。 0 到 65535
STARTCHAR IN Byte 用于开始字符条件的开始字符。 (默认值: B#16#2)
STRSEQ1CTL IN Byte 针对每个字符执行的序列 1 忽略/比较控制: (默认值:

B#16#0)

它们是为开始序列中各字符启用的位。

  • 01H - 字符 1
  • 02H - 字符 2
  • 04H - 字符 3
  • 08H - 字符 4
  • 10H - 字符 5

禁用与某个字符关联的位意味着该序列位置中的任意字符均符合条件。

STRSEQ1 IN Char[5] 序列 1 开始字符(5 个字符)。 默认值: 0
STRSEQ2CTL IN Byte 针对每个字符执行的序列 2 忽略/比较控制。 (默认值:

B#16#0)

STRSEQ2 IN Char[5] 序列 2 开始字符(5 个字符)。 默认值: 0
STRSEQ3CTL IN Byte 针对每个字符执行的序列 3 忽略/比较控制。 默认值:

B#16#0

STRSEQ3 IN Char[5] 序列 3 开始字符(5 个字符)。 默认值: 0
参数和类型 数据类型 说明
STRSEQ4CTL IN Byte 针对每个字符执行的序列 4 忽略/比较控制。默认值:

B#16#0

STRSEQ4 IN Char[5] 序列 4 开始字符(5 个字符),默认值:0
示例

请注意以下所接收的十六进制编码消息: "“68 10 aa 68 bb 10 aa 16”以及下表中列出的已组态开始序列。 在成功接收到第一个 68H 字符时,开始评估开始序列。 在成功接收到第

四个字符(第二个 68H)时,开始条件 1 得到满足。 只要满足了开始条件,就会开始评估结束条件。

开始序列处理会因各种奇偶校验、成帧或字符间时间错误而终止。 由于不再满足开始条件,因而这些错误将导致不会有接收消息。

表格 12- 16 开始条件

开始条件 第一个字符 第一个字符 +1 第一个字符 +2 第一个字符 +3 第一个字符 +4
1 68H xx xx 68H xx
2 10H aaH xx xx xx
3 dcH aaH xx xx xx
4 e5H xx xx xx xx
RCV_PTP 指令的结束条件

消息结束由指定的结束条件确定。 消息结束由第一次出现的一个或多个已组态结束条件来确定。 主题“组态接收参数 (页 635)”中“消息结束条件”部分介绍了可以在 RCV_CFG 指令中组态的结束条件。

可以在设备配置的通信接口的属性中组态结束条件,或者通过 RCV_CFG 指令组态结束条件。 只要 CPU 从 STOP 模式切换到 RUN 模式,接收参数(开始条件和结束条件)就将恢复为设备配置设置。 如果 STEP 7 用户程序执行 RCV_CFG,则这些设置将更改为

RCV_CFG 的条件。

参数 CONDITIONS 数据类型结构的第 2 部分(结束条件)

表格 12- 17 结束条件的 CONDITIONS 结构

参数 参数类型 数据类型 说明
ENDCOND IN UInt 0 该参数指定消息结束条件:

  • 01H - 响应时间
  • 02H - 消息时间
  • 04H - 字符间隙
  • 08H - 最大长度
  • 10H - N + LEN + M
  • 20H - 序列
MAXLEN IN UInt 1 最大消息长度: 仅当选择最大长度结束条件时使用。 1 到 1024 个字节
N IN UInt 0 长度域在消息中的字节位置。 仅与 N + LEN + M

结束条件一起使用。 1 到 1022 个字节

LENGTHSIZE IN UInt 0 字节域的大小(1、2 或 4 个字节)。 仅与 N + LEN + M 结束条件一起使用。
LENGTHM IN UInt 0 指定跟在长度域后、不包含在长度域值内的字符数。 该参数仅与 N + LEN + M 结束条件一起使用。 0 到 255 个字节
RCVTIME IN UInt 200 指定接收第一个字符所需的等待时间。 如果在指定时间内没有成功接收到字符,接收操作将被终
止且包含错误。 该参数仅与响应时间条件一起使
用。 (0 到 65535 个位时间,最多 8 秒)
此参数不是消息结束条件,因为在接收到第一个
响应字符时评估即终止。 由于在预期有响应时却
接收不到响应,因此仅就其能够终止接收方操作
而言,它又是一个结束条件。 必须选择一个单独
的结束条件。
MSGTIME IN UInt 200 指定在接收到第一个字符后完成接收整条消息所需的等待时间。 只有选择了消息超时条件时,才会使用该参数。 (0 到 65535 毫秒)
参数 参数类型 数据类型 说明
CHARGAP IN UInt 指定字符间的位时间数。 如果字符间的位时间数
12 超出指定值,则结束条件得到满足。 该参数仅与
字符间隙条件一起使用。 (0 到 65535 个位时
间,最多 8 秒)
ENDSEQ1CTL IN Byte 针对每个字符执行的序列 1 忽略/比较控制:
B#16#0 它们是为结束序列中各字符启用的位。 字符 1 是
位 0,字符 2 是位 1,依此类推,字符 5 是位 4。
禁用与某个字符关联的位意味着该序列位置中的
任意字符均符合条件。
ENDSEQ1 IN Char[5] 0 序列 1 开始字符(5 个字符)

表格 12- 18 条件代码

STATUS (W#16#....) 说明
80C0 所选开始条件非法
80C1 所选结束条件非法;未选择结束条件
80C2 启用了接收中断,但不允许此操作。
80C3 启用了最大长度结束条件,最大长度是 0 或大于 1024。
80C4 启用了计算长度,但 N >= 1023。
80C5 启用了计算长度,但长度不是 1、2 或 4。
80C6 启用了计算长度,但 M 值大于 255。
80C7 启用了计算长度,但计算长度大于 1024。
80C8 启用了响应超时,但响应超时为零。
80C9 启用了字符间隙超时,但该字符间隙超时为零。
80CA 启用了线路空闲超时,但该线路空闲超时为零。
80CB 启用了结束序列,但所有字符均“不相关”。
80CC 启用了开始序列(4 个中的任何一个),但所有字符均“不相关”。
SEND_PTP 指令

表格 12- 19 SEND_PTP(发送点对点数据)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-226 "SEND_PTP_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, BUFFER:=_variant_in_, LENGTH:=_uint_in_, PTRCL:=_bool_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

SEND_PTP 用于启动数据传输,并将分配的缓冲区传送到通信接口。 在 CM 或 CB 块以指定波特率发送数据的同时,CPU 程序会继续执行。 仅一个发送操作可以在某一给定时间处于未决状态。 如果在 CM 或 CB 已经开始传送消息时执行第二个 SEND_PTP,CM

或 CB 将返回错误。

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 20 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该传送使能输入的上升沿激活所请求的传送。 这会启动将缓冲区数据传送到点对点通信接口。 (默认值: False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在 PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常

量”(System constants) 选项卡中分配。 (默认值:0)

BUFFER IN Variant 该参数指向传送缓冲区的起始位置。 (默认值:0) 注: 不支持布尔数据或布尔数组。
LENGTH IN UInt 传输的帧长度(字节)(默认值:0) 传输复杂结构时,始终使用长度 0。
PTRCL IN Bool 该参数选择普通点对点协议或 Siemens 提供的特定协议所在的缓冲区,这些协议在所连接的 CM 或 CB 中实施。 (默认值: False)

FALSE = 用户程序控制的点对点操作。 (仅限有效选项)

DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个扫描周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个扫描周期时间
STATUS OUT Word 执行条件代码(默认值:0)

传送操作进行期间,DONE 和 ERROR 输出均为 FALSE。 传送操作完成后,DONE 或

ERROR 输出将被设置为 TRUE 以显示传送操作的状态。 当 DONE 或 ERROR 为 TRUE

时,STATUS 输出有效。

如果通信接口接受传送数据,则该指令将返回状态值 16#7001。 如果 CM 或 CB 仍在忙于传送,则后续的 SEND_PTP 执行将返回 16#7002。 传送操作完成后,CM 或 CB 将返回传送操作状态 16#0000(如果未出错)。 后续执行 REQ 为低电平的 SEND_PTP 时, 将返回状态 16#7000(不忙)。

下图显示了输出值与 REQ 的关系。 假设定期调用该指令以检查传送过程的状态。 在下图中,假设每次扫描都调用该指令(用 STATUS 值表示)。

S7-1200 可编程控制器 通信处理器-227

下图显示通过 REQ 线路脉冲(持续一个扫描周期)启动传送操作时,DONE 和 STATUS

参数是如何仅在一个扫描周期内有效。

S7-1200 可编程控制器 通信处理器-228

下图显示了出错时 DONE、ERROR 和 STATUS 参数之间的关系。

S7-1200 可编程控制器 通信处理器-229

只有 SEND_PTP 再次使用相同的背景 DB 执行后,DONE、ERROR 和 STATUS 值才有效。

表格 12- 21 条件代码

STATUS (W#16#....) 说明
80D0 传送方激活期间发出新请求
80D1 由于在等待时间内没有 CTS 信号,传送中止
STATUS (W#16#....) 说明
80D2 由于没有来自 DCE 设备的 DSR,传送中止
80D3 由于队列溢出(传送 1024 个字节以上),传送中止
80D5 反向偏置信号(断线检测)
833A BUFFER 参数的 DB 不存在。
SEND_PTP 的 LENGTH 和 BUFFER 参数的交互作用

SEND_PTP 指令可以传送的最小数据单位是一个字节。 BUFFER 参数决定要传送的数据的大小。 BUFFER 参数不接受 Bool 数据类型或 Bool 数组。

可以将 LENGTH 参数始终设置为 0,从而确保 SEND_PTP 发送 BUFFER 参数表示的整个数据结构。 如果仅要传送 BUFFER 参数中的部分数据结构,则可对 LENGTH 进行以下设置:

表格 12- 22 LENGTH 和 BUFFER 参数

LENGTH BUFFER 说明
= 0 未使用 发送 BUFFER 参数中定义的全部数据。 当 LENGTH = 0 时,用户无须指定传送字节数。
> 0 基本数据类型 LENGTH 值必须包含此数据类型的字节计数。 例如,对于 Word 值,LENGTH 值必须为二。 对于 Dword 或 Real,LENGTH 值必须为四。 否则,不会传送任何数据并返回错误 8088H。
结构 LENGTH 值可以包含小于结构完整字节长度的字节数,在这种情况下,将仅发送 BUFFER 中的结构的前 LENGTH 个字节。 由于
结构的内部字节组织不总是确定不变的,所以可能得到无法预料
的结果。 在这种情况下,使用值为 0 的 LENGTH 来发送整个结
构。
数组 LENGTH 值必须包含小于数组完整字节长度的字节数,而且还必须为数据元素字节计数的倍数。 例如,对于 Word 数组,

LENGTH 参数值必须为二的倍数;对于 Real 数组,必须为四的倍数。 指定 LENGTH 后,将传送 LENGTH 字节中包含的相应数量的数组元素。 例如,如果 BUFFER 包含由 15 个 Dword 构成的数组(总共 60 个字节),LENGTH 指定为 20,则将传送数组

中的前五个 Dword。

LENGTH 值必须为数据元素字节数的倍数。 否则,STATUS = 8088H,ERROR = 1,且不进行任何传送。
LENGTH BUFFER 说明
String 参数 LENGTH 包含要传送的字符数。 只传送 String 中相应数量的字符。 而不会传送 String 的最大长度和实际长度的字节数。
RCV_PTP 指令

表格 12- 23 RCV_PTP(接收点对点)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-230 "RCV_PTP_DB"( RCV_PTP 用于检查 CM 或 CB 中已接收的消息。 如果有消息,则会将其从 CM 或 CB 传送到 CPU。 如果发生错误,则会返回相应的

STATUS 值。

EN_R:=_bool_in_,
PORT:=_uint_in_,
BUFFER:=_variant_in_,
NDR=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_,
LENGTH=>_uint_out_);

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 24 参数的数据类型

参数和类型 数据类型 说明
EN_R IN Bool 该输入为 TRUE 并且有消息时,会将消息从 CM 或 CB 传送到

BUFFER。 EN_R 为 FALSE 时,将检查 CM 或 CB 是否收到消息并更新 NDR、ERROR 和 STATUS 输出,但不会将消息传送到

BUFFER。 (默认值:0)

PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在 PORT 功能框连接的参数助手下拉列表中。分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常

量”(System constants) 选项卡中分配。 (默认值:0)

BUFFER IN Variant 该参数指向接收缓冲区的起始位置。 该缓冲区应该足够大,可以接收最大长度消息。

不支持布尔数据或布尔数组。 (默认值:0)

NDR OUT Bool 新数据就绪且操作无错完成后,保持为 TRUE 一个执行周期时间。
ERROR OUT Bool 操作已完成但出现错误后,保持为 TRUE 一个执行周期时间。
STATUS OUT Word 执行条件代码(默认值:0)
LENGTH OUT UInt 返回消息的长度(字节)(默认值:0)

NDR 或 ERROR 为 TRUE 时,STATUS 值有效。 STATUS 值提供 CM 或 CB 中的接收操作终止的原因。 它通常是正值,表示接收操作成功且接收过程正常终止。 如果

STATUS 值为负数(十六进制值的最高有效位置位),则表示接收操作因错误条件终止,例如,奇偶校验、组帧或超限错误。

每个 PtP 通信接口最多可缓冲 1024 字节。 这可以是一个大消息或几个较小的消息。 如果 CM 或 CB 中存在多个消息,则 RCV_PTP 指令将返回最早的可用消息。 随后执行

RCV_PTP 指令将返回下一个最早的可用消息。

表格 12- 25 条件代码

STATUS

(W#16#...)

说明
0000 没有提供缓冲区
80E0 因接收缓冲区已满,消息被终止
80E1 因出现奇偶校验错误,消息被终止
80E2 因组帧错误,消息被终止
80E3 因出现超限错误,消息被终止
80E4 因计算长度超出缓冲区大小,消息被终止
80E5 反向偏置信号(断线检测)
0094 因接收到最大字符长度,消息被终止
0095 因消息超时,消息被终止
0096 消息因字符间超时而终止
0097 消息因响应超时而终止
0098 因已满足“N+LEN+M”长度条件,消息被终止
0099 因已满足结束序列,消息被终止
833A BUFFER 参数的 DB 不存在。
RCV_RST 指令

表格 12- 26 RCV_RST(接收方复位)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-231 "RCV_RST_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

RCV_RST 可清空 CM 或 CB 中的接收缓冲区。

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 27 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 该使能输入出现上升沿时将激活接收方复位(默认值:False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在 PORT 功能框连接的参数助手下拉列表中。分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。端口符号名称在 PLC 变量表的“系统常

量”(System constants) 选项卡中分配。 (默认值:0)

DONE OUT Bool 在一个扫描周期内为 TRUE 时,表示上一个请求已完成且没有错误。
ERROR OUT Bool 为 TRUE 时,表示上一个请求已完成但有错误。 此外,该输出为

TRUE 时,STATUS 输出还会包含相关错误代码。

STATUS OUT Word 错误代码(默认值:0)
SGN_GET 指令

表格 12- 28 SGN_GET(获取 RS232 信号)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-232 "SGN_GET_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, NDR=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, DTR=>_bool_out_, DSR=>_bool_out_, RTS=>_bool_out_, CTS=>_bool_out_, DCD=>_bool_out_, RING=>_bool_out_);

SGN_GET 用于读取 RS232 通信信号的当前状态。

该功能仅对 RS232 CM 有效。

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 29 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿获取 RS232 信号状态值(默认值:False)
PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在 PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常

量”(System constants) 选项卡中分配。

NDR OUT Bool 新数据就绪且操作无错误地完成时,在一个扫描周期内为 TRUE
ERROR OUT Bool 操作已完成但出现错误后,保持为 TRUE 一个扫描周期时间
STATUS OUT Word 执行条件代码(默认值:0)
DTR OUT Bool 数据终端就绪,模块就绪(输出)。 默认值: False
DSR OUT Bool 数据设备就绪,通信伙伴就绪(输入)。 默认值: False
RTS OUT Bool 请求发送,模块已做好发送准备(输出)。 默认值: False
CTS OUT Bool 允许发送,通信伙伴可以接收数据(输入)。 默认值: False
DCD OUT Bool 数据载波检测,接收信号电平(始终为 False,不支持)
RING OUT Bool 响铃指示器,来电指示(始终为 False,不支持)

表格 12- 30 条件代码

STATUS (W#16#....) 说明
80F0 CM 或 CB 是 RS485 且没有信号可用
SGN_SET 指令

表格 12- 31 SGN_SET(设置 RS232 信号)指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-233 "SGN_SET_DB"(

REQ:=_bool_in_, PORT:=_uint_in_, SIGNAL:=_byte_in_, RTS:=_bool_in_, DTR:=_bool_in_, DSR:=_bool_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_);

SGN_SET 用于设置 RS232 通信信号的状态。该功能仅对 RS232 CM 有效。

1 STEP 7 会在插入指令时自动创建 DB。

表格 12- 32 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 在该输入的上升沿启动设置 RS232 信号的操作(默认值:

False)

PORT IN PORT 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在PORT 功能框连接的参数助手下拉列表中。分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。端口符号名称在 PLC 变量表的“系统常量”(System constants) 选项卡中分配。 (默认

值:0)

SIGNAL IN Byte 选择要设置的信号: (允许多个)。 默认值: 0

  • 01H = 设置 RTS
  • 02H = 设置 DTR
  • 04H = 设置 DSR
RTS IN Bool 请求发送,模块准备好将值发送到设备(真或假),默认值:

False

参数和类型 数据类型 说明
DTR IN Bool 数据终端就绪,模块准备好将值发送到设备(真或假)。 默认值: False
DSR IN Bool 数据设备就绪(仅适用于 DCE 型接口),不使用。
DONE OUT Bool 上一请求已完成且没有出错后,保持为 TRUE 一个执行周期时间
ERROR OUT Bool 上一请求已完成但出现错误后,保持为 TRUE 一个执行周期时间
STATUS OUT Word 执行条件代码(默认值:0)

表格 12- 33 条件代码

STATUS (W#16#....) 说明
80F0 CM 或 CB 是 RS485 且无法设置任何信号
80F1 因硬件流控制的原因而无法设置信号
80F2 因模块是 DTE 而无法设置 DSR
80F3 因模块是 DCE 而无法设置 DTR

组态通信端口

可以通过以下两种方式组态通信接口:

  • 使用 STEP 7 中的设备组态组态端口参数(波特率和奇偶校验)、发送参数和接收参数。 设备组态设置存储在 CPU 中。 在循环上电和从 RUN 模式切换到 STOP 模式后会应用这些设置。
  • 使用 PORT_CFG (页 613)、SEND_CFG (页 615) 和 RCV_CFG (页 616) 指令设置参数。 这些指令设置的端口设置在 CPU 处于 RUN 模式期间有效。 在切换到 STOP 模式或循环上电后,这些端口设置会恢复为设备组态设置。

组态硬件设备 (页 121)之后,通过选择机架上的某个 CM 或 CB(如果已组态)来组态通信接口的参数。

S7-1200 可编程控制器 通信处理器-234 巡视窗口中的“属性”(Properties) 选项卡显示所选 CM 或 CB 的参数。 选择“端口组态”(Port

configuration) 以编辑以下参数:

    • S7-1200 可编程控制器 通信处理器-235 波特率
    • 奇偶校验
    • 每个字符的数据位数
    • 停止位的数目
    • 流控制(仅限 RS232)
    • 等待时间

对于 CM 1241 RS232 和 RS485 以及 CB RS485(除仅 CM 1241 RS232 支持的流控制

外),无论是组态 RS232 或 RS485 通信模块还是 RS485 通信板,端口组态参数都是相同的。 但是,参数值可以不同。

对于 CM 1241 RS422/485,将按不同的方式执行端口组态,如下图所示。 CM 1241

RS422/485 模块的 422 模式还支持软件流控制。

S7-1200 可编程控制器 通信处理器-236 选择“端口组态”(Port configuration) 以编辑以下

RS422/485 参数:

  • “工作模式”(Operating mode):
    • 全双工 (RS422) 四线制模式(点对点连接)
    • 全双工 (RS422) 四线制模式(多点主站)
    • 全双工 (RS422) 四线制模式(多点从站)
    • 半双工 (RS485) 两线制模式
  • “接收线路初始状态”(Receive line initial state):
    • 正向偏置(信号 R(A) 0V、信号 R(B) 5V) STEP 7 用户程序还可通过 PORT_CFG 指令 (页 613)组态端口或更改现有组态。

说明

在用户程序中通过 PORT_CFG 指令设置的参数值会覆盖设备组态中设定的端口组态设置。 请注意,发生掉电时,S7-1200 不会保留通过 PORT_CFG 指令设置的参数。

参数 定义
波特率 波特率的默认值为 9.6 Kbps。 有效选项有: 300 波特、600 波特、1.2 Kb、2.4 Kb、4.8 Kb、9.6 Kb、19.2 Kb、38.4 Kb、57.6 Kb、76.8 Kb 和 115.2

Kb。

奇偶校验 奇偶校验的默认值是无奇偶校验。 有效选项有: 无奇偶校验、偶校验、奇校验、传号(奇偶校验位始终设为 1)和空号(奇偶校验位始终设为 0)。
每个字符的数据位数 字符中的数据位数。 有效选择为 7 或 8。
停止位的数目 停止位的数目可以是 1 或 2。 默认值是 1。
流控制 对于 RS232 通信模块,可以选择硬件或软件流控制,如“管理流控制 (页 632)”

部分所述。 如果选择硬件流控制,则可以选择是 RTS 信号始终激活还是切换

RTS。 如果选择软件流控制,则可以定义 XON 和 XOFF 字符。

RS485 通信接口不支持流控制。 CM 1241 RS422/485 模块的 422 模式支持软件流控制。

等待时间 等待时间是指 CM 或 CB 在断言 RTS 后等待接收 CTS 的时间,或者在接收

XOFF 后等待接收 XON 的时间,具体取决于流控制类型。 如果在通信接口收到预期的 CTS 或 XON 之前超过了等待时间,CM 或 CB 将中止传送操作并向

用户程序返回错误。 指定等待时间,以毫秒表示。 范围是 0 到 65535 毫秒。

工作模式 选择工作模式 RS422 或 RS485 以及网络组态。
接收线路初始状态 选择偏置选项。 有效值为无、正向偏置和反向偏置。 反向偏置用于检测电缆断线。
        1. 管理流控制

流控制是指为了不丢失数据而用来平衡数据发送和接收的一种机制。 流控制可确保传送设备发送的信息量不会超出接收设备所能处理的信息量。 流控制可以通过硬件或软件来实现。 RS232 CM 支持硬件及软件流控制。 RS485 CM 和 CB 不支持流控制。 CM 1241 RS422/485 模块的 422 模式支持软件流控制。 可在组态端口 (页 630)时或使用PORT_CFG 指令 (页 613)指定流控制类型。

硬件流控制通过请求发送 (RTS, Request To Send) 和允许发送 (CTS, Clear To Send) 通信信号来实现。 对于 RS232 CM,RTS 信号从引脚 7 输出,而 CTS 信号通过引脚 8 接收。RS232 CM 是 DTE(Data Terminal Equipment,数据终端设备)设备,其将 RTS 断言为输出并将 CTS 作为输入来监视。

硬件流控制: RTS 切换

如果为 RS232 CM 启用 RTS 切换的硬件流控制,则模块会将 RTS 信号设置为激活状态以发送数据。 它还会监视 CTS 信号以确定接收设备是否能接收数据。 CTS 信号激活后,只要 CTS 信号保持激活状态,模块便可发送数据。 如果 CTS 信号变为非激活状态,则传送必须停止。

CTS 信号变为激活状态时,传送会继续执行。 如果 CTS 信号在组态的等待时间内未激活,则模块会中止传送并向用户程序返回错误。 在端口组态 (页 630)中指定等待时间。

对于需要“传送已激活”信号的设备,适合使用 RTS 切换流控制。 例如,无线调制解调器使用 RTS 作为“键”信号来激励无线发送器。 RTS 切换流控制对于标准电话调制解调器不起作用。 对电话调制解调器使用“RTS 始终激活”选项。

硬件流控制: RTS 始终激活

在“RTS 始终激活”模式下,CM 1241 默认情况下将 RTS 设置为激活状态。 设备(如电话调制解调器等)监视来自 CM 的 RTS 信号,并将该信号用作允许发送信号。 调制解调器仅在 RTS 处于激活状态时才向 CM 传送数据,即,电话调制解调器在见到激活的 CTS 信号后发送数据。如果 RTS 处于非激活状态,电话调制解调器不向 CM 传送数据。

要使调制解调器随时都能向 CM 发送数据,请组态“RTS 始终激活”硬件流控制。 CM 因此会将 RTS 信号设置为始终激活。 即使模块无法接受字符,CM 也不会将 RTS 设置为非激活状态。 传送设备必须确保不会使 CM 的接收缓冲区超负荷运行。

利用数据终端就绪 (DTR) 和数据设备就绪 (DSR) 信号

对于这两种硬件流控制类型的任何一种,CM 都会将 DTR 设置为激活状态。 只有当 DSR 信号变为激活状态时,模块才会进行传送。 仅在发送操作开始时评估 DSR 的状态。 如果 DSR 在传送操作开始后变为非激活状态,将不能暂停传送操作。

软件流控制

软件流控制使用消息中的特殊字符来实现流控制。 将组态表示 XON 和 XOFF 的十六进制字符。

XOFF 指示传送必须停止。 XON 指示传送可以继续。 XOFF 和 XON 不得是相同的字符。

传送设备从接收设备收到 XOFF 字符时,将停止传送。 传送设备收到 XON 字符时,传送又继续进行。 如果 CM 在通过端口组态 (页 630)指定的等待时间内没有收到 XON 字符,它将中止传送并向用户程序返回错误。

软件流控制需要全双工通信,因为在传送过程中接收伙伴必须能够将 XOFF 发送到传送伙伴。 软件流控制只能用于仅包含 ASCII 字符的消息。 二进制协议无法使用软件流控制。

组态传送(发送)和接收参数

在 CPU 可进行 PtP 通信前,必须组态传送(或发送)消息和接收消息的参数。 这些参数决定了在向目标设备传送消息或从目标设备接收消息时的通信工作方式。

组态传送(发送)参数

S7-1200 可编程控制器 通信处理器-237 在设备组态中,可以通过指定所选接口的“已传送消息的组

态”(Configuration of transmitted

message) 属性,来组态通信接口传送数据的方式。

还可以使用 SEND_CFG (页 615) 指令,通过用户程序动态组态或更改传送消息参数。说明

在用户程序中通过 SEND_CFG 指令设置的参数值会覆盖该端口组态设置。 请注意,发生掉电时,CPU 不会保留通过 SEND_CFG 指令设置的参数。

参数 定义
RTS 接通延时 (RTS On delay) 指定在 RTS 激活后传送启动前需等待的时间。 范围是 0 到 65535 ms,默认值为 0。仅当 端口组态 (页 630)指定的是硬件流控制时,该参数才有效。 在经过

RTS 接通延迟时间后才会评估 CTS。

该参数仅适用于 RS232 模块。

RTS 关断延时 (RTS Off delay) 指定传送完成后 RTS 禁用前需等待的时间。 范围是 0 到 65535 ms,默认值为

0。仅当 端口组态 (页 630)指定的是硬件流控制时,该参数才有效。

该参数仅适用于 RS232 模块。

参数 定义
在消息开始时发送中断 指定在每条消息开始时,在 RTS 接通延时(如果已组态)已到且 CTS 已激活
(Send break at message start) 的情况下先发送中断。

用户指定多少个位的时间构成一个中断,线路在中断期间保持空号状态。 默认

中断期间的位时间数 值为 12,最大值为 65535,即最长 8 秒的限制。
(Number of bit times in a

break)

发送中断后线路空闲信号 指定在消息开始前发送线路空闲信号。 如果组态了中断,则将在中断后发送。
(Send idle line after a break)

中断后线路空闲 (Idle line after a break)

“中断后线路空闲”(Idle line after a break) 参数指定多少个位时间构成一次线路空闲,线路在空闲期间保持传号状态。 默认值为 12,最大值为 65535,即最长8 秒的限制。
组态接收参数

S7-1200 可编程控制器 通信处理器-238 通过设备组态,可以组态通信接口接收数据以及识别消息开始和结束的方式。 在所选接口的接收消息组态中指定以上参数。

还可以在用户程序中使用 RCV_CFG 指令 (页 616)来动态组态或更改接收消息参数。说明

在用户程序中通过 RCV_CFG 指令设置的参数值会覆盖该端口组态设置。 请注意,发生掉电时,CPU 不会保留通过 RCV_CFG 指令设置的参数。

消息开始条件

用户可以决定通信接口识别消息开始的方式。 在满足所组态的结束条件之前,开始字符以及组成消息的字符会一直进入接收缓冲区。

可以指定多个开始条件。 如果指定多个开始条件,则只有在满足所有开始条件后才认为消息开始。 例如,如果用户组态了线路空闲时间和特定开始字符,CM 或 CB 将首先查找要满足的线路空闲时间要求,然后 CM 将查找指定的开始字符。 如果收到其它某个字符而不是指定的开始字符,CM 或 CB 将通过再次查找线路空闲时间来重新启动消息开始条件搜索。

参数 定义
以任意字符开始 “任意字符”条件指定,成功接收任何字符都将表示消息开始。 该字符是消息中的第一个字符。
线路中断 “线路中断”条件指定在接收中断字符后开始消息接收操作。
线路空闲 “线路空闲”条件指定在接收线路空闲或平静了指定位时间后开始消息接收操作。 一旦出现该条件,即启动消息接收。

S7-1200 可编程控制器 通信处理器-239 S7-1200 可编程控制器 通信处理器-240 S7-1200 可编程控制器 通信处理器-241

ཱ ཱ ི

① 字符

② 重启线路空闲定时器

③ 检测到线路空闲并启动消息接收操作

特殊条件:

通过单个字符识别消息开始

指定通过特殊字符指示消息开始。 然后,该字符便成为消息中的第一个字符。在该特定字符前接收到的任何字符都将被丢弃。 默认字符是 STX。
特殊条件:

通过字符序列识别消息开 始 (Recognize message start with a character sequence)

指定通过最多四个组态序列中的一个特殊字符序列来指示消息开始。 可以为每个序列最多指定 5 个字符。 对于每个字符位置,可以指定一个特定的十六进制字符,或者指定在序列匹配时忽略该字符(通配符字符)。 字符序列中最后一个特定字符终止该开始条件序列。

程序根据组态的开始条件对进入序列进行评估,直到满足开始条件为止。 只要满足了开始序列,就会开始评估结束条件。

最多可组态四个特定字符序列。 如果几个不同的字符序列都指示消息开始,则使用多序列开始条件。 如果与其中一个字符序列相匹配,消息就会开始。

检查开始条件的顺序是:

          • 线路空闲
          • 线路中断
          • 字符或字符序列

检查多个开始条件时,如果有一个条件没有满足,则 CM 或 CB 将从第一个所需的条件开始重新启动检查。 CM 或 CB 确定已满足启动条件后,将开始评估结束条件。

组态示例 - 消息在两个字符序列出现一个时开始

请注意以下消息开始条件组态:

S7-1200 可编程控制器 通信处理器-242 S7-1200 可编程控制器 通信处理器-243

S7-1200 可编程控制器 通信处理器-244

对于该组态,只要出现其中一个序列,即会满足开始条件:

  • 接到一个由五个字符构成的序列,且其第一个字符是 0x6A 而第五个字符是 0x1C

时。 对于该组态,位置 2、3 和 4 的字符可以是任意字符。 在接到第五个字符后,将开始评估结束条件。

  • 接到两个连续的 0x6A 字符(前面为任意字符)时。 在这种情况下,会在接到第二个

0x6A 后开始评估结束条件(3 个字符)。 第一个 0x6A 前面的字符包含在开始条件中。

满足该开始条件的实例序列有:

  • <任意字符> 6A 6A
  • 6A 12 14 18 1C
  • 6A 44 A5 D2 1C
消息结束条件

用户还可以组态通信接口识别消息结束的方式。 可以组态多个消息结束条件。 如果出现组态条件中的任何一个,消息就会结束。

例如,可以采用消息超时 300 ms、字符间超时 40 个位的时间以及最大长度 50 个字节作为消息结束的结束条件。 如果接收消息的时间超过 300 ms、任意两个字符间的间隔超过

40 个位的时间或接收到 50 个字节,消息即会结束。

参数 定义
通过消息超时识别消息结束 (Recognize message end by message timeout) 经过了组态的消息结束等待时间后,视为消息结束。 消息超时时间从满足开始条件开始计算。 默认值是 200 ms,有效范围是 0 到 65535 ms。

S7-1200 可编程控制器 通信处理器-245 S7-1200 可编程控制器 通信处理器-246

ཱ ི

① 接收的字符

② 满足消息开始条件: 消息定时器启动

③ 消息定时器时间已到并终止消息

通过响应超时识别消息结束 (Recognize message end by response timeout) 如果在接收到有效的开始序列之前超过了组态的响应等待时间,视为消息结

束。 响应超时时间从传送结束和 CM 或 CB 开始接收操作时开始计算。 默认响应超时时间为 200 ms,取值范围是 0 到 65535 ms。如果在响应时间段RCVTIME 内没有接收到字符,将向相应的 RCV_PTP 指令返回错误。 响应超时不定义具体结束条件。 它仅指定必须在指定时间内成功接收字符。 用户必须另组态一个结束条件来指示实际的消息结束。

཰ ཱ

5&97,0(

S7-1200 可编程控制器 通信处理器-247

① 传送的字符

② 接收的字符

③ 必须在该时间之前成功接收到第一个字符。

参数 定义
通过字符间隙识别消息结 经过了组态的消息中两个连续字符间的最大超时后,视为消息结束。 字符间隙的默认值是 12 个位的时间,最大值是 65535 个位的时间,即最长 8 秒。

S7-1200 可编程控制器 通信处理器-248 S7-1200 可编程控制器 通信处理器-249 S7-1200 可编程控制器 通信处理器-250

ཱ ཱ ི

① 接收的字符

② 重启字符间定时器

③ 字符间定时器时间已到并终止消息。

束 (Recognize message
end by inter-character
gap)
通过最大长度识别消息结 在接收到组态的最大字符数后,视为消息结束。 最大长度的有效范围是 1 到
束 (Recognize message 1023。
end by max length) 使用该条件可以防止消息缓冲区超负荷运行错误。 如果将该结束条件与超时结
束条件结合使用,在出现超时条件时,即使未达到最大长度也会提供所有有效
的已接收字符。 仅当最大长度已知时,该条件才支持长度可变的协议。
从消息读取消息长度(Read message length from message) 消息本身指定消息长度。 在接收到指定长度的消息后,视为消息结束。 以下说明了用于指定和解释消息长度的方法。
通过字符识别消息结束(Recognize message end with a character) 在接收到指定的字符后,视为消息结束。
通过字符序列识别消息结 在接收到指定的字符序列后,视为消息结束。 可以指定最多由 5 个字符组成的
束 (Recognize message 序列。 对于每个字符位置,可以指定一个具体的十六进制字符,或者指定在序
end with a character 列匹配时忽略该字符。
sequence) 结束条件不包括被忽略的前导字符。 结束条件包括被忽略的尾随字符。
组态示例 - 出现字符序列时结束消息

请注意以下消息结束条件组态:

S7-1200 可编程控制器 通信处理器-251

在这种情况下,在接收到两个连续的 0x7A 字符(后跟任意两个字符)时,即满足结束条件。 0x7A 0x7A 序列前面的字符不是结束字符序列的组成部分。 终止结束字符序列时需要跟在 0x7A 0x7A 序列后面的两个字符。 字符位置 4 和 5 中接收的值不相关,但必须接收它们才能满足结束条件。

在消息中指定消息长度

选择在消息中包括消息长度这一特殊条件时,必须提供三个用于定义消息长度相关信息的参数。

实际消息结构会因所用的协议而变化。 三个参数如下所示:

  • n: 消息中出现长度说明符的字符位置(从 1 开始)
  • 长度大小: 长度说明符的字节数(1、2 或 4)
  • 长度 m: 跟在长度说明符后、不包括在长度计数范围内的字符数

结束字符可不连续。 “长度 m”值可用于指定大小不包含在长度字段中的校验和字段的长度。

这些字段位于设备属性的接收消息组态中:

S7-1200 可编程控制器 通信处理器-252

实例 1: 假设某条消息是根据以下协议构造的:

STX Len (n) 长度计数包括字符 3 到 14
ADR PKE INDEX PWD STW HSW BCC
1 2 3 4 5 6 7 8 9 10 11 12 13 14
STX 0x0C xx xxxx xxxx xxxx xxxx xxxx xx

请按以下说明组态该消息的接收消息长度参数:

  • n = 2(消息长度从字节 2 开始。)
  • 长度大小 = 1(消息长度在一个字节中定义。)
  • 长度 m = 0(长度说明符后没有不包括在长度计数中的字符。 长度说明符后有 12 个字符。)

在本例中,从 3 到 14(包括 3 和 14)的字符都是 Len (n) 计数的字符。实例 2: 假设另一条消息是根据以下协议构造的:

SD1 Len (n) Len (n) SD2 长度计数包括字符 5 到 10 FCS ED
DA SA FA 数据单元 = 3 个字节
1 2 3 4 5 6 7 8 9 10 11 12
xx 0x06 0x06 xx xx xx xx xx xx xx xx xx

请按以下说明组态该消息的接收消息长度参数:

  • n = 3(消息长度从字节 3 开始。)
  • 长度大小 = 1(消息长度在一个字节中定义。)
  • 长度 m = 3(长度说明符后有 3 个字符不包括在长度计数中。 在本实例的协议中,字符 SD2、FCS 和 ED 不包括在长度计数中。 其它 6 个字符均包括在长度计数中;因此,长度说明符后总共有 9 个字符。)

在本例中,从 5 到 10(包括 5 和 10)的字符都是 Len (n) 计数的字符。

设计 PtP 通信

STEP 7 提供了一些扩展指令,使得用户程序能够使用程序中设计和指定的协议来执行点对点通信。 这些指令可以分为以下两类:

  • 组态指令
  • 通信指令
组态指令

必须先组态通信接口端口以及用于发送数据和接收数据的参数,然后才能通过用户程序执行 PtP 通信。

可以通过设备配置或用户程序中的如下指令,对各个 CM 或 CB 执行端口组态和消息组态:

  • PORT_CFG (页 613)
  • SEND_CFG (页 615)
  • RCV_CFG (页 616)
通信指令

PtP 通信指令使用户程序能够与通信接口交换消息。 有关使用这些指令传送数据的信息,请参见 数据一致性 (页 154)部分。

所有 PtP 功能都是异步运行的。 用户程序可以使用轮询架构来确定传送和接收的状态。

SEND_PTP 和 RCV_PTP 可以同时执行。 通信模块和通信板根据需要对传送和接收消息进行缓冲,最大缓冲区大小为 1024 字节。

CM 和 CB 与实际的点对点设备交换消息。 消息协议位于一个缓冲区中,该缓冲区与特定通信端口交换信息。 缓冲区和端口是发送和接收指令的参数:

  • SEND_PTP (页 622)
  • RCV_PTP (页 625)

以下指令可用于复位接收缓冲区,以及获取和设置特定的 RS232 信号:

  • RCV_RST (页 627)
  • SGN_GET (页 628)
  • SGN_SET (页 629)
轮询架构

必须循环/周期性调用 S7-1200 点对点指令以检查收到的消息。 发送轮训可在发送结束时刻即告知用户程序。

轮询架构: 主站

主站的典型轮询顺序如下:

          1. SEND_PTP 指令启动到 CM 或 CB 的传送。
          2. 后续扫描期间会执行 SEND_PTP 指令以轮询传送完成状态。
          3. 当 SEND_PTP 指令指示传送完成时,用户代码可以准备接收响应。
          4. RCV_PTP 指令反复执行以检查响应。 在 CM 或 CB 收到响应消息后,RCV_PTP 指令将响应复制到 CPU 并指示已接收到新数据。
          5. 用户程序随即可处理响应。
          6. 转到第 1 步并重复该循环。
轮询架构: 从站

从站的典型轮询顺序如下:

  1. 每次扫描用户程序都会执行 RCV_PTP 指令。
  2. CM 或 CB 收到请求后,RCV_PTP 指令将指示新数据准备就绪并将请求复制到 CPU

中。

  1. 用户程序随即处理请求并生成响应。
  2. 使用 SEND_PTP 指令将该响应往回发送给主站。
  3. 反复执行 SEND_PTP 以确保执行传送。
  4. 转到第 1 步并重复该循环。

从站在等待响应期间,必须尽量频繁地调用 RCV_PTP,以便能够在主站超时之前接到来自主站的传送。 要完成该任务,用户程序可以从循环 OB 调用 RCV_PTP,且循环时间应足够大,以便能在超时时间用完之前接到来自主站的传送。 如果将 OB 循环时间设置为可在主站的超时时间内执行该指令两次,则用户程序便可接到主站的传送,而不会错过任何传送。

示例: 点对点通信

在此示例中,S7-1200 CPU 通过 CM 1241 RS232 模块与装有终端仿真器的 PC 通信。此示例中的点对点组态和 STEP 7 程序说明了 CPU 如何从 PC 接收消息和将该消息回送到 PC。

. . .

S7-1200 可编程控制器 通信处理器-253 S7-1200 可编程控制器 通信处理器-254 S7-1200 可编程控制器 通信处理器-255 S7-1200 可编程控制器 通信处理器-256 S7-1200 可编程控制器 通信处理器-257 S7-1200 可编程控制器 通信处理器-258 S7-1200 可编程控制器 通信处理器-259 S7-1200 可编程控制器 通信处理器-260 S7-1200 可编程控制器 通信处理器-261 S7-1200 可编程控制器 通信处理器-262

必须将 CM 1241 RS232 模块的通信接口连接到 PC 的 RS232 接口(通常为 COM1)。由于这两个端口都是数据终端设备 (DTE),所以在连接这两个端口时必须交换接收和发送引脚(引脚 2 和 3),可通过以下任何一种方法实现交换:

        • 使用 NULL 调制解调器适配器和标准 RS232 电缆交换引脚 2 和 3。
        • 使用已交换引脚 2 和 3 的 NULL 调制解调器电缆。 通常可以将电缆两端是否带有两个 9 针 D 型母头连接器作为识别 NULL 调制解调器电缆的依据。
组态通信模块

可通过 STEP 7 中的设备组态或通过用户程序指令来组态 CM 1241。 此示例使用设备组态方法。

          • 端口组态: 在“设备组态”(Device configuration) 中单击 CM 模块的通信端口,然后如下所示组态该端口:

S7-1200 可编程控制器 通信处理器-263

说明

“操作模式”和“接收线路初始状态”的组态设置,只适用于 CM 1241 (RS422/RS485) 模块。 其它 CM 1241 模块没有这些端口组态设置。 请参见组态 RS422 和 RS485

(页 648)

          • 传送消息组态: 接受传送消息组态的默认值。 在消息开始时将不发送中断信号。
          • 接收消息开始组态: 将 CM 1241 组态为在通信线路处于非激活状态至少 50 个位时间(在 9600 波特时约为 5 毫秒 = 50 * 1/9600)时开始接收消息:

S7-1200 可编程控制器 通信处理器-264

接收消息结束组态: 将 CM 1241 组态为在最多接收到 100 个字节或换行字符(十进制数 10 或十六进制数 A)时结束消息。 结束序列最多允许序列中具有五个结束字符。 该序列中的第五个字符是换行字符。 前面四个结束序列字符均是“不相关”字符或不选择的字符。 CM 1241 不评估“不相关”字符,但会在零或更多“不相关”字符后面寻找指示消息结束的换行字符。

S7-1200 可编程控制器 通信处理器-265 S7-1200 可编程控制器 通信处理器-266

组态 RS422 和 RS485

组态 RS422

对于 RS422 模式,有三种工作模式,具体取决于网络组态。 根据网络中的设备选择其中一种工作模式。 接收线路初始状态的不同选择参考了如下所示的详细情况。

  • 全双工 (RS422) 四线制模式(点对点连接): 在网络中有两台设备时选择此选项。在接收线路初始状态中:
    • 在提供偏置和终端时(第 3 种情况),选择无。
    • 选择正向偏置以使用内部偏置和终端(第 2 种情况)。
    • 选择反向偏置以使用内部偏置和终端,并为两台设备启用电缆断线检测(第 1 种情况)。
  • 全双工 (RS422) 四线制模式(多点主站): 当网络具有一个主站和多个从站时,为主站选择此选项。 在接收线路初始状态中:
    • 在提供偏置和终端时(第 3 种情况),选择无。
    • 选择正向偏置以使用内部偏置和终端(第 2 种情况)。
    • 在此模式下,不能进行电缆断线检测。
  • 全双工 (RS422) 四线制模式(多点从站): 当网络具有一个主站和多个从站时,为所有从站选择此选项。 在接收线路初始状态中:
    • 在提供偏置和终端时(第 3 种情况),选择无。
    • 选择正向偏置以使用内部偏置和终端(第 2 种情况)。
    • 选择反向偏置以使用内部偏置和终端,并为从站启用电缆断线检测(第 1 种情况)。
第 1 种情况: RS422,带电缆断线检测
      • 工作模式:RS422
      • 接收线路初始状态: 反向偏置(有偏置,R(A) > R(B) > 0V)
      • 电缆断线: 启用电缆断线检测(发送器始终处于激活状态)

S7-1200 可编程控制器 通信处理器-267

0 9

 

2

9

330 ˖

㓎⡙

3 5(%) +

8 5($)

5

9

0 9

5(%) +

5($)

5 9

5

3

5 9

2

 

⨿我俱䰘䙞杤 330 ʼn

2

8

第 2 种情况: RS422,不带电缆断线检测,正向偏置
        • 工作模式:RS422
        • 接收线路初始状态: 正向偏置(有偏置,R(B) > R(A) > 0V)
        • 电缆断线: 无电缆断线检测(发送器仅在发送时才启用)

S7-1200 可编程控制器 通信处理器-268

5 9

5(%) +

5($)

 

5 9

5(%) +

5($)

0 9

0 9

第 3 种情况: RS422: 不带电缆断线检测,无偏置
        • 工作模式:RS422
        • 接收线路初始状态: 无偏置
        • 电缆断线: 无电缆断线检测(发送器仅在发送时才启用)

偏置和终端由用户在网络末端节点处添加。

 

㲌⽡ⅸ傗

ⳋ㍠䰘/⍟慉儮

2

9

5 9

3

5(%) +

8

5($)

0 9

㜉ⅸ傗

3 5(%) +

S7-1200 可编程控制器 通信处理器-269

8

5($)

㠶⏊➑ lῷ䰂

2

9

5 9

5(%) +3

5($) 8

0 9

㠶⏊➑ 2ῷ䰂

㲌⽡ⅸ傗

9

2

组态 RS485

对于 RS485 模式,只有一种工作模式。 接收线路初始状态的不同选择参考了如下所示的详细情况。

  • 半双工 (RS485) 两线制模式。 在接收线路初始状态中:
    • 在提供偏置和终端时(第 5 种情况),选择无。
    • 选择正向偏置以使用内部偏置和终端(第 4 种情况)。
第 4 种情况:RS485: 正向偏置
      • 工作模式:RS485
      • 接收线路初始状态: 正向偏置(有偏置,R(B) > R(A) > 0V)

 

5 9

5(%) +

5($)

0 9

0 9

5(%) +

5($)

5 9

第 5 种情况:RS485: 无偏置(外部偏置)
      • 工作模式:RS485
      • 接收线路初始状态: 无偏置(需要外部偏置)

 

5(%) +

5($)

5(%) +

5($)

编写 STEP 7 程序

此示例程序使用全局数据块作为通信缓冲区,使用 RCV_PTP 指令 (页 625)从终端仿真器接收数据,使用 SEND_PTP 指令 (页 622)向终端仿真器回送缓冲数据。 要对该示例编程,需要添加数据块组态和程序 OB1,如下所述。

全局数据块“Comm_Buffer”: 创建一个全局数据块 (DB) 并将其命名为“Comm_Buffer”。在该数据块中创建一个名为“buffer”,数据类型为“字节数组 [0 .. 99]”的值。

程序段 1: 只要 SEND_PTP 未激活,就启用 RCV_PTP 指令。 在程序段 4 中,

MW20.0 中的 Tag_8 在发送操作完成时进行指示,因此是在通信模块相应地准备好接收消息时进行指示。

S7-1200 可编程控制器 通信处理器-270

程序段 2: 使用由 RCV_PTP 指令设置的 NDR 值(M0.0 中的 Tag_1)来复制接收到的字节数,并使一个标记(M20.0 中的 Tag_8)置位以触发 SEND_PTP 指令。

S7-1200 可编程控制器 通信处理器-271

程序段 3: M20.0 标记置位时启用 SEND_PTP 指令。 同时还使用此标记将 REQ 输入设置为 TRUE 一个扫描周期时间。 REQ 输入会通知 SEND_PTP 指令要传送新请求。

REQ 输入必须仅在 SEND_PTP 的一个执行周期内设置为 TRUE。 每个扫描周期都会执行 SEND_PTP 指令,直到传送操作完成。 CM 1241 传送完消息的最后一个字节时,传

送操作完成。传送操作完成后,DONE 输出(M10.0 中的 Tag_5)将被置位为 TRUE 并持续 SEND_PTP 的一个执行周期。

S7-1200 可编程控制器 通信处理器-272

程序段 4: 监视 SEND_PTP 的 DONE 输出并在传送操作完成时复位传送标记(M20.0 中的 Tag_8)。 传送标记复位后,程序段 1 中的 RCV_PTP 指令可以接收下一条消息。

S7-1200 可编程控制器 通信处理器-273

组态终端仿真器

必须设置终端仿真器以支持此示例程序。 几乎可以在 PC 上使用任何终端仿真器,例如,超级终端。 确定终端仿真器处于断开模式后,如下所述编辑各设置:

  1. 将终端仿真器设置为使用 PC 上的 RS232 端口(通常为 COM1)。
  2. 将端口组态为 9600 波特、8 个数据位、无奇偶校验(无)、1 个停止位和无流控制。
  3. 更改终端仿真器设置使其仿真 ANSI 终端。
  4. 组态终端仿真器 ASCII 设置,使其在每行后(用户按下 Enter 键后)发送换行信号。
  5. 本地回送字符,以便终端仿真器显示输入的内容。
运行示例程序

要运行示例程序,请执行以下步骤:

  1. 将 STEP 7 程序下载到 CPU 并确保其处于 RUN 模式。
  2. 单击终端仿真器上的“连接”(connect) 按钮以应用组态更改并启动与 CM 1241 的终端会话。
  3. 在 PC 中键入字符并按 Enter 键。

终端仿真器会将输入的字符发送到 CM 1241 和 CPU。 然后,CPU 程序将这些字符回送到终端仿真器。

12.4 通用串行接口 (USS) 通信

USS 指令可控制支持通用串行接口 (USS) 的电机驱动器的运行。 可以使用 USS 指令通过与 CM 1241 RS485 通信模块或 CB 1241 RS485 通信板的 RS485 连接与多个驱动器通信。 一个 S7-1200 CPU 中最多可安装三个 CM 1241 RS422/RS485 模块和一个 CB 1241 RS485 板。 每个 RS485 端口最多操作十六台驱动器。

USS 协议使用主从网络通过串行总线进行通信。主站使用地址参数向所选从站发送消 息。 如果未收到传送请求,从站本身不会执行传送操作。 各从站之间无法进行直接消息传送。 USS 通信以半双工模式执行。 以下 USS 图示显示了一个驱动器应用示例的网络图。

#- l24l 23422/23485

㭊⢀

37—l200 #05 #05

殚 ⏑➑ 1 2 3 4 5

S7-1200 可编程控制器 通信处理器-274

533

偺 倅 l

殚 ⏑➑ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

533

偺 倅 2

使用 USS 协议的要求

四条 USS 指令使用 1 个 FB 和 3 个 FC 来支持 USS 协议。 一个 USS 网络使用一个USS_PORT 背景数据块 (DB)。 USS_PORT 背景数据块包含供该 USS 网络中所有驱动器使用的临时存储区和缓冲区。 各 USS 指令共享此数据块中的信息。

533?$26?$" 㚙㒗⢀㝘┓刦慃惰 533 㐰‍朝㓎峨朗䞭值⋛④Ѧ

866B'59B'%

866B3257

866B'%

866B'59B'%

#- l24l 23485

#" l24l 23485

㳸ὓ慃ℊ䰘┌㠩⩃㙘㐪l6 ὓ殚⏑➑Ѧ₨䙑 l ⍙ l6 ₅ὣ 殚⏑➑⓫㚙㥯悼

2 ⊎Ѧ

866B'59B'%

866B'59

'5,9(

䚂 ⃄ 040

#/- 㚙㒗₨䙑

50 ὓⲀ 厫

1
'ULYH 2 GDWD
3
4
5
6
7
8
9
10
11
12
13
14
15
16

2

'ULYH 2

'ULYH 1

866B530 '5,9(

2

866B:30 '5,9(

连接到一个 RS485 端口的所有驱动器(最多 16 个)是同一 USS 网络的一部分。 连接到另一 RS485 端口的所有驱动器是另一 USS 网络的一部分。 各 USS 网络通过单独的数据块进行管理。 与各 USS 网络相关的所有指令必须共享该数据块。 这包括用于控制各

USS 网络上的所有控制器的所有 USS_DRV、USS_PORT、USS_RPM 和 USS_WPM

指令。

USS_DRV 指令是函数块 (FB)。 在程序编辑器中放置 USS_DRV 指令时,系统将通过“调用选项”(Call options) 对话框提示您为该 FB 分配 DB。 如果对于该 USS 网络而言,它是该程序中的第一条 USS_DRV 指令,则可以接受默认的 DB 分配(或根据需要更改名

称),将相应地创建一个新 DB。 但是,如果对于该通道它不是第一条 USS_DRV 指令,则必须使用“调用选项”(Call options) 对话框中的下拉列表选择先前为该 USS 网络分配的 DB 名称。

指令 USS_PORT、USS_RPM 和 USS_WPM 全部都是函数 (FC)。 在编辑器中放置这些

FC 时不分配 DB。 而您必须给这些指令的“USS_DB”输入分配合适的 DB 引用。 双击该参数字段,然后单击参数助手图标可查看可用的 DB 名称。

USS_PORT 函数通过点对点 (PtP) RS485 通信端口处理 CPU 和驱动器之间的实际通信。 每次调用此功能可处理与一个驱动器的一次通信。 用户程序必须尽快调用此功能以防止与驱动器通信超时。 可在主程序循环 OB 或任何中断 OB 中调用此函数。

通常,应在循环中断 OB 中调用 USS_PORT 函数。该循环中断 OB 的循环时间应设置为最小调用间隔的一半左右(例如,1200 波特的通信应使用 350 ms 或更短的循环时

间)。

用户程序通过 USS_DRV 函数块可访问 USS 网络上指定的驱动器。 其输入和输出是驱动器的状态和控制。 如果网络上有 16 个驱动器,则用户程序必须具有至少 16 个

USS_DRV 调用,每个驱动器一个调用。 应该以控制驱动器工作所需的速率调用这些块。

只能在主程序循环 OB 中调用 USS_DRV 函数块。

S7-1200 可编程控制器 通信处理器-275小心
只能在主程序循环 OB 中调用 USS_DRV、USS_RPM 和 USS_WPM。可在任何 OB 中调用 USS_PORT 函数,通常是在循环中断 OB 中调用。

不要在优先级比 USS_PORT 指令所在 OB 的优先级高的 OB 中使用指令 USS_DRV、

USS_RPM 或 USS_WPM。 例如,不要将 USS_PORT 放置在主程序循环 OB 中,而将

USS_RPM 放置在循环中断 OB 中。如果未能防止 USS_PORT 执行的中断,则会产生

意外错误。

USS_RPM 和 USS_WPM 功能可读取和写入远程驱动器工作参数。 这些参数控制驱动器的内部运行。 有关这些参数的定义,请参见驱动器手册。 用户程序可包含尽可能多的这些功能,但在任何特定时刻,每个驱动器只能激活一个读或写请求。 只能在主程序循环

OB 中调用 USS_RPM 和 USS_WPM 函数。

计算与驱动器通信所需的时间

与驱动器进行的通信与 S7-1200 扫描周期不同步。 在完成一个驱动器通信事务之前,

S7-1200 通常完成了多个扫描。

USS_PORT 间隔是一个驱动器事务所需的时间。 下表列出了各个通信波特率下的最小

USS_PORT 时间间隔。 比 USS_PORT 间隔更频繁地调用 USS_PORT 功能不会增加事务数。 如果通信错误导致尝试 3 次才能完成事务,则驱动器超时间隔是处理该事务可能花费的时间。 默认情况下,USS 协议库对每个事务最多自动进行 2 次重试。

表格 12- 34 计算时间要求

波特率 计算的最小 USS_PORT 调用间隔(毫秒) 每个驱动器的驱动器消息间隔超时(毫秒)
1200 790 2370
2400 405 1215
4800 212.5 638
9600 116.3 349
19200 68.2 205
38400 44.1 133
57600 36.1 109
115200 28.1 85

USS_DRV 指令

表格 12- 35 USS_DRV 指令

LAD/FBD SCL 说明
默认视图

S7-1200 可编程控制器 通信处理器-276

"USS_DRV_DB"(

RUN:=_bool_in_, OFF2:=_bool_in_, OFF3:=_bool_in_, F_ACK:=_bool_in_, DIR:=_bool_in_, DRIVE:=_usint_in_, PZD_LEN:=_usint_in_, SPEED_SP:=_real_in_, CTRL3:=_word_in_, CTRL4:=_word_in_, CTRL5:=_word_in_, CTRL6:=_word_in_, CTRL7:=_word_in_, CTRL8:=_word_in_, NDR=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, RUN_EN=>_bool_out_, D_DIR=>_bool_out_, INHIBIT=>_bool_out_, FAULT=>_bool_out_, SPEED=>_real_out_, STATUS1=>_word_out_, STATUS3=>_word_out_, STATUS4=>_word_out_, STATUS5=>_word_out_, STATUS6=>_word_out_, STATUS7=>_word_out_, STATUS8=>_word_out_);

USS_DRV 指令通过创建请求消息和解释驱动器响应消息与驱动器交换数据。 每个驱动器应使用一个单独的函数块,但与一个 USS 网络和

PtP 通信端口相关的所有 USS 函数必须使用同一个背景数据块。 必须在放置第一个USS_DRV 指令时创建 DB 名称,然后引用初次指令使用时创建的 DB。

STEP 7 会在插入指令时自动创建该 DB。

展开后的视图

S7-1200 可编程控制器 通信处理器-277

1 LAD 和 FBD: 通过单击功能框的底部,可展开该功能框,以显示所有参数。 灰显的参数引脚可选,不需要进行参数分配。

表格 12- 36 参数的数据类型

参数和类型 数据类型 说明
RUN IN Bool 驱动器起始位: 该输入为真时,将使驱动器以预设速度运行。 如果在驱动器运行时 RUN 变为假,电机将减速直至停止。 这种行为不同于切断电源 (OFF2) 或对电机进行制动

(OFF3)。

OFF2 IN Bool 电气停止位: 该位为假时,将使驱动器在不经过制动的情况下逐渐自然停止。
OFF3 IN Bool 快速停止位: 该位为假时,将通过制动的方式使驱动器快速停止,而不只是使驱动器逐渐自然停止。
F_ACK IN Bool 故障确认位: 设置该位以复位驱动器上的故障位。 清除故障后会设置该位,以告知驱动器不再需要指示前一个故障。
DIR IN Bool 驱动器方向控制: 设置该位以指示方向为向前(对于正

SPEED_SP)。

DRIVE IN USInt 驱动器地址: 该输入是 USS 驱动器的地址。 有效范围是驱动器 1 到驱动器 16。
PZD_LEN IN USInt 字长度: 这是 PZD 数据的字数。 有效值为 2、4、6 或 8 个字。 默认值为 2。
SPEED_SP IN Real 速度设定值: 这是以组态频率的百分比表示的驱动器速度。正值表示方向向前(DIR 为真时)。 有效范围是 200.00 到 -

200.00。

CTRL3 IN Word 控制字 3: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL4 IN Word 控制字 4: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL5 IN Word 控制字 5: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL6 IN Word 控制字 6: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL7 IN Word 控制字 7: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
CTRL8 IN Word 控制字 8: 写入驱动器上用户可组态参数的值。 必须在驱动器上组态该参数。 (可选参数)
NDR OUT Bool 新数据就绪: 该位为真时,表示输出包含新通信请求数据。
参数和类型 数据类型 说明
ERROR OUT Bool 出现错误: 此参数为真时,表示发生错误,STATUS 输出有效。 其它所有输出在出错时均设置为零。 仅在 USS_PORT

指令的 ERROR 和 STATUS 输出中报告通信错误。

STATUS OUT Word 请求的状态值指示扫描的结果。 这不是从驱动器返回的状态字。
RUN_EN OUT Bool 运行已启用: 该位指示驱动器是否在运行。
D_DIR OUT Bool 驱动器方向: 该位指示驱动器是否正在向前运行。
INHIBIT OUT Bool 驱动器已禁止: 该位指示驱动器上禁止位的状态。
FAULT OUT Bool 驱动器故障: 该位指示驱动器已注册故障。 用户必须解决问题,并且在该位被置位时,设置 F_ACK 位以清除此位。
SPEED OUT Real 驱动器当前速度(驱动器状态字 2 的标定值): 以组态速度百分数形式表示的驱动器速度值。
STATUS1 OUT Word 驱动器状态字 1: 该值包含驱动器的固定状态位。
STATUS3 OUT Word 驱动器状态字 3: 该值包含驱动器上用户可组态的状态字。
STATUS4 OUT Word 驱动器状态字 4: 该值包含驱动器上用户可组态的状态字。
STATUS5 OUT Word 驱动器状态字 5: 该值包含驱动器上用户可组态的状态字。
STATUS6 OUT Word 驱动器状态字 6: 该值包含驱动器上用户可组态的状态字。
STATUS7 OUT Word 驱动器状态字 7: 该值包含驱动器上用户可组态的状态字。
STATUS8 OUT Word 驱动器状态字 8: 该值包含驱动器上用户可组态的状态字。

首次执行 USS_DRV 时,将在背景数据块中初始化由 USS 地址(参数 DRIVE)指示的驱动器。 完成初始化后,随后执行 USS_PORT 即可开始与具有此驱动器编号的驱动器通信。

更改驱动器编号操作将要求 CPU 从 STOP 模式切换到 RUN 模式以初始化相应的背景数据块。 将输入参数组态到 USS TX 消息缓冲区中,并从“前一个”有效响应缓冲区(如果存在)读取输出。 USS_DRV 执行期间不进行数据传送。 驱动器在 USS_PORT 执行时通 信。USS_DRV 仅组态要发送的消息并解释已从前一个请求中接收的数据。

用户可以使用 DIR 输入 (Bool) 或使用符号(正或负)和 SPEED_SP 输入 (Real) 控制驱动器旋转方向。 下表假定电机按正向旋转接线,说明这些输入如何一起决定驱动器旋转方向。

表格 12- 37 SPEED_SP 和 DIR 参数的交互作用

SPEED_SP DIR 驱动器旋转方向
数值 > 0 0 反转
数值 > 0 1 正转
数值 < 0 0 正转
数值 < 0 1 反转

USS_PORT 指令

表格 12- 38 USS_PORT 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-278 USS_PORT(

PORT:=_uint_in_, BAUD:=_dint_in_, ERROR=>_bool_out_, STATUS=>_word_out_, USS_DB:=_fbtref_inout_);

USS_PORT 指令用于处理 USS 网络上的通信。

表格 12- 39 参数的数据类型

参数和类型 数据类型 说明
PORT IN Port 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB

端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常量”(System constants) 选项卡中分配。

BAUD IN DInt 用于 USS 通信的波特率。
USS_DB INOUT USS_BASE 将 USS_DRV 指令放入程序时创建并初始化的背景数据块的名称。
ERROR OUT Bool 该输出为真时,表示发生错误,且 STATUS 输出有效。
STATUS OUT Word 请求的状态值指示扫描或初始化的结果。 对于有些状态代码, 还在“USS_Extended_Error”变量中提供了更多信息。

通常,程序中每个 PtP 通信端口只一个 USS_PORT 指令,且每次调用该功能都会处理与单个驱动器的通信。 与同一个 USS 网络和 PtP 通信端口相关的所有 USS 功能都必须使用同一个背景数据块。

用户程序执行 USS_PORT 指令的次数必须足够多,以防止驱动器超时。通常从循环中断

OB 调用 USS_PORT 以防止驱动器超时并确保 USS_DRV 调用可使用最新的 USS 数据更新内容。

USS_RPM 指令

表格 12- 40 USS_RPM 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-279 USS_RPM(REQ:=_bool_in_, USS_RPM 指令用于从驱动器读取参数。 与同一个 USS 网络和 PtP 通信端口相关的所有

USS 功能都必须使用同一个数据块。必须从主程序循环 OB 调用 USS_RPM。

DRIVE:=_usint_in_,
PARAM:=_uint_in_,
INDEX:=_uint_in_,
DONE=>_bool_out_,
ERROR=>_bool_out_,
STATUS=>_word_out_,
VALUE=>_variant_out_,
USS_DB:=_fbtref_inout_);

表格 12- 41 参数的数据类型

参数类型 数据类型 说明
REQ IN Bool 发送请求: REQ 为真时,表示需要新的读请求。 如果该参数的请求已处于待决状态,将忽略新请求。
DRIVE IN USInt 驱动器地址: DRIVE 是 USS 驱动器的地址。 有效范围是驱动器 1 到驱动器 16。
PARAM IN UInt 参数编号: PARAM 指示要写入的驱动器参数。 该参数的范围是 0 到 2047。在某些驱动器上,最高有效字节可以访问大于2047 的 PARAM 值。有关如何访问扩展范围的详细信息,请参

见驱动器手册。

INDEX IN UInt 参数索引: INDEX 指示要写入的驱动器参数索引。 索引为一个

16 位值,其中最低有效字节是实际索引值,其范围是 0 到

255。 最高有效字节也可供驱动器使用,且取决于具体的驱动器。 有关详细信息,请参见驱动器手册。

USS_DB INOUT USS_BASE 将 USS_DRV 指令放入程序时创建并初始化的背景数据块的名称。
参数类型 数据类型 说明
VALUE IN Word, Int, UInt, DWord, DInt, UDInt,

Real

这是已读取的参数的值,仅当 DONE 位为真时才有效。
DONE1 OUT Bool 该参数为真时,表示 VALUE 输出包含先前请求的读取参数值。

USS_DRV 发现来自驱动器的读响应数据时会设置该位。 满足以下条件之一时复位该位: 用户通过另一个 USS_WPM 轮询请求响应数据,或在执行接下来两个 USS_DRV 调用的第二个时

请求

ERROR OUT Bool 出现错误: ERROR 为真时,表示发生错误,并且 STATUS 输出有效。 其它所有输出在出错时均设置为零。 仅在

USS_PORT 指令的 ERROR 和 STATUS 输出中报告通信错

误。

STATUS OUT Word STATUS 表示读请求的结果。 对于有些状态代码,还在

“USS_Extended_Error”变量中提供了更多信息。

1 DONE 位表示已从参考电机驱动器读取有效数据并已将其传送给 CPU。 它不表示 USS 库能够立即读取另一参数。 必须将空的 PKW 请求发送到电机驱动器并由指令确认,才能使用特定驱动器的参数通道。 立即调用指定电机驱动器的 USS_RPM 或 USS_WPM FC 将导致 0x818A 错误。

USS_WPM 指令

说明

EEPROM 写操作(用于 USS 驱动器内部的 EEPROM)

请勿过多使用 EEPROM 永久写操作。 请尽可能减少 EEPROM 写操作次数以延长

EEPROM 的寿命。

表格 12- 42 USS_WPM 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-280 USS_WPM(REQ:=_bool_in_, DRIVE:=_usint_in_, PARAM:=_uint_in_, INDEX:=_uint_in_, EEPROM:=_bool_in_, VALUE:=_variant_in_, DONE=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, USS_DB:=_fbtref_inout_); USS_WPM 指令用于修改驱动器中的参数。 与同一个 USS 网络和 PtP 通信端口相关的所有

USS 功能都必须使用同一个数据块。

必须从主程序循环 OB 中调用 USS_WPM。

表格 12- 43 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 发送请求: REQ 为真时,表示需要新的写请求。 如果该参数的请求已处于待决状态,将忽略新请求。
DRIVE IN USInt 驱动器地址: DRIVE 是 USS 驱动器的地址。 有效范围是驱动器 1 到驱动器 16。
PARAM IN UInt 参数编号: PARAM 指示要写入的驱动器参数。 该参数的范围是 0 到 2047。在某些驱动器上,最高有效字节可以访问大于

2047 的 PARAM 值。有关如何访问扩展范围的详细信息,请参

见驱动器手册。

INDEX IN UInt 参数索引: INDEX 指示要写入的驱动器参数索引。 索引为一个

16 位值,其中最低有效字节是实际索引值,其范围是 0 到

255。 最高有效字节也可供驱动器使用,且取决于具体的驱动器。 有关详细信息,请参见驱动器手册。

EEPROM IN Bool 存储到驱动器 EEPROM: 该参数为真时,写驱动器参数事务将存储在驱动器 EEPROM 中。 如果为假,则写操作是临时的,

在驱动器循环上电后不会保留。

VALUE IN Word, Int, UInt, DWord, DInt, UDInt,

Real

要写入的参数值。 它必须在 REQ 切换时有效。
USS_DB INOUT USS_BASE 将 USS_DRV 指令放入程序时创建并初始化的背景数据块的名称。
参数和类型 数据类型 说明
DONE1 OUT Bool DONE 为真时,表示输入 VALUE 已写入驱动器。 USS_DRV 发现来自驱动器的写响应数据时会设置该位。如果用户通过另一个 USS_WPM 轮询请求响应数据,或在执行接下来两个

USS_DRV 调用的第二个时请求响应数据,则复位该位。

ERROR OUT Bool ERROR 为真时,表示发生错误,并且 STATUS 输出有效。 其它所有输出在出错时均设置为零。 仅在 USS_PORT 指令的

ERROR 和 STATUS 输出中报告通信错误。

STATUS OUT Word STATUS 表示写请求的结果。 对于有些状态代码,还在

“USS_Extended_Error”变量中提供了更多信息。

1 DONE 位表示已从参考电机驱动器读取有效数据并已将其传送给 CPU。 它不表示 USS 库能够立即读取另一参数。 必须将空的 PKW 请求发送到电机驱动器并由指令确认,才能使用特定驱动器的参数通道。 立即调用指定电机驱动器的 USS_RPM 或 USS_WPM FC 将导致 0x818A 错误。

USS 状态代码

在 USS 功能的 STATUS 输出端返回 USS 指令状态代码。

表格 12- 44 STATUS 代码 1

STATUS

(W#16#....)

说明
0000 无错误
8180 驱动器响应的长度与从驱动器收到的字符数不匹配。 出错的驱动器编号在

“USS_Extended_Error”变量中返回。 请参见本表格下方的扩展错误描述。

8181 VALUE 参数不是 Word、Real 或 DWord 数据类型。
8182 用户提供了 Word 参数值,但从驱动器响应中收到 DWord 或 Real 值。
8183 用户提供了 DWord 或 Real 参数值,但从驱动器响应中收到 Word 值。
8184 驱动器响应报文的校验和有错误。 出错的驱动器编号在“USS_Extended_Error”变量中返回。 请参见本表格下方的扩展错误描述。
8185 非法的驱动器地址(有效驱动器地址范围: 1 到 16)
8186 速度设定值超出有效范围(有效速度 SP 范围: -200% 到 200%)。
8187 对已发送的请求响应了错误的驱动器编号。 出错的驱动器编号在“USS_Extended_Error”变量中返回。 请参见本表格下方的扩展错误描述。
STATUS

(W#16#....)

说明
8188 指定的 PZD 字长度非法(有效范围 = 2、4、6 或 8 个字)
8189 指定了非法的波特率。
818A 参数请求通道正在由该驱动器的另一个请求使用。
818B 驱动器尚未对请求和重试做出响应。 出错的驱动器编号在“USS_Extended_Error”变量中返回。 请参见本表格下方的扩展错误描述。
818C 驱动器返回了有关参数请求操作的扩展错误。 请参见本表格下方的扩展错误描述。
818D 驱动器返回了有关参数请求操作的非法访问错误。 有关可能限制参数访问的原因信息,请参见驱动器手册。
818E 驱动器尚未初始化。 若从未调用过该驱动器的 USS_DRV,则该错误代码将返回到

USS_RPM 或 USS_WPM。 这会防止首次扫描 USS_DRV 的初始化过程覆盖未决的参数读/写请求,因为它会将驱动器初始化为新条目。 要修复该错误,请针对此驱动器编号调

用 USS_DRV。

80Ax-80Fx 从 USS 库调用的 PtP 通信 FB 返回的特定错误 - 这些错误代码值不会被 USS 库修改且在

PtP 指令说明中定义。

1 除了上述列出的 USS 指令错误,还可能返回底层 PtP 通信指令 (页 610)的错误信息。

对于一些 STATUS 代码,在 USS_DRV 背景数据块的“USS_Extended_Error”变量中提供更多信息。 对于 STATUS 代码 8180、8184、8187 和 818B(十六进制), USS_Extended_Error 包含出现通信错误的驱动器编号。 对于 STATUS 代码 818C(十六进制),USS_Extended_Error 包含使用 USS_RPM 或 USS_WPM 指令时从驱动器返回的驱动器错误代码。

仅报告有关 USS_PORT 指令(而非 USS_DRV 指令)的通信错误 (STATUS =

16#818B)。 例如,如果没有正确地终止网络,则驱动器可能切换到 RUN 模式,但

USS_DRV 指令将为相关输出参数全部显示 0。 在这种情况下,只能检测有关

USS_PORT 指令的通信错误。 由于该错误仅在一个扫描周期内可见,所以需要添加一些捕获逻辑,如下面的示例所示。 在本例中,当 USS_PORT 指令的错误位为 TRUE 时,

STATUS 和 USS_Extended_Error 值将保存到 M 存储器中。 当 STATUS 代码值是十六进制的 8180、8184、8187 或 818B 时,驱动器编号将放在 USS_Extended_Error 变量中。

S7-1200 可编程控制器 通信处理器-281网络 1 "PortStatus" 端口状态和

"USS_DRV_DB".USS_Extended_Err

or 扩展错误代码值仅在一个程序扫描周期内有效。 必须捕获这些值以便后期处理。

S7-1200 可编程控制器 通信处理器-282网络 2“PortError”触点触发将

“PortStatus”值存储在“LastPortStatus”中以及将"USS_DRV_DB".USS_Extended_Err

or 值存储在“LastExtError”中。

USS 驱动器支持对驱动器的内部参数进行读写访问。 通过该功能可进行驱动器的远程控制和组态。 由于发生类似值超出范围或驱动器当前模式的请求非法等错误,驱动器参数访问操作可能会失败。 驱动器会生成在“USS_Extended_Error”变量中返回的错误代码值。 该错误代码值仅对 USS_RPM 或 USS_WPM 指令的最后一次执行有效。 当STATUS code 值为十六进制的 818C 时,驱动器错误代码将放入 USS_Extended_Error 变量中。 “USS_Extended_Error”的错误代码值取决于驱动器型号。 有关读写参数操作的扩展错误代码的描述,请参见驱动器手册。

常规驱动器设置信息

常规驱动器设置要求
        • 驱动器必须设置为使用 4 个 PKW 字。
        • 驱动器可组态为使用 2、4、6 或 8 个 PZD 字。
        • 驱动器中 PZD 字的数量必须与该驱动器的 USS_DRV 指令的 PZD_LEN 输入相匹配。
        • 所有驱动器的波特率必须与 USS_PORT 指令的 BAUD 输入相匹配。
        • 驱动器必须设置为可进行远程控制。
        • 驱动器必须设置为使用适合通信链路上 USS 的频率设定值。
        • 驱动器地址必须设置为 1 到 16,并且与 USS_DRV 块上对应该驱动器的 DRIVE 输入相匹配。
          • 驱动器的方向控制必须设置为使用驱动器设定值的极性。
          • 必须正确终止 RS485 网络。
连接 MicroMaster 驱动器

本部分以 SIEMENS MicroMaster 驱动器为例提供相关信息。 对于其它驱动器,请参见驱动器手册查看相关设置说明。

要建立与 MicroMaster 系列 4 (MM4) 驱动器的连接,请将 RS485 电缆的两端插入两个用于 USS 操作的笼式夹持无螺丝端子中。 可使用标准 PROFIBUS 电缆和连接器连接 S7-

1200。

S7-1200 可编程控制器 通信处理器-283小心
参考电位不同的互连设备可导致互连电缆中有不想要的电流流过

这些不想要的电流可引发通信错误或损坏设备。 确保要使用通信电缆连接的所有设备都共用一个公共电路参考点,或者进行隔离以防止出现不想要的电流。 屏蔽层必须与外壳地或 9 针连接器的引脚 1 连接。 建议将 MicroMaster 驱动器上的接线端子 2--0V 与外壳

地连接。

RS485 电缆另一端的两根线必须插入

S7-1200 可编程控制器 通信处理器-284

B (P)

A (N)

MM4 驱动器的接线板中。 要实现

MM4 驱动器上的电缆连接,请去掉驱动器的盖,露出接线板。 有关如何去掉特定驱动器的盖的详细信息,请参见 MM4 用户手册。

接线板连接标有数字。 使用 S7-1200 侧的 PROFIBUS 连接器,将电缆的 A 端子连接到驱动器的端子 15(对于 MM420)或端子 30 (MM440)。 将 B (P) A (N) 电缆连接器的 B 端子连接到端子 14 (MM420) 或端子 29 (MM440)。

如果 S7-1200 是网络中的终止节点,或者如果是点对点连接,则需要使用连接器的端子

A1 和 B1(不是 A2 和 B2),这是因为通过这两个端子可进行终端设置(例如,使用6ES7 972--0BA40--0X40 型号的 DP 连接器)。

S7-1200 可编程控制器 通信处理器-285小心
确保给设备通电之前已正确装上了驱动器盖。

如果驱动器被组态为网络中的终止节点, 则还必须将终端电阻和偏压电阻连接到适当的终端连接。 此图显示了终止和偏压所需的 MM4 驱动器连接示例。

P 14

N 15

0V 2

+10 V 1

MM420

1.5K ohm

S7-1200 可编程控制器 通信处理器-286 S7-1200 可编程控制器 通信处理器-287 S7-1200 可编程控制器 通信处理器-288 S7-1200 可编程控制器 通信处理器-289

120 ohm

470 ohm

P 29

N 30

0V 2

+10 V 1

MM440

1.5K ohm

S7-1200 可编程控制器 通信处理器-290 S7-1200 可编程控制器 通信处理器-291 S7-1200 可编程控制器 通信处理器-292 S7-1200 可编程控制器 通信处理器-293

120 ohm

470 ohm

设置 MM4 驱动器

将驱动器与 S7-1200 连接之前,必须确保驱动器具有下列系统参数。 使用驱动器上的小键盘设置参数:

1. 恢复驱动器的出厂设置(可选)。 P0010=30 P0970=1
如果跳过步骤 1,则请确保这些参数被设置成所指示的值。 USS PZD 长度 = P2012 索引 0 =

(2、4、6 或 8)

USS PKW 长度 = P2013 索引 0 = 4

2. 启用对所有参数的读/写访问(专家模式)。 P0003=3
3. 检查驱动器的电机设置。 所使用的电机不同,设置也会不同。

要设置参数 P304、P305、P307、P310 和 P311,首先必须将参数 P010 设置为 1(快速调试模式)。 这些参数设置完毕后,将参数 P010 设置为 0。参数 P304、P305、P307、P310 和 P311 只

能在快速调试模式下更改。

P0304 = 电机额定电压 (V) P0305 = 电机额定电流 (A) P0307 = 电机额定功率 (W) P03010 = 电机额定频率 (Hz) P0311 = 电机额定速度
4. 设置本地/远程控制模式。 P0700 索引 0=5
5. 根据通信链路的 USS 选择频率设定值。 P1000 索引 0=5
6. 加速时间(可选)

这是电机加速到最大频率所需的时间(秒)。

P1120 =(0 到 650.00)
7. 减速时间(可选)

这是电机减速到完全停止所需的时间(秒)。

P1121 =(0 到 650.00)
8. 设置串行链路的基准频率: P2000 =(1 到 650 Hz)
9. 设置 USS 标准化: P2009 索引 0=0
10. 设置 RS485 串行接口的波特率: P2010 索引 0= 4(2400 波特)

5(4800 波特)

6(9600 波特)

7(19200 波特)

8(38400 波特)

9(57600 波特)

12(115200 波特)

11. 输入从站地址。

可通过总线操作每台驱动器(最多 31 台)。

P2011 索引 0 =(0 到 31)
12. 设置串行链路超时。

这是两份传入数据报文之间所允许的最长时间段。 此功能用于在出现通信故障时关闭反相器。 收到有效的数据报文后开始计时。 如果在指定的时间段内未收到其它数据报文,则反相器脱扣并显示故

障代码 F0070。 将该值设置为零将关闭控制。

P2014 索引 0 =(0 到 65,535 ms)

(0 = 禁用超时)

13. 将数据从 RAM 传送到 EEPROM: P0971=1(启动传送)将参数设置更改内容保存到 EEPROM

Modbus 通信

Modbus RTU 和 TCP 通信概述

Modbus 功能代码
        • CPU 作为 Modbus RTU 主站(或 Modbus TCP 客户端)运行时,可在远程 Modbus

RTU 从站(或 Modbus TCP 服务器)中读/写数据和 I/O 状态。 可以在用户程序中读取和处理远程数据。

        • CPU 作为 Modbus RTU 从站(或 Modbus TCP 服务器)运行时,允许监控设置在远程 CPU 中读/写数据和 I/O 状态。 监控设备可在远程 CPU 储存器中写入可在用户程序中处理的新值。

表格 12- 45 读取数据功能: 读取远程 I/O 及程序数据

Modbus 功能代码 读取从站(服务器)功能 - 标准寻址
01 读取输出位: 每个请求 1 到 2000 个位
02 读取输入位: 每个请求 1 到 2000 个位
03 读取保持寄存器: 每个请求 1 到 125 个字
04 读取输入字: 每个请求 1 到 125 个字

表格 12- 46 写入数据功能: 写入远程 I/O 及修改程序数据

Modbus 功能代码 写入从站(服务器)功能 - 标准寻址
05 写入一个输出位:每个请求 1 个位
06 写入一个保持寄存器: 每个请求 1 个字
15 写入一个或多个输出位:每个请求 1 到 1968 个位
16 写入一个或多个保持寄存器:每个请求 1 到 123 个字
        • Modbus 功能代码 08 和 11 提供从站设备通信诊断信息。
        • Modbus 功能代码 0 将消息广播到所有从站(无从站响应)。 广播功能不能用于

Modbus TCP,因为通信是以连接为基础的。

表格 12- 47 Modbus 网络站地址

地址
RTU 站 标准站地址 1 到 247
扩展站地址 1 到 65535
TCP 站 站地址 IP 地址和端口号
Modbus 存储区地址

实际可用的 Modbus 存储区地址数取决于 CPU 型号、存在多少工作存储器以及其他程序数据占用多少 CPU 存储区。 下表给出地址范围的额定值。

表格 12- 48 Modbus 存储区地址

地址范围
RTU 站 标准存储区地址 10K
扩展存储区地址 64K
TCP 站 标准存储区地址 10K
Modbus RTU 通信

Modbus RTU(远程终端单元)是一个标准的网络通信协议,它使用 RS232 或 RS485 电气连接在 Modbus 网络设备之间传输串行数据。 可在带有一个 RS232 或 RS485 CM 或一个 RS485 CB 的 CPU 上添加 PtP(点对点)网络端口。

Modbus RTU 使用主/从网络,单个主设备启动所有通信,而从设备只能响应主设备的请求。 主设备向从一个从设备地址发送请求,然后该从设备地址对命令做出响应。

Modbus TCP 通信

Modbus TCP(传输控制协议)是一个标准的网络通信协议,它使用 CPU 上的

PROFINET 连接器进行 TCP/IP 通信。 不需要额外的通信硬件模块。

Modbus TCP 使用开放式用户通信 (OUC, Open User Communication) 连接作为 Modbus 通信路径。 除了 STEP 7 和 CPU 之间的连接外,还可能存在多个客户端-服务器连接。 支持的混合客户端和服务器连接数最大为 CPU 型号所允许的最大连接数 (页 458)。

每个 MB_SERVER 连接必须使用一个唯一的背景数据块和 IP 端口号。 每个 IP 端口只能用于 1 个连接。 必须为每个连接单独执行各 MB_SERVER(带有其唯一的背景数据块和

IP 端口)。

说明

只有使用 CPU 固件版本 V1.02 或更高版本时,Modbus TCP 才能正确运行。 尝试在早期固件版本上执行 Modbus 指令会导致出错。

Modbus TCP 客户端(主站)必须通过 DISCONNECT 参数控制客户端-服务器连接。 基本的 Modbus 客户端操作如下所示。

  1. 连接到特定服务器(从站)IP 地址和 IP 端口号
  2. 启动 Modbus 消息的客户端传输,并接收服务器响应
  3. 根据需要断开客户端和服务器的连接,以便与其它服务器连接。
程序中的 Modbus RTU 指令
        • MB_COMM_LOAD:通过执行一次 MB_COMM_LOAD 设置 PtP 端口参数,如波特率、奇偶校验和流控制。 为 Modbus RTU 协议组态 CPU 端口后,该端口只能由MB_MASTER MB_SLAVE 指令使用。
        • MB_MASTER:该 Modbus 主指令使 CPU 充当 Modbus RTU 主设备,并与一个或多个 Modbus 从设备进行通信。
        • MB_SLAVE:该 Modbus 从指令使 CPU 充当 Modbus RTU 从设备,并与一个

Modbus 主设备进行通信。

程序中的 Modbus TCP 指令
        • MB_CLIENT:进行客户端-服务器 TCP 连接、发送命令消息、接收响应,以及控制服务器断开
        • MB_SERVER:根据要求连接至 Modbus TCP 客户端、接收 Modbus 消息及发送响应

Modbus TCP

MB_CLIENT (Modbus TCP)

表格 12- 49 MB_CLIENT 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-294 "MB_CLIENT_DB"(

REQ:=_bool_in_, DISCONNECT:=_bool_in_, CONNECT_ID=_uint_in_, IP_OCTET_1:=_byte_in_, IP_OCTET_2:=_byte_in_, IP_OCTET_3:=_byte_in_, IP_OCTET_4:=_byte_in_, IP_PORT:=_uint_in_, MB_MODE:=_usint_in_, MB_DATA_ADDR:=_udint_in_, MB_DATA_LEN:=_uint_in_, DONE=>_bool_out_, BUSY=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, MB_DATA_PTR:=_variant_inout_);

MB_CLIENT 作 为 Modbus TCP 客户端,通过 S7-1200 CPU 上的 PROFINET 连接器进行通信。 不需要额外的通信硬件模块。

MB_CLIENT 可进行客户端- 服务器连接、发送 Modbus 功能请求、接收响应,以及控制 Modbus TCP 服务器的断开。

表格 12- 50 参数的数据类型

参数和类型 数据类型 说明
REQ In Bool FALSE = 无 Modbus 通信请求

TRUE = 请求与 Modbus TCP 服务器通信

DISCONNECT IN Bool DISCONNECT 参数允许程序控制与 Modbus 服务器设备的连接和断开。

如果 DISCONNECT = 0 且不存在连接,则 MB_CLIENT 尝试连接到分配的 IP 地址和端口号。

如果 DISCONNECT = 1 且存在连接,则尝试断开连接操作。 每当启用此输入时,无法尝试其它操作。

CONNECT_ID IN UInt CONNECT_ID 参数必须唯一标识 PLC 中的每个连接。

MB_CLIENT 或 MB_SERVER 指令的各唯一实例必须含有一个唯一的 CONNECT_ID 参数。

参数和类型 数据类型 说明
IP_OCTET_1 IN USInt Modbus TCP 服务器 IP 地址: 八位位组 1

Modbus TCP 服务器(客户端将通过 Modbus TCP 协议与其进行连接及通信)的 32 位 IPv4 IP 地址中的 8 位部分。

IP_OCTET_2 IN USInt Modbus TCP 服务器 IP 地址: 八位位组 2
IP_OCTET_3 IN USInt Modbus TCP 服务器 IP 地址: 八位位组 3
IP_OCTET_4 IN USInt Modbus TCP 服务器 IP 地址: 八位位组 4
IP_PORT IN UInt 默认值 = 502: 服务器(客户端尝试通过 TCP/IP 协议与其连接并最终通信)的 IP 端口号。
MB_MODE IN USInt 模式选择: 分配请求类型(读、写或诊断)。 请参见下面的

Modbus 功能表了解详细信息。

MB_DATA_ADDR IN UDInt Modbus 起始地址: 分配 MB_CLIENT 访问的数据的起始地址。请参见下面的 Modbus 功能表了解有效地址信息。
MB_DATA_LEN IN UInt Modbus 数据长度: 分配此请求中要访问的位数或字数。 请参见下面的 Modbus 功能表了解有效长度信息。
MB_DATA_PTR IN_OUT Variant 指向 Modbus 数据寄存器的指针: 寄存器缓冲数据进入 Modbus

服务器或来自 Modbus 服务器。 该指针必须分配一个标准全局

DB 或一个 M 存储器地址。

DONE OUT Bool 上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫描周期时间。
BUSY OUT Bool
  • 0 - 无 MB_CLIENT 操作正在进行
  • 1 - MB_CLIENT 操作正在进行
ERROR OUT Bool MB_CLIENT 执行因错误而终止后,ERROR 位将保持为 TRUE

一个扫描周期时间。 STATUS 参数中的错误代码值仅在 ERROR

= TRUE 的一个循环周期内有效。

STATUS OUT Word 执行条件代码
REQ 参数

FALSE = 无 Modbus 通信请求

TRUE = 请求与 Modbus TCP 服务器通信

如果 MB_CLIENT 的实例没有激活且参数 DISCONNECT=0,当 REQ=1 时,将启动一个新的 Modbus 请求。 如果尚未建立连接,则建立一个新的连接。

如果在当前请求完成前 DISCONNECT=0 且 REQ=1,从而再次执行 MB_CLIENT 的同一个实例,则不会进行后续 Modbus 传送。 但是,一旦完成当前请求,如果通过 REQ=1 执行 MB_CLIENT,可处理新的请求。

完成当前 MB_CLIENT 通信请求后,DONE 位将在一个周期内保持为 TRUE。 DONE 位可用作定时门,对多个 MB_CLIENT 请求进行排序。

说明

MB_CLIENT 处理期间输入数据的一致性

Modbus 客户端启动 Modbus 操作后,将在内部保存所有输入状态,然后在每次后续调用时进行比较。 比较用于确定此特定调用是否是活动客户端请求的发起者。 可使用一个公用背景数据块执行多个 MB_CLIENT 调用。

因此,在主动处理 MB_CLIENT 操作期间应不改变输入,这一点很重要。 若不遵循此规则,MB_CLIENT 无法确定其为活动实例。

MB_MODE 和 MB_DATA_ADDR 参数用于选择 Modbus 通信功能

MB_DATA_ADDR 分配要访问数据的起始 Modbus 地址。 MB_CLIENT 指令使用

MB_MODE 输入而非功能代码输入。

MB_MODE 和 MB_DATA_ADDR 值一起确定实际 Modbus 消息中使用的功能代码。 下表列出了 MB_MODE 参数、Modbus 功能和 Modbus 地址范围之间的对应关系。

表格 12- 51 Modbus 功能

MB_MOD

E

Modbus

功能

数据长度 操作和数据 MB_DATA_ADDR
0 01 1 到 2000 读取输出位:

每个请求 1 到 2000 个位

1 到 9999
0 02 1 到 2000 读取输入位:

每个请求 1 到 2000 个位

10001 到 19999
0 03 1 到 125 读取保持寄存器:

每个请求 1 到 125 个字

40001 到 49999 或

400001 到 465535

0 04 1 到 125 读取输入字:

每个请求 1 到 125 个字

30001 到 39999
1 05 1 写入一个输出位: 每个请求 1 个位 1 到 9999
MB_MOD

E

Modbus

功能

数据长度 操作和数据 MB_DATA_ADDR
1 06 1 写入一个保持寄存器: 每个请求 1 个字 40001 到 49999 或

400001 到 465535

1 15 2 到 1968 写入多个输出位:

每个请求 2 到 1968 个位

1 到 9999
1 16 2 到 123 写入多个保持寄存器: 每个请求 2 到 123 个字 40001 到 49999 或

400001 到 465535

2 15 1 到 1968 写入一个或多个输出位: 每个请求 1 到 1968 个位 1 到 9999
2 16 1 到 123 写入一个或多个保持寄存器: 每个请求 1 到 123 个字 40001 到 49999 或

400001 到 465535

11 11 0 读取服务器通信状态字和事件计数

器。 状态字指示忙闲情况(0 - 不忙, 0xFFFF - 忙)。 每成功完成一条消 息,事件计数器的计数值递增。

对于该功能,MB_CLIENT 的

MB_DATA_ADDR 和 MB_DATA_LEN

参数都将被忽略。

80 08 1 利用数据诊断代码 0x0000 检查服务器状态(回送测试 - 服务器回送请求)

每个请求 1 个字

81 08 1 利用数据诊断代码 0x000A 重新设置服务器事件计数器

每个请求 1 个字

3 到 10、

12 到

79、

82 到 255

保留

说 明 MB_DATA_PTR 分配一个缓冲区来存储从 Modbus TCP 服务器读取或写入到该服务器的数据

数据缓冲区可位于标准的全局 DB 或 M 存储器地址中。

对于 M 存储器中的缓冲区,使用标准的 Any 指针格式。 具体格式为 P#“位地址” “数据类型” “长度”,例如 P#M1000.0 WORD 500。

MB_DATA_PTR 分配一个通信缓冲区
          • MB_CLIENT 通信功能:

从 Modbus 服务器地址(00001 到 09999)读写 1 位数据

从 Modbus 服务器地址(10001 到 19999)读取 1 位数据

– 从 Modbus 服务器地址(30001 到 39999)和(40001 到 49999)读取 16 位字数据

向 Modbus 服务器地址(40001 到 49999)写入 16 位字数据

          • 向/从 MB_DATA_PTR 分配的 DB 或 M 储存器缓冲区传输字或位大小的数据。
          • 如果通过 MB_DATA_PTR 分配 DB 为缓冲区,必须为所有 DB 数据元素分配数据类型。

1 位 Bool 数据类型代表一个 Modbus 位地址

16 位单字数据类型(如 WORD、UInt 和 Int)代表一个 Modbus 字地址

32 位双字数据类型(如 DWORD、DInt 和 Real)代表两个 Modbus 字地址

          • 可以通过 MB_DATA_PTR 分配复杂的 DB 元素,例如

标准数组

指定的结构,其中每个元素都是唯一的。

指定的复杂结构,其中每个元素都具有唯一的名称以及 16 或 32 位数据类型。

          • 不要求 MB_DATA_PTR 数据区位于同一个全局数据块(或 M 存储器区)中。 可分配一个数据块供 Modbus 读取,分配另一个数据块供 Modbus 写入,或分配一个数据块用于各个 MB_CLIENT 站。
多个客户端连接

Modbus TCP 客户端支持的并发连接数最多为 PLC 允许的开放式用户通信最大连接数。

PLC 的连接总数(包括 Modbus TCP 客户端和服务器)不得超过 支持的开放式用户通信最大连接数 (页 458)。 可以在客户端和/或服务器类型的连接间共享 Modbus TCP 连接。

单独的客户端连接必须遵循以下规则:

  • 每个 MB_CLIENT 连接必须使用一个不同的背景数据块
  • 每个 MB_CLIENT 连接必须指定一个唯一的服务器 IP 地址
  • 每个 MB_CLIENT 连接必须指定一个唯一的连接 ID
  • 是否需要唯一的 IP 端口号取决于服务器组态

连接 ID 对于每个单独的连接必须是唯一的。 这意味着单个的唯一连接 ID 只能与每个单独的背景数据块配合使用。 总之,背景数据块和连接 ID 成对使用,且对每个连接必须是唯一的。

表格 12- 52 MB_CLIENT 实例数据块用户可访问静态变量

变量 数据类型 默认值 说明
Blocked_Proc_Timeo ut Real 3.0 在 Modbus 客户端实例受阻后,移除该激活的实例前需等待的时间(秒)。 例如,当已发出客户端请求,但应用程序在彻底完成该请求前停止执行该客户端功能时,就会出现这种情

况。 最大 S7-1200 限值是 55 秒。

MB_Unit_ID Word 255 Modbus 设备标识符

Modbus TCP 服务器通过其 IP 地址寻址。 因此 MB_UNIT_ID

参数不用于 Modbus TCP 寻址。

MB_UNIT_ID 参数与 Modbus RTU 协议中的从站地址相对

应。 如果 Modbus TCP 服务器用于采用 Modbus RTU 协议的网关,MB_UNIT_ID 可用于标识在串行网络上连接的从站设备。 MB_UNIT_ID 将用于将请求转发给正确的 Modbus RTU 从站地址。

请注意,某些 Modbus TCP 设备可能需要在受限的值范围内初始化 MB_UNIT_ID 参数。

RCV_TIMEOUT Real 2.0 MB_CLIENT 等待服务器响应请求的时间(秒)。
已连接 Bool 0 指示与所分配服务器的连接是已接通还是已断开: 1 = 接通,

0 = 断开

表格 12- 53 MB_CLIENT 协议错误

STATUS 发送到 Modbus Modbus 协议错误
(W#16#) 客户端的响应代
(B#16#)
8381 01 不支持此功能代码
8382 03 数据长度错误
8383 02 数据地址错误或访问的数据超出 MB_HOLD_REG 地址区的界限
8384 03 数据值错误
8385 03 不支持此数据诊断代码值(功能代码 08)

表格 12- 54 MB_CLIENT 执行条件代码 1

STATUS

(W#16#)

MB_CLIENT 参数错误
7001 MB_CLIENT 正在等待 Modbus 服务器响应指定 TCP 端口处的连接或断开连接请求。 仅在第一次执行连接或断开操作时才报告此代码。
7002 MB_CLIENT 正在等待 Modbus 服务器响应指定 TCP 端口处的连接或断开连接请求。 等待连接或断开操作完成时,将针对任何后续执行报告此代码。
7003 断开操作已成功完成(仅在一个 PLC 扫描周期内有效)。
80C8 服务器在分配的时间内无响应。 MB_CLIENT 必须在分配的时间内使用最初传送的事务 ID

接收响应,否则将返回此错误。 检查与 Modbus 服务器设备的连接。

尝试过任何组态的重试操作(若适用)后,才报告此错误。

8188 模式值无效
8189 数据地址值无效
818A 数据长度值无效
818B 指向 DATA_PTR 区的指针无效。 可以是 MB_DATA_ADDRESS 与 MB_DATA_LEN 的组合。
818C 指向优化的 DATA_PTR 区(必须是标准 DB 区或 M 储存器区)的指针
8200 端口正忙于处理现有的 Modbus 请求。
8380 接收到的 Modbus 帧有缺陷或接收到的字节太少。

 

STATUS

(W#16#)

MB_CLIENT 参数错误
8387 分配的连接 ID 参数和用于先前请求的 ID 不同。 只能有一个单个连接 ID 与每个

MB_CLIENT 背景数据块配合使用。

如果从一个服务器接收到的 Modbus TCP 协议 ID 不是 0,也可作为内部错误使用。

8388 Modbus 服务器返回一些和请求内容不同的数据。 这只适用于 Modbus 功能 15 或 16。

1 除了上面列出的 MB_CLIENT 错误外,也可以从底层传输块通信指令(TCON、TDISCON、TSEND 和

TRCV)返回错误。

参见

TCON、TDISCON、TSEND 和 TRCV (页 473)

MB_SERVER (Modbus TCP)

表格 12- 55 MB_SERVER 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-295 "MB_SERVER_DB"(

DISCONNECT:=_bool_in_, CONNECT_ID:=_uint_in_, IP_PORT:=_uint_in_, NDR=>_bool_out_, DR=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, MB_HOLD_REG:=_variant_inout_);

MB_SERVER 作 为 Modbus TCP 服务器,通过 S7-1200 CPU 上的PROFINET 连接器进行通信。 不需要额外的通信硬件模块。

MB_SERVER 可接收与 Modbus

TCP 客户端连接的请求、接收

Modbus 功能请求,以及发送响应消息。

表格 12- 56 参数的数据类型

参数和类型 数据类型 说明
DISCONNECT IN Bool MB_SERVER 尝试与伙伴设备进行“被动”连接。 也就是说,服务器被动地侦听来自任何请求 IP 地址的 TCP 连接请求。

如果 DISCONNECT = 0 且连接不存在,则可以启动被动连接。

如果 DISCONNECT = 1 且连接存在,则启动断开操作。 这允许程序控制何时接受连接。 每当启用此输入时,无法尝试其他操作。

CONNECT_ID IN UInt CONNECT_ID 唯一标识 PLC 中的每个连接。 MB_CLIENT 或

MB_SERVER 指令的各唯一实例必须含有一个唯一的

CONNECT_ID 参数。

IP_PORT IN UInt 默认值 = 502: 用来标识 IP 端口的 IP 端口号,将监视该端口是否有来自 Modbus 客户端的连接请求。

以下 TCP 端口号不允许用于 MB_SERVER 被动连接: 20、21、

25、80、102、123、5001、34962、34963 和 34964。

MB_HOLD_RE G IN_OUT Variant 指向 MB_SERVER Modbus 保持寄存器的指针: 保持寄存器必须是一个标准全局 DB 或 M 存储区地址。 储存区用于保存值,允许

Modbus 客户端使用 Modbus 寄存器功能 3(读)、6(写)和 16

(写)访问这些值。

NDR OUT Bool 新数据就绪: 0 = 没有新数据,1 = 表示 Modbus 客户端已写入新数据
DR OUT Bool 数据读取: 0 = 没有读取数据,1 = 表示 Modbus 客户端已读取该数据。
ERROR OUT Bool MB_SERVER 执行因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间。 STATUS 参数中的错误代码值仅在 ERROR =

TRUE 的一个循环周期内有效。

STATUS OUT Word 执行条件代码

MB_SERVER 允许进入的 Modbus 功能代码(1、2、4、5 和 15)在 S7-1200 CPU 的输入过程映像及输出过程映像中直接读或写位和字。 对于数据传输功能代码(3、6 和16),MB_HOLD_REG 参数必须定义为大于一个字节的数据类型。 下表显示了 Modbus 地址到 CPU 中过程映像的映射。

表格 12- 57 Modbus 地址到过程映像的映射

Modbus 功能 S7-1200
代码 功能 数据区 地址范围 数据区 CPU 地址
01 读位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7
02 读位 输入 10001 18192 输入过程映像 I0.0 到 I1023.7
04 读字 输入 30001 30512 输入过程映像 IW0 到 IW1022
05 写位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7
15 写位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7

进入的 Modbus 消息功能代码(3、6 和 16)在 Modbus 保持寄存器中读取或写入字,该寄存器可以是 M 存储区地址范围或数据块。 保持寄存器的类型由 MB_HOLD_REG 参数指定。

说明

MB_HOLD_REG 参数分配

Modbus 保持寄存器可以位于标准全局 DB 或 M 存储区地址中。

对于 M 存储区地址中的 Modbus 保持寄存器,使用标准的 Any 指针格式。 其格式为

P#“位地址”“数据类型”“长度”。 例如 P#M1000.0 WORD 500

下表给出了 Modbus 地址到保持寄存器的映射示例,这种映射用于 Modbus 功能代码 03

(读取字)、06(写入字)和 16(写入字)。 DB 地址的实际上限取决于每种 CPU 型号的最大工作存储器限值和 M 存储器限值。

表格 12- 58 Modbus 地址到 CPU 存储器地址的映射示例

Modbus 地址 MB_HOLD_REG 参数示例
P#M100.0 Word 5 P#DB10.DBx0.0 Word 5 "Recipe".ingredient
40001 MW100 DB10.DBW0 "Recipe".ingredient[1]
40002 MW102 DB10.DBW2 "Recipe".ingredient[2]
40003 MW104 DB10.DBW4 "Recipe".ingredient[3]
40004 MW106 DB10.DBW6 "Recipe".ingredient[4]
40005 MW108 DB10.DBW8 "Recipe".ingredient[5]
多个服务器连接

可以创建多个服务器连接。 这允许单个 PLC 建立与多个 Modbus TCP 客户端的并发连接。

Modbus TCP 服务器支持的并发连接数最多为 PLC 允许的开放式用户通信最大连接数。

PLC 的连接总数(包括 Modbus TCP 客户端和服务器)不得超过 支持的开放式用户通信最大连接数 (页 458)。 可以在客户端和/或服务器类型的连接间共享 Modbus TCP 连接。

单独的服务器连接必须遵循以下规则:

  • 每个 MB_SERVER 连接必须使用一个不同的背景数据块。
  • 必须通过一个唯一的 IP 端口号建立每个 MB_SERVER 连接。 每个端口只能用于 1

个连接。

  • 每个 MB_SERVER 连接必须使用一个唯一的连接 ID。
  • 必须为每个连接(带有各自的背景数据块)单独调用 MB_SERVER。

连接 ID 对于每个单独的连接必须是唯一的。 这意味着单个的唯一连接 ID 只能与每个单独的背景数据块配合使用。 总之,背景数据块和连接 ID 成对使用,且对每个连接必须是唯一的。

表格 12- 59 Modbus 诊断功能代码

MB_SERVER Modbus 诊断功能
代码 子功能 说明
08 0x0000 返回查询数据回送测试: MB_SERVER 将向 Modbus 客户端回送接收到的数据字。
08 0x000A 清除通信事件计数器: MB_SEVER 将清除用于 Modbus 功能 11 的通信事件计数器。
11 获取通信事件计数器: MB_SERVER 使用内部通信事件计数器来记录发送到

Modbus 服务器的 Modbus 成功读取和写入请求次数。 该计数器不会因功能 8 或功能 11 请求而增加。 同时也不会因导致通信错误的任何请求而增加。

广播功能不能用于 Modbus TCP,因为在任何时刻仅存在一个客户端-服务器连接。

MB_SERVER 变量

下表给出了存储在 MB_SERVER 背景数据块中的公共静态变量(可在用户程序中使用)。

表格 12- 60 MB_SERVER 公共静态变量

变量 数据类型 默认值 说明
HR_Start_Offset Word 0 指定 Modbus 保持寄存器的起始地址
Request_Count Word 0 该服务器接收到的所有请求的数量。
Server_Message_Cou nt Word 0 该特定服务器接收到的请求的数量。
Xmt_Rcv_Count Word 0 出现错误的传输或接收的数量。 此外,如果接收到一条无效的 Modbus 消息,该值加 1。
Exception_Count Word 0 需要返回例外的 Modbus 特定错误数
Success_Count Word 0 该特定服务器接收到的没有协议错误的请求数量。
已连接 Bool 0 指示与所分配客户端的连接是已接通还是已断开: 1 = 接通,

0 = 断开

用户程序可以将值写入 HR_Start_Offset ,以控制 Modbus 服务器操作。 可读取其它变量以监视 Modbus 的状态。

HR_Start_Offset

Modbus 保持寄存器地址从 40001 开始。 这些地址与保持寄存器的 PLC 存储器起始地址对应。 不过,可以组态“HR_Start_Offset”变量,将 Modbus 保持寄存器的起始地址定义为除 40001 之外的其它值。

例如,如果保持寄存器被组态为起始于 MW100 并且长度为 100 个字。 偏移量 20 可指 定保持寄存器的起始地址为 40021 而不是 40001。低于 40021 和高于 40119 的任何地址都将导致寻址错误。

表格 12- 61 Modbus 保持寄存器寻址示例

HR_Start_Offset 地址 最小值 最大值
0 Modbus 地址(字) 40001 40099
S7-1200 地址 MW100 MW298
20 Modbus 地址(字) 40021 40119
S7-1200 地址 MW100 MW298

HR_Start_Offset 是一个字值,用于指定 Modbus 保持寄存器的起始地址,存储在

MB_SERVER 背景数据块中。 将 MB_SERVER 放入程序后,可利用参数助手下拉列表设置该公共静态变量值。

例如,将 MB_SERVER 放入 LAD 网络后,可以切换到先前的网络,并分配

HR_Start_Offset 值。 该值必须在执行 MB_SERVER 前分配。

S7-1200 可编程控制器 通信处理器-296 使用默认 DB 名称

输入 Modbus 服务器变量:

  1. S7-1200 可编程控制器 通信处理器-297 将光标放在参数字段中,然后输入 m 字符。
  2. 从 DB 名称的下拉列表中选择

“MB_SERVER_DB”。

  1. 从 DB 变量的下拉列表中选择

S7-1200 可编程控制器 通信处理器-298 “MB_SERVER_DB.HR_Start_Offset”。

表格 12- 62 MB_SERVER 执行条件代码 1

STATUS (W#16#) 发送到 Modbus 服务器的响应代码

(B#16#)

Modbus 协议错误
7001 MB_SERVER 正在等待 Modbus 客户端连接到指定的 TCP 端口。 仅在第一次执行连接或断开操作时才报告此代码。
7002 MB_SERVER 正在等待 Modbus 客户端连接到指定的 TCP 端口。 等待连接或断开操作完成时,将针对任何后续执行报告此代码。
7003 断开操作已成功完成(仅在一个 PLC 扫描周期内有效)。
8187 指向 MB_HOLD_REG 的指针无效: 区域太小
818C 指向优化的 MB_HOLD_REG 区(必须是标准 DB 区或 M 储存器区)的指针或受阻的过程超时超过 55 秒的限值。 (仅适用于 S7-1200)
8381 01 不支持此功能代码
8382 03 数据长度错误
8383 02 数据地址错误或访问的数据超出 MB_HOLD_REG 地址区的界限
8384 03 数据值错误
8385 03 不支持此数据诊断代码值(功能代码 08)

1 除了上面列出的 MB_SERVER 错误外,也可以从底层传输块通信指令(TCON、

TDISCON、TSEND 和 TRCV)返回错误。

参见

TCON、TDISCON、TSEND 和 TRCV (页 473)

MB_SERVER 示例: 多个 TCP 连接

可以拥有多个 Modbus TCP 服务器连接。 为此,必须为每个连接单独执行

MB_SERVER。 每个连接必须使用单独的背景数据块、连接 ID 和 IP 端口。 S7-1200 仅允许每个 IP 端口进行一个连接。

为达到最佳性能,每个连接的每次循环都必须执行 MB_SERVER。

程序段 1: 带有独立 IP_PORT、连接 ID 和背景数据块的 1 号连接

S7-1200 可编程控制器 通信处理器-299

程序段 2: 带有独立 IP_PORT、连接 ID 和背景数据块的 2 号连接

S7-1200 可编程控制器 通信处理器-300

MB_CLIENT 示例 1: 通过公共 TCP 连接发送多个请求

多个 Modbus 客户端请求可通过同一连接发送。 为此,必须使用相同的背景数据块、连接 ID 和端口号。

在任意给定时间,只能有一个客户端处于激活状态。 在一个客户端完成执行后,下一个客户端再开始执行。 执行顺序由您的程序负责指定。

以下示例显示的是对同一存储区执行写操作的两个客户端。 此外,还捕获了返回的错误,这是可选的。

程序段 1: Modbus 功能 1 - 读取 16 个输出映像位

S7-1200 可编程控制器 通信处理器-301

程序段 2: Modbus 功能 2 - 读取 32 个输入映像位

S7-1200 可编程控制器 通信处理器-302

MB_CLIENT 示例 2: 通过不同的 TCP 连接发送多个请求

Modbus 客户端请求可通过不同连接来发送。 为此,必须使用不同的背景数据块、IP 地址和连接 ID。

如要与同一 Modbus 服务器建立连接,端口号必须不同。 如果与不同的服务器建立连接,则端口号方面没有限制。

以下示例显示的是对同一存储区执行写操作的两个客户端。 此外,还捕获了返回的错误,这是可选的。

程序段 1:

Modbus 功能 4 - 读取(S7-1200 存储器中的)输入字

S7-1200 可编程控制器 通信处理器-303

程序段 2:

Modbus 功能 3 - 读取(S7-1200 存储器中的)保持寄存器字

S7-1200 可编程控制器 通信处理器-304

MB_CLIENT 示例 3: 输出映像写入请求

S7-1200 可编程控制器 通信处理器-305 此示例显示了 Modbus 客户端请求写入 S7-1200 输出映像。程序段 1: Modbus 功能 15 - 写入 S7-1200 输出映像位

MB_CLIENT 示例 4: 协调多个请求

必须确保各个 Modbus TCP 请求都完成执行。 此协调必须由程序提供。 下面示例显示了首个和第二个客户端请求的输出如何用于协调执行。

以下示例显示的是对同一存储区执行写操作的两个客户端。 此外,还捕获了返回的错误,这是可选的。

程序段 1: Modbus 功能 3 - 读取保持寄存器字

S7-1200 可编程控制器 通信处理器-306

程序段 2: Modbus 功能 3 - 读取保持寄存器字

S7-1200 可编程控制器 通信处理器-307

Modbus RTU

在 STEP 7 中可使用两个版本的 Modbus RTU 指令:

        • 版本 1 最初在 STEP 7 Basic V10.5 中提供。
        • 版本 2 在 STEP 7 Basic/Professional V11 中提供。 版本 2 将参数 REQ 和 DONE 添加到 MB_COMM_LOAD。 而且,MB_MASTER 和 MB_SLAVE 的 MB_ADDR 参数现在还允许一个 UInt 值以进行扩展寻址。

可以从兼容性和移植便利性方面考虑,选择将相应的指令版本插入用户程序中。

不要在同一 CPU 程序中同时使用 1.x 和 2.y 指令版本。 用户程序的 Modbus 指令必须具有相同的主版本号(1.x、2.y 或 V.z)。 主版本组内的各个指令可具有不同的次版本号

(1.x)。

S7-1200 可编程控制器 通信处理器-308 单击指令树任务卡上的图标可启用指令树的标题和列。

S7-1200 可编程控制器 通信处理器-309 要更改 Modbus 指令的版本,请从下拉列表中选择相应版本。 可以选择一组指令或分别选择各个指令。

使用指令树将 Modbus 指令放入程序时,将在项目树中创建新的 FB 实例。 在项目树的“PLC_x > 程序块 > 系统块 > 程序资源”(PLC_x > Program blocks > System blocks > Program resources) 下可看到新的 FB 实例。

要确认程序中 Modbus 指令的版本,必须检查项目树的属性而不是程序编辑器中显示的框的属性。 选择项目树的 Modbus FB 实例,单击右键,选择“属性”(Properties),然后选择

“信息”(Information) 页查看 Modbus 指令的版本号。

MB_COMM_LOAD

表格 12- 63 MB_COMM_LOAD 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-310 "MB_COMM_LOAD_DB"(

REQ:=_bool_in, PORT:=_uint_in_, BAUD:=_udint_in_, PARITY:=_uint_in_, FLOW_CTRL:=_uint_in_, RTS_ON_DLY:=_uint_in_, RTS_OFF_DLY:=_uint_in_, RESP_TO:=_uint_in_, DONE=>_bool_out, ERROR=>_bool_out_, STATUS=>_word_out_, MB_DB:=_fbtref_inout_);

MB_COMM_LOAD 指令可组态用于

Modbus RTU 协议通信的 PtP 端口。

Modbus 端口硬件选项: 最多安装三个

CM(RS485 或 RS232),及一个 CB

(R4845)。 将 MB_COMM_LOAD 指令放

入程序时自动分配背景数据块。

表格 12- 64 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 通过由低到高的(上升沿)信号启动操作。

(仅版本 2.0)

PORT IN Port 安装并组态 CM 或 CB 通信设备之后,端口标识符将出现在

PORT 功能框连接的参数助手下拉列表中。 分配的 CM 或 CB 端口值为设备配置属性“硬件标识符”。 端口符号名称在 PLC 变量表的“系统常量”(System constants) 选项卡中分配。

BAUD IN UDInt 波特率选择:

300、600、1200、2400、4800、9600、19200、38400、

57600、76800、115200,其它所有值均无效

PARITY IN UInt 奇偶校验选择:

  • 0 – 无
  • 1 – 奇校验
  • 2 – 偶校验
参数和类型 数据类型 说明
FLOW_CTRL IN UInt 流控制选择:

  • 0 –(默认)无流控制
  • 1 – RTS 始终为 ON 的硬件流控制(不适用于 RS485 端口)
  • 2 - 带 RTS 切换的硬件流控制
RTS_ON_DLY IN UInt RTS 接通延时选择:

  • 0 –(默认)从 RTS 激活一直到传送消息的第一个字符之前无延时
  • 1 到 65535 – 从 RTS 激活一直到传送消息的第一个字符之前以毫秒表示的延时(不适用于 RS485 端口)。 不管

FLOW_CTRL 选择为何,都将应用 RTS 延时。

RTS_OFF_DLY IN UInt RTS 关断延时选择:

  • 0 –(默认)从传送最后一个字符一直到 RTS 转入非活动状态之前无延时
  • 1 到 65535 – 从传送最后一个字符一直到 RTS 转入非活动状态之前以毫秒表示的延时(不适用于 RS485 端口)。 不管

FLOW_CTRL 选择为何,都将应用 RTS 延时。

RESP_TO IN UInt 响应超时:

MB_MASTER 允许用于从站响应的时间(以毫秒为单位)。 如果从站在此时间段内未响应,MB_MASTER 将重试请求,或者在发送指定次数的重试请求后终止请求并提示错误。

5 ms 到 65535 ms(默认值 = 1000 ms)。

MB_DB IN Variant 对 MB_MASTER 或 MB_SLAVE 指令所使用的背景数据块的引用。 在用户的程序中放置 MB_SLAVE 或 MB_MASTER 后,该

DB 标识符将出现在 MB_DB 功能框连接的参数助手下拉列表

中。

DONE OUT Bool 上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫描周期时间。 (仅版本 2.0)
ERROR OUT Bool 上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间。 STATUS 参数中的错误代码值仅在 ERROR =

TRUE 的一个扫描周期内有效。

STATUS OUT Word 执行条件代码

可执行 MB_COMM_LOAD 来组态端口以使用 Modbus RTU 协议。 为使用 Modbus RTU

协议组态端口后,该端口只能由 MB_MASTER 或 MB_SLAVE 指令使用。

对用于 Modbus 通信的每个通信端口,都必须执行一次 MB_COMM_LOAD 来组态。 为要使用的每个端口分配一个唯一的 MB_COMM_LOAD 背景数据块。 最多可在 CPU 中安装三个通信模块(RS232 或 RS485)和一个通信板 (RS485)。 从启动 OB 调用

MB_COMM_LOAD 并执行它一次,或使用 第一个扫描系统标记 (页 85)发起调用以执行它一次。 只有在必须更改波特率或奇偶校验等通信参数时,才再次执行MB_COMM_LOAD。

将 MB_MASTER 或 MB_SLAVE 指令放入用户程序中时,将为其分配背景数据块。 指定

MB_COMM_LOAD 指令的 MB_DB 参数时将引用该背景数据块。

MB_COMM_LOAD 数据块变量

下表给出存储在 MB_COMM_LOAD 的背景数据块中的公共静态变量(可在用户程序中使用)。

表格 12- 65 背景数据块中的静态变量

变量 数据类型 说明
ICHAR_GAP Word 字符间隙延时。 此参数以毫秒为单位指定,用于增加预期的接收字符间的时间量。 与此参数对应的位时间个数加到 Modbus 默认的 35

个位时间(3.5 个字符时间)。

RETRIES Word 主站在返回无响应错误代码 0x80C8 之前的重试次数。

表格 12- 66 MB_COMM_LOAD 执行条件代码 1

STATUS (W#16#) 说明
0000 无错误
8180 端口 ID 值无效(通信模块的端口/硬件标识符错误)
8181 波特率值无效
8182 奇偶校验值无效
8183 流控制值无效
8184 响应超时值无效(响应超时小于最小值 5 ms)
8185 MB_DB 参数不是 MB_MASTER 或 MB_SLAVE 指令的背景数据块。

1 除了上述列出的 MB_COMM_LOAD 错误,还可能返回底层 PtP 通信指令的错误。

参见

点对点指令 (页 610)

MB_MASTER

表格 12- 67 MB_MASTER 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-311 "MB_MASTER_DB"(

REQ:=_bool_in_, MB_ADDR:=_uint_in_, MODE:=_usint_in_, DATA_ADDR:=_udint_in_, DATA_LEN:=_uint_in_, DONE=>_bool_out_, BUSY=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, DATA_PTR:=_variant_inout_);

MB_MASTER 指令作为 Modbus 主站利用之前执行 MB_COMM_LOAD 指令组态的端口进行通信。 将 MB_MASTER 指令放入程序时自动分配背景数据块。 指定

MB_COMM_LOAD 指令的 MB_DB 参数时将使用该 MB_MASTER 背景数据块。

表格 12- 68 参数的数据类型

参数和类型 数据类型 说明
REQ IN Bool 0 = 无请求

1 = 请求将数据传送到 Modbus 从站

MB_ADDR IN V1.0: USInt Modbus RTU 站地址:
V2.0: UInt 标准寻址范围(1 到 247)
扩展寻址范围(1 到 65535)
值 0 被保留用于将消息广播到所有 Modbus 从站。 只有
Modbus 功能代码 05、06、15 和 16 是可用于广播的功能代
码。
MODE IN USInt 模式选择: 指定请求类型(读、写或诊断)。 请参见下面的

Modbus 功能表了解详细信息。

DATA_ADDR IN UDInt 从站中的起始地址: 指定要在 Modbus 从站中访问的数据的起始地址。 请参见下面的 Modbus 功能表了解有效地址信息。
DATA_LEN IN UInt 数据长度: 指定此请求中要访问的位数或字数。 请参见下面的

Modbus 功能表了解有效长度信息。

参数和类型 数据类型 说明
DATA_PTR IN Variant 数据指针: 指向要写入或读取的数据的 M 或 DB 地址(标准

DB 类型)。

DONE OUT Bool 上一请求已完成且没有出错后,DONE 位将保持为 TRUE 一个扫描周期时间。
BUSY OUT Bool
  • 0 – 无正在进行的 MB_MASTER 操作
  • 1 – MB_MASTER 操作正在进行
ERROR OUT Bool 上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间。 STATUS 参数中的错误代码值仅在 ERROR =

TRUE 的一个扫描周期内有效。

STATUS OUT Word 执行条件代码
Modbus 主站通信规则
          • 必须先执行 MB_COMM_LOAD 组态端口,然后 MB_MASTER 指令才能与该端口通信。
          • 如果要将某个端口用于初始化 Modbus 主站的请求,则 MB_SLAVE 不应使用该端口。 MB_MASTER 执行的一个或多个实例可使用该端口,但是对于该端口,所有

MB_MASTER 执行都必须使用同一个 MB_MASTER 背景数据块。

          • Modbus 指令不使用通信中断事件来控制通信过程。 用户程序必须轮询

MB_MASTER 指令以了解传送和接收的完成情况。

          • 建议对于给定的端口,从程序循环 OB 中调用所有 MB_MASTER 执行。Modbus 主站指令只能在一个程序循环或循环/延时执行等级执行。 它们不能同时在两种执行优先级中执行。 如果一个 Modbus 主站指令被另一个执行优先级更高的 Modbus 主站取代,将导致不正确的操作。 Modbus 主站指令不能在启动、诊断或时间错误执行优先级执行。
          • 主站指令启动传输后,必须连续执行已启用 EN 输入的该实例直到返回状态 DONE=1 或状态 ERROR=1 为止。 在这两个事件其中之一发生前,一个特殊的 MB_MASTER 实例被视为已激活。 原始实例激活后,调用已启用 REQ 输入的其它任何实例都将导致错误。 如果原始实例的连续执行过程停止,则请求状态保持激活一段时间,该时间由静态变量 Blocked_Proc_Timeout 指定。 一旦超出该时间段,则下一个使用激活的

REQ 输入调用的主站指令成为激活实例。 这可以防止单个 Modbus 主站指令独占或锁定对端口的访问。 如果在由静态变量“Blocked_Proc_Timeout”指定的时间段内没有启用原始激活的实例,则下次执行此实例(未设置 REQ)时将清除激活状态。 如果设置了 REQ,则此次执行将启动新的主站请求,如同其它实例未曾激活一样。

REQ 参数

0 = 无请求;1 = 请求将数据传送到 Modbus 从站

可使用电平或边沿触发的触点控制此输入。 只要此输入启用,状态机便会启动,以确保在当前请求完成前不允许使用同一背景数据块的任何其它 MB_MASTER 发出请求。 在当前请求执行期间,将捕获所有其它输入状态并内部保存,直到接收到响应或检测到错误。

如果在当前请求完成前 REQ 输入 = 1,从而再次执行 MB_MASTER 的同一实例,则不会进行任何后续传送。 但是,如果当前请求已完成,因为 REQ 输入 = 1 而再次执行

MB_MASTER 时,便会发出新请求。

DATA_ADDR 和 MODE 参数用于选择 Modbus 功能类型

DATA_ADDR(从站中的 Modbus 起始地址): 指定要在 Modbus 从站中访问的数据的起始地址。

MB_MASTER 指令使用 MODE 输入而非功能代码输入。 MODE 和 Modbus 地址一起确定实际 Modbus 消息中使用的功能代码。 下表列出了 MODE 参数、Modbus 功能代码和Modbus 地址范围之间的对应关系。

表格 12- 69 Modbus 功能

MODE Modbus

功能

数据长度 操作和数据 Modbus

地址

0 01 1 到 2000

1 到 1992 1

读取输出位:

每个请求 1 到 1992 或 2000 个位

1 到 9999
0 02 1 到 2000

1 到 1992 1

读取输入位:

每个请求 1 到 1992 或 2000 个位

10001 到 19999
0 03 1 到 125

1 到 124 1

读取保持寄存器:

每个请求 1 到 124 或 125 个字

40001 到 49999 或

400001 到 465535

0 04 1 到 125

1 到 124 1

读取输入字:

每个请求 1 到 124 或 125 个字

30001 到 39999
1 05 1 写入一个输出位: 每个请求 1 个位 1 到 9999
1 06 1 写入一个保持寄存器: 每个请求 1 个字 40001 到 49999 或

400001 到 465535

1 15 2 到 1968

2 到 1960 1

写入多个输出位:

每个请求 2 到 1960 或 1968 个位

1 到 9999
MODE Modbus

功能

数据长度 操作和数据 Modbus

地址

1 16 2 到 123

2 到 122 1

写入多个保持寄存器:

每个请求 2 到 122 或 123 个字

40001 到 49999 或

400001 到 465535

2 15 1 到 1968

2 到 1960 1

写入一个或多个输出位:

每个请求 1 到 1960 或 1968 个位

1 到 9999
2 16 1 到 123

1 到 122 1

写入一个或多个保持寄存器: 每个请求 1 到 122 或 123 个字 40001 到 49999 或

400001 到 465535

11 11 0 读取从站通信状态字和事件计数器。 状态字指示忙闲情况(0 – 不忙,0xFFFF - 忙)。 每成功完成一条消息,事件计数器的计数值递增。

对于该功能,MB_MASTER 的 DATA_ADDR 和

DATA_LEN 操作数都将被忽略。

80 08 1 利用数据诊断代码 0x0000 检查从站状态(回送测试 - 从站回送请求)

每个请求 1 个字

81 08 1 利用数据诊断代码 0x000A 重新设置从站事件计数器

每个请求 1 个字

3 到

10、

12 到

79、

82 到

255

保留

1 对于“扩展寻址”模式,根据功能所使用的数据类型,数据的最大长度将减小 1 个字节或 1 个字。

DATA_PTR 参数

DATA_PTR 参数指向要写入或读取的 DB 或 M 地址。 如果使用数据块,则必须创建一个全局数据块为读写 Modbus 从站提供数据存储位置。

说明

DATA_PTR 数据块类型必须允许直接寻址

该数据块必须允许直接(绝对)寻址和符号寻址。 创建该数据块时,必须选择“标准”(Standard) 访问属性。

DATA_PTR 参数的数据块结构

这些数据类型对 Modbus 地址 30001 到 39999、40001 到 49999 和 400001 到

465536 的字读取有效,对 Modbus 地址 40001 到 49999 和 400001 到 465536 的字写入也有效。

WORD、UINT 或 INT 数据类型的标准数组

指定的 WORD、UINT 或 INT 结构,其中每个元素都具有唯一的名称和 16 位数据类型。

指定的复杂结构,其中每个元素都具有唯一的名称以及 16 或 32 位数据类型。

用于 Modbus 地址 00001 到 09999 的位读取和写入和 10001 到 19999 的位读取。

布尔数据类型的标准数组。

具有唯一名称的布尔变量的指定布尔结构。

尽管不是必需的,但还是建议每个 MB_MASTER 指令都具有各自的单独存储区。 此建议的原因在于,如果多个 MB_MASTER 指令读取和写入同一个存储区,发生数据损坏的可能性会更大。

不要求 DATA_PTR 数据区位于同一个全局数据块中。 可创建一个具有多个区域的数据块供 Modbus 读取、一个数据块供 Modbus 写入或一个数据块用于各个从站。

Modbus 主站数据块变量

下表给出存储在 MB_MASTER 的背景数据块中的公共静态变量(可在用户程序中使用)。

表格 12- 70 背景数据块中的静态变量

变量 数据类型 初始值 说明
Blocked_Proc

_Timeout

Real 3.0 在 Modbus 主站实例受阻后,移除该激活的实例前需等待的时间

(秒)。 例如,当已发出主站请求,但程序在彻底完成该请求前停

止调用该主站功能时,就会出现这种情况。 时间值必须大于 0 且小于 55 秒,否则发生错误。 默认值为 .5 秒。

Extended_Ad dressing Bool False 组态单字节或双字节从站寻址。 默认值 = 0。

(0= 单字节地址、1= 双字节地址)

用户程序可以将值写入 Blocked_Proc_Timeout 和 Extended_Addressing 变量,以控制Modbus 主站操作。 有关如何在程序编辑器中使用这些变量的示例以及有关 Modbus 扩展寻址的详细信息,请参见 HR_Start_Offset 和 Extended_Addressing 的 MB_SLAVE 主题说明 (页 701)。

条件代码

表格 12- 71 MB_MASTER 执行条件代码(通信和组态错误)1

STATUS (W#16#) 说明
0000 无错误
80C8 从站超时。 检查波特率、奇偶校验和从站的接线。
80D1 接收方发出了暂停主动传输的流控制请求并且在指定的等待时间内未重新激活该传输。

在硬件流控制期间,如果接收方在指定的等待时间内没有声明 CTS,也会产生该错误。

80D2 传送请求中止,因为没有从 DCE 收到任何 DSR 信号。
80E0 因接收缓冲区已满,消息被终止。
80E1 因出现奇偶校验错误,消息被终止。
80E2 因组帧错误,消息被终止。
80E3 因出现超限错误,消息被终止。
80E4 因指定长度超出总缓冲区大小,消息被终止。
8180 无效端口 ID 值或 MB_COMM_LOAD 指令出错
8186 Modbus 站地址无效
8188 指定给广播请求的模式无效
8189 数据地址值无效
818A 数据长度值无效
818B 指向本地数据源/目标的指针无效: 大小不正确
818C DATA_PTR 的指针无效或 Blocked_Proc_Timeout 无效: 数据区必须是 DB(允许符号访问和直接访问)或 M 存储器。
8200 端口正忙于处理传送请求。

表格 12- 72 MB_MASTER 执行条件代码(Modbus 协议错误)1

STATUS (W#16#) 从站的响应代码 Modbus 协议错误
8380 - CRC 错误
8381 01 不支持此功能代码
8382 03 数据长度错误
8383 02 数据地址错误或地址超出 DATA_PTR 区的有效范围
8384 大于 03 数据值错误
8385 03 不支持此数据诊断代码值(功能代码 08)
8386 - 响应中的功能代码与请求中的代码不匹配。
8387 - 响应的从站错误
8388 - 从站对写请求的响应不正确。 从站返回的写请求与主站实际发送的写请求不匹配。

1 除了上述列出的 MB_MASTER 错误,还可能返回底层 PtP 通信指令的错误。

参见

点对点指令 (页 610)

MB_SLAVE

表格 12- 73 MB_SLAVE 指令

LAD/FBD SCL 说明
S7-1200 可编程控制器 通信处理器-312 "MB_SLAVE_DB"(

MB_ADDR:=_uint_in_, NDR=>_bool_out_, DR=>_bool_out_, ERROR=>_bool_out_, STATUS=>_word_out_, MB_HOLD_REG:=_variant_inout_);

MB_SLAVE 指令允许用户程序作为

Modbus 从站通过 CM(RS485 或RS232)和 CB (RS485) 上的 PtP 端口进行通信。 远程 Modbus RTU 主站发

出请求时,用户程序会通过执行

MB_SLAVE 进行响应。 STEP 7 在插入
指令时自动创建背景数据块。 在为
MB_COMM_LOAD 指令指定 MB_DB 参

数时使用此 MB_SLAVE_DB 名称。

表格 12- 74 参数的数据类型

参数和类型 数据类型 说明
MB_ADDR IN V1.0: USInt V2.0: UInt Modbus 从站的站地址: 标准寻址范围(1 到 247)

扩展寻址范围(0 到 65535)

MB_HOLD_REG IN Variant 指向 Modbus 保持寄存器 DB 的指针: Modbus 保持寄存器可以是 M 存储器或数据块。
NDR OUT Bool 新数据就绪:

  • 0 – 无新数据
  • 1 – 表示 Modbus 主站已写入新数据
DR OUT Bool 数据读取:

  • 0 – 无数据读取
  • 1 – 表示 Modbus 主站已读取数据
ERROR OUT Bool 上一请求因错误而终止后,ERROR 位将保持为 TRUE 一个扫描周期时间。 如果执行因错误而终止,则 STATUS 参数的错误代码值仅在 ERROR = TRUE 的一个扫描周期

内有效。

STATUS OUT Word 执行错误代码

Modbus 通信功能代码(1、2、4、5 和 15)可以在 CPU 的输入过程映像及输出过程映像中直接读写位和字。 对于这些功能代码,MB_HOLD_REG 参数必须定义为大于一个字节的数据类型。 下表给出了 Modbus 地址与 CPU 过程映像的映射示例。

表格 12- 75 Modbus 地址到过程映像的映射

Modbus 功能 S7-1200
代码 功能 数据区 地址范围 数据区 CPU 地址
01 读位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7
02 读位 输入 10001 18192 输入过程映像 I0.0 到 I1023.7
04 读字 输入 30001 30512 输入过程映像 IW0 到 IW1022
05 写位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7
15 写位 输出 1 8192 输出过程映像 Q0.0 到 Q1023.7

Modbus 通信功能代码(3、6、16)使用 Modbus 保持寄存器,该寄存器可以是 M 存储器地址范围或数据块。 保持寄存器的类型由 MB_SLAVE 指令的 MB_HOLD_REG 参数指定。

说明

MB_HOLD_REG 数据块类型

Modbus 保持寄存器数据块必须允许直接(绝对)寻址和符号寻址。 创建该数据块时,必须选择“标准”(Standard) 访问属性。

下表给出了 Modbus 地址到保持寄存器的映射示例,这种映射用于 Modbus 功能代码 03

(读取字)、06(写入字)和 16(读取字)。 DB 地址的实际上限取决于每种 CPU 型号的最大工作存储器限值和 M 存储器限值。

表格 12- 76 Modbus 地址到 CPU 存储器的映射

Modbus 主站地址 MB_HOLD_REG 参数示例
MW100 DB10.DBw0 MW120 DB10.DBW50 "Recipe".ingredient
40001 MW100 DB10.DBW0 MW120 DB10.DBW50 "Recipe".ingredient[1]
40002 MW102 DB10.DBW2 MW122 DB10.DBW52 "Recipe".ingredient[2]
40003 MW104 DB10.DBW4 MW124 DB10.DBW54 "Recipe".ingredient[3]
40004 MW106 DB10.DBW6 MW126 DB10.DBW56 "Recipe".ingredient[4]
40005 MW108 DB10.DBW8 MW128 DB10.DBW58 "Recipe".ingredient[5]

表格 12- 77 诊断功能

S7-1200 MB_SLAVE Modbus 诊断功能
代码 子功能 说明
08 0000H 返回查询数据回送测试: MB_SLAVE 将向 Modbus 主站回送接收到的数据字。
08 000AH 清除通信事件计数器: MB_SLAVE 将清除用于 Modbus 功能 11 的通信事件计数器。
11 获取通信事件计数器: MB_SLAVE 使用内部通信事件计数器来记录发送到

Modbus 从站的 Modbus 成功读取和写入请求次数。 该计数器不会因功能

8、功能 11 或广播请求而增加。 同样也不会因任何导致通信错误(例如, 奇偶校验错误或 CRC 错误)的请求而增加。

MB_SLAVE 指令支持来自任何 Modbus 主站的广播写请求,只要该请求是用于访问有效地址的请求即可。 对于广播不支持的功能代码,MB_SLAVE 将生成错误代码 0x8188。

Modbus 从站通信规则
          • 必须先执行 MB_COMM_LOAD 组态端口,然后 MB_SLAVE 指令才能通过该端口通信。
          • 如果某个端口作为从站响应 Modbus 主站,则请勿使用 MB_MASTER 指令对该端口进行编程。
          • 对于给定端口,只能使用一个 MB_SLAVE 实例,否则将出现不确定的行为。
          • Modbus 指令不使用通信中断事件来控制通信过程。 用户程序必须通过轮询

MB_SLAVE 指令以了解传送和接收的完成情况来控制通信过程。

          • MB_SLAVE 指令必须以一定的速率定期执行,以便能够及时响应来自 Modbus 主站的进入请求。 建议每次扫描时都从程序循环 OB 执行 MB_SLAVE。也可以从循环中 断 OB 执行 MB_SLAVE,但并不建议这么做,因为中断例程的延时过长可能会暂时阻止其它中断例程的执行。
Modbus 定时信号

必须周期性执行 MB_SLAVE,才能接收来自 Modbus 主站的每个请求并随之按要求响应。 MB_SLAVE 的执行频率取决于 Modbus 主站的响应超时时间。 下图对此进行了说明。

$'5 )&

'DWD

&5&

◶⾽

庮㜟㜟朝

ὤ䰂⓺愪

ῷ䰂⓺愪

庠⫴

朝枽 = 3.5 ὓⲀ䱏㜟朝

◶⾽

〟愈㜟朝 $'5 )&

'DWD

庠⫴

&5& 朝 枽

$'5

响应超时时间 RESP_TO 是 Modbus 主站等待 Modbus 从站开始响应的时间。 该时间段不是由 Modbus 协议定义的,而是属于每个 Modbus 主站的一个参数。 必须基于用户

Modbus 主站的具体参数确定 MB_SLAVE 的执行频率(相邻两次执行之间的时间)。 在

&5&

Modbus 主站的响应超时时间内至少应执行两次 MB_SLAVE。

Modbus 从站变量

下表给出了存储在 MB_SLAVE 背景数据块(可在用户程序中使用)中的公共静态变量。

表格 12- 78 Modbus 从站变量

变量 数据类型 说明
HR_Start_Offset Word 指定 Modbus 保持寄存器的起始地址(默认值 = 0)
Extended_Addressing Bool 组态单字节或双字节从站寻址

(0= 单字节地址、1= 双字节地址、默认 = 0)

Request_Count Word 该从站接收到的所有请求的数量
Slave_Message_Cou nt Word 该特定从站接收到的请求的数量
Bad_CRC_Count Word 接收到的具有 CRC 错误的请求的数量
Broadcast_Count Word 接收到的广播请求的数量
Exception_Count Word 需要返回例外的 Modbus 特定错误数
Success_Count Word 该特定从站接收到的没有协议错误的请求数量

程序可以将值写入 HR_Start_Offset 和 Extended_Addressing 变量以控制 Modbus 从站操作。 可读取其它变量以监视 Modbus 的状态。

HR_Start_Offset

Modbus 保持寄存器的地址以 40001 或 400001 开始。这些地址与保持寄存器的 PLC 存储器起始地址对应。 不过,可以组态“HR_Start_Offset”变量,将 Modbus 保持寄存器的起始地址定义为除 40001 或 400001 之外的其它值。

例如,如果保持寄存器被组态为起始于 MW100 并且长度为 100 个字。 偏移量 20 可指定保持寄存器的起始地址为 40021 而不是 40001。低于 40021 和高于 400119 的任何地址都将导致寻址错误。

表格 12- 79 Modbus 保持寄存器寻址示例

HR_Start_Offset 地址 最小值 最大值
0 Modbus 地址(字) 40001 40099
S7-1200 地址 MW100 MW298
20 Modbus 地址(字) 40021 40119
S7-1200 地址 MW100 MW298

HR_Start_Offset 是一个字值,用于指定 Modbus 保持寄存器的起始地址,存储在

MB_SLAVE 背景数据块中。 将 MB_SLAVE 放入程序后,可利用参数助手下拉列表设置该公共静态变量值。

例如,将 MB_SLAVE 放入 LAD 程序段后,可以切换到先前的程序段,分配

HR_Start_Offset 值。 该值必须在执行 MB_SLAVE 前分配。

S7-1200 可编程控制器 通信处理器-313 使用默认 DB 名称输入 Modbus 从站变量:

  1. 将光标放在参数字段中,然后输入 m 字符。
  2. S7-1200 可编程控制器 通信处理器-314 从下拉列表中选择“MB_SLAVE_DB”。
  3. 将光标放在 DB 名称的右侧(引号字符的后面),然后输入句点字符。
  4. 从下拉列表中选择

S7-1200 可编程控制器 通信处理器-315 “MB_SLAVE_DB.HR_Start_Offset”。

Extended_Addressing

Extended_Addressing 变量的访问方式与上述的 HR_Start_Offset 参考相似,只是

Extended_Addressing 变量是布尔值。 布尔值必须通过输出线圈(不是移动框)写入。

Modbus 从站寻址可组态为单字节(Modbus 标准方式)或双字节。 扩展寻址用于对单一网络内超过 247 台设备进行寻址。 选择扩展寻址后,最多可以对 64000 个地址进行寻址。 下面以 Modbus 功能 1 的帧为例进行显示。

表格 12- 80 单字节从站地址(字节 0)

功能 1 字节 0 字节 1 字节 2 字节 3 字节 4 字节 5
请求 从站地址 F 代码 起始地址 线圈长度
有效响应 从站地址 F 代码 长度 线圈数据
错误响应 从站地址 0x81 E 代码

表格 12- 81 双字节从站地址(字节 0 和字节 1)

字节 0 字节 1 字节 2 字节 3 字节 4 字节 5 字节 6
请求 从站地址 F 代码 起始地址 线圈长度
有效响应 从站地址 F 代码 长度 线圈数据
错误响应 从站地址 0x81 E 代码
条件代码

表格 12- 82 MB_SLAVE 执行条件代码(通信和组态错误)1

STATUS (W#16#) 说明
80D1 接收方发出了暂停主动传输的流控制请求并且在指定的等待时间内未重新激活该传输。

在硬件流控制期间,如果接收方在指定的等待时间内没有声明 CTS,也会产生该错误。

80D2 传送请求中止,因为没有从 DCE 收到任何 DSR 信号。
80E0 因接收缓冲区已满,消息被终止。
80E1 因出现奇偶校验错误,消息被终止。
80E2 因组帧错误,消息被终止。
80E3 因出现超限错误,消息被终止。
80E4 因指定长度超出总缓冲区大小,消息被终止。
8180 无效端口 ID 值或 MB_COMM_LOAD 指令出错
8186 Modbus 站地址无效
8187 指向 MB_HOLD_REG DB 的指针无效: 区域太小
818C 指向 M 存储器或 DB(DB 区域必须允许符号地址和直接地址)的

MB_HOLD_REG 指针无效

表格 12- 83 MB_SLAVE 执行条件代码(Modbus 协议错误)1

STATUS (W#16#) 从站的响应代码 Modbus 协议错误
8380 无响应 CRC 错误
8381 01 不支持功能代码或在广播内不支持
STATUS (W#16#) 从站的响应代码 Modbus 协议错误
8382 03 数据长度错误
8383 02 数据地址错误或地址超出 DATA_PTR 区的有效范围
8384 03 数据值错误
8385 03 不支持此数据诊断代码值(功能代码 08)

1 除了上述列出的 MB_SLAVE 错误,还可能返回底层 PtP 通信指令的错误。

参见

点对点指令 (页 610)

Modbus RTU 主站示例程序

启动期间通过第一个扫描标志启用 MB_COMM_LOAD。 通过此方式执行

S7-1200 可编程控制器 通信处理器-316 MB_COMM_LOAD 时,必须保证串口组态在运行时不会更改。程序段 1 仅在第一次扫描期间初始化一次 RS485 模块参数。

在程序循环 OB 中使用一个 MB_MASTER 指令,以与单个从站进行通信。 要与其它从站通信,可在程序循环 OB 中使用另外的 MB_MASTER 指令,也可以重新使用一个MB_MASTER FB。

网络 2 从从站保持寄存器读取 100 个字。

S7-1200 可编程控制器 通信处理器-317

网络 3 这是一个可选网络,仅显示读操作完成后前 3 个字的值。

S7-1200 可编程控制器 通信处理器-318

网络 4 将 64 个位写入起始于从站地址 Q2.0 的输出映像寄存器。

S7-1200 可编程控制器 通信处理器-319

Modbus RTU 从站示例程序

每次启用“Tag_1”启用时,初始化下面显示的 MB_COMM_LOAD。

通过此方式执行 MB_COMM_LOAD 时,必须保证串口组态在运行时会根据 HMI 配置进行更改。

程序段 1 每次 HMI 设备更改 RS485 模块参数时,都会初始化该参数。

S7-1200 可编程控制器 通信处理器-320

下面显示的 MB_SLAVE 置于每 10 ms 执行一次的循环 OB 中。 尽管这样不会使从站的绝对响应速度达到最快,但却可使短消息(在请求中占 20 字节或更低)达到 9600 波特的良好性能。

程序段 2 每次扫描期间检查 Modbus 主站请求。 Modbus 保持寄存器被组态为 100 个字

(从 MW1000 开始)。

S7-1200 可编程控制器 通信处理器-321

采用 CP 1242-7 的遥控和远程服务

连接到 GSM 网络

通过 GPRS 且基于 IP 的 WAN 通信

可以使用 CP 1242-7 通信处理器将 S7-1200 连接到 GSM 网络。 使用 CP 1242-7 可以实现远程站与控制中心的 WAN 通信,以及站间通信。

站间通信只能通过 GSM 网络实现。 要在远程站和控制室之间进行通信,控制中心必须具备可以访问 Internet 的 PC。

CP 1242-7 支持通过 GSM 网络的以下通信服务:

        • GPRS(General Packet Radio Service,通用分组无线服务) 通过 GSM 网络处理用于数据传输“GPRS”且面向数据包的服务。
        • SMS(Short Message Service,短消息服务)

CP 1242-7 可以接收和发送 SMS 消息。 通信伙伴可以是移动电话或 S7-1200。CP 1242-7 适用于世界各地的工业行业,支持以下频段:

        • 850 MHz
        • 900 MHz
        • 1800 MHz
        • 1900 MHz
要求

站或控制中心使用的设备取决于具体的应用。

        • 要与中央控制室通信或者要通过中央控制室进行通信,控制中心需要具备可以访问

Internet 的 PC。

        • 除站设备之外,具有 CP 1242-7 的远程 S7-1200 站必须满足以下要求才能通过 GSM

网络进行通信:

          • 与相应的 GSM 网络供应商签订了合约

如果使用 GPRS,合约必须允许使用 GPRS 服务。

如果存在仅通过 GSM 网络的站间直接通信,则 GSM 网络供应商必须给 CP 分配固定 IP 地址。 在这种情况下,站间通信不经过控制中心。

          • 合约中包含 SIM 卡

SIM 卡已插入 CP 1242-7 中。

          • 可在站范围内本地使用 GSM 网络

12.6.2 CP 1242-7 的应用

CP 1242-7 可用于以下应用:

遥控应用
  • 通过 SMS 发送消息

通过 CP 1242-7,远程 S7-1200 站的 CPU 可以接收来自 GSM 网络的 SMS 消息,或者通过 SMS 向已组态的移动电话或 S7-1200 发送消息。

  • 与控制中心的通信

远程 S7-1200 站通过 GSM 网络和 Internet 与主站中的遥控服务器进行通信。 要使用

GPRS 进行数据传送,需在主站中的遥控服务器上安装“TELECONTROL SERVER

BASIC”应用程序。 遥控服务器使用集成的 OPC 服务器功能与上层中央控制系统通信。

  • S7-1200 站之间通过 GSM 网络进行通信

可以用两种不同的方式处理配有 CP 1242-7 的远程站之间的通信:

    • 通过主站进行站间通信

在该组态情况下,互相通信的 S7-1200 站与遥控服务器间的永久安全连接在主站中建立。 各个站通过遥控服务器通信。 CP 1242-7 在“Telecontrol”模式下运行。

    • 站间直接通信

若要各个站直接进行通信而不经由主站迂回通信,可以使用具有固定 IP 地址的SIM 卡使得站可以直接互相寻址。 可能的通信服务和安全功能(例如 VPN)取决于网络供应商所提供的服务。 CP 1242-7 在“GPRS 直连”模式下运行。

通过 GPRS 实现 TeleService

可以通过 GSM 网络和 Internet 在装有 STEP 7 的工程师站与具有 CP 1242-7 的远程S7-1200 站间建立 TeleService 连接。 连接从工程师站通过用于中转帧和建立授权的遥控服务器或 TeleService 网关向外延伸。 这些 PC 使用“TELECONTROL SERVER BASIC”应用程序的功能。

可以将 TeleService 连接用于以下方面:

      • 将组态或程序数据由 STEP 7 项目下载到工作站。
      • 查询工作站中的诊断数据

CP 的其它属性

CP 1242-7 的其它服务和功能
        • 通过 Internet 执行 CP 的日时钟同步可以按照以下方法设置 CP 的时间:
          • 在“Telecontrol”模式下,由遥控服务器传送日时钟。 CP 使用该时间来设置其自身的时间。
          • 在“GPRS 直接”模式下,CP 可通过 SNTP 请求时间。为同步 CPU 时间,可以用块从 CP 读出当前时间。
        • 在存在连接问题时临时缓冲要发送的消息
        • 由于可以选择连接到备用遥控服务器而增强的可用性
        • 优化的数据量(临时连接)

除与远程控制服务器建立永久连接的方式外,还可以在 STEP 7 中使用与远程控制服务器建立的临时连接来组态 CP。这种情况下,仅在需要时建立与遥控服务器的连接。

        • 记录数据量

记录已传送的数据量,并根据特定需要进行评估。

组态和模块替换

要组态该模块,需要以下组态工具:

STEP 7 版本 V11.0 SP1 或更高版本

对于 STEP 7 V11.0 SP1,还需要支持包“CP 1242-7”(HSP0003001)。

要使用 GPRS 传输过程数据,请在相应站的用户程序中使用遥控指令。

CP 1242-7 的组态数据存储在本地 CPU 中。 这样就可以在必要时方便地替换 CP。

每个 S7-1200 中最多可插入三个 CP 1242-7 类型的模块。这样便可建立冗余通信路径。

电气连接
  • CP 1242-7 的电源

CP 具有一个用来外接 24 VDC 电源的独立连接器。

  • GSM 网络的无线接口

GSM 通信需要另外使用天线。 这通过 CP 的 SMA 插座进行连接。

更多信息

CP 1242-7 手册包含详细信息。 您可以在 Internet 的西门子工业自动化客户支持页面上找到该手册,相应的条目 ID 如下:

42330276 (http://support.automation.siemens.com/WW/view/zh/42330276)

附件

ANT794-4MR GSM/GPRS 天线

以下天线可以在 GSM/GPRS 网络中使用,并且可以安装在室内和室外:

        • S7-1200 可编程控制器 通信处理器-322 四频天线 ANT794-4MR

图 12-1 ANT794-4MR GSM/GPRS 天线

简称 订货号 说明
ANT794-4MR 6NH9 860-1AA00 四 频 天 线 (900 、 1800/1900 MHz, UMTS);防风雨,可在室内和室外使用;天线永久连接 5 m 连接电缆;SMA 连接器(包

括安装支架、螺钉、墙用插头)

  • 平面天线 ANT794-3M

S7-1200 可编程控制器 通信处理器-323 S7-1200 可编程控制器 通信处理器-324 S7-1200 可编程控制器 通信处理器-325 S7-1200 可编程控制器 通信处理器-326 S7-1200 可编程控制器 通信处理器-327 S7-1200 可编程控制器 通信处理器-328 S7-1200 可编程控制器 通信处理器-329 S7-1200 可编程控制器 通信处理器-330 S7-1200 可编程控制器 通信处理器-331 S7-1200 可编程控制器 通信处理器-332 S7-1200 可编程控制器 通信处理器-333 S7-1200 可编程控制器 通信处理器-334

图 12-2 平面天线 ANT794-3M

简称 订货号 说明
ANT794-3M 6NH9 870-1AA00 平面天线(900、1800/1900 MHz);防风雨,可在室内和室外使用;天线永久连接 1.2 m 连接电缆;SMA 连接器(包括粘板),可

使用螺钉安装

天线必须单独订购。

更多信息

有关详细信息,请参见设备手册。 您可以在 Internet 的西门子工业自动化客户支持页面上找到该手册,相应的条目 ID 如下:

23119005 (http://support.automation.siemens.com/WW/view/zh/23119005)

遥控组态示例

下文针对配有 CP 1242-7 的站提供了几个组态示例。

通过 SMS 发送消息

S7-1200 可编程控制器 通信处理器-335 S7-1200 可编程控制器 通信处理器-336 S7-1200 可编程控制器 通信处理器-337 S7-1200 可编程控制器 通信处理器-338 S7-1200 可编程控制器 通信处理器-339 S7-1200 可编程控制器 通信处理器-340

*356

䬤⏑䙞崆

盤㌿ 37̱l200 䰂盥

⊠㠲 #0?l242̱7䞭 37̱l200

图 12-3 通过 SMS 从 S7-1200 站发送消息

配有 CP 1242-7 的 SIMATIC S7-1200 可以通过 SMS 向移动电话或已组态的 S7-1200 站发送消息。

通过控制中心进行遥控

图 12-4 S7-1200 站与控制中心之间的通信

S7-1200 可编程控制器 通信处理器-341 S7-1200 可编程控制器 通信处理器-342 S7-1200 可编程控制器 通信处理器-343 S7-1200 可编程控制器 通信处理器-344 S7-1200 可编程控制器 通信处理器-345 S7-1200 可编程控制器 通信处理器-346 S7-1200 可编程控制器 通信处理器-347 S7-1200 可编程控制器 通信处理器-348 S7-1200 可编程控制器 通信处理器-349 S7-1200 可编程控制器 通信处理器-350 S7-1200 可编程控制器 通信处理器-351 S7-1200 可编程控制器 通信处理器-352 S7-1200 可编程控制器 通信处理器-353 S7-1200 可编程控制器 通信处理器-354 S7-1200 可编程控制器 通信处理器-355 S7-1200 可编程控制器 通信处理器-356

⽏n4%,%#/.42/, 3%26%2

"!3)#o⾽䙑

䬴⾸䞭愅䬴㓐⍟㠶⏊➑

㓐⍟ὖレ

$3, 弘䙚➑

)NTERNET

,QGXVWULDO (WKHUQHW

*356

⽏㠲 #0 l242—7 䞭

䰂 37—l200

⽏㠲 -$720—3 䞭

䰂 37—200

⽏㠲 #0 l242—7 䞭

䰂 37—l200

在遥控应用中,配有 CP 1242-7 的 SIMATIC S7-1200 通过 GSM 网络和 Internet 与控制中心通信。主站中的遥控服务器已安装“TELECONTROL SERVER BASIC”(TCSB) 应用程序。 如此可实现以下应用:

        • 工作站和控制中心之间的遥控通信

在该应用中,工作站通过 GSM 网络和 Internet 将现场数据发送到主站中的遥控服务器。遥控服务器用于监控远程站。

        • 工作站和装有 OPC 客户机的控制室之间的通信

与第一种应用类似,工作站与遥控服务器进行通信。通过其集成 OPC 服务器,遥控服务器会与控制室的 OPC 客户机交换数据。

OPC 客户机和遥控服务器可位于单台计算机上,例如当 TCSB 安装在装有 WinCC 的控制中心计算机上时。

        • 通过控制中心进行站间通信

对于配有 CP 1242-7 的 S7 站,可以进行站间通信。

遥控服务器会将发送站的消息转发给接收站,从而实现站间通信。

站间直接通信

图 12-5 两个 S7-1200 站间直接通信

S7-1200 可编程控制器 通信处理器-357 S7-1200 可编程控制器 通信处理器-358 S7-1200 可编程控制器 通信处理器-359 S7-1200 可编程控制器 通信处理器-360 S7-1200 可编程控制器 通信处理器-361 S7-1200 可编程控制器 通信处理器-362

偺倅㓹⃄♯⌯扶⠣ⳃ )0 ⡙⡩

*356

⊠㠲⠣ⳃ )0

⡙⡩ 䞭 #0

⊠㠲⠣ⳃ )0

⡙⡩ 䞭 #0

扶⨰ #0?l242̱7

䰂 䞭 37̱l200

扶⨰ #0?l242̱7

䰂 䞭 37̱l200

在该组态情况下,两个 SIMATIC S7-1200 站使用 CP 1242-7 通过 GSM 网络彼此直接通信。 各 CP 1242-7 具有固定 IP 地址。 GSM 网络供应商的相关服务必须支持该操作。

GPRS TeleService

在 GPRS TeleService 中,安装了 STEP 7 的工程师站通过 GSM 网络和 Internet 与

S7-1200 中的 CP 1242-7 进行通信。

由于防火墙因外部连接请求通常处于关闭状态,因此需要在远程站与工程师站之间设交换站。交换站可以是遥控服务器或 TeleService 网关(如果组态中没有遥控服务器)。

带遥控服务器的 TeleService

通过遥控服务器进行连接。

  • 工程师站和遥控服务器通过 Intranet (LAN) 或 Internet 连接。
  • 遥控服务器和远程站通过 Internet 和 GSM 网络连接。

工程师站和遥控服务器也可以是同一台计算机;换言之,STEP 7 和 TCSB 安装在同一台计算机上。

S7-1200 可编程控制器 通信处理器-363 S7-1200 可编程控制器 通信处理器-364 S7-1200 可编程控制器 通信处理器-365 S7-1200 可编程控制器 通信处理器-366 S7-1200 可编程控制器 通信处理器-367 S7-1200 可编程控制器 通信处理器-368 S7-1200 可编程控制器 通信处理器-369 S7-1200 可编程控制器 通信处理器-370 S7-1200 可编程控制器 通信处理器-371 S7-1200 可编程控制器 通信处理器-372 S7-1200 可编程控制器 通信处理器-373

ᏺᑨ⫼⿟ᑣⱘ䖰⿟᥻ࠊ᳡ࡵ఼

"7(/(&21752/ 6(59(5 %$6,&"

,QWHUQHW

'6/ 䏃⬅఼

*356

,QGXVWULDO (WKHUQHW

䜡 ໛ &3 1242ϋ7

キ ⱘ 67ϋ1200

䜡 ໛ 67(3 7 ⱘᎹ ⿟Ꮬキ

图 12-6 带遥控服务器的组态中的 GPRS TeleService

不带遥控服务器的 TeleService

通过 TeleService 网关进行连接。

工程师站与 TeleService 网关之间的连接可通过 LAN 在本地实现,也可以通过 Internet

实现。

图 12-7 带 TeleService 网关的组态中的 GPRS TeleService

S7-1200 可编程控制器 通信处理器-374 S7-1200 可编程控制器 通信处理器-375 S7-1200 可编程控制器 通信处理器-376 S7-1200 可编程控制器 通信处理器-377 S7-1200 可编程控制器 通信处理器-378 S7-1200 可编程控制器 通信处理器-379 S7-1200 可编程控制器 通信处理器-380 S7-1200 可编程控制器 通信处理器-381 S7-1200 可编程控制器 通信处理器-382 S7-1200 可编程控制器 通信处理器-383 S7-1200 可编程控制器 通信处理器-384 S7-1200 可编程控制器 通信处理器-385 S7-1200 可编程控制器 通信处理器-386 S7-1200 可编程控制器 通信处理器-387

扶㠲 34%0?7 䞭⼎䬴⼱䰂

扶㠲 34%0?7 䞭⼎䬴⼱䰂

4ELE3ERVICE 偺⊜

)NTERNET

$3, 弘䙚➑

*356

,QGXVWULDO (WKHUQHW

扶㠲 #0?l242̱7䞭 37̱l200

weinxin
plc入门知识问答
所有PLC工程师都会关注的微信公众账号,只需输入您的问题,就会有答案

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: