本文主要介紹在英創(chuàng)Linux工控主板(ESM8000、ESM7000和ESM6800H)上,采用Python和C#編程,實(shí)現(xiàn)SQLite數(shù)據(jù)庫(kù)訪問(wèn)的方法。數(shù)據(jù)庫(kù)為應(yīng)用程序展現(xiàn)的是純粹的數(shù)據(jù),更便于像Python、C#這樣的高級(jí)語(yǔ)言處理。而數(shù)據(jù)的獲取則通過(guò)Linux系統(tǒng)的后端程序(Backend),采用效率更高的C來(lái)實(shí)現(xiàn),以滿足數(shù)據(jù)采集過(guò)程中的協(xié)議需求和時(shí)序需求。從系統(tǒng)程序架構(gòu)上看,SQLite數(shù)據(jù)庫(kù)把上層的Python, C#應(yīng)用程序與后端的C程序連接在一起。
本文的Python和C#實(shí)例,均采用Visual Studio Code作為基本的編程工具,其代碼可在主板 + ESMARC評(píng)估底板上運(yùn)行,其基本的硬件環(huán)境采用采用ESM8000工控主板 + 評(píng)估底板構(gòu)成,如下圖所示:
本文實(shí)例中SQLite數(shù)據(jù)庫(kù)包含以下信息:
ID | Name | Value | 簡(jiǎn)要說(shuō)明 |
INT | TEXT | TEXT | 字段數(shù)據(jù)類型 |
0 | refresh | - | 數(shù)據(jù)更新周期,ms單位 |
1 | cpu-temperature | - | CPU芯片溫度,℃單位 |
2 | cpu-payload | - | CPU當(dāng)前負(fù)載率,包括各個(gè)核的負(fù)載率 |
3 | eth0 | - | 網(wǎng)口信息,包括名稱、類型(RJ45、WiFi、4G等)、IP參數(shù)、連接狀態(tài)(down、up、信號(hào)強(qiáng)度) |
4 | eth1 | - | |
5 | eth2 | - | |
6 | … | - | 更多網(wǎng)口信息 |
SQLite數(shù)據(jù)庫(kù)文件保存在”/mnt/mmc/sysinfo.db”。
系統(tǒng)的程序架構(gòu)由客戶應(yīng)用程序、數(shù)據(jù)庫(kù)、后端程序組成,它們與硬件環(huán)境的關(guān)系如下圖所示:
對(duì)簡(jiǎn)單的接口操作,Python,C#可通過(guò)各自的通用IO庫(kù)來(lái)實(shí)現(xiàn),如在《英創(chuàng)Linux主板的Python, C#實(shí)例簡(jiǎn)介之一》一文中介紹的那樣。若接口通訊需要滿足特定的協(xié)議,或有特殊的實(shí)時(shí)性要求,則可采用C編程的后端程序來(lái)實(shí)現(xiàn),訪問(wèn)硬件獲得所需數(shù)據(jù),更新至SQLite數(shù)據(jù)庫(kù)中。上層的Python,C#應(yīng)用程序則直接訪問(wèn)數(shù)據(jù)庫(kù),無(wú)需關(guān)心數(shù)據(jù)獲取過(guò)程的細(xì)節(jié)。
Python應(yīng)用程序
應(yīng)用程序負(fù)載創(chuàng)建SQLite數(shù)據(jù)庫(kù)。
C#應(yīng)用程序
創(chuàng)建工程后,需要從NuGet添加Microsoft.Data.SQLite類庫(kù)。
后端C程序
后端C程序打開(kāi)已創(chuàng)建的SQLite數(shù)據(jù)庫(kù),根據(jù)更新率,周期性地把CPU和網(wǎng)絡(luò)端口信息提交至數(shù)據(jù)庫(kù)。
后端C程序源碼test_emdb.c可點(diǎn)擊下載,對(duì)不同主板需要相應(yīng)的GCC編譯工具如下:
主板類型 | GCC |
ESM6800 | cortexa7hf-neon-poky-linux-gnueabi |
ESM7000 | cortexa7hf-neon-poky-linux-gnueabi |
ESM6802 | cortexa9hf-neon-poky-linux-gnueabi |
ESM8000 | aarch64-poky-linux |
相對(duì)說(shuō)來(lái),后端C程序比上層的Python,C#程序要復(fù)雜得多,這也正好體現(xiàn)了Python,C#的高效簡(jiǎn)潔的特性。
成都英創(chuàng)信息技術(shù)有限公司 028-8618 0660