凌霸天
級(jí)別: 探索解密
![]() |
現(xiàn)有一臺(tái)1200PLC,20臺(tái)200smart,1200作為主站,200smart作為從站,1200通過(guò)modbus rtu協(xié)議對(duì)20臺(tái)從站輪詢(xún)讀寫(xiě),正常情況只需要讀輪詢(xún),但是只要有寫(xiě)的情況,需要優(yōu)先去寫(xiě)操作,有沒(méi)有前輩做過(guò)類(lèi)似的實(shí)驗(yàn)或者實(shí)操的,分享一下經(jīng)驗(yàn) |
---|---|
|
凌霸天
級(jí)別: 探索解密
![]() |
// 主程序 IF #firstScan THEN // 初始化Modbus通信端口 (PORT=0, 波特率9600, 8N1) #commLoad( REQ := TRUE, "PORT" := 0, BAUD := 9600, PARITY := 2, // 0=None, 1=Odd, 2=Even MB_DB := #mbMaster); #firstScan := FALSE; // 初始化錯(cuò)誤狀態(tài) FOR #i := 1 TO 20 DO #errorStatus[#i] := FALSE; #errorCount[#i] := 0; END_FOR; END_IF; // 處理寫(xiě)請(qǐng)求 (高優(yōu)先級(jí)) IF #writeRequest THEN #mode := 1; // 進(jìn)入寫(xiě)模式 #currentSlave := #writeSlaveID; // 執(zhí)行寫(xiě)操作 (功能碼6 - 寫(xiě)單個(gè)寄存器) #mbMaster( REQ := TRUE, MB_ADDR := #writeSlaveID, MODE := 1, // 寫(xiě)模式 DATA_ADDR := #writeAddress, DATA_LEN := 1, // 寫(xiě)入1個(gè)寄存器 DATA_PTR := (#writeValue), DONE => #tempDone, ERROR => #tempError); // 處理寫(xiě)結(jié)果 IF #tempDone OR #tempError THEN #writeRequest := FALSE; IF #tempError THEN // 記錄錯(cuò)誤 #errorStatus[#writeSlaveID] := TRUE; #errorCount[#writeSlaveID] := #errorCount[#writeSlaveID] + 1; ELSE // 清除錯(cuò)誤狀態(tài)(可選) #errorStatus[#writeSlaveID] := FALSE; END_IF; #mode := 0; // 返回讀模式 END_IF; // 正常輪詢(xún)模式 ELSE // 檢查從站錯(cuò)誤狀態(tài) IF #errorStatus[#currentSlave] THEN // 跳過(guò)錯(cuò)誤從站,直接遞增計(jì)數(shù)器 #currentSlave := #currentSlave MOD 20 + 1; #pollCounter := #pollCounter + 1; RETURN; END_IF; // 執(zhí)行讀操作 (功能碼3 - 讀保持寄存器) #mbMaster( REQ := TRUE, MB_ADDR := #currentSlave, MODE := 0, // 讀模式 DATA_ADDR := 40001, // 示例起始地址 DATA_LEN := 10, // 讀取10個(gè)寄存器 DATA_PTR := #datebuffer, // 指向數(shù)據(jù)緩沖區(qū) DONE => #tempDone, ERROR => #tempError); // 處理讀結(jié)果 IF #tempDone OR #tempError THEN IF #tempError THEN // 記錄錯(cuò)誤 #errorStatus[#currentSlave] := TRUE; #errorCount[#currentSlave] := #errorCount[#currentSlave] + 1; END_IF; // 移動(dòng)到下一個(gè)從站 #currentSlave := #currentSlave MOD 20 + 1; #pollCounter := #pollCounter + 1; END_IF; END_IF; |
---|---|
|