亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        用ComPort實現(xiàn)PC機和伺服控制器的串行通信

        2010-06-05 10:47:38劉智慧
        電子設(shè)計工程 2010年9期
        關(guān)鍵詞:設(shè)置

        劉智慧

        (西安外事學(xué)院 計算機中心,陜西 西安710077)

        隨著計算機的發(fā)展,單片機在工業(yè)控制領(lǐng)域里得到廣泛的應(yīng)用,例如:用于數(shù)據(jù)采集、監(jiān)控與控制等。很多工業(yè)控制系統(tǒng)都采用上下位機的方式,用串口來實現(xiàn)數(shù)據(jù)交換。為了實現(xiàn)上位機與下位機之間快速、高效的通信,這就需要根據(jù)兩者之間的通信協(xié)議在上位機和下位機編寫相應(yīng)的串口通信程序,本文主要是針對上位機串行通信的設(shè)計和實現(xiàn)。

        1 串行通信控件庫ComPort

        在Windows環(huán)境下,既可以用Windows API函數(shù)進行串行通信編程,也可以利用串行通信控件來進行編程。利用API函數(shù)編寫實際應(yīng)用程序時,往往要考慮多線程的問題,這樣編出來的程序龐大,且結(jié)構(gòu)復(fù)雜,繼承性差,維護困難。使用串行通信控件就相對簡單一些,而且其功能強大,性能安全可靠。Comport控件庫中就提供了串行通信控件。另外用Delphi編寫圖形用戶界面程序比較容易,所以用Delphi+ComPort控件庫進行串行通信程序的設(shè)計不失為一個明智的選擇[1]。

        ComPort 控 件 庫 適 用 于 Win95、Win98、WinNT、Windows2000、Windows XP等操作系統(tǒng),支持 Delphi3~7和 C++Builder3~6, 有 TComPort、TComDataPacket、TComComboBox、TComRadioGroup、TComLed、TComTerminal等控件 (其中的TComPort提供的功能就類似于MSComm),支持同步、異步讀寫操作,可對流控制進行詳細的設(shè)置,可以設(shè)置讀寫操作的超時(TimeOut)時間,用多線程監(jiān)視串口事件[2]。

        TComDataPacket可以很容易從輸入緩沖區(qū)中以包的形式讀出數(shù)據(jù),并且可以通過設(shè)定TComDataPacket的屬性來設(shè)定數(shù)據(jù)包的開始和終止條件。

        TComTerminal可以接收TComPort控件接收到的數(shù)據(jù)并顯示在屏幕上。它支持VT52,VT100和ANSI等終端連接。

        TComComboBox提供可視化用戶界面,使用戶可以很容易地設(shè)置串口的常用屬性,并可以選擇所需要的串口。

        TComLed可以顯示CTS,DSR,RLSD,Ring,Tx和Rx等信號的狀態(tài)。TComLed可以與 TComPort連接,當(dāng)這些串口信號變化的時候,TComLed就可以自動地更新這些信號的狀態(tài)。

        本文中就是利用TComPort控件實現(xiàn)PC機(上位機)與伺服控制器(下位機)之間的串行通信。

        1.1 ComPort提供的對串口進行操作的方式

        串口的讀寫操作可以以2種方式進行:同步或者異步。在同步方式下,進行串口操作的函數(shù)直到操作完成或者產(chǎn)生錯誤才返回。在異步方式下,進行串口操作的函數(shù)執(zhí)行后直接返回,無需等待操作結(jié)束。在進行異步操作后,如果執(zhí)行的結(jié)果還沒有出來,所有應(yīng)用程序應(yīng)該調(diào)用等待函數(shù)(Wait)以確保操作完成。在異步操作和等待函數(shù)(Wait)之間,應(yīng)用程序可以執(zhí)行與此異步操作結(jié)果無關(guān)的其他任何操作[3]。

        在執(zhí)行異步操作之前要先調(diào)用InitAsync方法,該方法是初始化PAsync類型的參數(shù),每個進行異步操作的方法都有PAsync參數(shù)。在操作完成后,調(diào)用DoneAsync方法釋放資源。

        1.2 ComPort控件的常用屬性、方法和事件

        ComPort控件有很多重要的屬性、方法和事件,通過這些可以很好地控制串口。常用的屬性方法和事件[4-5]如下:

        1)常用屬性 ①BaudRate、Port、DataBits、Parity、StopBits:

        分別設(shè)置串口的波特率、對應(yīng)的串口號、數(shù)據(jù)位、校驗類型和校驗位、停止位;②Buffer:設(shè)置接收、發(fā)送緩沖區(qū)的大??;③Connected:返回串口的狀態(tài);也可以打開或者關(guān)閉串口;④FlowControl:設(shè)置流的控制方式;⑤Timeouts:用來設(shè)置讀寫操作的間隔和完成的超時時間;⑥TriggersOnRxChar:用來設(shè)置當(dāng)串口接收到數(shù)據(jù)的時候,哪個事件會被觸發(fā)(On-RxBuf還是 OnRxChar),通常設(shè)置 TriggersOnRxChar=True,也就是串口接收到數(shù)據(jù)時候,觸發(fā)OnRxChar事件。

        2)常用方法和事件 ①Open/Close:打開/關(guān)閉串口;②Read/ReadStr:向串口讀字符/讀字符串;③Write/WriteStr:向串口寫字符/寫字符串;④OnRxChar:當(dāng)串口接收到數(shù)據(jù)時,觸發(fā)該事件。

        1.3 用ComPort讀串口數(shù)據(jù)的方式

        ComPort提供了2種讀串口數(shù)據(jù)的方式:事件驅(qū)動方式和查詢方式。

        1)事件驅(qū)動方式 用事件驅(qū)動方式對串口操作,響應(yīng)速度快,可靠性高,是一種有效的方式。當(dāng)有串口接收到數(shù)據(jù)的時候,會觸發(fā)ComPort控件的OnRxChar事件,就可以在這個事件中寫處理數(shù)據(jù)的代碼。

        2)查詢方式 查詢方式就是在需要讀取數(shù)據(jù)時,用Com-Port提供的Read或者ReadStr函數(shù)讀串口以獲得接收到的數(shù)據(jù)。

        2 串行通信的實現(xiàn)

        在電機伺服控制器的課題中,PC機作為上位機,通過串行口與多個用MCU實現(xiàn)的下位機進行通信,示意圖如圖1所示。

        圖1 上位機與下位機通信示意圖Fig.1 Schematic diagram of communication between PC and MCU

        用Delphi6編寫上位機的控制程序,用來控制下位機。上位機和下位機之間發(fā)送的數(shù)據(jù)格式如圖2所示。

        圖2 數(shù)據(jù)格式Fig.2 Data format

        每包數(shù)據(jù)的大小最少為4個字節(jié):指令字(2字節(jié));數(shù)據(jù)長度(1 字節(jié));數(shù)據(jù)字(0 字節(jié));校驗值(1 字節(jié))。

        MCU每收到第3個字節(jié)(數(shù)據(jù)長度)后,由“數(shù)據(jù)長度”字節(jié)確定數(shù)據(jù)字的長度和校驗值。校驗值是從指令字的第1個字節(jié)到校驗值之前字節(jié)的異或值。判斷計算得到的校驗值與收到的校驗值是否一致,一致則發(fā)送回應(yīng)信息——數(shù)據(jù)已正常接收;否則不回應(yīng)。

        2.1 串口設(shè)置

        在ComPort控件的屬性欄中設(shè)置串口的主要屬性:BaudRate:=br9600;DataBits:=dbEight。 然后在“打開串口”按鈕的Click事件中打開串口,打開串口的偽代碼如下:

        2.2 讀取下位機的數(shù)據(jù)

        在下面的代碼中aCommandType表示上位機發(fā)給下位機的是地址幀 (TI_Address)、讀取數(shù)據(jù)的命令幀(TI_Command)還是發(fā)送給下位機的數(shù)據(jù)幀(TI_Data)。

        首先上位機發(fā)送讀取數(shù)據(jù)的命令幀給MCU,這個命令幀包括要讀取的參數(shù)代碼。命令幀的具體格式由PackData()函數(shù)實現(xiàn),通信協(xié)議不同,PackData(CommandType:TInfo-Type)函數(shù)的實現(xiàn)也不同,讀取下位機數(shù)據(jù)的偽代碼[6]如下:

        在下面的事件中接收下位機返回的數(shù)據(jù):

        2.3 向下位機發(fā)送數(shù)據(jù)

        其工作原理與從下位機讀取數(shù)據(jù)類似,向下位機發(fā)送數(shù)據(jù)的偽代碼如下:

        3 實驗結(jié)果

        通過上位機和一個下位機進行串行通信試驗,上位機成功獲得了伺服控制器(下位機)的狀態(tài)(伺服電機的速度、轉(zhuǎn)矩和位置偏差等),如圖3所示。

        圖3 上位機與下位機通信獲得的數(shù)據(jù)繪制成的波形圖Fig.3 Graph of MCU status(PC got data from MCU by serial communication)

        4 結(jié) 論

        結(jié)合實際項目,利用第三方控件庫CPort中的控件ComPort在Windows下實現(xiàn)了PC機與單片機的串行通信,并給出了部分實現(xiàn)代碼及結(jié)果。此方案在實際運行過程中,實現(xiàn)了上位機與下位機之間的通信。本文中給出的只是CPort控件庫中的ComPort控件的應(yīng)用,CPort控件庫中還有其他的控件,如 ComLed,TComDataPacket,TcomTerminal等,可以幫助用戶很容易地實現(xiàn)串口通信相關(guān)的其他復(fù)雜的應(yīng)用程序。

        [1]范逸之,陳立元.Delphi與RS-232串行通信控制[M].北京:清華大學(xué)出版社,2002.

        [2]趙蘭濤,蘇彥華.Delphi串口通信技術(shù)與工程實現(xiàn)[M].北京:人民郵電出版社,2004.

        [3]趙曙光.Delphi中利用ComPort元件開發(fā)串行通信程序[J].應(yīng)用科技,2001,28(3):15-16.ZHAO Shu-guang.Development of ComPort by use of Com-Port component in Delphi[J].Applied Science and Technology,2001,28(3):15-16.

        [4]張程志.基于ComPort Library控件的Delphi串行數(shù)據(jù)采集系統(tǒng)的軟件設(shè)計[J].水利科技與經(jīng)濟,2007,13(8):614-615.ZHANG Cheng-zhi.Computer series-port communication technology based on ComPort Library and XSL/B intelligent digital apparatus[J].Water Conservancy Science and Technology and Economy,2007,13(8):614-615.

        [5]張秀德.基于ComPort Library的Delphi串行數(shù)據(jù)采集系統(tǒng)的軟件設(shè)計[J].工業(yè)控制計算機,2004,17(12):53-54.ZHANG Xiu-de.Delphi software design of serial data acquisition system based on comport library[J].Industrial Control Computer,2004,17(12):53-54.

        [6]席一凡.Delphi程序設(shè)計[M].北京:中國鐵道出版社,2008.

        猜你喜歡
        設(shè)置
        中隊崗位該如何設(shè)置
        少先隊活動(2021年4期)2021-07-23 01:46:22
        船舶防火結(jié)構(gòu)及設(shè)置的缺陷與整改
        水上消防(2020年5期)2020-12-14 07:16:18
        中外醫(yī)學(xué)專業(yè)與??圃O(shè)置對比分析及啟示
        特殊場景下列控等級轉(zhuǎn)換的設(shè)置方案
        7招教你手動設(shè)置參數(shù)
        動車段(所)股道有效長設(shè)置研究
        我國中小學(xué)將設(shè)置人工智能相關(guān)課程
        玩具世界(2017年9期)2017-11-24 05:17:29
        吃紙的妖怪
        本刊欄目設(shè)置說明
        中俄臨床醫(yī)學(xué)專業(yè)課程設(shè)置的比較與思考
        在线看片免费人成视频久网下载 | 久久一二区女厕偷拍图| 777国产偷窥盗摄精品品在线 | 精品无码无人网站免费视频| 亚洲色偷偷综合亚洲av伊人| 亚洲AVAv电影AV天堂18禁| 精品精品国产一区二区性色av| 体验区试看120秒啪啪免费| 亚洲日韩欧洲无码av夜夜摸| 亚洲一级电影在线观看| 亚洲女同性恋激情网站| 内射中出日韩无国产剧情| 风间由美性色一区二区三区| 亚洲精品aⅴ无码精品丝袜足| 国产视频免费一区二区| 麻豆亚洲一区| 老熟妇乱子伦av| 2020国产精品久久久久| 日产国产精品亚洲高清| 乱码av麻豆丝袜熟女系列| 鲁一鲁一鲁一鲁一澡| 亚洲不卡av不卡一区二区| 国产精品一区av在线| 日韩乱码人妻无码中文字幕久久| 四虎永久免费影院在线| 国产精品久久国产精品久久| 国产一区二区三区在线综合视频| 亚洲精品无码久久久久秋霞| 91美女片黄在线观看| 久久精品国产一区老色匹| 无码aⅴ精品一区二区三区浪潮 | 日韩精品极品免费在线视频 | 婷婷丁香91| 亚洲综合av一区在线| 免费成人电影在线观看| 人妻丰满熟妇av无码处处不卡| 国产亚洲精品日韩香蕉网| 精品国产一区二区三区av麻| 亚洲日本va中文字幕| 国内精品一区二区2021在线| 美女和男人一起插插插|