Modbus 的高位低位轉換問題。

各位 30cm 大大, 你們好
我最近遇到難題....

客戶要輸入手機號碼給 PLC1, 然後透過 Modbus 給另外一台 PLC2,
兩台 PLC 都年代久遠, 支援的格式都很有限....

PLC2 接受 int, Dint 這兩種,
int = 國碼,用來輸入:886
Dint = 電話號碼,用來輸入:901 010 101

PLC1 只接受 int (最大999,999),
所以對應 int(國碼), 不是問題, 但是對應 Dint 就出現問題了,

我用兩個 int 對應一個 Dint 是沒問題的, 但是數值解碼就很頭痛了,
PLC1 採用的格式是 ABCD, PLC2 採用的格式是 CDAB
所以....
假定手機號碼為:
901010101 二進制為 00110101 10110100 01010010 10110101

為了要能夠讓 PLC2 正確解讀,我必須人工翻轉為:
01010010 10110101 00110101 10110100 十進制為 21173 13748
然後將這兩個數字個別寫入不同的 int register

由於 PLC1 只能做四則運算 ( + - * / ) 以及邏輯運算 ( AND OR XOR ),
想問各位大大有沒有辦法用
【四則運算】或【邏輯運算】就將一段十進制的數字拆解並翻轉成兩段十進制的數字呢?
2023-02-13 18:37 發佈
翻轉的部分
如果是三菱的話用 DROR D K16 看可不可以?
32位元右旋轉,
以16位元為單位,下位元一次循環位移上去,上位元被擠下來
AntonyCyue wrote:
各位 30cm 大大...(恕刪)


沒做過PLC,若要交換高低位,以程式邏輯的4則運算可以這樣做
如果可以轉成16進制 :
0901010101(dec) = 35B452B5(hex)
1. 將35B452B5(hex) 除以 65536 = 35B4 (已經將高位變成低位)
2. 將(35B452B5(hex) AND 000052B5 ) 乘以65536(把低位變成高位) = 52B50000
3. 35B4 OR 52B50000 = 52B535B4
就達成了交換
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?