引言
隨著變電站智能化程度的逐步提高,對溫度、濕度等現(xiàn)場狀態(tài)參量的采集需求也越來越多。就目前而言,在現(xiàn)場應用中,此類設備多采用RS232或RS485等UART串行通信方式和IED(Intelligent Electronic Device,智能電子設備)裝置進行交互。一般來說,不同的設備采用的通信數(shù)據(jù)幀格式并不相同。各式各樣的串口數(shù)據(jù)幀格式,對IED裝置的軟件定型造成一定的困難。傳統(tǒng)的做法一般是由裝置生產(chǎn)廠家指定和其配套的外圍設備,裝置的靈活性不夠理想。本文針對此類問題,提出了一種基于Lua腳本語言的解決方案,可有效地提高IED裝置對各種類型串口數(shù)據(jù)報文幀格式的適應性。該方案將具體串口報文規(guī)約的組建和解析交給Lua腳本進行處理,從而使設計者在裝置的軟件開發(fā)中,可僅關注于相關接口的設計,而不用關心具體的串口通信規(guī)約,從而方便軟件的定型,并提高了裝置自身在應用中的靈活性。
1 Lua腳本語言介紹
Lua是一種源碼開放的、免費的、輕量級的嵌入式腳本語言,源碼完全采用ANSI(ISO) C.這一點使它非常適合融入目前以C語言為主的嵌入式開發(fā)環(huán)境之中。兩者之間實現(xiàn)交互的關鍵在于一個虛擬的棧,通過該虛擬棧和Lua提供的可對該棧進行操作的相關接口函數(shù),可以很方便地在它們之間實現(xiàn)各種類型數(shù)據(jù)的傳遞。
與其他腳本語言(如Perl、Tcl、Python等)相比,Lua表現(xiàn)出了足夠的簡單性以及非常高的執(zhí)行效率,結合其與平臺的高度無關以及充分的可擴展性[1],這使得它越來越多地得到大家的關注。因此,在本文的方案中優(yōu)先選用Lua腳本來進行設計。
2 系統(tǒng)方案概述
本方案主要是圍繞著IED裝置和外圍串口設備之間的通信來進行設計的,系統(tǒng)框架如圖1所示。
圖1 系統(tǒng)框架
當IED裝置開始運行時,將創(chuàng)建一個用于UART通信的讀寫調(diào)度任務。在該任務中,首先通過Lua提供的接口函數(shù)來啟動其腳本引擎,并創(chuàng)建Lua虛擬機。然后即可將用戶編寫的C函數(shù)注冊到Lua虛擬機中去,并將存在于Flash文件系統(tǒng)中獨立于裝置C程序的Lua腳本文件加載到虛擬機中,從而建立起Lua和C的交互環(huán)境。在系統(tǒng)應用中,將需要發(fā)送到外圍設備的具體數(shù)據(jù)內(nèi)容都放在Lua腳本文件中。當裝置C程序需要發(fā)送數(shù)據(jù)時,通過通信讀寫調(diào)度程序及虛擬機的配合,將這部分數(shù)據(jù)取出,并調(diào)用串口驅(qū)動程序發(fā)送給外圍設備。當收到外圍設備發(fā)給IED裝置的報文時,再將相應數(shù)據(jù)傳給虛擬機中運行的腳本程序進行處理,并由Lua根據(jù)數(shù)據(jù)處理結果來調(diào)用已注冊的C函數(shù)進行相關業(yè)務處理。
圖2 系統(tǒng)程序流程
本系統(tǒng)的程序流程如圖2所示。
其中,串口通信芯片采用TI公司的帶64字節(jié)FIFO的4通道可編程UART芯片TL16C754B來實現(xiàn)。它的4個通道可分別獨立編程,在3.3 V的操作電壓下,數(shù)據(jù)傳輸速率可高達2 Mbps,適合多種UART通信環(huán)境中的應用[2]。基于裝置的應用環(huán)境,本文采用RS485的問答機制并結合查詢方式來對該串口通信方案進行設計。在方案實現(xiàn)中,裝置將每隔一定時間通過串口芯片發(fā)送一次查詢報文,當查詢到外圍設備發(fā)送的正確響應報文后,再進行相關業(yè)務處理。
3 功能實現(xiàn)
在嵌入式應用領域,串口通信的應用比較成熟,因此,本文將著重介紹Lua是如何服務于這一應用的。從圖2可以看出,Lua的使用主要體現(xiàn)在如下幾個方面:
◆ Lua與C交互環(huán)境的建立;
◆ 提取腳本中的串口配置數(shù)據(jù);
◆ 調(diào)用Lua函數(shù)設置發(fā)送緩沖區(qū);
◆ 通過Lua函數(shù)處理接收緩沖區(qū)數(shù)據(jù)。