无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频

在Windows95下用Delphi開發微機與PLC的串行通信程序

魯昌華 徐 穩

  摘 要:在Windows95下利用Delphi實現微機與PLC的串行通信的 幾種方法。
  關鍵詞:串行通信 Delphi 動態鏈接庫DLL 構件 句柄 設備控制 塊DCB 可編程控制器 PLC

  在自動測量和控制系統中,常常需要在上位機(微機)和PLC(可編程控制器) 之間進行數據交 換和發送控制信號,串行通信是其主要手段,我們在開發一套自動測試系統時就是采用串行 通信的方法,即由上位機向PLC發送命令,控制其進行各種測試線路的切換。

1 通信協議
  在本系統中微機和PLC采用一對一通信連接,上位機作主局,PLC作子局。通信開始時由上位 機向PLC發出呼叫,PLC收到上位機的呼叫后應答,并返回應答信號,然后上位機發首標,PL C應答,接著上位機發數據塊,PLC應答,數據全部發完后上位機發一結束標志,至此上位機 與PLC的通信結束。
  上述通信協議可用圖1描述

50a.gif (4057 bytes)

該協議使用的傳輸控制字符有:
  ENQ(查詢):在需要通信時作為發送方的請求。
  ACK(認可):接收方給發送方的應答,表示正確接收信息包。
  SOH(首標):表示要傳送的是首標。
  ETB(數據結束):標志數據塊的結束。
  STX(文本開始):標志數據塊的開始。
  ETX(文本結束):標志文本塊的結束。
  EOT(結束):表示傳送結束。
  LRC:縱向冗余校驗碼,即對前面所有的傳輸碼進行異或計算。

2 Windows95下用Delphi實現串行通信
  在Windows95環境下用Delphi3.0實現串行通信有3種方法:①使用VB的通信構件MSComm ;② 調用Windows95下的API函數來完成通信;③熟悉C/C++或其它語言的用戶可以將自己的程序 編譯鏈接為DLL(動態鏈接庫),這樣Delphi就可以調用DLL里的函數來通信。下面就這3種方 法分別加以討論。
2.1 使用VB通信構件
  在使用VB構件之前,首先要將VB構件文件MSComm32.OCX安裝到Delphi的動態構件庫中。打開 主菜單Component選擇Import ActiveX Control...項,在彈出的對話框里選中Microsoft Co mm Control5.0(安裝VB5.0后必有此項),再單擊Install按鈕。此時Delphi載入VB構件文件并重新編譯DCL(Delphi Component Library)。編譯完成后,MSComm的小按鈕出現在ActiveX 頁中,這時程序就可以使用此 構件了。應該注意的是,安裝前要確保VB通信構件的控制文件MSComm32.OCX(在VB4.0以上版 本中)在編譯DCL之前已在\Windows\System下。接著向窗體中 添加1個MSComm構件并進行串行口的初始化,初始化子例程序如下:

Procedure TForm1.FormCreate(Sender:TObject);
begin
MSComm1.CommPort:=2; {使用COM2口為通信口}
MSComm1.InBufferSize:=1024; {設定接收隊列長度為
1KB}
MSComm1.OutBufferSize:=1024; {設定發送隊列長度為
1KB}
MSComm1.Settings:=‘9600,N,8,1';{波特率9600b/s,無校驗,8個數據位,1 個停止位}
MSComm1.InputLen:=0; {讀取整個接收緩沖區內容}
MSComm1.InputBufferCount:=0; {清除接收緩沖區}
MSComm1.PortOpen=:True; {打開串行口}
End;
  用Input屬性從接收對列讀入字符串:ReadBuffer:=MSComm1.Input;用Output屬性發送字 符串:MSComm1.Output:=WriteBuffer;然后根據上述通信協議,即可快速編制出通信軟件 。
