当前位置: 主页 > PLC控制

关于冒泡法

最近在论坛学习冒泡排序,自己尝试写了下,特把程序贴出来,让让大神看看有什么问题,DB1之前数据如图2,经过FC1排序之后数据数据如图3,但是我理解经过FC1,应该只能把最大的数排到最后,并不能把所有的数按从小到大排列(基于当前这个程序),希望大神帮我分析一
A#AA
JCNM004
L0
T#TEMP0
T#TEMP1
OPNDB1
LAR1P#0.0
L9
M005:T#TEMP0
LDBW[AR1,P#0.0]
LDBW[AR1,P#2.0]
>=I
JCNM002
LDBW[AR1,P#2.0]
T#TEMP1
LDBW[AR1,P#0.0]
TDBW[AR1,P#2.0]
L#TEMP1
TDBW[AR1,P#0.0]
M002:+AR1P#2.0
L#TEMP0
LOOPM005
M004:NOP0

问题补充:
艾星落尘阿鸣两位大师,你俩误会我的意思了,我想请教,为什么我仿真FC1这个程序就可以实现冒泡排序,我理解不能实现的,但是为什么仿真结果是正确的,你俩写的程序我可以看懂,

图片说明:

关于冒泡法a45e6bd9a3c88d8e978e799232f97CEa 关于冒泡法关于冒泡法 58464f41BF0c36835a585dd3480bf236关于冒泡法

最佳答案

A#AA//开始排序
JCNM004
L0
T#TEMP0
T#TEMP1//初始化数据
OPNDB1//打开DB块
LAR1P#0.0//加载开始地址,A
L9//循环次数
M005:T#TEMP0
LDBW[AR1,P#0.0]//判断A和A+2地址大小
LDBW[AR1,P#2.0]
>=I
JCNM002//如果A<A+2不用排序
LDBW[AR1,P#2.0]//如果大于了,进行排序
T#TEMP1//temp1=A+2
LDBW[AR1,P#0.0]
TDBW[AR1,P#2.0]//A+2=A
L#TEMP1
TDBW[AR1,P#0.0]//A=temp1
M002:+AR1P#2.0//地址加2,A=A+2
L#TEMP0
LOOPM005//temp0-1,继续循环
M004:NOP0
这个需要多循环几次吧,PLC一个周期排不完,需要好几个周期才行
#aa什么时候被复位?

提问者对于答案的评价:
谢谢,可以这样理解吗,#AA这个信号一直有,你的意思一个扫描周期,排序不了,有可能需要九个扫描周期,才能正确排序(从小到大),而如果使用艾星落尘和阿鸣两位大师的方法,一个扫描周期就可以排列出来?,在这里也特别感谢艾星落尘和阿鸣。。。

最佳答案作者回复:
是的,你可以仿真一下试试
仿真器带有每个周期执行的功能,有扫描模式~旁边有个+1,点一下就是扫描一个周期

  • 关注微信

猜你喜欢

微信公众号