1. 从零开始:POU与FB到底是什么?
如果你刚开始接触CODESYS,看到“程序组织单元(POU)”和“功能块(FB)”这两个词,可能会觉得有点抽象。别急,我用最直白的话给你解释一下。
你可以把整个PLC程序想象成你要盖一栋大楼。POU(Program Organization Unit),就是这个大楼的总施工蓝图和项目管理框架。它决定了这栋楼有几层(程序结构),每层是干什么的(任务划分),以及各个施工队(功能模块)之间怎么协作。在CODESYS里,POU是一个总称,它下面具体包含了三种东西:程序(PRG)、功能块(FB)和函数(FUN)。而我们常说的“程序块(PRG)”,就是POU家族里权力最大的那个,相当于项目经理,拥有最高的调用权限。
那FB(Function Block) 又是什么呢?它就是大楼里一个个标准化的、可重复使用的功能模块,比如一套成熟的卫生间施工方案、一个标准的窗户安装流程。这个模块有自己的输入(比如窗户的尺寸、类型)、输出(安装好的窗户状态),更重要的是,它内部有“记忆”。这个“记忆”就是静态变量,它能把上一次运行的状态记住,下一次接着用。比如一个控制电机启停的FB,它能记住电机当前是开还是关,而不是每次调用都从头开始判断。
我刚开始学的时候,最容易搞混的就是PRG和FB。简单记:PRG是“管理者”和“总调度”,它被PLC的循环任务(Task)直接调用,然后由它去组织、调用下面的FB和函数。FB是“专业工人”,它封装了具体的、有状态的逻辑功能。一个项目里通常只有一个或少数几个主PRG,但会有很多个FB。理解了这个关系,你的程序结构一下子就清晰了。
2. 权力核心:程序块(PRG)的调用机制与实战要点
现在我们来深入看看POU家族里的“老大”——程序块(PRG)。前面说了它是项目经理,那这个项目经理具体有什么特权,工作又要注意什么呢?
首先,PRG拥有最高的调用权限。 这是什么意思?在CODESYS的编程世界里,PRG几乎可以调用任何它需要的“下属”。无论是另一个PRG(虽然不常见,但可以),还是功能块(FB),或者是纯计算的函数(FUN),甚至是面向对象编程(OOP)里的方法和属性,它都能直接调遣。这种设计让PRG成为了程序逻辑的绝对核心和入口点。你的主要控制流程、顺序逻辑、以及对各个功能模块的协调指令,都应该写在PRG里。
其次,PRG必须被“任务(Task)”调用才能运行。 这是关键中的关键!你可以把Task理解为PLC的心脏跳动或时钟节拍。Task以固定的周期(比如10ms、50ms)循环执行,它每次跳动,就去执行一遍分配给它的PRG。所以,你写的PRG代码不会自己运行,你必须把它拖拽到某个Task的调用列表中。这步操作新手特别容易忘,结果就是程序下载了,但PLC啥也不干,检查半天才发现PRG没挂到Task上。
这里就引出一个至关重要的实战要点:输入采集的周期管理。假设你有一个按钮信号需要读取,这个信号连接在PLC的输入模块上。通常,我们会有一个快速的Task(比如1ms或2ms)专门用于高速IO刷新,这个Task会把物理输入点的状态更新到内存中的输入映像区。而你的主PRG可能运行在一个较慢的Task里(比如10ms)。那么,你的PRG里读到的按钮状态,实际上是从输入映像区读的,这个映像区的更新速度取决于那个快速的IO刷新Task。
所以,你必须确保你的PRG执行周期和IO刷新周期是倍数关系,并且PRG周期要慢于或等于IO刷新周期。比如IO刷新是2ms,PRG是10ms,这样每5次IO刷新,PRG才读取一次,能保证读到的是稳定值。如果周期设置混乱,可能会

与功能块(FB)的核心机制与应用实践&spm=1001.2101.3001.5002&articleId=153661541&d=1&t=3&u=2a81c1be78e94a58997a53c000522b89)
921

被折叠的 条评论
为什么被折叠?



