国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C++Builder的PC機與單片機串口通信的實現(xiàn)

2012-10-20 08:35:54張利利李曉京胡文東
微型電腦應用 2012年9期
關鍵詞:PC機下位通信協(xié)議

張利利,李曉京,胡文東,李 婭

0 引言

串行口是計算機與外部設備之間進行數(shù)據(jù)交換的重要介質,所以串行通信在工程中有著廣泛的應用。這種通信的實現(xiàn),經常要組成上位機為PC機而下位機為單片機的二級系統(tǒng), 通過RS232 進行通信【1】。筆者結合某人體重心測試系統(tǒng),詳細介紹在C++ Builder中實現(xiàn)PC機與單片機串行通信的方法。

1 串行口通信

串行通信是指數(shù)據(jù)是一位一位按順序傳送的通信方式。它有兩種基本的通信方式:異步通信和同步通信【2】。本系統(tǒng)采用的是異步通信,所以在此只對異步通信做簡要介紹。

1.1 異步串行通信

異步串行通信時,每個字符作為一個獨立的信息,可以隨機出現(xiàn)在數(shù)據(jù)流中。為確保異步通信的正確性,必須找到一種方法,使通信雙方在隨機傳送的字符內部實現(xiàn)同步。這種方法就是在字符格式中設置起始位和停止位,即在一個字符正式發(fā)送之前先發(fā)一個起始位,該字符結束時再發(fā)一個停止位。接收器檢測到起始位便知道字符到達并開始接收字符,檢測到停止位則知道字符傳輸已結束。由于這種通信協(xié)議是靠起始位和停止位來實現(xiàn)字符內部同步的,所以有時也稱為起止式協(xié)議。

1.2 單片機與計算機相連

普通的單片機都是通過 RS232C串行口信號線與計算機相連??紤]到通信程序之間采用軟件握手以及降低編寫PC與單片機的程序的復雜性,PC與單片機之間的連接只采用了RS232接口中的3根線,即RXD,TXD,GND。因為由PC出來的是RS232電平,而單片機是典型的TTL電平,因此在PC與單片機的連接中必須要有電平轉換電路,此處采用的是MAX232電平轉換電路。PC數(shù)據(jù)發(fā)送是通過TXD口經過一個電平轉換電路連接到單片機的RXD端,而接收數(shù)據(jù)是由RXD經過一個電平轉換電路連接到單片機的TXD口,如圖1所示:

圖1 PC機與單片機的連接

2 通信的程序設計

本次設計中,以一個人體重心測控系統(tǒng)為背景,給出單片機部分和C++ Builder環(huán)境下的通信程序實例,通信協(xié)議采用全雙工異步串行通信方式,通過RS232的RTS信號進行收發(fā)轉換,傳輸數(shù)據(jù)采用16進制數(shù)據(jù),PC機與單片機之間采用主從式通訊。

2.1 通信協(xié)議

串口通訊能有條不紊地進行,依賴于串口通訊協(xié)議的制定。串口通訊協(xié)議分為底層通訊協(xié)議和用戶層協(xié)議。底層協(xié)議一般由計算機硬件提供商和設備廠家提供,而用戶層協(xié)議則是指數(shù)據(jù)以何種格式發(fā)送出去,或如何從接收到的某種格式的數(shù)據(jù)中提取需要的數(shù)據(jù)等,本系統(tǒng)采用的用戶層協(xié)議是自主定義的通信協(xié)議【3】,具體如下:

(1)波特率19200bps,1個起始位,8個數(shù)據(jù)位,1個停止位,無奇偶校驗。實際通信中,PC機和下位機發(fā)送的數(shù)據(jù),都帶有一個起始字和結束字,可以增加它的抗干擾性,當下位機發(fā)送過來的數(shù)據(jù)亂了之后,上位機能立即檢測出來,并將亂了的那塊數(shù)據(jù)包扔掉,重新開始尋找下一個帶有起始字和結束符的一組完整數(shù)據(jù),這樣就能確保數(shù)據(jù)傳輸?shù)目煽啃浴?/p>

(2)通信采用主從式,即PC機主動發(fā)送命令給單片機,單片機根據(jù)命令進行相應的動作;所有發(fā)送的數(shù)據(jù)均采用16進制數(shù)(注:OxA1即16進制數(shù)A1)。PC機和下位機都采用定長的數(shù)據(jù)格式進行數(shù)據(jù)的發(fā)送,上位機和下位機首先只需判斷起始字是否為通信協(xié)議所規(guī)定的起始字,若是,才進行下一步的操作;否則就不用對它進行任何操作。這樣就確保了通信的高效性。

(3)通信數(shù)據(jù)幀格式

起始符:1個字節(jié),標識一次發(fā)送的開始,PC機默認的A1,下位機默認的為B1;

命令:3個字節(jié),區(qū)分不同的操作;

結束符:1個字節(jié),標識一次發(fā)送的結束,默認的為13;

預留符:1個字節(jié),增加程序的可擴充性。

本系統(tǒng)的詳細命令與數(shù)據(jù)格式如下:

握手:上位機發(fā)送A12000010013

下位機回復: B1000000000000000000000013

開始測試:

無剩余能力測試時上位機發(fā)送:A12004000113,其中的01表示本次進行無剩余能力測試。

有剩余能力測試時上位機發(fā)送:A12004000213,其中的02表示本次進行有剩余能力的測試。

下位機根據(jù)第3、4個字節(jié)確定要發(fā)送多少組數(shù)據(jù)給PC機,根據(jù)第5個字節(jié)確定要采集那些數(shù)據(jù)發(fā)送給PC機。

