阮永超,劉武發,鄭 鵬
(鄭州大學機械與動力工程學院,河南鄭州450001)
隨著網絡技術的發展,網絡化的智能傳感器系統運用越來越廣泛。為了解決傳感器與網絡連接的標準化問題,電氣和電子工程師協會(Institute of Electrical and Electronics Engineers,IEEE)制定了IEEE 1451一系列標準。
針對IEEE 1451標準,國內學者進行了大量研究并且取得了豐碩的研究成果。段文浩[1]設計了基于IEEE 1451.2標準[2]的智能傳感器系統,該系統中的網絡適配器模塊使用基于SPI(serial peripheral inter-face,串行外設接口)協議所設計的十線制接口與智能傳感器模塊相連接[2]。鄭培亮[3]以ARM9的嵌入式開發板OK2400-IV作為載體,在其上運行Linux系統并搭建Boa服務器作為網絡適配器模塊;在計算機中運行Linux系統,并通過網線使計算機與網絡適配器模塊進行通信;網絡適配器模塊與智能傳感器模塊的接口也采用基于SPI協議的十線制接口。尹寶軍、周敏剛等[4-5]設計的智能傳感器系統中網絡適配器模塊和智能傳感器模塊均采用RS232協議通信。馬生貴[6]設計的智能傳感器系統中網絡適配器模塊和智能傳感器模塊采用CAN(controller area network,控制器局域網總線)協議通信。趙露[7]設計了用于環境監測的使用ZigBee協議的無線傳感器的網絡節點。劉東明等[8]設計了采用ZigBee協議與其他節點通信的無線傳感器節點。
IEEE 1451標準中關于網絡適配器模塊與智能傳感器模塊是否采用IIC通信[9]并沒有相關規定,也鮮有研究,而筆者設計的智能傳感器系統中網絡適配器模塊采用IIC與智能傳感器模塊通信,采用Wi-Fi[10]與上位機通信。IIC通信具有可靠性好、傳輸速度快、結構簡單和易于擴充等優點;Wi-Fi通信的優勢在于信號覆蓋廣、網絡速度較快,能夠擺脫線纜連接的束縛,成本低廉,容易維護。因此,該設計對于今后相關方面的研究具有借鑒意義。
智能傳感器系統總體框架如圖1所示。STM32F 103通過 USART(universal synchronous/asynchro-nous receiver/transmitter,通用同步/異步串行接收/發送器)[11]與ESP8266模塊[12]連接,組成網絡適配器模塊[13]。STM32F103通過使用AT(Attention)指令與ESP8266模塊通信,就能使ESP8266模塊接入網絡。STM32F103與傳感器連接,組成智能傳感器模塊。系統總體設計采用客戶端/服務器模式,上位機作為客戶端,網絡適配器模塊作為服務器,智能傳感器模塊執行具體的操作。

圖1 智能傳感器系統總體框架Fig.1 General framework of intelligent sensor system
智能傳感器系統的工作流程為:1)上位機發送指令;2)網絡適配器模塊接收指令后解析指令并生成自己的指令,然后向相應的智能傳感器模塊發送指令;3)智能傳感器模塊接收指令后執行相應操作,并將結果發送給網絡適配器模塊;4)網絡適配器模塊收到結果后將結果發送給上位機;5)上位機接收結果并進行相關操作。
本文主要對圖1中虛線所包圍的上位機、網絡適配器模塊、智能傳感器模塊1三部分的設計進行介紹,其他部分的設計類似,不再贅述。
智能傳感器模塊1與網絡適配器模塊的接口及硬件設計如圖2所示,括號內為具體的引腳。

