工作原理
在 S7-1200 的固件版本为 4.1 或更高版本时,组态控制可用于组态控制系统的结构并且有助于使用与该组态不同的变型(选项)。
一系列相似设备单元或机器所需的所有模块都在具有最大组态的主项目(全站组态方式)中进行组态。
在主项目的用户程序中,包含有适用于不同设备单元或机器的各种站组态方式,以及站组态方式的选件。例如,某种站组态方式仅使用一部分已组态的模块,而且这些模块以不同的顺序插入。
操作员可根据现场特定的设备选择某种站组态方式。他们无需修改项目,因此也无需下载修改后的组态。
在启动程序中编程的控制数据记录会通知 CPU 哪些模块缺失以及哪些模块所在的插槽不同于预设组态。组态控制对模块的参数分配没有影响。
组态控制为用户提供了灵活性,只要实际组态不超过预设的最高组态,就可以改变集中式安装。
下文将介绍如何激活组态控制(CPU 参数分配)以及如何构造所需的数据记录。
要求
STEP 7 版本 V13 SP1 或更高版本
CPU S7-12XX 固件版本 V4.1 或更高版本:支持“组态控制”功能的模块还在硬件目录的说明(信息文本)中提供“组态控制”(Configuration control) 条目。
建议:在装载带有修改后的控制数据记录的新程序前,请执行存储器复位。此操作可以防止因存在不兼容的控制数据记录而造成状态不一致。
启动参数“比较预设组态与实际组态”设置为“即使不一致也启动 CPU”(默认设置)。
所需步骤
在“组态控制”(Configuration control) 区域组态 CPU 时启用“允许通过用户程序重新组态设备”(Allow to reconfigure the device via the user program) 参数。
根据以下描述的控制数据记录示例,按照当前组态创建控制数据记录(例如在数据块中)。控制数据记录的编号为 196。如果要将控制数据记录以整块的方式传送到 WRREC 指令(输入参数 RECORD)中,则需注意,需要先创建一个包含控制数据记录结构的 PLC 数据类型,并将该数据块定义为此 PLC 数据类型。
在启动程序中将控制数据记录传输到 CPU。
对于集中插入的模块,仅当 CPU 的操作模式从 STOP 更改为 RUN 后,组态控制才会生效。因此,请在启动 OB 中调用扩展的 WRREC(写入数据记录)指令,将创建的控制数据记录传输到 CPU;请参见下一章节。
如果在启动 OB 中未传输有效的控制数据记录,则控制未做好运行准备。在这种情况下,CPU 从启动状态恢复到 STOP 状态。
在启动程序中传输控制数据记录
CPU 处理 WRREC 指令以便异步传输控制数据记录。因此,必须在一个循环内,在启动 OB 中重复地调用 WRREC,直到输出参数“BUSY”或“DONE”指出数据记录已传输。
提示信息:请使用 SCL 编程语言和 REPEAT ... UNTIL 指令编程此循环。
REPEAT
"WRREC_DB"(REQ := "start_config_control",
ID := 33,
INDEX := 196,
LEN := "conf_LEN",
DONE => "conf_DONE",
BUSY => "conf_BUSY",
ERROR => "conf_ERROR",
RECORD := "ConfDB".ConfigControl,
STATUS => "conf_STATUS");
UNTIL NOT "conf_BUSY"
END_REPEAT;
下表中列出了组态控制中需指定特定值的块参数。有关其它块参数,另请参见“WRREC”:
参数 | 说明 |
---|---|
ID | 硬件标识符,对于集中排列模块的组态控制,始终为 33(十进制)。 |
INDEX | 数据记录编号,对于集中排列模块的组态控制,始终为 196(十进制)。 |
RECORD | 要传输的控制数据记录。 参见“控制数据记录”部分的控制数据记录结构。 提示信息:WRREC 指令(V1.1 以及更高版本)块参数“RECORD”的数据类型为“VARIANT”,因此需要带数据类型的变量。如果将控制数据记录存储在数据块中,那么此数据块必须具有数据类型。所创建的数据块不得是“全局 DB”类型,更确切地说,它必须属于用户数据类型。 请按以下步骤操作: 首先创建一个具有控制数据记录结构的新 PLC 数据类型(用户数据类型),并为其命名,例如命名为“ConfDB”。 创建一个新数据块。选择新创建的用户数据类型(如“ConfDB”),作为该数据块的类型。 |
在图形编程语言中,使用程序控制指令实现循环。
FBD 中的示例:使用 LABEL(跳转标签)和 JMP(RLO=1 时跳转)指令编写循环。
模块的排列
下表列出了插槽号的分配:
插槽 | 模块 | 说明 |
---|---|---|
1 | 信号板、通信板、电池板 | CPU 前端的插槽 |
2 - 9 | 信号模块 | CPU 右侧的插槽 |
101 - 103 | 通信模块 | CPU 左侧的插槽 |
控制数据记录
将包含插槽分配的控制数据记录 196 定义为用于组态控制。
下列代码适用:
0 | 模块包括在硬件配置中,但在当前组态中未使用。 |
1 到 9,101 到 103 | 模块的当前插槽 |
16#FF (255) | 在硬件配置中,模块并不位于此插槽中。 |
字节 | 元素 | 代码 | 说明 |
---|---|---|---|
0 | 块长度 | 4 + 插槽数 | 标头 |
1 | 块 ID | 196 | |
2 | 版本 | 5 (用于集中式 I/O) | |
3 | 子版本 | 0 | |
4 | CPU 扩展板的分配 | 扩展板,0 或 16#FF | 控制元素 每个元素分别为设备中与已组态插槽对应的实际插槽。下面说明了控制元素的结构。 |
5 | 分配的已组态插槽 2 | 实际插槽,0 或 16#FF | |
... | ... | ... | |
12 | 组态的插槽 9 的分配 | 实际插槽,0 或 16#FF | |
13 | 组态的插槽 101 的分配 | 实际插槽或 16#FF | 相比于信号模块,通信模块的实际插槽必须对应已组态的插槽。 |
14 | 组态的插槽 102 的分配 | 实际插槽或 16#FF | |
15 | 组态的插槽 103 的分配 | 实际插槽或 16#FF |
控制元素的结构
控制元素包含有关哪个模块插入哪个插槽的信息。
字节编号代表按升序排列的已组态插槽(参见上文):
字节 4 代表扩展板的已组态的插槽
字节 5 到 9 代表已组态的插槽 2 到 9
字节 13 到 15 代表已组态的插槽 101 到 103
在相应字节中输入指定值,具体取决于以下规则:
如果模块在实际组态中存在,则输入模块的实际插槽编号。
示例 1:组态为插入插槽 2 的模块位于插槽 2。
在字节 5(= 组态的插槽 2)中输入值 2(= 实际插槽)。
示例 2:组态为插入插槽 3 的模块位于插槽 2。
在字节 6(= 组态的插槽 3)中输入值 2(= 实际插槽)。
如果模块已组态,但在实际结构中缺少此模块,则在所组态插槽对应的字节中输入 0。
如果模块在硬件配置中并未位于此插槽,则在所组态插槽对应的字节中输入 16#FF (255)。
规则
请遵守以下规则:
组态控制不支持通信模块位置的调整。控制数据记录中插槽 101 到 103 对应的插槽条目必须与模块的实际位置相符或者必须在硬件配置中通过输入 16#FF (255) 定义为不存在。
组态中不允许存在插槽间隙。例如,如果在实际组态中将信号模块插入插槽 4,则实际组态中插槽 2 和 3 必须也被占用。这同样适用于插槽 101 到 103。如果在实际组态中将通信模块插入插槽 102,则在实际组态中插槽 101 内也必须插入一个通信模块。
如果启用了组态控制,没有控制数据记录 CPU 将不工作。如果在启动 OB 中未传送有效的控制数据记录,则 CPU 将从启动模式返回到 STOP 模式。此时,不会对集中式 I/O 进行初始化。CPU 转入 STOP 操作模式的原因将保存在诊断缓冲区中。
要对 WRREC 指令寻址,请使用硬件标识符 33(十进制,适用于 ID 块参数)写入控制数据记录。
控制数据记录始终保存在 CPU 中,因此在重新启动时如果组态没有发生变更则无需重新写入控制数据记录 196。在调试前,建议对 CPU 执行存储器复位,以删除存在的任何控制数据记录。
CPU 将忽略不在预设组态中的控制数据记录中的插槽条目。
在控制数据记录中,每个实际插槽只能记录一次。
只能将实际插槽分配给一个已组态的插槽。
说明 修改过的组态 使用修改后的组态对控制数据记录执行写入操作时将导致 CPU 触发以下自动反应: 存储器在后续启动时使用这个修改后的组态进行复位。 因此始终保存的原始数据记录 196 将被删除,并始终保存新的数据记录 196。 |
操作期间的行为
预设组态和实际组态之间差异的影响:
对于在线显示以及诊断缓冲区中的显示(模块正常或模块发生故障),始终使用硬件配置而并非不同的实际组态。
示例:模块提供诊断信息。此模块组态为插入插槽 4,但实际却插入到插槽 3 中(模块缺失,参见下一章节中的示例)。在线视图中,指示组态的插槽 4 发生故障。在实际组态中,插槽 3 中的模块通过 LED 显示屏指出出现错误。
如果模块在控制数据记录中记录为缺失,那么自动化系统将会执行以下操作:
在控制数据记录中指定为不存在的模块不提供诊断,其状态始终为“正常”(OK)。值状态为“正常”(OK)
对输出进行直接写访问,或者对不存在的输出过程映像进行写访问:仍然无效;不显示任何访问错误。
对输入进行直接读访问,或者对不存在的输入过程映像进行读访问:提供值“0”;不显示任何访问错误。
将数据记录写入不存在的模块:仍然无效;不显示任何错误。
从不存在的模块读取数据记录:显示错误,因为无法返回有效的数据记录。
错误消息
如果在写入控制数据记录的过程中发生错误,则将返回以下错误消息:
错误消息
错误代码 | 含义 |
---|---|
16#80B1 | 长度无效;数据记录 196 中的长度信息不正确。 |
16#80B5 | 未分配组态控制参数。 |
16#80E2 | 数据记录在错误的 OB 中传送。该数据记录需在启动程序中传送。 |
16#80B8 | 参数错误;模块指示存在无效参数。 |
S7-1200组态控制示例:
由一个 CPU 和 3 个信号模块组成的组态按下文所述进行组态。
插槽 3 中的模块在第一个组态扩展中不存在,被组态控制“隐藏”。
在第二个组态扩展中,最初隐藏的模块位于最后一个插槽中。CPU 通过一条修改后的控制数据记录获知增加插槽的信息。
缺少模块的实际组态
指定的组态包含所有可以在最后扩展阶段显示的模块。
在指定组态中插入到插槽 3 的模块在实际扩展组态中缺失。因此,插槽 3 必须在控制数据记录中相应地进行编码:"FF H" (= 不存在)。
① | 模块在实际组态中缺失 |
后继所添加模块的实际组态
在指定组态中插入到插槽 3 的模块作为最后一个模块插入到插槽 4,添加到实际组态之后。
控制数据记录会相应地进行调整。