<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al

        在Windows95下用Delphi開(kāi)發(fā)微機(jī)與PLC的串行通信程序

        魯昌華 徐 穩(wěn)

          摘 要:在Windows95下利用Delphi實(shí)現(xiàn)微機(jī)與PLC的串行通信的 幾種方法。
          關(guān)鍵詞:串行通信 Delphi 動(dòng)態(tài)鏈接庫(kù)DLL 構(gòu)件 句柄 設(shè)備控制 塊DCB 可編程控制器 PLC

          在自動(dòng)測(cè)量和控制系統(tǒng)中,常常需要在上位機(jī)(微機(jī))和PLC(可編程控制器) 之間進(jìn)行數(shù)據(jù)交 換和發(fā)送控制信號(hào),串行通信是其主要手段,我們?cè)陂_(kāi)發(fā)一套自動(dòng)測(cè)試系統(tǒng)時(shí)就是采用串行 通信的方法,即由上位機(jī)向PLC發(fā)送命令,控制其進(jìn)行各種測(cè)試線路的切換。

        1 通信協(xié)議
          在本系統(tǒng)中微機(jī)和PLC采用一對(duì)一通信連接,上位機(jī)作主局,PLC作子局。通信開(kāi)始時(shí)由上位 機(jī)向PLC發(fā)出呼叫,PLC收到上位機(jī)的呼叫后應(yīng)答,并返回應(yīng)答信號(hào),然后上位機(jī)發(fā)首標(biāo),PL C應(yīng)答,接著上位機(jī)發(fā)數(shù)據(jù)塊,PLC應(yīng)答,數(shù)據(jù)全部發(fā)完后上位機(jī)發(fā)一結(jié)束標(biāo)志,至此上位機(jī) 與PLC的通信結(jié)束。
          上述通信協(xié)議可用圖1描述

        50a.gif (4057 bytes)

        該協(xié)議使用的傳輸控制字符有:
          ENQ(查詢):在需要通信時(shí)作為發(fā)送方的請(qǐng)求。
          ACK(認(rèn)可):接收方給發(fā)送方的應(yīng)答,表示正確接收信息包。
          SOH(首標(biāo)):表示要傳送的是首標(biāo)。
          ETB(數(shù)據(jù)結(jié)束):標(biāo)志數(shù)據(jù)塊的結(jié)束。
          STX(文本開(kāi)始):標(biāo)志數(shù)據(jù)塊的開(kāi)始。
          ETX(文本結(jié)束):標(biāo)志文本塊的結(jié)束。
          EOT(結(jié)束):表示傳送結(jié)束。
          LRC:縱向冗余校驗(yàn)碼,即對(duì)前面所有的傳輸碼進(jìn)行異或計(jì)算。

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

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

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

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

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

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

          其中UnitName為單元文件名,p1為調(diào)用過(guò)程名,param1、param2為參數(shù)名,type1、type2為 參數(shù)類型名,DLLName為DLL名。串行通信時(shí),只要將此單元包含進(jìn)編程單元就行了。

        3 結(jié) 論
          對(duì)使用Delphi開(kāi)發(fā)Windows95下與PLC進(jìn)行串行通信程序的3種方法進(jìn)行比較可以得出這樣的 結(jié)論:
          (1)使用VB通信構(gòu)件不但能夠?qū)崿F(xiàn)API的所有功能,而且程序簡(jiǎn)單明了。
          (2)調(diào)用Windows95的API通信函數(shù),可以設(shè)計(jì)和開(kāi)發(fā)出各種通信軟件,但編程復(fù)雜。
          (3)第3種方法適合那些熟悉其它編程語(yǔ)言的開(kāi)發(fā)人員。
          以上所有程序均在Windows95中文版下使用Delphi3.0調(diào)試通過(guò)。

        作者單位:合肥工業(yè)大學(xué)計(jì)算機(jī)系(230061)

        參考文獻(xiàn)

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

         

        主站蜘蛛池模板: 人妻少妇偷人作爱av| 一区二区三区鲁丝不卡| 国产最新AV在线播放不卡| 国产成人AV国语在线观看| 国产成人1024精品免费| 色吊丝二区三区中文字幕| 亚洲精品日本一区二区| 成人自拍小视频在线观看| 丁香婷婷无码不卡在线| 嫩草研究院久久久精品| 巨胸美乳无码人妻视频漫画| 韩国一级永久免费观看网址| 麻豆精品一区二区三区蜜臀 | 国产成人精品日本亚洲第一区| 99国产精品自在自在久久| 熟妇无码熟妇毛片| 国产成人a在线观看视频| 久久日韩精品一区二区五区| 日韩不卡免费视频| 国产精品剧情亚洲二区| 自拍欧美亚洲| 国产成人亚洲欧美二区综合| 日韩精品一区二区av在线观看| 99精品国产兔费观看久久99| 天堂亚洲免费视频| 狂躁女人双腿流白色液体| 午夜短视频日韩免费| 97亚洲色欲色欲综合网| 久久久av男人的天堂| 亚洲av鲁丝一区二区三区黄| 国产AV影片麻豆精品传媒| 国产成人亚洲综合色婷婷秒播| a在线亚洲男人的天堂试看| 中文字幕精品av一区二区五区| 韩国美女福利视频一区二区 | 一级女性全黄久久生活片| 日韩精品视频一区二区不卡| 亚洲av无码之国产精品网址蜜芽| 无码国产精品一区二区免费3p | 亚洲一卡2卡3卡4卡精品| 国产AV一区二区精品凹凸|