圖2 智能傳感器模塊1與網絡適配器模塊的接口及硬件設計Fig.2 Interface between intelligent sensor module 1 and net-work adapter module and hardware design
在網絡適配器模塊中,PA0為ESP8266模塊的片選信號引腳,當PA0為高電平時,ESP8266模塊被選中,ESP8266模塊開始工作;PA1為ESP8266模塊的復位信號引腳,當PA1為低電平時,ESP8266模塊復位;控制器通過PA2向ESP8266模塊發送信息,通過PA3從ESP8266模塊接收信息,通過VCC(volt current condenser,電路的供電電壓)和GND(ground,地線)向ESP8266模塊供電。
在網絡適配器模塊與智能傳感器模塊1的連接中,STM32F103.1作為IIC主機,STM32F103.2作為IIC從機,PB6作為IIC時鐘線,PB7作為IIC數據線,智能傳感器模塊1通過PB2向網絡適配器模塊發送應答信號,網絡適配器模塊通過PB8向智能傳感器模塊1發送應答信號,PB9作為智能傳感器模塊1的連接請求線。智能傳感器模塊1連接成功后,網絡適配器模塊通過檢測PB9的高低電平來判斷智能傳感器模塊1是否斷開連接。網絡適配器模塊通過VCC和GND向智能傳感器1模塊供電。
在STM32F103.2與傳感器0的連接中,PB0作為時鐘線,PB1作為數據線。當傳感器0接入系統后,PC2被置為高電平;當傳感器0斷開連接后,PC2被置為低電平。STM32F103.2通過檢測PC2的高低電平來判斷傳感器0是否接入,通過VCC和GND向傳感器0供電。
智能傳感器模塊的智能性體現在其內部有傳感器電子數據表格(transducer electronic data sheets,TEDS),用以描述和記錄智能傳感器模塊的相關參數。參考IEEE 1451.2標準設計了3種TEDS,分別是主TEDS、通道TEDS和校準TEDS。按照標準,主TEDS和通道TEDS是必須有且固定不變的,它們被存儲在程序中;校準TEDS是根據校準的需要而改變其中的校準數據,它被存儲在STM32F103的內部Flash中。現主要以主TEDS為例介紹TEDS的設計。
TEDS格式設計中分別取TEDS中“類型”“長度”“內容”所對應的英文單詞“type”“length”“value”的首字母,合稱為TLV[14]。TEDS中的TLV個數不定,根據需要設置。設計中為了便于TEDS的存儲和傳輸,TEDS由字符組成。在一個TLV中:TLV的類型用2個字符表示;長度是指此TLV內容的字符個數,用2個字符表示;表示內容的字符數量不固定。TEDS中第1個TLV的類型是用來告知信息的讀取者,這些信息是TEDS信息;其他TLV中的類型表示其內容在TEDS中的數據區號。第1個TLV中的內容是TEDS相關標準、類型和版本信息,其他TLV中的內容是TEDS所記錄的相關數據。
主TEDS主要用來描述智能傳感器模塊自身。主TEDS中有3個TLV。第1個TLV為“0106020101”,其中:開頭的2個字符“01”用于將數據識別為TEDS;“06”表示此TLV內容由6個字符組成;“02”表示IEEE1451.2標準;第2個“01”表示主TEDS;最后一個“01”表示97年版本。第2個TLV為“042600347501136220191011120201”,其中:開頭的“04”表示全球識別號;“26”表示此TLV內容由26個字符組成;“003475”中第1個“0”表示北緯,“003475”表示北緯34.75°;“011362”中“0”表示東經,“011362”表示東經 113.62°;“20191011120201”表示2019年10月11日12點2分1秒。所以該智能傳感器模塊的全球識別號為“0034750113620191011120201”。第3個TLV為“090202”,其中:“09”表示此TLV信息是執行通道數量;“02”表示此TLV內容由2個字符組成;最后一個“02”表示該智能傳感器模塊有2個傳感器通道。
根據該智能傳感器系統的特點設計了簡單易讀的指令體系,如表1所示。
上位機產生的指令中,除了校準TEDS指令外,其他都由3個字符組成,其中第1個字符表示智能傳感器模塊的編號。指令“1ch”表示要讀取智能傳感器模塊1中傳感器的連接狀態,“1aa”表示要讀取智能傳感器模塊1的主TEDS。在上位機發送的“10b”“10c”“102”三個指令中,第2個字符均表示要執行操作的傳感器編號,第3個字符表示要執行的操作,如“10b”表示要讀取智能傳感器模塊1中傳感器編號為0的通道TEDS。上位機向智能傳感器模塊1寫入校準TEDS時會在校準TEDS前面加上相關信息,如“1j0”,其中:“1”表示智能傳感器模塊1;“j”表示校準TEDS;“0”表示傳感器0。智能傳感器模塊1將校準TEDS寫入完成后會通過PB2通知網絡適配器模塊,網絡適配器模塊接到通知后向上位機發送指令“xw”。
當智能傳感器模塊1中傳感器的連接狀態發生變化時,智能傳感器模塊會將以“s”開頭的四字符指令發送給上位機。在該四字符指令中:第2個字符“1”表示智能傳感器模塊1;第3個字符表示傳感器0是否存在,“0”表示不存在,“1”表示存在;第4個字符是為了增強系統的可擴展性而設置的,可表示另一個傳感器存在與否。

