這篇文章要探討的是多個連續單點狀態讀取命令,永宏把這裡分成2個命令,一個是讀取多個連續單點抑能/致能的狀態,一個是讀取多個連續單點的ON/OFF狀態
讀取多個連續單點抑能/致能的命令說明如下:
讀取多個連續單點ON/OFF狀態的命令說明如下:
從上面的說明文件可以看出這2個命令除了命令碼不同外,寫入和讀回的命令字串結構是相同的
命令寫入字串的組成:起始碼+站號+命令碼+個數+起始單點號碼+偵誤碼+結束碼
要注意的是個數是由2個16進制的數值組成,範圍是00~FF,換算成10進制數值是0~255,而永宏把00當成是10進制數值256,因此實際個數的輸入範圍是1~256
起始單點號碼就是要控制的多個連續單點頭1個編號,要注意的是單點類型後面的數值編碼一定是4位數
另外要注意的是接點的數量有固定範圍,當起始單點號碼+個數超過接點有效範圍是會通訊錯誤的
PLC回應字串的組成:起始碼+站號+命令碼+錯誤碼+多個連續單點狀態+偵誤碼+結束碼
多個連續單點狀態的字串是由左至右以低位元往高位元排列
讀取抑能/致能的狀態時,0代表致能,1代表抑能
讀取ON/OFF的狀態時,0代表OFF,1代表ON
程式控制面版的構成如下面圖面
讀取抑能/致能狀態的面版:
讀取ON/OFF狀態的面版:
從圖上可以看出架構完全相同
PLC回應字串是方便觀察用,可以刪除不要
多個連續單點狀態改成由LED陣列顯示,亮燈表示抑能或ON,熄燈表示致能或OFF
完成的程式架構如下圖:
照慣例是3格流程控制,起始碼、結束碼、通訊參數和關閉通訊埠等不能更改的部份一樣寫到格子外
第1格寫入命令的部份
先把起始碼+站號+命令碼+個數+起始單點號碼合成單一字串算出偵誤碼,最後再把所有字串組合寫入PLC
另外要把個數的16進制數值字串轉換成10進制數值,這數值要傳到第3格內,用來拆解多個連續單點狀態的字串
如果不知道0~255如何換算成2個文字的16進制數值,那也可把面版那個個數的文字輸入元件改成用數值輸入元件,直接輸入10進制數值
當然第1格程式的內容也要改正過
首先要限定輸入的數值一定落在1~256之間,數值除以256在取餘數,這樣做的好處是數值等於256時要轉換的數值會自動變成0,然後把餘數轉換成2個16進制的數值文字
接下來就是比照辦理把所有字串和已算好的偵誤碼組合寫入PLC內
第2格延遲時間同樣設定在120~200ms即可,但讀取的點數非常多時,設定時間還要再增加,才能完整讀回所有字串
第3格同樣用Property Node元件設定為Bytes at Port接收判定PLC回應字串長度
再來用Replace Substring元件從PLC回應字串中取出代表多個連續單點狀態的字串,取出的範圍是PLC回應字串的第7個(編號6)開始加上第1格傳來的個數數值,然後用For Loop迴圈把多個連續單點狀態字串一一分解,分別轉成Boolean狀態,再輸出成LED陣列顯示
留言列表