王通過TCP與MCGS觸摸屏通訊配置與排錯)
我手上做過的泵站、水處理和幾條包裝線項目上位機清一色是組態(tài)王現(xiàn)場操作面板則基本被MCGS的TPC系列觸摸屏占滿這兩家的東西湊在一條產(chǎn)線上是常態(tài)。早年中間靠一根RS485串線硬拉碰上變頻器一開、地電位一偏通訊就開始抽風維護工半夜打電話說畫面全是問號。后來我把能上網(wǎng)口的場子全改成走TCP一條網(wǎng)線過去干擾問題基本消失調(diào)試也從拿著萬用表量電壓變成了打開調(diào)試助手看報文。這篇就說清楚組態(tài)王通過TCP和MCGS觸屏通訊這件事它到底是什么、能解決哪些現(xiàn)場問題、從零到跑通要做哪幾步、參數(shù)怎么配、地址怎么對、壞了怎么查適合剛接手上位機聯(lián)調(diào)的朋友也適合已經(jīng)會點組態(tài)但被跨品牌通訊卡過的老手。1. 先把需求想清楚為什么非得讓這兩家走TCP1.1 一個典型現(xiàn)場上位機和觸摸屏各自為戰(zhàn)我遇到最多的場景是這樣的中控室里放一臺工控機跑組態(tài)王負責全廠數(shù)據(jù)匯總、報表、報警記錄和遠程操作現(xiàn)場每臺設(shè)備旁邊裝一塊MCGS觸摸屏負責本地操作、參數(shù)設(shè)置和狀態(tài)顯示。這就帶來一個問題兩邊都要看同一批數(shù)據(jù)也得能互相下發(fā)指令。傳統(tǒng)做法是各接各的PLC組態(tài)王從PLC讀觸摸屏也從PLC讀兩條通道互不相干。聽起來挺干凈但現(xiàn)場一跑就露餡——兩次讀取的時間點不一樣中控看到的電流值和現(xiàn)場屏上差了半秒操作工按了屏上的啟動中控畫面要等一兩秒才變色遇上工藝要求高的場合這種不同步就是事故隱患。另一種更常見的場景是改造老設(shè)備只有觸摸屏做本地控制甲方突然要求把數(shù)據(jù)上傳到中控。這時PLC的通訊口可能已經(jīng)被觸摸屏占死了或者PLC根本沒有空閑網(wǎng)口唯一能動的就是觸摸屏那個網(wǎng)口。讓觸摸屏把數(shù)據(jù)轉(zhuǎn)出來給組態(tài)王是最省事的一條路。觸摸屏在這里扮演的是數(shù)據(jù)網(wǎng)關(guān)它自己跟PLC照常通訊同時開一個TCP服務端把需要共享的變量放到寄存器區(qū)里等組態(tài)王來讀。理解了這個背景就明白為什么說組態(tài)王通過TCP和MCGS觸屏通訊本質(zhì)上是解決跨品牌、跨設(shè)備的數(shù)據(jù)共享與操作同步問題。它不是簡單地連個網(wǎng)而是把兩塊原本獨立的控制系統(tǒng)拼成一張網(wǎng)。1.2 三種可行鏈路我逐個拆給你看把組態(tài)王和MCGS觸屏用TCP串起來落到實操上有三條路我按現(xiàn)場使用頻率從高到低排方案角色分配數(shù)據(jù)格式開發(fā)量適用場景Modbus TCP從站模式觸摸屏做服務端組態(tài)王做客戶端標準Modbus報文小純配置90%的常規(guī)項目自定義TCP透傳一方服務端一方客戶端收發(fā)原始字節(jié)自定報文中需定協(xié)議特殊數(shù)據(jù)、大數(shù)據(jù)量、私有格式中間網(wǎng)關(guān)/OPC中轉(zhuǎn)第三方軟件或網(wǎng)關(guān)做橋各自協(xié)議大多一層多品牌混雜、點數(shù)極多先說Modbus TCP從站模式這是我筆記本里存得最熟的一套。MCGS觸摸屏里掛一個通用TCP/IP父設(shè)備加一個ModbusTCP子設(shè)備把屏設(shè)成服務端端口默認502屏內(nèi)部的、需要共享的變量通過通道連接掛到4區(qū)保持寄存器上。組態(tài)王那邊新建一個ModbusTCP設(shè)備IP填觸摸屏地址端口填502站號跟屏上設(shè)的從站號一致變量連到對應的40001這類地址。整條鏈路不用寫一行代碼全靠配置穩(wěn)定性和可維護性最好。再講自定義TCP透傳。有些項目傳輸?shù)牟皇呛唵蔚拈_關(guān)量而是一整條工藝配方或者幾百字節(jié)的流水數(shù)據(jù)用Modbus一區(qū)一區(qū)拼會很別扭。這時候可以用MCGS的網(wǎng)口收發(fā)驅(qū)動或者TCP/IP透傳屏和上位機之間直接收發(fā)字節(jié)流報文格式自己定比如幀頭加長度加數(shù)據(jù)加校驗。好處是靈活壞處是協(xié)議要自己維護雙方字節(jié)序、幀同步、粘包處理都得考慮調(diào)試成本明顯上去。我一般只在Modbus實在裝不下的時候才走這條路。最后是第三方中轉(zhuǎn)。比如現(xiàn)場PLC是西門子的觸摸屏和PLC走的是廠商私有協(xié)議同時還要跟另外幾個品牌的設(shè)備連這時中間放一臺網(wǎng)關(guān)做協(xié)議轉(zhuǎn)換兩邊各自對接。這種方案點數(shù)多了以后反而清晰但多一層設(shè)備就多一個故障點預算也上去了。小項目真心不建議。提示選方案前先數(shù)清楚要共享多少點、是什么類型。幾十個開關(guān)量加模擬量無腦選Modbus TCP超過幾百點且刷新要求高再考慮透傳或網(wǎng)關(guān)。1.3 網(wǎng)絡(luò)拓撲和硬件準備別在這步偷懶拓撲上我推薦星型結(jié)構(gòu)別用手拉手串著接。中控工控機、觸摸屏、PLC全接到一臺工業(yè)交換機上各占一個口。原因很簡單串著接一臺設(shè)備網(wǎng)口壞了下游全斷排查起來要命星型接法里拔掉哪根線影響誰一目了然。硬件上要留意三件事。第一觸摸屏的網(wǎng)口數(shù)量。TPC系列很多型號只有一個以太網(wǎng)口這個口如果已經(jīng)用來連PLC那它跟組態(tài)王通訊就得共用這個口屏內(nèi)部做協(xié)議轉(zhuǎn)發(fā)這是完全可行的但要確認屏的固件和驅(qū)動版本支持多設(shè)備并發(fā)。第二IP規(guī)劃。我習慣把觸摸屏放在100段以后的固定地址比如192.168.1.101、192.168.1.102中控工控機放192.168.1.10PLC放192.168.1.11起同一網(wǎng)段、同一子網(wǎng)掩碼255.255.255.0地址表寫在工程文檔里后期誰接手都不迷糊。第三交換機。別拿家用幾十塊的路由器湊合工業(yè)現(xiàn)場振動、溫度、電磁干擾都不是消費級設(shè)備扛得住的選帶導軌安裝、支持冗余電源的工業(yè)交換機幾百塊的東西能省掉無數(shù)扯皮。2. TCP通訊繞不開的基礎(chǔ)細節(jié)2.1 三次握手和長連接在組態(tài)軟件里意味著什么很多人一提到TCP就頭大其實對做組態(tài)的人來說不需要背協(xié)議規(guī)范只要理解連接是怎么建立的、什么時候斷。客戶端發(fā)起連接時先發(fā)一個同步包服務端回一個同步加確認客戶端再回一個確認這就是三次握手三下交互完鏈路才算通。之后數(shù)據(jù)就可以雙向跑了。這個動作在Modbus TCP里就是組態(tài)王作為客戶端去連觸摸屏502端口的過程正常情況下幾十毫秒就完成。關(guān)鍵在于長連接還是短連接。Modbus TCP標準做法是長連接組態(tài)王連上觸摸屏后這條通道一直保持后續(xù)每次讀寫都在這條通道上發(fā)報文不再重復握手。長連接的好處是響應快、開銷小壞處是一旦鏈路中間斷了比如交換機重啟、網(wǎng)線被碰掉客戶端如果不知道斷開就會一直往死連接里發(fā)數(shù)據(jù)畫面數(shù)據(jù)全部卡住不變。這就引出組態(tài)王里兩個重要參數(shù)通訊超時時間和通訊故障恢復時間。超時時間決定發(fā)出去多久沒回應就判定為失敗我一般設(shè)1000毫秒恢復時間決定判定失敗后隔多久重試我設(shè)3000到5000毫秒。這兩個值設(shè)得太短網(wǎng)絡(luò)稍微抖一下畫面就報通訊故障、頻繁告警設(shè)得太長真斷線時半天不報警操作工看著舊數(shù)據(jù)以為是實時值這是很危險的。我的經(jīng)驗是先在現(xiàn)場用ping連續(xù)壓測十分鐘看平均延遲再把超時設(shè)成平均延遲的十倍左右比較穩(wěn)。注意長連接模式下現(xiàn)場任何一次網(wǎng)絡(luò)設(shè)備重啟都要考慮連接重建的時間。組態(tài)王一般能自動重連但前提是這些超時和恢復參數(shù)配置合理。2.2 IP、端口和子網(wǎng)掩碼配置里最容易翻車的地方端口這塊Modbus TCP的規(guī)范端口是502觸摸屏做服務端時默認也是502。有些現(xiàn)場為了避開和別的服務沖突會改成別的端口比如503、1502。一旦改了兩端必須同步改我見過不止一次只改了一頭調(diào)試半天找不到原因。還有個坑是端口占用觸摸屏或者其他設(shè)備上如果有別的程序搶占了502服務端就起不來所以屏上最好別裝無關(guān)的東西。子網(wǎng)掩碼必須兩端一致。工控機和觸摸屏都是255.255.255.0還好最怕的是現(xiàn)場已有網(wǎng)絡(luò)用了別的掩碼比如255.255.0.0你新加的屏按255.255.255.0配短時間ping得通跨網(wǎng)段一訪問就出問題。IP地址也要查重兩個設(shè)備撞了同一個IP現(xiàn)象是時通時不通ping丟包特別迷惑人。我現(xiàn)在的習慣是上線前拿一根網(wǎng)線單獨連屏和筆記本把地址固定好再接入主網(wǎng)絡(luò)避免跟老設(shè)備打架。還有個常被忽略的點觸摸屏的網(wǎng)關(guān)地址。如果中控和現(xiàn)場不在同一個網(wǎng)段需要跨網(wǎng)段訪問那就得給觸摸屏配網(wǎng)關(guān)指向所在網(wǎng)段的路由器地址同網(wǎng)段的話網(wǎng)關(guān)可以留空。這個配錯了現(xiàn)象就是同網(wǎng)段能通、跨網(wǎng)段不通。網(wǎng)絡(luò)層調(diào)通之后用命令行驗證是最快的ping 192.168.1.101 telnet 192.168.1.101 502ping通說明三層可達telnet 502能連上說明四層端口開放。兩條都過問題基本就落到應用層配置上了這時候再去看設(shè)備地址、寄存器映射才有意義。順序反了會浪費大量時間。2.3 寄存器地址怎么對得上號這是通訊的命門Modbus協(xié)議把數(shù)據(jù)分成四個區(qū)每個區(qū)有自己的編號段這是所有對接問題的根源也是新手最容易暈的地方區(qū)名功能地址段讀寫常見用途線圈可讀寫位00001-09999讀/寫啟停命令、開關(guān)狀態(tài)離散輸入只讀位10001-19999只讀限位、故障反饋輸入寄存器只讀字30001-39999只讀只讀的模擬量保持寄存器可讀寫字40001-49999讀/寫設(shè)定值、參數(shù)、共享數(shù)據(jù)觸摸屏這邊把變量掛到4區(qū)某個偏移上組態(tài)王那邊就要去讀同一個偏移。聽起來簡單實際最容易錯的是偏移從0還是從1開始。有的軟件界面上寫寄存器地址填0表示第一個有的填1表示第一個兩家規(guī)則不一樣一個偏移差讀到的就是隔壁那個變量的值。我在現(xiàn)場的標準動作是先在觸摸屏上做一個已知值的測試變量比如固定值1234組態(tài)王讀過來核對確認偏移規(guī)則再把真實變量批量掛上去。這一步花十分鐘能省下后面幾小時的排查。還有個隱患是數(shù)據(jù)長度和字序。一個寄存器是16位能裝0到65535的整數(shù)但實際項目里的流量、溫度經(jīng)常是小數(shù)需要32位浮點甚至32位整數(shù)占兩個寄存器。這時就涉及高低字順序問題同樣的浮點數(shù)一方按高字在前存一方按低字在前讀結(jié)果就是一個天文數(shù)字。組態(tài)王和MCGS在這方面都提供字序選項對接前必須確認。我的土辦法是寫一個固定值像12.5進去兩邊讀出來一對對不上就調(diào)字序或者勾字節(jié)交換對上為止。3. MCGS觸摸屏側(cè)把它配成一個合格的TCP服務端3.1 先建工程把網(wǎng)口參數(shù)固定下來打開MCGS組態(tài)環(huán)境新建工程選擇匹配的TPC型號。工程建好后第一件事是設(shè)置屏本身的網(wǎng)絡(luò)參數(shù)位置一般在系統(tǒng)參數(shù)或設(shè)備屬性里的網(wǎng)絡(luò)設(shè)置頁IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)按第2章規(guī)劃好的填進去。這一步其實改的是觸摸屏操作系統(tǒng)的網(wǎng)絡(luò)配置跟工程是綁定的工程下載后生效。這里有個細節(jié)值得說改完網(wǎng)絡(luò)參數(shù)一定要重新下載工程并重啟屏有時候在線改完當時能用一斷電重啟又回舊參數(shù)就是因為參數(shù)沒寫進工程文件。我吃過這個虧現(xiàn)場調(diào)了半天第二天開機全崩后來養(yǎng)成習慣——所有網(wǎng)絡(luò)參數(shù)改動都走工程下載流程不用在線調(diào)試窗口的臨時修改。默認通訊端口保持502除非有明確理由才改。屏上如果有多個物理網(wǎng)口或者支持擴展模塊要確認服務端綁定在哪個口上別連到空閑口還納悶為什么不通。3.2 設(shè)備窗口掛通用TCP/IP父設(shè)備再掛ModbusTCP子設(shè)備這是MCGS側(cè)的核心配置步驟邏輯是父設(shè)備負責底層TCP鏈路子設(shè)備負責Modbus協(xié)議解析。在設(shè)備窗口里雙擊打開先添加一個通用TCP/IP父設(shè)備雙擊它的屬性把工作模式選成TCP服務器也就是服務端本地IP填屏自己的地址端口填502。工作模式這里要特別注意很多人稀里糊涂選了客戶端結(jié)果變成屏主動去連別的設(shè)備組態(tài)王這邊就更連不上兩頭都等在原地。父設(shè)備配好之后在它下面添加子設(shè)備選ModbusTCP或者Modbus RTU/TCP這類驅(qū)動。子設(shè)備屬性里通常要填從站地址這個地址是邏輯站號屏自己做服務端時也要給它分配一個站號一般填1也有的驅(qū)動叫設(shè)備地址或者主機地址。組態(tài)王那邊讀的時候設(shè)備地址填的必須跟這里一致否則請求發(fā)出去了服務端不認這個站號直接不響應。采集周期和通訊等待時間這兩個參數(shù)也別忽略。采集周期決定觸摸屏內(nèi)部多久刷新一次這些共享數(shù)據(jù)設(shè)50到200毫秒比較常見等待時間設(shè)太長會拖慢響應設(shè)太短網(wǎng)絡(luò)稍微抖一下就超時報錯。我一般采集周期100毫秒起步根據(jù)實際數(shù)據(jù)量和網(wǎng)絡(luò)負載再微調(diào)。提示如果現(xiàn)場要求觸摸屏主動把數(shù)據(jù)推給上位機反過來把屏設(shè)成客戶端、組態(tài)王側(cè)開服務端也可以。角色可以互換核心是兩端角色必須一客一服不能都當服務端干等。3.3 通道連接把屏里的變量一個個掛到寄存器上設(shè)備掛好只是打通了鏈路真正把數(shù)據(jù)放上去靠的是通道連接。在實時數(shù)據(jù)庫里先定義好要共享的變量類型分開關(guān)型和數(shù)值型。然后回到設(shè)備窗口雙擊ModbusTCP子設(shè)備進入通道連接界面把變量一個個連到寄存器地址上。操作上選一個變量給它指定4區(qū)地址比如40001。注意界面上通常讓你填的是一段地址加上偏移比如選4區(qū)偏移填0對應40001。前面說的偏移從0還是從1的坑就在這。我的做法是在4區(qū)最前面留出一片測試區(qū)比如40001到40010先把這一批固定值變量掛上確認映射無誤后再掛真實業(yè)務變量最后把測試區(qū)清掉。這樣邏輯清晰、返工少。掛完變量把工程下載到觸摸屏重啟后服務端就起來了。這時候別急著去配組態(tài)王先在電腦上驗證一下——這是我在3.4節(jié)要說的。3.4 用調(diào)試助手先自測能少走一大半彎路屏端配完我強烈建議先拿一個Modbus調(diào)試工具做單側(cè)驗證。這類工具Modbus Poll、Modbus Slave、各種Modbus客戶端工具在電腦上跑填屏的IP、端口、站號直接去讀40001那片測試區(qū)。能讀到值說明屏端服務端、寄存器映射、網(wǎng)絡(luò)鏈路三樣都對問題不在屏這邊。讀不到或者讀出來是異常碼就按這個順序排查先確認IP和端口通不通再看站號對不對再看偏移規(guī)則最后看寄存器區(qū)選得對不對比如錯選了3區(qū)。整個排查過程不到半小時比直接兩邊一起調(diào)高效得多。自測還有一個額外好處能看到報文原始內(nèi)容。工具里一般有報文顯示窗口你能看到請求幀是03功能碼讀保持寄存器、起始地址、數(shù)量響應幀里跟著數(shù)據(jù)和CRC。這在你后面排查組態(tài)王讀取異常時非常有用因為兩邊錯誤現(xiàn)象經(jīng)常長得一樣只有看報文才能區(qū)分到底是誰的問題。4. 組態(tài)王側(cè)建工程、裝驅(qū)動、連設(shè)備4.1 6.55和7.5版本裝驅(qū)動的路子不太一樣組態(tài)王版本是個不能忽略的變量。6.55和7.5在驅(qū)動管理和安裝方式上差別挺明顯我兩種都用過提醒幾點。6.55時代驅(qū)動安裝用的是設(shè)備安裝向?qū)ǔT陂_始菜單或者工程目錄下有個專門的安裝工具選驅(qū)動目錄按提示走裝完重啟工程才能看到新設(shè)備。7.5把這塊整合成了設(shè)備安裝工具界面更規(guī)整支持驅(qū)動包批量安裝也能看到已安裝驅(qū)動的清單裝完同樣建議重啟軟件讓驅(qū)動生效。另一個差異是變量詞典和新建工程的操作路徑略有調(diào)整7.5對大數(shù)據(jù)量工程的響應的確好一些但界面變化讓習慣了6.55的人一時摸不著北。我的建議是如果甲方用哪個版本你就用哪個版本調(diào)試別為了順手換個版本導致現(xiàn)場工程打不開或者驅(qū)動不匹配那才是真麻煩。驅(qū)動裝完在設(shè)備窗口里新建設(shè)備選PLC大類下的Modbus再選ModbusTCP這一項。名字自己起一個清楚的比如MCGS屏1方便后面維護。設(shè)備地址填邏輯站號和第3章屏端設(shè)的從站號一致。通訊參數(shù)里填觸摸屏的IP地址和端口502。4.2 設(shè)備屬性里的參數(shù)哪些必須對設(shè)備配好后右側(cè)屬性欄有一堆參數(shù)我挑幾個關(guān)鍵的講。通訊超時和故障恢復時間按第2.1節(jié)的經(jīng)驗值設(shè)。這里還有嘗試恢復次數(shù)采集頻率之類的項。采集頻率決定了組態(tài)王多久輪詢一次這個設(shè)備設(shè)100毫秒意味著每秒讀10次點數(shù)多的時候這個值會影響CPU和網(wǎng)絡(luò)負載?,F(xiàn)場幾十個點的項目500毫秒到1秒就夠了那種幾十毫秒的要求往往是把節(jié)奏設(shè)得太緊張實際對工藝沒有任何意義反而增加誤報概率。IP地址和端口必須是屏的實際地址站號必須和屏端一致。這三樣只要有一個錯現(xiàn)象都是通訊失敗或讀不到數(shù)據(jù)很難靠猜區(qū)分所以我在設(shè)備屬性里會加備注把這三項寫在工程文檔里后期交接省事。4.3 數(shù)據(jù)詞典變量類型和地址要一一對應設(shè)備配好接下來建變量。在數(shù)據(jù)詞典里新建變量每個變量都要指定類型和連接設(shè)備。類型上開關(guān)量選離散或者位型模擬量選整型、浮點等。連接設(shè)備選剛才建的那個ModbusTCP設(shè)備連接項里填寄存器地址。組態(tài)王里Modbus驅(qū)動的寄存器地址一般寫作40001這一類的形式或者分區(qū)間填偏移具體看驅(qū)動版本——有的版本讓你先在連接項里選區(qū)域再填偏移數(shù)字。這里再強調(diào)一次偏移規(guī)則一定要和屏端對齊。最穩(wěn)妥的驗證方法還是在4區(qū)開頭留測試變量兩邊讀一次對一次。變量名我習慣用設(shè)備含義的格式比如M1_Start、M1_Current一方面自己看著清楚另一方面批量建變量時不容易串行。變量描述這一欄別嫌麻煩寫上中文含義和量程運行調(diào)試時鼠標懸停就能看到查問題特別快。對于32位數(shù)據(jù)變量類型要選對應的長整型或浮點同時注意字序設(shè)置跟屏端確認清楚。前面說過用固定值驗證這里同樣適用——建一個浮點變量連到屏上的浮點測試變量比對數(shù)值對不上就調(diào)字序。4.4 畫面綁定和運行調(diào)試變量建好最后一步是把它們拖到畫面上燈、按鈕、數(shù)值顯示、趨勢曲線想怎么用怎么用。運行一下看數(shù)值是不是實時跳動、按鈕下發(fā)是不是立即生效。我在這一步會做兩件驗收一是操作回路閉環(huán)在組態(tài)王畫面上點一個按鈕看觸摸屏上對應的指示燈和屏上真實設(shè)備的反應對不對確認下行數(shù)據(jù)真的到了二是數(shù)據(jù)一致性同一時刻對比中控畫面和現(xiàn)場觸摸屏上的同一個數(shù)值差個一兩百毫秒正常差一大截就有問題。跑通之后別急著收工做一次斷電重啟測試。工控機重啟、觸摸屏重啟、交換機重啟各種情況都試一遍觀察恢復時間和數(shù)據(jù)是否正確。很多工程是當時能跑一斷電就傻眼提前測出來能避免后面的檢修夜戰(zhàn)。5. 聯(lián)調(diào)現(xiàn)場那些年踩過的坑和排查套路5.1 常見問題速查表我把這些年現(xiàn)場遇到的典型問題整理成一張表按現(xiàn)象查原因比一條條翻手冊快得多現(xiàn)象可能原因排查動作組態(tài)王提示通訊失敗IP錯、端口錯、站號不一致ping通后telnet端口核對站號ping通但連不上502屏端服務端沒起來或模式選成了客戶端看屏端設(shè)備屬性工作模式讀到恒定0或65535偏移錯、變量未掛載、數(shù)據(jù)未刷新用調(diào)試工具單獨讀屏端驗證浮點數(shù)讀出來是天文數(shù)字32位字序不匹配固定值測試調(diào)字序或勾字節(jié)交換數(shù)據(jù)時通時斷、ping丟包IP沖突、網(wǎng)線接觸不良、干擾查IP表換根好網(wǎng)線看交換機燈畫面數(shù)據(jù)不跳動組態(tài)王采集頻率為0或被禁用檢查設(shè)備屬性與變量連接狀態(tài)按鈕下發(fā)無效寫到只讀區(qū)、地址寫反確認寫到4區(qū)且地址與屏端一致斷電重啟后參數(shù)丟失網(wǎng)絡(luò)參數(shù)未下載進工程用工程下載方式而不是在線臨時改這張表貼在我的工具箱蓋子上十年了還在用。5.2 抓包到底看什么別被滿屏報文嚇到第一次抓報文的人通常會被密密麻麻的十六進制搞暈其實只要抓住幾個點就能定位問題。用Wireshark這類工具在工控機上抓過濾條件只留屏的IP和502端口剩下的幀就不多了??词裁聪瓤从袥]有三次握手。如果只看到工控機反復發(fā)同步包屏不回那問題在網(wǎng)絡(luò)層或屏端服務端沒起來應用層配置不用看了。如果握手成功再找Modbus請求幀和響應幀。請求幀里會帶功能碼、起始地址、寄存器數(shù)量響應幀跟著數(shù)據(jù)。請求發(fā)了但沒響應說明屏端沒處理或者站號不認響應里帶異常碼功能碼最高位置1說明屏端理解請求但拒絕執(zhí)行通常是地址越界或不允許的功能。還有個直觀的指標是響應時間。正常情況下響應在幾十毫秒內(nèi)如果經(jīng)常幾百毫秒甚至超時就要考慮是不是點數(shù)太多、采集頻率太高或者屏端CPU忙于處理本地邏輯顧不上應答??吹竭@種規(guī)律性的慢響應先把采集頻率降下來試試往往立竿見影。注意抓包工具本身對網(wǎng)絡(luò)有額外負載抓包時間別太長尤其在生產(chǎn)網(wǎng)絡(luò)里抓到關(guān)鍵幀就停別長時間跑著。5.3 幾個容易忽略的細節(jié)坑網(wǎng)線質(zhì)量。這個看起來是廢話但真的有人拿一根壓得松松的水晶頭網(wǎng)線接生產(chǎn)設(shè)備跑兩天丟一次包。工業(yè)環(huán)境我建議用帶屏蔽層的成品網(wǎng)線超五類以上長度別超過交換機到設(shè)備的最遠距離一般控制在80米以內(nèi)超過就考慮加交換機或換成光纖。交換機端口速率協(xié)商。老交換機跟新觸摸屏之間偶爾會協(xié)商出半雙工或者10兆這種低速模式現(xiàn)象是能通但丟包、延遲大。表現(xiàn)異常的時候去交換機管理界面看看端口狀態(tài)必要時手工鎖定速率和雙工模式。防火墻和殺毒軟件。上位機裝了防火墻出站連接看似不受限但很多安全管理軟件會攔截未知程序的網(wǎng)絡(luò)訪問。組態(tài)王進程和調(diào)試工具都加進白名單。這條在專網(wǎng)里也要注意別以為內(nèi)網(wǎng)就沒人管。多個上位機同時讀一塊屏。Modbus TCP理論上支持多個客戶端但觸摸屏的處理能力有限兩三個客戶端還行七八個同時輪詢屏就喘了。真有多客戶端需求考慮用網(wǎng)關(guān)或者讓組態(tài)王做一次匯聚再分發(fā)。6. 讓它長跑穩(wěn)定刷新、心跳和后期擴展6.1 心跳和斷線重連寫給長時間運行的工程一臺屏掛在那里跑幾年中間網(wǎng)絡(luò)波動、交換機重啟、電源閃斷都會發(fā)生穩(wěn)定性靠的不是不出事而是出事了能自己恢復。Modbus TCP長連接本身不帶心跳機制靠的是組態(tài)王按采集頻率不斷發(fā)請求服務器斷線后請求超時客戶端判定失敗并進入重連流程恢復時間參數(shù)決定重連間隔。我在實際工程里會把恢復時間設(shè)成3到5秒不要太急頻繁重連會給屏和交換機增加沒必要負擔也不要太長半分鐘以上就影響操作了。另外重要變量在畫面上加通訊狀態(tài)指示燈。組態(tài)王里可以定義一個讀取設(shè)備通訊狀態(tài)的變量一旦斷線它能報警操作工知道數(shù)據(jù)不可信這比默默顯示舊值安全得多。6.2 刷新周期別貪快夠用就行觸摸屏的CPU算力就那么點既要處理本地畫面和邏輯又要響應上位機輪詢。采集頻率設(shè)太低數(shù)值小、頻率高比如設(shè)成20毫秒屏端每秒要處理50次請求幾百個點堆上去屏自己都會卡。我通常按數(shù)據(jù)重要性分級關(guān)鍵的啟停狀態(tài)、報警位設(shè)200到500毫秒溫度、液位這類慢變量設(shè)1秒報表用的累計量2到5秒都無所謂。分級之后整體負載降一大截實時數(shù)據(jù)也夠用。6.3 點數(shù)漲了、屏多了怎么擴展單屏單上位機跑順以后項目往往會往上長一臺工控機要看十幾塊屏或者現(xiàn)場又加了幾條線。這時候有幾點建議。一是分組輪詢組態(tài)王里把不同觸摸屏配成不同設(shè)備各自獨立的采集頻率避免一塊慢拖累全部。二是地址規(guī)劃要提前做多屏之間不要用同樣的寄存器號亂映射最好每個屏對應一塊地址段或者按屏號統(tǒng)一命名后期維護才不至于抓瞎。三是考慮統(tǒng)一數(shù)據(jù)出口如果將來還要對接MES或更大的平臺可以讓組態(tài)王作為匯聚點再往上走一層接口而不是讓每塊屏都對外單開通道那樣會成倍增加管理和安全負擔。回到最初那個問題——組態(tài)王和MCGS觸摸屏通過TCP對接說到底就是用標準協(xié)議把兩臺各司其職的設(shè)備連成一條數(shù)據(jù)通路難點不在協(xié)議本身而在細節(jié)地址對齊、字序、超時、網(wǎng)絡(luò)規(guī)劃每一項都平平無奇但每一項都能讓你在深夜的現(xiàn)場多待兩小時。我現(xiàn)在的習慣是每次新項目先在實驗臺上用小規(guī)模把這三關(guān)過一遍再上現(xiàn)場批量配置這個流程幫我省下的返工時間比任何技巧都實在。