1 在電能表中的應用
由于歷史的原因,我國在制定DL/T614-1997《電子式多功能電能表》及DL/T645-1997《電子式多能電能表通訊協議》時將 RS-485標準串行通訊接口作為電表的通訊接口,并詳細地定義了物理層、鏈路層、應用層,結束了以前電表廠家規約各不兼容、互相不能抄的尷尬局面。各電 表廠家遵循相同的協議標準對電表進行讀寫操作,簡化了電表抄表應用及維護的工作量。使得國內的智能電表基本上可以做到互聯互通。但是目前國內的485抄表 還存在一些問題,主要是通信成功率低、不能做到即連即通、易損壞等。
2 物理層、鏈路層及數據傳輸
2.1 物理層
A)共模輸入電壓:-7V~+12V。
B)差模輸入電壓:大于0.2V。
C)三態方式輸出。
D)半雙工通信方式。
E)驅動能力不小于32個同類接口。
F)總線是無源的,由費率裝置或數據終端提供電源。
G)邏輯“1”以A、B兩線間的電壓差為+(2~6)V表示;邏輯“0”以兩線間的電壓差為-(2~6)V表示。
2.2 鏈路層及數據傳輸
通訊鏈路的建立與解除由主站發出的信息幀來控制,幀的組成如表: 由上表可知,幀由起始符、地址域、控制碼、數據長度、數據域、校驗碼及結束符等7個域組成,每部分由若干字節組成。
DL/T645-1997規定,在發送幀信息之前,先發送1~4個字節FEH,其目的是預先拉高控制總線,以喚醒接收方,保障幀信息的順利接收。
DL/T645-1997規定了主—從結構的半雙工通訊方式。每次通訊都是由主站向從站發出請求命令幀開始,從站根據要求作出響應。收到命令幀后的響應延時稱作幀間延時Td:20ms≤Td≤500ms。字節之間停頓時間稱作字節間延時Tb:Tb≤500ms。
3 RS485在電表通訊中的常見問題及解決方案
3.1 收發時序不匹配
現象1:485通訊不成功,用邏輯分析儀查看,發送的碼字正確,電能表返回碼字也符合規約。再細看,主站發送的碼字的位同電能表應答的數據幀的之間幾乎沒有停頓。
分析:由于485總線是一個半雙工的通訊方式,收和發不能同時進行,從發送完成到變為接收狀態,無論是軟件的處理抑或是硬件的切換都需要一定的延時, 因此DL/T645規定幀間延時Td:20ms≤Td≤500ms,主要是給發送方一個由發轉為收的時間,保證接收方返回的數據能完整的被接收。而有些電 能表,尤其是一些早期的多功能表對此考慮不夠,在接收到主站的請求命令幀后,未進行幀響應延時,就立刻發送應答幀,而此時主站還處于發送狀態,等主站返回 到接收狀態時,電能表前面的碼字已發送完,主站接收到的應答數據幀不完整引起通信失敗。
現象2:當主站對某塊表連續抄幾幀數據時,幀通訊成功,第二幀開始電表不回應答幀。
分析:同樣的道理,電表的485由發轉為收也需要延時,而有的主站軟件編程時,沒有考慮,接收完一幀數據后沒有延時或延時不夠就又開始抄下一幀,而此 時電表還沒有回到接收狀態,通訊失敗。在這里我們建議通信雙方在編程時都必須嚴格遵守DL/T645所規定的幀間延時,并留有余量,具體應用時可取一個中 間值,如100ms。
3.2 判斷幀起始符出錯
對于電能表485總線來講,它是一種數字異步通信方式。異步通信不象同步通信,其沒有專門的同步信號進行同步,接收方無法準確判知哪一個字節是一幀數 據通信的開始,因此DL/T645中規定68H作為幀起始符(幀同步碼),代表一幀數據的開始。有些主站和電能表在軟件編程時考慮得比較理想,接收數據時 未按照DL/T645中規定68H來判定數據幀的開始,而是呆板的以接收到的個字符作為幀起始標志;如果電表在此幀數據之前發了幾個FEH,其接收到 的數據將會出現同步錯誤。另外,如總線上平時有干擾信號存在,導致485芯片不停地收到諸如FCH、DEH這樣雜亂數據;當總線上有正常信號產生時,由于 干擾信號比較小的原因,其對通信并無太大的影響,但對接收方來講,其接收正確數據幀前會混有若干個字節的雜亂數據,由于同步處理不當,通訊也會失敗。通常 的做法是每接收一個字節都要判是否是68H,若不是則丟掉該字節,然后繼續往下判,直到收到68H才啟動一幀數據的接收。
3.3 幀奇偶校驗位/幀結束符不合理
目前看來,由于這個原因引起485通信不成功占有很大的比例。我們知道,在485通信時,對于接收到的數據一般都會按收、發雙方事先約定的奇偶校驗方 式進行數據檢錯,并將錯誤的數據幀剔除,等待發送方重發。這種ARQ的通信方式本身是無可厚非的,但是有的軟件人員在編程時考慮問題不夠全面,在判斷一幀 結束處理時,沒有根據所收數據幀的長度和結束符“16H”及時地將數據接收任務結束,而是依據多長時間內收不到新的一個字節數據來認為一幀已收完。這種處 理方法在下面這種情況下就會導致通信失敗。
,RS485芯片的接收靈敏度為±200mV,即當電壓UA—UB≥200mV時,輸出邏輯“1”;UA—UB≤-200mV時,輸出邏輯 “0”。當-200mV<UA—UB<200mV時,輸出不確定。這樣一來,當總線上所有的485芯片均處于接收狀態時,總線處于高阻狀態,此時A、B間 的壓差為0V,芯片輸出處于不定狀態,可能輸出“1”,也可能輸出“0”,而且狀態會隨著時間而變化。如果輸出為“0”,在某些時候則會導致通信失敗。我 們知道,電能表在發送完應答幀后,一般會馬上從發送狀態轉換到接收狀態。正常情況應該是:主站的485芯片收完個字節的停止位后繼續保持為“1” (波形見圖2),而有的485芯片則可能跳變保持為“0”(波形見圖3),UART(通用異步收發器)則認為又收到一個字節00H,且很有可能校驗和是錯 的,這樣接收軟件可能會判斷到一個字節校驗位出錯,而將前面接收正確的一幀丟掉,造成通信失敗。