智能儀器課程設(shè)計(cgi技術(shù)控制計算機(jī)并口輸出)_第1頁
已閱讀1頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目錄</b></p><p><b>  設(shè)計任務(wù)及要求</b></p><p><b>  設(shè)計步驟和具體實現(xiàn)</b></p><p>  1. IIS服務(wù)器的配置……………………………………………………1</p><p>  虛擬目錄網(wǎng)頁應(yīng)用程

2、序的映射……………………………………2</p><p>  HTML表單的制作…………………………………………………3</p><p>  CGI程序的編寫……………………………………………………5</p><p>  WinIo的基本使用…………………………………………………7</p><p>  計算機(jī)并口的基本知識……………………………

3、………………8</p><p>  實際調(diào)試……………………………………………………………9</p><p><b>  三、設(shè)計總結(jié)</b></p><p><b>  一、設(shè)計任務(wù)</b></p><p>  網(wǎng)絡(luò)在測控領(lǐng)域前景廣闊,在辦公室如何通過網(wǎng)絡(luò)開關(guān)家里的空調(diào)?一個實現(xiàn)的方法是在家用電腦

4、上安裝IIS把家用電腦變成服務(wù)器,在網(wǎng)頁上通過CGI技術(shù)利用WINIO空間控制并口輸出高低電平來開關(guān)空調(diào)。</p><p>  設(shè)計步驟和具體實現(xiàn) </p><p>  從微軟下載IIS6.0軟件,并安裝到臺式計算機(jī)上,將計算機(jī)配置成為可以支持CGI的服務(wù)器,制作一個簡單的網(wǎng)頁表單,編寫CGI程序,通過網(wǎng)絡(luò)訪問服務(wù)器上的網(wǎng)頁,CGI程序根據(jù)服務(wù)器的環(huán)境變量檢測開關(guān)空調(diào),執(zhí)行完程序之后CGI

5、通過服務(wù)器向網(wǎng)頁輸出開關(guān)信息。</p><p>  IIS服務(wù)器的配置:</p><p><b>  1、IIS的添加</b></p><p>  進(jìn)入“控制面板”,依次選“添加/刪除程序→添加/刪除Windows組件”,將“Internet信息服務(wù)(IIS)”前的小鉤去掉(如有),重新勾選中后按提示操作即可完成IIS組件的添加。用這種方法添

6、加的IIS組件中將包括Web、FTP、NNTP和SMTP等全部四項服務(wù)。</p><p><b>  2、IIS的運(yùn)行</b></p><p>  當(dāng)IIS添加成功之后,再進(jìn)入“開始→程序→管理工具→Internet服務(wù)管理器”以打開IIS管理器,對于有“已停止”字樣的服務(wù),均在其上單擊右鍵,選“啟動”來開啟。</p><p>  3、建立第一

7、個Web站點</p><p>  比如本機(jī)的IP地址為172.29.XXX.XXX,自己的網(wǎng)頁放在D:\Wy目錄下,網(wǎng)頁的首頁文件名為Index.html,現(xiàn)在根據(jù)這些建立好自己的Web服務(wù)器。</p><p>  對于此Web站點,我們可以用現(xiàn)有的“默認(rèn)Web站點”來做相應(yīng)的修改后,就可以輕松實現(xiàn)。先在“默認(rèn)Web站點”上單擊右鍵,選“屬性”,以進(jìn)入名為“默認(rèn)Web站點屬性”設(shè)置界面。&

8、lt;/p><p>  一、修改綁定的IP地址:轉(zhuǎn)到“Web站點”窗口,再在“IP地址”后的下拉菜單中選擇所需用到的本機(jī)IP地址“172.29.XXX.XXX”。</p><p>  二、修改主目錄:轉(zhuǎn)到“主目錄”窗口,再在“本地路徑”輸入(或用“瀏覽”按鈕選擇)好自己網(wǎng)頁所在的“D:\Wy”目錄。</p><p>  三、添加首頁文件名:轉(zhuǎn)到“文檔”窗口,再按“添加”

9、按鈕,根據(jù)提示在“默認(rèn)文檔名”后輸入自己網(wǎng)頁的首頁文件名“Index.htm”。</p><p>  四、添加虛擬目錄:比如你的主目錄在“D:\Wy”下,而你想輸入“172.29.XXX.XXX/test”的格式就可調(diào)出“E:\All”中的網(wǎng)頁文件,這里面的“test”就是虛擬目錄。請在“默認(rèn)Web站點”上單擊右鍵,選“新建→虛擬目錄”,依次在“別名”處輸入“test”,在“目錄”處輸入“E:\All”后再按提示

