<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Lua腳本語(yǔ)言的嵌入式UART通信的實(shí)現(xiàn)

          基于Lua腳本語(yǔ)言的嵌入式UART通信的實(shí)現(xiàn)

          作者: 時(shí)間:2013-10-15 來(lái)源:網(wǎng)絡(luò) 收藏

            引言

            隨著變電站智能化程度的逐步提高,對(duì)溫度、濕度等現(xiàn)場(chǎng)狀態(tài)參量的采集需求也越來(lái)越多。就目前而言,在現(xiàn)場(chǎng)應(yīng)用中,此類(lèi)設(shè)備多采用RS232或RS485等UART串行通信方式和IED(Intelligent Electronic Device,智能電子設(shè)備)裝置進(jìn)行交互。一般來(lái)說(shuō),不同的設(shè)備采用的通信數(shù)據(jù)幀格式并不相同。各式各樣的串口數(shù)據(jù)幀格式,對(duì)IED裝置的軟件定型造成一定的困難。傳統(tǒng)的做法一般是由裝置生產(chǎn)廠家指定和其配套的外圍設(shè)備,裝置的靈活性不夠理想。本文針對(duì)此類(lèi)問(wèn)題,提出了一種基于的解決方案,可有效地提高IED裝置對(duì)各種類(lèi)型串口數(shù)據(jù)報(bào)文幀格式的適應(yīng)性。該方案將具體串口報(bào)文規(guī)約的組建和解析交給Lua腳本進(jìn)行處理,從而使設(shè)計(jì)者在裝置的軟件開(kāi)發(fā)中,可僅關(guān)注于相關(guān)接口的設(shè)計(jì),而不用關(guān)心具體的串口通信規(guī)約,從而方便軟件的定型,并提高了裝置自身在應(yīng)用中的靈活性。

            1 介紹

            Lua是一種源碼開(kāi)放的、免費(fèi)的、輕量級(jí)的腳本語(yǔ)言,源碼完全采用ANSI(ISO) C.這一點(diǎn)使它非常適合融入目前以C語(yǔ)言為主的開(kāi)發(fā)環(huán)境之中。兩者之間實(shí)現(xiàn)交互的關(guān)鍵在于一個(gè)虛擬的棧,通過(guò)該虛擬棧和Lua提供的可對(duì)該棧進(jìn)行操作的相關(guān)接口函數(shù),可以很方便地在它們之間實(shí)現(xiàn)各種類(lèi)型數(shù)據(jù)的傳遞。

            與其他腳本語(yǔ)言(如Perl、Tcl、Python等)相比,Lua表現(xiàn)出了足夠的簡(jiǎn)單性以及非常高的執(zhí)行效率,結(jié)合其與平臺(tái)的高度無(wú)關(guān)以及充分的可擴(kuò)展性[1],這使得它越來(lái)越多地得到大家的關(guān)注。因此,在本文的方案中優(yōu)先選用Lua腳本來(lái)進(jìn)行設(shè)計(jì)。

            2 系統(tǒng)方案概述

            本方案主要是圍繞著IED裝置和外圍串口設(shè)備之間的通信來(lái)進(jìn)行設(shè)計(jì)的,系統(tǒng)框架如圖1所示。

          圖1 系統(tǒng)框架

            當(dāng)IED裝置開(kāi)始運(yùn)行時(shí),將創(chuàng)建一個(gè)用于的讀寫(xiě)調(diào)度任務(wù)。在該任務(wù)中,首先通過(guò)Lua提供的接口函數(shù)來(lái)啟動(dòng)其腳本引擎,并創(chuàng)建Lua虛擬機(jī)。然后即可將用戶(hù)編寫(xiě)的C函數(shù)注冊(cè)到Lua虛擬機(jī)中去,并將存在于Flash文件系統(tǒng)中獨(dú)立于裝置C程序的Lua腳本文件加載到虛擬機(jī)中,從而建立起Lua和C的交互環(huán)境。在系統(tǒng)應(yīng)用中,將需要發(fā)送到外圍設(shè)備的具體數(shù)據(jù)內(nèi)容都放在Lua腳本文件中。當(dāng)裝置C程序需要發(fā)送數(shù)據(jù)時(shí),通過(guò)通信讀寫(xiě)調(diào)度程序及虛擬機(jī)的配合,將這部分?jǐn)?shù)據(jù)取出,并調(diào)用串口驅(qū)動(dòng)程序發(fā)送給外圍設(shè)備。當(dāng)收到外圍設(shè)備發(fā)給IED裝置的報(bào)文時(shí),再將相應(yīng)數(shù)據(jù)傳給虛擬機(jī)中運(yùn)行的腳本程序進(jìn)行處理,并由Lua根據(jù)數(shù)據(jù)處理結(jié)果來(lái)調(diào)用已注冊(cè)的C函數(shù)進(jìn)行相關(guān)業(yè)務(wù)處理。

          圖2 系統(tǒng)程序流程

            本系統(tǒng)的程序流程如圖2所示。

            其中,串口通信芯片采用TI公司的帶64字節(jié)FIFO的4通道可編程UART芯片TL16C754B來(lái)實(shí)現(xiàn)。它的4個(gè)通道可分別獨(dú)立編程,在3.3 V的操作電壓下,數(shù)據(jù)傳輸速率可高達(dá)2 Mbps,適合多種環(huán)境中的應(yīng)用[2]?;谘b置的應(yīng)用環(huán)境,本文采用RS485的問(wèn)答機(jī)制并結(jié)合查詢(xún)方式來(lái)對(duì)該串口通信方案進(jìn)行設(shè)計(jì)。在方案實(shí)現(xiàn)中,裝置將每隔一定時(shí)間通過(guò)串口芯片發(fā)送一次查詢(xún)報(bào)文,當(dāng)查詢(xún)到外圍設(shè)備發(fā)送的正確響應(yīng)報(bào)文后,再進(jìn)行相關(guān)業(yè)務(wù)處理。

            3 功能實(shí)現(xiàn)

            在應(yīng)用領(lǐng)域,串口通信的應(yīng)用比較成熟,因此,本文將著重介紹Lua是如何服務(wù)于這一應(yīng)用的。從圖2可以看出,Lua的使用主要體現(xiàn)在如下幾個(gè)方面:

            ◆ Lua與C交互環(huán)境的建立;

            ◆ 提取腳本中的串口配置數(shù)據(jù);

            ◆ 調(diào)用Lua函數(shù)設(shè)置發(fā)送緩沖區(qū);

            ◆ 通過(guò)Lua函數(shù)處理接收緩沖區(qū)數(shù)據(jù)。

          3.1 Lua與C交互環(huán)境的建立

            要建立交互環(huán)境,首先要啟動(dòng)Lua腳本引擎,并創(chuàng)建虛擬機(jī)。其機(jī)制雖然相對(duì)復(fù)雜,但對(duì)應(yīng)用來(lái)說(shuō)卻比較簡(jiǎn)單,通過(guò)“L=lua_open(NULL);”即可實(shí)現(xiàn)。其中,L是一個(gè)指向結(jié)構(gòu)類(lèi)型為lua_State的指針變量,該結(jié)構(gòu)將負(fù)責(zé)對(duì)Lua的運(yùn)行狀態(tài)進(jìn)行維護(hù)。

            為了實(shí)現(xiàn)Lua腳本函數(shù)對(duì)系統(tǒng)程序中串口發(fā)送和接收緩存區(qū)的數(shù)據(jù)進(jìn)行訪問(wèn),定義了幾個(gè)C函數(shù)供腳本調(diào)用,即用于設(shè)置串口發(fā)送緩沖區(qū)的函數(shù)set_tx_buf、讀取串口接收緩沖區(qū)的函數(shù)get_rx_buf,以及在Lua腳本中判斷串口數(shù)據(jù)交互正常時(shí)調(diào)用的結(jié)果處理函數(shù)uart_ok_del.

            在Lua腳本中,要成功調(diào)用以上函數(shù),必須將其加載到Lua虛擬機(jī)中去,本文采用Lua提供的一種注冊(cè)C函數(shù)庫(kù)的方法來(lái)實(shí)現(xiàn)。具體加載過(guò)程如下:

            ① 按以下格式定義調(diào)用函數(shù):

            static int set_tx_buf(lua_State *L);

            static int get_rx_buf(lua_State *L);

            static int uart_ok_del(lua_State *L);

          linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

          c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


          通信相關(guān)文章:通信原理


          土壤濕度傳感器相關(guān)文章:土壤濕度傳感器原理

          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();