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

Posted 丁丁的笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了西门子博途编程-模拟量断线超量程处理(中值法)相关的知识,希望对你有一定的参考价值。

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

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

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

OB

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

 

 

FC_Interface_Shell

FC_ShellSortReal

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

 

FC_arrayMiddle

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

 

DB

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

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

以上是关于西门子博途编程-模拟量断线超量程处理(中值法)的主要内容,如果未能解决你的问题,请参考以下文章

西门子博途编程 - 另类状态机

西门子博途编程 - 变频器控制

西门子博途编程 - 分拣器设计二

实例详解西门子PLC模拟量编程

西门子PLC模拟量编程实例讲解

西门子博途1200功能块如何使用