打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
工控PLC擂台第83期-PLC如何找出一组数据的最大和最小值

PLC如何找出一组数据的最大和最小值。

写出完成整个功能的PLC模块及外围器件,并附相关程序。 

         PLC品牌不限。 

          工控PLC擂台每周一期,本期下周末结贴。奖项设置:一等奖1名:30MP,二等奖5名:10MP,三等奖10名:100积分。 

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

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










 

采用矩形PLC的实现方式如下(适用于矩形N80、V80、PPC11全系列PLC各种模块):

源程序下载访问  http://www.plcstar.com/plcstar/downloads/dl02/261.html





 

太麻烦了,用ABB的AC800M低端PLC,

一句话搞定,

MAX(VAR1,VAR2,.....VARn), MIN(VAR1,VAR2,....VARn)





 

初始化min = a【0】, max = a【0】, 然后遍历这个数组:

for(i = 0; i < num; i++)

{

    if(min > a【i】)

        min = a【i】;

    else if(max < a【i】)

        max = a【i】;

}

把算法移植到PLC时,根据实际应用不同可以做一些修改。如果数组不大,可以把for循环在一个扫描周期内完成;如果数组较大,而PLC处理能力较弱,则可以分多个周期完成。





 采用三菱FX2NPLC  采用数据比较指令书写  通过偏址读出最大值与最小值




不知道为什么 上传图片顺序错了   应该是3142的顺序才对  还有一些中大型PLC 如倍福 ABB 都是一个函数的事情  普通小型PLC没有数据查找指令 可以通过冒泡排序的方法 用FOR循环进行比较 即可  上述指令的数据是为了实现此功能而实现 显示应用中可以用偏址的方式进行数据存储 加强程序的可读行 !




5个数去掉最大与最小,剩下最后三个数取平均值,这两项倒能做到,用PLC编程可能比较麻烦(C语言两三下就解决了,PLC麻烦大了),好在不用排序,5个数反复比较就能都到结果,比方说,a1-a5这5个数字,a1与a2比较,a1<a2,留下a2,a1再与a3比较,大于a3,留下a1,a3就与a4比较,以此类推,筛选出最小的数据,剔除这个数,再筛选一次,就剔除了第二小的。求平均就比较好办了,相加除3就可以了。



半个周期采集一次数据?这个难度太大,主要是硬件上,没有这么高的响应水平,一般的扫描周期在10ms-100ms之间,也就是5ms要取到5个外部数据,输入口可以做到么?高速计数器有可能可以,可是那是计数啊,取得是开关量,如果是上位机传输数据,5数据怎么在5ms也读不出来吧?对于PLC来说难度太大。




说明:VD100为存储输入的实数,VD104为最大值,VD108为最小值。当VD100不等于0时,就会将VD104和VD108进行赋值,然后通过输入值与原有值比较,再通过传送就会显示出最大值和最小值。(寄存器为断电保持型)





好久没来;但心依然在!!

下面为南大傲拓NA200用冒泡法排序的例子;只是中值平均算法的一部分程序;如果有需要可以来信:zhanggp@nandaauto.com;

软件可以到南大傲拓www.nandaauto.com下载!

如下图所示;

注:

中位值滤波法
    A、方法:
        
连续采样N次(N取奇数)
        
N次采样值按大小排列
        
取中间值为本次有效值
    B
、优点:
        
能有效克服因偶然因素引起的波动干扰
        
对温度、液位的变化缓慢的被测参数有良好的滤波效果
    C
、缺点:
        
对流量、速度等快速变化的参数不宜





 

硬件配置里面;如下图所示;





从今天起开始打plc擂台!




 

这个用三菱q系列实现起来黑简单,用max和min指令!

以10组数据为例,查找10组数据中的最大最小值,程序如下:

写数据:

数据最大最小值:





 

利用冒泡法

西门子300/400程序:

假定十个数据,放在DB1中,安放顺序如下:
DBD0
DBD4

DBD36
下面程序:

OPN   DB    1                 /////打开DB1这个数据块
      L     10  ////装载10到MB0中,因为有十个数据,要进行十次排序,9次也可以的
LL0:  T     MB    0
      L     P#0.0   ////装载地址指针,这是关键,不要搞错了
      LAR1  
      L     9
