廣告贊助

這篇文章要探討的是多個連續暫存器資料寫入這個命令,這個命令實際可寫入範圍很大,幾乎涵蓋了所有PLC可用接點和暫存器資料。除了可以寫入資料外,還可以做多點ON/OFF的控制


所有的單一輸出入或內部輔助接點皆可以每16或32點為1組寫入,且寫入的資料狀態沒有高低位元位置互換的問題,程式在處理上會比較簡單

 

多個連續暫存器資料寫入的命令說明如下:

20081030-10  

 

命令寫入字串的組成:起始碼+站號+命令碼+個數+起始暫存器號碼+多個連續暫存器資料+偵誤碼+結束碼


個數如說明圖上所寫是2個16進制數值字串組成,超過指定範圍時會通訊錯誤,而PLC回應的字串會是空白


起始暫存器號碼就如前一篇文章圖表的內容,16位元一定是6個字元,32位元一定是7個字元。而起始暫存器號碼有幾個字元是程式要判定寫入的資料是16或32位元的依據


多個連續暫存器資料是依起始暫存器號碼往後排列,16位元的資料是每4個字元1組,32位元的資料是每8個字元1組


PLC回應字串的組成:起始碼+站號+命令碼+錯誤碼+偵誤碼+結束碼

 

 

程式控制面版的構成如下面圖面,要做成這樣是要讓其他程式可以使用:

20081030-01  

 

面板上輸入部分分為數值陣列輸入和開關陣列輸入,數值陣列用來寫入暫存器資料,開關陣列用來寫入輸出入或內部輔助接點狀態


數值陣列是I32格式資料,這點很重要,若設定錯誤會影響到程式處理的結果


開關陣列是依16位元的方式排列成2D陣列,要這樣做是因為32位元開關陣列畫面會擠不下

 

 

完成的程式結構如下圖:

20081030-02  

 

照例是3格流程控制,起始碼、結束碼、通訊參數和關閉通訊埠等不能更改的部份一樣寫到格子外

 


第1格寫入命令的部份

20081030-03  

 

同樣是把所有字串和已算好的偵誤碼組合寫入PLC內

 

個數的字串另外先轉成10進制數值,作為分解寫入資料的依據

 

接下來要做的是把來源資料依一定的方法編寫成PLC能接受的正確資料

 

這裡先用1個Case Structure元件,把要寫入的資料分成16位元和32位元2種類型。分類的方法是把起始暫存器號碼的字串用String Length元件分析,是6個字組成的字串就是16位元,是7個字組成的字串就是32位元

 

 

先說明16位元資料的編寫

 

先要要判定是暫存器資料或接點資料,這裡用Replace Substring元件從起始暫存器號碼的字串取出前2個字,再依據那2個字比對用Case Structure元件把資料分成暫存器或接點類型

 

再來是16位元暫存器資料的處理

20081030-04  

 

先把資料數值轉成I16格式,用For Loop迴圈來分離每筆資料,再用Number To Hexadecimal String元件轉成4個字1組的16進制數值字串,然後依順序串連成單一字串

 

※注意在編碼要把所有的數值從I32格式用To Word Integer元件轉成I16格式,否則編排出的會是8個字1組的字串


再來是16位元接點資料的處理

20081030-05  

 

一樣先把資料個別分成16筆資料1組的1D陣列,然後用Boolean Array To Number元件轉成10進制數值,再用Number To Hexadecimal String元件轉成4個字1組的16進制數值字串,然後依順序串連成單一字串

 


再來說明32位元資料的編寫

 

同樣先要判定是暫存器資料或接點資料,同樣用Replace Substring元件從起始暫存器號碼的字串取出前3個字,再依據那3個字比對用Case Structure元件把資料分成暫存器或接點類型


再來是32位元暫存器資料的處理

20081030-06  

 

先用For Loop迴圈來分離每筆資料,再用Number To Hexadecimal String元件轉成8個字1組的16進制數值字串,然後依順序串連成單一字串


再來是接點資料的處理

20081030-07  

 

先從接點資料用Delete From Array元件分出2組共32筆資料的2D陣列,再用Index Array元件分成16筆資料1組的1D陣列共2組,接著用Build Array元件串連成32筆資料的1D陣列,然後用Boolean Array To Number元件轉成10進制數值,再用Number To Hexadecimal String元件轉成8個字1組的16進制數值字串,然後依順序串連成單一字串

 

※Build Array元件一定要設定成Concatenate Inputs狀態,不然串連出來的會是2D陣列

 


第2格延遲時間同樣設定在120~200ms即可,但寫入的資料非常多時,設定時間還要再增加,才能完整讀到PLC回應字串

20081030-08  

 

第3格同樣用Property Node元件設定為Bytes at Port接收判定PLC回應字串長度

20081030-09  

 

同樣從PLC回應字串的錯誤碼中可以看出是否通訊成功

文章標籤
創作者介紹

LabVIEW & PLC還未出師的小工程師部落格

未出師的小工程師 發表在 痞客邦 PIXNET 留言(0) 人氣()