西门子S7-1200如何点对点 (PtP) 通信
CPU 支持下列基于字符的串行协议的点对点通信 (PtP):
- PtP
- USS
- Modbus
PtP 可提供最大的自由度和灵活性,但需要在用户程序中包含大量的实现。
PtP 可用于实现多种可能性:
- 能够将信息直接发送到外部设备,例如,打印机
- 能够从其它设备(例如,条码阅读器、RFID 阅读器、第三方照相机或视觉系统以及许多其它类 型的设备)接收信息
- 能够与其它设备(例如,GPS 设备、第三方照相机或视觉系统、无线调制解调器 以及更多其它设备)交换信息(发送和接收数据)
这种类型的 PtP 通信属于串行通信,它使用标准 UART 来支持多种波特率和奇偶校验选项。RS232 和 RS422/485 通信模块 (CM 1241) 以及 RS485 通信板 (CB 1241) 提供了用于执行 PtP 通信的电气接口
通过 PROFIBUS 或 PROFINET 的 PtP
V4.1 版的 S7-1200 CPU 与 STEP 7 V13 SP1 一起使用可以扩展 PtP 的功能,使用户能够使用 PROFINET 或 PROFIBUS 分布式 I/O 机架与各种设备(RFID 阅读器、GPS 设备和其它设备)通信。
- PROFINET:可以将 S7-1200 CPU 的以太网接口连接至 PROFINET接口模块。可通过机架中 PtP 通信模块以接口模块实现与 PtP 设备的串行通信。
- PROFIBUS:在 S7-1200 CPU 机架左边插入 PROFIBUS 通信模块。将 PROFIBUS 通信模块连接至 PROFIBUS 接口模块的机架。可通过机架中 PtP 通信模块以接口模块实现与 PtP 设备的串行通信。
出于这个原因,S7-1200 支持两组 PtP 指令:
- 早期点对点指令:这些指令适用于 V4.0 版之前的 S7-1200,并且只能通过 CM 1241 通信模块或 CB 1241 通信板进行串行通信。
- 点对点指令:这些指令具备早期指令的所有功能,并且增添了连接 PROFINET 和 PROFIBUS 分布式 I/O 的功能。这些点对点指令可用于组态分布式 I/O 机架中 PtP 通信模块与 PtP 设备之间的通信。要使用这些点对点指令,S7-1200 CM 1241 模块的固件版本必须不得低于 V2.1。
说明
用于 S7-1200 的 V4.1版本时,可以对所有类型的点对点通信使用点对点指令:串行通信、基于 PROFINET 的串行通信和基于 PROFIBUS 的串行通信。STEP 7 提供早期点对点指令的目的仅是为了支持现有程序。无论对于 V4.1 CPU 或 V4.0 还是更早版本的 CPU,早期指令仍然有效。无须对之前程序的指令进行转换。
组态通信端口
您可以使用以下各种方法组态通信接口:
- 使用STEP 7 中的设备组态组态端口参数(波特率和奇偶校验)、发送参数和接收参数。 CPU 存储设备组态设置,并在循环上电和从 RUN 模式切换到 STOP 模式后应用这些设置。
- 使用Port_Config、Send_Config 和 Receive_Config指令设置参数。 这些指令设置的端口设置在 CPU 处于 RUN 模式期间有效。 在切换到 STOP 模式或循环上电后,这些端口设置会恢复为设备组态设置。组态硬件设备 之后,通过选择机架上的某个 CM 或CB(如果已组态)来组态通信接口的参数。
窗口中的“属性”(Properties) 选项卡显示所选 CM 或 CB 的参数。 选择“端口组态”(Port configuration) 以编辑以下参数:
- 波特率
- 奇偶校验
- 每个字符的数据位数
- 停止位的数目
- 流控制(仅限 RS232)
- 等待时间
对于 CM 1241 RS232 和 CB RS485(除仅 CM 1241 RS232 支持的流控制外),无论是组态 RS232 或 RS485 通信模块还是 RS485
通信板,端口组态参数都是相同的。 但是,参数值可以不同。对于 CM 1241 RS422/485,您还具有下列所示的额外端口组态选项。 CM 1241 RS422/485 模块的 422 模式还支持软件流控制。
选择“端口组态”(Port configuration) 以编辑以下RS422/485 参数:
1、“工作模式”(Operating mode):
– 全双工 (RS422) 四线制模式(点对点连接)
– 全双工 (RS422) 四线制模式(多点主站)
– 全双工 (RS422) 四线制模式(多点从站)
– 半双工 (RS485) 两线制模式
2、“接收线路初始状态”(Receive line initial state):
– 无
– 正向偏置(信号 R(A) 0V、信号 R(B) 5V)
STEP 7 用户程序还可通过 Port_Config 指令组态端口或更改现有组态。 指令主题提供更多关于工作模式和初始线路状态以及其它参数的详细信息。
参数 | 定义 |
波特率 | 波特率的默认值为 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 通信模块,可以选择硬件或软件流控制 。 |
如果选择硬件流控制,则可以选择是 RTS 信号始终激活还是切换 RTS。 | |
如果选择软件流控制,则可以定义 XON 和 XOFF 字符。 | |
RS485 通信接口不支持流控制。 CM 1241 RS422/485 模块的 422 | |
模式支持软件流控制。 | |
等待时间 | 等待时间是指 CM 或 CB 在断言 RTS 后等待接收 CTS 的时间,或者在接收 XOFF 后等待接收 XON 的时间,具体取决于流控制类型。 如果在通信接口收到预期的 CTS 或 XON 之前超过了等待时间,CM 或 CB 将中止传送操作并向用户程序返回错误。 指定等待时间,以毫秒表示。 范围是 0 到 65535 毫秒。 |
工作模式 | 选择工作模式 RS422 或 RS485 以及网络组态。 |
接收线路初始状态 | 选择偏置选项。 有效值为无、正向偏置和反向偏置。 反向偏置用于检测电缆断线。 |
管理流控制
流控制是指为了不丢失数据而用来平衡数据发送和接收的一种机制。 流控制可确保传送设备发送的信息量不会超出接收设备所能处理的信息量。 流控制可以通过硬件或软件来实现。 RS232 CM 支持硬件及软件流控制。 RS485 CM 和 CB 不支持流控制。 CM 1241 RS422/485 模块的 422 模式支持软件流控制。 可在组态端口 时或使用 PORT_CFG 指令指定流控制类型。
硬件流控制通过请求发送 (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 信号在组态的等待时间内未激活,则模块会中止传送并向用户程序返回错误。 在端口组态中指定等待时间。
对于需要“传送已激活”信号的设备,适合使用 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 在通过端口组态指定的等待时间内没有收到 XON 字符,它将中止传送并向用户程序返回错误。
软件流控制需要全双工通信,因为在传送过程中接收伙伴必须能够将 XOFF 发送到传送伙伴。 软件流控制只能用于仅包含 ASCII 字符的消息。 二进制协议无法使用软件流控制。
组态传送(发送)和接收参数
在 CPU 可进行 PtP 通信前,必须组态传送(或发送)消息和接收消息的参数。 这些参数决定了在向目标设备传送消息或从目标设备接收消息时的通信工作方式。
组态传送(发送)参数
在 CPU 的设备组态中,通过设置所选接口的“传送消息组态”(Transmit message configuration) 属性,来组态通信接口传送数据的方式。
还可以使用 Send_Config指令,从用户程序动态组态或更改传送消息参数。在用户程序中通过 Send_Config 指令设置的参数值会覆盖“传送消息组态”(Transmit message configuration) 属性。 请注意,发生掉电时,CPU 不会保留通过 Send_Config 指令设置的参数。
组态接收参数
在 CPU 的设备组态中,可以组态通信接口接收数据以及识别消息开始和结束的方式。 在所选接口的“接收消息组态”(Receive message configuration) 属性中设置这些参数。
还可以在用户程序中使用 Receive_Config 指令,
说明
在用户程序中通过 Receive_Config 指令设置的参数值会覆盖“接收消息组态”(Receive message configuration) 属性。 请注意,发生掉电或转为 STOP 状态时,CPU 不会保留通过 RCV_CFG 指令设置的参数。
消息开始条件
用户可以决定通信接口识别消息开始的方式。 在满足所组态的结束条件之前,开始字符以及组成消息的字符会一直进入接收缓冲区。
可以指定多个开始条件。 如果指定多个开始条件,则只有在满足所有开始条件后才认为消息开始。 例如,如果用户组态了线路空闲时间和特定开始字符,CM 或 CB 将首先查找要满足的线路空闲时间要求,然后 CM 将查找指定的开始字符。 如果收到其它某个字符而不是指定的开始字符,CM 或 CB 将通过再次查找线路空闲时间来重新启动消息开始条件搜索。
参数 | 定义 |
以任意字符开始 | “任意字符”条件指定,成功接收任何字符都将表示消息开始。 该字符是消息中的第一个字符。 |
线路中断 | “线路中断”条件指定在接收中断字符后开始消息接收操作。 |
线路空闲 | “线路空闲”条件指定在接收线路空闲或平静了指定位时间后开始消息接收操作。 一旦出现该条件,即启动消息接收。 ① 字符 ② 重启线路空闲定时器 ③ 检测到线路空闲并启动消息接收操作 |
参数 | 定义 |
特殊条件: | 指定通过特殊字符指示消息开始。 然后,该字符便成为消息中的第一个字符。 |
通过单个字符识别消息 | 在该特定字符前接收到的任何字符都将被丢弃。 默认字符是 STX。 |
开始 | |
特殊条件: | 指定通过最多四个组态序列中的一个特殊字符序列来指示消息开始。 |
通过字符序列识别消息 | 可以为每个序列最多指定 5 个字符。 |
开始 (Recognize | 对于每个字符位置,可以指定一个特定的十六进制字符,或者指定在序列匹配时 |
message start with a | 忽略该字符(通配符字符)。 |
character sequence) | 字符序列中最后一个特定字符终止该开始条件序列。 |
程序根据组态的开始条件对进入序列进行评估,直到满足开始条件为止。 | |
只要满足了开始序列,就会开始评估结束条件。 | |
最多可组态四个特定字符序列。 | |
如果几个不同的字符序列都指示消息开始,则使用多序列开始条件。 | |
如果与其中一个字符序列相匹配,消息就会开始。 |
检查开始条件的顺序是:
- 线路空闲
- 线路中断
- 字符或字符序列 检查多个开始条件时,如果有一个条件没有满足,则CM或 CB将从第一个所需的条件开始重新启动检查。 CM 或 CB确定已满足启动条件后,将开始评估结束条件。
示例组态: 消息在两个字符序列出现一个时开始
请注意以下消息开始条件组态:
对于该组态,只要出现其中一个序列,即会满足开始条件:
- 接到一个由五个字符构成的序列,且其第一个字符是0x6A而第五个字符是 0x1C 时。 对于该组态,位置 2、3 和 4 的字符可以是任意字符。 在接到第五个字符后,将开始评估结束条件。
- 接到两个连续的0x6A字符(前面为任意字符)时。 在这种情况下,会在接到第二个 0x6A 后开始评估结束条件(3 个字符)。 第一个 0x6A 前面的字符包含在开始条件中。满足该开始条件的实例序列有:
- <任意字符> 6A6A
- 6A 12 14 181C
- 6A 44 A5 D21C
消息结束条件
用户还可以组态通信接口识别消息结束的方式。 可以组态多个消息结束条件。 如果出现组态条件中的任何一个,消息就会结束。
例如,可以采用消息超时 300 ms、字符间超时 40 个位的时间以及最大长度 50个字节作为消息结束的结束条件。 如果接收消息的时间超过 300ms、任意两个字符间的间隔超过 40 个位的时间或接收到 50 个字节,消息即会结束。
示例组态: 通过字符序列结束消息
请注意以下消息结束条件组态:
在这种情况下,当接收到两个连续的 0x6A 字符(后跟任意两个字符)时,即满足结束条件。 0x6A 0x6A 序列前面的字符不是结束字符序列的组成部分。 终止结束字符序列时需要在 0x6A 0x6A 序列后面加两个字符。 字符位置 4 和 5 中接收的值不相关,但必须接收它们才能满足结束条件。
说明 如果想用字符序列来指示消息的结束,应将该序列放置在最后一个字符位置。在上面的示例中,如果想用 0x6A 0x6A 结束不带任何尾随字符的消息,应在字符位置4和5中组态 0x6A。
在消息中指定消息长度
选择在消息中包括消息长度这一特殊条件时,必须提供三个用于定义消息长度相关信息的 参数。
实际消息结构会因所用的协议而变化。 三个参数如下所示:
- n:消息中出现长度说明符的字符位置(从1 开始)
- 长度大小:长度说明符的字节数(1、2或 4)
- 长度m:跟在长度说明符后、不包括在长度计数范围内的字符数
结束字符可不连续。 “长度 m”值可用于指定大小不包含在长度字段中的校验和字段的长度。