表1 智能傳感器系統指令體系Table 1 Instruction system of intelligent sensor system
當智能傳感器模塊1的連接狀態發生變化時,網絡適配器模塊會將以“s”開頭的三字符指令發送給上位機。智能傳感器模塊1連接成功后,網絡適配器模塊向上位機發送“s1c”;智能傳感器模塊1斷開連接后,網絡適配器模塊向上位機發送“s1b”。“s1b”“s1c”中的“1”表示智能傳感器模塊1,“b”表示不存在,“c”表示存在。
以“s”開頭的指令優先級高,當指令產生沖突時,優先級高的指令優先被發送。通過程序設計,可實現指令的優先發送,具體可參見軟件設計部分。
網絡適配器模塊和智能傳感器模塊1的程序都在keil5中用C語言[15]編寫,上位機程序在Visual Stu-dio中用C#語言[16]編寫。管理員信息、用戶信息以及傳感器的測量值等都保存在MySQL數據庫[17]中。
智能傳感器模塊1與網絡適配器模塊接口的工作流程如圖3所示。此設計中只有PB9的高電平是一直保持的,其他高電平是4 ms或10 ms高電平信號。檢測PB8(非二進制傳輸)和PB2電平時,如果超過1 s未檢測到高電平,智能傳感器模塊1和網絡適配器模塊則重新執行各自的接口程序。智能傳感器模塊1和網絡適配器模塊內部存儲著相同的頻率數組和地址數組。智能傳感器模塊1與接口連接后,會與網絡適配器模塊進行3次握手通信[18],然后接收網絡適配器模塊發送的頻率和對應地址編號的二進制數,并將接收的二進制數轉換為十進制數,找到相應的頻率和地址進行自身的IIC配置。最后,網絡適配器模塊會與智能傳感器模塊1進行一次IIC通信測試,測試成功后,則告知上位機智能傳感器模塊1已連接。
網絡適配器模塊對智能傳感器模塊1的信息讀取分為2步,第1步是讀取信息的字符個數,第2步是按照字符個數去讀取信息,這樣就可以兼容不同長度的TEDS和測量數據。智能傳感器模塊1和網絡適配器模塊的工作流程如圖4和圖5所示。在智能傳感器模塊1中,傳感器的連接狀態有變化時所設置的PB2高電平會一直保持,其他時候設置的PB2高電平是10 ms高電平信號。網絡適配器模塊設置的PB8高電平也是10 ms高電平信號。檢測PB8和PB2(非保持)電平時,如果超過2 s未檢測到高電平,智能傳感器模塊1和網絡適配器模塊則重新執行各自的循環操作。
在智能傳感器模塊1的工作程序中有一個標記參數,用來使網絡適配器模塊讀取不同的信息,如:參數設置為8時,網絡適配器讀取通道TEDS;參數設置為10時,讀取主TEDS。智能傳感器模塊1在檢測到傳感器0連接狀態有變化時,就會將PB2置高電平。網絡適配器模塊讀取以“s”開頭的返回指令后,會將PB8置高電平,告知智能傳感器模塊1。網絡適配器模塊工作程序中有一個代表智能傳感器模塊1是否存在的標記參數,該參數設置為1時代表智能傳感器模塊1存在,設置為0時代表智能傳感器模塊1不存在,參數默認值為0。

圖3 智能傳感器模塊1與網絡適配器模塊接口的工作流程Fig.3 Workflow of interface between intelligent sensor mod-ule 1 and network adapter module
智能傳感器模塊1根據收到的指令執行相應的動作,設置標記參數,執行完畢后將PB2置高,告知網絡適配器可以進行讀取。網絡適配器模塊讀取信息后,查看信息是否是以“s”開頭的返回指令:如果是,將返回指令發送給上位機;如果不是,將PB8置高,告知智能傳感器模塊1讀取完畢。智能傳感器模塊1檢測到PB8的高電平信號后,會設置標記參數,準備要被讀取的信息。網絡適配器模塊再次讀取信息后,查看信息是否是以“s”開頭的返回指令:如果是,將返回指令發送給上位機;如果不是,將上一次收到的數據與本次收到的數據組合在一起(上次收到的數據在前),作為返回數據發送給上位機。硬件設計和軟件設計的結合實現了以“s”開頭的返回指令被優先發送,進而實現了智能傳感器模塊和傳感器的即插即用。

圖4 智能傳感器模塊1的工作流程Fig.4 Workflow of intelligent sensor module 1
5.3.1 上位機軟件的結構
上位機軟件主要分為登錄和功能兩部分。表2和圖6所示分別為上位機數據庫的數據表信息和上位機軟件結構圖。