10、操作即可添加成功。</p><p>  五、效果的測試:打開IE瀏覽器,在地址欄輸入“172.29.XXX.XXX”之后再按回車鍵,此時就能夠調(diào)出你自己網(wǎng)頁的首頁,則說明設(shè)置成功!</p><p>  虛擬目錄網(wǎng)頁應(yīng)用程序的映射:</p><p>  可以使用多種編程和腳本語言來開發(fā) Web 應(yīng)用程序。因此,IIS 使用網(wǎng)站上請求資源的文件擴(kuò)展名來確定運(yùn)行哪個 In

11、ternet 服務(wù)器 API (ISAPI) 或通用網(wǎng)關(guān)接口 (CGI) 程序處理請求。例如,以 .aspx 擴(kuò)展名結(jié)尾的文件請求將導(dǎo)致 Web 服務(wù)器調(diào)用 ASP.NET 程序 (aspnet_isapi.dll) 來處理請求。文件擴(kuò)展名與 ISAPI 或 CGI 程序的關(guān)聯(lián)稱為“應(yīng)用程序映射”?! ☆A(yù)先配置 IIS 6.0 以支持公共應(yīng)用程序映射??梢蕴砑踊騽h除網(wǎng)站上所有應(yīng)用程序或單個應(yīng)用程序的映射?!   U(kuò)展名映射到應(yīng)用程

12、序,在 IIS 管理器中,展開本地計算機(jī),然后單擊要配置的應(yīng)用程序的開始位置目錄。右鍵單擊該目錄,然后單擊“屬性”。單擊相應(yīng)的選項卡:“主目錄”、“虛擬目錄”或“目錄”。在“應(yīng)用程序設(shè)置”區(qū)域中,單擊“配置”,然后單擊“映射”選項卡。在“映射”選項卡上,單擊“添加”。在“可執(zhí)行文件”框中,鍵入將處理文件的 ISAPI 或 CGI 程序的路徑。必須在 Web 服務(wù)器的本地目錄中指定程序。在“擴(kuò)展名”框中,鍵入要與 ISAPI 或 CGI

13、程序</p><p><b>  網(wǎng)頁表單的制作:</b></p><p>  GET對于那些使用了屬性“METHOD=GET”的表單(或者沒有METHOD屬性,這時候GET是其缺省值),CGI定義為:當(dāng)表單被發(fā)送到服務(wù)器斷后,表單中的數(shù)據(jù)被保存在服務(wù)器上一個叫做QUERY_STRING的環(huán)境變量中。這種表單的處理相對簡單,只要讀取環(huán)境變量就可以了。這一點對不同的語言

14、有不同的做法。在C語言中,你可以用庫函數(shù)getenv(定義在標(biāo)準(zhǔn)庫函數(shù)stdlib中)來把環(huán)境變量的值作為一個字符串來存取。你可以在取得了字符串中的數(shù)據(jù)后,運(yùn)用一些小技巧進(jìn)行類型的轉(zhuǎn)換,這都是比較簡單的了。在CGI程序中的標(biāo)準(zhǔn)輸出(output)(比如在C中的stdout文件流)也是經(jīng)過重定義了的。它并沒有在服務(wù)器上產(chǎn)生任何的輸出內(nèi)容,而是被重定向到客戶瀏覽器。這樣,如果編寫一個C的CGI程序的時候,把一個HTML文檔輸出到它的stdo

15、ut上,這個HTML文檔會被在客戶端的瀏覽器中顯示出來。這也是CGI程序的一個基本原理。 下面是一段HTML表單: </p><p>  我們要實現(xiàn)的功能很簡單,就是把表單中輸入的數(shù)值乘起來,然后輸出結(jié)果。</p><p>  下面就是處理這個表單的CGI程序,對應(yīng)于FORM標(biāo)簽中的ACTION屬性值。</p><p>  #include < stdio.

16、h > #include < stdlib.h > int main(void) { char *data; long m,n; printf("%s%c%c ","Content-Type:text/html;charset=gb2312",13,10); printf("< TITLE >乘法結(jié)果< /TITLE > &

