【PLC在樓宇自控系統(tǒng)內(nèi)的應(yīng)用研究9100字(論文)】_第1頁
【PLC在樓宇自控系統(tǒng)內(nèi)的應(yīng)用研究9100字(論文)】_第2頁
【PLC在樓宇自控系統(tǒng)內(nèi)的應(yīng)用研究9100字(論文)】_第3頁
【PLC在樓宇自控系統(tǒng)內(nèi)的應(yīng)用研究9100字(論文)】_第4頁
【PLC在樓宇自控系統(tǒng)內(nèi)的應(yīng)用研究9100字(論文)】_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

[1]圖3-3PMS5003實物外形圖3-4顆粒物傳感器原理圖圖3-4顆粒物傳感器原理圖3.1.3MAX44009光照強度傳感器本次設(shè)計采用了使用I2C總線的光照傳感器MAX44009,其具有外圍電路簡單,數(shù)據(jù)采集方便,可靠性高,引腳數(shù)量少等優(yōu)點,其有效量程范圍為0.045lux至188,000lux,能夠完整覆蓋本次設(shè)計所需光照強度探測范圍。圖3-5圖3-5光照傳感器部分原理圖3.1.4SHT20溫濕度傳感器本次設(shè)計,采用了sensirion公司生產(chǎn)的SHT20型溫濕度傳感器,其具有體積小,精度高,可靠性好,功耗低等優(yōu)點。SHT20外圍電路與Arduino信號線接口部分電路原理圖如下圖所示。SHT20在本次設(shè)計中,與MAX44009掛載與同一I2C總線上,并由Arduinomega進行數(shù)據(jù)處理與發(fā)送。圖3-6溫濕度測量部分原理圖3.1.5熱釋電傳感器圖3-6溫濕度測量部分原理圖本次設(shè)計中,采用了8只熱釋電感應(yīng)模塊組成陣列,以實現(xiàn)對控制目標區(qū)域的有效觀測,熱釋電傳感器的工作模式設(shè)定為多次重復(fù),即不斷電復(fù)位可多次輸出有效電平,延時模式設(shè)定為一分鐘,足以讓被探測行人在燈光亮起時長內(nèi)走出探測區(qū)域。熱釋電傳感器(PIR)與ArduinoMega信號線電路硬件連接如圖所示。3.2室內(nèi)傳感器/解碼系統(tǒng)硬件設(shè)計圖3-7熱釋電部分原理圖3.2.1MAX44009光照強度傳感器圖3-7熱釋電部分原理圖本次設(shè)計中,室內(nèi)傳感器MAX44009部分與室外傳感器連接方式相同,掛載于Arduinomega的硬件I2C接口(D20D21)上,MAX44009外圍電路與ArduinoMega信號接口部分電路原理圖如下圖所示。圖3-8光照傳感器原理圖3.2.2SHT20溫濕度傳感器圖3-8光照傳感器原理圖與室外傳感器硬件連接方式一致,同樣與MAX44009掛載于同一I2C總線之上,SHT20外圍電路與Arduino信號線接口部分電路原理圖如下圖所示。圖3-9溫濕度傳感器原理圖3.2.4PLC接口電路部分圖3-9溫濕度傳感器原理圖PLC電路接口部分,采用繼電器輸出形式,COM公共端連接外置電源GND端,各端口連接至外圍模塊GND端。3.3PLC外圍硬件定義I0室內(nèi)傳感器信號輸入端I0.0:光強度低信號輸入端I0.1:光強度高信號輸入端I0.2:溫度低信號輸入端I0.3:溫度高信號輸入端I0.4:濕度低信號輸入端I0.5:濕度高信號輸入端I1室外傳感器信號輸入端I1.0:光強度低信號輸入端I1.1:光強度高信號輸入端I1.2:溫度低信號輸入端I1.3:溫度高信號輸入端I1.4:濕度低信號輸入端I1.5:濕度高信號輸入端I1.6:空氣內(nèi)顆粒物報警信號輸入端I2.0-I2.7:熱釋電信號輸入端Q0伺服信號輸出端Q0.0:空氣過濾器控制端Q0.1:門窗開關(guān)控制端Q0.2:加溫器控制端Q0.3:遮光裝置控制端Q0.4:除濕裝置控制端Q0.5:室內(nèi)照明開關(guān)Q1.0-Q1.7:燈光控制端4系統(tǒng)軟件設(shè)計4.1室外傳感器系統(tǒng)設(shè)計圖4-1室外傳感器程序流程圖圖4-1室外傳感器程序流程圖4.1.1MAX44009部分#include"MAX44009.h"uint16_tcur_PM25,cur_PM10,cur_Temp,cur_Humi,cur_Light;boolLightL_ACT,LightR_ACT;constuint16_tLight_L=400,Light_R=1500;if(light.begin()){Serial.println("[ERROR]Lightsensorfailed");while(1);}cur_Light=light.get_lux();Serial.println("Light:\t"+(String)cur_Light);delay(100);if(cur_Light<=Light_L){Serial.println("LightL_ACT=1");LightL_ACT=true;LightR_ACT=false;digitalWrite(LightL_PIN,HIGH);digitalWrite(LightR_PIN,LOW);cur_status|=1;cur_status<<=2;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}elseif(Light_R<=cur_Light){Serial.println("LightR_ACT=1");LightL_ACT=false;LightR_ACT=true;digitalWrite(LightL_PIN,LOW);digitalWrite(LightR_PIN,HIGH);cur_status<<=1;cur_status|=1;cur_status<<=1;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}else{Serial.println("Light_ACT=0");LightL_ACT=false;LightR_ACT=false;digitalWrite(LightL_PIN,LOW);digitalWrite(LightR_PIN,LOW);cur_status<<=2;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}聲明庫函數(shù),調(diào)用<MAX44009.h>頭文件,并內(nèi)定義光照強度高低閾值信號變量名及數(shù)據(jù)返回類型;設(shè)置光照強度檢測數(shù)值閾值,單位lux;初始化函數(shù),若無返回值則通過串口輸出報錯信息;在Voidloop()主循環(huán)內(nèi),調(diào)用相關(guān)庫函數(shù),讀取傳感器返回數(shù)值;對返回值與預(yù)設(shè)閾值進行比較判斷,并根據(jù)進行數(shù)據(jù)編碼送入指定字符串中等待發(fā)送。4.1.2PMS5003程序部分(1)#include"pms.h"(2)PmsAltSerialpmsSerial;pmsx::Pmspms(&pmsSerial);uint16_tcur_PM25,cur_PM10;(3)boolPM25L_ACT,PM25R_ACT;(4)constuint16_tPM25_L=0,PM25_R=200;(5)Serial.println(pmsx::pmsxApiVersion);if(!pms.begin()){Serial.println("[ERROR]PMScommunicationfailed");return;}pms.setPinReset(pinReset);pms.setPinSleepMode(pinSleepMode);if(!pms.write(pmsx::PmsCmd::CMD_RESET)){pms.write(pmsx::PmsCmd::CMD_SLEEP);pms.write(pmsx::PmsCmd::CMD_WAKEUP);}pms.write(pmsx::PmsCmd::CMD_MODE_PASSIVE);pms.write(pmsx::PmsCmd::CMD_READ_DATA);pms.waitForData(pmsx::Pms::TIMEOUT_PASSIVE,pmsx::PmsData::FRAME_SIZE);pmsx::PmsDatadata;autostatus=pms.read(data);if(status!=pmsx::PmsStatus::OK){Serial.print("PMSsensor:");Serial.println(status.getErrorMsg());}pms.write(pmsx::PmsCmd::CMD_MODE_ACTIVE);if(!pms.isWorking()){Serial.println("[ERROR]PMSsensorfailed");} switch(status){casepmsx::PmsStatus::OK:{Serial.println("_________________");constautonewRead=millis();Serial.print("Waittime");Serial.println(newRead-lastRead);lastRead=newRead;autoview=data.raw;cur_PM25=view.getValue(4);cur_PM10=view.getValue(5);Stringstr;str=String(cur_PM25)+"\t"+view.getName(4)+"["+view.getMetric(4)+"]"+"|diameter:"+view.getDiameter(4);Serial.println(str);str=String(cur_PM10)+"\t"+view.getName(5)+"["+view.getMetric(5)+"]"+"|diameter:"+view.getDiameter(5);Serial.println(str);if(cur_PM25<0||cur_PM25>1000||cur_PM10<0||cur_PM10>1000){Serial.println("[ERROR]PMSDATAERROR");gotoloopend;}(6)if(cur_PM25<=PM25_L){PM25L_ACT=true;PM25R_ACT=false;digitalWrite(PM25L_PIN,HIGH);digitalWrite(PM25R_PIN,LOW);Serial.println("PM2.5L_ACT=1");cur_status|=1;cur_status<<=1;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}elseif(PM25_R<=cur_PM25){PM25L_ACT=false;PM25R_ACT=true;digitalWrite(PM25L_PIN,LOW);digitalWrite(PM25R_PIN,HIGH);Serial.println("PM2.5H_ACT=1");cur_status|=1;cur_status<<=1;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}else{PM25L_ACT=false;PM25R_ACT=false;digitalWrite(PM25L_PIN,LOW);digitalWrite(PM25R_PIN,LOW);Serial.println("PM2.5_ACT=0");cur_status<<=1;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}delay(100);break;}casepmsx::PmsStatus::NO_DATA:{Serial.println("[INFO]PMSNODATA");gotoloopend;break;}default:{Serial.print("[ERROR]PMSerror:");Serial.println(status.getErrorMsg());gotoloopend;}}聲明庫函數(shù),調(diào)用相關(guān)頭文件;調(diào)用軟串口函數(shù),并設(shè)置變量類型;定義空氣內(nèi)顆粒物密度判定閾值變量;預(yù)設(shè)相關(guān)數(shù)據(jù)判定閾值;初始化PMS5003,若通訊錯誤則串口輸出報錯信息;Voidloop()循環(huán)內(nèi)PMS相關(guān)函數(shù),讀取程序返回值并判斷,將結(jié)果輸入字符串中等待發(fā)送,若數(shù)據(jù)錯誤則不執(zhí)行后續(xù)程序,并發(fā)送報錯信息。4.1.3SHT20程序部分#include"uFire_SHT20.h"聲明SHT20對應(yīng)庫函數(shù)。boolTempL_ACT,TempR_ACT;boolHumiL_ACT,HumiR_ACT;定義溫度、濕度變量。constuint16_tTemp_L=15,Temp_R=30;constuint16_tHumi_L=20,Humi_R=60;設(shè)定變量閾值。SHT20.measure_all();cur_Temp=SHT20.tempC;cur_Humi=SHT20.RH;voidloop()循環(huán)內(nèi)定義變量與返回值if(cur_Temp<=Temp_L){Serial.println("TempL_ACT=1");TempL_ACT=true;TempR_ACT=false;digitalWrite(TempL_PIN,HIGH);digitalWrite(TempR_PIN,LOW);cur_status|=1;cur_status<<=2;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}elseif(Temp_R<=cur_Temp){Serial.println("TempR_ACT=1");TempL_ACT=false;TempR_ACT=true;digitalWrite(TempL_PIN,LOW);digitalWrite(TempR_PIN,HIGH);cur_status<<=1;cur_status|=1;cur_status<<=1;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}else{Serial.println("Temp_ACT=0");TempL_ACT=false;TempR_ACT=false;digitalWrite(TempL_PIN,LOW);digitalWrite(TempR_PIN,LOW);cur_status<<=2;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}if(cur_Humi<=Humi_L){Serial.println("HumiL_ACT=1");HumiL_ACT=true;HumiR_ACT=false;digitalWrite(HumiL_PIN,HIGH);digitalWrite(HumiR_PIN,LOW);cur_status|=1;cur_status<<=2;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);}elseif(Humi_R<=cur_Humi){Serial.println("HumiR_ACT=1");HumiL_ACT=false;HumiR_ACT=true;digitalWrite(HumiL_PIN,LOW);digitalWrite(HumiR_PIN,HIGH);cur_status<<=1;cur_status|=1;cur_status<<=1;Serial.print("\t\t[DEBUG]");Serial.println(cur_status,BIN);讀取庫函數(shù)返回值,并與預(yù)設(shè)閾值進行比較。將比較結(jié)果送入變量字符串中。4.1.4熱釋電傳感器部分constuint16_tPIR_PIN[9]={0,54,55,56,57,58,59,60,61};定義熱釋電傳感器引腳對應(yīng)數(shù)組for(uint16_ti=1;i<=8;i++){pinMode(PIR_PIN[i],INPUT);}讀取引腳數(shù)組,并初始化設(shè)定引腳為輸入狀態(tài)。for(uint16_ti=1;i<=8;i++){if(digitalRead(PIR_PIN[i])==HIGH){cur_status|=1;}cur_status<<=1;}讀取引腳狀態(tài),并將輸入結(jié)果送入結(jié)果判定數(shù)組內(nèi)。4.1.5串口發(fā)送程序Serial.begin(9600);Serial1.begin(9600);設(shè)定串口0串口1工作模式與波特率。八位數(shù)據(jù)幀,無校驗位,停止位1,波特率9600。Serial1.print('S');Serial1.println(cur_status,BIN);串口1,將特定格式判斷結(jié)果數(shù)組發(fā)送。4.2室內(nèi)傳感器部分圖4-2室內(nèi)傳感器部分程序流程圖4.2.1SHT20溫濕度傳感器與MAX44009傳感器部分圖4-2室內(nèi)傳感器部分程序流程圖本部分移植自室外傳感器部分,因此除去邏輯判斷并輸出引腳電平部分不同外,其余代碼基本一致。#include"uFire_SHT20.h"聲明SHT20對應(yīng)庫函數(shù)。boolTempL_ACT,TempR_ACT;boolHumiL_ACT,HumiR_ACT;定義溫度、濕度變量。constuint16_tTemp_L=15,Temp_R=30;constuint16_tHumi_L=20,Humi_R=60;設(shè)定變量閾值。SHT20.measure_all();cur_Temp=SHT20.tempC;cur_Humi=SHT20.RH;voidloop()循環(huán)內(nèi)定義變量與返回值cur_Light=light.get_lux();Serial.println("Light:\t"+(String)cur_Light);delay(100);SHT20.measure_all();cur_Temp=SHT20.tempC;cur_Humi=SHT20.RH;Serial.println("Temperature:\t"+(String)cur_Temp+"°C");Serial.println("RH:\t"+(String)cur_Humi+"%");//Serial.println((String)SHT20.vpd()+"kPaVPD");//光傳感器和SHT20采樣if(cur_Light<=Light_L){Serial.println("LightL_ACT=1");LightL_ACT=true;LightR_ACT=false;digitalWrite(LightL_PIN,HIGH);digitalWrite(LightR_PIN,LOW);}elseif(Light_R<=cur_Light){Serial.println("LightR_ACT=1");LightL_ACT=false;LightR_ACT=true;digitalWrite(LightL_PIN,LOW);digitalWrite(LightR_PIN,HIGH);}else{Serial.println("Light_ACT=0");LightL_ACT=false;LightR_ACT=false;digitalWrite(LightL_PIN,LOW);digitalWrite(LightR_PIN,LOW);}if(cur_Temp<=Temp_L){Serial.println("TempL_ACT=1");TempL_ACT=true;TempR_ACT=false;digitalWrite(TempL_PIN,HIGH);digitalWrite(TempR_PIN,LOW);}elseif(Temp_R<=cur_Temp){Serial.println("TempR_ACT=1");TempL_ACT=false;TempR_ACT=true;digitalWrite(TempL_PIN,LOW);digitalWrite(TempR_PIN,HIGH);}else{Serial.println("Temp_ACT=0");TempL_ACT=false;TempR_ACT=false;digitalWrite(TempL_PIN,LOW);digitalWrite(TempR_PIN,LOW);}if(cur_Humi<=Humi_L){Serial.println("HumiL_ACT=1");HumiL_ACT=true;HumiR_ACT=false;digitalWrite(HumiL_PIN,HIGH);digitalWrite(HumiR_PIN,LOW);}elseif(Humi_R<=cur_Humi){Serial.println("HumiR_ACT=1");HumiL_ACT=false;HumiR_ACT=true;digitalWrite(HumiL_PIN,LOW);digitalWrite(HumiR_PIN,HIGH);}讀取庫函數(shù)返回值,并與預(yù)設(shè)閾值進行比較。并將對應(yīng)引腳電平輸出。4.2.2串口數(shù)據(jù)讀取解碼輸出部分uint16_tPINS[]={0,10,11,12,13,14,15,16,21,22,23,24,25,26,27,28};bools[20];定義接收變量數(shù)組。if(Serial1.available()>0){t1=Serial1.read();if(t1=='S'){for(uint16_ti=0;i<=16;i++){while(Serial1.available()==0){}t2=Serial1.read();if(i==0||i==16){continue;}if(t2=='0'){s[PINS[i]]=0;Serial.println("i="+(String)i+",LOW");}elseif(t2=='1'){s[PINS[i]]=1;Serial.println("i="+(String)i+",HIGH");}else{Serial.println("[ERROR]dataerror,i="+(String)i);}}}delay(2);}接收串口數(shù)據(jù),并獲取有效數(shù)據(jù),將判斷結(jié)果賦值給指定數(shù)組。if(digitalRead(P)==HIGH){for(uint16_ti=1;i<=15;i++){digitalWrite(PINS[i],s[i]);}}根據(jù)數(shù)組內(nèi)部數(shù)值,對各輸出引腳狀態(tài)寄存機賦值。if(digitalRead(P)==HIGH){for(inti=1;i<=15;i++){digitalWrite(PINS[i],s[i]);}}若檢測到PLC給出信號,則刷新各引腳狀態(tài)。4.3PLC主控程序部分采光控制部分PLC程序段,當處于上課/晚自習(xí)時間時,自動監(jiān)測室內(nèi)外燈光強度,根據(jù)程序段進行遮光及開燈補光等動作。圖4-3光照控制部分程序空氣質(zhì)量及溫濕度控制部分,根據(jù)各傳感器發(fā)送至I輸入口信號,根據(jù)預(yù)設(shè)邏輯判斷并控制相關(guān)設(shè)備,對室內(nèi)濕度,溫度,空氣質(zhì)量等進行控制與調(diào)整。例如空氣顆粒物指數(shù)過高時自動關(guān)閉門窗,并將空氣過濾裝置開啟,以維持室內(nèi)空氣潔(PM2.5<75μg/m3)。圖4-3光照控制部分程序圖4-4溫濕度控制部分程序室外走廊燈部分控制程序,根據(jù)RTC時鐘,自動判斷處于何種時段,并選取對應(yīng)控制邏輯對走廊內(nèi)燈光進行控制。白天上課時段,將根據(jù)室外光照強度,判斷是否需要對走廊進行補光照明,并在行人經(jīng)過時自動開啟熱釋電傳感器對應(yīng)的圖4-5走廊燈控制程序圖4-4溫濕度控制部分程序圖4-5走廊燈控制程序為預(yù)設(shè)變量設(shè)定初始值,PLC上電后SM0.0上電一個掃描周期,執(zhí)行MOV_B語句,并將其預(yù)定數(shù)值裝定進入系統(tǒng)RTC時鐘。圖4-7圖4-7RTC時鐘設(shè)置部分(2)圖4-8讀取RTC圖4-8讀取RTC時鐘程序段圖4-10時間判斷程序(2)圖4-9時間判斷程序(1)將VW23內(nèi)當前時間數(shù)據(jù)與預(yù)設(shè)時間閾值比較,并將對應(yīng)輔助繼電器線圈通激活對應(yīng)不同時間段控制系統(tǒng)工作狀態(tài)。圖4-10時間判斷程序(2)圖4-9時間判斷程序(1)5傳感器平臺搭建測試及PLC仿真調(diào)試5.1傳感器平臺通過USB連接室外傳感器平臺與電腦,打開串口監(jiān)視器,讀取debug信息與編碼后邏輯判斷信息。檢測無誤后開始檢查室內(nèi)傳感器。用USB線纜連接室內(nèi)傳感器主控板與電腦,打開串口監(jiān)視器,查看DEBUG信息,解碼與邏輯判斷輸出正常。圖5-1485圖5-1485總線信號波形圖(時基5ms)5.2PLC主控測試圖5-3圖5-3裝載PLC程序圖5-2設(shè)定PLC對應(yīng)CPU型號裝載完成程序后,將仿真軟件調(diào)整為RUN狀態(tài),開始測試。5.2.1熱釋電控制走廊燈部分測試首先在設(shè)置內(nèi),更改時間為上課時間(6:30——18:30),并將室外光L端(I1.0)置于有信號輸入狀態(tài),隨后將熱釋電信號輸入端(I2.0)隨機選擇送入信號,觀察輸出狀態(tài)。圖5-5熱釋電控制端信號輸入——輸出狀態(tài)測試結(jié)果表明,在測試條件室外光照強度不足/夜間等狀態(tài)時,熱釋電控制端可通過接受對應(yīng)信號控制走廊燈開啟及關(guān)閉。5.2.2室內(nèi)補光/遮光部分測試如圖所示,當室內(nèi)光線過暗時,程序根據(jù)設(shè)定,自動打開室內(nèi)照明燈(Q0.5),進行補光照明。如圖所示,當室外光線過強時,自動開啟遮光裝置(Q0.3),并自動開啟室內(nèi)照明燈(Q0.5)。圖5-6室內(nèi)光照過暗時PLC輸出圖5-6室內(nèi)光照過暗時PLC輸出圖5-7室外光線過強時輸出5.2.3空氣質(zhì)量及溫濕度控制部分將空氣污染警告(I1.6)信號置位,可觀測到PLC控制門窗關(guān)閉(Q0.1)并控制空

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論