LL1:  T     MB    2   ////内部循环,进行9次,直到把最大值排到最后
      L     DBD 【AR1,P#0.0】
      L     DBD 【AR1,P#4.0】
      <R    
      JC    LL2          ////比较前后两个值,如果前面大于后面的,则前后数据交换
      L     DBD 【AR1,P#0.0】
      T     #m_temp
      L     DBD 【AR1,P#4.0】
      T     DBD 【AR1,P#0.0】
      L     #m_temp
      T     DBD 【AR1,P#4.0】
LL2:  +AR1  P#4.0     ////指针自动进行加4,因为是浮点数,所以要跳过4个字节
      L     MB    2
      LOOP  LL1       ///这个指令自动的将A寄存器里的值减1
      L     MB    0
LOOP  LL0





 比如西门子S7-300/400中,MW20,MW22,MW24,MW26,MW28从中找出最大值和最小值,可以利用SCL,A:= MAX (IN1:=a, IN2:=b, IN3:=c, IN4:=d);
A:= MIN (IN1:=a, IN1:=b, IN1:=c, IN1:=d);来取最大值和最小值




如三菱plc 可用SER指令如:SER D100 D0 D10 K10  
其中D100 K10是指以D100为首的10个寄存器,而D0是要查找的数据 D10则是目标的个数注意不是目标的数据 而D11则是第一个符合目标的值D12是最后一个符合的目标值 D13是最小值的位置 D14就是最大值的位置




 

用S7-200编写的程序:

程序说明:

   本程序将求数组最大值与最小值变为一功能子程序(即SBR_4

其子程序输入量有3

1、          Sin_1为数据组首址输入,为双字存储器。本程序设数组数据为字整数,其第一个数据地址(即数组首址)为VW100。故输入数据组首址输入区用 &VB100

2、          Sin_2为数据组的数据个数输入,本程序值为10

3、          Sin_3 为求最大与最小值运算命令开关(即位变量输入),本程序设为I0.0

子程序输出量有2

1out_1 为最小值输出,本程序设为VW96   2out_2为最大值输出,本程序设为VW98

5个输入与输出及数组数据都可由上位机或触摸屏设置。运算时只要令sin_3输入置1

求值结果立刻由out_1out_2输出,供程序处理。

   具体编程如下:

    一、主程序:

二、SBR_4子程序:

三、数据组:

四、求取最大与最小值:按一下I0.0,立刻显示出最大值VW98=93,最小值VW96=10

求极值运算采用功能子程序,便于多次调用。
如数据组数据不是字整数而是实数(带有小数)可再编写一个实数运算子程序,形式与此类似,只要将程序中对应的数改为实数,指令也随之改为实数操作指令即可。 




 

使用VB6。0,buff【4】为最大值,buff【0】为最小值。

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim buff() As Int16 = {9, 7, 5, 8, 6}

        Dim temp As Int16

        Dim i = 0

        Dim j = 0

        For i = 0 To 4 Step 1

            For j = 0 To 3 Step 1

                If buff(j) > buff(j + 1) Then

                    temp = buff(j)

                    buff(j) = buff(j + 1)

                    buff(j + 1) = temp

                End If

            Next

        Next

        Label1.Text = buff(2)

    End Sub





补充上面,buff【2】为中值




强人,高手多多,可是我还是个菜鸟。学习中




 回复内容:
对:cqu_rockwell--王者之师关于这个用三菱q系列实现起来黑简单,用max和min指令!以10组数据为例,查找10组数据中的最大最小值,程序如下: 写数据: 数据最大最小值:内容的回复:


你那个程序里的 mov k15 d0   是不是写错了,应该是d110吧




 

一等奖1名,20MP获得者: 
wyb2866255---王者之师          wyb2866255


二等奖5名,10MP获得者: 
chenminglei0509                    chenminglei0509

矩形科技                                矩形科技

gsj791898717                        gsj791898717

congxizhong2012                    congxizhong2012

zuozhuan                               zuozhuan

三等奖2名,100积分获得者: 
cqu_rockwell--王者之师         cqu_rockwell

newchp                                 newchp

bhdxzgp                                 bhdxzgp

abysmal                                 abysmal

nineapple                               nineapple

sdzhibohui                             sdzhibohui

纵横军团—ww19830217          ww19830217

yeyewcheng                         yeyewcheng



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel求一列中的最大值的实例讲解
带大家轻松悟透S7-1200 PLC模拟量输入,附演示!
一阳穿四线 大胆买入20150624
EXCEL中怎么求一列数据中最大值和最小值的差?
Excel突出显示最大值或最小值:玩转Excel数据
JS对数组取最大值与最小值的方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服