数据典型程序块 Dat256D_S

时间:2021-08-02点击次数:118

数据典型程序块 Dat256D_S

功能

发送较多 256 个含任意数据内容的双字

每个双字的内容均可以是双字格式的值(DINT、REAL 等)。允许其它格式组合在一起再次形成双字,例如

32 Bool

4 个字节

2 个字

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


提示

请记住双字边界

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

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



可以通过两种方式触发数据区域发送:

通过更改检查

位更改后会立即传送数据(“SendOnChange”= TRUE)。

通过用户程序

“TriggerInput”输入的沿变化为 0 → 1 时,可以触发传送。

对于时间驱动的传送,可以使用 FC 触发器触发。

无论传送始终包含所有数据还是仅包含已更改的数据双字,也均可使用“SendAll”*。

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

为保证“SendAll”参数激活时或常规请求或单个请求期间的数据一致性,数据将以连续的段传送。在传送过程中,状态由“SendAllBusy”指示。接收时,在“DataStatus”输出中指示状态。


提示

TriggerInput ‑ SendAllBusy

如果在“SendAllBusy” = TRUE 时触发“TriggerInput”,则当再次触发传送时,会导致出现“DataLoss”错误消息(帧标头中的状态)。

只有设置“SendAllBusy” = FALSE 时,才会在“TriggerInput”触发沿变化 0 → 1。



如果传送中断,则指示“SendAllError”。还会在诊断缓冲区中输入事件 ID 为 B14DTD7_Diagnostics 的条目。

如果传送不完整,接收方的数据状态也是“无效”,这会在接收方的 DataStatus 参数中指示。除此之外,还向诊断缓冲区中写入了事件 ID 为 B13BTD7_Diagnostics 的条目。


提示

伙伴的可用性

如果伙伴的状态从“可用”变为“不可用”,则立即停止所有数据的传送。所有对象数据都将从 TIM 缓冲区中删除。这会导致数据丢失。

一旦伙伴再次可用,自动常规请求将确保伙伴的数据再次成为较新数据,以便下一次传送。




提示

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

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




提示

使用标准访问的 DB

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



参数

参数:

PartnerNo

PartnerObjectNo

Enabled

Unconditional

TimeStamp

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

参数:

SendOnChange

声明:

INPUT

数据类型:

BOOL

取值范围:

TRUE / FALSE

默认值:

FALSE

说明:

发送更改

设置为 TRUE 时,该块在采集的数据区域“DataInput”中运行更改检查。数据块检查是否至少更改了一个位。如果检查到更改,则自动开始数据区域传送。通过“SendAll”参数*传送整个区域还是仅传送更改的区域。

如果设置为 FALSE,则需通过输入参数“TriggerInput”触发传送。

参数:

TriggerInput

声明:

INPUT

数据类型:

BOOL

取值范围:

TRUE / FALSE

默认值:

FALSE

地址范围:

输入

I 0.0 ... I n.7

存储器位

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

数据位

DBm.DBX 0.0 ... n.7

说明:

触发器输入

“TriggerInput”输入的沿变化为 0 → 1 时,可以在所需时间触发数据帧的传送。

示例:
带时间戳的时间驱动模拟值传送,用于在控制中心提供模拟值归档。

FC Trigger 块可用于通过“TriggerInput”以时间驱动方式触发传送。

“TriggerInput”实际上只是间接触发传送。“TriggerInput”沿变化为 0 → 1 时,数据帧将与其当前值放到一起,并传送到本地 TIM 中。TIM 负责实际传送给伙伴。对于专线或无线网络,可以直接进行传送。对于拨号连接,数据帧可以先保存在 TIM 上,并在稍后的时间发送。例如,原因可以是数据帧已标记为“有条件自发”,参见参数“Conditional”。

 

选择合适的触发点,使缓冲区溢出(间隔太长)不覆盖 TIM 上的数据。

如果不需要此参数,保留不处理即可。但是,应将“SendOnChange”参数设置为 TRUE,以便在每次更改时自动传送数据。

对于触发,还可选择“SendOnChange”与“TriggerInput”的组合。这意味着,当检测到更改时,或者“TriggerInput”输入的边沿每次从 0 变为 1 时,都会触发传送。

如果既不使用“SendOnChange”也不使用“TriggerInput”来触发数据传送,则只有对该数据对象有单个请求或在一般请求的框架内时,才会传送数据。

未先对过程数据进行预处理的情况下,不要传送任何“SendOnChange”参数设置为 = TRUE 的模拟值。与此相关的更多详细信息,请参见模拟值典型程序块 Ana04W_S,参数“ThresholdValue”。

参数:

SendAll

声明:

INPUT

数据类型:

BOOL

取值范围:

TRUE / FALSE

默认值:

TRUE

说明:

每次传送时都发送所有数据

使用该参数,可以*该数据块是始终传送“DataInput”所*区域的所有数据,还是仅传送更改的数据。可以通过已激活的更改检查 (SendOnChange = TRUE) 或者通过“TriggerInput”触发传送。

SendAll = TRUE

始终发送所有数据

SendAll = FALSE

仅发送更改的数据

例外情况:
如果设置了“SendAll” = FALSE,则传送由“TriggerInput”触发,如果此时没有数据更改,则传送整个区域。这种例外情况对应于“SendAll” = TRUE 的情况。

如果对该数据对象有单个请求,或在一般请求范围内,将始终传送“DataInput”所*区域的所有数据字。

参数:

DataInput

声明:

INPUT

数据类型:

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 个数据双字范围内变化。有关可能的双字格式的信息,请参见上文中的“功能”部分。

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

数据一致性
如果要传送的数据段较多包含 48 个字节,则可保证传送期间数据的一致性。

参数:

SendAllBusy

声明:

INPUT

数据类型:

BOOL

取值范围:

TRUE / FALSE

默认值:

FALSE

说明:

“SendAll” = TRUE 的待处理数据块

该输出指出数据块当前正在传送由“DataInput”*的数据。该过程由远程单个请求或常规请求激活,或者由本地内部或外部触发器激活。

如果将“SendAll”设置为 TRUE,将由内部更改控制 (SendOnChange = TRUE) 或由外部“TriggerInput”(沿变化 0 → 1)触发所有数据的传送。

只要“SendAllBusy”指示为 TRUE,沿变化 0→1 对外部“TriggerInput”就无任何影响。只有当“SendAllBusy” = FALSE 时,“TriggerInput”的沿变化 0 → 1 才有效。

参数:

SendAllError

声明:

INPUT

数据类型:

BOOL

取值范围:

TRUE / FALSE

默认值:

FALSE

说明:

处理“SendAll”时出错

如果连接在“SendAll”处理期间中断,“SendAllError”设置为 TRUE。除此之外,还向诊断缓冲区写入条目。

“SendAllError”仍设置为 TRUE,直到由用户程序复位或下一次重新启动 CPU 时复位为止。


http://shtxjd.cn.b2b168.com

上一篇:冗余 备用

产品推荐