恭喜,你发布的帖子
发布于 2016-01-27 12:46:29
1楼
你得主动学习下,求程序还要求编程语言符合你的习惯呢?
首先要评估信号状态:
1.创建一个UDT或者STRUCT,如温度CT002
CT002:STRUCT
Value:REAL; //温度过程值
ST:Byte; //信号状态
END_STRUCT;
2.做一个1s的脉冲(1Hz)每次上升沿检测去当前的温度跟上一次有效温度进行比较
CT002_Old,注意这个值必须为有效值,假设CT002.ST:=16#80代表有效值,:=00代表坏值
那么CT002_Old的过程值一定是在:=80的时候存下来的。
A Pulse1Hz
FP FP_Pulse
= PulsePosEd
A PulsePosEd //1秒脉冲上升沿执行1周期
JCN a0b0
L CT002.value //采集到的当前值
L CT002Old.value //上一次的有效值
-R
L 10.0
>R //与10比较
JCN a0b1
L B#16#00 //差值大于10,ST=16#0,信号质量差
T CT002.ST
JU a0b2
a0b1:NOP 0
L B#16#80 //差值在允许范围,ST=16#80
T CT002.ST
L CT002.Value
T CT002Old.Value //差值在允许范围,更新上一次有效值
a0b2:NOP 0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
上面的程序与CT002,CT003~5都要做一次,你要是会使用循环就更好了。
3.计算坏值信号的个数
即要在这个1s上升沿的周期内检测出CT002~5有几个坏点。因为有以下情况可能发生
假设有1个坏点。任可以去掉最低,剩下的值除以/2
有2个坏点...
有3个坏点的情况,去掉最小就没有温度可以除了!
4.坏点个数错误次数累计,连续采集比较都没有有效值,就必须报警了。另外最好能手动修改上一次的有效值。
5.排序温度值,冒泡程序,找到最小值,剩下的有效值除以个数(注意要减去坏点的个数哦)。
请填写推广理由:
分享
只看
楼主