泡沫排序法 (Bubble Sort) — 以台達 AH 系列 PLC 為例 (LD)

在階梯圖使用 [陣列] 和 [間接指定暫存器]

Yu
Feb 26, 2019

概述

藉由 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
依此類推

--

--

No responses yet