17、quot;); printf("< H3 >乘法結(jié)果< /H3 > "); data = getenv("QUERY_STRING"); if(data == NULL) printf("< P >錯誤!數(shù)據(jù)沒有被輸入或者數(shù)據(jù)傳輸有問題"); else if(sscanf(data,"m=%ld&n=%

18、ld",&m,&n)!=2) printf("< P >錯誤!輸入數(shù)據(jù)非法。表單中輸入的必須是數(shù)字。"); else printf("< P >%ld和%ld的成績是:%ld。",m,n,m*n); return 0; } </p><p>  前面已經(jīng)提到標(biāo)準(zhǔn)輸出的內(nèi)容就是要被顯示在瀏覽器中的內(nèi)容。

19、第一行的輸出內(nèi)容是一個CGI程序所特有的printf("Content-Type:text/html\n\n"),這個輸出是作為HTML的文件頭。因為CGI不僅可以像瀏覽器輸出HTML文本,而且可以輸出圖像,聲音之類的東西。這一行告訴瀏覽器如何處理接受到的內(nèi)容。在Content-Type的定義后面跟有兩行的空行,這也是不可缺少的。因為所有CGI程序的頭部輸出都是相近的,因而可以為其定義一個函數(shù),來節(jié)省編程的時間。這是

20、CGI編程常用的一個技巧。</p><p>  程序在后面調(diào)用了用了庫函數(shù)getevn來得到QUERY_STRING的內(nèi)容,然后使用sscanf函數(shù)把每個參數(shù)值取出來,要注意的是sscanf函數(shù)的用法。把程序編譯后,改名為mult.cgi放在/cgi-bin/目錄下面,就可以被表單調(diào)用了。這樣,一個處理GET方式表單的CGI程序就大功告成了。</p><p>  本設(shè)計中使用記事本編寫HT

21、ML表單程序并另存為HTML格式,編寫如下:</p><p><b>  <html></b></p><p><b>  <body></b></p><p>  <form name="input" action="cgi/getcgi.exe" m

22、ethod="get"></p><p>  關(guān)閉空調(diào): <input type="radio" name="a" value="0" checked="checked"></p><p><b>  <br /></b></p>

23、;<p>  打開空調(diào): <input type="radio" name="a" value="1"></p><p><b>  <br /></b></p><p>  <input type ="submit" value ="

24、確定"></p><p><b>  </form></b></p><p><b>  </body></b></p><p><b>  </html></b></p><p>  當(dāng)訪問服務(wù)器主頁時,運(yùn)行效果圖如下:&l

25、t;/p><p><b>  HTML表單效果圖</b></p><p><b>  CGI程序的編寫:</b></p><p>  參照上面的方法,根據(jù)已經(jīng)制作好的網(wǎng)頁編寫CGI服務(wù)程序,源代碼如下:</p><p>  #include <windows.h></p>&l

26、t;p>  #include <stdio.h> //添加標(biāo)準(zhǔn)輸入輸出頭文件</p><p>  #include "winio.h" //添加winio.h,直接對計算機(jī)并口控制</p><p>  int main()</p><p><b>  {</b></p>

27、<p>  char *data; //存放從服務(wù)器讀取的URL編碼(字符串格式)</p><p>  char b[2]; //存放URL編碼中截取的字符串</p><p>  bool fla; //winio初始化函數(shù)標(biāo)志位</p><p>  printf("Content-Type:te

28、xt/html\n\n");</p><p>  printf("<HTML>\n");</p><p>  printf("<HEAD>\n<TITLE >Get Method</TITLE>\n</HEAD>\n");</p><p>  printf(

29、"<BODY>\n");</p><p>  printf("<div style=\"font-size:12px\">\n");</p><p>  data = getenv("QUERY_STRING"); //獲取環(huán)境變量QUERY_STRING</p>&

30、lt;p>  if(data==NULL)</p><p><b>  {</b></p><p>  printf("<DIV STYLE=\"COLOR:RED\">Error</DIV>\n");</p><p><b>  }</b></p

31、><p><b>  else </b></p><p><b>  { </b></p><p>  sscanf(data,"a=%s",b); //提取URL編碼中的“開關(guān)量('0'/'1')”</p><p>  if(b[0]=='

32、0') //如果是'0'(關(guān)閉空調(diào))則控制并口輸出低電平</p><p><b>  { </b></p><p>  fla=InitializeWinIo();</p><p><b>  if(fla)</b></p><p><b>  {</

33、b></p><p>  SetPortVal(0x378, 0x00, 1); </p><p>  printf("<DIV STYLE=\"COLOR:RED\">空調(diào)已經(jīng)關(guān)閉</DIV>\n");</p><p><b>  }</b></p><

34、p><b>  }</b></p><p>  else if(b[0]=='1') //如果是'1'(打開空調(diào))則控制并口輸出高電平</p><p><b>  { </b></p><p>  fla=InitializeWinIo();</p><p

35、><b>  if(fla)</b></p><p><b>  { </b></p><p>  SetPortVal(0x378, 0xff, 1);</p><p>  printf("<DIV STYLE=\"COLOR:GREEN; font-size:15px;font-wei

36、ght:bold\">空調(diào)已經(jīng)打開</DIV>\n");</p><p>  } </p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p&g

