数据典型程序块 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 | |
数据位 | 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 开始)。 示例: 输入指针时,不要忘记点号和空格! 请注意,不允许使用默认值(空指针)。必须*具有真实地址的指针。 |
说明: | 数据输出区域 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 |
位存储器 (DWORD) | MD0 … MDn | |
数据 (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 |
存储器位 | MB0 … MBn | |
数据 | 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/