数据排序与编号排序

现在有1#、2#、3#......8#、9#、10#共10组料仓重量,现在需要根据各料仓重量的大小对料仓编号进行排序,请问300怎么处理比较好?

问题补充:
loop 003是针对外循环的吧~

但是有一个问题,我现在不光想知道所有重量排序,最终要的是我要知道排序后这些重量分别对应的是哪个仓!

最佳答案

下面程序是我在TIA博途上用SCL完成的,已经测试了。SIMATIC 上的SCL应该一样的。
主要算法是先寻找一个最大值提取到头部,接下来再寻找剩下的数据中的最大值放到第二个位置,以此类推,直到全部排序完成。这也就是所谓的选择排序。比较次数为n(n+1)/2。

//利用选择排序,直接对重量值编号进行排序
#t_Value := #in; //获取输入数据

//初始化序号队列
FOR #i := 1 TO 10 DO
    #Num[#i] := #i;
END_FOR;

FOR #n := 1 TO 9 DO
    #max := #Num[#n];//初始化最大值编号
    #j := #n;       //初始化最大值编号对应下标
    
    FOR #i := #n TO 9 DO
        //比较查找最大值
        IF #t_Value[#Num[#i + 1]] > #t_Value[#max] THEN
            #max := #Num[#i + 1];//记忆最大值编号
            #j := #i + 1;//记忆最大值编号对应下标
        END_IF;
    END_FOR;

    //交换最大值编号
    #Num[#j] := #Num[#n];
    #Num[#n] := #max;
  
END_FOR;//至此已经完成了编号排序;


//输出排序后对应重量值
FOR #i := 1 TO 10 DO
    #AfterValue[#i] := #t_Value[#Num[#i]];
END_FOR;

后记:期间博途崩溃1次,前后花费1小时10分钟。

图片说明:

数据排序与编号排序  

提问者对于答案的评价:
已完成测试Setrarin、艾星落尘的代码测试成功,自控龙龙的没有成功。
其中Setrain的程序附了测试图片非常好,程序在step7中需要将“#”去除,定义输入变量时候不能赋值(如0.0、2.0...格式不允许),将“max”关键字修改为其他(我改为“maxx”),调用程序为fb类型。
其中艾星落尘的程序,附测试成功图片也非常好,但是因为重量一般取实数格式,我在将重量、序号修改为实数格式后后发现序号仍然不能正常显示。
在测试自控龙龙的程序时候不知道为什么循环没有进行下去。
感谢大伙热情讨论,只能优先将分给了Setrain,冒昧的留下自己的QQ:857350368,请自控龙龙、艾星落尘等加下我,以便向你们进一步请教,麻烦了!

最佳答案作者回复:
博途作为新平台,有一些地方是比老版的step7易于使用的,比如说SCL语言。如果是项目初期,建议转移到TIA博途上来

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc181090.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月24日 下午7:26
下一篇 2017年6月24日 下午7:26

相关推荐