李永征,范三龍,張 林,包素麗
?
重復(fù)中斷方式485方向控制方法
李永征,范三龍,張 林,包素麗
本文涉及一種重復(fù)中斷方式RTS/485方向控制方法,可以達(dá)到精確控制485芯片通信發(fā)送方向的目的,而無(wú)需改變硬件設(shè)計(jì),適用于中、高速485通信。
重復(fù)中斷;485;控制
隨著電力系統(tǒng)自動(dòng)化技術(shù)的不斷發(fā)展及變配電所內(nèi)智能設(shè)備的大量使用,智能設(shè)備及系統(tǒng)間的數(shù)據(jù)交換越來(lái)越重要,連接和管理各設(shè)備及系統(tǒng)間的數(shù)據(jù)通信接口成為了電力自動(dòng)化系統(tǒng)不可或缺的重要部分。
RS-485串行接口是工業(yè)控制和電力系統(tǒng)自動(dòng)化領(lǐng)域常用的低速長(zhǎng)距離通信接口,其通信的可靠性至關(guān)重要[1,2]。
RS-485是在RS-232、RS-422基礎(chǔ)上發(fā)展而來(lái),采用差分信號(hào)負(fù)邏輯,+2 V~+6 V表示“0”,-6 V~-2V表示“1”。RS-485有兩線制和四線制2種接線方式,四線制只能實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信,很少采用,多采用兩線制接線方式。該接線方式為總線式拓樸結(jié)構(gòu),在同一總線上最多可以掛接32個(gè)節(jié)點(diǎn)。在RS-485通信網(wǎng)絡(luò)中一般采用主從通信方式,即一個(gè)主機(jī)帶多個(gè)從機(jī)。
RS-485有2根信號(hào)線,發(fā)送和接收共用A和B線,采用差分電平方式傳輸且允許在一條通信總線上掛接多個(gè)節(jié)點(diǎn)。由于RS-485的收與發(fā)共用2根線,必然要求各節(jié)點(diǎn)能夠獨(dú)立控制總線驅(qū)動(dòng)器的關(guān)斷和打開,確保不影響其他節(jié)點(diǎn)的正常通信,所以對(duì)于總線上的單個(gè)節(jié)點(diǎn)來(lái)說(shuō)不能同時(shí)收和發(fā),必須精確地控制總線芯片的收發(fā)使能信號(hào),以切換收發(fā)方向。
對(duì)于總線型的485總線,485控制芯片的收發(fā)方向控制是一個(gè)需要解決的基本問(wèn)題。目前,485控制芯片收發(fā)方向控制的主要方法有RTS信號(hào)延時(shí)控制、TX/DI信號(hào)反相后直接控制、專用硬件控制、485總線收發(fā)芯片自動(dòng)方向控制等。其中,通過(guò)RTS信號(hào)延時(shí)控制是基于PC機(jī)的485接口設(shè)備的通行做法,傳統(tǒng)設(shè)計(jì)中采用系統(tǒng)定時(shí)器控制,在發(fā)送空中斷到來(lái)時(shí),設(shè)定一個(gè)字節(jié)時(shí)間的定時(shí)器,在定時(shí)器時(shí)間到后,收回RTS信號(hào)。但類似Windows這種非實(shí)時(shí)操作系統(tǒng),其內(nèi)核時(shí)鐘的最高分辨率為1 ms,定時(shí)器的精度為1~2 ms,在9 600波特率時(shí),1個(gè)字節(jié)時(shí)間約為1 ms,實(shí)測(cè)顯示定時(shí)器會(huì)導(dǎo)致MAX485的發(fā)送驅(qū)動(dòng)器多打開1個(gè)字節(jié)以上的時(shí)間,在高速485終端間通信時(shí)將會(huì)產(chǎn)生問(wèn)題。由于操作系統(tǒng)的時(shí)鐘分辨率限制,延時(shí)控制的精度較低,在中高速485通信時(shí)不能滿足要求。
為了解決既有設(shè)計(jì)中高速485通信時(shí)485控制芯片的收發(fā)方向精確控制問(wèn)題,本文提出了一種新的控制方法。
(1)采用16C550兼容UART芯片。大量成熟的設(shè)計(jì)中采用16C550兼容UART芯片,如ST16C554。其具有以下特點(diǎn):工業(yè)級(jí),5 V或3.3 V供電,接收和發(fā)送16字節(jié)的FIFO,支持最高 1.5 Mbps速率;16C550兼容的寄存器集為4路獨(dú)立UART通道,支持MODEM控制。
(2)采用MAX485總線收發(fā)芯片。
(3)采用FIFO中斷方式發(fā)送。每次發(fā)送最多可向16C554寫入16個(gè)字節(jié),接收時(shí),根據(jù)設(shè)定在連續(xù)接收1、2、4或14個(gè)字節(jié)時(shí)產(chǎn)生中斷,或在接收的字節(jié)流停止約5個(gè)字節(jié)時(shí)產(chǎn)生中斷。
(4)采用RTS信號(hào)反相后使能485發(fā)送,實(shí)現(xiàn)485收發(fā)方向控制。每路UART具有獨(dú)立的RTS、DTR等MODEM控制管腳,其中RTS管腳反相后常用于485收發(fā)方向控制。
由于16C550兼容UART控制器未設(shè)置自動(dòng)RTS控制,且在TSR(移位寄存器)空時(shí)不產(chǎn)生中斷,給程序控制RTS帶來(lái)很大困難。而使用重復(fù)中斷方式或類似的實(shí)時(shí)輪詢方式,通過(guò)主動(dòng)檢查TSR的空標(biāo)志收回RTS信號(hào),可以達(dá)到精確控制的目的。
通用RS-485串行通信接口的電氣原理如圖1所示。
圖1 通用RS-485串行通信接口電氣原理
本方法的優(yōu)選方案為,A芯片采用ST16C554D芯片,該芯片是一款16C550、Windows操作系統(tǒng)兼容的UART控制芯片,具有4路獨(dú)立的串口通道,每一路通道在線路側(cè)只使用TX、RX、RTS信號(hào),這3個(gè)信號(hào)在經(jīng)過(guò)光耦T1-T3隔離后,連接MAX485芯片的DI、DE和RD管腳,其中RTS和DE之間經(jīng)過(guò)反相器U4,MAX485芯片的DE和RE信號(hào)并接, MAX485工作在半雙工模式;B中的總線收發(fā)芯片為MAX481或MAX483或MAX485或MAX487-MAX491,是常用的低功耗RS-485/RS-422總線收發(fā)器,具有獨(dú)立的收發(fā)回路,支持半雙工和全雙工模式。
重復(fù)中斷方式485方向控制方法具體方案如下:芯片采用16C550兼容UART芯片,采用總線收發(fā)芯片,并采用FIFO中斷方式發(fā)送;RTS信號(hào)反相后使能485發(fā)送,進(jìn)行485收發(fā)方向控制,在每一幀串口數(shù)據(jù)發(fā)送前使能RTS,進(jìn)而打開MAX485芯片的發(fā)送驅(qū)動(dòng)器,接著開始發(fā)送過(guò)程;在發(fā)送結(jié)束后收回RTS信號(hào),關(guān)閉MAX485芯片的發(fā)送驅(qū)動(dòng)器,MAX485進(jìn)入接收狀態(tài);在發(fā)送中斷到來(lái)時(shí),重復(fù)使能發(fā)送中斷,并檢測(cè)TSR的空標(biāo)志,當(dāng)TSR空標(biāo)志產(chǎn)生后,收回RTS信號(hào)。
在初始狀態(tài),RTS信號(hào)無(wú)效,MAX485處于接收狀態(tài)。當(dāng)有數(shù)據(jù)需要發(fā)送時(shí),首先使能RTS,將MAX485芯片置于發(fā)送狀態(tài),然后發(fā)送一幀數(shù)據(jù),發(fā)送完成后,需及時(shí)收回(復(fù)位)RTS信號(hào),并將MAX485芯片置于接收狀態(tài),以便接收對(duì)方的回應(yīng)(如果未能及時(shí)收回RTS信號(hào),當(dāng)對(duì)方很快回應(yīng)時(shí),不能正確接收回應(yīng)報(bào)文中的頭部字節(jié))。
圖2為串口中斷的處理流程圖。
圖2 串口中斷處理流程
多串口卡共用一個(gè)中斷信號(hào),當(dāng)中斷信號(hào)發(fā)生時(shí),CPU首先判斷發(fā)生中斷的串口,并獲得串口號(hào)。然后讀取相應(yīng)串口的狀態(tài)寄存器,判斷是接收中斷還是發(fā)送中斷。如果是接收中斷,讀取接收數(shù)據(jù),并保存到內(nèi)存中的接收緩沖區(qū);如果是發(fā)送中斷,檢查是否有數(shù)據(jù)發(fā)送,如果有則使能RTS信號(hào),將MAX485芯片置于發(fā)送狀態(tài),然后向ST16C554D寫入發(fā)送數(shù)據(jù),等待下一次中斷,如果沒(méi)有數(shù)據(jù)發(fā)送,則檢查TSR的空標(biāo)志,如果不為空,則再次使能發(fā)送中斷,等待下一次中斷,如果為空,則復(fù)位(收回)RTS信號(hào),將MAX485芯片置于接收狀態(tài),一幀發(fā)送過(guò)程結(jié)束。
(1)本方案利用ST16C554D兼容UART芯片的發(fā)送中斷使能特性,通過(guò)重復(fù)中斷的方式,輪詢TSR的空標(biāo)志。由于中斷處理的實(shí)時(shí)性,本方法可以精確控制RTS信號(hào)、MAX485的發(fā)送和接收狀態(tài)切換時(shí)間。
(2)本方案適用于9 600波特率以上的中、高速485通信,可以在不改變現(xiàn)有硬件設(shè)計(jì)的基礎(chǔ)上提高控制精度。
(3)采用通行硬件設(shè)計(jì)方案,無(wú)需更改現(xiàn)有硬件,只需在驅(qū)動(dòng)軟件上稍作修改,即可實(shí)現(xiàn)485控制芯片收發(fā)方向精確控制。本方法在牽引變電站自動(dòng)化系統(tǒng)的通信裝置中進(jìn)行了試用,效果良好,具有一定的適用性及應(yīng)用前景。
綜上所述技術(shù)屬于工業(yè)控制和電力系統(tǒng)自動(dòng)化技術(shù)領(lǐng)域,涉及一種重復(fù)中斷方式RTS/485方向控制方法,成功解決了既有設(shè)計(jì)中高速485通信時(shí)485控制芯片的收發(fā)方向精確控制問(wèn)題。本方法已成功申請(qǐng)并獲得發(fā)明專利授權(quán)證書(專利授權(quán)號(hào)為:ZL 2012 1 0372192.X)。該方法已成功應(yīng)用于鐵路及城市軌道交通領(lǐng)域的新產(chǎn)品開發(fā)中,如微機(jī)通信管理裝置、網(wǎng)絡(luò)通信服務(wù)器等,使裝置的通信傳輸能力及通信的可靠性得到有效提升。隨著高速鐵路及城市軌道交通的快速發(fā)展,本方案產(chǎn)品將擁有廣闊的應(yīng)用前景。
[1] 高志國(guó). 基于RS-485總線信號(hào)的可靠性研究[J]. 信息技術(shù),2011,47(2):42-44.
[2] 田偉. RS-485總線分支線短路故障檢測(cè)技術(shù)[J]. 微電子學(xué)與計(jì)算機(jī),2011,28(4):176-179.
The paper relates in a type of repeated interruption mode RTS/485 directional control method, which is able to realize the purpose of accurate control of 485 communication direction without requirements of changing the design of hardware; it is applicable to medium and high speed 485 communication.
Repeated interruption; 485; control
U224.9
B
1007-936X(2018)02-0091-03
2017-06-19
10.19587/j.cnki.1007-936x.2018.02.024
李永征.南京國(guó)電南自軌道交通工程有限公司,高級(jí)工程師,研究方向?yàn)檐壍澜煌ㄗ冸娬咀詣?dòng)化;范三龍,包素麗.南京國(guó)電南自軌道交通工程有限公司,高級(jí)工程師;張 林.南京國(guó)電南自軌道交通工程有限公司,工程師。