直接跳到内容

程序组织单元(POU)

POU是程序组织单元的简称,您可以在POU中编写源代码和定义POU变量。

POU分为三种类型:程序、函数、功能块。

您可以在程序的变量区域定义POU变量,其它POU访问程序的变量时,需要在变量前增加POU名作为作用域。函数有一个隐含的与函数同名的返回值变量,您可以直接使用,另外在函数的变量区域可以定义输入变量、输入输出变量和局部变量,其它POU不可访问函数的变量。功能块可以定义输入变量、输出变量、输入输出变量、局部变量,其它POU不可直接访问功能块的变量,功能块在使用的时候必须定义实例,其它POU可以访问实例的成员。

POU的语言:分为CFC、ST、LD、SFC、IL等语言。

编写POU的源代码的语言不同语言的组成元素和语法结构差异很大,具体内容可以参考编程语言的章节。

创建POU

通过点击工程管理树的节点“程序组织单元”的右键菜单,可以创建POU对象。创建POU时,选择POU类型和实现的语言。

img

img

  • 程序:完成用户指定功能的一系列逻辑语句。
  • 功能块:可完成某种指定功能的逻辑块,包含输入变量、中间变量、输出变量。功能块不可挂载到任务下执行,只能在程序中调用,且可多次调用。
  • 函数:有唯一返回值的逻辑单元,返回值为函数名称本身。例如库中的ADD、SUB等都属于函数。

POU名称支持中文。

IEC语言的下拉里边有软件支持的所有的可选择的语言,您可以根据需要选择POU语言和POU类型。图中的返回值只针对函数类型有效,指示函数返回值的类型。

注意:函数名就是对应函数返回值的变量名,可以直接参与逻辑运算,在函数返回的时候该变量的值就是函数的返回值。

设置完成点击确定,您可以在“程序组织单元”下看到创建的POU节点。

img

POU节点的括号里边的字符指示了POU的类型:

  • PRG指程序类型
  • FUN指函数类型(冒号后指函数返回值类型)
  • FB指功能块类型

调用POU

任务调用POU

任务是控制器逻辑运行的入口,您可以通过拖拽POU或选中POU右键菜单“挂载到任务”等方式将对应的程序安排在对应的任务下形成调用,否则POU将不被执行。

img

img

img

注意:任务不能调用功能块和函数,只能调用程序。

POU之间调用

POU之间可以互相调用,比如在程序下可以调用其它程序、函数、功能块实例等,函数可以调用程序、其它函数、功能块实例,功能块可以调用程序、函数、非本类型的功能块实例。

imgPOU之间调用不限制层数,但是在调用链上不允许成环,否则编译报错。

POU之间的调用有两种组态方式:

  • 拖拽对应的节点到编辑区

img

​ (拖拽POU_CFC到POU_ST逻辑编辑区)

img

​ (拖拽POU_ST到POU_CFC逻辑编辑区)

  • 在编辑区手动输入POU名

img

​ (在POU_LD中添加一个空块,在块名称处直接输入要调用的POU名称POU_CFC)

img

​ (在POU_ST中直接输入要调用的pou名称:pou_cfc()😉

拖拽形成调用

在一个工程中,被拖拽的POU节点可以是工程管理树中的,也可以是工具箱中的。工程管理树中的节点是工程里已经建立的POU,工具箱中的节点是引用库中建立的POU。节点被拖拽到POU的编辑区域,会自动生成调用语句或调用块(文本语言为语句,图形语言为调用块)。

如果拖入的是函数,则会自动为函数的输入、输入输出变量预留位置,功能块会自动为输入、输出和输入输出变量预留位置,您可以在“??”号处输入对应的内容,完成调用。

块调用-CFC语言

img

块调用-ST语言

img

块调用-LD语言

img

块调用-IL语言

img

手动输入形成调用

在文本语言的POU编辑区域,可以直接输入调用语句;在图形语言的编辑区域,在添加块后可在块的类型名处输入被调用的POU名,在对应的引脚处输入相应的内容。

程序组织单元(POU)已经加载完毕