西门子S7-200PLC由“冒泡法”排序算法的逆向思考

时间:2023-03-18来源:佚名
在一些C语言资料上看到,“冒泡法”排序一般是从最后一个数据开始,向地址小的方向相邻两个数据比较,并按照从小到大或者从大到小排序的一种算法。在数据比较、移动的过程中,数据的运动,看起来好像水中的气泡向上运动。故而称之为“冒泡法”排序。
“冒泡法”排序,在知道数据的起始地址、数据个数、数据类型后,需要算出最后一个数据的地址,并从最后的一个地址开始运算排序。我在想,为什么不能从数据的起始地址开始排序呢,如果采用这种“下沉法”排序,还能省去计算数据的结束地址,程序应该会更简洁。于是自己就试着写了一下“下沉法”排序的plc程序代码,并测试通过。
排序环境:224CPU,从VB1000开始连续20个整数,从小到大排序。“下沉法”排序算法参考代码如下:

//******************给外循环体、内循环体的循环次数赋初值***********************
LD SM0.0 //开始执行从小到大的排序程序
MOVW 19, LW2 //给外循环次数(数据个数-1)赋初值
MOVW 19, LW6 //给内循环次数(数据个数-1)赋初值

//*******************建立外循环体并定义排序的其实地址*****************************
FOR LW0, 1, LW2 //FOR外循环体循执行LW2次
MOVD &VB1000, AC1 //将V区的起始地址赋给AC1,定义排序的起始地址

//**************建立内循环体并开始进行相邻的两个数据比较、移动****************
FOR LW4, 1, LW6 //FOR内循环体循执行LW6次
MOVD AC1, AC2 //把当前AC1里面的地址存储到AC2里面
D 2, AC2 //AC2当前地址 2,存入AC2
LDW< *AC2, *AC1 //如果AC2指向的地址里面的内容小于AC1指向的地址里面的内容
MOVW *AC1, LW8 //那么将当前两个地址里面的内容互换
MOVW *AC2, LW10 //如果AC2指向的地址里面的内容不小于AC1指向的地址里面的内容
MOVW LW8, *AC2 //那么当前两个地址里面的内容保持不变
MOVW LW10, *AC1 //如果把小于比较指令改成大于比较指令,那么数据就是从大到小排序
LD SM0.0
D 2, AC1 //AC1当前地址 2,存入AC1
NEXT //跳转到FOR内循环,如果内循环执行结束,程序往下执行

//*******************内循环执行结束,进入外循环执行*****************************
DECW LW6 //内循环体执行结束,将内循环体的循环次数减1
NEXT //跳转到FOR外循环,如果外循环执行结束,程序往下执行
上面代码基本采用临时变量作运算的,其实还可以将其封装成一个子程序,实现多次调用。

    热销商品

    进口S2m5内六角扳手小型单个公制加长球头特长套装 2 2.5 3 4 17

    进口S2M5内六角扳手小型单个公制加长球头特长套装(型号:22.53417)采用高品质S2合金钢制造,具备优异的硬度与耐磨性,适用于精密机械、电子设备、家具组装等场景。其加长...
    1.5

    新品日本EIGHT百利内六角扳手进口八牌球头六角匙螺丝刀TLN-S9 S7

    新品日本EIGHT百利内六角扳手TLN-S9S7,采用高品质进口合金钢制造,硬度高、耐磨损,确保长久使用寿命。其独特的球头设计,可在多角度灵活操作,尤其适用于狭窄空间作业,提...
    47.08

    L型扳手 7字型扳手烟斗双头套筒弯头穿孔扳手内外六角板手6-24mm

    L型扳手,又称7字型扳手或烟斗扳手,是一种多功能手动工具,广泛应用于机械装配与维修。其独特的L形设计结合双头套筒结构,一端为外六角,另一端为内六角,适用于6-24mm多种...
    1.6

    厂家直销萝卜头黑色手柄5.0十字螺丝刀五金工具起子改锥短螺丝批

    厂家直销萝卜头黑色手柄5.0十字螺丝刀,采用优质合金钢材质,刀头经精密淬火处理,硬度高、耐磨性强,不易滑牙。十字头设计精准匹配螺丝槽,确保扭力传递稳定,适用于家电维...
    0.25

    包塑电镀锌铁丝扎丝扎线0.45 0.55 0.75 0.9 1.2 1.5电缆绑带扎带

    包塑电镀锌铁丝扎丝(又称扎线、电缆绑带)是一种广泛应用于电气安装、通信布线、园艺固定及工业捆扎的紧固件。其内芯采用优质低碳钢丝,经电镀锌处理,具备优异的防锈和...
    3.3

    网站栏目