zlf60137
danpianji3501
級別: 略有小成
|
不知道你的排序是要求全部排出來還是僅僅要求出最大值或者最小值?因為現(xiàn)實中的應(yīng)用大部分是要求出最大值或者最小值的。 如果僅僅是求出最大值或者最小值請參考: 1,要排序的數(shù)據(jù)為DB10的DBW0...DBW18(10個字) 2,MD100為指針地址,MW104為最終結(jié)果,MW106為臨時計數(shù)地址。 3,求最小值時稍微改一下就可以了。 OPN DB 10 L L#16 T MD 100 L DBW 0 T MW 104 //最大值將被存儲在這個地址 L 0 T MW 106 //計數(shù)地址 _00: L MW 104 L DBW [MD 100] >=I JC _01 T MW 104 _01: L MD 100 + L#16 T MD 100 L MW 106 + 1 T MW 106 L 9 <I JC _00 回答者: 金牌用戶 冬日 - 畢業(yè)實踐員 第4級 2009-05-12 09:32:00 收藏6 1 評論 精探推薦 提問者對于答案的評價: 感謝,不過這程序使我進一步的了解了LOOP的用法 同時感謝依然,SCL不想看了,STL都還不熟練,我再開個貼,麻煩你路過下,感謝80分 已有3人評論 展開 7yu: 解決了,再次感謝 |
---|---|
|
zlf60137
danpianji3501
級別: 略有小成
|
關(guān)于排序的算法,你可以參考一下數(shù)據(jù)庫的知識,里面有多種排序方法,不過像你所說就10個數(shù)據(jù)從小到大排序,就可以用較簡單的一種“兩兩比較法”,如東方巨龍所言; 關(guān)于“聲明一個可以盛下10個數(shù)據(jù)的數(shù)組變量”: 首先建立一個數(shù)據(jù)塊,如DB1,在ADDRESS0.0 中定義NAME,比如TEST;在ADDRESS0.0 中定義TYPE,比如ARRAY[1..10];在INITIAL VALUE中輸入初始值,或空白(缺省值);回車,在*2.0 TYPE中輸入變量類型,比如INT,就完成了。此時你可以通過VIEW/DATA VIEW查看到這10個INT變量。 補充:也不是很難寫,常用的如梯形圖看起來很直觀,適合編寫數(shù)字量邏輯程序,語句表有點類似匯編,數(shù)據(jù)處理還可以,當(dāng)然沒有C語言高級,他也提供了一些其它的編程語言,比如GRAPH,適合順控程序,比如機械手應(yīng)用,還有SCL結(jié)構(gòu)化編程語言,就是C語言的語法格式,但也不能將C語言直接導(dǎo)入。你可以使用一下,不過需要授權(quán)。 |
---|---|
|
zlf60137
danpianji3501
級別: 略有小成
|
一個子程序,你看一下 LD0 表頭地址 L4.0 排序模式:true=升序,false=降序 其它為TEMP 變量 Network 1 // 表為空或只有一個數(shù)據(jù)時不用排序 LD SM0.0 +D 2, LD0 AW<= *LD0, 1 CRET Network 2 // 初始化循環(huán)次數(shù)、表頭指針指向第一個元素 LD SM0.0 MOVW *LD0, LW7 MOVW LW7, LW5 DECW LW5 Network 3 // 外循環(huán) LD SM0.0 FOR LW9, 1, LW5 MOVW LW9, LW21 INCW LW21 Network 4 // 內(nèi)循環(huán) LD SM0.0 FOR LW11, LW21, LW7 Network 5 // 指針指向待比較的兩個數(shù)據(jù)項 LD SM0.0 MOVW LW9, LW21 SLW LW21, 1 ITD LW21, LD13 +D LD0, LD13 MOVW LW11, LW21 SLW LW21, 1 ITD LW21, LD17 +D LD0, LD17 Network 6 // 比較 // 生成交換標(biāo)志 LDW> *LD13, *LD17 A L4.0 LDW< *LD13, *LD17 AN L4.0 OLD = L23.0 Network 7 // 交換數(shù)據(jù) LD L23.0 MOVW *LD13, LW21 MOVW *LD17, *LD13 MOVW LW21, *LD17 Network 8 NEXT Network 9 NEXT |
---|---|
|
zlf60137
danpianji3501
級別: 略有小成
|
數(shù)據(jù)排序 - 已解決問題 我的數(shù)據(jù)存在VW4500開始的每隔一個位的存儲器內(nèi),即VW4500,VW4502,VW4504,...VW4546,總共有24個,希望實現(xiàn)從小到大排序,即最大的數(shù)放在VW4546內(nèi)。嘗試用FOR循環(huán)來實現(xiàn),望指點迷津 問題補充: 希望通過使用for循環(huán)來實現(xiàn)冒泡法了解指針的運用,如果有的話請給我發(fā)一份,如果沒有的話給我一份關(guān)于指針的介紹,及注意事項,謝謝。我的郵箱jgsong21st@163.com 產(chǎn)品版區(qū):SIMATIC S7-200 懸賞分:10 | 解決時間:2009-09-23 08:56:08 | 提問者: 花樣少年 - 畢業(yè)實踐員 第4級 問題ID:42036 最佳答案 去看下最簡單的冒泡法,自己做才是真道理 //Main主程序 對5個數(shù)進行排序從VW4500至Vw4508進行排序,任意多個數(shù)可以在SM0.1中初始化; Network1 LD SM0.1 MOVW 1, VW2000 MOVW 1, VW1000 MOVD &VB4498, VD3000 MOVW 700, VW4500 MOVW 210, VW4502 MOVW 110, VW4504 MOVW 510, VW4506 MOVW 5110, VW4508 MOVW 1, VW600 Network2 LD M1.0 CALL S0:SBR0 //SO:SBR0子程序,采用內(nèi)外兩個For循環(huán)及VD1118與VD1008雙指針進行排序操作 Network1 LD M1.0 FOR VW2000, VW600, 4 Network2 LD M1.0 FOR VW1000, VW2000, 3 Network3 LD M1.0 LPS MOVW VW1000, VW1002 AENO *I +2, VW1002 AENO ITD VW1002, VD1004 LPP MOVD VD1004, VD1114 +D +2, VD1114 Network4 LD M1.0 MOVD VD3000, VD1008 +D VD1004, VD1008 MOVD VD3000, VD1118 +D VD1114, VD1118 Network5 LD M1.0 MOVW *VD1008, VW3500 MOVW *VD1118, VW3502 Network6 LD M1.0 AW> VW3500, VW3502 MOVW *VD1008, VW3004 MOVW *VD1118, *VD1008 MOVW VW3004, *VD1118 Network7 NEXT Network8 NEXT 【PLC:S7 200 226 調(diào)試通過可以直接測試】 回答者: S7-200 / Net - 高級技術(shù)員 第7級 2009-09-22 11:19:41 收藏7 4 評論 精探推薦 提問者對于答案的評價: 非常感謝,我已經(jīng)調(diào)試通過了,同時對指針也有了了解,以后多多練習(xí),不斷提高自己 |
---|---|
|
zlf60137
danpianji3501
級別: 略有小成
|
剛接觸PLC不久,不知道怎么將4臺電機的運行時間按照從小到大排序,求幫助! |
---|---|
|
zlf60137
danpianji3501
級別: 略有小成
|
1、冒泡程序一般起什么作用? 就是一個排序程序,從大到小排序。冒泡指將大數(shù)浮出來,即冒泡。 2、S7-200冒泡: 冒泡程序流程圖及程序,連接: http://wenku.baidu.com/link?url=2ajv0YMolpZb2IHPWuF4Mv-SN919ANJdp6BfyU8Due9dqeP1d8mxLIyouJWDGfkAJOXDvEyhsSQCVZ3w6T0dE21zWRsqNOqRGQuHhhBtjaK 3、S7-300冒泡: 轉(zhuǎn)帖: 假定十個數(shù)據(jù),放在DB1中,安放順序如下: DBD0 DBD4 … DBD36 下面是西門子的程序 OPN DB 1 /////打開DB1這個數(shù)據(jù)塊 L 10 ////裝載10到MB0中,因為有十個數(shù)據(jù),要進行十次排序,9次也可以的 LL0: T MB 0 L P#0.0 ////裝載地址指針,這是關(guān)鍵,不要搞錯了 LAR1 L 9 LL1: T MB 2 ////內(nèi)部循環(huán),進行9次,直到把最大值排到最后 L DBD [AR1,P#0.0] L DBD [AR1,P#4.0] <R JC LL2 ////比較前后兩個值,如果前面大于后面的,則前后數(shù)據(jù)交換 L DBD [AR1,P#0.0] T #m_temp L DBD [AR1,P#4.0] T DBD [AR1,P#0.0] L #m_temp T DBD [AR1,P#4.0] LL2: +AR1 P#4.0 ////指針自動進行加4,因為是浮點數(shù),所以要跳過4個字節(jié) L MB 2 LOOP LL1 ///這個指令自動的將A寄存器里的值減1 L MB 0 LOOP LL0 |
---|---|
|
zlf60137
danpianji3501
級別: 略有小成
|
冒泡排序法實際就是升序法,小的在前面大的在后面。 參考:http://wenda.so.com/q/1367603117067162?src=170 編程就按照參考中思路兩兩比較遍歷整個數(shù)據(jù)序列。 轉(zhuǎn)載: 300: 實現(xiàn)冒泡(數(shù)值大的在前)排序法: 假定十個數(shù)據(jù),放在DB1中,安放順序如下: DBD0 DBD4 … DBD36 下面是西門子的程序 OPN DB 1 /////打開DB1這個數(shù)據(jù)塊 L 10 ////裝載10到MB0中,因為有十個數(shù)據(jù),要進行十次排序,9次也可以的 LL0: T MB 0 L P#0.0 ////裝載地址指針,這是關(guān)鍵,不要搞錯了 LAR1 L 9 LL1: T MB 2 ////內(nèi)部循環(huán),進行9次,直到把最大值排到最后 L DBD [AR1,P#0.0] L DBD [AR1,P#4.0] <R JC LL2 ////比較前后兩個值,如果前面大于后面的,則前后數(shù)據(jù)交換 L DBD [AR1,P#0.0] T #m_temp L DBD [AR1,P#4.0] T DBD [AR1,P#0.0] L #m_temp T DBD [AR1,P#4.0] LL2: +AR1 P#4.0 ////指針自動進行加4,因為是浮點數(shù),所以要跳過4個字節(jié) L MB 2 LOOP LL1 ///這個指令自動的將A寄存器里的值減1 L MB 0 LOOP LL0 200:下載鏈接:http://wenku.baidu.com/link?url=efyos3PLg3MgU51BofWBNDbBQCPAmrEjIs73ZhXWhEgPPxqBzONyODzbdMXNI0Z0Qge14QQ2sPfh_exEDj_1-NdkHmgkr2c8sqH9bpB9pVO |
---|---|
|
zlf60137
danpianji3501
級別: 略有小成
|
http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=980404&b_id=3&s_id=0&num=27#anch [ 此帖被zlf60137在2017-10-29 11:41重新編輯 ] |
---|---|
|
zlf60137
danpianji3501
級別: 略有小成
|
4臺泵按運行時間從小到大,將對應(yīng)寄存器號進行排序(不對運行時間排序) http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=980404&b_id=3&s_id=0&num=27#anch |
---|---|
|
zlf60137
danpianji3501
級別: 略有小成
|
|
---|---|
|