先分清楚寫法與解讀方式
FFFFH 先描述 16 個位元全部為 1。把它當成 16 位元無號整數時是 65535,當成 16 位元有號二補數時是 −1。改變監看格式並沒有改變 PLC 裡的位元,改變的是你如何解讀它。
| 項目 | 它決定什麼 | 範例 |
|---|---|---|
| 進位 | 數字怎麼寫 | 十進位 255=十六進位 FF |
| 資料寬度 | 總共有幾個 bits | 8、16、32 bits |
| 有號或無號 | 最高位元如何參與數值解讀 | 16 位元 FFFF:−1 或 65535 |
| 資料型態 | 整組位元代表什麼 | 整數、Float32、狀態旗標 |
先把每一位 HEX 看成四個 bits
十六進位使用 0–9、A–F;A=10,F=15。一位 HEX 對應 4 bits,兩位是 1 byte,四位是 16 bits。本篇用 H 或 0x 標示十六進位,兩種寫法都要先確認工具是否接受。
00FDH=15 × 16+13=253
1234H=1 × 4096+2 × 256+3 × 16+4=4660
進位轉換工具若要求純 HEX,就輸入 00FD;若要求 0x 前綴,就輸入 0x00FD。不要把十進位字串 253 輸入 HEX 欄後,還期待得到十進位 253。
親手算一次 16 位元二補數
16 位元有號二補數的範圍是 −32768 至 32767。先把位元當作無號整數 U;若 U 小於 32768,有號值就是 U;若 U 大於或等於 32768,就減掉 65536。
U < 32768 時,S=U
U ≥ 32768 時,S=U − 65536
| 16 位元 HEX | 無號 U | 有號 S |
|---|---|---|
| 0000 | 0 | 0 |
| 00FF | 255 | 255 |
| 7FFF | 32767 | 32767 |
| 8000 | 32768 | −32768 |
| FFF6 | 65526 | −10 |
| FFFF | 65535 | −1 |
由負十算回位元樣式
先寫出正十 000AH,反相得到 FFF5H,再加一得到 FFF6H。也可以計算 65536−10=65526,再轉 HEX,得到同一結果。運算必須限制在 16 bits 的寬度內。
不要把所有最高位為一的值都當成負數
FFFFH 若是狀態字,可能表示 16 個旗標皆為 1;若是 UInt16 計數器,就是 65535;若手冊保留它當錯誤碼,就要依錯誤碼處理。二補數只有在資料型態明確為有號整數時才套用。
資料寬度與轉型常見陷阱
| 位元樣式與寬度 | 無號解讀 | 有號解讀 |
|---|---|---|
| FF,8 bits | 255 | −1 |
| 00FF,16 bits | 255 | 255 |
| FFFF,16 bits | 65535 | −1 |
| 0000FFFF,32 bits | 65535 | 65535 |
| FFFFFFFF,32 bits | 4294967295 | −1 |
把 16 位元有號的 −1 擴成 32 位元有號,需要符號延伸,結果是 FFFFFFFFH。若只是把 FFFFH 放到較低 16 bits、較高 16 bits 填 0,結果是 0000FFFFH,也就是 65535。請分清楚「保留數值的型態轉換」與「複製位元」。
溢位不能靠切換監看格式修好
16 位元有號最大值 32767 再加 1,已超出型態可表示範圍。若某個運算採低 16 bits 回繞,位元會變成 8000H,監看就可能看到 −32768;實際 PLC 指令的溢位旗標與處理方式必須查該指令規格。
兩個暫存器還要核對 word 順序
假設手冊定義高 word 在前,收到 1234H、5678H,組成 12345678H。若定義低 word 在前,同樣兩個 words 則要組成 56781234H。每個暫存器內的 byte 順序與跨暫存器的 word 順序是兩件事。
Float32 的 41C80000H 表示 25.0。把這串 HEX 轉成十進位整數 1103626240,只完成整數進位轉換,還沒有做浮點解碼。
照這個順序使用轉換工具
先從手冊取得型態與寬度,例如 Int16、UInt16 或 Float32。
原始值以 HEX 保存,補足應有位數;16 bits 用四位,32 bits 用八位。
輸入正確進位並指定寬度,分別觀察有號與無號結果。
確認工具的轉換種類:進位轉換、數值轉型、位元重新解讀,三者不要混用。
最後才套用倍率、單位及顯示小數位。
| 練習題 | 答案 |
|---|---|
| FF9CH,以 Int16 解讀 | 65436−65536=−100 |
| FF9CH,以 UInt16 解讀 | 65436 |
| 00FFH,以 Int16 解讀 | 255 |
| FFFFFFFFH,以 Int32 解讀 | −1 |
| FFF6H,以 Int16 且單位 0.1 °C | −1.0 °C |
驗收時留下這四項
原始 HEX、資料寬度、解讀型態、換算後數值。若兩套軟體顯示不同,先比較這四項是否一致,再查是不是資料真的改變。
參考資料與下一步
型態名稱用於說明數值表示,不代表任何特定 PLC 指令語法。需要處理 253 轉 25.3 °C 或 Float32 的差別時,接著閱讀設備倍率與 Float32 判讀。
操作完成後的確認與適用範圍
完成後應看到什麼結果
同一組 16 位元 FFFFH,在 UInt16 監看應為 65535,在 Int16 監看應為 −1;切換顯示格式後,原始 HEX 應維持 FFFF。FFF6H 以 Int16 解讀應為 −10,FF9CH 應為 −100。
將 16 位元的 −1 保留數值轉成 32 位元有號整數後,應得到 FFFFFFFFH;若高 16 bits 填零,0000FFFFH 的 32 位元整數值則為 65535。你應能說明兩者做的是哪一種轉換。
失敗時先查哪裡
先看工具輸入欄是 HEX 還是十進位,再確認是否需要 0x 前綴。
再看寬度與型態:FF、00FF、FFFF 在不同寬度下不能只靠外觀判斷正負。
位元一致但顯示不同:查有號/無號與浮點解碼方式;位元已改變:查資料來源、轉型與運算溢位。
適用型號與限制
適用於以二補數表示的 8、16、32 位元整數,以及 PLC、HMI 或通訊工具中的 HEX 判讀。Q06UDVCPU 專案監看可使用這些數值觀念,但實際指令支援型態、雙字儲存方式與溢位處理仍依三菱指令手冊。
本篇不是通用 PLC 指令語法表。BCD、ASCII、狀態旗標、Float32 與廠商保留碼不能一律套用有號整數公式。QJ71C24N 收到的資料也要依從站資料定義解讀,通訊完成不會替你決定資料意義。