這篇文章要探討的是如何把資料寫入資料記憶體(DM通道)
能寫入的是資料記憶體前半段(DM0000~DM1023依機種有不同範圍)是可讀寫的部份,大部分機種後半段(DM6144~DM6655)是只能讀取的系統設定資料,要改變後半段的資料只能用編輯軟體CX-Programmer或書寫器去修改,少數的系統設定資料是可用到專用指令去更改(如第4篇提到的更改PLC動作模式)。資料記憶體的最後面是和通訊設定有關,不要隨意更改
資料記憶體讀取命令WD,說明如下圖:
控制命令的字串組成:起始碼+機號+指令+開始通道編號+第1通道資料+...+第n通道資料+偵誤碼+結束碼
※通道編號同樣是BCD碼的10進制數值字串,通道的可使用範圍要查各PLC的手冊,超出範圍的輸入無效
※每一通道的資料由4個數值字串組成,編排順序是由高位元往低位元排,不可弄錯順序。依在PLC內的不同用途,資料分為BCD碼的10進制數值字串,還有16進制數值字串。要如何處理來源資料成為PLC能接受的格式?是這篇文章要探討的重點
PLC回應的字串組成:起始碼+機號+指令+結束字串+偵誤碼+結束碼
其中結束字串若為00則表示控制成功
程式的控制面板和前幾篇大同小異就不再PO圖說明
現在直接說明程式架構(如下圖):一樣是3格的流程控制結構,通訊參數和關閉通訊埠照慣例寫到格子外
第1格分成兩個部份:
右半邊同樣是把所有命令字串合成再寫入PLC內
左半邊是這篇文章的重點,因為實際上多數狀況不可能要使用者自己換算數值資料成16進制字串,所以這類情況一定是由使用者輸入10進制數值,再由程式自動轉換。依用途寫入的資料有以下幾種處理方式:
第1種:系統資料用的16進制字串和直接輸入的BCD碼字串,這類資料原本就是字串,需要做的就是將來源資料分開,再按照通道順序組成單一字串即可
第2種:輸入的是數值,寫入PLC內的是16位元的16進制數值
要做的是把每個通道資料分開,一一轉換成4個字組成的16進制字串,再按照通道順序組成單一字串
第3種:輸入的是數值,寫入PLC內的是16位元的BCD碼10進制數值
要做的是把每個通道資料分開,將資料依序除以(1000、100、10、1等比遞減級數),餘數再投入移位暫存器做下一次運算,商數則轉換為文字,依位元高低順序重組成4個字的字串,最後再按照通道順序組成單一字串
第4種:輸入的是數值,寫入PLC內的是32位元的16進制數值(佔2個通道)
要做的是把每個通道資料分開,一一轉換成8個字組成的16進制字串,8個字的前半(高位元)和後半(低位元)再對調,最後再按照通道順序組成單一字串
第5種:輸入的是數值,寫入PLC內的是32位元的BCD碼10進制數值
要做的是把每個通道資料分開,將資料依序除以(10000000、...、10、1等比遞減級數),餘數再投入移位暫存器做下一次運算,商數則轉換為文字,依位元高低順序重組成8個字的字串,8個字的前半(高位元)和後半(低位元)再對調,最後再按照通道順序組成單一字串
第2格延遲時間要長一點
第3格純粹只是讀取PLC回應的字串,用來判定是否控制成功
以上程式還可以應用到以下2個指令:
1.WJ寫入補助記憶接點AR通道,可使用第1或第2種方法處理
2.WC寫入計時和計數器現在值,寫入的資料全是16位元BCD碼,要用第3種方法處理
留言列表