這篇文章要探討的是資料記憶體(DM通道)的讀取
OMRON PLC 的資料記憶體相當於三菱PLC的D暫存器,性質也相同是16位元的資料格式,依手冊說明都是屬於停電保持型。不管輸入的是哪種數值格式,儲存在資料記憶體中的都是16進制數值
資料記憶體前半段(DM0000~DM1023依機種有不同範圍)是可讀寫的部份,後半段(DM6144~DM6655)是只能讀取的系統設定資料,要改變後半段的資料只能用編輯軟體CX-Programmer或書寫器去修改,少數的系統設定資料是可用到專用指令去更改(如第4篇提到的更改PLC動作模式)。不過若無法確定系統設定資料的用途,儘量維持內定值不要亂改
資料記憶體讀取命令RD,說明如下圖:
讀取資料記憶體的命令字串組成:起始碼+機號+指令+開始通道編號+讀取通道數量+偵誤碼+結束碼
開始通道編號是BCD碼10進制的,不同系列PLC的編號範圍是不同的,下命令前先查清楚PLC的手冊,不要輸入不存在的通道編號
讀取通道數量也是BCD碼10進制的,輸入的範圍是0001~6656,理論上可讀取很多組(全部)通道。但有些通道實際上並沒有,所以輸入的組數不要超過實際可用通道的範圍,因為不存在的通道回應都是0000,只會拖慢通訊時間
要特別注意的是讀取越多組通道需要更久的延遲時間
PLC回應的字串組成:起始碼+機號+指令+結束字串+第1通道資料+...+第n通道資料+偵誤碼+結束碼
要注意的是超過30個通道的資料會自動切割分組,不會顯示在同一字串上。另外每一通道的資料是由4個16進制數值字元組成,在程式處理上要注意這點
※最重要的一點:資料記憶體儲存的資料內容依用途分為BCD碼10進制數值和16進制數值兩種,這也是這篇文章要說明的重點,要如何去分別處理不同格式的資料?
程式的控制面板和前幾篇大同小異就不再PO圖說明
現在直接說明程式架構:一樣是3格的流程控制結構,通訊參數和關閉通訊埠照慣例寫到格子外
第1格一樣把所有命令字串合成再寫入PLC內
為了拆解讀回來的資料,要把讀取數量的字串轉為數值傳到第3格
這裡有個重點:因為讀取數量是BCD碼,所以絕不能直接用字串轉數值元件去轉換。要先把每個字元分開拆解,各別轉為數值,再乘上相對應的倍數,最後在全部相加
第2格延遲時間照前面所寫要長一點
第3格依資料型態有不同的處理方法:
第1種:系統設定資料和間接指定為TIM(相當於三菱PLC的T計時器)或CNT(相當於三菱PLC的C計數器)的設定值。資料是純顯示不再用做其他用途,處理時只要將每組通道資料分離即可
用1個For Loop迴圈就可分開每筆資料,迴圈的執行次數就是第1格傳來的讀取數量
※系統設定資料的內容是16進制數值字串,詳細意義要查操作手冊
※當作TIM和CNT設定值的資料記憶體被強制為BCD碼10進制格式字串,範圍是0000~9999
第2種:以16進制數值儲存的16位元資料,在處理時把分離的每一通道字串資料直接轉換為10進制數值再輸出
第3種:以BCD碼10進制數值儲存的16位元資料,處理時要把分離的每一通道字串資料再細分為單一字元,單一字元轉換為數值後乘上相對應的10的n次方倍數,最後把算出的4組數值相加再輸出
第4種:以16進制數值儲存的32位元資料,每筆資料由2組通道儲存。處理時先分離成每2組通道為1組的單一字串,單一字串中的高(後4碼)低(前4碼)位元交換位置再重組,重組字串資料再直接轉換為10進制數值再輸出
第5種:以BCD碼10進制數值儲存的32位元資料,每筆資料由2組通道儲存。處理時先分離成每2組通道為1組的單一字串,單一字串中的高(後4碼)低(前4碼)位元交換位置再重組,重組字串資料再細分為單一字元,單一字元轉換為數值後乘上相對應的10的n次方倍數,最後把算出的8組數值相加再輸出
OMRON PLC 還有由4個通道組成的64位元格式資料,因為大多屬於PLC內部運算用,而且處理很麻煩會拖慢程式執行的效率(因為LabVIEW能直接轉換的16進制數值只有32位元,所以會得到錯誤資料。BCD碼64位元每筆資料要執行16次迴圈,也會拖慢速度),所以不做說明,若有需求再另外討論
以上程式還可以應用到以下2個指令:
1.RJ讀取補助記憶接點AR通道,讀回的值看應用再選擇處理方法
2.RC讀取計時和計數器現在值,讀回來的資料全是16位元BCD碼,要用第3種BCD碼的處理方式處理。讀回的值若是不做其他用途,用第1種方法處理也可
留言列表