数据典型程序块 Dat256D_R

2021-08-02 浏览次数:152
数据典型程序块 Dat256D_R

功能

接收较多 256 个含任何数据内容的双字。

每个双字的内容可以是双字格式的值(DINT、REAL 等),也可以是共同组成双字的其它格式的混合,例如:

32 Bool

4 个字节

2 个字

任意组合,如 2 字节加 1 个字等。


提示

请记住双字边界

当传送更改的数据,且数据区域包含双字格式的值时,请确保双字值实际上是要采集的数据区域中的较多 256 个双字值之一。

由于仅在特定字中发生了更改,因此如果分布于两个连续的数据双字上,则可能仅传送双字值中的一个字(高位或低位字)。在这种情况下,字缺失可能导致接收伙伴发生数据错误(适用于 ST7cc,不适用于 S7 CPU)。



Dat256D_R 将接收的数据存储在“DataOutput”所定义的数据区域中,而不进一步处理。利用用户程序评估接收的数据。

对于具有 X 通信功能的 S7-300 CPU,数据帧的较大长度为 76 字节(至少 48 字节)。使用由至少 22 个数据帧(段)的序列组成的串行传送过程传送 1024 字节的用户数据。除了最后一个数据帧外,其余的每个数据帧均包含一个段,该段由输出数据区域中 48 个字节的用户数据组成。

每次接收检测到的数据段时,都会通过“NewData”输出参数的相应状态(位 1 到 22)指示。

如果在数据段中检测到更改,则在一个 CPU 循环内,“NewData”中状态位 0 也将设置为 TRUE。这样便可以识别出输出数据区域中发生更改的段。


提示

当接收到一个包含多个数据段(数据帧)的序列时,“NewData”参数中的状态位 1 到 22 将逐个设置为 TRUE,并且在收到最后一个段之前,始终设置为 TRUE。

如果数据段(数据帧)不包含在接收到的序列中 (SendAll = FALSE),则只在一个 CPU 循环内,状态保持设置为 TRUE。



为了确保在“SendAll” = TRUE 时或者在常规请求或单个请求期间数据的一致性,数据区域将逐个段连续进行更新。

在接收过程中,由“DataStatus”输出字节指示状态(“SequenceState”状态)。如果接收序列成功完成,则数据输出区将是较新的输出区,且输出数据一致。这由“DataStatus”(“DataValid” = TRUE 状态)指示。


提示

如果发送方的“SendAll”参数设置为 FALSE,则无法保证数据段或限制段的一致性。



以下原因可能会使序列的接收中断:

活动序列期间与伙伴通信失败,则中断接收序列(事件 ID B13BTD7_Diagnostics)。

**出监视时间。在为“MonitoringTime”参数所设置的时间内,并不能接收到所有段(事件 ID B13CTD7_Diagnostics)。

发生其它接收错误(事件 ID B13DTD7_Diagnostics),例如:

- 在激活且无错的序列期间注册新的接收序列。

- 在激活的序列期间接收到一个自发段(数据帧)。


提示

Dat256D_S 和 Dat256D_R 需要使用 UDT“TransmitBlock”。

使用典型值时,将 UDT 从全局库复制到 CPU 的“PLC 数据类型”(PLC data types) 目录中。典型值会从 CPU 块目录而非全局库中,自动引用 UDT。




提示

使用标准访问的 DB

该块具有“ANY”类型的参数。因此,禁用 DB 属性中的“优化块访问”(Optimized block access) 属性。



参数

参数:

PartnerNo

PartnerObjectNo

Enabled

有关说明,请参见重现参数部分。

参数:

SingleRequest

声明:

INPUT

数据类型:

BOOL

取值范围:

TRUE / FALSE

默认值:

TRUE

地址范围:

输入

I 0.0 … I n.7

存储器位

M 0.0 ... M n.7
L 0.0 ... L n.7

数据位

DBm.DBX 0.0 ... n.7

说明:

单个请求发送到伙伴对象。

如果伙伴可用,可向伙伴对象发送单个请求。如果返回一条回复,则将此信息转发到“DataOutput”中所*的数据区域。

传送序列有**级:

较低**级:TriggerInput

例如,单个请求或常规请求可以中断通过发送方上的“TriggerInput”所触发的已激活的传送。

中等**级:单个请求

例如,单个请求或常规请求可以中断通过发送方上的“TriggerInput”所触发的已激活的传送。

已中断或者已重启的请求会使激活序列重新启动,并且不会出现错误消息。

较高**级:常规请求

常规请求可以中断自身或单个请求。

已中断或者已重启的请求会使激活序列重新启动,并且不会出现错误消息。

由单个请求或常规请求所中断的请求会使激活序列重新启动,并且不会出现错误消息。如果序列成功完成,“DataStatus”输出字节的“DataValid”状态保持设置为 TRUE。

