• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
樓主  發(fā)表于: 2017-10-28 15:09
不知道你的排序是要求全部排出來(lái)還是僅僅要求出最大值或者最小值?因?yàn)楝F(xiàn)實(shí)中的應(yīng)用大部分是要求出最大值或者最小值的。
  如果僅僅是求出最大值或者最小值請(qǐng)參考:
  1,要排序的數(shù)據(jù)為DB10的DBW0...DBW18(10個(gè)字)
  2,MD100為指針地址,MW104為最終結(jié)果,MW106為臨時(shí)計(jì)數(shù)地址。
  3,求最小值時(shí)稍微改一下就可以了。
        OPN   DB    10
        L     L#16
        T     MD   100
        L     DBW    0
        T     MW   104                    //最大值將被存儲(chǔ)在這個(gè)地址
        L     0
        T     MW   106                    //計(jì)數(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è)實(shí)踐員  第4級(jí)  2009-05-12 09:32:00
收藏6      1 評(píng)論 精探推薦
提問(wèn)者對(duì)于答案的評(píng)價(jià):
感謝,不過(guò)這程序使我進(jìn)一步的了解了LOOP的用法
同時(shí)感謝依然,SCL不想看了,STL都還不熟練,我再開(kāi)個(gè)貼,麻煩你路過(guò)下,感謝80分
已有3人評(píng)論 展開(kāi)
7yu: 解決了,再次感謝
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
1樓  發(fā)表于: 2017-10-28 15:11
關(guān)于排序的算法,你可以參考一下數(shù)據(jù)庫(kù)的知識(shí),里面有多種排序方法,不過(guò)像你所說(shuō)就10個(gè)數(shù)據(jù)從小到大排序,就可以用較簡(jiǎn)單的一種“兩兩比較法”,如東方巨龍所言;
  關(guān)于“聲明一個(gè)可以盛下10個(gè)數(shù)據(jù)的數(shù)組變量”:
  首先建立一個(gè)數(shù)據(jù)塊,如DB1,在ADDRESS0.0 中定義NAME,比如TEST;在ADDRESS0.0 中定義TYPE,比如ARRAY[1..10];在INITIAL VALUE中輸入初始值,或空白(缺省值);回車,在*2.0 TYPE中輸入變量類型,比如INT,就完成了。此時(shí)你可以通過(guò)VIEW/DATA VIEW查看到這10個(gè)INT變量。
補(bǔ)充:也不是很難寫,常用的如梯形圖看起來(lái)很直觀,適合編寫數(shù)字量邏輯程序,語(yǔ)句表有點(diǎn)類似匯編,數(shù)據(jù)處理還可以,當(dāng)然沒(méi)有C語(yǔ)言高級(jí),他也提供了一些其它的編程語(yǔ)言,比如GRAPH,適合順控程序,比如機(jī)械手應(yīng)用,還有SCL結(jié)構(gòu)化編程語(yǔ)言,就是C語(yǔ)言的語(yǔ)法格式,但也不能將C語(yǔ)言直接導(dǎo)入。你可以使用一下,不過(guò)需要授權(quán)。
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
2樓  發(fā)表于: 2017-10-28 15:16
一個(gè)子程序,你看一下
LD0   表頭地址
L4.0    排序模式:true=升序,false=降序
其它為TEMP 變量

Network 1
//  表為空或只有一個(gè)數(shù)據(jù)時(shí)不用排序
LD     SM0.0
+D     2, LD0
AW<=   *LD0, 1
CRET
Network 2
//  初始化循環(huán)次數(shù)、表頭指針指向第一個(gè)元素
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
//  指針指向待比較的兩個(gè)數(shù)據(jù)項(xiàng)
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
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
3樓  發(fā)表于: 2017-10-28 15:17
數(shù)據(jù)排序 - 已解決問(wèn)題
我的數(shù)據(jù)存在VW4500開(kāi)始的每隔一個(gè)位的存儲(chǔ)器內(nèi),即VW4500,VW4502,VW4504,...VW4546,總共有24個(gè),希望實(shí)現(xiàn)從小到大排序,即最大的數(shù)放在VW4546內(nèi)。嘗試用FOR循環(huán)來(lái)實(shí)現(xiàn),望指點(diǎn)迷津
問(wèn)題補(bǔ)充:
希望通過(guò)使用for循環(huán)來(lái)實(shí)現(xiàn)冒泡法了解指針的運(yùn)用,如果有的話請(qǐng)給我發(fā)一份,如果沒(méi)有的話給我一份關(guān)于指針的介紹,及注意事項(xiàng),謝謝。我的郵箱jgsong21st@163.com
產(chǎn)品版區(qū):SIMATIC S7-200 懸賞分:10 | 解決時(shí)間:2009-09-23 08:56:08 | 提問(wèn)者: 花樣少年 - 畢業(yè)實(shí)踐員  第4級(jí)

問(wèn)題ID:42036

最佳答案
去看下最簡(jiǎn)單的冒泡法,自己做才是真道理
  //Main主程序 對(duì)5個(gè)數(shù)進(jìn)行排序從VW4500至Vw4508進(jìn)行排序,任意多個(gè)數(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)外兩個(gè)For循環(huán)及VD1118與VD1008雙指針進(jìn)行排序操作
  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)試通過(guò)可以直接測(cè)試】
