因為手邊沒有實體的台達PLC硬體可供測試,通訊部分就跳過,先探討操作手冊中的校驗碼計算問題

 


首先是校驗碼的計算說明

20151204-01  


說明只有這樣實在過於簡單,一開始怎麼寫都算不出同樣的結果。台達在校驗碼這邊也算是獨樹一格,沒相關經驗的大概摸不著頭緒

 


完成的程式如下:

20151204-02  


首先通訊字串強制轉為大寫英文字母,因為PLC的通訊控制主要還是以大寫的英文字母和數字為主


再來就是重點部分:三菱、永宏和歐姆龍PLC都是將整個字串每個字元個別轉成ASCII碼數值再計算,而台達PLC則是以每2個字元為一個單位來計算,所以先以迴圈將字串切割成每2個字元為一個單位,再以陣列型式輸出


字串陣列轉換成16進制數值再加總加總後的數值再轉換成無負號8位元格式。轉換成無負號8位元格式的理由是要跳過計算結果溢位的處理問題,同時PLC通訊使用ASCII碼也是8位元格式


最後是2補數計算:找遍相關資料LabVIEW居然沒有現成的元件可用,若轉成布林陣列反向後再轉回數值,計算過程較複雜,同時還要處理位元轉換問題,沒有處理好得到的會是完全不同的計算結果。我採用的是最簡單的方法,直接以16進制數值FF減去加總數值再加1,最後再轉換為2個字元的文字校驗碼

 

根據找到的資料,幾位元的數值就要用相對應的位元數值去換算。台達PLC校驗碼是8位元數值,所以使用2個字節8位元的16進制數值FF來換算。若是16位元數值,要改用4個字節16位元的16進制數值FFFF來換算,其餘以此類推

 


程式執行的結果比對

20151204-03  

20151204-04  

 

20151204-05  

20151204-06  

 

20151204-07  

20151204-08  

, ,

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