隨著(zhù)網(wǎng)絡(luò )通信技術(shù)的發(fā)展,以太網(wǎng)在工業(yè)控制領(lǐng)域的應用日趨廣泛,基于以太網(wǎng)的遠程監控系統實(shí)現遠程監測、控制和管理的有效集成。使用遠程監控系統通過(guò)網(wǎng)絡(luò )對工業(yè)生產(chǎn)過(guò)程進(jìn)行監測,及時(shí)了解現場(chǎng)信息,快速進(jìn)行決策。 遠程控制的關(guān)鍵技術(shù)在于如何解決工業(yè)現場(chǎng)設備的網(wǎng)絡(luò )接入問(wèn)題。目前,主要有兩種方法:一種是使用PC機通過(guò)PC機端口(如RS232、USB接口)或數據采集卡來(lái)采集數據同時(shí)提供網(wǎng)絡(luò )接口,這種方法利用強大的PC機軟件支持,容易實(shí)現網(wǎng)絡(luò )通信功能,但是PC機端口資源有限,專(zhuān)用采集卡成本較高,難以推廣;另一種就是在現場(chǎng)使用嵌入式系統實(shí)現網(wǎng)絡(luò )接入,嵌入式系統具有功耗低、體積小、成本低、可靠性高、實(shí)時(shí)性強等特點(diǎn),使用在工業(yè)控制現場(chǎng)比較合適。 本文將嵌入式技術(shù)和網(wǎng)絡(luò )技術(shù)相結合,在現場(chǎng)利用嵌入式系統實(shí)現網(wǎng)絡(luò )通信功能以實(shí)時(shí)傳輸液位信號和控制信號,在客戶(hù)端PC機上通過(guò)套接字編程實(shí)現與現場(chǎng)嵌入式系統的遠程通信,從而達到對遠程液位的監控。 1 遠程液位監控系統結構 本文設計的遠程液位監控系統結構如圖1所示:其中,處理器芯片采用ARM微處理器S3C44B0X;S3C44B0X自帶8路10位ADC進(jìn)行A/D轉換來(lái)采集液位數據,通過(guò)擴展DAC0832實(shí)現D/A轉換以輸出控制量;S3C44B0X連接10M以太網(wǎng)卡RTL8019AS,提供網(wǎng)絡(luò )功能的硬件接口;μC/OS-Ⅱ移植到S3C44B0X上,提供操作系統的支持,方便了應用程序的開(kāi)發(fā)和對整個(gè)系統的管理;嵌入式TCP/IP協(xié)議棧LwIP移植到 μC/OS-Ⅱ平臺上,實(shí)現對網(wǎng)絡(luò )數據的軟件處理,從而為嵌入式系統提供網(wǎng)絡(luò )通信功能;遠程PC機客戶(hù)端登錄到嵌入式系統服務(wù)器上,通過(guò)以太網(wǎng)實(shí)現兩端數據的實(shí)時(shí)交互。 圖1 遠程液位監控系統結構圖 2 硬件介紹與設計 三星的S3C44B0X微處理器芯片采用ARM公司16/32位ARM7TDMI RISC結構的CPU核,主頻為66MHz,通過(guò)擴展一系列通用外圍部件,提供豐富的外設功能。它的存儲系統具有8個(gè)存儲體,每個(gè)有32MB的存儲空間,通過(guò)nGCS0-7這8個(gè)片選來(lái)分配。本文使用的設計方案中nGCS0接Flash芯片AM29LV160DB,起始地址0x00000000,大小為 2MB,nGCS6接SDRAM芯片HY57V641620ET-7,起始地址為0x0c000000,大小為8MB,nGCS3接RTL8019AS,起始地址為0x06000000。 RTL8019AS是一款高度集成的全雙工以太網(wǎng)控制器,收發(fā)可同時(shí)達到10Mbps的速度;支持8 位、16位數據總線(xiàn),8個(gè)中斷請求線(xiàn)可供選擇;支持UTP、AUI和BNC的自動(dòng)檢測;內置16K的SRAM,用于數據緩沖,以256B為單位的分頁(yè)結構,可以自行分配用于收發(fā)的分頁(yè)的大小和位置,一般前12頁(yè)用于發(fā)送緩沖,后52頁(yè)用于接收緩沖;硬件自帶收發(fā)CRC校驗、FIFO邏輯隊列等,減少了主 CPU處理網(wǎng)絡(luò )數據的工作量。S3C44B0X對RTL8019AS的操作主要集中在對網(wǎng)卡寄存器的讀寫(xiě)和網(wǎng)卡內SRAM的處理。 3 軟件設計 3.1 基于嵌入式系統的服務(wù)器端程序設計 3.1.1 S3C44B0X上μC/OS-Ⅱ的移植 嵌入式操作系統μC/OS-Ⅱ可以運行于各種不同類(lèi)型的微處理器上,其內核小、效率高,并且具有高度的模塊化和可移植性,支持多任務(wù)實(shí)時(shí)調度,擴展后可支持網(wǎng)絡(luò )功能、圖形界面等,使得應用程序的開(kāi)發(fā)更加簡(jiǎn)單,功能更加豐富。 在使用μC/OS-Ⅱ之前,要先將它移植到S3C44B0X上,移植工作主要包括三個(gè)方面: (1) 設置與處理器和編譯器相關(guān)的代碼,包括一系列數據類(lèi)型的定義,開(kāi)中斷宏、關(guān)中斷宏的實(shí)現,定義堆棧的生長(cháng)方向; (2)用C語(yǔ)言編寫(xiě)6個(gè)操作系統相關(guān)的函數:OSTaskStkInit()初始化任務(wù)的堆棧結構,和5個(gè)鉤子函數OSTaskDelHook()、 OSTaskSwHook()、OSTaskStatHook()、OSTimeHook()、OSTaskCreateHook(); (3) 用匯編語(yǔ)言編寫(xiě)4個(gè)與處理器相關(guān)的函數:運行優(yōu)先級最高的就緒任務(wù)函數OSStartHighRdy(),任務(wù)級的任務(wù)切換函數OS_TASK_SW(),中斷級的任務(wù)切換函數OSIntCtxSw(),時(shí)鐘節拍服務(wù)函數OSTickISR()。 3.1.2 μC/OS-Ⅱ上TCP/IP協(xié)議棧的實(shí)現 LwIP(Light- weight IP)是瑞典計算機科學(xué)院(Swedish Institute of Computer Science)的Adam Dunkels等開(kāi)發(fā)的一套開(kāi)源的TCP/IP協(xié)議棧,LwIP在保持TCP/IP協(xié)議主要功能的基礎上減少對RAM的占用,這使得它適合在低端嵌入式系統中使用。 LwIP協(xié)議棧在設計時(shí)已經(jīng)把所有與硬件、操作系統、編譯器等移植相關(guān)的部分獨立出來(lái),放在/src/arch目錄下。因此LwIP在μC/OS-Ⅱ上的實(shí)現就是修改這個(gè)目錄下的文件。 (1) 與CPU、編譯器相關(guān)的部分 主要是cc.h、cpu.h、peRF.h文件中有關(guān)數據長(cháng)度、字的高低位順序等的定義,這些應該與實(shí)現μC/OS-Ⅱ時(shí)參數的定義保持一致。另外,一般情況下C語(yǔ)言的結構體struct是4字節對齊的,但是在處理數據包的時(shí)候,LwIP使用的是通過(guò)結構體中不同數據的長(cháng)度來(lái)讀取相應的數據,所以,一定要在定義struct的時(shí)候使用_packed關(guān)鍵字,讓編譯器放棄struct的字節對齊。 (2) 與操作系統相關(guān)的部分 LwIP中需要使用信號量通信,所以在sys_arch.h、sys_arch.c中應實(shí)現信號量結構體sys_sem_t,和相關(guān)的信號量處理函數:包括創(chuàng )建一個(gè)信號量結構sys_sem_new(),釋放一個(gè)信號量結構sys_sem_free(),發(fā)送信號量 sys_sem_signal(),請求信號量sys_arch_sem_wait()。 LwIP使用消息隊列來(lái)緩沖、傳遞數據報文,因此要在sys_arch.h、sys_arch.c中實(shí)現消息隊列結構體sys_mbox_t,以及相應的操作函數:包括創(chuàng )建一個(gè)消息隊列 sys_mbox_new(),釋放一個(gè)消息隊列sys_mbox_free(),向消息隊列發(fā)送消息sys_mbox_post(),從消息隊列中獲取消息sys_arch_mbox_fetch()。 LwIP中每個(gè)與外界網(wǎng)絡(luò )連接的線(xiàn)程都有自己的timeout屬性,即等待超時(shí)時(shí)間,移植工作需要實(shí)現sys_arch_timeouts()函數,返回當前正處于運行態(tài)的線(xiàn)程所對應的timeout隊列指針。 LwIP中網(wǎng)絡(luò )數據的處理需要線(xiàn)程來(lái)操作,所以需要實(shí)現創(chuàng )建新線(xiàn)程函數sys_thread_new()。而在μC/OS-Ⅱ中,沒(méi)有線(xiàn)程的概念,只有任務(wù)。因此必須要把創(chuàng )建新任務(wù)的函數OSTaskCreate()封裝一下,才可以實(shí)現sys_thread_new()。 (3) 相關(guān)庫函數的實(shí)現 LwIP協(xié)議棧中用到了8個(gè)外部函數,主要是來(lái)完成16位數據的高低字節交換、32位數據的大小頭對調、返回字符串長(cháng)度、字符串比較、內存數據塊拷貝、指定長(cháng)度的數據塊清零等功能,與系統或編譯器有關(guān),需要用戶(hù)實(shí)現。 (4) 網(wǎng)絡(luò )設備驅動(dòng)程序 在LwIP中可以有多個(gè)網(wǎng)絡(luò )接口,每個(gè)網(wǎng)絡(luò )接口都對應了一個(gè)netif結構,這個(gè)netif包含了相應網(wǎng)絡(luò )接口的屬性、收發(fā)函數。在網(wǎng)絡(luò )設備驅動(dòng)程序中主要就是實(shí)現四個(gè)網(wǎng)絡(luò )接口函數:網(wǎng)卡初始化、網(wǎng)卡接收數據、網(wǎng)卡發(fā)送數據以及網(wǎng)卡中斷處理函數。 3.2 PC機上客戶(hù)端程序的設計 VC++6.0環(huán)境下客戶(hù)端程序實(shí)現包括以下幾個(gè)部分: (1) 建立客戶(hù)端的Socket:客戶(hù)端應用程序首先構造一個(gè)CAsyncSocket對象CltSock,然后調用CltSock.Create()函數來(lái)建立CltSock實(shí)體。 (2) 提出連接請求:客戶(hù)端套接字CltSock通過(guò)調用CltSock.Connect(strAddr,nPort)函數向服務(wù)器套接字提出連接請求。 (3)傳輸數據:在客戶(hù)端應用程序中重載消息處理函數OnReceive()和OnSend()。在OnReceive()中通過(guò)調用 CltSock.Receive()函數從服務(wù)器端接收數據;在OnSend()中通過(guò)調用CltSock.Send()函數向服務(wù)器端發(fā)送數據。 (4) 關(guān)閉連接:客戶(hù)端套接字CltSock通過(guò)調用CltSock.Close()函數來(lái)關(guān)閉連接。 4 遠程液位監控應用程序的開(kāi)發(fā) 本文設計完成的基于以太網(wǎng)的遠程液位繼電自整定PID控制系統,其控制算法在遠端主機(客戶(hù)機)上實(shí)現,兩端通過(guò)TCP協(xié)議通信,本地的嵌入式系統(服務(wù)器)上一方面實(shí)現對網(wǎng)絡(luò )數據的處理,一方面完成對液位高度的采集與控制;遠端PC機上一方面處理網(wǎng)絡(luò )上的實(shí)時(shí)數據,一方面通過(guò)PID計算出控制量,顯示相關(guān)參數。實(shí)時(shí)液位變化狀況如圖2所示,從圖中可以看出,實(shí)際液位(紅色曲線(xiàn))能夠穩定在液位設定值(藍色曲線(xiàn))處。同時(shí),從用戶(hù)界面上既可以讀出液位高度值,PID自整定參數等,還可以改變液位高度設定值,從而真正實(shí)現了液位對象的遠程監控。 圖2 遠程液位繼電自整定PID控制效果圖 本文設計解決了在嵌入式系統中實(shí)現網(wǎng)絡(luò )功能的問(wèn)題,引入并實(shí)現了一種新的設計方案,即采用三星ARM7處理器S3C44B0X+Realtek的10M 網(wǎng)卡RTL8019AS硬件組合,通過(guò)在μC/OS-Ⅱ操作系統內核的支持下,添加嵌入式TCP/IP協(xié)議棧LwIP,來(lái)實(shí)現網(wǎng)絡(luò )通信的功能,與PC機客戶(hù)端的Socket通信,在此基礎上開(kāi)發(fā)了基于以太網(wǎng)的遠程液位監控系統,達到了良好的控制效果?梢钥闯,這類(lèi)系統在遠程監控中的具有良好的應用前景。 本文作者創(chuàng )新點(diǎn):本文將嵌入式網(wǎng)絡(luò )技術(shù)引入到工業(yè)過(guò)程遠程監控領(lǐng)域,提出了自己的設計方案,并成功開(kāi)發(fā)了一個(gè)遠程液位監控系統。 |