• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種串口數(shù)據(jù)幀拼接現(xiàn)象處理研究

      2020-09-02 08:31:48張永龍
      計(jì)算機(jī)測量與控制 2020年8期
      關(guān)鍵詞:控制指令中斷以太網(wǎng)

      劉 超,張永龍

      (1.航天江南集團(tuán)有限公司,貴陽 550009;2.貴州航天電子科技有限公司,貴陽 550009)

      0 引言

      數(shù)據(jù)串口通信主要是計(jì)算機(jī)和外設(shè)間或主機(jī)系統(tǒng)之間的數(shù)據(jù)串行傳送。串口通信的數(shù)據(jù)傳輸?shù)陌踩员容^高,有著比較強(qiáng)的抗干擾能力。采取基于單片機(jī)的數(shù)據(jù)串口通信方式,正是因其集成度比較高,嵌套也較為方便以及經(jīng)濟(jì)性等特點(diǎn)[1]。通過從理論層面對單片機(jī)的數(shù)據(jù)串口通信進(jìn)行展開研究分析,就能為單片機(jī)數(shù)據(jù)串口通信的實(shí)踐提供依據(jù)[2]。串行通信方式具有使用方便、傳輸可靠、信號線數(shù)量少等優(yōu)點(diǎn),因而倍受青睞[1]。

      本課題源于某型調(diào)溫控制系統(tǒng),在調(diào)溫系統(tǒng)內(nèi)部采用了基于FPGA+C8051單片機(jī)架構(gòu)的控制模塊作為內(nèi)部控制器的核心器件,在FPGA和單片機(jī)之間使用串口進(jìn)行數(shù)據(jù)交互。在該調(diào)溫系統(tǒng)設(shè)計(jì)中,出現(xiàn)了調(diào)溫系統(tǒng)上位機(jī)控制軟件從FPGA+C8051單片機(jī)模塊中獲取的測溫?cái)?shù)據(jù)、工作狀態(tài)信息數(shù)據(jù)等出現(xiàn)數(shù)據(jù)錯(cuò)誤等異?,F(xiàn)象,使得該調(diào)溫系統(tǒng)工作不能達(dá)到預(yù)期設(shè)計(jì)要求。為了獲取該調(diào)溫系統(tǒng)內(nèi)部引起數(shù)據(jù)錯(cuò)位的原因,開展了該課題的研究。

      在該調(diào)溫系統(tǒng)設(shè)計(jì)中,上位機(jī)控制軟件通過ModBus TCP通信協(xié)議先FPGA+C8051單片機(jī)模塊發(fā)送控制指令或查詢數(shù)據(jù),實(shí)現(xiàn)對該調(diào)溫系統(tǒng)的自動(dòng)或手動(dòng)調(diào)溫操作,并通過查詢指令實(shí)時(shí)監(jiān)測調(diào)溫系統(tǒng)的工作狀態(tài)。在該系統(tǒng)設(shè)計(jì)中,C8051單片機(jī)通過控制CP2200實(shí)現(xiàn)與上位機(jī)控制軟件的通信,F(xiàn)PGA通過控制調(diào)溫系統(tǒng)的其他設(shè)備,實(shí)現(xiàn)系統(tǒng)調(diào)溫功能。在FPGA與C8051之間,使用串口進(jìn)行數(shù)據(jù)交互,當(dāng)上位機(jī)控制軟件通過以太網(wǎng)通信總線向C8051單片機(jī)模塊發(fā)送控制指令后,單片機(jī)控制串口將控制指令發(fā)送FPGA,F(xiàn)PGA控制軟件對指令進(jìn)行解析后,輸出調(diào)溫控制信號,實(shí)現(xiàn)調(diào)溫控制。同時(shí),在FPGA工作過程中,需要獲取調(diào)溫系統(tǒng)的測溫溫度數(shù)據(jù)和工作狀態(tài)信息,故障碼信息等,并通過串口以一定的周期實(shí)時(shí)向單片機(jī)發(fā)送。單片機(jī)接收到FPGA通過串口發(fā)送過來的調(diào)溫系統(tǒng)數(shù)據(jù)信息后,通過以太網(wǎng)數(shù)據(jù)幀封裝后,將數(shù)據(jù)發(fā)送至上位機(jī)控制軟件。

      在單片機(jī)內(nèi)部,采用串口接收中斷對串口數(shù)據(jù)進(jìn)行處理,當(dāng)一個(gè)串口數(shù)據(jù)到達(dá)時(shí),單片機(jī)串口接收中斷標(biāo)識置位為1,單片機(jī)進(jìn)入中斷處理程序?qū)崿F(xiàn)對當(dāng)前串口數(shù)據(jù)的接收和處理;同時(shí)單片機(jī)控制CP2200接收上位機(jī)的以太網(wǎng)數(shù)據(jù)信息時(shí),啟動(dòng)了一個(gè)優(yōu)先級更高的中斷,當(dāng)該單片機(jī)軟件接收到上位機(jī)數(shù)據(jù)后,直接進(jìn)入以太網(wǎng)接收處理,若此時(shí)串口中斷正在執(zhí)行,則該中斷就被高優(yōu)先級的中斷打斷,出現(xiàn)中斷嵌套現(xiàn)象,且進(jìn)入以太網(wǎng)接收中斷處理后,單片機(jī)軟件將串口接收中斷關(guān)閉,這使得未能實(shí)現(xiàn)一幀完整數(shù)據(jù)接收的單片機(jī)控制軟件出現(xiàn)了數(shù)據(jù)幀拼接,導(dǎo)致數(shù)據(jù)錯(cuò)位等異常現(xiàn)象的出現(xiàn)。

      本課題的主要研究單片機(jī)串口關(guān)閉對一幀完整串口數(shù)據(jù)幀接收帶來的影響,并通過實(shí)驗(yàn)監(jiān)測手段驗(yàn)證串口關(guān)閉導(dǎo)致串口數(shù)據(jù)幀錯(cuò)位的異?,F(xiàn)象的原因。為使用串口通信的模塊的軟件設(shè)計(jì)中具有串口關(guān)閉的處理措施提供解決方案的借鑒。

      1 系統(tǒng)結(jié)構(gòu)及原理

      在FPGA+C8051控制模塊設(shè)計(jì)中,F(xiàn)PGA 控制軟件控制軟件作為調(diào)溫系統(tǒng)各模塊控制和各模塊信息處理的處理器,F(xiàn)PGA控制軟件采用內(nèi)嵌軟核CPU(MicroBlaze軟核)實(shí)現(xiàn)對FPGA底層邏輯模塊對AD采樣的數(shù)據(jù)進(jìn)行浮點(diǎn)計(jì)算處理和串口通信控制等處理,F(xiàn)PGA底層邏輯控制模塊實(shí)現(xiàn)對調(diào)溫系統(tǒng)控制模塊的IO輸入輸出信號控制及AD采集處理等操作。單片機(jī)控制軟件通過控制以太網(wǎng)控制芯片CP2200實(shí)現(xiàn)對狀態(tài)監(jiān)控計(jì)算機(jī)1和狀態(tài)監(jiān)控計(jì)算機(jī)2的上位機(jī)軟件的網(wǎng)絡(luò)通信,單片機(jī)控制軟件與FPGA控制軟件之間采用串口RS232進(jìn)行短距數(shù)據(jù)交互。其中,狀態(tài)監(jiān)控計(jì)算機(jī)的上位機(jī)軟件通過以太網(wǎng)接口向單片機(jī)控制軟件發(fā)送控制指令后,單片機(jī)控制軟件將解析后的指令通過RS232接口發(fā)送至FPGA控制軟件實(shí)現(xiàn)調(diào)溫控制。FPGA控制軟件接收到控制指令后,對控制指令進(jìn)行解析處理,實(shí)現(xiàn)對調(diào)溫系統(tǒng)的自動(dòng)調(diào)溫或手動(dòng)調(diào)溫控制。FPGA控制軟件的底層,邏輯控制模塊通過采集測溫模塊的溫度信號其其他模塊的工作反饋信號后,組成了調(diào)溫系統(tǒng)工作狀態(tài)信息,F(xiàn)PGA控制軟件通過RS232總線,以一定的周期,實(shí)時(shí)向單片機(jī)控制軟件發(fā)送調(diào)溫狀態(tài)信息。單片機(jī)控制軟件接收到調(diào)溫狀態(tài)信息后,通過以太網(wǎng)數(shù)據(jù)幀封裝后,將調(diào)溫狀態(tài)信息發(fā)送至上位機(jī)軟件。FPGA和單片機(jī)C8051串口通信架構(gòu)處理模塊如圖1所示。

      圖1 FPGA+C8051串口通信架構(gòu)圖

      2 系統(tǒng)硬件設(shè)計(jì)

      在本系統(tǒng)設(shè)計(jì)中,使用美國Silabs公司推出的C8051F系列單片機(jī)C8051F040作為通信控制、DA信息轉(zhuǎn)化、EEPROM存儲(chǔ)數(shù)據(jù)處理,使用FPGA控制調(diào)溫系統(tǒng)的溫度信號采集處理、高速光耦脈沖計(jì)數(shù)處理,調(diào)溫控制信號I/O輸出等操作。

      該系統(tǒng)硬件設(shè)計(jì)中,單片機(jī)控制CP2200實(shí)現(xiàn)ModBus TCP通信。CP2200集成了IEEE 802.3以太網(wǎng)媒體訪問控制器(MAC)、10Base-T物理層(PHY)和8KB非易失性FLASH存儲(chǔ)器的單芯片以太網(wǎng)控制器。CP2200的8KB片內(nèi)FLASH存儲(chǔ)器,用于存儲(chǔ)用戶常數(shù)、Web服務(wù)器內(nèi)容或作為通用非易失性存儲(chǔ)器。FLASH存儲(chǔ)器的最后6個(gè)存儲(chǔ)單元是工廠預(yù)編程的唯一48位MAC地址。

      單片機(jī)通過控制DAC7800實(shí)現(xiàn)數(shù)模轉(zhuǎn)換處理,將經(jīng)過溫度修正處理后的溫度數(shù)據(jù)輸出到控制臺進(jìn)行顯示。單片機(jī)通過控制微芯公司生產(chǎn)的24LC32存儲(chǔ)芯片實(shí)現(xiàn)對調(diào)溫系統(tǒng)的調(diào)溫修正參數(shù)、系統(tǒng)檔案信息、交付測試信息等進(jìn)行存儲(chǔ)。

      在該系統(tǒng)中采用美國Xilinx公司生產(chǎn)的Spartan6系列的XC6SLX16處理芯片進(jìn)行AD處理、高速光耦脈沖信號檢測處理、I/O控制信號輸出。Spartan6特別適合于高容量的邏輯設(shè)計(jì)、面向用戶的DSP設(shè)計(jì)、低成本設(shè)計(jì):

      1)每個(gè)SLICE包含4個(gè)LUT和8個(gè)flip-flops;

      2)每個(gè)DSP48A1 slice包含1個(gè)18×18乘法器、1個(gè)48bit累加器、1個(gè)加法器;

      3)每個(gè)18 KB的Block RAM可以用作2個(gè)9 KB的Block RAM;

      4)每個(gè)CMT包含2個(gè)DCM和1個(gè)PLL;

      5)在-3N 速度等級的器件里沒有存儲(chǔ)器接口(DDR接口)。

      FPGA控制AD7606模數(shù)轉(zhuǎn)換芯片,實(shí)現(xiàn)對溫度信號的處理,這里選擇了8通道輸出的AD7606模塊,實(shí)現(xiàn)多測溫模塊檢測信號的處理,能多維度獲取調(diào)溫系統(tǒng)所在的環(huán)境溫度的情況,并通過對測溫模塊的溫度綜合處理后,輸出降溫或加熱的控制指令,實(shí)現(xiàn)調(diào)溫系統(tǒng)對所在環(huán)境溫度的控制。

      在單片機(jī)和FPGA之間使用RS232進(jìn)行板內(nèi)通信,該接口用于傳輸單片機(jī)通過CP2200從網(wǎng)絡(luò)接收的控制指令、存儲(chǔ)器調(diào)溫輸出的調(diào)溫修正參數(shù)等信息;同時(shí),在FPGA控制模塊對測溫溫度和調(diào)溫控制狀態(tài)信息處理后,通過該串口向單片機(jī)模塊發(fā)送相應(yīng)的信息。該系統(tǒng)的硬件設(shè)計(jì)如圖2所示。

      圖2 系統(tǒng)硬件組成框圖

      3 系統(tǒng)軟件設(shè)計(jì)

      3.1 系統(tǒng)工作軟件流程

      該系統(tǒng)的控制軟件由單片機(jī)控制軟件和FPGA控制軟件組成。其中,單片機(jī)控制軟件通過CP2200的物理層進(jìn)行初始處理及DA模塊、EEPROM模塊的初始化處理后,開始讀取EEPROM內(nèi)存中的溫度修正參數(shù),并通過RS232將溫度修正參數(shù)發(fā)送至FPGA,F(xiàn)PGA接收溫度修正參數(shù)后,實(shí)現(xiàn)對讀取AD7606的溫度數(shù)據(jù)進(jìn)行修正處理,并將溫度數(shù)據(jù)、調(diào)溫系統(tǒng)的工作狀態(tài)信息打包后,通過RS232發(fā)送至單片機(jī)。單片機(jī)控制軟件在接收到CP2200的中斷信息后,進(jìn)入網(wǎng)絡(luò)中斷處理程序,將CP2200網(wǎng)絡(luò)物理層緩沖區(qū)內(nèi)的數(shù)據(jù)讀取后,根據(jù)以太網(wǎng)協(xié)議對信息進(jìn)行解析處理,若信息無錯(cuò)誤,則將信息傳至鏈路層處理模塊進(jìn)行處理,之后依次將數(shù)據(jù)經(jīng)過網(wǎng)絡(luò)層(IP層)、傳輸層(TCP層)、應(yīng)用層(Modbus層)進(jìn)行解析和處理;若信息為調(diào)溫系統(tǒng)控制信息,則單片機(jī)將控制信息通過RS232發(fā)送至FPGA,F(xiàn)PGA接收控制指令后,對控制指令進(jìn)行解析,若控制指令為自動(dòng)控制指令,則調(diào)溫系統(tǒng)工作在自動(dòng)工作狀態(tài)下;若指令為手動(dòng)控制指令,則調(diào)溫系統(tǒng)工作在手動(dòng)工作狀態(tài)下。FPAG根據(jù)指令輸出調(diào)溫系統(tǒng)的控制信號,并檢測調(diào)溫系統(tǒng)的反饋信號,生成調(diào)溫系統(tǒng)工作狀態(tài)信息。在接收到調(diào)溫系統(tǒng)查詢指令時(shí),將調(diào)溫系統(tǒng)的溫度數(shù)據(jù)和工作狀態(tài)信息通過以太網(wǎng)數(shù)據(jù)幀封裝后,將數(shù)據(jù)發(fā)送上位機(jī)軟件。系統(tǒng)軟件控制流程如圖3所示。

      圖3 系統(tǒng)軟件控制框圖

      3.2 網(wǎng)絡(luò)通信軟件流程

      在網(wǎng)絡(luò)控制中,單片機(jī)C8051F040通過對CP2200復(fù)位初始化可以確保設(shè)備正常工作。復(fù)位開始時(shí),首先要等待復(fù)位引腳升高,然后等待振蕩器初始化完成,振蕩器初始化完成后會(huì)發(fā)送一個(gè)中斷信號。通過檢測INT0中斷狀態(tài)寄存器確定CP2200初始化是否完成。

      在CP2200初始化結(jié)束后,單片機(jī)通過檢測CP2200的中斷信號,獲取以太網(wǎng)數(shù)據(jù),在進(jìn)入以太網(wǎng)接收中斷程序內(nèi),單片機(jī)通過讀取CP2200緩沖區(qū)內(nèi)的數(shù)據(jù),獲取以太網(wǎng)物理層數(shù)據(jù)信息。通過對數(shù)據(jù)信息解析,將數(shù)據(jù)信息發(fā)送至鏈路層進(jìn)行解析處理,并檢測信息是IP數(shù)據(jù)包、ARP數(shù)據(jù)包還是RARP數(shù)據(jù)包,并通過不同的處理方式對相應(yīng)的數(shù)據(jù)包進(jìn)行處理。若數(shù)據(jù)包為IP包,則需要判讀數(shù)據(jù)包為TCP數(shù)據(jù)包還是ICMP數(shù)據(jù)包,若為ICMP數(shù)據(jù)包,則通過Ping程序處理模塊應(yīng)答處理;若為TCP數(shù)據(jù)包,則通過應(yīng)用層的ModBus應(yīng)用層解析處理后,將數(shù)據(jù)包根據(jù)每一次數(shù)據(jù)幀的格式進(jìn)行封裝處理,將數(shù)據(jù)層層封裝后,通過物理層將數(shù)據(jù)信息發(fā)送至上位機(jī)。調(diào)溫系統(tǒng)網(wǎng)絡(luò)數(shù)據(jù)包解析流程如圖4所示。

      圖4 調(diào)溫系統(tǒng)網(wǎng)絡(luò)數(shù)據(jù)包處理流程圖

      單片機(jī)通過CP2200與上位機(jī)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交互過程中,在中斷觸發(fā)物理層數(shù)據(jù)信息接收后,單片機(jī)需要定時(shí)對TCP層應(yīng)答信息是否超時(shí)進(jìn)行處理,若出現(xiàn)超時(shí),則需要進(jìn)行TCP重傳處理。若連接調(diào)溫設(shè)備的網(wǎng)絡(luò)設(shè)備在預(yù)定的時(shí)間沒有與調(diào)溫系統(tǒng)進(jìn)行數(shù)據(jù)交互,則表示該設(shè)備不活動(dòng),需要將該設(shè)備網(wǎng)絡(luò)連接信息清除。對ARP地址解析信息超時(shí),也啟動(dòng)重傳處理。在ARP緩沖區(qū)內(nèi),對于MAC地址需要進(jìn)行超時(shí)老化更新的機(jī)制,保證ARP地址池空間的使用滿足要求。單片機(jī)對網(wǎng)絡(luò)信息處理流程如圖5所示。

      圖5 網(wǎng)絡(luò)信息交互處理流程圖

      3.3 系統(tǒng)工作控制流程

      單片機(jī)接收上位機(jī)控制指令后,通過RS232將控制指令發(fā)送至FPGA,F(xiàn)PGA對指令解析后,輸出調(diào)溫系統(tǒng)的控制信號。當(dāng)控制指令為自動(dòng)指令時(shí),則FPGA控制調(diào)溫系統(tǒng)工作在自動(dòng)工作狀態(tài)下,并通過讀取AD7606的溫度數(shù)據(jù)進(jìn)行修正后,將溫度數(shù)據(jù)作為自動(dòng)調(diào)溫控制的條件,當(dāng)溫度低于-20 ℃時(shí),則開啟加熱設(shè)備實(shí)現(xiàn)加熱操作。當(dāng)溫度數(shù)據(jù)高于40 ℃時(shí),F(xiàn)PGA輸出壓縮機(jī)、風(fēng)機(jī)的工作控制信號,實(shí)現(xiàn)降溫操作。調(diào)溫系統(tǒng)工作流程如圖6所示。

      圖6 系統(tǒng)工作控制流程圖

      3.4 單片機(jī)串口接收控制流程

      單片機(jī)串口接收數(shù)據(jù)時(shí),若接收到串口數(shù)據(jù),串口接收中斷標(biāo)志置位,單片機(jī)軟件進(jìn)入串口接收中斷處理程序。在中斷程序內(nèi)將串口接收中斷標(biāo)志清零,讀取串口緩沖內(nèi)的數(shù)據(jù),若讀出的數(shù)據(jù)為第一個(gè)幀頭數(shù)據(jù)正確,則等待進(jìn)入下一次中斷;若第二個(gè)幀頭數(shù)據(jù)也正確,則進(jìn)入串口數(shù)據(jù)保存處理程序塊,串口數(shù)據(jù)保存在recdata[num]數(shù)組內(nèi);每次中斷保存一個(gè)串口數(shù)據(jù),并將recdata[num]數(shù)組下標(biāo)(num)加1,即num+1(檢查中發(fā)現(xiàn)在上電初始化中也使用num變量,num的值可能不為零,導(dǎo)致第一次接收數(shù)據(jù)會(huì)出現(xiàn)異常),用于保存下一次中斷接收的數(shù)據(jù);當(dāng)接收和保存12個(gè)字節(jié)的串口數(shù)據(jù)后,進(jìn)入幀尾判讀處理;若幀尾(0xea)正確,則清除接收一幀串口數(shù)據(jù)的標(biāo)志和數(shù)組下標(biāo)(bz、num),將保存在數(shù)組內(nèi)的溫度數(shù)據(jù)和故障碼賦值給以太網(wǎng)數(shù)據(jù)幀。串口接收中斷處理程序如圖7所示。

      圖7 串口接收中斷執(zhí)行程序圖

      4 實(shí)驗(yàn)結(jié)果與分析

      4.1 系統(tǒng)通信數(shù)據(jù)實(shí)驗(yàn)異常情況

      在使用FPGA+C8051架構(gòu)的控制模塊實(shí)驗(yàn)中,出現(xiàn)串口數(shù)據(jù)幀錯(cuò)位現(xiàn)象,其異?,F(xiàn)象如下:

      1)異?,F(xiàn)象一

      正常通訊時(shí)接收的數(shù)據(jù)為:00 eb 00 00;

      異常通訊時(shí)接收的數(shù)據(jù)為:00 00 eb 00;

      2)異?,F(xiàn)象二

      正常通訊時(shí)接收的數(shù)據(jù)為:00 ec 00 00;

      異常通訊時(shí)接收的數(shù)據(jù)為:00 ec ec 00;

      為實(shí)現(xiàn)串口數(shù)據(jù)幀錯(cuò)位問題的解決,系統(tǒng)軟件進(jìn)行排查和分析處理。

      4.2 系統(tǒng)實(shí)驗(yàn)異常數(shù)據(jù)分析

      對串口通信數(shù)據(jù)錯(cuò)位分析如下:

      1)第一種數(shù)據(jù)異常現(xiàn)象分析:若串口接收中斷在未接收完一幀完整串口數(shù)據(jù)幀時(shí),串口接收中斷關(guān)閉,在重新開啟串口接收中斷后,則現(xiàn)串口接收數(shù)據(jù)幀拼接。若拼接數(shù)據(jù)中出現(xiàn)與幀尾字節(jié)相同的數(shù)據(jù)字,則拼接數(shù)據(jù)幀異常,出現(xiàn)第一種數(shù)據(jù)錯(cuò)位異常機(jī)理如圖8所示;(在第1幀數(shù)據(jù)和第n幀數(shù)據(jù)中灰色數(shù)據(jù)為拼接數(shù)據(jù),其他數(shù)據(jù)丟失);

      圖8 第一種數(shù)據(jù)錯(cuò)位機(jī)理圖

      2)第二種數(shù)據(jù)異常現(xiàn)象分析:若串口接收中斷在未接收完一幀完整串口數(shù)據(jù)幀時(shí),串口接收中斷關(guān)閉,在重新開啟串口接收中斷后,則出現(xiàn)串口接收數(shù)據(jù)幀拼接,且拼接數(shù)據(jù)與關(guān)閉中斷前的數(shù)據(jù)一致,拼接數(shù)據(jù)中出現(xiàn)與幀尾一致的數(shù)據(jù)字,則拼接后的數(shù)據(jù)形成一幀完整的數(shù)據(jù)。如圖9所示。

      圖9 第二種數(shù)據(jù)錯(cuò)位機(jī)理圖

      通過分析,當(dāng)單片機(jī)接收到查詢指令之后,關(guān)閉串口接收中斷。如果關(guān)閉中斷時(shí),串口接收中斷未接收一幀完整數(shù)據(jù),待串口中斷重新開啟后,后續(xù)接收串口數(shù)據(jù)與關(guān)閉中斷前數(shù)據(jù)出現(xiàn)拼接。當(dāng)后面的拼接數(shù)據(jù)中包含有與幀尾標(biāo)志一致的數(shù)據(jù),且拼接后該數(shù)據(jù)恰好落在幀尾上,則形成一幀完整數(shù)據(jù)。

      4.3 異常分析數(shù)據(jù)測試情況

      由于串口數(shù)據(jù)幀由15個(gè)字節(jié)組成,其中包括兩個(gè)幀頭和一個(gè)幀尾,每接收一個(gè)字節(jié)產(chǎn)生一次中斷,每次串口接收中斷的間隔時(shí)間約為1 ms,接收一幀完整的數(shù)據(jù)幀(共15個(gè)字節(jié))使用的時(shí)間約為17.2 ms(如圖10所示)。

      圖10 串口數(shù)據(jù)幀接收時(shí)間圖

      通過測試,串口進(jìn)入中斷后,中斷處理程序的最大處理時(shí)間為2.7 μs,如圖11所示,中斷處理最大時(shí)間遠(yuǎn)小于串口數(shù)據(jù)間隔時(shí)間1 ms,不影響下一次串口中斷的觸發(fā),因此排除因素E2。

      圖11 串口接收中斷最大處理時(shí)間

      在處理完一次串口中斷程序后,單片機(jī)返回主程序執(zhí)行。若此時(shí)接收到狀態(tài)監(jiān)控計(jì)算機(jī)的查詢指令,單片機(jī)關(guān)閉串口中斷(串口中斷允許位清零),將接收的查詢指令通過串口發(fā)送至FPGA。進(jìn)行以太網(wǎng)數(shù)據(jù)幀封裝,并啟動(dòng)以太網(wǎng)發(fā)送模塊,將以太網(wǎng)數(shù)據(jù)幀發(fā)送至狀態(tài)監(jiān)控計(jì)算機(jī)。當(dāng)以太網(wǎng)數(shù)據(jù)幀發(fā)送完畢后,再次開啟中斷。

      通過測試,單片機(jī)接收到查詢指令后,從串口中斷關(guān)閉到中斷開啟的時(shí)間約為17 ms,如圖12所示。

      圖12 中斷關(guān)閉時(shí)間圖

      在中斷關(guān)閉過程中,單片機(jī)依次執(zhí)行了將查詢指令發(fā)送至FPGA、封裝以太網(wǎng)數(shù)據(jù)幀、發(fā)送以太網(wǎng)數(shù)據(jù)幀等操作,其中單片機(jī)向FPGA發(fā)送查詢指令的時(shí)間約為16.5 ms,如圖13所示。

      圖13 單片機(jī)發(fā)送查詢指令至FPGA的時(shí)間

      將單片機(jī)向FPGA發(fā)送查詢指令程序段屏蔽后,單片機(jī)從接收查詢指令及應(yīng)答的時(shí)間約為300 μs,如圖14所示。

      圖14 關(guān)閉串口發(fā)送后以太網(wǎng)應(yīng)答時(shí)間

      通過對以上測試數(shù)據(jù)分析,單片機(jī)接收到狀態(tài)計(jì)算機(jī)的查詢指令后,單片機(jī)通過串口向FPGA發(fā)送查詢指令,占用了以太網(wǎng)數(shù)據(jù)幀的應(yīng)答響應(yīng)大部分時(shí)間。該過程中串口接收中斷處于關(guān)閉狀態(tài),不能接收FPGA串口發(fā)送的數(shù)據(jù)幀。當(dāng)串口接收中斷處理程序未完整接收一幀數(shù)據(jù)時(shí),如果關(guān)閉串口接收中斷就會(huì)導(dǎo)致串口接收中斷數(shù)據(jù)異常。表現(xiàn)為串口中斷將不同的數(shù)據(jù)幀拼接為一幀完整的數(shù)據(jù),導(dǎo)致數(shù)據(jù)幀異常。為檢查中斷對串口數(shù)據(jù)接收的影響,單片機(jī)程序中,修改程序?yàn)椋菏盏綆矔r(shí)將P12管腳置位,收到第一個(gè)幀頭時(shí)P12管腳復(fù)位。中斷影響效果如圖15所示。上面波形為接收到也太網(wǎng)數(shù)據(jù)后,發(fā)送到FPGA的串口數(shù)據(jù),可表征這個(gè)時(shí)刻單片機(jī)關(guān)閉了中斷。

      圖15 查詢指令對串口中斷影響圖

      通過對以上測試數(shù)據(jù)的排查和分析,在接收到狀態(tài)監(jiān)控計(jì)算機(jī)查詢指令后,單片機(jī)關(guān)閉接收中斷。若關(guān)閉中斷時(shí),單片機(jī)串口未能接收完一幀完整的數(shù)據(jù),導(dǎo)致開啟中斷后,串口中斷將不同的數(shù)據(jù)幀拼接為一幀完整的數(shù)據(jù)。如果后面的拼接數(shù)據(jù)中包含有與幀尾標(biāo)志(0xea)一致的數(shù)據(jù),且正好落入第15個(gè)字節(jié)上時(shí),則形成一幀正常的完整數(shù)據(jù),導(dǎo)致數(shù)據(jù)異常。

      4.4 異常分析數(shù)據(jù)驗(yàn)證情況

      根據(jù)串口數(shù)據(jù)幀的定義,在FPGA串口數(shù)據(jù)幀中寫入一個(gè)與幀尾0xea一致的數(shù)據(jù),進(jìn)行通信試驗(yàn)驗(yàn)證。

      通過排查分析,串口接收中斷關(guān)閉異常和溫度數(shù)據(jù)中有與幀尾數(shù)據(jù)(0xea)一致的數(shù)據(jù)則會(huì)出現(xiàn)數(shù)據(jù)異常,為增加故障頻率,將FPGA內(nèi)發(fā)送到單片機(jī)的數(shù)據(jù)幀更改如下:

      bf 80 00 00 00 00 00 00 00 eb 00 00 00 ea ea

      4.4.1 故障現(xiàn)象一復(fù)現(xiàn)

      為加快故障復(fù)現(xiàn),將狀態(tài)監(jiān)控計(jì)算機(jī)查詢周期5s更改為250 ms,在單片機(jī)串口接收中斷幀尾設(shè)置監(jiān)控程序,第一種故障異常的監(jiān)控程序如下:

      if((recdata[8] &0xfe) != 0x00)

      P12 = 1;//監(jiān)控信號置位

      else

      P12 = 0;//監(jiān)控信號復(fù)位

      通過示波器監(jiān)控單片機(jī)P12輸出的波形圖,可以得出在第一種異常數(shù)據(jù)發(fā)生的頻率,通過約20s數(shù)據(jù)監(jiān)測,發(fā)送第一種數(shù)據(jù)異常的次數(shù)為58次,如圖16所示。由圖16所示,在2s時(shí)間間隔內(nèi)最多出現(xiàn)6次數(shù)據(jù)異常,最少出現(xiàn)2次數(shù)據(jù)異常。

      圖16 第一種故障出錯(cuò)頻次圖

      在單片機(jī)內(nèi)串口接收中斷幀尾設(shè)置如下監(jiān)控程序,可得出保存串口的數(shù)組內(nèi)的數(shù)據(jù):

      while(((recdata[8] &0xfe) != 0x00);//故障出現(xiàn)后死循環(huán)

      通過試驗(yàn)監(jiān)測,在單片機(jī)軟件內(nèi)監(jiān)測,得到異常數(shù)據(jù)如圖17所示,其中溫度數(shù)據(jù)和故障碼數(shù)據(jù)為:00 00 eb 00,與故障現(xiàn)象一致。

      圖17 數(shù)據(jù)錯(cuò)位1通訊數(shù)據(jù)包截圖

      4.4.2 故障現(xiàn)象二復(fù)現(xiàn)

      在單片機(jī)串口接收中斷幀尾設(shè)置監(jiān)控程序(狀態(tài)監(jiān)控計(jì)算機(jī)的查詢指令周期為250 ms),第二種故障異常的監(jiān)控程序如下:

      if((recdata[6] == 0x00) &&(recdata[7] == 0xeb) &&((recdata[8] &0xfe) != 0x00))

      P12 = 1;//監(jiān)控信號置位

      else

      P12 = 0;//監(jiān)控信號復(fù)位

      通過示波器監(jiān)控單片機(jī)P12輸出的波形圖,可以得出在第二種異常數(shù)據(jù)發(fā)生的頻率,通過約20s的數(shù)據(jù)監(jiān)測,該異常數(shù)據(jù)共發(fā)生41次,監(jiān)測圖如圖18所示。根據(jù)圖18所示,在2 s的時(shí)間間隔最多發(fā)生6次數(shù)據(jù)異常,最少發(fā)生0次數(shù)據(jù)異常。

      圖18 第二種故障出錯(cuò)頻次圖

      在單片機(jī)串口接收中斷幀尾設(shè)置如下監(jiān)控程序,可得出保存串口的數(shù)組內(nèi)的數(shù)據(jù):

      while((recdata[6] == 0x00) &&(recdata[7] == 0xeb) &&((recdata[8] &0xfe) != 0x00));// 故障出現(xiàn)后死循環(huán)

      通過試驗(yàn)監(jiān)測,在單片機(jī)軟件內(nèi)監(jiān)測,得到異常數(shù)據(jù)如圖19所示,其中溫度數(shù)據(jù)和故障碼數(shù)據(jù)為:00 eb eb 00,與故障現(xiàn)象一致。

      圖19 數(shù)據(jù)錯(cuò)位2通訊數(shù)據(jù)包截圖

      根據(jù)以上兩種數(shù)據(jù)異?,F(xiàn)象的分析和試驗(yàn)驗(yàn)證,異?,F(xiàn)象分析與試驗(yàn)現(xiàn)象一致,故障復(fù)現(xiàn)。通過串口數(shù)據(jù)幀中含有與幀尾0xea一致的數(shù)據(jù),重新拼接數(shù)據(jù)幀能形成一幀完整的串口現(xiàn)象,導(dǎo)致串口數(shù)據(jù)幀錯(cuò)位。

      4.5 軟件措施更改及驗(yàn)證

      通過降低串口數(shù)據(jù)幀中斷關(guān)閉時(shí)間,僅在串口數(shù)據(jù)幀將幀內(nèi)溫度和故障碼數(shù)據(jù)賦值給以太網(wǎng)數(shù)據(jù)幀的過程中關(guān)閉串口接收中斷。由于串口接收中斷的間隔時(shí)間為1 ms,更改后的軟件在中斷關(guān)閉時(shí)間內(nèi)僅執(zhí)行4個(gè)字節(jié)更新操作,關(guān)閉中斷的時(shí)間由原來的17.2 ms變?yōu)?.7 μs,不影響串口數(shù)據(jù)的連續(xù)接收,不會(huì)出現(xiàn)數(shù)據(jù)幀拼接,有效解決通信數(shù)據(jù)錯(cuò)位的異?,F(xiàn)象。

      對軟件進(jìn)行更改后再進(jìn)行驗(yàn)證。采用與出現(xiàn)故障時(shí)的驗(yàn)證方法一致,對軟件進(jìn)行驗(yàn)證。通過3天的時(shí)間進(jìn)行試驗(yàn)監(jiān)測,未檢測到數(shù)據(jù)幀拼接的現(xiàn)象,串口數(shù)據(jù)幀監(jiān)測如圖20所示。

      圖20 串口數(shù)據(jù)幀未出現(xiàn)拼接圖

      該異?,F(xiàn)象由關(guān)閉串口中斷,導(dǎo)致串口接收數(shù)據(jù)拼接,單片機(jī)控制軟件內(nèi)除串口接收中斷外,還有定時(shí)器0(1 ms定時(shí)中斷)和定時(shí)器2(16.384 ms定時(shí)中斷)兩個(gè)中斷。通過對定時(shí)器0和定時(shí)器2復(fù)查和測試,這兩個(gè)中斷沒有被關(guān)閉現(xiàn)象,同時(shí)中斷執(zhí)行時(shí)間均小于20 μs,遠(yuǎn)小于串口數(shù)據(jù)間隔時(shí)間1 ms,不會(huì)干擾串口中斷的正常執(zhí)行。通過軟件更改后,可以有效避免該問題。

      4.6 系統(tǒng)實(shí)驗(yàn)及驗(yàn)證

      通過對異常情況處理和驗(yàn)證后,對調(diào)溫系統(tǒng)的工作情況進(jìn)行實(shí)驗(yàn)驗(yàn)證,通過上位機(jī)軟件向調(diào)溫系統(tǒng)發(fā)送控制自動(dòng)控制指令后,調(diào)溫系統(tǒng)工作在自動(dòng)狀態(tài)下,在溫度為-21 ℃時(shí),實(shí)現(xiàn)了加熱操作,當(dāng)溫度低于-20 ℃依次實(shí)驗(yàn),自動(dòng)加熱均得到驗(yàn)證。在溫度高于40 ℃時(shí),調(diào)溫系統(tǒng)工作在制冷狀態(tài)。之后進(jìn)行手動(dòng)測試,依次完成了手動(dòng)加熱、手動(dòng)制冷測試,均得到驗(yàn)證。在上位機(jī)軟件發(fā)送調(diào)溫系統(tǒng)查詢軟件,上位機(jī)軟件獲取到調(diào)溫系統(tǒng)的溫度信息和工作狀態(tài)信息。經(jīng)過以上實(shí)驗(yàn)驗(yàn)證,調(diào)溫系統(tǒng)工作正常,設(shè)計(jì)功能性能得到驗(yàn)證。

      5 結(jié)束語

      本文通過優(yōu)化FPGA+C8051控制模塊串口中斷關(guān)閉時(shí)間的處理,有效實(shí)現(xiàn)了因串口中斷關(guān)閉時(shí)間過長導(dǎo)致串口數(shù)據(jù)幀拼接錯(cuò)位的技術(shù)問題。在該模塊的通信數(shù)據(jù)中,由于單片機(jī)串口接收中斷被關(guān)閉時(shí)間大于一幀串口數(shù)據(jù)幀接收的時(shí)間,導(dǎo)致接收的串口數(shù)據(jù)幀出現(xiàn)數(shù)據(jù)幀拼接、錯(cuò)位的異常情況。通過對串口通信處理方式進(jìn)行了優(yōu)化,并減小(小于2.7 μs)關(guān)閉串口接收中斷的時(shí)間,有效解決了數(shù)據(jù)幀拼接的異?,F(xiàn)象;提高了對串口接收中斷數(shù)據(jù)幀拼接異常處理,并進(jìn)行了系統(tǒng)實(shí)驗(yàn)驗(yàn)證,F(xiàn)PGA+C8051控制模塊的功能性能均滿足設(shè)計(jì)要求。該系統(tǒng)設(shè)計(jì)及驗(yàn)證的成功,為串口數(shù)據(jù)幀通信中的拼接異常提供了借鑒。

      猜你喜歡
      控制指令中斷以太網(wǎng)
      城軌車輛控制指令試驗(yàn)裝置研制
      基于1500以太網(wǎng)養(yǎng)豬場的智能飼喂控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
      宏指令控制的多軸系統(tǒng)研究及實(shí)現(xiàn)
      跟蹤導(dǎo)練(二)(5)
      千里移防,衛(wèi)勤保障不中斷
      解放軍健康(2017年5期)2017-08-01 06:27:44
      談實(shí)時(shí)以太網(wǎng)EtherCAT技術(shù)在變電站自動(dòng)化中的應(yīng)用
      電子制作(2017年24期)2017-02-02 07:14:44
      高速公路隧道通風(fēng)、照明聯(lián)動(dòng)控制方案探討
      科技視界(2016年13期)2016-06-13 23:11:43
      一種90W高功率以太網(wǎng)供電系統(tǒng)的設(shè)計(jì)
      淺談EPON與工業(yè)以太網(wǎng)在貴遵高速公路中的應(yīng)用
      煤礦提升機(jī)控制系統(tǒng)中PLC技術(shù)的應(yīng)用
      聂拉木县| 修文县| 军事| 曲松县| 乌鲁木齐县| 方山县| 松溪县| 昆明市| 巴中市| 三穗县| 南木林县| 吉安县| 广丰县| 于都县| 上蔡县| 浑源县| 阿瓦提县| 江川县| 隆子县| 延寿县| 泊头市| 嘉峪关市| 天柱县| 溆浦县| 南靖县| 克拉玛依市| 昆山市| 碌曲县| 绍兴市| 巴楚县| 资源县| 长宁区| 西峡县| 永康市| 广丰县| 兰州市| 建宁县| 保康县| 商都县| 兰坪| 屏山县|