响应单个请求所花费的时间由“MonitoringTime”参数来评估。

请注意:
只有当接收序列完全成功时,才能保证跨段数据输出区域的一致性。

参数:

MonitoringTime

声明:

INPUT

数据类型:

INT

取值范围:

0 (无限制) / 1 … 32000 (秒)

默认值:

0

说明:

完整响应单个请求的较长时间

每次单个请求启动时(参见 SingleRequest 参数)时,此处*的时间将在“SingleRequest”中开始。

如果输入的值** 0,且**出响应序列的时间,将通过“DataStatus”输出字节(状态位“SequenceState”)指示错误。除此之外,还向诊断缓冲区写入条目(事件 ID B13CTD7_Diagnostics)。

每次单个请求启动时,“MonitoringTime”都会重新激活。

参数:

DataOutput

声明:

INTPUT

数据类型:

ANY

取值范围:

请参见地址范围

默认值:

P#P 0.0 VOID 0
(空指针)

地址范围:

P#DBxx.DBX yy.0 DWORD zz

xx:数据块编号 1...32767

yy:字节编号

zz:双字的编号 1...256(从字节编号 yy 开始)。

示例:
P#DB20.DBX 100.0 DWORD 200

输入指针时,不要忘记点号和空格!

请注意,不允许使用默认值(空指针)。必须*具有真实地址的指针。

说明:

数据输出区域

ANY 指针对保存接收数据的数据区域进行寻址。此数据区域必须在数据块中,并且其长度可以在 1 到 256 个数据双字范围内变化。有关可能的双字格式的信息,请参见上文中的“功能”部分。

Dat256D_R 将接收的数据存储在“DataOutput”所*的数据区域中,而不进一步处理。需要通过用户程序评估并处理接收到的数据。

如果伙伴对象 Dat256D_S 只发送更改的数据,可能只有部分数据输出区有新写入的内容。这部分输出区是指采集结束时检测到更改的区域。

如果参数分配不正确(空指针、长度 > 12、数据区域不是 DB),则会在诊断缓冲区中输入错误消息(事件 ID B114,[Info2/3] = 11)。CPU 不切换为 STOP 模式。然后,在更正错误之前,不再对该数据块进行处理。

参数:

NewData

声明:

OUTPUT

数据类型:

DWORD

取值范围:

请参见地址范围

默认值:

0 (DW#16#0)

地址范围:

输出 (DWORD)

QD0 … QDn
PQD0 … PQDn

位存储器 (DWORD)

MD0 … MDn
LD0 … LDn

数据 (DWORD)

DBm.DBB0 … n

说明:

接收新数据

每当块接收到新的数据段时,状态位 1 至 22 的显示会根据接收的数据段 1 至 22 出现在“NewData”中。

如果接收到的数据中至少一个数据段包含更改,则在一个 OB1 循环内,“NewData”的位 0 设置为 TRUE。

当接收到一个包含多个数据段(数据帧)的序列时,“NewData”参数中的状态位 1 到 22 将逐个设置为 TRUE,并且在收到最后一个段之前,始终设置为 TRUE。

如果数据段(数据帧)不包含在接收到的序列中 ("SendAll" = FALSE),则只在一个 CPU 循环内,状态设置保持为 TRUE。

输出用于特定于用户的进一步处理,例如以特定方式对接收新数据做出响应。

如果不需要此参数,保留不处理即可。

参数:

DataStatus

声明:

OUTPUT

数据类型:

BYTE

取值范围:

请参见地址范围

默认值:

0 (B#16#0)

地址范围:

输出

QB0 … QBn
PQB0 … PQBn

存储器位

MB0 … MBn
LB0 … LBn

数据

DBm.DBB0 … n

说明:

所接收数据段的当前状态

在接收序列的过程中,由“DataStatus”输出字节指示当前状态:

如果接收序列成功完成,则“DataOutput”数据输出区是较新区域。状态位“DataValid”设置为 TRUE。

如果发送方的“SendAll”设置为 TRUE,则数据一致。

如果序列接收中断,则“DataOutput”数据输出区不是较新区域,“DataStatus”指示一个错误。

- 状态位“DataValid”设置为 FALSE 并向诊断缓冲区写入条目。

- “SequenceState”状态显示错误(参加下表)。

列表: “DataStatus”的位分配

名称

含义

0

DataValid

FALSE

数据无效

TRUE

数据有效

1 ... 5

预留

‑ (FALSE)

未使用

7, 6

SequenceState

0

没有要接收的数据,或者接收完成且未出现错误

1

所接收序列的**个段

2

所接收序列的*二个段或更高级别的段

3

错误:

传送序列中止

**出监视时间

其它错误接收


shtxjd.cn.b2b168.com/m/
联系我们

在线客服: 2232999615

联系人:田礼科

联系电话: 02137660026