(已结贴)工控PLC擂台第81期-PLC编写《中位值滤波法》 点击:1054 | 回复:4



玻璃的心

    
  • 精华:30帖
  • 求助:2帖
  • 帖子:962帖 | 5801回
  • 年度积分:0
  • 历史总积分:61250
  • 注册:2010年6月11日
发表于:2012-04-15 23:31:12
楼主

            用PLC编写《中位值滤波法》;要能体现不同PLC为实现两层循环控制和间接寻址。

 

工控PLC擂台每周一期,本期待80期结束一周后结贴。奖项设置:一等奖1名:20~50MP,二等奖5名:10MP,三等奖10名:100积分。

MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。

MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。



楼主最近还看过



戴国政

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 14回
  • 年度积分:0
  • 历史总积分:98
  • 注册:2010年4月29日
发表于:2012-04-19 13:33:48
1楼

·以OB1循环周期作为1s计时器,每1s采集一次数据,采集N(可设置)次数据后,中值滤波输出;

·以系统时间毫秒的百位与前两位相加产生200内的伪随机数;

程序结构:

0B100:系统数据初始化

0B1:   ·判断设置滤波次数是否合法(正奇数);

           ·数据采集;

           ·滤波输出;

DB1:  +0.0    SampIn   采样

          +4.0    Outp       输出

          +8.0    ActualSampNum      实际采样次数

          +10.0    SetSampNum          设定采样次数

         +12.0..+4*19       SampBuf【20】              采样数据缓冲区 

 

程序:

0B100--------------------------------------------------------------------------------------------------

     OPN   "SampleData"

      L     0.000000e+000
      T     DBD    0
      T     DBD    4

      L     0
      T     DBW    8

OB1------------------------------------------------------------------------------------------------------

NW1------------------------------------------------------

      L     "SampleData".SetSampNum
      ITD  
      L     2
      MOD  

      T     #ValueD

      O(   
      L     "SampleData".SetSampNum
      L     0
      <=I  
      )    
      O(   
      L     #ValueD
      L     0
      ==D  
      )    
      JCN   Run

      =     #SystemFault
      BEC  

NW2---------------------------------------------------------------

 

Run:  L     LD     6
      ITD  
      DTR  
      T     MD   100                    //OB1循环周期累加作为1s定时器;

      L     MD   104
      L     MD   100
      +R   
      T     MD   104

      L     1.000000e+003
      <R   
      BEC  

      L     0.000000e+000
      T     MD   104

      L     LB    18                    //利用系统时间毫秒的百位和前两位相加产生200内随机数
      BTD                               //随机数仅用于测试,生成方法不科学;
      L     LB    19
      BTD  
      +D   
      T     #ValueD
      DTR  
      T     "SampleData".SampIn         //DB1.DBD0

NW3---------------------------------------------------------------------

 

      L     "SampleData".ActualSampNum  //DB1.DBW8
      L     0
      <>I  
      JC    GetD

      L     P#12.0
      T     #EntryOfPointer

GetD: L     "SampleData".SampIn
      T     DBD 【#EntryOfPointer】

      L     P#4.0                       //每1s采集一次数据,并依此放入数组;
      L     #EntryOfPointer
      +D   
      T     #EntryOfPointer

      L     "SampleData".ActualSampNum
      L     1
      +I   
      T     "SampleData".ActualSampNum
      L     "SampleData".SetSampNum
      ==I                               //完成设定次数的数据采集,进行中位值滤波输出;
      JC    Filt

      BEC  

NW4------------------------------------------------------------

 

Filt: L     0
      T     "SampleData".ActualSampNum

      L     1
      T     #N

      L     "SampleData".SetSampNum
      L     1
      -I   
Lwai: T     #LoopCounterA               //冒泡程序

      L     P#12.0                      //从小到大进行排序
      T     #EntryOfPointer

      L     "SampleData".SetSampNum
      L     #N
      -I   
Lnei: T     #LoopCounterB

      L     #EntryOfPointer
      LAR1 

      L     DBD 【AR1,P#0.0】
      L     DBD 【AR1,P#4.0】
      >R   
      JCN   _003
      TAK  
      T     #ValueReal

      L     DBD 【AR1,P#4.0】
      T     DBD 【AR1,P#0.0】

      L     #ValueReal
      T     DBD 【AR1,P#4.0】

_003: L     #EntryOfPointer
      L     P#4.0
      +D   
      T     #EntryOfPointer

      L     #LoopCounterB
      LOOP  Lnei

      L     #N
      L     1
      +I   
      T     #N

      L     #LoopCounterA
      LOOP  Lwai
//排序完成后取中间值输出

      L     DBW   10
      L     1
      -I   
      T     #ValueI

      L     #ValueI
      L     2
      *I   
      T     #ValueI

      L     #ValueI
      SLD   3
      LAR1 

      L     DBD 【AR1,P#12.0】
      T     DBD    4

玻璃的心

  • 精华:47帖
  • 求助:2帖
  • 帖子:1303帖 | 5801回
  • 年度积分:0
  • 历史总积分:61251
  • 注册:2010年6月11日
发表于:2012-09-03 21:52:40
2楼
        一等奖1名,50MP获得者:

                         戴国政                戴国政                  

        二等奖0名,10MP获得者: 
                                                         


        三等奖0名,30积分获得者: 
                                                        

玻璃的心

  • 精华:47帖
  • 求助:2帖
  • 帖子:1303帖 | 5801回
  • 年度积分:0
  • 历史总积分:61251
  • 注册:2010年6月11日
发表于:2012-09-03 21:55:28
3楼
本期擂台到此为止,希望大家踊跃参与,参加我们以后的各期擂台!

玻璃的心

  • 精华:47帖
  • 求助:2帖
  • 帖子:1303帖 | 5801回
  • 年度积分:0
  • 历史总积分:61251
  • 注册:2010年6月11日
发表于:2012-09-03 22:00:59
4楼

 

      一等奖1名,50MP获得者:

                         戴国政                戴国政                  

       
二等奖0名,10MP获得者: 
                                                         


       
三等奖0名,30积分获得者:


热门招聘
相关主题

官方公众号

智造工程师