在基于文本的编辑器和基于网络的编辑器中,POU中的执行顺序是唯一确定的。但是,在CFC编辑器中,您可以自由放置元素,因此执行顺序最初不是唯一的。因此,CODESYS通过数据流确定执行顺序,在多个网络的情况下,通过元素的拓扑位置确定执行顺序。元素从上到下,从左到右排序。现在,执行顺序是唯一的,并确保在按时间和周期进行优化的同时处理POU。
您可以获取有关图表中元素时间顺序的信息,并临时显示执行顺序。使用反馈对网络进行编程时,可以将元素定义为反馈循环的起点。
如果需要,还可以在CFC对象中显式编辑处理顺序。为此,请将CFC对象的Auto Data Flow Mode属性切换为Explicit Execution Order Mode。在此模式下,您可以选择通过菜单命令来编辑执行顺序。
在CODESYS Development SystemV3.5 SP15之前,您必须为每个POU明确定义执行顺序。没有模式切换。
通常,数据流被描述为按时间顺序排列,在该顺序中,何时以及如何以何种编程对象读取或写入数据。一个POU可以处理任何数量的数据流,它们也可以彼此独立地执行。
显示执行顺序
默认情况下,将自动确定CFC对象的执行顺序。为此选择了自动数据流模式属性。您可以在CFC编辑器中临时显示自动确定的执行顺序。
1. | 例如,使用标准工程模板创建一个新项目,并指定名称Minimal。 |
2. | 使用带有输入和输出的ST编程语言的功能块FB_DOIt扩展应用程序。 ⇒ |
FUNCTION_BLOCK FB_DoIt
VAR_INPUT
iAlfa : INT;
iBravo: INT;
sCharlie : STRING := 'Charlie';
xItem : BOOL;
END_VAR
VAR_OUTPUT
iResult : INT;
sResult : STRING;
xResult : BOOL;
END_VAR
VAR
END_VAR
iResult := iAlfa + iBravo;
IF xItem = TRUE THEN
xResult := TRUE;
END_IF
|
|
3. | 用CFC实现语言创建功能块ExecuteCFC。 ⇒ |
PROGRAM ExecuteCFC
VAR
fb_DoIt_0: FB_DoIt;
fb_DoIt_1: FB_DoIt;
iFinal_1: INT;
iFinal_0: INT;
xFinal: BOOL;
END_VAR
| | | | 最近的工程在CFC中创建的编程对象已可以选择“自动数据流模式”。编程对象的执行顺序是在内部最佳定义的。 |
|
4. | 单击。 ⇒ | 显示了对象的执行顺序。块和输入已相应编号,并反映了时间顺序。再次在CFC编辑器中单击时,该编号将被隐藏。 | | |
|
确定反馈网络中的执行顺序
1. | 创建带有反馈的CFC程序。 ⇒ | POUPrgPositiveFeedback用来计数。 | |
PROGRAM PrgPositiveFeedback
VAR
iResult: INT;
END_VAR
| | |
|
2. | 在反馈中选择一个元素。 |
3. | 单击。 ⇒ | | ⇒ | 在runtime中,这个POU被优先执行。定义反馈的开始POU,并用符号修饰。重新执行顺序,所选元素的编号为0。(这是最低数量的反馈。) |
|
4. | 再次选择开始POU。 |
5. | 单击。 ⇒ | 未将POU选择为开始POU。 | | | | 执行顺序在内部定义。 |
|
6. | Click。 |
明确定义执行顺序
|
由数据流自动定义的执行顺序会导致POU的时间和周期优化执行。在开发过程中,您不需要有关内部管理执行顺序的任何信息。 在Explicit Execution Order Mode模式下,您必须调整执行顺序并评估后果和影响。这是始终显示执行顺序的另一个原因。 |
选择对象的Explicit Execution Order Mode选项时,可以显式更改CFC对象的自动定义的执行顺序。
1. | 在设备或POU视图中,选择一个CFC对象。 |
2. | 在列表菜单中,单击属性。 |
3. | 单击CFC Execution Order选项卡。 ⇒ | 列表框Execution order显示当前选择的模式。 |
|
4. | 在Execution order列表框中,选择Explicit Execution Order Mode。 |
5. | 单击确定以确认对话框。 ⇒ | Explicit Execution Order Mode模式属性被选中。网络在CFC编辑器中编号,并且在菜单中提供了以下命令,用于编辑执行顺序。 |
|
6. | 打开一个CFC对象。 |
7. | 选择一个编号的元素,然后单击。 |