當(dāng)前位置: 首頁(yè) > 工業(yè)控制產(chǎn)品 > 自動(dòng)化控制 > PLC可編程控制器
發(fā)布日期:2022-04-26 點(diǎn)擊率:107 品牌:西門(mén)子_Siemens
在一些C言語(yǔ)資料上看到,“冒泡法”排序通常是從終究一個(gè)數(shù)據(jù)開(kāi)端,向地址小的方向相鄰兩個(gè)數(shù)據(jù)比照,并依照從小到大或許從大到小排序的一種算法。在數(shù)據(jù)比照、移動(dòng)的進(jìn)程中,數(shù)據(jù)的運(yùn)動(dòng),看起來(lái)如同水中的氣泡向上運(yùn)動(dòng)。故而稱(chēng)之為“冒泡法”排序。
“冒泡法”排序,在知道數(shù)據(jù)的開(kāi)端地址、數(shù)據(jù)個(gè)數(shù)、數(shù)據(jù)類(lèi)型后,需求算出終究一個(gè)數(shù)據(jù)的地址,并從終究的一個(gè)地址開(kāi)端運(yùn)算排序。我在想,為啥不能從數(shù)據(jù)的開(kāi)端地址開(kāi)端排序呢,假定選用這種“下沉法”排序,還能省去核管用據(jù)的完畢地址,程序應(yīng)當(dāng)會(huì)更簡(jiǎn)練。所以自個(gè)就試著寫(xiě)了一下“下沉法”排序的plc程序代碼,并查驗(yàn)經(jīng)過(guò)。
排序環(huán)境:224CPU,從VB1000開(kāi)端接連20個(gè)整數(shù),從小到大排序?!跋鲁练ā迸判蛩惴▍⒖创a如下:
//******************給外循環(huán)體、內(nèi)循環(huán)體的循環(huán)次數(shù)賦初值***********************
LD SM0.0 //開(kāi)端施行從小到大的排序程序
MOVW 19, LW2 //給外循環(huán)次數(shù)(數(shù)據(jù)個(gè)數(shù)-1)賦初值
MOVW 19, LW6 //給內(nèi)循環(huán)次數(shù)(數(shù)據(jù)個(gè)數(shù)-1)賦初值
//*******************樹(shù)立外循環(huán)體并界說(shuō)排序的正本地址*****************************
FOR LW0, +1, LW2 //FOR外循環(huán)體循施行LW2次
MOVD &VB1000, AC1 //將V區(qū)的開(kāi)端地址賦給AC1,界說(shuō)排序的開(kāi)端地址
//**************樹(shù)立內(nèi)循環(huán)體并開(kāi)端進(jìn)行相鄰的兩個(gè)數(shù)據(jù)比照、移動(dòng)****************
FOR LW4, +1, LW6 //FOR內(nèi)循環(huán)體循施行LW6次
MOVD AC1, AC2 //把其時(shí)AC1里邊的地址存儲(chǔ)到AC2里邊
+D +2, AC2 //AC2其時(shí)地址+2,存入AC2
LDW< *AC2, *AC1 //假定AC2指向的地址里邊的內(nèi)容小于AC1指向的地址里邊的內(nèi)容
MOVW *AC1, LW8 //那么將其時(shí)兩個(gè)地址里邊的內(nèi)容溝通
MOVW *AC2, LW10 //假定AC2指向的地址里邊的內(nèi)容不小于AC1指向的地址里邊的內(nèi)容
MOVW LW8, *AC2 //那么其時(shí)兩個(gè)地址里邊的內(nèi)容堅(jiān)持不變
MOVW LW10, *AC1 //假定把小于比照指令改成大于比照指令,那么數(shù)據(jù)即是從大到小排序
LD SM0.0
+D +2, AC1 //AC1其時(shí)地址+2,存入AC1
NEXT //跳轉(zhuǎn)到FOR內(nèi)循環(huán),假定內(nèi)循環(huán)施行完畢,程序往下施行
//*******************內(nèi)循環(huán)施行完畢,進(jìn)入外循環(huán)施行*****************************
DECW LW6 //內(nèi)循環(huán)體施行完畢,將內(nèi)循環(huán)體的循環(huán)次數(shù)減1
NEXT //跳轉(zhuǎn)到FOR外循環(huán),假定外循環(huán)施行完畢,程序往下施行
上面代碼底子選用暫時(shí)變量作運(yùn)算的,正本還能夠?qū)⑵浞庋b成一個(gè)子程序,完畢屢次調(diào)用。
下一篇: PLC、DCS、FCS三大控
上一篇: MATLAB和Simulink在航