表2 上位機數據庫的數據表信息Table 2 Data table information of upper computer data-base

圖5 網絡適配器模塊的工作流程Fig.5 Workflow of network adapter module

圖6 上位機軟件結構圖Fig.6 Diagram of the upper computer software structure
表2中:guanliyuan和yonghu表的字段都為var-char類型;sensor0表的平均值、最大值和最小值的字段為float類型,單位的字段為varchar類型,時間的字段為datetime類型。圖6中:傳感器校準是指將校準數據按照最小二乘法進行擬合得出擬合直線方程,并將各組校準數據寫入智能傳感器模塊1的校準TEDS中;測量結果的計算包括測量數據組的平均值、按照t分布置信度為0.95的置信區間、系統誤差和粗大誤差等的計算[19];測量結果的查詢包括按照平均值查詢和按照測量時間查詢兩種。
5.3.2 上位機軟件的運行流程
啟動上位機軟件后,先進入登錄界面進行賬號密碼的驗證,驗證通過后才能進入功能界面。在功能界面中首先要連接Wi-Fi服務器。上位機軟件運行流程如圖7所示。
上位機連接Wi-Fi成功后,會開啟2個后臺線程,一個用于數據的接收,另一個用于檢測網絡的連接狀態。點擊功能界面上的指令按鈕會產生對應的指令并將指令發送出去,然后用一個參數對已發送指令進行標記。比如點擊智能傳感器模塊1界面的“查找傳感器”按鈕,會產生指令“1ch”,指令發出后,會將標記參數設置為3。當接收數據線程接收到數據后會根據指令標記參數進行不同的操作和顯示,最后清除指令標記,即將指令標記參數設置為初始值0。上位機軟件的指令發出后,會進行5 s定時,如果定時時間到后還沒有收到相應的數據,則指令執行超時,進行彈窗提示。
上位機軟件查找網絡的連接狀態時,需要調用wlanapi.dll中的相關函數。查找過程為:首先調用WlanOpenHandle函數,打開Wi-Fi句柄,然后調用WlanEnumInterfaces函數,列舉無線網絡適配器,并查找連接狀態,接著調用WlanCloseHandle函數,關閉Wi-Fi句柄,最后返回查找結果。

圖7 上位機軟件運行流程Fig.7 Running process of upper computer software
將網絡適配器模塊上電產生Wi-Fi信號,將電腦進行Wi-Fi連接。啟動上位機軟件進行賬號登錄,然后輸入Wi-Fi服務器的IP(internet protocol,互聯網協議)地址和端口號進行網絡連接。上位機軟件啟動后進行查找智能傳感器模塊及傳感器、校準傳感器、讀取并管理TEDS及傳感器測量結果等實驗,并進行智能傳感器模塊及傳感器的插拔實驗。實驗證明智能傳感器模塊和傳感器能正常運行并得到正確結果。
智能傳感器系統的硬件連接如圖8所示,其中:A是為系統供電的USB(universal serial bus,通用串行總線);B是ESP8266模塊;I和D是STM32F103開發板,D通過連線C與B相連,組成網絡適配器模塊;F是量程為5 kg的質量傳感器;G是24位的A/D轉換模塊HX711,它將傳感器的測量結果進行A/D轉換,并通過連線H與I相連;J連接的是I的PC2引腳,當傳感器接入時J為高電平,當傳感器斷開時J為低電平,I通過檢測J的高低電平來判斷傳感器是否連接;F、G、H、I、J共同組成智能傳感器模塊1,網絡適配器模塊和智能傳感器模塊1通過連線E進行連接。
上位機界面如圖9所示。

圖8 智能傳感器系統的硬件連接圖Fig.8 Hardware connection diagram of intelligent sensor system

圖9 上位機界面Fig.9 Interface of the upper computer
基于STM32F103所設計的智能傳感器模塊和網絡適配器模塊電路比較簡單,它們之間采用IIC通信,連線較少,通信簡單,易于擴展。智能傳感器模塊可以實現頻率的自適應和地址的自分配,并且能夠實現傳感器的即插即用。指令體系的構建使系統的擴展有了指令框架。設計的TEDS格式更加適合數據的存儲和傳輸。上位機具有登錄界面,使功能界面的使用更加安全。通過軟件運行,上位機可以將測量結果等信息存入數據庫,方便對測量結果的管理。通過實驗驗證了該智能傳感器系統設計的可靠性與穩定性。