码迷,mamicode.com
首页 > 其他好文 > 详细

西门子博途编程-模拟量断线超量程处理(中值法)

时间:2017-09-15 20:14:14      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:error   play   lin   比较   display   splay   函数   操作   技术分享   

温度PID控制时, 有多个温度测量点, 但最终只有一个温度作为反馈值参与PID控制, 我们有时会采用平均值法, 计算所有温度的平均值来作为PID的反馈值. 但在某一路温度探头断线的情况下, 温度值为零, 这时平均值就会小很多.

像这种情况下中值法比较有效.  原理如下: 对于一组温度, 模拟量转换为数字量后, 对温度值进行排序, 取中间的那个值作为PID反馈值. 如果是偶数, 取中间两个值除以2后作为反馈值.

排序采用西门子LGF的库中的希尔排序, 但它是FB的, 使用上还的带个DB块, 现修改为FC, 功能上做了简化. 程序如下:

技术分享

“LGF_ShellSortReal”函数是个排序函数, 对采集的温度”data”.sourceArray 数组进行排序, 排序后的输出为 “data”.destArray. 然后对”data”.destArray 采集最中间的一个值, 这样可以删除调最小和最大的值, 最后的结果输出到value_1 中.



技术分享

技术分享

排序的数组长度最大不能操作1000, 如果有其它需求, 可以修改temp变量MAX_ARRAY_ELEMENTS.


技术分享

这个函数就是取中值函数.


技术分享

sourceArray 是乱序的温度, 排序后的温度间 destArray.

其实在现实中, 大范围的加热必然导致温度不均匀, 可以采用分段加热. 这时中值法就不是很有效了. 因为采用分段加热后, 每段就1-2组温度采集点, 像这种情况, 需要判断探头是否断线, 如果断线就切换另外一组, 可以中上篇博客中的error信号来判断.

西门子博途编程-模拟量断线超量程处理(中值法)

标签:error   play   lin   比较   display   splay   函数   操作   技术分享   

原文地址:http://www.cnblogs.com/TomDing/p/7528075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!