当前位置: 主页 > PLC控制

数据排序与编号排序

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

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

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

最佳答案

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

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

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

FOR#n:=1TO9DO
#max:=#Num[#n];//初始化最大值编号
#j:=#n;//初始化最大值编号对应下标

FOR#i:=#nTO9DO
//比较查找最大值
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:=1TO10DO
#AfterValue[#i]:=#t_Value[#Num[#i]];
END_FOR;

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

图片说明:

数据排序与编号排序28340ddea902bfeFC536db425a0ff302

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

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

  • 关注微信

猜你喜欢

微信公众号