回答者: S7-200 / Net - 高級(jí)技術(shù)員  第7級(jí)  2009-09-22 11:19:41
收藏7      4 評(píng)論 精探推薦
提問(wèn)者對(duì)于答案的評(píng)價(jià):
非常感謝,我已經(jīng)調(diào)試通過(guò)了,同時(shí)對(duì)指針也有了了解,以后多多練習(xí),不斷提高自己
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
4樓  發(fā)表于: 2017-10-28 15:21
剛接觸PLC不久,不知道怎么將4臺(tái)電機(jī)的運(yùn)行時(shí)間按照從小到大排序,求幫助!
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
5樓  發(fā)表于: 2017-10-28 15:25
1、冒泡程序一般起什么作用?
就是一個(gè)排序程序,從大到小排序。冒泡指將大數(shù)浮出來(lái),即冒泡。
2、S7-200冒泡:
冒泡程序流程圖及程序,連接:
http://wenku.baidu.com/link?url=2ajv0YMolpZb2IHPWuF4Mv-SN919ANJdp6BfyU8Due9dqeP1d8mxLIyouJWDGfkAJOXDvEyhsSQCVZ3w6T0dE21zWRsqNOqRGQuHhhBtjaK
3、S7-300冒泡:
轉(zhuǎn)帖:
假定十個(gè)數(shù)據(jù),放在DB1中,安放順序如下:
DBD0
DBD4

DBD36
下面是西門子的程序
OPN   DB    1                 /////打開(kāi)DB1這個(gè)數(shù)據(jù)塊
      L     10  ////裝載10到MB0中,因?yàn)橛惺畟(gè)數(shù)據(jù),要進(jìn)行十次排序,9次也可以的
LL0:  T     MB    0
      L     P#0.0   ////裝載地址指針,這是關(guān)鍵,不要搞錯(cuò)了
      LAR1  
      L     9
LL1:  T     MB    2   ////內(nèi)部循環(huán),進(jìn)行9次,直到把最大值排到最后
      L     DBD [AR1,P#0.0]
      L     DBD [AR1,P#4.0]
      <R    
      JC    LL2          ////比較前后兩個(gè)值,如果前面大于后面的,則前后數(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     ////指針自動(dòng)進(jìn)行加4,因?yàn)槭歉↑c(diǎn)數(shù),所以要跳過(guò)4個(gè)字節(jié)
      L     MB    2
      LOOP  LL1       ///這個(gè)指令自動(dòng)的將A寄存器里的值減1
      L     MB    0
LOOP  LL0
                                                                                                                
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
6樓  發(fā)表于: 2017-10-28 15:26
冒泡排序法實(shí)際就是升序法,小的在前面大的在后面。
參考:http://wenda.so.com/q/1367603117067162?src=170
編程就按照參考中思路兩兩比較遍歷整個(gè)數(shù)據(jù)序列。
                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                            轉(zhuǎn)載:
300:
實(shí)現(xiàn)冒泡(數(shù)值大的在前)排序法:
假定十個(gè)數(shù)據(jù),放在DB1中,安放順序如下:
DBD0
DBD4

DBD36
下面是西門子的程序
OPN   DB    1                 /////打開(kāi)DB1這個(gè)數(shù)據(jù)塊
      L     10  ////裝載10到MB0中,因?yàn)橛惺畟(gè)數(shù)據(jù),要進(jìn)行十次排序,9次也可以的
LL0:    T     MB    0
           L     P#0.0   ////裝載地址指針,這是關(guān)鍵,不要搞錯(cuò)了
      LAR1  
           L     9
LL1:   T     MB    2   ////內(nèi)部循環(huán),進(jìn)行9次,直到把最大值排到最后
      L     DBD [AR1,P#0.0]
          L     DBD [AR1,P#4.0]
          <R    
          JC    LL2          ////比較前后兩個(gè)值,如果前面大于后面的,則前后數(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     ////指針自動(dòng)進(jìn)行加4,因?yàn)槭歉↑c(diǎn)數(shù),所以要跳過(guò)4個(gè)字節(jié)
      L     MB    2
           LOOP  LL1       ///這個(gè)指令自動(dòng)的將A寄存器里的值減1
            L     MB    0
LOOP  LL0
200:下載鏈接:http://wenku.baidu.com/link?url=efyos3PLg3MgU51BofWBNDbBQCPAmrEjIs73ZhXWhEgPPxqBzONyODzbdMXNI0Z0Qge14QQ2sPfh_exEDj_1-NdkHmgkr2c8sqH9bpB9pVO
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
7樓  發(fā)表于: 2017-10-28 15:38
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
8樓  發(fā)表于: 2017-10-28 15:39
排序這個(gè)老大難問(wèn)題,我懂了 ,你呢?
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
9樓  發(fā)表于: 2017-10-28 15:42
4臺(tái)泵按運(yùn)行時(shí)間從小到大,將對(duì)應(yīng)寄存器號(hào)進(jìn)行排序(不對(duì)運(yùn)行時(shí)間排序)
http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=980404&b_id=3&s_id=0&num=27#anch
zlf60137
danpianji3501
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 103 個(gè)
工控威望: 234 點(diǎn)
下載積分: 1114 分
在線時(shí)間: 38(小時(shí))
注冊(cè)時(shí)間: 2016-09-22
最后登錄: 2024-10-27
查看zlf60137的 主題 / 回貼
11樓  發(fā)表于: 2017-10-28 15:51
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go