試實戰(zhàn))
簡介倍加福讀寫頭與西門子1500PLC通過Profinet協(xié)議通信的調(diào)試說明文檔面向工業(yè)自動化現(xiàn)場調(diào)試人員及電氣工程師重點解決讀寫頭、轉(zhuǎn)換器、載碼體三者協(xié)同工作時的硬件接線與軟件配置問題。壓縮包為單個docx文檔大小約604KB內(nèi)容組織清晰便于按章節(jié)查閱和學(xué)習(xí)。文檔詳細(xì)講解了轉(zhuǎn)換器航插電源1正極3負(fù)的接法、工業(yè)4芯網(wǎng)線黃白橙藍(lán)與航插1234的對應(yīng)線序、8芯RJ45網(wǎng)口的接線注意事項并給出線序異常時的萬用表排查思路軟件側(cè)覆蓋博圖V15.1中通過在線訪問分配IP和設(shè)備名稱、復(fù)位為出廠設(shè)置及重啟識別的完整流程。針對載碼體讀寫文檔演示了通過瀏覽器登錄轉(zhuǎn)換器管理界面設(shè)置起始地址與字節(jié)長度以讀取或?qū)懭胗脩粲洃泤^(qū)數(shù)據(jù)并說明Hex Command生成與Logging Monitor查看操作日志的方法。同時介紹了同一載碼體中分段存儲數(shù)據(jù)便于不同PLC系統(tǒng)獨立提取所需信息并附有倍加福官網(wǎng)查詢載碼體存儲區(qū)結(jié)構(gòu)的指引。目前已有3261人學(xué)習(xí)下載適合需要快速上手Profinet讀寫頭調(diào)試的工程技術(shù)人員。1. 倍加福讀寫頭博圖V15.1載碼體這套組合到底解決什么問題在產(chǎn)線上每個工件要帶一個能變化的“身份證”到了某個工位先確認(rèn)身份再把加工結(jié)果寫回去。過去最常見的方案是配一臺獨立RFID控制器讀寫頭掛在控制器上控制器再通過以太網(wǎng)或串口和PLC說話程序兩邊來回調(diào)。現(xiàn)在用倍加福讀寫頭配合博圖V15.1可以把那臺控制器直接省掉讀寫頭掛到S7-1200/1500的IO-Link主站上載碼體數(shù)據(jù)變成PLC的I/O區(qū)地址博圖里寫幾行SCL就能讀能寫。我第一次調(diào)通這套組合時最驚訝的不是通信有多快而是調(diào)試方式變了——不用在專用軟件和PLC之間來回切換所有驗證都在博圖的監(jiān)控表里完成。這篇文章就是寫給在設(shè)備現(xiàn)場對著博圖和讀寫頭不知道從哪下手的電氣調(diào)試人員也寫給做產(chǎn)線集成的工程師。我會按實際動手順序把從選型、接線、組態(tài)、程序到排錯的完整路徑講清楚每個參數(shù)為什么這么設(shè)以及我在現(xiàn)場踩過的坑。2. 倍加福讀寫頭選型與接線IO-Link還是RS485載碼體間距怎么算2.1 讀寫頭接口選型IO-Link在博圖V15.1下的優(yōu)勢倍加福讀寫頭按通信接口分市面上最常見的是IO-Link和RS485兩種也有少數(shù)PROFINET直接接口但價格和調(diào)試復(fù)雜度都上去了。我一般優(yōu)先選IO-Link原因很實際IO-Link主站模塊是S7-1200/1500的選件直接插在CPU左側(cè)總線博圖V15.1原生支持讀寫頭變成主站的一個子設(shè)備數(shù)據(jù)按周期自動刷新到過程映像區(qū)。RS485則需要獨立的通信模塊或者從站適配器報文里要自己拼地址、功能碼、校驗和調(diào)試周期至少多一天。從維護角度看IO-Link也明顯優(yōu)于RS485。倍加福讀寫頭的一些參數(shù)比如讀寫功率、天線濾波、命令觸發(fā)模式都寫在IODD文件里通過博圖的通道設(shè)置就能下發(fā)。更換讀寫頭時新設(shè)備一插上就自動應(yīng)用原參數(shù)不需要拿著調(diào)試盒在現(xiàn)場重新配置。而RS485方案里參數(shù)通常存在讀寫頭內(nèi)部換備件后往往忘記同步導(dǎo)致功率不對讀距變短。下表是我在選型時的對比情況對比項IO-LinkRS485組態(tài)方式博圖導(dǎo)入IODD通道綁定設(shè)備需配置通信模塊手動組報文傳輸速率COM1/COM2/COM3最高230.4kbps取決于網(wǎng)關(guān)常見9600/19200bps電纜長度20米以內(nèi)標(biāo)準(zhǔn)IO-Link可達(dá)100米甚至更長參數(shù)下發(fā)主站自動下發(fā)換備件省心需要專用工具或組態(tài)指令調(diào)試體驗監(jiān)控表直接讀寫I/O地址需要報文解析和協(xié)議轉(zhuǎn)換如果你的PLC機架有空閑槽位讀寫頭距離PLC不超過20米聽我的直接選IO-Link后面會少很多麻煩。距離超過20米或者現(xiàn)場電磁干擾特別重RS485配合屏蔽雙絞線還是更穩(wěn)但程序工作量要提前算進去。比如我有個項目讀寫頭裝在轉(zhuǎn)臺內(nèi)距離PLC超過30米就用了RS485配合RS485轉(zhuǎn)PROFIBUS網(wǎng)關(guān)程序里每個讀寫周期要處理接收幀超時比IO-Link麻煩不少。2.2 載碼體選型抗金屬、讀寫距離和安裝間距的計算載碼體就是RFID標(biāo)簽倍加福的叫法是數(shù)據(jù)載體有高頻HF和低頻LF兩種。做產(chǎn)線工件追蹤我?guī)缀醵加肏F工作頻率13.56MHz符合ISO 15693標(biāo)準(zhǔn)讀寫速度快數(shù)據(jù)區(qū)大一般一個載碼體有128字節(jié)用戶區(qū)存工單號、工序結(jié)果、操作員編號都夠用。低頻125kHz的優(yōu)點是抗干擾強、讀距遠(yuǎn)但數(shù)據(jù)區(qū)小通常只有幾個字節(jié)適合只做身份識別的場景不適合寫過程數(shù)據(jù)。選型時先看應(yīng)用別一味追求讀距。載碼體有抗金屬和非抗金屬之分這是最容易出問題的地方。非抗金屬載碼體內(nèi)部沒有鐵氧體層緊貼金屬表面時射頻能量被金屬吸收讀取距離可能從30mm掉到5mm甚至完全讀不出來。如果你要把載碼體安裝在金屬工件或金屬支架上必須選抗金屬型號。我習(xí)慣在選型階段就問清楚載碼體最終安裝面材質(zhì)如果材質(zhì)不確定就用雙面膠暫時貼在金屬板上現(xiàn)場測一遍再決定是否換抗金屬型號。讀寫頭安裝間距不能只看載碼體貼的位置和讀寫頭感應(yīng)面之間的垂直距離還要考慮偏移角度和載碼體移動路徑。倍加福讀寫頭規(guī)格書會給出最大讀距我一般把這個值打八折作為基準(zhǔn)安裝距離。比如標(biāo)稱讀距30mm安裝垂直距離就控制在24mm以內(nèi)同時允許側(cè)向偏移約10mm。如果兩個讀寫頭在同一條輸送線上連續(xù)安裝感應(yīng)區(qū)不能重疊否則會出現(xiàn)串讀。最簡單辦法是讓兩個讀寫頭中心距大于最大讀距的2倍比如標(biāo)稱30mm中心距至少60mm實際我做項目都放到100mm以上徹底避開邊緣干擾。2.3 物理接線M12針腳定義與現(xiàn)場電源規(guī)劃倍加福IO-Link讀寫頭絕大多數(shù)是M12圓形接頭四芯或五芯。標(biāo)準(zhǔn)A編碼M12插頭的針腳定義是針腳1接24V電源正極針腳3接0V針腳4接IO-Link通信數(shù)據(jù)線針腳2在不同型號上略有區(qū)別有的作為數(shù)字量輸入有的作為另一個通信通道。不要憑顏色記憶不同廠家的線纜顏色并不統(tǒng)一我見過好幾次把針腳2和針腳4接反讀寫頭LED亮綠燈但一直不進組態(tài)。接線時用標(biāo)準(zhǔn)M12連接器預(yù)制線纜最安全如果現(xiàn)場需要自己做線建議剝線后對著讀寫頭標(biāo)簽上的針腳定義圖逐根確認(rèn)。IO-Link要求使用非屏蔽標(biāo)準(zhǔn)電纜即可但射頻讀寫頭工作時會產(chǎn)生微弱的高頻信號再加上現(xiàn)場變頻器、伺服驅(qū)動器多我建議使用屏蔽M12電纜屏蔽層在PLC側(cè)單端接地。線纜總長度控制在IO-Link標(biāo)準(zhǔn)20米內(nèi)如果讀寫頭在移動機構(gòu)上要用高柔電纜固定安裝則用普通PVC護套電纜就夠。電源規(guī)劃是最容易被忽略的環(huán)節(jié)。IO-Link主站模塊和讀寫頭共用一個24V電源沒問題但讀寫頭在寫入載碼體的瞬間電流會比待機時高出不少如果電源線過長或電源功率余量不足電壓跌落會讓IO-Link通信直接中斷。我一般會給IO-Link主站模塊單獨供電尤其是系統(tǒng)里還帶著其他電磁閥、繼電器負(fù)載時。供電線徑也注意距離超過2米就選0.75mm2以上IO-Link信號線和電源線共用一根M12電纜線芯截面積由電纜決定所以選擇預(yù)制電纜時就要選線徑足夠粗的規(guī)格。3. 博圖V15.1組態(tài)步驟從導(dǎo)入IODD到配置IO-Link通道3.1 導(dǎo)入倍加福讀寫頭的IODD文件并添加到硬件目錄第一次在博圖V15.1里組態(tài)IO-Link讀寫頭最容易被卡住的是打開IO-Link主站模塊的通道設(shè)置下拉列表里沒有任何讀寫頭可選。原因是博圖不認(rèn)識倍加福讀寫頭必須先導(dǎo)入它對應(yīng)的IODD描述文件。IODD文件是一個XML格式的包包含設(shè)備ID、參數(shù)定義、數(shù)據(jù)布局等信息。正常渠道是找倍加福的技術(shù)支持獲取對應(yīng)型號的IODD文件下載后通常是個壓縮包里面包含estedes.xxdd、vendor.xxdd等文件。導(dǎo)入步驟打開博圖V15.1后從菜單欄選“設(shè)備描述文件”—“管理”在彈出窗口中點擊“安裝”定位到下載的IODD文件夾。博圖會識別出供應(yīng)商“PepperlFuchs”和設(shè)備型號。安裝完成后在硬件目錄的“其他現(xiàn)場設(shè)備”或IO-Link主站的設(shè)備列表里就能找到這個讀寫頭。要注意IODD文件版本必須和讀寫頭硬件版本匹配比如讀寫頭的IODD版本是V2.1你卻安裝了V1.0的文件組態(tài)后可能無法識別。我習(xí)慣把下載的IODD壓縮包命名為帶型號和日期的格式比如“IQH1_HF_20250315”避免版本混亂。導(dǎo)入成功后把IO-Link主站模塊拖到S7-1200的左側(cè)總線。博圖自動分配模塊的I/O地址。右鍵點擊IO-Link主站模塊選擇“IO-Link設(shè)備”屬性選項卡在每個通道的下拉框里選擇對應(yīng)的讀寫頭型號。選擇后通道下方會出現(xiàn)輸入長度和輸出長度的默認(rèn)值通常輸入6~16字節(jié)輸出4~6字節(jié)取決于讀取頭型號。這里我建議記錄下博圖自動分配的輸入起始地址和輸出起始地址比如輸入IW64、輸出QW64后面監(jiān)控表編程全用這兩個地址。3.2 配置IO-Link端口模式、通信速率與循環(huán)時間博圖組態(tài)IO-Link主站時每個通道有幾種操作模式數(shù)字量輸入、數(shù)字量輸出、IO-Link模式。很多人這一步會忽略通道默認(rèn)為數(shù)字量模式讀寫頭雖然接了信號線但只是作為一個開關(guān)量輸入工作數(shù)據(jù)根本進不了PLC。必須雙擊IO-Link主站模塊在每個通道屬性里把端口模式改為“IO-Link”然后選擇之前添加的讀寫頭設(shè)備。只有改為IO-Link模式通道才執(zhí)行周期通信。通信速率方面IO-Link標(biāo)準(zhǔn)有COM14.8kbps、COM238.4kbps、COM3230.4kbps三檔。倍加福HF讀寫頭一般支持COM3博圖里默認(rèn)可能是COM2建議手動設(shè)為COM3。速率改好后讀寫頭的LED會從慢閃變?yōu)槌A帘硎就ㄐ沤?。如果線纜長度超過15米COM3可能因信號衰減出現(xiàn)偶發(fā)斷線這時要降回COM2并重啟PLC再觀察。循環(huán)時間是主站與讀寫頭的通信周期默認(rèn)通常是10ms對RFID應(yīng)用來說太短了因為讀寫頭內(nèi)部處理載碼體天線掃描需要幾十毫秒過短的循環(huán)沒有實際意義。我在參數(shù)表里把數(shù)據(jù)循環(huán)時間設(shè)為50ms這樣可以減輕PLC通信負(fù)載也不影響產(chǎn)線節(jié)拍——除非你的工位節(jié)拍小于100ms但那種場景一般不用RFID。還有一項“數(shù)據(jù)處理類型”對倍加福讀寫頭選“字節(jié)數(shù)據(jù)”而不是“位數(shù)據(jù)”因為載碼體數(shù)據(jù)是字節(jié)流。端口參數(shù)里有一項“設(shè)備ID校驗”建議保持默認(rèn)。博圖會在每次通信開始時讀取讀寫頭的設(shè)備ID與IODD文件里的設(shè)備ID比對如果不一致通道會報錯。倍加福原廠讀寫頭設(shè)備ID都是統(tǒng)一的不會存在不一致的情況除非你買到的是兼容第三方讀寫頭。如果你發(fā)現(xiàn)組態(tài)后通道報“設(shè)備ID錯誤”先確認(rèn)讀寫頭型號與IODD文件是否完全匹配不要手動修改設(shè)備ID改了只會讓通信更奇怪。3.3 下載硬件組態(tài)并用監(jiān)控表驗證在線狀態(tài)組態(tài)參數(shù)設(shè)好后選中PLC站點執(zhí)行“編譯—硬件”然后下載到CPU。下載完成后在博圖的“在線與診斷”界面里選擇IO-Link主站模塊查看通道的狀態(tài)。正常狀態(tài)下通道項會顯示通信已建立并且可以看到讀寫頭的供應(yīng)商ID、設(shè)備ID、協(xié)處理器版本等具體信息。如果通道狀態(tài)顯示“無連接”或“設(shè)備失敗”就要回到硬件側(cè)排查接線和供電。確認(rèn)在線后打開一個監(jiān)控表把IO-Link主站模塊的輸入字節(jié)地址和輸出字節(jié)地址添加到“監(jiān)視”區(qū)域。以地址字為單位監(jiān)視例如輸入地址IW64、輸出QW64。接通電源后輸入字的低字節(jié)應(yīng)該出現(xiàn)狀態(tài)值。倍加福讀寫頭的狀態(tài)字一般是一個16位整數(shù)常見空閑狀態(tài)值0x8000。如果看到0x8000說明讀寫頭已就緒物理通信鏈路完全正常。如果狀態(tài)值是0x0000大概率是端口模式?jīng)]改對或者接線針腳有誤。監(jiān)控表還能驗證讀寫頭是否能檢測到載碼體。把一枚載碼體靠近讀寫頭正常情況下狀態(tài)字會從0x8000變?yōu)椤耙褭z測到載碼體”的值比如0x8001。如果狀態(tài)字不變先檢查載碼體是否在讀寫頭感應(yīng)范圍內(nèi)再確認(rèn)載碼體工作頻率是否匹配。我用過一枚低頻載碼體放在高頻讀寫頭上半天沒反應(yīng)后來才意識到兩者協(xié)議都不一樣。這一步做完硬件層面就沒問題了下面進入程序調(diào)試。4. 讀寫命令調(diào)試用SCL實現(xiàn)讀取UID和寫入載碼體數(shù)據(jù)4.1 監(jiān)控表強制發(fā)送命令快速驗證讀寫頭收發(fā)在正式寫PLC程序前先用監(jiān)控表手動發(fā)送一條命令確認(rèn)讀寫頭能正確響應(yīng)。假設(shè)IO-Link主站輸出起始地址是QW64輸入起始地址是IW64。倍加福HF讀寫頭常見命令布局是輸出第一個字命令碼輸出第二個字?jǐn)?shù)據(jù)長度或地址輸出后續(xù)字?jǐn)?shù)據(jù)輸入第一個字狀態(tài)字輸入后續(xù)字節(jié)數(shù)據(jù)。具體偏移要以IODD或說明書為準(zhǔn)但思路一致。在監(jiān)控表里把QW64強制設(shè)為“1”即發(fā)送讀取UID的命令。然后觀察IW64的變化如果讀寫到載碼體狀態(tài)字變成0x8001緊接著的幾個字節(jié)里就是載碼體UID的前幾個字節(jié)。我用這個方法驗證過不同尺寸的載碼體讀取到的UID完全不同能直觀判斷讀寫頭天線是否正常工作。強制發(fā)送時不要一直按“立即刷新”因為寫入命令是邊沿觸發(fā)的持續(xù)發(fā)送重復(fù)命令可能會讓讀寫頭不停執(zhí)行相同操作。監(jiān)控表發(fā)送命令的另一個好處是能測出讀寫命令返回的數(shù)據(jù)格式。比如發(fā)送讀取用戶數(shù)據(jù)命令時要先在輸出第二個字里指定讀取起始地址比如設(shè)為地址0。如果監(jiān)控表里看到返回數(shù)據(jù)帶了前4個字節(jié)0xFF、0xFF、0xFF、0xFF說明載碼體用戶區(qū)還沒有寫入有效數(shù)據(jù)。這個結(jié)果能幫你判斷命令參數(shù)設(shè)置是否正確避免上來就寫程序排查問題時黑匣子一樣。4.2 讀取載碼體UID和用戶數(shù)據(jù)的SCL函數(shù)實現(xiàn)監(jiān)控表驗證命令格式正確后就可以在博圖的“程序塊”里創(chuàng)建FC把讀寫邏輯封裝成可復(fù)用的函數(shù)。下面是我在一個S7-1212C項目里用的簡化版讀取函數(shù)用來讀取載碼體UID。這里的地址做了抽象實際項目中要把“ID64”和“QD64”替換成你的主站模塊地址。// 讀取載碼體UID的SCL函數(shù)用于S7-1200 FUNCTION FC_ReadUID : Void VAR_INPUT bTrigger : Bool; // 上升沿觸發(fā)讀取 iwInAddr : Int; // IO-Link主站輸入字地址偏移如64 qwOutAddr : Int; // IO-Link主站輸出字地址偏移如64 END_VAR VAR_OUTPUT bReady : Bool; // 狀態(tài)字空閑 bDone : Bool; // 讀取完成 aUID : Array[0..7] Of Byte; // 讀取到的UID 8字節(jié) wStatus : Word; // 狀態(tài)字 END_VAR VAR_TEMP ptIn : Word; // 臨時變量 END_VAR BEGIN // 非觸發(fā)狀態(tài)不發(fā)送命令 IF NOT bTrigger THEN bReady : FALSE; bDone : FALSE; RETURN; END_IF; // 發(fā)送讀取UID命令命令碼1 POKE(word, qwOutAddr, W#16#0001); // 等待狀態(tài)字出現(xiàn)0x8001最多等待20個掃描周期 FOR i : 1 TO 20 DO wStatus : PEEK(word, iwInAddr); IF wStatus W#16#8001 THEN bDone : TRUE; // 拷貝輸入緩沖區(qū)中從第2個字節(jié)開始的8字節(jié)UID FOR j : 0 TO 7 DO aUID[j] : PEEK(byte, iwInAddr 2 j); END_FOR; EXIT; END_IF; END_FOR; // 狀態(tài)字不是空閑也不是完成則視為錯誤 IF NOT bDone THEN bReady : FALSE; END_IF; END_FUNCTION這段代碼用POKE和PEEK指令直接訪問過程映像區(qū)不需要擔(dān)心地址重疊問題。參數(shù)說明bTrigger是外部啟停信號必須用上升沿觸發(fā)否則每個掃描周期都會發(fā)一次命令。iwInAddr和qwOutAddr是主站模塊的起始地址注意博圖里有些CPU支持“字”地址直接用I64有些需要訪問字節(jié)地址我的寫法是用整型表示地址偏移更方便參數(shù)化。FOR循環(huán)等待狀態(tài)字是最簡單的同步方式但對掃描周期有影響更好的做法是用定時器實現(xiàn)異步等待。如果狀態(tài)字遲遲不變化循環(huán)20次后函數(shù)自動退出避免程序卡死。讀取用戶數(shù)據(jù)區(qū)的邏輯類似只需要把命令碼從0x01改成0x02并指定讀取起始地址和數(shù)據(jù)長度。倍加福標(biāo)準(zhǔn)命令中輸出第二個字通常是起始地址輸出第三個字是讀取長度。要注意用戶數(shù)據(jù)區(qū)長度不要超過讀寫頭協(xié)議支持的最大長度比如一次讀32字節(jié)如果你的載碼體用戶區(qū)有128字節(jié)可以分4次讀取。我在實際項目里只讀一次因為工位寫入的數(shù)據(jù)一般不超過16字節(jié)一次能讀完。4.3 寫入載碼體數(shù)據(jù)的時序控制防止寫壞載碼體寫入命令比讀取命令復(fù)雜因為載碼體內(nèi)部閃存寫入需要時間。發(fā)送寫入命令后讀寫頭會先進入忙狀態(tài)等到數(shù)據(jù)完全寫入才返回完成狀態(tài)。如果PLC在忙狀態(tài)時發(fā)送下一條命令可能打斷寫入過程輕則寫入失敗重則載碼體數(shù)據(jù)區(qū)損壞。我遇到過載碼體寫了一半之后再讀取整個用戶區(qū)都是0xFF只能報廢。安全的寫入流程分四步第一步發(fā)送寫入命令第二步輪詢狀態(tài)字是否為“寫入完成”第三步空閑后延時50ms再允許下一條命令第四步重新讀取該地址區(qū)域校驗數(shù)據(jù)。下面是一個寫入用戶數(shù)據(jù)的SCL片段使用了一個內(nèi)部定時器做延時。// 寫入載碼體用戶區(qū)的關(guān)鍵邏輯 // bWriteTrigger: 寫入觸發(fā) // qwOutAddr: 輸出起始地址 // iwInAddr: 輸入起始地址 IF bWriteTrigger AND NOT bWriteBusy THEN // 組裝寫入命令 // 命令碼0x03起始地址bStartAddr數(shù)據(jù)長度Len POKE(word, qwOutAddr, W#16#0003); POKE(word, qwOutAddr 2, bStartAddr); POKE(word, qwOutAddr 4, Len); FOR i : 0 TO Len - 1 DO POKE(byte, qwOutAddr 6 i, aData[i]); END_FOR; bWriteBusy : TRUE; tonWriteTimer(IN:TRUE, PT:T#50MS); END_IF; // 輪詢狀態(tài)字 IF bWriteBusy THEN wStatus : PEEK(word, iwInAddr); IF wStatus W#16#8002 THEN // 寫入完成 bWriteBusy : FALSE; bWriteDone : TRUE; tonWriteTimer(IN:FALSE); ELSIF wStatus W#16#8000 THEN // 回到空閑說明寫入失敗 bWriteBusy : FALSE; bWriteError : TRUE; END_IF; END_IF;這個片段的要點寫入命令的觸發(fā)要加互鎖防止重復(fù)寫入寫完必須輪詢完成狀態(tài)不能只發(fā)命令不管結(jié)果寫入完成后要再讀一遍數(shù)據(jù)區(qū)做校驗這是我在現(xiàn)場總結(jié)出來最有效防錯手段。另外載碼體寫入有最小頁大小限制常見是4字節(jié)一頁所以Len必須是4的倍數(shù)不夠就補0xFF。如果寫入長度不合法讀寫頭會立即返回錯誤狀態(tài)比如0x8413。程序里還有一個容易忽略的點載碼體的地址映射。用戶區(qū)地址有的從0x00開始有的從0x10開始讀寫頭通過命令參數(shù)指定起始地址。我在一臺設(shè)備上調(diào)試時寫入命令的起始地址設(shè)為0但讀回來數(shù)據(jù)都在地址16以后原因是那款載碼體的用戶區(qū)本身把前16字節(jié)保留用于特殊功能。查閱載碼體數(shù)據(jù)手冊后改用起始地址16寫入一次成功。調(diào)試這種問題不能只看PLC數(shù)據(jù)要結(jié)合載碼體內(nèi)部地址圖和讀寫頭命令說明。5. 倍加福讀寫頭調(diào)試常見問題排查5個翻車現(xiàn)場5.1 博圖找不到讀寫頭IODD未導(dǎo)入或端口模式錯現(xiàn)象是IO-Link主站通道設(shè)備列表里是空的下拉框沒有倍加福讀寫頭可選。檢查過程分兩層先看IODD文件是否安裝成功在博圖“設(shè)備描述文件—管理”里應(yīng)能看到倍加福設(shè)備的條目。如果沒有重新導(dǎo)入并注意安裝時選擇正確文件夾。第二層看端口模式即使設(shè)備條目已安裝如果通道屬性是“數(shù)字量輸入/輸出”下拉框也不會出現(xiàn)IO-Link設(shè)備列表。解決方法是把端口模式改為“IO-Link”再重新選擇設(shè)備。還有一種情況是讀寫頭本身供電異常。IO-Link主站模塊的通道會為連接的設(shè)備提供24V電源如果讀寫頭電源針腳接觸不良或線纜內(nèi)部斷芯讀寫頭LED不亮或閃紅燈。這時候博圖里無論如何找不到設(shè)備因為主站沒有檢測到設(shè)備的存在。優(yōu)先用萬用表量讀寫頭M12插頭針腳1和3之間的電壓應(yīng)在24V左右。5.2 能讀UID但用戶數(shù)據(jù)全零起始地址與長度參數(shù)問題讀寫頭能讀到載碼體UID證明射頻通信正常但讀取用戶數(shù)據(jù)時返回全0或數(shù)據(jù)位數(shù)不對。這個問題原因有兩個一是讀寫頭讀取用戶區(qū)時需要指定起始地址如果不指定或指定的地址超出載碼體有效地址范圍讀寫頭會返回空數(shù)據(jù)。二是載碼體的用戶區(qū)只有部分字節(jié)已寫入出廠默認(rèn)填充0x00如果你讀取的地址段從未寫入過數(shù)據(jù)讀回來自然全是0。解決步驟是先用監(jiān)控表強制發(fā)送讀取命令命令參數(shù)里顯式寫上起始地址為0數(shù)據(jù)長度為16字節(jié)觀察返回內(nèi)容。如果還是全0換一個已知寫入數(shù)據(jù)的載碼體再試。如果已知載碼體在別的讀寫頭上能讀出數(shù)據(jù)在這臺讀寫頭上全0那就是讀寫頭的”讀取區(qū)“配置有問題比如激活了某種數(shù)據(jù)過濾或掩碼功能。查看讀寫頭IODD參數(shù)關(guān)閉“數(shù)據(jù)過濾”即可。5.3 寫入載碼體報錯寫保護、頁大小和供電壓降寫入錯誤的表現(xiàn)是狀態(tài)字返回錯誤碼或者明明提示寫入完成但重新讀取時數(shù)據(jù)仍是舊值。最常見的三個原因按優(yōu)先級排列載碼體寫保護位被置位數(shù)據(jù)長度不是頁大小的整數(shù)倍以及寫入瞬間電源電壓跌落。寫保護位可以通過讀寫頭命令讀取狀態(tài)字中的保護位標(biāo)志但更直接的方法是換一枚全新載碼體測試排除保護位問題。頁大小問題在倍加福載碼體上很典型比如某型號一頁4字節(jié)寫入長度給5字節(jié)讀寫頭返回錯誤。解決辦法是把數(shù)據(jù)長度補成4的倍數(shù)補的字節(jié)用0xFF或0x00都可以。供電壓降這個坑很隱蔽我見過一個讀寫頭寫入時報“射頻錯誤”排查到最后發(fā)現(xiàn)是IO-Link主站模塊電源線太細(xì)寫入瞬間電流上升到350mA線纜壓降導(dǎo)致電壓低于21.5V。把電源線加粗到0.75mm2寫入就正常了。5.4 多讀寫頭串讀感應(yīng)區(qū)重疊與分時使能在相鄰工位安裝兩個讀寫頭有時讀寫頭A的緩沖區(qū)里出現(xiàn)了讀寫頭B感應(yīng)區(qū)的載碼體數(shù)據(jù)。這種現(xiàn)象叫串讀本質(zhì)是射頻場重疊或反射。解決方法是拉開距離讓兩個讀寫頭的感應(yīng)區(qū)在物理上不重疊。如果空間不允許可以在程序里給每個讀寫頭加一個“使能”命令寫入空閑命令到不工作的讀寫頭使其天線停止發(fā)射然后再操作另一個讀寫頭。軟件分時使能的方法很簡單每個讀寫頭輸出緩沖區(qū)有一個“讀/寫”命令口發(fā)送命令0x0000表示休眠不發(fā)送任何射頻命令。在SCL里兩個讀寫頭的工作觸發(fā)做互鎖同一時間只讓一個讀寫頭發(fā)送命令。這樣即使感應(yīng)區(qū)有重疊也不會發(fā)生同時識別。這個辦法我用于同一個龍門架上兩個讀寫頭間距只有40mm的場景問題立即消失。5.5 地址寫錯通道主站地址分配與字對齊陷阱程序里明明把命令寫到了QD64但讀寫頭沒有反應(yīng)檢查后才發(fā)現(xiàn)讀寫頭接在通道2而QD64是通道1的地址。這是組態(tài)時最容易犯的錯誤。博圖添加IO-Link主站模塊后起始地址是針對整個模塊的每個通道地址按順序排列但不會自動直觀顯示。需要在組態(tài)界面點選具體通道在“地址”選項卡里查看它對應(yīng)的輸入/輸出起始地址然后修改程序中的地址。另一個隱藏問題是對齊方式。有些IO-Link主站模塊的I/O地址是字對齊的輸入地址從IW64開始但讀寫頭的第一個狀態(tài)字節(jié)不是最低字節(jié)而是最高字節(jié)也就是大端模式。在這種情況下直接用“W”訪問狀態(tài)字沒問題但如果你用“B”訪問字節(jié)可能讀到的實際是狀態(tài)字的高字節(jié)或低字節(jié)導(dǎo)致判斷邏輯錯誤。我建議始終以字為單位讀取狀態(tài)字避免字節(jié)對齊差異。如果一定要用字節(jié)先在監(jiān)控表里確認(rèn)數(shù)據(jù)布局再寫程序。6. 把讀寫頭嵌進產(chǎn)線用UID做多工位追溯的驗證習(xí)慣單點調(diào)試通過后讀寫頭真正落地到產(chǎn)線通常要解決多工位追溯問題。我的常規(guī)做法是建立一張“載碼體跟蹤表”把每枚載碼體的UID作為唯一標(biāo)識在PLC全局DB中維護一條記錄記錄內(nèi)容是工件號、各工位的工序結(jié)果和寫入時間。每個工位讀寫頭讀取UID后在跟蹤表中查找該UID是否存在不存在則新建存在則更新對應(yīng)工位數(shù)據(jù)。這個表在博圖里用STRUCT數(shù)組實現(xiàn)數(shù)組大小按產(chǎn)線同時運行的工件數(shù)量確定比如100個工件就建100條記錄再多就要考慮與MES的通信。實際驗證這套系統(tǒng)我留下來的習(xí)慣是每調(diào)試一個工位就拿一枚載碼體在這枚載碼體上手動寫入一個遞增的測試編號然后讓載碼體順著輸送線走到下一個工位觀察工位程序是否識別。這個過程不能只在編程軟件里看變量要在HMI上做一個“最近讀取記錄”頁面直接顯示讀到的UID和上一工位寫入的數(shù)據(jù)。用HMI頁面驗證比看DB監(jiān)視值更直觀也方便產(chǎn)線維護人員日后使用。驗證過程中最怕出現(xiàn)臟數(shù)據(jù)。如果之前調(diào)試時手動寫過不完整的記錄這些數(shù)據(jù)殘留在載碼體用戶區(qū)會干擾后續(xù)工位判斷。我多次吃過這個虧所以現(xiàn)在養(yǎng)成一個習(xí)慣每次測試前先用“清除載碼體用戶區(qū)”的命令把所有測試載碼體重置為統(tǒng)一狀態(tài)再開始新的測試序列。這不算復(fù)雜功能但在SCL里增加一個系統(tǒng)維護頁面手動觸發(fā)清除命令調(diào)試和試生產(chǎn)階段都非常有用。調(diào)試多工位追溯其實是在和數(shù)據(jù)殘留作斗爭。處理好這一點產(chǎn)線上的RFID系統(tǒng)會穩(wěn)定很多。希望幫到你。本文還有配套的精品資源點擊獲取