版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、山東微分電子科技有限公司 智能家居綜合實驗1山東微分電子科技有限公司目錄目錄1第一章綜合實驗21.智能家居21.1實驗?zāi)康?1.2實驗環(huán)境21.3實驗內(nèi)容21.4實驗原理21.4.5.實驗步驟5附錄23協(xié)議介紹23通訊格式23傳輸編碼2425第一章 綜合實驗1.智能家居1.1實驗?zāi)康耐ㄟ^對智能家居案例的學習,讓學生充分認識物聯(lián)網(wǎng)在智能家居的作用,充分了解并深入掌握光照,溫度,濕度等各傳感器的作用。1.2實驗環(huán)境1. Microsoft Visual Studio 20102. Microsoft SQL Server 20083. 微分電子實驗箱或?qū)嶒炁_以及配套的C#SDK開發(fā)包 1.3實驗內(nèi)
2、容通過對光照、溫度、濕度、火焰、燃氣、煙霧等多種傳感器的利用,實時采集光照、溫度、濕度、火焰、燃氣、煙霧等多種傳感信息,進而與窗簾、空調(diào)、燈光、風扇等多種繼電器和電機實施聯(lián)動控制,可以配置報警記錄,產(chǎn)生歷史記錄。顯示報警記錄,歷史記錄等信息。1.4實驗原理1.系統(tǒng)背景電子信息的日益更新,控制技術(shù)的逐步提升,社會信息化的逐步加快,促使人們的生活、工作、學習以及通訊技術(shù)的關(guān)系日益緊密,信息化的社會在改變?nèi)藗兩盍晳T和工作方式的同時,也對我們傳統(tǒng)住宅提出了更高的要求,環(huán)視四周,我們很容易發(fā)現(xiàn),人們對家居的要求早已不再時簡單的物質(zhì)空間,更為關(guān)注的是一個高度安全、舒適以及美觀方便的居住環(huán)境,先進的通訊設(shè)
3、施,完備高效的信息終端,自動、智能的家電,網(wǎng)絡(luò)化的資源管理及購物方式等等?,F(xiàn)今社會人們?nèi)找媾蛎浀男枨笫沟眉揖又悄芑讶怀蔀橐环N趨勢。2.系統(tǒng)功能概述系統(tǒng)結(jié)構(gòu)圖系統(tǒng)功能設(shè)計智能家居系統(tǒng)分為兩個部分:實時的數(shù)據(jù)采集,包括對各地點的環(huán)境信息監(jiān)控,與電機的聯(lián)動配置,網(wǎng)絡(luò)通訊的設(shè)置;數(shù)據(jù)記錄查詢,歷史記錄查詢和報警記錄查訊。廚房查詢:監(jiān)控廚房各傳感器的信息值,進行用戶的手動配置,以圖表形式實時顯示各傳感器信息??蛷d查詢:監(jiān)控客廳各傳感器的信息值,進行用戶的手動配置,以圖表形式實時顯示各傳感器信息。臥室查詢:監(jiān)控臥室各傳感器的信息值,進行用戶的手動配置,以圖表的形式實時顯示各傳感器信息。閾值設(shè)置:對客廳、
4、臥室的光照、溫度、濕度的傳感器信息進行閾值配置,判斷是否進行電機聯(lián)動和產(chǎn)生報警信息,從而在主界面進行反饋。歷史查詢:查詢客廳,臥室,廚房歷史記錄信息,并在界面顯示。報警查詢:查詢客廳,臥室,廚房報警記錄信息,并在界面顯示。退出系統(tǒng):退出整個系統(tǒng)。4.數(shù)據(jù)庫的設(shè)計通過數(shù)據(jù)庫保存光照、溫度、濕度、火焰、燃氣、煙霧等傳感器信息的數(shù)據(jù)信息,保存各傳感器數(shù)據(jù)閾值的記錄和對聯(lián)動信息電機的狀態(tài)的值,從而有利于用戶對各傳感器的故障排除和記錄查詢,保證家居環(huán)境的安全。數(shù)據(jù)庫名稱:SmartHome數(shù)據(jù)庫表名:歷史記錄查詢表 dbo.HistoryData字段數(shù)據(jù)類型主鍵描述允許為空HistoryIDInt是歷史
5、記錄ID否HistoryMinValueNvarchar(30)否歷史記錄的最小值否HistoryMaxValueNvarchar(30)否歷史記錄的最大值否SensorIDNvarchar(20)否傳感器ID否SensorValueNvarchar(30)否傳感器采集值否SensorCollectTimeDateTime否設(shè)備采集時間否數(shù)據(jù)庫表名:地點表 dbo.Place字段數(shù)據(jù)類型主鍵描述允許為空placeNoNvarchar(20)是地點ID否PlaceNameNvarchar(30)否地點名稱否數(shù)據(jù)庫表名:傳感器表dbo.SensorTable字段數(shù)據(jù)類型主鍵描述允許為空Sensor
6、NoNvarchar(20)是傳感器編號否SensorTypeIDNvarchar(30)否傳感器類型否SensorPlaceNonvarChar(20)否傳感器采集地點編號否數(shù)據(jù)庫表名:傳感器類型表dbo.SensorType字段數(shù)據(jù)類型主鍵描述允許為空SensorTypeIDNvarchar(20)是傳感器類型ID否SensorTypeNvarchar(30)否傳感器類型否數(shù)據(jù)庫表名:報警數(shù)據(jù)表dbo.WarningData字段數(shù)據(jù)類型主鍵描述允許為空WarnIDint是報警編號否WarnSensorIDNvarchar(20)否報警傳感器ID否WarnValuefloat否產(chǎn)生報警采集值
7、否WarnlimitMinValuefloat否報警最小值閾值否WarnlimitMaxValuefloat否報警最大值閾值否WarnTimedateTime否報警值采集時間否WarnPlaceNoNvachar(20)否傳感器所在地點否WarnInfoNtext否報警信息否數(shù)據(jù)庫表名:傳感器配置表 dbo.SensorConfig字段數(shù)據(jù)類型主描述允許為空SensorConfigIDint是配置編號否SensorIDNvarchar(20)否配置傳感器ID否SensorPlaceIDNvarchar(20)否配置傳感器ID否SensorConRealyIDNvarchar(20)否相關(guān)連的繼
8、電器ID否SensorCollectValueFloat 否傳感器采集值否SensorlimitMinValueFloat 否配置最小值閾值信息否SensorlimitMaxValueFloat 否配置最大值閾值信息否SensorAlarmInfoNvarchar(50)否傳感器報警信息狀態(tài)否SensorlimitSetTimedateTime 否配置閾值當前時間否數(shù)據(jù)庫表名:繼電器狀態(tài)表 dbo.RealyStatus字段數(shù)據(jù)類型主鍵描述允許為空RealyIDNvarchar(20)是繼電器類型ID否RealyNameNvarchar(30)否繼電器類型否RealyStatusNvarcha
9、r(10)否繼電器狀態(tài)是1.4.5.實驗步驟第一步 :網(wǎng)絡(luò)參數(shù)的讀取,界面效果如下:在【進入】時,由從XML文件讀取的IP和Port配置,并ping IP地址,如果網(wǎng)絡(luò)聯(lián)通正常,將IP和端口號賦給各個窗體,進入【智能家居實時監(jiān)控】/讀取配置文件/實例化XMLDocument類 XmlDocument xmldoc = new XmlDocument(); /讀取IPConfig文件 xmldoc.Load("IPConfig.xml");/讀取節(jié)點 XmlNode nodeIP = xmldoc.SelectSingleNode("config/ip")
10、; XmlNode nodePort = xmldoc.SelectSingleNode("config/Port"); /判斷信息正確與否,并給全部變量賦值 if (txtIP.Text = nodeIP.InnerText &&txtPort.Text=nodePort.InnerText) try /實例化ping類 Ping p = new Ping();/將所要ping的IP地址傳到后臺 PingReply reply = p.Send(txtIP.Text);/判斷ping IP的狀態(tài) if (reply.Status = IPStatus.Su
11、ccess) MessageBox.Show("當前網(wǎng)絡(luò)聯(lián)通正常!"); else MessageBox.Show("當前網(wǎng)絡(luò)聯(lián)通異常或當前IP錯誤!"); catch (Exception ex) MessageBox.Show(ex.Message); FrmMain frmMa = new FrmMain(); frmMa.Show(); FrmDrawing.NetIP = nodeIP.InnerText; FrmDrawing.Port = nodePort.InnerText; FrmKitchen.NetIP = nodeIP.Inner
12、Text; FrmKitchen.Port = nodePort.InnerText; FrmRoom.NetIP = nodeIP.InnerText; FrmRoom.Port = nodePort.InnerText; FrmMain.NetIP = nodeIP.InnerText; FrmMain.Port = nodePort.InnerText; this.Hide(); else MessageBox.Show("輸入的信息有誤!"); 第二步 當IP與Port配置成功后,進入到【智能家居實時監(jiān)控】,顯示界面效果如下:在【智能家居實時監(jiān)控】中,實時監(jiān)測臥室的
13、環(huán)境信息,當網(wǎng)絡(luò)配置正常時,自動進行聯(lián)動控制主要功能代碼(以臥室為例)如下:/讀取配置文件 XmlDocument xmldoc = new XmlDocument(); xmldoc.Load("IPConfig.xml"); XmlNode nodeNetIP = xmldoc.SelectSingleNode("config/ip"); XmlNode nodePort = xmldoc.SelectSingleNode("config/Port");/判斷IP和端口號 if (NetIP = nodeNetIP.InnerTe
14、xt && Port = nodePort.InnerText) try string light = sm.getLight("" + NetIP + "", "" + Port + "", "3", "", "", ""); lblRoomlight.Text = "臥室光照:“+light1 + "LX"int lightValue = int.Parse(light1); if (l
15、ightRoomlimitMaxValue >= lightRoomlimitMinValue) /顯示設(shè)定的最小值 string strReadMinValue = "select SensorlimitMinValue from SensorConfig where SensorID='C0003_3'" /顯示設(shè)定的最大 string strReadMaxValue = "select SensorlimitMaxValue from SensorConfig where SensorID='C0003_3'"
16、 /判斷光照與閾值的關(guān)系,并進行聯(lián)動操作 /判斷光照值是否小于最小值,如果滿足條件,打開燈光 if (int.Parse(SQLDBHelper.GetDataSet(strReadMinValue).Tables0.Rows0"SensorlimitMinValue".ToString() > lightValue) Roomlight.Visible = false; RoomlightRed.Visible = true;/判斷聯(lián)動電機的狀態(tài) String strRead = "SELECT RealyStatus,SensorID,SensorCon
17、RealyID FROM RealyStatus,SensorConfig where SensorConfig.SensorConRealyID=RealyStatus.RealyID and SensorID='C0003_3' and SensorConRealyID='S0001'" /如果LED燈狀態(tài)為“關(guān)”,自動關(guān)閉LED燈,否則就打開LED if (SQLDBHelper.GetDataSet(strRead).Tables0.Rows0"RealyStatus".ToString() = "關(guān)")
18、 string close = sm.getOrSetSwitch("" + NetIP + "", "" + Port + "", "101", "", "", "", "3", "0"); else string open = sm.getOrSetSwitch("" + NetIP + "", "" + Port + "&
19、quot;, "101", "", "", "", "3", "1"); /判斷光照度是否大于設(shè)定的最大值,如果滿足,打開步進電機 else if (lightValue > int.Parse(SQLDBHelper.GetDataSet(strReadMaxValue).Tables0.Rows0"SensorlimitMaxValue".ToString() Roomlight.Visible = false; RoomlightRed.Vis
20、ible = true; string strRoomlight= "SELECT RealyStatus,SensorID,SensorConRealyID FROM RealyStatus,SensorConfig where SensorConfig.SensorConRealyID=RealyStatus.RealyID and SensorID='C0003_3' and SensorConRealyID='S0003'" /判斷步進電機的狀態(tài)if (SQLDBHelper.GetDataSet(strRoomlight).Tabl
21、es0.Rows0"RealyStatus".ToString() = "關(guān)") string close = sm.getOrSetStepMotor("" + NetIP + "", "" + Port + "", "104", "", "", "", "3", "0", 800); else string open = sm.getOrSetStepM
22、otor("" + NetIP + "", "" + Port + "", "104", "", "", "", "3", "1", 800); /如果條件都不滿足,則將LED和步進電機都關(guān)閉 else Roomlight.Visible = true; RoomlightRed.Visible = false; string closeStep = sm.getOrSetStepMotor(&q
23、uot;" + NetIP + "", "" + Port + "", "104", "", "", "", "3", "0", 800); string closeMotor = sm.getOrSetSwitch("" + NetIP + "", "" + Port + "", "101", "
24、", "", "", "3", "0"); catch (Exception ex) Console.WriteLine(ex); 【廚房監(jiān)測環(huán)境監(jiān)控】,界面效果如下:對于廚房的環(huán)境,燃氣,煙霧,火焰進行實時采集和顯示,手動進行聯(lián)動設(shè)置,例如:電機的開啟與關(guān)閉。/獲取燃氣值,將數(shù)據(jù)保存到數(shù)據(jù)庫 try string Gas = sm.getCombustibleGas("" + NetIP + "", "" + Port + "&quo
25、t;, "7", "", "", ""); /獲取燃氣值 lblGas.Text = Gas1; if (lblGas.Text != null && int.Parse(Gas1) > 0) /設(shè)置picSwitch 背景 picSwitch.ImageLocation = "picture/off.png" /將燃氣值添加到數(shù)據(jù)庫 string strSqlGas = "insert into HistoryData (HistoryMinValue,Hist
26、oryMaxValue,SensorID,SensorValue,SensorCollectTime)values('0','25','A0001_3','" + Gas1 + "','" + DateTime.Parse(time) + "')" SQLDBHelper.ExecuteNonQuery(strSqlGas); else picSwitch.ImageLocation = "picture/on.png" /從數(shù)據(jù)庫讀取信息,并綁
27、定在chart圖表上 string strfindGas = "select TOP 100 SensorCollectTime,SensorValue from HistoryData where SensorID='A0001_3' order by(SensorCollectTime)desc" /聲明數(shù)據(jù)類型為int的list List<int> listData = new List<int>(); /聲明數(shù)據(jù)類型為string的list List<string> listDate = new List<s
28、tring>(); for (int i = 0; i < SQLDBHelper.GetDataSet(strfindGas).Tables0.Rows.Count; i+) / 從數(shù)據(jù)庫讀取數(shù)據(jù),添加到list listData.Add(int.Parse(SQLDBHelper.GetDataSet(strfindGas).Tables0.Rowsi"SensorValue".ToString(); listDate.Add(SQLDBHelper.GetDataSet(strfindGas).Tables0.Rowsi"SensorCollec
29、tTime".ToString(); /綁定廚房燃氣數(shù)據(jù) chtKitChen.Series0.Points.DataBindXY(listDate, listData); catch (Exception ex) Console.WriteLine(ex); /獲取廚房火焰數(shù)據(jù),保存在數(shù)據(jù)庫 try string flame = sm.getFire("" + NetIP + "", "" + Port + "", "156", "", "",
30、 ""); if (flame1 = "1") lblflame.Text = "有" lblflame.ForeColor = Color.Red; string strSqlflame = "insert into HistoryData (HistoryMinValue,HistoryMaxValue,SensorID,SensorValue,SensorCollectTime)values('0','100','A0001_2','火焰:有','
31、" + DateTime.Parse(time) + "')" SQLDBHelper.ExecuteNonQuery(strSqlflame); catch (Exception ex) Console.WriteLine(ex); /在窗體載入時開啟線程threadCollect = new Thread(collect);threadCollect.Start();/定義變量 bool flag = false; /對于線程的方法 public void collect() flag = true; while (flag) try string t
32、emp = sm.getTemperature("" + NetIP + "", "" + Port + "", "1", "", "", ""); lblTemp.Text = temp1; /將數(shù)據(jù)添加到歷史記錄表 string strSqlTemp = "insert into HistoryData(HistoryMinValue,HistoryMaxValue,SensorID,SensorValue,SensorC
33、ollectTime) values('" + FrmMain.templimitMinValue + "','" + FrmMain.templimitMaxValue + "','B0002_1','" + lblTemp.Text + "','" + DateTime.Parse(time) + "')" SQLDBHelper.ExecuteNonQuery(strSqlTemp); /從數(shù)據(jù)庫讀取信息,將數(shù)據(jù)綁定到c
34、hart圖表 string strfindtemp = "select TOP 100 SensorCollectTime,SensorValue from HistoryData where SensorID='B0002_1' order by(SensorCollectTime)desc" /定義數(shù)據(jù)類型為int的list List<int> listData = new List<int>(); /定義數(shù)據(jù)類型為string的list List<string> listDate = new List<stri
35、ng>(); for (int i = 0; i < SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rows.Count; i+) if (int.Parse(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorValue".ToString() > 0) /將獲得數(shù)據(jù)添加到list listData.Add(int.Parse(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorVal
36、ue".ToString(); listDate.Add(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorCollectTime".ToString(); /通過委托傳遞參數(shù)this.Invoke(new Action() => lblTemp.Text = temp1;/綁定客廳溫度到chart圖表 chtLivingwt.Series0.Points.DataBindXY(listDate, listData); ); catch (Exception ex) Console.WriteLi
37、ne(ex); 【客廳監(jiān)測環(huán)境監(jiān)控】,界面效果如下:監(jiān)測客廳的環(huán)境信息(這里指溫度),保存到數(shù)據(jù)庫,并將數(shù)據(jù)綁定到chart圖表,手動進行聯(lián)動電機的開啟與關(guān)閉。/在窗體載入時開啟線程threadCollect = new Thread(collect);threadCollect.Start();/定義變量 bool flag = false; /對于線程的方法 public void collect() flag = true; while (flag) try string temp = sm.getTemperature("" + NetIP + "&quo
38、t;, "" + Port + "", "1", "", "", ""); lblTemp.Text = temp1; /將數(shù)據(jù)添加到歷史記錄表 string strSqlTemp = "insert into HistoryData(HistoryMinValue,HistoryMaxValue,SensorID,SensorValue,SensorCollectTime) values('" + FrmMain.templimitMinValu
39、e + "','" + FrmMain.templimitMaxValue + "','B0002_1','" + lblTemp.Text + "','" + DateTime.Parse(time) + "')" SQLDBHelper.ExecuteNonQuery(strSqlTemp); /從數(shù)據(jù)庫讀取信息,將數(shù)據(jù)綁定到chart圖表 string strfindtemp = "select TOP 100 SensorCo
40、llectTime,SensorValue from HistoryData where SensorID='B0002_1' order by(SensorCollectTime)desc" /定義數(shù)據(jù)類型為int的list List<int> listData = new List<int>(); /定義數(shù)據(jù)類型為string的list List<string> listDate = new List<string>(); for (int i = 0; i < SQLDBHelper.GetDataSet(s
41、trfindtemp).Tables0.Rows.Count; i+) if (int.Parse(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorValue".ToString() > 0) /將獲得數(shù)據(jù)添加到list listData.Add(int.Parse(SQLDBHelper.GetDataSet(strfindtemp).Tables0.Rowsi"SensorValue".ToString(); listDate.Add(SQLDBHelper.GetDataSet(
42、strfindtemp).Tables0.Rowsi"SensorCollectTime".ToString(); /通過委托傳遞參數(shù)this.Invoke(new Action() => lblTemp.Text = temp1;/綁定客廳溫度到chart圖表 chtLivingwt.Series0.Points.DataBindXY(listDate, listData); ); catch (Exception ex) Console.WriteLine(ex); (注意:由于數(shù)據(jù)需要從數(shù)據(jù)庫中讀取,可能數(shù)據(jù)獲取比較慢)對chart的設(shè)置主要代碼:/設(shè)置溫度圖表
43、樣式/設(shè)置chart標題 chtLivingwt.Titles.Add("客廳溫濕度監(jiān)控"); /實例化圖表區(qū) ChartArea ca = new ChartArea("圖表區(qū)");/實例化圖表序列seTemp = new Series("溫度");/設(shè)置圖表序列樣式 seTemp.ChartType = SeriesChartType.Spline; /將溫度的圖表序列添加到圖表區(qū) seTemp.ChartArea = ca.Name; /圖表ca添加到圖表區(qū) chtLivingwt.ChartAreas.Add(ca); /將溫
44、度seTemp的圖表序列添加到圖表序列chtLivingwt.Series.Add(seTemp); /設(shè)置圖表序列樣條線的寬度chtLivingwt.Series0.BorderWidth = 2; /設(shè)置X軸主題 chtLivingwt.ChartAreas0.AxisX.Title = "時間:( /s)" /設(shè)置Y軸主題chtLivingwt.ChartAreas0.AxisY.Title = "單位:" 【臥室環(huán)境實時監(jiān)控】,界面效果如下:注:代碼及注釋請參考“客廳環(huán)境監(jiān)控”【智能家居控制區(qū)】,界面效果如下:將配置的電機,繼電器的狀態(tài),是否報警
45、等信息在界面顯示,同時并更改數(shù)據(jù)庫數(shù)據(jù)的狀態(tài)。主要代碼如下(以客廳光照為例):/設(shè)置客廳光照/窗體載入判斷數(shù)據(jù)記錄是否存在,如果存在,則不插入數(shù)據(jù),否則就將數(shù)據(jù)記錄插入到數(shù)據(jù)庫 string sqlRead = " select count(*)as Count from SensorConfig where SensorID='B0002_3' "/如果數(shù)據(jù)不存在 if (int.Parse(SQLDBHelper.GetDataSet(sqlRead).Tables0.Rows0"Count".ToString() <= 1)
46、string time = DateTime.Now.ToLocalTime().ToString(); string strSqlIns = "insert into SensorConfig values('5','B0002_3','B10002','S0001','" + txtLivinglight.Text + "','" + txtlivinglightMinVa.Text + "','" + txtlivinglig
47、htMaxVa.Text + "','否','" + time + "')" SQLDBHelper.ExecuteNonQuery(strSqlIns); string strSqlSec = "insert into SensorConfig values('6','B0002_3','B10002','S0003','" + txtLivinglight.Text + "','" +
48、 txtlivinglightMinVa.Text + "','" + txtlivinglightMaxVa.Text + "','否','" + time + "')" SQLDBHelper.ExecuteNonQuery(strSqlSec); else Console.WriteLine("該記錄已存在!"); /判斷低溫報警是否被選中 string strReadWarn1 = "SELECT SensorAlarmInfo FROM SensorConfig where SensorConfigID='5'" if (SQLDBHelper.GetDataSet(strReadWarn1).Tables0.Rows0"SensorAlarmInfo".ToString() = "否") cblivinglightPolice1.Checked = fals
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲租賃合同范本
- 能源站施工協(xié)議
- 高層建筑自來水安裝合同
- 幼兒園專車定時接送合同
- 行紀合同范本指南制作教程
- 商標糾紛保證金協(xié)議書
- 生態(tài)園化糞池施工合同
- 保險服務(wù)辦公室租賃合同模板
- xx區(qū)分布式光伏項目可行性研究報告
- 辦公用品庫房管理招聘合同
- 汽車維修工時收費標準(二類企業(yè))
- Unit 4 What's the best movie theater Section B (2b) reading教學設(shè)計人教新目標八年級英語上冊
- GJB438B-軟件開發(fā)計劃-模板
- 十篇英語說明文范文
- 簡單咨詢費合同范本英文版
- 鋼渣綜合利用與碳排放減排機制研究
- 《ADIDAS案例分析》課件
- 重癥醫(yī)學科健康宣教手冊
- 外面面打膠防水施工方案
- 實驗動物學:動物實驗設(shè)計完整版
- 專項施工方案監(jiān)理審查簽字
評論
0/150
提交評論