37、t;<p>  printf("<DIV STYLE=\"COLOR:RED\">讀取錯誤</DIV>\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("<

38、;HR COLOR=\"blue\" align=\"left\" width=\"100\">");</p><p>  printf("</div>\n");</p><p>  printf("</BODY>\n");</p>&l

39、t;p>  printf("</HTML>\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  以上程序必須在.CPP中編譯和運(yùn)行,如果使用.C會報錯。</p><p>  WinIo的基

40、本使用:</p><p>  WinIo庫在VC應(yīng)用程序中的使用(WinIo庫下載)</p><p>  為了在VC中能正常使用WinIo庫,必須按以下步驟進(jìn)行配置:</p><p>  (1):將WinIo.dll、WinIo.sys、WINIO.VXD三個文件放在程序可執(zhí)行文件所在目錄下;</p><p>  (2):將WinIo.lib

41、添加到工程中,WinIo.lib及winio.h文件必須放在工程目錄下;</p><p>  (3):在StdAfx.h頭文件中加入#include "winio.h"語句;</p><p>  (4):調(diào)用InitializeWinIo函數(shù)初始化WinIo驅(qū)動庫;</p><p>  (5):調(diào)用讀寫IO口的GetPortVal或SetPort

42、Val函數(shù);</p><p>  (6):調(diào)用ShutdownWinIo函數(shù);</p><p>  WinIo庫中幾個函數(shù)說明: </p><p>  (1):初始化與終止</p><p>  bool _stdcall InitializeWinIo();void _stdcall ShutdownWinIo();</p>&

43、lt;p><b>  (2):安裝與卸載</b></p><p>  bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);bool _stdcall RemoveWinIoDriver();</p><p>  (3):讀寫I/O口</

44、p><p>  bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);</p><p>  GetPortVal函數(shù)從指定端口讀取一個BYTE/WORD/DWORD類

45、型的值;</p><p>  wPortAddr是指定一個端口地址值;</p><p>  pdwPortVal為指向一雙字節(jié)型變量的指針,該變量存儲從wPortAddr端口讀取的值;</p><p>  bSize指定讀取字節(jié)數(shù),值可以為1,2或4。 </p><p>  SetPortVal函數(shù)向指定端口寫入一個BYTE/WORD/DWO

46、RD類型的值;</p><p>  除dwPortVal為輸入?yún)?shù),表示待寫入外,其余個變量含義與GetPortVal相似。</p><p>  數(shù)據(jù)端口數(shù)字輸出的VC實現(xiàn)</p><p>  //獲得數(shù)據(jù)端口地址WORD m_nport=(WORD)0x378;//獲得要寫入數(shù)據(jù)端口的值WriteValue(數(shù)據(jù)范圍為0~255)DWORD m_nValue=(D

47、WORD)WriteValue;//調(diào)用WinIo庫函數(shù)SetPortVal寫端口值SetPortVal(m_nport, m_nValue, 1);//write a BYTE value to an I/O port,可以使用winio中的例子,將自己的C程序放在例子中的工程中編譯,免去以上配置的繁瑣。</p><p>  6)計算機(jī)并口知識:</p><p>  并行口通過8條數(shù)據(jù)線

48、一次傳輸一個字節(jié),25針并行口插口的針腳功能:</p><p>  D0-D7為數(shù)據(jù)線,地址為0x378;S0-S7為狀態(tài)線,地址為0x379;C0-C7 為控制線,C4、C5、C6、C7是不可見, 地址為0x37A;G0-G7為GND。</p><p>  7)綜合以上個步驟:</p><p>  第一,配置IIS服務(wù)器,在IIS服務(wù)器的“默認(rèn)站點”下右擊,建立

49、一個“虛擬目錄”(例 別名:wangye物理路徑:隨便一個路徑即可),將編寫好的HTML表單放到該物理路徑下;第二,再建一個“虛擬目錄”(例 別名:cgi(與表單中的Action后面虛擬路徑對應(yīng))物理路徑:最好是C盤中的Inetpub文件夾下的wwwroot文件夾),將編譯好的getcgi.exe程序放在wwwroot文件夾下;第三,設(shè)置應(yīng)用程序的映射,在wangye虛擬目錄上右擊選擇屬性,選擇配置—>添加,將路徑設(shè)置為C盤中的I

50、netpub文件夾下的wwwroot文件夾getcgi.exe并確定;第四,將硬件電路接好(可以先使用發(fā)光二極管接一個1K的電阻測試);第五,打開瀏覽器輸入http://172.29.XXX.XXX(服務(wù)器電腦的IP地址)/wangye,回車后打開網(wǎng)頁,分別選擇“打開空調(diào)”、“關(guān)閉空調(diào)”并確定進(jìn)行測試。</p><p><b>  三、設(shè)計總結(jié)</b></p><p>

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論