在電能表中的應(yīng)用
由于歷史的原因,我國在制定DL/T614-1997《電子式多功能電能表》及DL/T645-1997《電子式多功能電能表通訊協(xié)議》時將RS-485標(biāo)準(zhǔn)串行通訊接口作為電表的通訊接口,并詳細(xì)地定義了物理層、鏈路層、應(yīng)用層,結(jié)束了以前電表廠家規(guī)約各不兼容、互相不能抄的尷尬局面。各電表廠家遵循相同的協(xié)議標(biāo)準(zhǔn)對電表進(jìn)行讀寫操作,簡化了電表抄表應(yīng)用及維護(hù)的工作量。使得國內(nèi)的智能電表基本上可以做到互聯(lián)互通。但是目前國內(nèi)的485抄表還存在一些問題,主要是通信成功率低、不能做到即連即通、易損壞等。
RS485通訊接口物理層、鏈路層及數(shù)據(jù)傳輸
1.物理層
A)共模輸入電壓:-7V~+12V。
B)差模輸入電壓:大于0.2V。
C)三態(tài)方式輸出。
D)半雙工通信方式。
E)驅(qū)動能力不小于32個同類接口。
F)總線是無源的,由費率裝置或數(shù)據(jù)終端提供電源。
G)邏輯“1”以A、B兩線間的電壓差為+(2~6)V表示;邏輯“0”以兩線間的電壓差為-(2~6)V表示。
2. 鏈路層及數(shù)據(jù)傳輸
通訊鏈路的建立與解除由主站發(fā)出的信息幀來控制,幀的組成如表:
由上表可知,幀由起始符、地址域、控制碼、數(shù)據(jù)長度、數(shù)據(jù)域、校驗碼及結(jié)束符等7個域組成,每部分由若干字節(jié)組成。
DL/T645-1997規(guī)定,在發(fā)送幀信息之前,先發(fā)送1~4個字節(jié)FEH,其目的是預(yù)先拉高控制總線,以喚醒接收方,保障幀信息的順利接收。
DL/T645-1997規(guī)定了主—從結(jié)構(gòu)的半雙工通訊方式。每次通訊都是由主站向從站發(fā)出請求命令幀開始,從站根據(jù)要求作出響應(yīng)。收到命令幀后的響應(yīng)延時稱作幀間延時Td:20ms≤Td≤500ms。字節(jié)之間停頓時間稱作字節(jié)間延時Tb:Tb≤500ms。
RS485在電表通訊中的常見問題及解決方案
1.收發(fā)時序不匹配
現(xiàn)象1:485通訊不成功,用邏輯分析儀查看,發(fā)送的碼字正確,電能表返回碼字也符合規(guī)約。再細(xì)看,主站發(fā)送的碼字的zui后一位同電能表應(yīng)答的數(shù)據(jù)幀的*位之間幾乎沒有停頓。
分析:由于485總線是一個半雙工的通訊方式,收和發(fā)不能同時進(jìn)行,從發(fā)送完成到變?yōu)榻邮諣顟B(tài),無論是軟件的處理抑或是硬件的切換都需要一定的延時,因此DL/T645規(guī)定幀間延時Td:20ms≤Td≤500ms,主要是給發(fā)送方一個由發(fā)轉(zhuǎn)為收的時間,保證接收方返回的數(shù)據(jù)能完整的被接收。而有些電能表,尤其是一些早期的多功能表對此考慮不夠,在接收到主站的請求命令幀后,未進(jìn)行幀響應(yīng)延時,就立刻發(fā)送應(yīng)答幀,而此時主站還處于發(fā)送狀態(tài),等主站返回到接收狀態(tài)時,電能表前面的碼字已發(fā)送完,主站接收到的應(yīng)答數(shù)據(jù)幀不完整引起通信失敗。
現(xiàn)象2:當(dāng)主站對某塊表連續(xù)抄幾幀數(shù)據(jù)時,*幀通訊成功,第二幀開始電表不回應(yīng)答幀。
分析:同樣的道理,電表的485由發(fā)轉(zhuǎn)為收也需要延時,而有的主站軟件編程時,沒有考慮,接收完一幀數(shù)據(jù)后沒有延時或延時不夠就又開始抄下一幀,而此時電表還沒有回到接收狀態(tài),通訊失敗。在這里我們建議通信雙方在編程時都必須嚴(yán)格遵守DL/T645所規(guī)定的幀間延時,并留有余量,具體應(yīng)用時可取一個中間值,如100ms。
2.判斷幀起始符出錯
對于電能表485總線來講,它是一種數(shù)字異步通信方式。異步通信不象同步通信,其沒有專門的同步信號進(jìn)行同步,接收方無法準(zhǔn)確判知哪一個字節(jié)是一幀數(shù)據(jù)通信的開始,因此DL/T645中規(guī)定68H作為幀起始符(幀同步碼),代表一幀數(shù)據(jù)的開始。有些主站和電能表在軟件編程時考慮得比較理想,接收數(shù)據(jù)時未按照DL/T645中規(guī)定68H來判定數(shù)據(jù)幀的開始,而是呆板的以接收到的*個字符作為幀起始標(biāo)志;如果電表在此幀數(shù)據(jù)之前發(fā)了幾個FEH,其接收到的數(shù)據(jù)將會出現(xiàn)同步錯誤。另外,如總線上平時有干擾信號存在,導(dǎo)致485芯片不停地收到諸如FCH、DEH這樣雜亂數(shù)據(jù);當(dāng)總線上有正常信號產(chǎn)生時,由于干擾信號比較小的原因,其對通信并無太大的影響,但對接收方來講,其接收正確數(shù)據(jù)幀前會混有若干個字節(jié)的雜亂數(shù)據(jù),由于同步處理不當(dāng),通訊也會失敗。通常的做法是每接收一個字節(jié)都要判是否是68H,若不是則丟掉該字節(jié),然后繼續(xù)往下判,直到收到68H才啟動一幀數(shù)據(jù)的接收。
3.幀奇偶校驗位/幀結(jié)束符不合理
目前看來,由于這個原因引起485通信不成功占有很大的比例。我們知道,在485通信時,對于接收到的數(shù)據(jù)一般都會按收、發(fā)雙方事先約定的奇偶校驗方式進(jìn)行數(shù)據(jù)檢錯,并將錯誤的數(shù)據(jù)幀剔除,等待發(fā)送方重發(fā)。這種ARQ的通信方式本身是無可厚非的,但是有的軟件人員在編程時考慮問題不夠全面,在判斷一幀結(jié)束處理時,沒有根據(jù)所收數(shù)據(jù)幀的長度和結(jié)束符“16H”及時地將數(shù)據(jù)接收任務(wù)結(jié)束,而是依據(jù)多長時間內(nèi)收不到新的一個字節(jié)數(shù)據(jù)來認(rèn)為一幀已收完。這種處理方法在下面這種情況下就會導(dǎo)致通信失敗。
*,RS485芯片的接收靈敏度為±200mV,即當(dāng)電壓UA—UB≥200mV時,輸出邏輯“1”;UA—UB≤-200mV時,輸出邏輯“0”。當(dāng)-200mV<UA—UB<200mV時,輸出不確定。這樣一來,當(dāng)總線上所有的485芯片均處于接收狀態(tài)時,總線處于高阻狀態(tài),此時A、B間的壓差為0V,芯片輸出處于不定狀態(tài),可能輸出“1”,也可能輸出“0”,而且狀態(tài)會隨著時間而變化。如果輸出為“0”,在某些時候則會導(dǎo)致通信失敗。我們知道,電能表在發(fā)送完應(yīng)答幀后,一般會馬上從發(fā)送狀態(tài)轉(zhuǎn)換到接收狀態(tài)。正常情況應(yīng)該是:主站的485芯片收完zui后一個字節(jié)的停止位后繼續(xù)保持為“1”(波形見圖2),而有的485芯片則可能跳變保持為“0”(波形見圖3),UART(通用異步收發(fā)器)則認(rèn)為又收到一個字節(jié)00H,且很有可能校驗和是錯的,這樣接收軟件可能會判斷到一個字節(jié)校驗位出錯,而將前面接收*正確的一幀丟掉,造成通信失敗。
4.接口電路不合理
由于485在實際使用中存在這樣或那樣的問題,人們對其接口電路采取了各種保護(hù)、濾波措施。如加上保護(hù)二極管、熱保險絲、電容、上拉電阻等(見圖4),這些措施有的有效,但有的無效甚至有害。
485總線的理想介質(zhì)是雙絞線,其等效阻抗約為120Ω,因此為了在長距離、高速通信時做到阻抗匹配,一般在電表的485的A、B線之間加一個120Ω的電阻。此種方式對于一對一的通信是實用的,但一對多時,如果每個電表內(nèi)部均加一個120Ω的電阻,并在一起整個總線上的負(fù)載就很重,這樣掛在總線上的485收發(fā)器就可能達(dá)不到標(biāo)準(zhǔn)的數(shù)量32個,且距離也會縮短。因此,只應(yīng)在網(wǎng)絡(luò)的起點和終點各加一個。
有的產(chǎn)品為了濾波而在A、B線對地加上電容,現(xiàn)在看來這樣會帶來問題。電容加小了不起作用;加大了,正常的信號會被濾除或造成波形失真。我們曾經(jīng)做過試驗,以1200bps通信時,0.1μF的電容就會影響通信的成功率。如果通信速率達(dá)到幾百kbps,電容就不能加了。
485總線處于懸浮狀態(tài)時A、B線等電位。為了保證A比B高200mV以上,有的廠家將A、B線分別通過10k電阻上拉到5V、下拉到地,這樣在都處于接收狀態(tài)時,A、B間的電位差約為5V,485芯片的接收端為高,通信不受影響。這個想法是好的,但是實際組網(wǎng)中往往好幾個廠家的表連在一起,如別的表中加了120Ω電阻,則上拉電阻、120Ω、下拉電阻之間構(gòu)成分壓關(guān)系,A、B線間的電壓只有幾十毫伏,接收端的電平還是不定。
目前國內(nèi)應(yīng)用的單片機(jī)大部分只有一個UART串口,而電能表一般均需一個485接口和一個紅外光接口,受成本所限,有的廠家就將這兩個信號通過線與、線或的方式合在一起共用一個UART口。這樣就帶來一個問題,當(dāng)紅外通信時,485就會不通;另外,當(dāng)紅外收到各種可見光的干擾時,紅外口不停地輸出干擾信號,由于線與、線或邏輯的原因,485不能通信或485時通時不通。