首页 理论教育控制算法的解析与运行-现场总线与应用技术

控制算法的解析与运行-现场总线与应用技术

【摘要】:在上位机将控制算法传输到控制卡后,控制卡会将控制算法信息暂存到控制算法缓冲区,并不会立即对控制算法进行解析。所以,控制算法的解析必须选择合适的时机。本系统中将控制算法的解析操作放在本周期的控制算法运算结束后执行,这样不会对本周期内的控制算法运行产生影响,新的控制算法将在下一周期得到执行。上位机下发给控制卡的控制算法包含控制算法的操作信息、回路信息和回路中各功能模块信息。

在上位机将控制算法传输到控制卡后,控制卡会将控制算法信息暂存到控制算法缓冲区,并不会立即对控制算法进行解析。因为对控制算法的修改操作需要做到在线执行,并且不能影响正在执行的控制算法的运行。所以,控制算法的解析必须选择合适的时机。本系统中将控制算法的解析操作放在本周期的控制算法运算结束后执行,这样不会对本周期内的控制算法运行产生影响,新的控制算法将在下一周期得到执行。

本系统中的控制算法以回路的形式体现,一个控制算法方案一般包含多个回路。在基于功能框图的算法组态环境下,一个回路又由多个模块组成。一个回路的典型组成是输入模块+功能模块+输出模块。其中功能模块包括基本的算术运算(加、减、乘、除)、数学运算(指数运算、开方运算、三角函数等)、逻辑运算(逻辑与、或、非等)和先进的控制运算(PID等)等。功能框图组态环境下一个基本PID回路如图11-17所示。

978-7-111-55649-7-Chapter11-25.jpg

图11-17 功能框图组态环境下一个基本PID回路

在图11-17中没有看到反馈的存在,但在实际应用中该反馈是存在的。图11-17中的INPUT模块是一个输入采样模块,OUTPUT模块是一个输出控制模块,在实际应用中INPUT与OUTPUT之间存在一个隐含的连接,即INPUT模块用于对OUTPUT模块输出结果进行采样。

图11-17中功能模块下方的标号标示了该模块所在的回路,及该模块在回路中的流水号。如INPUT模块下方的1-2表示该模块在1号回路中,该模块在回路中的流水号为2。上位机在将控制算法整理成传输给控制卡的数据时,会按照回路号由小到大,流水号由小到大的顺序依次整理,而且是以回路为单位逐个回路整理。回路号和流水号不仅在信息传输时需要使用,在控制算法运行时也决定了功能模块被调用的顺序。

上位机下发给控制卡的控制算法包含控制算法的操作信息、回路信息和回路中各功能模块信息。操作信息包含操作类型,如新建、修改和删除;回路信息包含回路个数、回路号和回路中的功能模块个数;功能模块信息包含模块在回路中的流水号、模块功能号和模块中的参数信息。控制卡在接收到该控制算法信息后便将其放入缓冲区,等待本周期的控制算法运行结束后就可以对该控制算法进行解析。

控制算法的解析过程中涉及最多的操作就是内存块的获取、释放,以及链表操作。理解了这两个操作的实现机制就理解了控制算法的解析过程。其中内存块的获取与释放由μC/ OS-Ⅱ的内存管理模块负责,需要时就向相应的内存池申请内存块,释放时就将内存块交还给所属的内存池。一个新建回路的解析过程如图11-18所示。(www.chuimin.cn)

对回路的修改过程与新建过程类似,只是没有申请新的内存块,而是找到原先的内存块,然后用功能模块的参数重新初始化该内存块。对回路的删除操作就是根据回路新建时的链表,依次找到回路中的各个功能模块,然后将其所占用的内存块交还给μC/OS-Ⅱ的内存池,最后将回路头指针清空,标示该回路不再存在。

功能模块对应内存块的初始化操作就是按照该功能模块结构体中变量的位置和顺序对内存块中的相应单元赋予对应的数值。本系统中共有32个功能模块,每个功能模块的结构体由功能模块共有部分和功能模块特有部分组成。以输入模块为例,输入模块的结构体定义如下:

978-7-111-55649-7-Chapter11-26.jpg

978-7-111-55649-7-Chapter11-27.jpg

图11-18 一个新建回路的解析过程

每个功能模块都有一个功能号,用于标示该模块的功能和与该模块相对应的功能函数。在执行控制算法运算时,会根据此功能号调用对应的功能函数对各个功能模块进行运算处理。

控制算法的执行以1s为周期,在执行控制算法时,实行先集中运算,将运算结果暂存,再对运算结果集中输出的方式。控制算法的运算即依次执行各个回路,通过对回路头指针的检查,判断该回路是否存在,如果存在则按照回路解析时创建的链表,依次找到该回路中的功能模块,并按照功能模块中的模块功能号找到对应的功能函数,通过调用功能函数对该功能模块进行运算,并将结果暂存到模块的Result中,以便后续模块对该结果的访问。在一条回路执行完毕后,如果该回路需要执行输出操作,则将对应的输出操作加入到输出队列中,等待所有的运算完成后再集中输出。如果检查到回路头指针为空,则表明该回路已经不存在,继续检查下一回路,直至完成对255个控制回路的检查和执行。