基于霍尼韋爾SDC3002G協(xié)議的智能變送器研究鄭貴林,黃雄輝(武漢大學(xué)自動(dòng)化系,湖北武漢430072)造和軟件設(shè)計(jì)思想,并說(shuō)明使用FIX組態(tài)軟件和API函數(shù)實(shí)現(xiàn)MODBUS主站通信的兩種方法,該網(wǎng)絡(luò)結(jié)構(gòu)可以實(shí)現(xiàn)512個(gè)從節(jié)點(diǎn)與主站間的MODBUS通信。應(yīng)用表明:該設(shè)計(jì)簡(jiǎn)單實(shí)用,發(fā)揮了MODBUS的主要性能優(yōu)點(diǎn),對(duì)其他同類(lèi)型智能儀器及系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)有一定的借鑒作用。
霍尼韋爾SDC3002G智能變送器設(shè)計(jì)的智能變送器是在分體式液位壓力模擬變送器的基礎(chǔ)上改造而成,主要功能是采集和處理單路液位壓力信號(hào)、解析和封裝通信報(bào)文并實(shí)現(xiàn)MODBUS協(xié)議。智能壓力變送器通過(guò)RS― 485通信總線接口連接主站(PLC或IPC)和其他從站設(shè)備,構(gòu)建MOD-BUS網(wǎng)絡(luò),完成開(kāi)放式遠(yuǎn)程數(shù)據(jù)采集和監(jiān)控功能。
1.1硬件設(shè)計(jì)硬件電路部分以AT89C2051單片機(jī)為核心,使用12位串行A/D轉(zhuǎn)換器ADS7816采集前端壓力模擬信號(hào),采集數(shù)據(jù)經(jīng)半雙工RS*485芯片SN65HVD3082E向MODBUS網(wǎng)絡(luò)其他設(shè)備傳輸。硬件各部分大多選用尺寸小、功耗低、外圍電路簡(jiǎn)單的新型工業(yè)級(jí)貼片元件,設(shè)計(jì)電路的結(jié)構(gòu)簡(jiǎn)潔、緊湊。
硬件電路原理框圖如所示。
1.1.1前端壓敏元件及信號(hào)調(diào)理電路硬件電路原理框圖0592MHz晶振,采用軟件復(fù)位。
設(shè)計(jì)電路使用了AT89C2051的15根可編程I/O引線,其中P1口和P3口有8根引腳與8位DIP開(kāi)關(guān)連接,用于設(shè)定MODBUS地址;P1.7~P1.5用作串行A/D轉(zhuǎn)換器的片選、串行數(shù)據(jù)輸出和時(shí)鐘信號(hào);P3.0、P31和P1.4接入SN65HVD3082E的接收輸入、發(fā)射輸出和收發(fā)使能端;P3.7用作,叩監(jiān)控芯片IMP813L的看門(mén)狗輸入信號(hào)。
電路使用的+5V電源采用BB公司的DC―DC芯片DCP012405BP.DCP012405BP是一種小型化、隔離型的DC*DC電源芯片,輸入和輸出電壓分別是+ 24V和+5V,它的外圍電路極少,僅在輸入、輸出與收稿曰期:2004-04- 30修改稿日期:2005*01*20地之間加入47呷電容改善紋波和荷載瞬態(tài)響應(yīng),且前端壓敏元件及信號(hào)調(diào)理電路用于采集液位壓力信號(hào),進(jìn)行濾波放大、零點(diǎn)校正、線性化、溫度及靈敏補(bǔ)償?shù)刃盘?hào)處理,輸出一路標(biāo)準(zhǔn)的4~20mA信號(hào)。這部分由模擬變送器組成,作為整個(gè)分體式壓力變送器的前端,硬件的其他部分則置于接線盒內(nèi)
1.1.2單片機(jī)及附屬電路AT89C2051是ATMEL公司生產(chǎn)的高性價(jià)比單片機(jī),其引腳功能和指令系統(tǒng)與MCS― 51完全兼容,只減少P0和P1口。電路中,AT89C2051不擴(kuò)展片外存具有內(nèi)部過(guò)熱保護(hù)及輸出短路保護(hù)等功能,用作供電電源非常適合。
1.1.3串行數(shù)據(jù)采集電路串行數(shù)據(jù)采集電路由八變換單元、電壓基準(zhǔn)源和串行A/D轉(zhuǎn)換器組成。VA變換單元應(yīng)用精度為0.1%,溫度系數(shù)為*5X16/*C的高精密電阻,把前端輸入的4~20mA信號(hào)變換成直流小電壓信號(hào)作為串行A/D轉(zhuǎn)換器的輸入。A/D轉(zhuǎn)換器的電壓基準(zhǔn)源1.2.2A/D采樣子程序A/D采樣子程序由通信子程序調(diào)用,完成接收和處理ADS7a6輸出數(shù)據(jù)的功能。
如所示,當(dāng)ADS7a6的CS接收下降沿信號(hào)時(shí),A/D轉(zhuǎn)換和數(shù)據(jù)串行輸出過(guò)程完成初始化。ADS7816在DCLK接收的最初的1.5到來(lái)時(shí),Dout輸出信號(hào)有效,首先輸出1個(gè)時(shí)鐘周期的采用精密電壓基準(zhǔn)芯片REF02. A/D轉(zhuǎn)換器采用12位的串行模數(shù)轉(zhuǎn)換器ADS7816.其內(nèi)部集成了大帶寬跟蹤/保持電路和串行接口,結(jié)構(gòu)簡(jiǎn)單,轉(zhuǎn)換速率高且功耗低,在體積、功耗和精度上都能滿足智能變送器的要求。
1.1.4通信接口電路通信總線接口電路采用TI公司的RS*485接口芯片SN65HVD3082E.它將RS*485通信中各種故障(包括瞬變電壓、ESD、電磁干擾、總線開(kāi)路、總線短路、總線休閑、熱故障等)的防范措施集成到一個(gè)芯片內(nèi),較好地解決了RS―485通信中常見(jiàn)故障。該芯片功耗極低,除負(fù)載外供電電流一般小于0.6mA,關(guān)閉模式下降到幾nA.但它負(fù)載能力很強(qiáng),可以支持256個(gè)收發(fā)器,強(qiáng)噪聲環(huán)境中波特率最大可達(dá)200kbit/s. 485串行通信,SN65HVD3082E的收、發(fā)使能端共同連接AT89C2051 1.2軟件設(shè)計(jì)軟件設(shè)計(jì)主要由主程序、通信子程序和A/D采樣子程序組成,采用查詢方式實(shí)現(xiàn)與外部MODBUS網(wǎng)絡(luò)的通信。
1.2.1主程序主程序由初始化、看門(mén)狗置位/清零、通信子程序組成。除通信子程序外,主程序主要進(jìn)行本站內(nèi)存單元分配、MODBUS地址讀取、串行口等器件的工作方式和參數(shù)設(shè)置等任務(wù),為系統(tǒng)正常工作創(chuàng)造條件。主程序框圖如所示。
初始化部分完成AT89C2051的串行口、定時(shí)計(jì)數(shù)器1的參數(shù)的初值設(shè)定,分配各種數(shù)據(jù)所需的內(nèi)存存儲(chǔ)空間。其中定時(shí)器1運(yùn)行在工作方式2,串口工作方式定為波特率可變的11位異步接收和發(fā)送方式(方式3),不允許多機(jī)通信,接收和發(fā)送的第9位數(shù)據(jù)位都為1,波特率為9600bit/s.通訊循環(huán)子程序的前后寫(xiě)入看門(mén)狗置位/清零語(yǔ)句,不斷監(jiān)視其循環(huán)運(yùn)行。
低電平,然后依次輸出12位模數(shù)轉(zhuǎn)換數(shù)據(jù),最先輸出MSB位B11,最后輸出B0.輸出的每位串行數(shù)據(jù)在時(shí)鐘的上升沿輸出,在下降沿有效。在最后一位輸出數(shù)據(jù)的同步時(shí)鐘脈沖的下降沿到達(dá)時(shí),當(dāng)高電平信號(hào)輸入CS引腳,Dout的輸出將呈高阻態(tài),同時(shí)結(jié)束一次完整的模數(shù)轉(zhuǎn)換及數(shù)據(jù)串行輸出過(guò)程。
A/D轉(zhuǎn)換過(guò)程的時(shí)序圖ADS7816串行數(shù)據(jù)接口的Dout和DCIK通常與AT89C2051串口的RXD和TXD連接,采用移位寄存器輸入/輸出方式(串口工作方式0)輸出采樣數(shù)據(jù)。但AT89C2051的串口實(shí)現(xiàn)RS― 485通信,故電路使用P1.7、P1.6和P1.5連接CS、Dct和DCLK引腳,模擬串口實(shí)現(xiàn)數(shù)據(jù)串行輸出,其原理流程圖如所示。
流程圖中調(diào)整A/D轉(zhuǎn)換數(shù)據(jù)高低位數(shù)據(jù)通過(guò)循環(huán)移位語(yǔ)句實(shí)現(xiàn),丟棄第1次采集數(shù)據(jù)是剔除ADS7816采樣保持器保存的前次采樣數(shù)據(jù),采樣數(shù)據(jù)處理部分則抑制隨機(jī)干擾誤差,得到更可靠、準(zhǔn)確的采樣數(shù)據(jù)。
1.2.3通信子程序通信子程序?qū)崿F(xiàn)MODBUS通信協(xié)議,是軟件設(shè)計(jì)的核心部分。
通信子程序采用智能儀器常用的MODBUS停止位(無(wú)奇偶校驗(yàn))構(gòu)成。使用MODBUS的03和08功能,分別用于讀取壓力變送器A/D采樣數(shù)值和回送各種通信診斷信息,其中03功能的數(shù)據(jù)格式如下。
地址功能碼寄存器首地址寄存器數(shù)CRC校驗(yàn)碼響應(yīng)數(shù)據(jù)幀格式:地址功能碼數(shù)據(jù)字節(jié)數(shù)采樣數(shù)據(jù)CRC校驗(yàn)碼03功能在MODBUS協(xié)議中是實(shí)現(xiàn)保持寄存器讀取功能,此類(lèi)寄存器地址設(shè)為4XXXX格式。對(duì)于所設(shè)計(jì)的壓力變送器,主站只需讀取1個(gè)寄存器的數(shù)據(jù),即1路壓力采樣信號(hào)。
通信子程序采用查詢方式實(shí)現(xiàn)單工通信,流程框如所示。
據(jù)流的形式傳送,如果在幀完成之前有超過(guò)1.5個(gè)字符時(shí)間的停頓時(shí)間,接收設(shè)備將刷新不完整的消息并假定下一字符是一幀新報(bào)文的地址域。從可知,程序首先對(duì)SN65HVD3082E收發(fā)使能端清零,使只允許接收串行數(shù)據(jù)。然后,利用以下C51代碼延時(shí)1.5個(gè)字符傳輸時(shí)間,判斷是否接收到報(bào)文消息。
CLOSE;//延時(shí)1.5字符時(shí)間,若未收到數(shù)據(jù)轉(zhuǎn)CUBE退出通信子程若沒(méi)收到報(bào)文,退出通信子程序;若收到報(bào)文,通過(guò)對(duì)中斷標(biāo)志位RI進(jìn)行清零操作,依次接收?qǐng)?bào)文的各字符段。接收完一幀報(bào)文后,程序?qū)κ瞻l(fā)使能端置位,使只允許發(fā)送串行數(shù)據(jù)。接著,程序依次檢驗(yàn)CRC碼、地址代碼和功能代碼,并依據(jù)MODBUS協(xié)議式進(jìn)行二進(jìn)制除法運(yùn)算。為節(jié)省代碼存儲(chǔ)空間,選用二進(jìn)制除法運(yùn)算。
2MODBUS主站通信的實(shí)現(xiàn)FIX組態(tài)軟件開(kāi)發(fā)方式使用FIX7.0組態(tài)軟件實(shí)現(xiàn)MODBUS主站通信的基本操作如下:10d驅(qū)動(dòng)程序(MB1)。)的MB1DriverConfiguration驅(qū)動(dòng)器配置,選擇Channel通道,在Setup窗口設(shè)置端口、波特率、數(shù)據(jù)位、停止位、奇偶校驗(yàn)位、流量控制、報(bào)文傳輸模式、報(bào)文丟失重發(fā)次數(shù)、響應(yīng)超時(shí)時(shí)間等通信參數(shù)。接著在MB1DriverConfiguration確定MODBUS從站名稱(chēng)和地址(DeviceName與PmaiyStation),把AddressingType和BitBase欄設(shè)為5一Digit和0~15,使用4XXXX形式表示保持寄存器地址,以0表示起始寄存器。然后在I/OBlock列表添加1條輪詢記錄,設(shè)置所查詢的寄存器的起始地址、結(jié)束地址、數(shù)據(jù)類(lèi)型等參數(shù)。最后保存驅(qū)動(dòng)器配置各參數(shù)。
類(lèi)型記錄,在其AnalogInputBlock窗口設(shè)置基本參數(shù):TagName設(shè)置記錄名、ScanTimes設(shè)置輪詢次數(shù)、HardwareSpecifications中的Device和I/OAddress設(shè)為MB1和“從站名稱(chēng):寄存器起始地址”格式的參數(shù)。
0數(shù)據(jù)庫(kù)輪詢記錄,實(shí)現(xiàn)MOBUS監(jiān)控系統(tǒng)通信。
API函數(shù)開(kāi)發(fā)方式使用IPC作為主站時(shí),利用高級(jí)語(yǔ)言自編MOD-JS通信程序通常有采用MSComm或其他類(lèi)似通信控件和調(diào)用API函數(shù)。方法一簡(jiǎn)單但不夠靈活,設(shè)計(jì)在Vd6.0環(huán)境下調(diào)用API函數(shù)開(kāi)發(fā)主站通信程序,其主要步驟如下:返回一個(gè)操作句柄,否則返回INVALIDHANDLEVALUE.設(shè)置與從站一致的串口通信參數(shù)。修改這些參數(shù)則使用設(shè)備控制塊DCB結(jié)構(gòu)體。
設(shè)置串口通信監(jiān)視事件。程序在I/O中,將()函數(shù)設(shè)置事件屏蔽來(lái)監(jiān)視指定通信資源上的這組事件。
進(jìn)行超時(shí)設(shè)置,為通信中的中斷、停止等不可預(yù)測(cè)事件的發(fā)生作安全防范措施。超時(shí)設(shè)置首先設(shè)定COMMTIMEOUTS結(jié)構(gòu)中的5個(gè)變量,然后調(diào)用Set-對(duì)各種情況作出相應(yīng)處理,最后退出通信子程序,完成1個(gè)循環(huán)查詢工作周期。CommTimeouts()函數(shù)設(shè)定超時(shí)值。
計(jì)算CRC校驗(yàn)碼有建立CRC校驗(yàn)碼表和根據(jù)公(5)調(diào)用ReadFile(wrteFile()函數(shù)接收和發(fā)送報(bào)文數(shù)據(jù),按照MODBUS協(xié)議的命令和要求實(shí)現(xiàn)與從站的查詢一響應(yīng)過(guò)程,實(shí)現(xiàn)數(shù)據(jù)監(jiān)控系統(tǒng)通信。
3結(jié)束語(yǔ)MODBUS現(xiàn)場(chǎng)總線通信協(xié)議具備功能強(qiáng)、通信效率高、開(kāi)放性好等優(yōu)點(diǎn),設(shè)計(jì)的智能壓力變送器在某小型水電站監(jiān)控系統(tǒng)的應(yīng)用中取得良好效果,發(fā)揮了MODBUS的主要性能優(yōu)點(diǎn),對(duì)其它同類(lèi)型智能儀器及系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)有一定的借鑒作用。
聯(lián)系人:小費(fèi)
QQ:2851759102
郵箱:2851759102@qq.com
傳真:0592-5580710
電話:0592-2350124
手機(jī):18050025437