泡沫排序法 (Bubble Sort) — 以台達 AH 系列 PLC 為例 (LD)
概述
藉由 PLC 會不斷掃描程式的特性,這特性本身就有迴圈的概念,並結合 [陣列] 和 [間接指定暫存器],用階梯圖寫出泡沫排序法。以下用台達 AH 系列 PLC 為例,由小到大執行陣列排序。
變數
M_Sort : BOOL,開始排序旗標。
Temp : INT,排序過程中用的暫存變數。
Num : ARRAY [5] OF INT,是整數型的陣列變數。共有 5 個元素,位址從 D0 開始佔了 5 個 WORD。
注意:使用陣列時,請注意變數的位址,避免重複使用造成資料衝突。
程式說明
一上電的時候,將陣列的各元素寫入數值。
當 Num[0] 的值 > Num[1] 的值時,把 Num[0] 和 Num[1] 的數值交換。
將 Num[0] 的值移到 Temp 暫存,Num[1] 的值移到 Num[0],再把 Temp 暫存的數值移到 Num[1],就完成了數值交換。完成之後,E0 + 1。
當 Num[0] 的值 <= Num[1] 的值時,數值不交換,但 E0 + 1。
當 E0 = 4 的時,完成一次內圈循環。5 個元素,最多交換 4 次。
外圈次數加一,內圈次數歸零。E1 + 1,E0 歸零。
不斷觸發 M_Sort 就可以完成陣列由小到大的排序。
完整的程式如下圖所示:
註:E0 和 E1 為間接指令暫存器
這裡的使用方式為 D0@E0
當 E0 的數值為 0 時,D0@E0 等於 D0
當 E0 的數值為 1 時,D0@E0 等於 D1
當 E0 的數值為 123 時,D0@E0 等於 D123
依此類推