描述
在处理字符串变量时,PTP (点-到-点) 通信块忽略了最大字符长度和实际字符长度的定义属性(图.01)。
当写数据到字符串变量时,RCV_PTP 块将覆盖字符串头信息 (图.02)。
当从字符串变量读取数据时,SEND_PTP 块将读取字符串报头信息作为实际的字符串数据的一部分并发送出去(图.03)。n
字符串变量结构
STEP 7 Basic 中的字符串变量包含三部分:n
- 字符串的最大长度n
- 字符串的实际长度n
- 实际字符串数据
图. 01n
对于 PTP 通信来说,字符串变量应只包含实际的字符串数据。n
RCV_PTP 块特性
RCV_PTP 块将接收到的实际字符数据写到 S7-1200 PLC 准备好的字符串变量中,前两个字节没有必要的长度信息。因此,由于字符串变量头信息不存在,数据的处理不能继续。n
图. 02n
SEND_PTP 块特性
SEND_PTP 块读取请求的字符串数据包含字符串数据的报头信息,并且发送头两个字节作为数据字符串。n
图. 03n
前提条件
- 创建字符串的数据块 (DB),需要使用非符号寻址。n
- 需要绝对寻址的缓存区
在非符号寻址的数据块中创建字符串变量
浏览 PLC "Project tree" 并双击 "Add new block" 项。在 "Add new block" 对话窗口,点击 "Data Block (DB)" ,并且不勾选"symbolic access only" 。为了与例子中的绝对地址相对应,手动设置数据块号为"2",点击"OK"按钮。 n
图. 04n
浏览"Project tree" 并双击数据块状 "Data_block_2 (DB2)"。在表的 "Static" 栏中,输入一个数据类型为 "String[8]" 的变量 。n
图. 05n
对于使用 RCV_PTP 块字符串不匹配的补偿
为了补偿,字符串的长度信息必须分开处理。
在这个例子中,使用8 个字符长度的字符串变量。
No. | 使用 RCV_PTP 块字符串不匹配的补偿 |
1. |
将实际字符数据写入字符串变量 为了保留字符串的报头数据,接收到的实际字符串数据需要从第三个字节开始写入字符串变量。缓存区的绝对寻址使之成为可能。 地址表达包括以下各项:
|
2. | 拷贝最大和实际字符长度到字符串头
注意 |
表01
对于使用 SEND_PTP 块字符串不匹配的补偿电
为了补偿,字符串的长度信息必须分开处理。
在这个例子中,使用8 个字符长度的字符串变量。
No. | 补偿使用 SEND_PTP 块的字符串错位 |
1. | 替换 SEND_PTP 块的实际字符串长度
注意 |
2. | 从字符串变量中读取实际的字符数据 地址表达与表. 01中的图. 6 相似。
|
表 02
需求
- S7-1200 PLC
- 以太网电缆
- 带以太网接口的 PC / PG
- STEP 7 Basic V10.5
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc333378.html