发布于 2008-05-15 10:16:32
0楼
在看FB41之前就听有些前辈说过其中考虑的很仔细,这两天一看的确是佩服老外的仔细和严谨,一些表面上看似简单的过程自己编起来确实还难以考虑周全。我是这样测试我的PID和FB41的差别的:
1,在OB100初始化后,在OB35中同时调用自己的FB和FB41,所有接口参数均设成一致;
2,挨个测试,比如可以先关掉I、D,单纯测试P,同时打开两个块对应的DB,将采样周期稍微设长点,这样便于看清整个过程;
经过这样测试之后,真是自愧不如!惭愧!
另外,发现FB41不仅仅是一个数字PID,程序中很多地方都加以了改进:
首先,它是一个“带死区的PID控制器”,这个很明显,因为有死区宽度DEADB_W的设置项;
其次,它的积分部分采用了“抗积分饱和”的方式,即输出若已经达到上限,将正的积分作用切除,这样就不会造成深度积分饱和而使得退饱和缓慢;
再次,采用了“梯形积分”算法,很明显梯形积分的精度比矩形积分要高;
再者,为了提高积分和微分的精度,都采用了“残差累计”,这个过程在积分和微分的运算过程中均用到了,我一开始没有看懂意思;
最后,它的微分部分为了防止微分作用过于灵敏,防止高频扰动,采用了“不完全微分算法”,也就是我上面一直没有理解的。
呵呵,琢磨了几天,还算有一些收获,和各位分享一下,为自己想编PID的提供几个完善程序的方向,为用FB41的能更加灵活自如的应用提供一点帮助吧。
初来匝道,请多指教!