結束測試:上位機連續(xù)3次發(fā)送命令A12000000413,其中的04表示結束本次測試。

2.2 上位機的通信程序設計

上位機的通信程序作為整個系統(tǒng)中的主機,肩負著系統(tǒng)數(shù)據(jù)分析、指令下達,同時提供信息系統(tǒng)管理功能的多重任務。因此我們選擇具有多任務的操作方式、良好的用戶界面和強大的數(shù)據(jù)庫管理功能的C++ Builder作為上位機的開發(fā)軟件。在C++ Builder中實現(xiàn)串口通信的方法有多種,利用MSComm ActiveX控件(它的支持文件:MSComm32.OCX,需注冊) ,可以非常方便地創(chuàng)建串行通信應用程序,但其程序執(zhí)行效率不夠高,并且無法應用串行通信的一些底層功能。還可利用一種以Microsoft Communications Control(version 6)為基礎的串口類CSerialPort,該串口類將API和ActiveX控件結合起來,以API編程的靈活性彌補了C++Builder中串口控件的不足。

下面就詳細介紹如何利用串口通信類CSerialPort來實現(xiàn)PC機與單片機的通信。 它的工作流程及在本系統(tǒng)的應用如下:

上位機程序工作流程如下:首先設置好串口參數(shù),再開啟串口監(jiān)測工作線程,串口監(jiān)測工作線程監(jiān)測到串口接收到的數(shù)據(jù)、流控制事件或其他串口事件后,就以消息方式通知主程序,激發(fā)消息處理函數(shù)來進行數(shù)據(jù)處理,這是對接收數(shù)據(jù)而言;發(fā)送數(shù)據(jù)可以直接發(fā)送。

1)首先在應用程序的工程中添加該類,同時要包含該類的定義文件“SerialPort.h”,手工添加#include “SerialPort.h”;

2) 自動搜索PC機上有效的串行端口。一般的PC機最多可擴展到128個串口,但是最常用的是前面10個串口,所以本系統(tǒng)只搜索前面10個串口號。首先聲明一個指向CSerialPort類的指針CSerialPort *Comm,然后利用InitPort函數(shù)對1-10號串口逐一進行初始化。如果初始化成功則為當前PC機上的有效串口,并將該串口號保存在變量中。

3)打開通信端口,進行數(shù)據(jù)的傳輸:

4)關閉通信端口,釋放系統(tǒng)資源。在完成串行通信操作后,應該將串行通信端口的資源歸還給操作系統(tǒng);

2.3 下位機的通信程序設計

STC系列單片機具有采集速度快,帶有8路的10位的A/D轉換,價格便宜等優(yōu)點。所以本系統(tǒng)采用的單片機為STC12C5412AD ,振蕩頻率為22.1184MHz,串口工作于方式1,定時/計數(shù)器1用作波特率發(fā)生器,PCON 中的SMOD位為0,發(fā)送的波特率為19200。下位機端通信程序采用C51編程語言在KeilC51環(huán)境下開發(fā)的,通信流程,如圖2所示:

圖2 單片機通信流程圖

3 結束語

利用C++ Builder作為軟件開發(fā)平臺,通過API函數(shù)實現(xiàn)PC機與單片機之間的串口通信,該系統(tǒng)經過調試,運行穩(wěn)定可靠,已成功應用到人體重心測試系統(tǒng)中。本方法實現(xiàn)簡單,通用性好,只要稍加改動就能應用到其他的系統(tǒng)中。

[1]湯勃,徐立偉,饒潤生.基于VB的PC機與單片機串行通信程序設計.[j]武漢理工大學學報.2002年 26卷第4期.534~536.

[2]李朝青.PC機與單片機數(shù)據(jù)通信技術.[M]北京航空航天大學出版社.1999.

[3]黃良沛,黃昕,陽小燕.Delphi環(huán)境中利用MSCOMM實現(xiàn)PLC與上位機的串口通信.[j]計算機應用與軟件.2005年第22卷第4期.125~127.

猜你喜歡
PC機下位通信協(xié)議
發(fā)射機房監(jiān)控系統(tǒng)之下位機
基于PC機與單片機的多機通信技術及抗干擾方法
基于Z-Stack通信協(xié)議棧的紅外地溫采集電路設計
基于三菱FXPLC的感應淬火機床與PC機的串行通信實現(xiàn)
VC.NET下實現(xiàn)dsPIC單片機與PC機的通信
電子制作(2017年23期)2017-02-02 07:16:47
景洪電廠監(jiān)控系統(tǒng)下位機數(shù)據(jù)傳輸網絡改造
基于DMX512通信協(xié)議的多路轉發(fā)器設計與研究
圍觀黨“下位”,吐槽帝“登基”
北京紀事(2016年5期)2016-05-07 13:17:02
基于NS-3的PLC多頻通信協(xié)議仿真平臺設計與實現(xiàn)
電測與儀表(2016年2期)2016-04-12 00:24:52
CAN總線并發(fā)通信時下位機應用軟件設計
马公市| 巩义市| SHOW| 垦利县| 湖州市| 阿巴嘎旗| 高尔夫| 唐河县| 南投县| 信丰县| 湄潭县| 和林格尔县| 财经| 濮阳县| 宜宾县| 南陵县| 枝江市| 登封市| 崇左市| 沁源县| 方山县| 陵川县| 五台县| 曲阳县| 奈曼旗| 娱乐| 雅江县| 沅陵县| 休宁县| 林芝县| 张家界市| 泰州市| 南和县| 思茅市| 白城市| 彭山县| 阿拉善右旗| 湟中县| 徐州市| 松阳县| 五原县|