SEND_P2P(传输发送缓冲区数据)指令

2019年1月7日15:42:51 发表评论 1,833 阅读

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

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

表格 13- 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。当长度为 0

时,指令传送整个帧。

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_P2P 执行将返回 16#7002。传送操作完成后,CM 或 CB 将返回传送操作状态 16#0000(如果未出错)。后续执行 REQ 为低电平的 Send_P2P 时,将返回状态 16#7000(不忙)。

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

下图显示通过 REQ 线路脉冲(持续一个扫描周期)启动传送操作时,DONE 和 STATUS参数是如何仅在一个扫描周期内有效。

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

只有 Send_P2P 再次使用相同的背景数据块执行之前,DONE、ERROR 和 STATUS值才有效。

表格 13- 21 条件代码

STATUS (W#16#....) 描述
81D0 传送方激活期间发出新请求
81D1 由于在等待时间内没有 CTS 信号,传送中止
81D2 由于没有来自 DCE 设备的 DSR,传送中止
81D3 由于队列溢出(传送 1024 个字节以上),传送中止
81D5 反向偏置信号(断线检测)
81D6 传输请求被拒绝,因为在传输缓冲区中未找到结束分隔符。
81D7 内部错误/FB 和 CM 同步错误
81D8 因为端口未组态,传输尝试被拒绝
81DF 因下列原因之一,CM 已复位 FB 的接口

· 模块已重启(循环上电)

· CPU 已达到断点并且设置 ODIS(输出禁用)

· 模块已进行参数设置 在每种情况下,模块都会在状态参数中表示此代码。在收到 SEND_P2P

的第一条记录后,模块会将 Status 和 Error 重置为零。

8281 写入模块时得到否定确认
STATUS (W#16#....) 描述
8282 DP 从站或模块不可用
8301 ANY 指针中存在非法语法 ID
8322 读参数时出现范围长度错误
8324 读参数时发生范围错误
8328 读取参数时发生对齐错误
8332 参数包含大于最大允许编号的 DB 编号(DB 编号错误)。
833A BUFFER 参数的 DB 不存在。

说明

设置 Profibus 通信的最大记录长度

在使用 CM1243-5 Profibus 主站模块控制使用 RS232、RS422 或 RS485 点对点模块的 ET 200SP 或 ET 200MP Profibus 设备时,需要按如下规定将“max_record_len”数据块变量明确设置为 240:

运行 Port_Config、Send_Config 或 Receive_Config 等组态指令后,在背景数据块中(例如,"Send_P2P_DB".max_record_len)将“max_rec ord_len”设为 240。

只有 Profibus 通信需要明确分配 max_record_len ;Profinet 通信已经使用有效的max_record_len 值。

LENGTH  BUFFER 参数的交互作用

SEND_P2P 指令可以传送的最小数据单位是一个字节。 BUFFER

参数决定要传送的数据的大小。 BUFFER 参数不接受 Bool 数据类型或 Bool 数组。

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

表格 13- 22 LENGTH 和 BUFFER 参数

LENGTH BUFFER 说明
= 0 未使用 发送 BUFFER 参数中定义的全部数据。 当 LENGTH = 0

时,用户无须指定传送字节数。

> 0 基本数据类型 LENGTH 值必须包含此数据类型的字节计数。 例如,对于 Word 值,LENGTH 值必须为二。 对于 Dword 或 Real,LENGTH 值必须为四。 否则,不会传送任何数据并返回错误 8088H。
结构 LENGTH

值可以包含小于结构完整字节长度的字节数,在这种情况下,将 仅发送 BUFFER, 中的结构的前 n 个字节,其中 n = LENGTH。 由于结构的内部字节组织不总是确定不变的,所以可能得到无法 预料的结果。 在这种情况下,使用值为 0 的 LENGTH 来发送整个结构。

数组 LENGTH

值必须包含小于或等于数组完整字节长度的字节数,而且还必须 为数据元素字节计数的倍数。 例如,对于 Word 数组,LENGTH 参数值必须为二的倍数;对于 Real 数组,必须为四的倍数。 若指定了 LENGTH,则该指令传输与 LENGTH 值(字节)对应的数组元素数目。 例如,如果 BUFFER 包含由 15 个 Dword 构成的数组(总共 60 个字节),LENGTH 指定为

20,则将传送数组中的前五个 Dword。

LENGTH 值必须为数据元素字节数的倍数。 否则,STATUS = 8088H,ERROR = 1,且不进行任何传送。

String 参数 LENGTH 包含要传送的字符数。 只传送 String 中相应数量的字符。 而不会传送 String 的最大长度和实际长度的字节数。

 

weinxin
plc入门知识问答
所有PLC工程师都会关注的微信公众账号,只需输入您的问题,就会有答案

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: