最近在论坛学习冒泡排序,自己尝试写了下,特把程序贴出来,让让大神看看有什么问题,DB1之前的数据如图2,经过FC1排序之后数据数据如图3,但是我理解经过FC1,应该只能把最大的数排到最后,并不能把所有的数按从小到大排列(基于当前这个程序),希望大神帮我分析一
A #AA
JCN M004
L 0
T #TEMP0
T #TEMP1
OPN DB 1
LAR1 P#0.0
L 9
M005: T #TEMP0
L DBW [AR1,P#0.0]
L DBW [AR1,P#2.0]
>=I
JCN M002
L DBW [AR1,P#2.0]
T #TEMP1
L DBW [AR1,P#0.0]
T DBW [AR1,P#2.0]
L #TEMP1
T DBW [AR1,P#0.0]
M002: +AR1 P#2.0
L #TEMP0
LOOP M005
M004: NOP 0
问题补充:
艾星落尘 阿鸣 两位大师,你俩误会我的意思了,我想请教,为什么我仿真FC1这个程序就可以实现冒泡排序,我理解不能实现的,但是为什么仿真结果是正确的,你俩写的程序我可以看懂,
图片说明:
最佳答案
A #AA //开始排序
JCN M004
L 0
T #TEMP0
T #TEMP1 //初始化数据
OPN DB 1 //打开DB块
LAR1 P#0.0 //加载开始地址,A
L 9 //循环次数
M005: T #TEMP0
L DBW [AR1,P#0.0] //判断 A和A+2地址大小
L DBW [AR1,P#2.0]
>=I
JCN M002 //如果A<A+2不用排序
L DBW [AR1,P#2.0] //如果大于了,进行排序
T #TEMP1 //temp1 = A+2
L DBW [AR1,P#0.0]
T DBW [AR1,P#2.0] //A+2=A
L #TEMP1
T DBW [AR1,P#0.0] //A=temp1
M002: +AR1 P#2.0 //地址加2,A=A+2
L #TEMP0
LOOP M005 //temp0-1,继续循环
M004: NOP 0
这个需要多循环几次吧,PLC一个周期排不完,需要好几个周期才行
#aa什么时候被复位?
提问者对于答案的评价:
谢谢,可以这样理解吗,#AA这个信号一直有,你的意思一个扫描周期,排序不了,有可能需要九个扫描周期,才能正确排序(从小到大),而如果使用艾星落尘和阿鸣两位大师的方法,一个扫描周期就可以排列出来?,在这里也特别感谢艾星落尘和阿鸣。。。
最佳答案作者回复:
是的,你可以仿真一下试试
仿真器带有每个周期执行的功能,有扫描模式~旁边有个+1,点一下就是扫描一个周期
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc177966.html