回复:怎样实现地址加1的?(不是地址中的数值)

乔灵儿

  • 帖子

    76
  • 精华

    0
  • 被关注

    3

论坛等级:新手

注册时间:2005-10-21

普通 普通 如何晋级?

发布于 2006-09-20 11:12:28

0楼

我前一段时间也编了一个去极值平均滤波算法,在实际工程里面也用上去了,效果还可以。。现在共享一下,一方面大家相互交流一下,另一方面请大家指教,是否有更简单的方法。

说明: (1) 使用时事先要在对应的存储DB里面开辟空间 , 其数目为: 滤波数据个数+1 .
(2) 请在OB100里面将使用的DB空间进行初始化 .
(3) 输入的数据源是WORD类型的 , 输出的平均值是DWORD类型的 .

第一步: 递推 .
OPN #DB_Number
LAR1 P#DBX 0.0 //取首地址.
TAR1 AR2

L #Filter_Data_Number
L 2
*I
SLW 3
T #Memory_Number

L DBW [#Memory_Number] //新数据<>旧数据,才认为有效.
L #New_Data_source
==I
JC _Out

L #New_Data_source
T DBW [#Memory_Number] //采集新数据,存到DBW[2*N].

//循环递推.

L #Filter_Data_Number
Back: T #Actual_Cycle_Number
L DBW [AR1,P#2.0]
T DBW [AR1,P#0.0]
+AR1 P#2.0
L #Actual_Cycle_Number
LOOP Back

第二步: 求最值 .
LAR1 AR2

L DBW [AR1,P#0.0]
L 0
==I
JC _Out //第1个单元==0,跳出.

//找最大值.

L DBW [AR1,P#0.0]
T #Maximum

L #Filter_Data_Number
DEC 1
_010: T #Actual_Cycle_Number
L #Maximum
L DBW [AR1,P#2.0]
>=I
JC _011
T #Maximum
_011: +AR1 P#2.0
L #Actual_Cycle_Number
LOOP _010

//找最小值.

LAR1 AR2
L DBW [AR1,P#0.0]
T #Minimum

L #Filter_Data_Number
DEC 1
_012: T #Actual_Cycle_Number
L #Minimum
L DBW [AR1,P#2.0]
<=I
JC _013
T #Minimum
_013: +AR1 P#2.0
L #Actual_Cycle_Number
LOOP _012

第三步: 求平均值 .
LAR1 AR2

//累加求和.

L 0
T #Sum_Value
L #Filter_Data_Number
_031: T #Actual_Cycle_Number
L DBW [AR1,P#0.0]
L #Sum_Value
+D
T #Sum_Value
+AR1 P#2.0
L #Actual_Cycle_Number
LOOP _031

//去极值.

L #Sum_Value
L #Maximum
-D
L #Minimum
-D
T #Sum_Value

//求平均值.

L #Sum_Value
L #Filter_Data_Number
DEC 2
/D
T #Average_Value

_Out: NOP 0
乔灵
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54797条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。