|
发表于 2014-7-8 22:07:38
|
显示全部楼层
做过,使用MOVE 和add指令进行,然后除以5。例程回头可以发给你。
参考标准库的功能“求平均值”链接:http://support.automation.siemens.com/CN/llisapi.dll?func=cslib.csinfo&lang=zh&objid=28027081&caller=view
补充问题回复:
直接按此链接学习、下载例子程序。
1、一劫之后滤波
2、先入先出(fifo)队列保存数据然后对队列求平均。
可以应用冒泡法排序,排序后取中间值即可.。
假定5个数据,放在DB1中,安放顺序如下:
DBW0
DBW2
…
DBW8
下面是西门子的程序
OPN DB 1 /////打开DB1这个数据块
L 5 ////装载5到MB0中,因为有5个数据,.
LL0: T MB 0
L P#0.0 ////装载地址指针,这是关键,不要搞错了
LAR1
L 4
LL1: T MB 2 ////内部循环,进行4次,直到把最大值排到最后
L DBW [AR1,P#0.0]
L DBW [AR1,P#2.0]
<I
JC LL2 ////比较前后两个值,如果前面大于后面的,则前后数据交换
L DBW [AR1,P#0.0]
T #m_temp
L DBW [AR1,P#2.0]
T DBW [AR1,P#0.0]
L #m_temp
T DBW [AR1,P#2.0]
LL2: +AR1 P#2.0 ////指针自动进行加2
L MB 2
LOOP LL1 ///这个指令自动的将A寄存器里的值减1
L MB 0
LOOP LL0
伪程序段1:
数据1+数据2+数据3+数据4+数据5=数据6
伪程序段2:
数据6/5=数据7(平均值)
伪程序段3:
数据4到移动数据5,数据3到移动数据4,数据2到移动数据3,数据1到移动数据2,模拟量端口数据移动到数据
以上用梯型图很好写。 |
|