2.2 調用Windows95下的API函數
  Windows95對通信功能的支持非常強,它增加了一系列用于通信的API函數供用戶調用。同樣 ,要進行串行通信,也需要先對串口進行初始化。Windows95把串行口作為設備文件,對串 口操作就是對文件操作。因此,必須先為串口分配1個文件句柄,以后對串口操作都將通過 這個文件句柄來完成。初始化過程如下:
  (1)調用CreateFile函數為串口分配1個文件句柄。
  Var HComm:THandle;
  HComm:=CreateFile(‘COM2',GENERICREAD or GENERICWRITE ,0,@NULL,OPENEXISTING,FILEFLAGOVERLAPPED,0);
  如果對串行口1操作,用字符串COM1代替COM2即可。
  (2)調用SetupComm函數設置串行口的輸入和輸出緩存區。
  SetupComm(HComm,1024,1024);
  (3)填充1個DCB(設備控制塊)結構來設置通信參數。通過調用GetCommState函數 獲得當前系統的DCB結構,按需要賦值給DCB的成員,如波特率、奇偶校驗、數據位、停止位 等,最后將創建后的DCB結構作為參數傳給SetCommState函數就可以初始化串口了。

  Var DCB:TDCB;
  GetCommState(HComm,DCB);
  BuildCommDCB(‘9600,N,8,1',DCB);
  SetCommState(HComm,DCB);
  (4)用PurgeComm函數來清除接收緩存區的內容。
  PurgeComm(HComm,PurgeRXCLEAR);

  (5)串行口的初始化完成后,接下來的工作就是根據通信協議發送和接收串行口上的數據。R eadFile函數用于接收數據,WriteFile函數用于發送數據。

  Var
  OverLapped:TOverLapped;
  DataIn:Byte;
  DataOut:Byte;
  BufferSize:Integer;
  COMSTAT cs;
  ReadFile(HComm,DataIn,cs.cbInQue,BufferSize,@OverLapped);
   {從串行口讀輸入緩存的字節,存入DataIn變量中}
  WriteFile(HComm,DataOut,cs.cbOutQue,BufferSize,@OverLapped);
   {向串行口寫輸出緩存的字節,要寫的數據存放在DataOut}
  按照上述步驟,再根據前面的通信協議,即可完成串行通信。
2.3 調用其它語言編寫的DLL
  由于這里所說的其它語言包含面很廣,可以是開發人員所熟悉的編程語言(只要其支持DLL即 可),如C和C++等,所以如何編寫DLL就不再詳述了。將編寫好的DLL進行編譯,然后把編譯 通過后的DLL放在\Windows\System子目錄下,在Delphi下打開1個單元文件,將DLL里的所 有函數在單元文件中聲明,格式如下:

  unit UnitName;
  interface
  procedure p1(param1:type1;param2:type2;...);stdcall;
  external‘DLLName';
  …
  implementation
  end

  其中UnitName為單元文件名,p1為調用過程名,param1、param2為參數名,type1、type2為 參數類型名,DLLName為DLL名。串行通信時,只要將此單元包含進編程單元就行了。

3 結 論
  對使用Delphi開發Windows95下與PLC進行串行通信程序的3種方法進行比較可以得出這樣的 結論:
  (1)使用VB通信構件不但能夠實現API的所有功能,而且程序簡單明了。
  (2)調用Windows95的API通信函數,可以設計和開發出各種通信軟件,但編程復雜。
  (3)第3種方法適合那些熟悉其它編程語言的開發人員。
  以上所有程序均在Windows95中文版下使用Delphi3.0調試通過。

作者單位:合肥工業大學計算機系(230061)

參考文獻

 1 李漢濤,楊長春.Windows下三線制串行通信的實現方法.電腦技 術,1998;(7)
 2 王仲文譯.精通串行通信.北京:電子工業出版社

 

无码中文字幕色专区_91av俱乐部_无码人妻h动漫_26uuu成人_91九色丨porny丨国产jk_青青视频在线播放_国内自拍第二页_国产又粗又长又爽又黄的视频_色哟哟免费网站_久久出品必属精品_a级黄色一级片_99日在线视频
美女毛片一区二区三区四区| 久久国产成人| 亚洲女同中文字幕| 日韩一区精品| 激情综合五月| 日本大胆欧美人术艺术动态| 国产欧美综合一区二区三区| 国产精品av一区二区| 国产丝袜一区| 日韩在线视频一区二区三区| 欧美午夜不卡影院在线观看完整版免费| 欧美aaaaaa午夜精品| 夜久久久久久| 久久亚洲成人| 99久久九九| 国内精品麻豆美女在线播放视频| 日韩三区四区| 99视频一区| 五月天激情综合网| 日韩成人免费| 综合亚洲色图| 亚洲三级毛片| 99成人在线| 久久亚洲风情| 日本一区二区中文字幕| 亚欧成人精品| 欧美日韩中文| 久久精品一本| 成人片免费看| 神马日本精品| 日韩精品久久久久久久电影99爱| 日韩精品免费视频人成| 一区二区国产在线| 欧美专区一区二区三区| 午夜欧美理论片| 国产精品97| 三级欧美在线一区| 日韩va亚洲va欧美va久久| 国产黄色精品| 视频一区二区三区入口| 日韩网站中文字幕| 欧美福利专区| 日韩在线播放一区二区| 日本99精品| 精品国产精品国产偷麻豆| 欧美一区免费| 国产亚洲精品精品国产亚洲综合| 国产精品网站在线看| 国产精品欧美在线观看| 成人在线黄色| 日韩一区三区| 亚洲理论在线| 日韩不卡免费高清视频| 久久午夜精品一区二区| 久久精品福利| 亚洲激情中文| 国产精品自在| 蜜臀91精品国产高清在线观看| 香蕉久久夜色精品国产| 老司机免费视频一区二区| 日韩国产欧美| 日韩欧美久久| av一区在线| 欧美亚洲三区| 99视频一区| 欧美激情视频一区二区三区在线播放| 久久在线免费| 黄色网一区二区| 中文字幕中文字幕精品| 亚洲深夜视频| 91欧美精品| 99re国产精品| 美女网站视频一区| 久久久久九九精品影院| 自拍自偷一区二区三区| 久久婷婷一区| 美女国产一区二区三区| 日韩在线观看一区二区| 久久一区二区三区喷水| 麻豆视频一区二区| 免费欧美在线视频| 日本国产精品| 免费高潮视频95在线观看网站| 国产日产高清欧美一区二区三区 | 日韩综合一区二区| 亚洲最新无码中文字幕久久| 欧美有码在线| 只有精品亚洲| 欧美精品自拍| 日韩免费久久| 精品国产乱码久久久| 免费观看日韩电影| 99在线观看免费视频精品观看| 激情偷拍久久| 午夜视频精品| 美女精品一区| 日本午夜精品| 国产精品对白| 国产精品qvod| 国产成人黄色| 99精品在线| 亚洲激情婷婷| 日韩一区精品字幕| 日韩精品一页| 人人精品久久| 久草精品视频| 麻豆视频观看网址久久| 久久亚洲国产精品尤物| 欧美激情五月| 日韩一区二区在线免费| 91精品亚洲| 国产午夜精品一区二区三区欧美| 欧美精品一二| 99热精品在线观看| 婷婷综合电影| 精品91福利视频| 国产不卡人人| 亚洲激情中文在线| 日韩精品久久理论片| 日韩手机在线| 国产高清亚洲| 91精品国产自产在线观看永久∴| 午夜电影亚洲| 国产日产一区| 久久免费大视频| 亚洲精品字幕| 国模精品一区| 黄色日韩在线| 国产欧美啪啪| 欧美亚洲日本精品| 欧美a级片一区| 日本三级亚洲精品| 在线天堂中文资源最新版| 99久久久久国产精品| 视频一区视频二区中文字幕| 欧美国产先锋| 国产高清一区| 蜜桃久久久久| 天堂成人国产精品一区| 9999国产精品| 日韩激情av在线| 欧美.日韩.国产.一区.二区 | 日韩一区二区久久| 国产日韩在线观看视频| 亚洲特色特黄| 久久香蕉精品香蕉| 久久xxxx精品视频| 日韩大片在线播放| 丝袜美腿亚洲一区二区图片| 欧美国产一级| 综合激情视频| 久久精品导航| 日韩 欧美一区二区三区| 不卡中文字幕| 高清不卡亚洲| 捆绑调教美女网站视频一区| 亚洲精品一区三区三区在线观看| 欧美亚洲tv| 亚洲专区欧美专区| 亚洲91视频| 久久久久免费| 精品欧美日韩精品| 久久精品99国产精品日本| 蜜臀久久99精品久久一区二区| 福利一区在线| 国产劲爆久久| 国产精品一区二区av日韩在线| 99视频一区| 欧美精品九九| 亚洲五月婷婷| 亚洲一本视频| 激情六月综合| 999久久久91| 青青久久av| 99精品小视频| 亚洲韩日在线| 婷婷成人基地| 亚洲一级黄色| 午夜欧美在线| 久久国产精品99国产| 在线综合视频| 日韩中文字幕无砖| 亚洲乱码久久| 国产美女久久| 97人人精品| 欧美 日韩 国产一区二区在线视频| 亚洲人成在线网站| 久久在线视频免费观看| 黄色av一区| 亚洲18在线| 国产精品对白久久久久粗| 精品福利久久久| 亚洲大片在线| 亚洲欧美伊人| 亚洲开心激情| 欧美91在线|欧美| 999久久久亚洲| 免费精品国产| 免费久久99精品国产| 欧美一区网站|