雙端口RAM 內存直接映象 高速并行傳輸 DLL動(dòng)態(tài)鏈接在集散型控制系統中,一般將計算機或工控機用于終端圖文顯示,數據采集處理以及機對話(huà)接口等方面。計算機或工控機與外部設備需要建立數據傳輸的通訊聯(lián)系。但大量數據傳輸,靠通常的串行通訊方式進(jìn)行,必須占用CPU大量的時(shí)間進(jìn)行通訊。一些控制系統往往因為傳輸速率慢而無(wú)法實(shí)現實(shí)時(shí)控制,不能滿(mǎn)足系統采集和控制需要。上述問(wèn)題在我們設計的汽車(chē)綜合檢測系統中,得到了較好的解決。系統中采用雙端口RAM技術(shù)設計了一塊PC總線(xiàn)接口的智能型高速并行通訊卡(以下簡(jiǎn)稱(chēng)通訊卡),實(shí)現外部數據同計算機高速并行通訊。由卡上的MCU負責分機的數據采樣,將需要傳輸的數據按系統協(xié)議在雙端口RAM內任意存取,讀寫(xiě)速度快、可靠性高、接口簡(jiǎn)單,滿(mǎn)足了系統設計需要。并且實(shí)現了在VB語(yǔ)言環(huán)境下對采用內存直接映象技術(shù)的雙端口RAM的讀寫(xiě)操作,將多主CPU采用的總線(xiàn)仲裁方式簡(jiǎn)單為僅僅對內存操作,在應用計算機總線(xiàn)擴展技術(shù)方面具有借鑒意義。 1 系統描述 在汽車(chē)綜合檢測系統中,需要對汽車(chē)的底盤(pán)、發(fā)動(dòng)機以及綜合電路等方面的信號進(jìn)行采樣和判斷,其中包含大量的運算處理和汽車(chē)標準為資料的對比、分析、判斷等環(huán)節。整個(gè)系統信號采樣點(diǎn)多,信號的形式各不相同,系統采用MCU控制方式的分機對各測量點(diǎn)進(jìn)行數據采集和模擬控制。由于MCU沒(méi)有高效的運算功能,沒(méi)有大量的指令和數據存貯空間,更不能直觀(guān)顯示各種汽車(chē)標準數據和測量結果,若進(jìn)行大量的運算、判斷、顯示,其硬件、軟件處理一個(gè)比較棘手的問(wèn)題。因此本系統采用MCU負責采集各種信號,統一由計算機負責相應的運算處理、分析、判斷,并管理汽車(chē)標準數據庫、人機對話(huà)接口、顯示測量結果和標準圖形等等,用一塊管理分機的通訊卡實(shí)現分機與主機之間數據傳輸。 通訊卡包含了數字濾波、數據收集、傳輸等功能,對系統內的并、串行通訊實(shí)現分時(shí)操作?ㄉ嫌梢黄琈CU負責管理各個(gè)分機,通過(guò)串行通訊方式將分機采集的各種數據,收集到通訊卡內,經(jīng)過(guò)判斷、篩選,將有效數據存貯到雙端口RAM的規定區域內;計算機從雙端口RAM內將數據讀入,進(jìn)行運算處理,與標準數據進(jìn)行比較判斷,將結果或控制命令寫(xiě)入雙端口RAM內,實(shí)現整個(gè)系統統一協(xié)調運行。本文主要針對通訊卡的軟、硬件設計和在VB環(huán)境下的軟件實(shí)現,作重點(diǎn)的分析。 2 硬件設計 通訊卡的基本硬件設計簡(jiǎn)圖如圖1所示。利用計算機總線(xiàn)做擴展卡的技術(shù)已經(jīng)廣為應用,但很多都是利用計算機提供固定的I/O端口地址進(jìn)行讀寫(xiě)操作,“瓶頸效應”十分明顯。在對實(shí)時(shí)性要求很高、數據傳輸量很大的場(chǎng)合,數據阻塞明顯,無(wú)法滿(mǎn)足系統的大量數據高速傳輸的需要。本系統利用計算機內存直接映象技術(shù),對內存物理地址直接操作,實(shí)時(shí)性和速度明顯改善,完全滿(mǎn)足本系統的速度要求。 2.1 MCU和雙端口RAM的選擇 此卡是實(shí)現計算機與數據采集的分機之間大量、快速的數據交換的中間環(huán)節。采用的MCU要求具有較喲的運行速度和數據管理能力,既有雙端口RAM的接口總線(xiàn),又具備同分機雙工串行通訊能力,同時(shí)考慮到系統硬件加密的必要,選擇此MCU是系統的關(guān)鍵。美ATMEL公司出品的89C51是本系統的首選。另一方面根據本系統的需要,數據傳輸的信息量在一個(gè)令牌下,2KB的吞吐量已經(jīng)滿(mǎn)足,因此我們采用美國IDT公司出品的雙端口EAM IDT7132,容量為2K×8bits。IDT7132帶有兩套獨立控制總線(xiàn),可從兩側任意讀寫(xiě)存儲器中的所有單元,片內硬件端口促裁電路適合當兩側同時(shí)訪(fǎng)問(wèn)同一單元時(shí)不允許處于等待狀態(tài)的89C51的操作,允許不經(jīng)過(guò)外部仲裁,能經(jīng)受沖突的系統進(jìn)行雙機同步讀寫(xiě)存儲器中的同一單元,確保了數據的準確性,簡(jiǎn)化了通訊卡的硬件電路設計,同時(shí)為軟件設計免除了使用信號燈進(jìn)行判斷操作的繁鎖過(guò)程。 2.2 雙端口RAM的地址范圍的選擇 計算機內部高端地址中有一段保留給I/O適配卡的128KB地址空間,段地址空間為0C0000H~0DFFFFH。利用這128KB中的一段2KB空間即可滿(mǎn)足IDT7132的使用,按PC總線(xiàn)的協(xié)議經(jīng)過(guò)地址譯碼和其它控制總線(xiàn)選能,實(shí)現內存直接映象方式。地址范圍為0D0000H~0D07FFH之間。另一側,MCU與IDT7132的接法只將IDT7132其中一側總線(xiàn)接入MCU的總線(xiàn)上,其接法同普通RAM沒(méi)有區別,設置地址范圍在 8000H~87FFH之間。 按工業(yè)控制標準實(shí)行全地址線(xiàn)譯碼方式,確保全地址空間的每一個(gè)存儲單元的地址在總線(xiàn)上唯一。 2.3 對雙端口RAM訪(fǎng)問(wèn)的特殊情況處理 IDT7132 兩側的BUSY線(xiàn)分別接到MCU的INT0中斷上和PC總線(xiàn)的A10腳(IO-CH-RDY)上,作為MCU和計算機同時(shí)讀寫(xiě)IDT7132的同一個(gè)地址單元時(shí)的“忙閑”狀態(tài)線(xiàn)。當兩側訪(fǎng)問(wèn)不同的地址單元時(shí),BUSY線(xiàn)無(wú)效,兩側操作互不影響。當兩側“幾乎同時(shí)”訪(fǎng)問(wèn)同一個(gè)單元時(shí),按IDT7132的總線(xiàn)仲裁邏輯,對兩側的片選信號和地址信號之一到達時(shí)間間隔只要大于5ns,就能對先到達的一側提供讀寫(xiě)通道,保證數據讀寫(xiě)的真實(shí)性。同時(shí)將另一側的BUSY 線(xiàn)置低,為MCU或計算機提供中斷或等待信號。眾所周知,89C51不具備插入等待周期延時(shí)操作的能力。當MCU一側先行操作時(shí),計算機一側的BUSY線(xiàn)有效,PC總線(xiàn)上的IO-CH-RDY狀態(tài)線(xiàn)被拉低,命令計算機CPU插入等待周期,延時(shí)等待MCU一側完成讀寫(xiě)操作后,再進(jìn)行讀寫(xiě)操作。當計算機一側占據IDT7132的一個(gè)地址單元時(shí),MCU一側再操作該單元,MCU讀寫(xiě)的數據無(wú)效。我們采用了判斷標志位的方式解決此問(wèn)題。當對應的BUSY線(xiàn)變低 INT0中斷有效時(shí),MCU完成該條讀寫(xiě)指令后立即進(jìn)入中斷,置標志位,中斷返回后,即執行查詢(xún)標志位的指令同,判斷此次操作是否有效。未成功,重復操作,直至讀寫(xiě)成功。 3 軟件設計 整個(gè)系統的全部軟件共三部分,每一部分的設計側重點(diǎn)不同。計算機方面軟件實(shí)現的功能包括:用戶(hù)人機對話(huà)接口、汽車(chē)技術(shù)資料庫的管理和擴充、底層全部數據傳輸、運算處理、零點(diǎn)校正設定、實(shí)時(shí)監控操作、各分機的模擬信號線(xiàn)化處理、大量圖片資料的處理與調用等等。通訊卡的軟件設計包括:對各個(gè)分機的管理、數據收集分類(lèi)整理、篩選判斷、與計算機進(jìn)行有效數據傳輸等等。分機的軟件包括數據采集和模擬控制等部分。要求數據采集準確、一致。實(shí)際應用中采用數據濾波、指令冗余、自依斷以及現場(chǎng)斷點(diǎn)返回等抗干擾技術(shù)。 全部軟件涉及的編程語(yǔ)言共三種。分機和通訊卡的軟件設計采用匯編語(yǔ)言,計算機方面采用Visual Basic6.0、Visual C++ 6.0兩種語(yǔ)言,分機方面的軟件這里不作介紹,本文主要針對在通訊卡上以及在Visual Basic 6.0環(huán)境下對雙端口RAM的操作軟件設計作詳細介紹。 Visual Basic 6.0不具備對計算機底層地址操作的功能,不如Visual C++ 6.0、Delphi等。特別在本系統中采用的高速并行通信方式,對內存物理地址讀寫(xiě)操作的頻率很高,按常規應改用其它語(yǔ)言。但系統其它方面的工作,不是其它語(yǔ)言所能替代的,所以必須將VB語(yǔ)言環(huán)境下不能對底層地址讀寫(xiě)操作的問(wèn)題加以解決。經(jīng)過(guò)實(shí)驗,通過(guò)如下方法實(shí)現。 筆者采用的方法是調用動(dòng)態(tài)鏈接庫DLL。用VisualC++ 6.0編寫(xiě)對內存物理地址進(jìn)行讀寫(xiě)操作的DLL動(dòng)態(tài)鏈接庫函數,進(jìn)行數據采集和發(fā)送;用Visual Basic 6.0調用DLL實(shí)現數據通信,從而彌補VB對底層數據操作的缺陷,使VB環(huán)境下開(kāi)發(fā)數據通信系統軟件更為方便。 (1)首先使用Visual C++ 6.0創(chuàng )建一個(gè)MFC Appwizard dll項目,這樣就可以在DLL中編寫(xiě)程序。因為我們要對直接映象在高端內在范圍內的地址進(jìn)行操作,所以在編寫(xiě)程序時(shí),要使用如下方法: -asm{ mov A B mov …… ………… mov i A} return i; -asm{}是嵌入式匯編函數,在Visual C++6.0中只有使用此方法才可以訪(fǎng)問(wèn)高端內存地睛。還要在DLL中編寫(xiě)兩個(gè)函數。一個(gè)從內存地址讀數函數,一個(gè)對內存地址寫(xiě)數函數。這樣才能完成對高端內存地址讀寫(xiě)的操作,實(shí)現底層的數據傳輸。 (2)使用Visual Basic 6.0調用DLL動(dòng)態(tài)鏈接庫函數。 第一步:運行VB6.0時(shí),新建一個(gè)工程項目,在項目中添加模塊,在模塊中聲明兩個(gè)API函數: Declare Function write% lib“C:兡?#12;C” (ByVal localport%,ByVal value%) Declare Function read% lib “C:兡?#12;C” (ByVal localport%) 其中:write( )函數是向高端內存地址寫(xiě)數據; read( )函數是從高端內存地址讀數據。 第二步:在窗體中放入三個(gè)文本框(Text 1,Text2,Text3),一個(gè)命令按扭(Command 1),就可以在代碼窗口中編寫(xiě)代碼: Option Explicit Dim Port 1 ‘內存地址 如:0D0000H Dim Port 2 ‘16進(jìn)制數 如:12H Private Sub Command 1-click() Dim Gg As Integer ‘聲明一個(gè)返回整數 Dim Salp As Integer ‘聲明一個(gè)返回整數 Port 1=Val(Text 1.Text) ‘把Text 1賦給port 1 Port 2=Val(Text 2.Text) ‘把Text 2賦給port 2 Gg="write"(port 1,port2) ‘往Port 1地址中寫(xiě)Port 2 Salp="read"(port 1) ‘從Port 1地址中讀數 Text3.Text=Salp ‘在Text3中顯示 Salp End Sub 兩個(gè)函數的調用過(guò)程如上所述,可根據編程的意圖放在任何位置。特別注意,函數地址不能與其它硬件的地址或系統內存地址沖突,否則會(huì )造成計算機死機。 本文采用雙端口RAM器件設計的智能型高速并行通訊卡,在監控軟件、硬件,以及在VB環(huán)境下對直接映象方式的高端內存進(jìn)行讀寫(xiě)操作的實(shí)現,具有通用性。尤其在自動(dòng)控制領(lǐng)域設計A/D、D/A轉換、實(shí)現閉環(huán)控制,以及設計虛擬儀器、視頻信號數字化處理、語(yǔ)音處理、各種系統動(dòng)態(tài)仿真等需要高速數據傳輸的場(chǎng)合,都具有借鑒意義?傊,智能化板卡在PC總線(xiàn)工業(yè)控制的應用,是今后發(fā)展的主流。 |