摘? 要: 在詳細(xì)分析西門子80C166單片機(jī)PEC服務(wù)工作機(jī)制和PROFIBUS-FDL幀格式的基礎(chǔ)上,提出了基于該種單片機(jī)PEC服務(wù)機(jī)制的PROFIBUS-FDL從站協(xié)議的實(shí)現(xiàn)方法,并在實(shí)際工作中得到成功應(yīng)用。
關(guān)鍵詞: 80C166? PEC服務(wù)? PROFIBUS-FDL
?
當(dāng)前工業(yè)設(shè)備制造技術(shù)正向高性能、專用化、分布式、網(wǎng)絡(luò)化方向發(fā)展。以前,大量使用PLC實(shí)現(xiàn)的控制系統(tǒng),實(shí)踐證明雖然安全可靠,但由于PLC本身的技術(shù)原因,很難達(dá)到更快速的實(shí)時(shí)控制要求,它們正被高性能的嵌入式專用控制器替代。這種專用控制器的設(shè)計(jì),可以進(jìn)一步提高設(shè)備的控制性能;引入現(xiàn)場總線技術(shù),保證專用控制器的系統(tǒng)可集成性,以適應(yīng)當(dāng)前分布式、網(wǎng)絡(luò)化的應(yīng)用趨勢。
??? 本文是在研制棒材生產(chǎn)線飛剪的專用控制器時(shí)涉及的一個(gè)子課題。為保證該控制器能與現(xiàn)有PLC網(wǎng)連接以及與遠(yuǎn)程操作站通信,在幾乎不增加硬件的基礎(chǔ)上,利用核心CPU——西門子80C166所具有的一個(gè)類似DMA的功能高效率地實(shí)現(xiàn)PROFIBUS-FDL從站協(xié)議。
1 西門子80C166單片機(jī)
80C166單片機(jī)是西門子C166系列16位嵌入式微控制器的第一代產(chǎn)品。其體系結(jié)構(gòu)如圖1所示。它結(jié)合RISC處理器的優(yōu)點(diǎn),克服了CISC處理器在嵌入式應(yīng)用中的瓶頸;在25MHz時(shí)鐘頻率下,可達(dá)到12.5MIPS,幾乎所有的指令執(zhí)行時(shí)間小于80ns;在指令處理上,采用四級(jí)指令流水線管道結(jié)構(gòu);在存儲(chǔ)管理上,統(tǒng)一線性地址空間可達(dá)256KB,具有段(代碼)、頁(數(shù)據(jù))式管理機(jī)制;采用寄存器池,上下文切換時(shí)間只要80ns;16位乘法400ns,32位除法800ns,中斷響應(yīng)時(shí)間最慢400ns;外部事件控制器PEC服務(wù)具有類似DMA的功能,可實(shí)現(xiàn)存儲(chǔ)器與外設(shè)之間的高速數(shù)據(jù)傳輸;豐富的在片外設(shè):1KB RAM、10路A/D、76路I/O、7個(gè)定時(shí)器/計(jì)數(shù)器、16個(gè)比較/捕獲單元、2個(gè)串行通信接口、在片的WATCHDOG等。
?
2 80C166的PEC服務(wù)
2.1 80C166的PEC服務(wù)機(jī)制
PEC是外部事件控制器的英文縮寫。PEC服務(wù)是80C166提供的一種特殊數(shù)據(jù)傳輸機(jī)制。其目的是在原有的中斷控制器基礎(chǔ)上,用較小的硬件代價(jià)、盡可能少占用處理機(jī)周期實(shí)現(xiàn)內(nèi)存與外部設(shè)備的快速數(shù)據(jù)交換(類似DMA,但無需專用的DMA控制器)。80C166有8路PEC服務(wù)通道。用PEC服務(wù)進(jìn)行一次數(shù)據(jù)傳輸,僅占用處理機(jī)一個(gè)機(jī)器周期(20MHz時(shí)100ns),且不影響當(dāng)前程序的執(zhí)行。
2.2 PEC服務(wù)的工作過程
通常,當(dāng)普通中斷事件發(fā)生時(shí),系統(tǒng)將保存當(dāng)前CPU狀態(tài)PSW和程序的地址;然后,根據(jù)不同的中斷源,進(jìn)行上下文切換,裝載相應(yīng)的中斷矢量,執(zhí)行相應(yīng)的中斷服務(wù)程序" title="中斷服務(wù)程序">中斷服務(wù)程序;執(zhí)行完后,恢復(fù)被中斷程序的上下文,繼續(xù)執(zhí)行被中斷程序。
對(duì)于某一PEC服務(wù),它總是與一具體中斷源、中斷矢量或中斷服務(wù)相聯(lián)系。在80C166中,當(dāng)一個(gè)中斷的中斷優(yōu)先級(jí)為最高級(jí)14或15且定義了與之相關(guān)聯(lián)的PEC服務(wù)通道時(shí),該中斷就具有PEC服務(wù)功能。這時(shí),當(dāng)該中斷請(qǐng)求發(fā)生時(shí),將不觸發(fā)中斷服務(wù)程序的執(zhí)行,而是觸發(fā)PEC服務(wù)。當(dāng)PEC服務(wù)經(jīng)過設(shè)定的若干次的外部事件觸發(fā)后,再觸發(fā)執(zhí)行相應(yīng)的中斷服務(wù)程序(一個(gè)普通中斷過程)。
如圖2所示。一次PEC服務(wù)的工作過程是由PEC控制寄存器" title="控制寄存器">控制寄存器定義的,其中計(jì)數(shù)位域(8位傳送計(jì)數(shù)器)COUNT定義了PEC服務(wù)的數(shù)據(jù)傳輸次數(shù);源指針、目的指針指明具體的數(shù)據(jù)傳輸來源和目的;PEC服務(wù)的數(shù)據(jù)傳輸過程完全由硬件執(zhí)行:當(dāng)中斷請(qǐng)求發(fā)生時(shí),由硬件將源指針?biāo)竼卧膬?nèi)容傳給目的指針?biāo)傅膯卧?然后由PEC控制寄存器相應(yīng)定義位控制是源指針還是目的指針增加1或2,同時(shí)COUNT值減1;當(dāng)多次中斷請(qǐng)求使COUNT減為0時(shí),PEC服務(wù)完成,觸發(fā)與之關(guān)聯(lián)的中斷服務(wù)程序。
?
2.3 PEC服務(wù)應(yīng)用優(yōu)勢
以串口" title="串口">串口接收一幀16字節(jié)的數(shù)據(jù)為例。若采用傳統(tǒng)的串口接收方式,每接收到一字節(jié),產(chǎn)生一個(gè)中斷;在中斷服務(wù)程序中,要將它從串口接收緩沖器中取出,順序放到幀接收緩沖區(qū)相應(yīng)單元中;當(dāng)接收滿16字節(jié)后,進(jìn)行幀處理。
如果采用PEC服務(wù)的方式,只要事先定義好PEC通道就可以了。首先,定義串口接收中斷優(yōu)先級(jí)為14或15以及與之相關(guān)聯(lián)的PEC通道。即定義相應(yīng)PEC通道控制寄存器為:COUNT為16字節(jié)傳輸,源指針為串口接收緩沖器,目的指針為幀接收緩沖區(qū)首址且每次傳輸完成后,目的指針加1。這樣,串口每接收到一字節(jié),將觸發(fā)一次PEC服務(wù),由硬件將數(shù)據(jù)從串口接收緩沖器中取出,順序放到幀接收緩沖區(qū)相應(yīng)單元中,但當(dāng)前執(zhí)行的程序并不被中斷;當(dāng)16字節(jié)完全接收完成后,觸發(fā)串口接收中斷服務(wù)程序,進(jìn)行幀的處理。
與傳統(tǒng)的串口接收方式相比較,PEC服務(wù)方式在進(jìn)行數(shù)據(jù)傳輸時(shí)不中斷當(dāng)前程序的執(zhí)行,因此節(jié)省了大量的上下文切換時(shí)間,處理機(jī)效率得到大大提高。
下面討論采用80C166的PEC服務(wù)實(shí)現(xiàn)PROFIBUS-FDL從站協(xié)議的方法。
3 PROFIBUS-FDL幀結(jié)構(gòu)" title="幀結(jié)構(gòu)">幀結(jié)構(gòu)分析
3.1 PROFIBUS-FDL幀結(jié)構(gòu)
PROFIBUS幀的格式有多種形式,但對(duì)于從站來說,只要處理三種幀即可。
其中,各字段說明如下:
SD1:無數(shù)據(jù)幀的開始定界符,#10H;
SD2:可變長度幀的開始定界符,#68H;
SD3:固定長度幀的開始定界符,#A2H;
ED:結(jié)束定界符,#16H;
LE與LEr:LE與LEr相同,都表示長度占一個(gè)字節(jié),它是DA+SA+FC+(DATA-UNIT)的字節(jié)數(shù)總和;
DA與SA:DA(目的站地址)與SA(源站地址)各占一個(gè)字節(jié);
FCS:校驗(yàn)段,占一個(gè)字節(jié),它采用不計(jì)進(jìn)位的求和運(yùn)算得到校驗(yàn)碼。校驗(yàn)域?yàn)镈A+SA+FC+(DATA-UNIT);
FC:幀控制字" title="控制字">控制字字段,占一個(gè)字節(jié);
SYN:同步字段,至少33空閑位(邏輯電平1),但僅在請(qǐng)求幀及令牌幀前出現(xiàn),不允許在字符之間出現(xiàn)。
3.2 PROFIBUS幀結(jié)構(gòu)的特點(diǎn)
從上面的幀格式可以看出幀的長度不固定。發(fā)送時(shí),幀的長度是已知的;但接收時(shí),幀的長度是未知的。因此,要提高接收效率,只能采用分段方式接收,隨時(shí)解析和保存關(guān)鍵信息,并確定隨后接收的字節(jié)數(shù)。
4 PROFIBUS-FDL從站協(xié)議的PEC服務(wù)實(shí)現(xiàn)
PROFIBUS-FDL從站的數(shù)據(jù)接收及應(yīng)答過程分三個(gè)階段完成:第一階段,幀的完整接收;第二階段,根據(jù)接收到的FC幀控制字字段,判斷主站正在進(jìn)行怎樣的數(shù)據(jù)請(qǐng)求;第三階段,從站組織應(yīng)答幀,啟動(dòng)幀的發(fā)送過程。
第二階段的幀控制字處理請(qǐng)參考PROFIBUS標(biāo)準(zhǔn)的相關(guān)內(nèi)容。對(duì)于第三階段的組織和發(fā)送應(yīng)答幀,由于數(shù)據(jù)長度和內(nèi)容已知,只要定義好串口發(fā)送中斷/服務(wù),定義好相應(yīng)的PEC通道:源地址為發(fā)送數(shù)據(jù)緩沖區(qū)首址+1、目的地址為串口發(fā)送緩沖器、COUNT域?yàn)榘l(fā)送字節(jié)數(shù)-1,將所要發(fā)送數(shù)據(jù)的第一個(gè)字節(jié)寫入串口發(fā)送緩沖器,即可觸發(fā)串口發(fā)送相關(guān)的PEC服務(wù);當(dāng)COUNT減為0時(shí),觸發(fā)串口發(fā)送中斷服務(wù)子程序,完成串口數(shù)據(jù)發(fā)送過程。由于該過程實(shí)現(xiàn)簡單,不作詳細(xì)討論。這里主要討論第一階段的幀完整接收實(shí)現(xiàn)過程。
從上面的幀結(jié)構(gòu)分析可見,幀的長度是不固定的。因此,為提高接收效率,應(yīng)用PEC服務(wù)分三步進(jìn)行數(shù)據(jù)的批量接收。
4.1 第一步:幀頭接收
首先,初始化時(shí),定義串口接收PEC服務(wù)為連續(xù)接收三字節(jié),用于接收幀的前三字節(jié)。
由第一個(gè)字符SDx(x=1,2,3)判斷幀類型;對(duì)于不帶數(shù)據(jù)固定長度幀和帶數(shù)據(jù)固定長度幀接下來的兩個(gè)字符是DA、SA,判斷DA是否為本機(jī)地址;而對(duì)于帶數(shù)據(jù)長度可變幀,接下來的兩個(gè)字符是LE、LEr,判斷其是否相等。
若以上判斷都成立,則需定義下一次PEC服務(wù)的接收字符數(shù):對(duì)于固定長度幀,定義PEC批量接收三字節(jié)數(shù)據(jù),并保存DA、SA;對(duì)于可變長度幀,定義PEC服務(wù)接收四字節(jié)數(shù)據(jù),轉(zhuǎn)第二步;
若LE≠LEr或DA目的地址非本站地址,則重回到初始狀態(tài),進(jìn)行幀頭接收。
4.2 第二步:幀控制字接收
由于主站幀的連續(xù)發(fā)送,會(huì)再次觸發(fā)PEC服務(wù)。由串口接收PEC服務(wù)連續(xù)接收三或四字節(jié)后,處理如下:
.不帶數(shù)據(jù)固定長度幀,接收三字節(jié),分別為FC、FCS、ED。對(duì)FCS和ED分別完成累加和校驗(yàn)與幀結(jié)束判斷后,將幀控制字FC保存,轉(zhuǎn)去執(zhí)行幀控制字處理。
.帶數(shù)據(jù)固定長度幀, 接收三字節(jié),分別為FC和數(shù)據(jù)單元的前兩個(gè)字節(jié),保存FC,定義PEC服務(wù)接收后八個(gè)數(shù)據(jù)字節(jié),轉(zhuǎn)第三步。
.帶數(shù)據(jù)可變長度幀,接收了四字節(jié),分別為SD、DA、SA、FC。對(duì)SD再進(jìn)行一次判斷,之后判斷DA是否為本機(jī)地址,保存DA、SA、FC,定義PEC服務(wù)接收余下的數(shù)據(jù)字節(jié)(長度由LE確定),轉(zhuǎn)第三步。
4.3 第三步:幀數(shù)據(jù)接收
當(dāng)串口接收PEC服務(wù)連續(xù)接收八或更多的字節(jié)后,處理如下:
.帶數(shù)據(jù)固定長度幀,接收八個(gè)字節(jié),分別為余下的六字節(jié)數(shù)據(jù)和FCS、ED。在累加和校驗(yàn)與幀結(jié)束判斷完畢后,轉(zhuǎn)去執(zhí)行幀控制字處理。
.帶數(shù)據(jù)長度可變幀,接收了DATA-UNIT+2個(gè)字節(jié),分別DATA-UNIT個(gè)數(shù)據(jù)字節(jié)和FCS、ED。在累加和校驗(yàn)與幀結(jié)束判斷完畢后,進(jìn)行協(xié)議要求的目的地址和原地址的地址擴(kuò)展判斷和保存,轉(zhuǎn)去執(zhí)行幀控制字處理。
4.4 串口接收中斷服務(wù)子程序
以上三步都由串口接收中斷服務(wù)子程序負(fù)責(zé)完成。每一步對(duì)應(yīng)不同的處理狀態(tài)。為提高程序的執(zhí)行效率,用有限狀態(tài)機(jī)實(shí)現(xiàn)。以1、2、3分別表示上述幀接收三個(gè)步驟,4表示幀控制字處理狀態(tài),其狀態(tài)轉(zhuǎn)換如圖3。
?
采用這種協(xié)議實(shí)現(xiàn)方法,在最近研制的棒材生產(chǎn)線的飛剪控制器中運(yùn)行效果良好。
?
參考文獻(xiàn)
1 程 軍.億恒(西門子)C166系列-16位單片機(jī)原理與開發(fā).北京:北京航空航天大學(xué)出版社,2001
2 復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)系.億恒科技(Infineon Technologies)選編-億恒科技單片機(jī)應(yīng)用指南. 上海:復(fù)旦大學(xué)出版社,
? 2000
3 SIEMENS.Microcomputer Components SAB 80C166/83C166 User's Manual. 1997
4 Germany.PROFIBUS STANDARD DIN 19245 Part 1. 1991