数据典型程序块 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 | |
数据位 | 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 仅发送更改的数据 例外情况: 如果对该数据对象有单个请求,或在一般请求范围内,将始终传送“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 开始)。 示例: 输入指针时,不要忘记点号和空格! 请注意,不允许使用默认值(空指针)。必须*具有真实地址的指针。 |
说明: | 数据输入区 ANY 指针对要采集的数据所在的数据区域进行寻址。此数据区域必须在数据块中,并且其长度可以在 1 到 256 个数据双字范围内变化。有关可能的双字格式的信息,请参见上文中的“功能”部分。 如果参数分配不正确(空指针、长度 > 256、数据区域不是 DB),则会在诊断缓冲区中输入错误消息(事件 ID B114,[Info2/3] = 11)。CPU 不切换为 STOP 模式。然后,在更正错误之前,不再对该数据块进行处理。 数据一致性 |
参数: | 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 时复位为止。 |
shtxjd.cn.b2b168.com/m/