因為手邊沒有實體的台達PLC硬體可供測試,通訊部分就跳過,先探討操作手冊中的校驗碼計算問題
首先是校驗碼的計算說明
說明只有這樣實在過於簡單,一開始怎麼寫都算不出同樣的結果。台達在校驗碼這邊也算是獨樹一格,沒相關經驗的大概摸不著頭緒
完成的程式如下:
首先通訊字串強制轉為大寫英文字母,因為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來換算,其餘以此類推
程式執行的結果比對
文章標籤
全站熱搜
留言列表