ListGenerator FC 具有三个版本,其符号名称如下:
对于 S7-300
ListGenerator300
对于 S7-400
ListGenerator400
对于 S7-1500
ListGenerator1500
功能
如果数据所包含的目标地址不完整,或者根本不包含目标地址,则在接收这样的数据的 CPU 中,需要 FC ListGenerator。较重要的原因是缺少目标对象编号,因为该编号会指向存储接收到的信息的背景数据块。
如果未在站内设置参数或设置的参数不完整,目标地址可能会缺失或不完整。对于发送二进制信息、模拟值或计数值的典型值,允许这种情况存在。如果这些典型值将数据发送到多个目标,则不会为这些值设置目标地址。由于缺少目标信息,发送帧将自动传输到组态过程中建立了连接的所有目标。因此,该数据会在各个目标接收,而*接收目标地址。
提示 目标用户编号的补充信息没有目标地址的待发送数据帧具有由发送 TIM 添加的目标用户编号,如果有多个目标,则会有多个编号。 由于 TIM 不了解相关信息,因此在目标对象编号的地址字段中输入 0。TIM 仅知道组态了连接的目标用户。 因此在接收端,数据帧包含目标用户编号,但目标对象编号为 0。 |
如果接收到的数据帧中不包含目标对象编号,则负责分配接收帧的 FC Distribute 会引用对象引用列表。
FC Distribute 使用每个数据帧中包含的源地址(源用户编号 + 源对象编号),在列表中搜索说明缺少给定源地址的目标对象编号的条目;换言之,其搜索本地背景数据块的编号。
此对象引用列表由 FC ListGenerator 创建。该 FC 无参数,其链接到循环用户程序 (OB1) 中 FC BasicTask 之后。
创建列表时,FC ListGenerator 会将在参数中设置的地址用于接收典型值。这些典型值必须满足“PartnerNo”和“PartnerObjectNo”的规范。这些参数则与对应接收帧中的源地址相同。由于典型值也知道其背景数据块的编号,因此知道参考列表中条目所需的所有地址。
在启动过程中,FC ListGenerator 的安排是,所有接收典型值均输入其参数分配中的地址以及引用列表中背景数据块的编号。因此,对象引用列表不需要特殊的参数设置,只是通过接收典型值的现有参数创建,因此始终一致。
工作原理
启动后,FC ListGenerator 在三个连续的 OB1 循环内创建列表:
在**个循环中,其确定在**个对象引用列表(适用情况下还有*二个对象引用列表)中需要多少个条目。在这一循环运行期间,相关典型值仅增加一个计数值。
在*二个循环中,FC ListGenerator 会为**个对象引用列表(适用情况下还有*二个对象引用列表)生成所需长度的数据块,并在所有数据字中输入 0。在这一循环内,所有相关典型值均会输入其地址以及列表中对应背景数据块的编号。
在*三个(即最后一个)循环中,FC ListGenerator 按升序排列所有条目。排序后,实际操作时会加快列表搜索速度。
生成数据块时,FC ListGenerator 执行以下操作:
如果未创建列表,则搜索可用的数据块编号。采用从 DB BasicData 编号开始的下一个值较低的可用数据块编号。
如果列表已存在,则 FC ListGenerator 将检查现有数据块长度是否足以满足当前所需的引用数量。如果长度足够,则输入 0,并将再次写入地址并进行排序。
如果现有数据块长度不足,则对不同的 SIMATIC 产品系列采用不同的步骤:
对于 S7-300
会生成新的 DB。由于 S7-300 没有删除数据块的功能,因此原有数据块仍然保留在内存中。
对于 300 CPU,必须使用编程设备删除原有 DB。
注意:
如果不生成新 DB,将需要使用编程设备删除此 DB。如果 CPU 上没有足够的内存用来生成新数据块,则需要先删除现有数据块,然后再重新启动。
对于 S7-400
将删除现有 DB、压缩内存、并生成编号相同但长度不同的 DB。
对于 400 CPU,可手动压缩内存或重新加载 CPU。
对于 S7-1500
将删除现有 DB,并生成编号相同但长度不同的 DB
对于 1500 CPU,将像 CPU 300 一样自动压缩内存。
如果 ListGenerator FC 不能再生成 DB,则会将一则错误消息写入 CPU 的诊断缓冲区:
0xB107 “生成对象引用列表时出错”(Error generating the object reference list)
- DB[Info1]
无法创建 DB[Info1]。
- 原因:[Info2]。
在 Info2 中,会输出 SFC Create_DB 函数的返回值,请参阅相应说明。
shtxjd.cn.b2b168.com/m/