用S7-200Smart编写一类公式的思路
讲一个很多人讲过的,对入门者可能有帮助的内容。文字中第一个公式参考了成熟的资料,其余文字都是自己敲出,如有错漏欢迎拍砖。
虽然PLC基本由对底层时序锱铢必较的“小”视野转向了模块化,工业化,网络化,标准化的大应用,但了解一些计算的细节仍有必要。
针对时不变系统的增量式PID:Δy(k)=Kp[e(k)-e(k-1)]+Kie(k)+Kd[e(k)-2e(k-1)+e(k-2)]的差分方程计算。
在SMART中的实现思路如下:
1:连接一个采样时间合适的定时中断,在定时中断中编制上述公式。
2:e(k):设定值标量化(工控机触摸屏等上位机给定)减去本次采样值标量化(如AIW4标量化得到)得到本次的标量化偏差值,在合适的定时采样中断中计算得到该偏差。
3:Δy(k)在合适的定时采样中断中按照上面的差分方程计算得到(并标量化反应在AQW或一定的占空比输出)。其中涉及的变量均可以用全局V区或优化成局部的L区来完成简易计算的编写。
4:中断子程序中完成差分方程计算后的网络中针对e(k-1)、e(k-2)两个变量均可由时不变系统的平移特性,按照循环扫描方式得到:先将e(k-1)复制给e(k-2);然后将e(k)复制给e(k-1)且顺序不应错乱,否则有覆盖非交换以及数据更新错误的风险。
5:这样赋值更新是典型的FIFO队列,因此利用SMART构造e(k)的FIFO并配合指针的加减运算应该是效率较好,较简洁的编程方式。针对单变量以及多变量非耦合或已解耦的数据处理场合FIFO(包括通讯缓冲),LIFO等数据结构很重要。
6:针对各种变形反馈控制差分方程也可以这样考虑。(不完全微分,积分分离,微分先行等等)
7:针对y(k)+y(k-5)=e(k)-e(k-1)这种离散化得到的看似稍微奇葩点的差分方程(可能不是PID而是其它关系类型如下图仅仅存在于理论上的前馈差分方程等等)。

8:在SMART中可以在中断计算完成后的网络中这样考虑数据的平移更新:将e(k)复制给e(k-1);多几个y(k)的中间变量且不能省去,因为y(k-4)等中间过程和结果y(k-5)一样重要:具体做法可将y(k-4)复制给y(k-5)、y(k-3)复制给y(k-4)、y(k-2)复制给y(k-3)、y(k-1)复制给y(k-2)、y(k)复制给y(k-1)次序很关键;也可以分别构造e(k)(至少需要2个数据)及y(k)(至少需要6个数据,具体根据差分方程样式确定合适数组的数据个数以节省内存)的FIFO并配合指针的加减运算来紧凑、高效,因地制宜地编程。
9:新推出的SMART运算速度很快,更是给出了几个货真价实的、最小时序为1MS的定时中断,因此驾驭稍微简单的差分运算应该不成问题。(1MS基本满足很多离散化采样计算的时序要求,不含复杂的运动控制)
10:SMART还支持在中断里嵌套稍多层的子程序,因此上述计算均优化为局部变量编程不难。