張昱霖
摘要:上位機(jī)作為物聯(lián)設(shè)備軟件層核心之一,其地位十分重要。為了方便對(duì)物聯(lián)設(shè)備進(jìn)行管理配置,本文基于ZigBee模塊和C#語(yǔ)言設(shè)計(jì)了一種能夠通過(guò)本地串口和網(wǎng)絡(luò)通信兩種方式對(duì)ZigBee模塊主控單元進(jìn)行控制和數(shù)據(jù)讀取的上位機(jī)架構(gòu),具備可靠性和通用性的特點(diǎn)。
關(guān)鍵詞:ZigBee模塊;C#;上位機(jī);通用性
中圖分類號(hào):TP274 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2017)05-0053-01
1 基本原理
(1)上位機(jī)與下位機(jī)。上位機(jī)是用于接收數(shù)據(jù)、控制數(shù)據(jù)的軟件系統(tǒng);下位機(jī)是直接控制設(shè)備、獲取設(shè)備狀況的控制器。上位機(jī)可以接收下位機(jī)的信號(hào),也可以向下位機(jī)發(fā)出命令,下位機(jī)再根據(jù)此命令解釋成相應(yīng)時(shí)序信號(hào)直接控制相應(yīng)設(shè)備。下位機(jī)會(huì)實(shí)時(shí)讀取設(shè)備狀態(tài)數(shù)據(jù),轉(zhuǎn)換成數(shù)字信號(hào)反饋給上位機(jī)。(2)ZigBee技術(shù)。作為無(wú)線通信技術(shù)領(lǐng)域中的ZigBee技術(shù),其基于IEEE802.15.4協(xié)議。最大的特點(diǎn)是短距離、低功耗、低復(fù)雜度、低成本,非常適合嵌入距離較近的物聯(lián)設(shè)備供其通信使用[1]。(3)串口通信。串口是一種硬件類型的接口,按位發(fā)送和接收字節(jié),其參數(shù)包括:波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn),對(duì)于兩個(gè)進(jìn)行通信的端口,這些參數(shù)必須相匹配[2]。具體的,ZigBee模塊傳感節(jié)點(diǎn)發(fā)送信號(hào)到ZigBee模塊匯聚節(jié)點(diǎn)即主控單元,主控單元通過(guò)串口將數(shù)據(jù)傳到計(jì)算機(jī)中的上位機(jī)中,上位機(jī)接收信息并處理。(4)網(wǎng)絡(luò)通信。要實(shí)現(xiàn)上位機(jī)與下位機(jī)之間的遠(yuǎn)程網(wǎng)絡(luò)通信,有兩種方式:ZigBee模塊主控單元搭建Wi-Fi局域網(wǎng)方式的短距離通信、使用服務(wù)器和ZigBee模塊主控單元間的遠(yuǎn)距離通信。
2 上位機(jī)與ZigBee模塊的串口通信
一般來(lái)說(shuō),ZigBee模塊采用RS232串口通信,8位數(shù)據(jù)位,1位停止位,低有效位先傳送。因此,將ZigBee模塊主控單元與計(jì)算機(jī)串口相連,通過(guò)C#編程設(shè)計(jì)上位機(jī)獲取有效的數(shù)據(jù)字段,可以方便的獲取ZigBee主控單元的數(shù)據(jù),具體如下:
2.1 串口配置
串口的屬性配置包括:端口號(hào)、波特率、數(shù)據(jù)位、停止位、校驗(yàn)位。將串口的這些屬性值分別存儲(chǔ)進(jìn)combobox中,根據(jù)實(shí)際情況進(jìn)行選擇。
2.2 發(fā)送數(shù)據(jù)
使用Write接口三個(gè)參數(shù)的含義為:使用的數(shù)組、從數(shù)組第n位開始發(fā)數(shù)據(jù)、發(fā)送數(shù)據(jù)的長(zhǎng)度。核心代碼如下:
if (serialPort.IsOpen){
try{
Byte[] b = new Byte[3] {1,2,3};
char[] ch = new char[3] {'a','b','c'};
serialPort.Write(b,0,1);//使用b[]數(shù)組,第0為開始,長(zhǎng)度為1
serialPort.Write(ch,0,2);//使ch[]數(shù)組,第0為開始,長(zhǎng)度為2
MessageBox.Show("發(fā)送成功");
}
catch{MessageBox.Show("發(fā)送失敗");}
}
2.3 接收數(shù)據(jù)
從ZigBee模塊主控單元中讀取數(shù)據(jù)的核心代碼如下:
void Receive(object sender,SerialDataReceivedEventArgs e)
{
if (serialPort.IsOpen){
Byte[] Receive = new Byte[serialPort.BytesToRead];
serialPort.Read(Receive, 0, Receive.Length);
serialPort.DiscardInBuffer();
textBox.Text += Encoding.ASCII.GetString(Receive);
}
}
3 上位機(jī)與ZigBee模塊的網(wǎng)絡(luò)通信
3.1 短距離傳輸
對(duì)上述使用串口向上位機(jī)有線傳輸數(shù)據(jù)的方式改進(jìn)為無(wú)線局域網(wǎng)短距離傳輸,具體方式為:(1)ZigBee模塊主控單元將數(shù)據(jù)通過(guò)硬件串口發(fā)送給Wi-Fi模塊的串口,Wi-Fi模塊中需要有完整的套接字API或TCP/IP協(xié)議棧。(2)將Wi-Fi模塊與上位機(jī)連入同一個(gè)局域網(wǎng)保證其IP與上位機(jī)處于同一網(wǎng)段。(3)配置上位機(jī)與ZigBee模塊主控單元進(jìn)行通訊。
3.2 遠(yuǎn)距離通信
對(duì)上述只能在同一局域網(wǎng)向上位機(jī)傳輸數(shù)據(jù)的方式改進(jìn)為通過(guò)以太網(wǎng)、不受距離約束的遠(yuǎn)距離通信方式,具體方式為:(1)單純ZigBee模塊無(wú)法將數(shù)據(jù)發(fā)往以太網(wǎng),需要使用ZigBee/TCP網(wǎng)關(guān)。(2)ZigBee/TCP網(wǎng)關(guān)將數(shù)據(jù)轉(zhuǎn)換為TCP或UDP報(bào)文發(fā)送給指定的遠(yuǎn)程服務(wù)器的IP和端口。(3)對(duì)遠(yuǎn)程服務(wù)器建立TCP/UDP Server對(duì)指定的端口號(hào)進(jìn)行監(jiān)聽,接收到報(bào)文后提取有效數(shù)據(jù)寫入數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)使用MySQL或SQL Server均可。(4)上位機(jī)使用Socket通信讀寫該服務(wù)器中數(shù)據(jù)庫(kù)的信息。
4 結(jié)語(yǔ)
本文研究了C#上位機(jī)對(duì)ZigBee模塊主控單元的控制與數(shù)據(jù)讀取的各種實(shí)現(xiàn)方式,包括傳統(tǒng)的串口通信、局域網(wǎng)短距離通信、服務(wù)器遠(yuǎn)距離通信方式,可靠性與通用性很強(qiáng),能夠滿足不同條件下的物聯(lián)設(shè)備與上位機(jī)的通信需求,對(duì)上位機(jī)與ZigBee模塊通信方式具有指導(dǎo)意義。
參考文獻(xiàn)
[1]王中生,曹梅.基于ZigBee的串口監(jiān)控軟件設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2011(14):13-14.
[2]章輝,葉建芳,葉建威.基于MSComm控件串口通信的實(shí)現(xiàn)[J] .電子測(cè)量技術(shù),2011(08):127.endprint
數(shù)字技術(shù)與應(yīng)用2017年5期