秦鵬珍
(山西機(jī)電職業(yè)技術(shù)學(xué)院,山西 長治 046011)
隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,物聯(lián)網(wǎng)技術(shù)在人們的日常生活中也得到了廣泛的應(yīng)用,如智能家居、智能醫(yī)療、智能生產(chǎn)、智能環(huán)境、智能教學(xué)等[1]。山西作為能源大省、重工業(yè)基地,工業(yè)物聯(lián)網(wǎng)的建設(shè)與完善尤顯重要,而這方面的專業(yè)人才需求也非常緊迫。因此,為了能夠有效適應(yīng)山西工業(yè)市場人才需求,提高工業(yè)物聯(lián)網(wǎng)建設(shè)專業(yè)技能人才的培養(yǎng)質(zhì)量,本研究嘗試設(shè)計與構(gòu)建了一個符合真實應(yīng)用場景的工業(yè)物聯(lián)網(wǎng)實訓(xùn)項目——室內(nèi)外溫濕度的顯示以及室內(nèi)溫濕度的自動控制,并將其應(yīng)用到了實際的教學(xué)當(dāng)中,獲得了良好的教學(xué)效果。
在溫濕度自動控制系統(tǒng)中需要準(zhǔn)備的硬件模塊如表1,主要包含溫濕度傳感器模塊及其數(shù)據(jù)獲取模塊ADAM4017,負(fù)載風(fēng)機(jī)、報警燈以及負(fù)載控制模塊ADAM4150和繼電器,此外還有電腦終端以及若干電線[2]。
本文采用的實驗系統(tǒng)中溫濕度傳感器選擇:室內(nèi)采用新大陸型號為EL-FTW32的溫濕度傳感器,室外采用新大陸公司的RS-WS-DCB溫濕度傳感器。器件與器件之間的通信使用串口通信實現(xiàn)。
表1 模塊的選取與模塊的功能簡介
考慮到新大陸有物聯(lián)網(wǎng)仿真軟件,本文功能驗證方式為: 首先在新大陸物聯(lián)網(wǎng)仿真軟件進(jìn)行虛擬仿真,驗證通過之后再在硬件設(shè)備驗證。硬件連線以及仿真電路圖如圖1所示。由于仿真元件沒有風(fēng)機(jī),用風(fēng)扇取代,補光燈用白熾燈取代。
圖1 仿真電路界面
傳感器型號不同,其傳輸波特率設(shè)置也各不相同[3],系統(tǒng)中采用ADAM4150控制執(zhí)行元件并通過ADAM4017讀取傳感器數(shù)據(jù),波特率選擇9600bps,如果要通過RS485總線讀取室外溫濕度傳感器數(shù)據(jù),則需要將波特率選擇為4800bps。
為了實現(xiàn)對溫濕度傳感器數(shù)據(jù)的讀取以及對各負(fù)載的開關(guān)控制,編寫代碼時需要用到ADAM4150采集器各個端口的控制指令,以及ADAM4017數(shù)據(jù)讀取指令,本采集系統(tǒng)中,ADAM4150 各通道開關(guān)命令如表2所示,ADAM4017讀取傳感器數(shù)據(jù)的命令為02 03 00 00 00 08 44 3F,通過對獲取到的命令進(jìn)行解析以及依據(jù)相關(guān)設(shè)備的量程等數(shù)據(jù)量計算得出溫濕度傳感器數(shù)值,若要實現(xiàn)對室外溫度傳感器的讀取,則讀取傳感器數(shù)據(jù)命令為01 03 00 00 00 02 C4 0B。
表2 ADAM4150 各通道開關(guān)命令
本系統(tǒng)中在獲取溫濕度數(shù)據(jù)的同時將獲取到的數(shù)據(jù)存儲到相關(guān)數(shù)據(jù)表中,便于后續(xù)數(shù)據(jù)分析時使用。為了能夠?qū)崿F(xiàn)循環(huán)讀取溫濕度傳感器數(shù)據(jù),在系統(tǒng)中首先要實現(xiàn)線程代碼的編寫。ADAM4017類代碼主要部分如下:
第一步:讀取傳感器數(shù)據(jù)
public void run(){
while (true){//因為數(shù)據(jù)的讀取是永遠(yuǎn)進(jìn)行著,所以這里循環(huán)采用條件永遠(yuǎn)為真。
SerialPortManager.sendToPort(Data.OpenPort,Data.ADAM4017Command);
SerialPortManager.addListener(Data.OpenPort, new SerialPortEventListener() {
@Override
public void serialEvent(SerialPortEvent serialPortEvent) {
switch (serialPortEvent.getEventType()) {
case SerialPortEvent.DATA_AVAILABLE:
byte[] res = SerialPortManager.readFromPort(Data.OpenPort);
String tempStr = ByteUtils.byteToHex(res[3]) + ByteUtils.byteToHex(res[4]);
double tempValue = Integer.parseInt(tempStr, 16);
}}}
第二步:依據(jù)傳感器量程實現(xiàn)對讀取到數(shù)據(jù)的轉(zhuǎn)化
double temp =tempValue*70/65535-10;
String humiStr = ByteUtils.byteToHex(res[5]) + ByteUtils.byteToHex(res[6]);
double humiValue = Integer.parseInt(humiStr, 16);
double humi =humiValue*50/65535+50;
DecimalFormat df = new DecimalFormat("00.0");
第三步:將獲取到的數(shù)據(jù)存儲到數(shù)據(jù)表中
sql = "INSERT INTO S4017DATA (TEMP,HUMI) VALUES ("+temp+","+humi+")";
sqLiteJDBC.insert(sql);
第四步:依據(jù)獲取到的實際溫濕度值與臨界溫濕度值進(jìn)行比較實現(xiàn)對系統(tǒng)的智能控制
if(temp<15){
SerialPortManager.sendToPort(Data.OpenPort,Data.DO3Open);
SerialPortManager.sendToPort(Data.OpenPort,Data.DO0Close);
}else if(temp>30){
SerialPortManager.sendToPort(Data.OpenPort,Data.DO0Open);
SerialPortManager.sendToPort(Data.OpenPort,Data.DO3Close);}
if(humi<30){
SerialPortManager.sendToPort(Data.OpenPort,Data.DO2Open);
SerialPortManager.sendToPort(Data.OpenPort,Data.DO1Close);
}else if(humi>60){
SerialPortManager.sendToPort(Data.OpenPort,Data.DO1Open);
SerialPortManager.sendToPort(Data.OpenPort,Data.DO2Close);}
室外溫度傳感器數(shù)據(jù)的讀取和此類相近。
程序最終的執(zhí)行結(jié)果如圖2所示。為了便于學(xué)生理解,采用Java窗口展示為溫濕度自動控制的數(shù)據(jù)。圖3為本系統(tǒng)功能實現(xiàn)代碼編寫的總流程圖。值得說明的是由于代碼編寫以及數(shù)據(jù)獲取都采用的是新大陸仿真平臺,傳感器溫濕度采用隨機(jī)數(shù)據(jù),仿真環(huán)境中的燈泡并不能真正實現(xiàn)加溫的效果,風(fēng)扇仿真中也得不到降溫或除濕的效果。但是此虛擬仿真和真實的自動溫濕度控制原理以及實現(xiàn)步驟是一樣的,使用該代碼在真實實訓(xùn)平臺也一樣能夠?qū)崿F(xiàn)對系統(tǒng)的智能控制,在真實的自動溫濕度控制時是可以實現(xiàn)這個效果的。依據(jù)我們獲取以及存儲的溫濕度數(shù)據(jù),后期可以使用獲取到的數(shù)據(jù)圖、室內(nèi)或者室外溫濕度傳感器歷史變化曲線,依據(jù)此數(shù)據(jù)以及圖形,相關(guān)人員就可時進(jìn)行一定的數(shù)據(jù)分析,從而實現(xiàn)系統(tǒng)價值。
圖2 溫濕度自動控制的窗口數(shù)據(jù)
圖3 代碼的總流程圖
基于Java的智能溫濕度控制仿真實訓(xùn)項目作為工業(yè)物聯(lián)網(wǎng)實訓(xùn)技能培訓(xùn)的典型案例之一,一方面可以強化學(xué)生的專業(yè)學(xué)習(xí)技能,提高專業(yè)人才培養(yǎng)質(zhì)量;另一方面,還能為教師提供一定的科研資源,并以此為平臺提高教師團(tuán)隊整體的科研水平和教學(xué)水平,為校企合作、產(chǎn)教融合的專業(yè)教學(xué)發(fā)展提供有力的保障。