據(jù)類型與進(jìn)制轉(zhuǎn)換:從底層存儲(chǔ)到工程實(shí)戰(zhàn))
1. PLC 數(shù)據(jù)類型是什么為什么第二十三講必須搞明白這一講我們要解決一個(gè)工程里非?;A(chǔ)、但天天踩坑的問(wèn)題PLC 數(shù)據(jù)類型定義與進(jìn)制轉(zhuǎn)換。先直接給結(jié)論P(yáng)LC 程序跑得穩(wěn)不穩(wěn)很多時(shí)候不是邏輯寫錯(cuò)而是數(shù)據(jù)類型選錯(cuò)、進(jìn)制換算錯(cuò)。比如用 INT 存了一個(gè)實(shí)際超過(guò) 32767 的數(shù)值數(shù)據(jù)直接溢出用浮點(diǎn)數(shù)做精確計(jì)數(shù)累加多了出現(xiàn)誤差和別人設(shè)備通信時(shí)Modbus 寄存器讀到的是十六進(jìn)制要拼成十進(jìn)制才知道實(shí)際溫度觸摸屏上顯示的是 100PLC 里卻是 0x64不懂進(jìn)制轉(zhuǎn)換排查一下午都找不到原因。這一講的內(nèi)容適合這幾類讀者剛?cè)腴T PLC 編程還在搞不懂位、字節(jié)、字、雙字的區(qū)別做設(shè)備維護(hù)經(jīng)常遇到觸摸屏數(shù)值顯示不對(duì)、通信數(shù)據(jù)對(duì)不上需要和第三方設(shè)備走 Modbus、TCP/IP 通信要手動(dòng)解析寄存器數(shù)據(jù)自學(xué)西門子、三菱、匯川等品牌 PLC想一次性把數(shù)據(jù)類型和進(jìn)制轉(zhuǎn)換的關(guān)系理清楚。本文會(huì)圍繞五個(gè)部分展開PLC 數(shù)據(jù)類型的底層存儲(chǔ)邏輯、位/字節(jié)/字/雙字/浮點(diǎn)數(shù)的區(qū)別、進(jìn)制轉(zhuǎn)換的工程實(shí)操方法、觸摸屏與通信場(chǎng)景中的數(shù)據(jù)換算以及常見錯(cuò)誤排查清單。無(wú)論你用的是西門子博途、三菱 GX Works還是匯川 InoProShop底層的存儲(chǔ)原理是一致的。把這講內(nèi)容吃透后面學(xué)運(yùn)動(dòng)控制、伺服通信、PID 運(yùn)算都會(huì)輕松很多。2. PLC 核心能力速覽能力項(xiàng)說(shuō)明適用范圍西門子、三菱、匯川、歐姆龍、臺(tái)達(dá)等主流 PLC 編程數(shù)據(jù)類型位 BOOL、字節(jié) BYTE、整數(shù) INT/DINT、浮點(diǎn)數(shù) REAL/LREAL、字符串 STRING核心痛點(diǎn)數(shù)據(jù)類型溢出、數(shù)據(jù)長(zhǎng)度不匹配、通信寄存器解析錯(cuò)誤進(jìn)制使用場(chǎng)景Modbus 通信、觸摸屏地址映射、PID 參數(shù)計(jì)算、變頻器控制字操作工具計(jì)算器程序員模式、博途監(jiān)控表、GX Works 軟元件批量監(jiān)控常見錯(cuò)誤INT 溢出、REAL 精度丟失、十六進(jìn)制與十進(jìn)制混淆、字節(jié)順序錯(cuò)誤這里要強(qiáng)調(diào)一點(diǎn)不同品牌 PLC 對(duì)數(shù)據(jù)類型的關(guān)鍵字命名有差異比如西門子用 DINT 表示雙整數(shù)三菱用 D 寄存器配合 BIN/BCD 指令匯川與西門子風(fēng)格接近。但數(shù)據(jù)在內(nèi)存里的長(zhǎng)度和取值范圍是統(tǒng)一的。搞清楚底層位數(shù)換品牌只是換指令名字的問(wèn)題。3. PLC 數(shù)據(jù)類型的底層存儲(chǔ)邏輯PLC 本質(zhì)上是一臺(tái)工業(yè)專用計(jì)算機(jī)所有數(shù)據(jù)在 CPU 內(nèi)部都以二進(jìn)制存儲(chǔ)。一個(gè)二進(jìn)制的位只有 0 和 1 兩個(gè)狀態(tài)多個(gè)位組合起來(lái)就能表示更大的數(shù)。以最常用的 16 位整數(shù)為例它的存儲(chǔ)范圍是 -32768 到 32767。PLC 用最高位第 15 位表示符號(hào)0 為正、1 為負(fù)剩下 15 位表示數(shù)值。這里有一個(gè)容易踩坑的點(diǎn)很多人以為 INT 可以存到 65535實(shí)際這是無(wú)符號(hào) WORD 的范圍不是 INT。再往上就是 32 位數(shù)據(jù)。DINT雙整數(shù)用 32 位存儲(chǔ)范圍約 -21 億到 21 億REAL浮點(diǎn)數(shù)也用 32 位存儲(chǔ)但內(nèi)部把 32 位拆成了符號(hào)位、指數(shù)位和尾數(shù)位所以它能表示很大或很小的數(shù)但精度有限。這也是為什么累計(jì)計(jì)數(shù)、錢款計(jì)算這類需求不建議用 REAL而要用 LREAL 或 DINT。下面用一個(gè)表格總結(jié)最常見的 PLC 數(shù)據(jù)類型數(shù)據(jù)類型位寬取值范圍典型用途BOOL1 位TRUE / FALSE啟停信號(hào)、報(bào)警狀態(tài)、按鈕輸入BYTE8 位0 到 255ASCII 碼、小范圍狀態(tài)值、通信字節(jié)WORD16 位0 到 65535Modbus 寄存器原始值、狀態(tài)字INT16 位-32768 到 32767普通整數(shù)運(yùn)算、模擬量標(biāo)定DINT32 位-2147483648 到 2147483647大數(shù)計(jì)數(shù)、累計(jì)量、位置值REAL32 位約 ±3.4e38溫度、壓力、流量等模擬量運(yùn)算LREAL64 位約 ±1.7e308高精度浮點(diǎn)運(yùn)算STRING8 位/字符與長(zhǎng)度有關(guān)設(shè)備名稱、故障信息、配方名這張表是所有 PLC 程序設(shè)計(jì)的基石。任何一個(gè)變量都要先想清楚它最大可能到多少再?zèng)Q定用哪種類型。比如一個(gè)設(shè)備運(yùn)行次數(shù)計(jì)數(shù)器用 INT 可能在半年后溢出但用 DINT 能跑幾十年。4. PLC 進(jìn)制轉(zhuǎn)換基礎(chǔ)二進(jìn)制、十進(jìn)制、十六進(jìn)制PLC 編程里最常用的進(jìn)制是二進(jìn)制、十進(jìn)制、十六進(jìn)制偶爾會(huì)用到 BCD 碼。二進(jìn)制是 CPU 的唯一語(yǔ)言每一位只能是 0 或 1。十進(jìn)制是人類習(xí)慣的表示方式。十六進(jìn)制是二進(jìn)制的縮寫形式每 4 位二進(jìn)制對(duì)應(yīng) 1 位十六進(jìn)制方便閱讀和書寫。對(duì)應(yīng)關(guān)系如下二進(jìn)制 0000 0001 0010 0011 0100 0101 0110 0111 十六 0 1 2 3 4 5 6 7 十進(jìn)制 0 1 2 3 4 5 6 7 二進(jìn)制 1000 1001 1010 1011 1100 1101 1110 1111 十六 8 9 A B C D E F 十進(jìn)制 8 9 10 11 12 13 14 15在 PLC 程序里一個(gè) 16 位數(shù)據(jù)用十六進(jìn)制表示就是 4 位比如 16#1F4用二進(jìn)制表示就是 16 位比如 2#0000000111110100可讀性差很多。因此編程軟件默認(rèn)會(huì)用十六進(jìn)制顯示通信數(shù)據(jù)和原始寄存器值。這里必須區(qū)分 BCD 碼和十六進(jìn)制。BCD 碼是用 4 位二進(jìn)制表示一位十進(jìn)制數(shù)比如十進(jìn)制 25 的 BCD 編碼是 0010 0101而十六進(jìn)制 0x25 的十進(jìn)制值是 37。很多老設(shè)備、溫控器、電子秤的輸出就是 BCD 碼如果程序里當(dāng)成普通十六進(jìn)制處理數(shù)值會(huì)直接偏掉。工程中進(jìn)制轉(zhuǎn)換最直接的方法是使用電腦計(jì)算器的程序員模式。Windows 自帶的計(jì)算器切到程序員模式后可以在 HEX、DEC、OCT、BIN 之間切換輸入一個(gè)值會(huì)自動(dòng)顯示其他進(jìn)制結(jié)果。比如在 HEX 里輸入 1F4切換到 DEC 就得到 500再切到 BIN 就是 0000000111110100。但不要過(guò)度依賴計(jì)算器PLC 程序里也會(huì)用到進(jìn)制轉(zhuǎn)換指令。比如西門子的 BCD_I 可以把 BCD 碼轉(zhuǎn)成整數(shù)I_BCD 可以把整數(shù)轉(zhuǎn)成 BCD 碼三菱的 BIN 和 BCD 指令功能類似匯川的博途風(fēng)格指令也支持類似操作。5. PLC 數(shù)據(jù)類型詳解與常見應(yīng)用場(chǎng)景5.1 BOOL 位數(shù)據(jù)BOOL 是最基礎(chǔ)的數(shù)據(jù)類型只占 1 位值只能是 TRUE 或 FALSE。在梯形圖里常開觸點(diǎn)、常閉觸點(diǎn)、線圈都基于 BOOL 邏輯。輸入端子映射到 I 區(qū)輸出端子映射到 Q 區(qū)中間繼電器映射到 M 區(qū)都是 BOOL 類型。使用 BOOL 時(shí)要注意物理輸入和程序邏輯的常開常閉關(guān)系。比如急停按鈕硬件上通常接常閉觸點(diǎn)程序里再用常開指令讀取這樣斷線時(shí)設(shè)備也能停下來(lái)這是安全回路設(shè)計(jì)的基本原則。5.2 BYTE、WORD、DWORD 無(wú)符號(hào)數(shù)據(jù)BYTE 是 8 位WORD 是 16 位DWORD 是 32 位它們都只能表示非負(fù)整數(shù)。為什么需要無(wú)符號(hào)類型因?yàn)橛行?shù)據(jù)天然沒(méi)有負(fù)數(shù)比如設(shè)備狀態(tài)字、報(bào)警位映射、通信協(xié)議里的寄存器原始值。用無(wú)符號(hào)類型可以避免符號(hào)擴(kuò)展帶來(lái)的麻煩。舉個(gè)例子Modbus 讀取回來(lái)的保持寄存器原始值就是一個(gè) 16 位 WORD。如果兩個(gè)寄存器拼成一個(gè) 32 位浮點(diǎn)或 DWORD就要注意高低字節(jié)順序。不同設(shè)備有 Big-Endian 和 Little-Endian 之分解析錯(cuò)了數(shù)值會(huì)變得非常離譜。5.3 INT、DINT 有符號(hào)整數(shù)INT 是 16 位有符號(hào)整數(shù)DINT 是 32 位有符號(hào)整數(shù)。這是程序里最常用的計(jì)算類型。一個(gè)典型問(wèn)題是模擬量處理。當(dāng) 4-20mA 或 0-10V 信號(hào)進(jìn)入 PLC模擬量模塊會(huì)把電流或電壓轉(zhuǎn)換成數(shù)字量。西門子 S7-1200 的默認(rèn)范圍是 0 到 27648三菱 FX 系列常見范圍是 0 到 4000。如果直接把原始值當(dāng)成工程量去顯示肯定不對(duì)必須先做標(biāo)定換算。比如 4-20mA 對(duì)應(yīng)溫度 0-100 度采集到的原始值是 13824按公式工程值 原始值 / 滿量程 * (上限 - 下限) 下限先判斷量程范圍是 0 到 27648還是 0 到 4000再計(jì)算結(jié)果。這個(gè)換算過(guò)程里數(shù)據(jù)類型選錯(cuò)會(huì)直接導(dǎo)致負(fù)數(shù)或溢出。5.4 REAL、LREAL 浮點(diǎn)數(shù)REAL 是 32 位單精度浮點(diǎn)數(shù)LREAL 是 64 位雙精度浮點(diǎn)數(shù)。溫度、壓力、流量、速度這些模擬量通常都用浮點(diǎn)數(shù)參與運(yùn)算。REAL 的精度大約 7 位有效數(shù)字??雌饋?lái)精度夠用但做累積計(jì)算時(shí)誤差會(huì)逐漸放大。比如把一個(gè)很小的值反復(fù)累加 100 萬(wàn)次REAL 可能出現(xiàn)明顯偏差LREAL 會(huì)好很多。另一個(gè)坑是 EQUAL 比較。兩個(gè)浮點(diǎn)數(shù)不要直接比較是否相等而是比較差值是否小于某個(gè)閾值A(chǔ)BS(value1 - value2) 0.001在博途里可以用 EQ 指令配合 ABS 函數(shù)在三菱里可以用 ZCP 區(qū)間比較或者子程序里做減法判斷。5.5 STRING 字符串STRING 用于存放設(shè)備名稱、報(bào)警信息、配方名、JSON 字符串。西門子 STRING 的默認(rèn)長(zhǎng)度是 254 個(gè)字符占用空間是長(zhǎng)度加 2 個(gè)字節(jié)管理位。三菱和匯川的字符串處理風(fēng)格不同有的用了指針結(jié)構(gòu)通信解析時(shí)要特別注意長(zhǎng)度前綴。通信場(chǎng)景里字符串經(jīng)常要和 BYTE 數(shù)組互相轉(zhuǎn)換。比如用 C# 和西門子 PLC 通過(guò) S7 協(xié)議通信讀取到的字符串需要按字節(jié)解析寫入時(shí)也要把 C# 字符串轉(zhuǎn)成 PLC 要求的格式否則會(huì)出現(xiàn)亂碼。6. PLC 進(jìn)制轉(zhuǎn)換實(shí)操模擬量標(biāo)定與通信數(shù)據(jù)解析6.1 實(shí)操場(chǎng)景一4-20mA 溫度信號(hào)換算設(shè)備上有一個(gè) 4-20mA 輸出的溫度變送器量程 0-150 度PLC 模擬量模塊采集到的原始值是 12000。這里要先用計(jì)算器把十進(jìn)制 12000 轉(zhuǎn)成十六進(jìn)制確認(rèn)數(shù)據(jù)沒(méi)有符號(hào)溢出。直接算工程值工程值 12000 / 27648 * 150 - 0 工程值 ≈ 65.1 度如果把原始值當(dāng)成 INT 讀取且模塊是 12 位分辨率原始值可能是 3000 而不是 12000因?yàn)椴煌直媛氏旅亢涟矊?duì)應(yīng)的數(shù)字量不同。使用前必須先查模塊手冊(cè)。建議在程序里寫一個(gè)模擬量標(biāo)定功能塊輸入原始值和量程上下限輸出工程值后面所有通道都復(fù)用這個(gè)功能塊。6.2 實(shí)操場(chǎng)景二Modbus 寄存器讀取變頻器頻率通過(guò) Modbus RTU 讀取變頻器運(yùn)行頻率寄存器地址 0x2100返回 16 位數(shù)據(jù)。變頻器手冊(cè)規(guī)定實(shí)際頻率 寄存器值 / 100單位 Hz。假設(shè)讀取到寄存器值十六進(jìn)制 0x0BB8用計(jì)算器切換到 DEX 得到 3000再除以 100 得到 30.00 Hz。在博途里可以用 MOVE 指令把讀取的 WORD 移到 INT 變量再除以 100 轉(zhuǎn)成 REAL 顯示。在三菱里使用 FROM 指令讀取后進(jìn)行同樣的換算。這里最容易錯(cuò)的是溢出。如果寄存器值是 0xFFFF在無(wú)符號(hào) WORD 里代表 65535但轉(zhuǎn)成 INT 會(huì)變成 -1。因此通信解析時(shí)要嚴(yán)格區(qū)分有符號(hào)和 無(wú)符號(hào)。Modbus 的保持寄存器本質(zhì)是無(wú)符號(hào) 16 位但很多設(shè)備會(huì)把負(fù)數(shù)編碼成有符號(hào)整數(shù)解析方式取決于設(shè)備手冊(cè)。6.3 實(shí)操場(chǎng)景三BCD 碼解析電子秤數(shù)據(jù)很多電子秤、溫控器、老式儀表輸出的是 BCD 碼。比如 BCD 碼數(shù)據(jù) 0x1234表示十進(jìn)制 1234不是十六進(jìn)制的 4660。在西門子里用 BCD_I 指令把 BCD 碼轉(zhuǎn)成 INT得到 1234。在三菱里用 BCD 和 BIN 指令進(jìn)行互轉(zhuǎn)。匯川的指令集與西門子類似可以在指令幫助里搜索 BCD。如果通信讀取的數(shù)據(jù)不符合 BCD 編碼規(guī)則比如出現(xiàn) A-F 的位轉(zhuǎn)換結(jié)果可能直接報(bào)錯(cuò)或得到錯(cuò)誤值。這時(shí)先檢查設(shè)備手冊(cè)確認(rèn)數(shù)據(jù)格式是 BCD 還是普通十六進(jìn)制。6.4 實(shí)操場(chǎng)景四DWORD 拆分與組合有些通信協(xié)議會(huì)把 32 位數(shù)據(jù)拆成兩個(gè) 16 位寄存器發(fā)送。比如流量計(jì)輸出累計(jì)流量高 16 位存一個(gè)寄存器低 16 位存另一個(gè)寄存器。讀取后要把兩個(gè) WORD 組合成 DWORDDWORD_value HIGH_word * 65536 LOW_word如果 PLC 的字符串指令支持也可以使用移位和或運(yùn)算DWORD_value (HIGH_word 16) | LOW_word注意不同設(shè)備可能先發(fā)高字節(jié)再發(fā)低字節(jié)也可能相反。正確解析前先用固定測(cè)試值驗(yàn)證字節(jié)序。比如設(shè)備手冊(cè)說(shuō)發(fā)送 0x12345678看先到的是 0x1234 還是 0x5678。7. 觸摸屏與 PLC 數(shù)據(jù)類型映射觸摸屏組態(tài)時(shí)地址類型和 PLC 數(shù)據(jù)類型必須一致。常見錯(cuò)誤包括觸摸屏上建了一個(gè) INTPLC 里卻是 REALPLC 里是 DINT觸摸屏卻按 DWORD 讀取導(dǎo)致負(fù)數(shù)和正數(shù)顯示錯(cuò)亂。以西門子 Smart Line 觸摸屏和 S7-200 SMART PLC 為例地址映射規(guī)則如下觸摸屏地址PLC 數(shù)據(jù)區(qū)數(shù)據(jù)類型說(shuō)明I0.0輸入位BOOL按鈕/開關(guān)狀態(tài)Q0.0輸出位BOOL電機(jī)/閥門輸出VW100V 區(qū)字INT/WORD16 位數(shù)據(jù)VD200V 區(qū)雙字DINT/REAL32 位數(shù)據(jù)在博途的 WinCC 組態(tài)里連接 S7-1200 時(shí)直接選擇 PLC 變量類型會(huì)自動(dòng)帶入。但如果是和第三方設(shè)備通信或者用觸摸屏直接讀 Modbus 從站就要手動(dòng)指定字節(jié)順序、數(shù)據(jù)類型和數(shù)據(jù)長(zhǎng)度。很多觸摸屏有數(shù)據(jù)格式設(shè)置可以選擇 BCD、HEX、DEC 等顯示方式選錯(cuò)會(huì)出現(xiàn)一個(gè)值對(duì)不上的問(wèn)題。如果出現(xiàn)觸摸屏顯示值和 PLC 監(jiān)控值不一致先做三件事確認(rèn)觸摸屏和 PLC 連接是否建立通信狀態(tài)是否正常確認(rèn)地址是否偏移西門子 V 區(qū)地址和 Modbus 地址存在差一或差二的情況確認(rèn)數(shù)據(jù)類型和數(shù)據(jù)格式REAL 按 DINT 讀取浮點(diǎn)數(shù)會(huì)變成奇怪的數(shù)字。8. PLC 數(shù)據(jù)類型與進(jìn)制轉(zhuǎn)換常見問(wèn)題排查問(wèn)題現(xiàn)象可能原因排查方式解決方案數(shù)值超過(guò) 32767 變成負(fù)數(shù)INT 溢出打開監(jiān)控表查看變量類型改為 DINT 或使用無(wú)符號(hào) WORD觸摸屏顯示值和 PLC 不一致地址偏移或數(shù)據(jù)類型不一致對(duì)比觸摸屏地址和 PLC 變量地址核對(duì)地址映射表統(tǒng)一數(shù)據(jù)類型Modbus 讀取結(jié)果異常大有符號(hào)/無(wú)符號(hào)解析錯(cuò)誤用計(jì)算器查看十六進(jìn)制確認(rèn)設(shè)備手冊(cè)按手冊(cè)規(guī)定用 WORD 或 INT 解析浮點(diǎn)數(shù)累計(jì)誤差越來(lái)越大REAL 精度不足查看累計(jì)次數(shù)和數(shù)值范圍改用 LREAL 或 DINT 計(jì)數(shù)BCD 碼解析結(jié)果偏了把 BCD 當(dāng)十六進(jìn)制處理確認(rèn)設(shè)備輸出格式為 BCD使用 BCD_I 或 BIN 指令轉(zhuǎn)換通信數(shù)據(jù)高低字節(jié)反了字節(jié)序錯(cuò)誤用固定值 0x1234 測(cè)試交換高字節(jié)低字節(jié)或修改組態(tài)模擬量原始值跳變數(shù)據(jù)類型長(zhǎng)度不匹配檢查模擬量模塊分辨率確認(rèn)范圍 0-27648 / 0-4000 / 0-4095字符串顯示亂碼字符串格式不一致查看 PLC 字符串管理字節(jié)按 PLC 品牌格式轉(zhuǎn)換字符串前面講到的這些排查方法核心思路只有一個(gè)先回到二進(jìn)制層面看數(shù)據(jù)再回到 PLC 變量類型看解釋方式。數(shù)據(jù)是一樣的解釋方式不同結(jié)果就完全不同。9. PLC 數(shù)據(jù)類型與進(jìn)制轉(zhuǎn)換最佳實(shí)踐這一節(jié)直接給出工程建議照著做能避開大多數(shù)數(shù)據(jù)類型相關(guān)的坑。第一建立統(tǒng)一的變量命名規(guī)范。命名里帶類型前綴例如bStart // BOOL 啟動(dòng)信號(hào) wStatusWord // WORD 狀態(tài)字 iTemperature // INT 溫度原始值 diCounter // DINT 累計(jì)次數(shù) rPressure // REAL 壓力工程值這樣寫梯形圖時(shí)看到變量名就能判斷它是什么類型不易搞混。第二模擬量通道統(tǒng)一使用功能塊。把原始值到工程值的換算封裝成一個(gè)功能塊輸入量程上下限和原始值輸出工程值。比如西門子 FC / FB 里做一個(gè) Analog_Scale 塊三菱和匯川也可以做類似子程序。這樣更換量程時(shí)不需要改主程序只改參數(shù)。第三通信地址和類型做成配置文件。如果項(xiàng)目里要對(duì)接多個(gè)從站設(shè)備建議把設(shè)備地址、寄存器起始地址、數(shù)據(jù)類型、字節(jié)序、縮放系數(shù)都放在一個(gè)數(shù)據(jù)結(jié)構(gòu)里統(tǒng)一解析。排查問(wèn)題時(shí)只需要比對(duì)配置表和設(shè)備手冊(cè)不需要一行行看梯形圖。第四批量任務(wù)和批量監(jiān)控要有分層。比如一套設(shè)備有 8 個(gè)溫度通道建議用數(shù)組或結(jié)構(gòu)體數(shù)組管理數(shù)據(jù)。西門子里可以用 UDT 定義結(jié)構(gòu)體三菱里可以用文件寄存器加變址尋址。這樣批量下裝、批量監(jiān)控、批量修改參數(shù)都會(huì)方便很多。第五進(jìn)制轉(zhuǎn)換要保留計(jì)算過(guò)程和注釋。比如寫模擬量標(biāo)定時(shí)注釋里寫清量程、原始范圍、換算公式寫 Modbus 解析時(shí)注釋里寫清映射地址和數(shù)據(jù)類型。半年后維護(hù)程序這些注釋能救命。第六在線下載前先備份原程序下載時(shí)選擇只下載修改內(nèi)容避免因?yàn)閺?qiáng)制賦值導(dǎo)致設(shè)備狀態(tài)變化。涉及實(shí)際設(shè)備的修改一定要先切到手動(dòng)模式或安全狀態(tài)。10. 總結(jié)與下一步這一講把 PLC 數(shù)據(jù)類型和進(jìn)制轉(zhuǎn)換放在一起講是因?yàn)樗鼈冊(cè)诠こ讨懈痉植婚_。類型決定了數(shù)據(jù)在內(nèi)存中的解釋方式進(jìn)制決定了外部通信和顯示時(shí)的數(shù)值呈現(xiàn)形式。任何一方搞錯(cuò)程序邏輯再正確最終出來(lái)的數(shù)據(jù)也是錯(cuò)的。最值得先動(dòng)手驗(yàn)證的事情是打開你正在用的 PLC 編程軟件新建一個(gè)監(jiān)控表用不同類型的變量存儲(chǔ)同一個(gè)十六進(jìn)制值觀察顯示結(jié)果。比如把 0xFFFF 分別放到 WORD 和 INT 里你會(huì)看到一個(gè)是 65535一個(gè)是 -1。這個(gè)實(shí)驗(yàn)做完了你對(duì)數(shù)據(jù)類型和進(jìn)制轉(zhuǎn)換的理解會(huì)上一個(gè)臺(tái)階。最容易踩的坑就是模擬量處理和通信協(xié)議解析時(shí)不查手冊(cè)憑經(jīng)驗(yàn)猜測(cè)數(shù)據(jù)范圍和字節(jié)序。不同廠家分辨率不同、地址偏移不同、字節(jié)序不同動(dòng)手前先花五分鐘確認(rèn)手冊(cè)能省掉幾個(gè)小時(shí)排查時(shí)間。后續(xù)可以繼續(xù)擴(kuò)展的方向PLC 數(shù)組與結(jié)構(gòu)體、Modbus RTU/TCP 通信實(shí)戰(zhàn)、模擬量 PID 控制、PLC 與上位機(jī) C# 通信、觸摸屏報(bào)警系統(tǒng)和配方管理。把這些串起來(lái)你就能獨(dú)立完成一個(gè)完整設(shè)備的程序設(shè)計(jì)和調(diào)試。建議收藏備用。下一講如果有機(jī)會(huì)可以繼續(xù)剖析 PLC 工程師查故障的通用思路用案例串講數(shù)據(jù)類型、通信報(bào)文和設(shè)備動(dòng)作的聯(lián)動(dòng)關(guān)系。