1. 程式人生 > >VC串列埠程式設計的例項1

VC串列埠程式設計的例項1

  本例程採用同步串列埠操作,我們只介紹軟體部分,RS485介面接線方法不作介紹,感興趣的讀者可以查閱相關資料。

  開啟VC++6.0,新建基於對話方塊的工程RS485Comm,在主對話方塊視窗IDD_RS485COMM_DIALOG上新增兩個按鈕,ID分別為IDC_SEND和IDC_RECEIVE,標題分別為“傳送”和“接收”;新增一個靜態文字框IDC_DISP,用於顯示串列埠接收到的內容。

1. 新增全域性變數

在RS485CommDlg.cpp檔案中新增全域性變數

HANDLE hCom;  //全域性變數,串列埠控制代碼

2. 初始化串列埠引數

在RS485CommDlg.cpp檔案中的OnInitDialog()函式新增如下程式碼

// TODO: Add extra initialization here
hCom=CreateFile("COM1",//COM1口
GENERIC_READ|GENERIC_WRITE, //允許讀和寫
    0, //獨佔方式
    NULL,
    OPEN_EXISTING, //開啟而不是建立
    0, //同步方式
    NULL);
if(hCom==(HANDLE)-1)
{
    AfxMessageBox("開啟COM失敗!");
    return FALSE;
}

COMMTIMEOUTS TimeOuts;
//設定讀超時
TimeOuts.ReadIntervalTimeout=
MAXDWORD; TimeOuts.ReadTotalTimeoutMultiplier=0; TimeOuts.ReadTotalTimeoutConstant=0; //在讀一次輸入緩衝區的內容後讀操作就立即返回, //而不管是否讀入了要求的字元。 //設定寫超時 TimeOuts.WriteTotalTimeoutMultiplier=100; TimeOuts.WriteTotalTimeoutConstant=500; SetCommTimeouts(hCom,&TimeOuts); //設定超時 DCB dcb; GetCommState(hCom,&dcb); dcb.BaudRate=
9600; //波特率為9600 dcb.ByteSize=8; //每個位元組有8位 dcb.Parity=NOPARITY; //無奇偶校驗位 dcb.StopBits=TWOSTOPBITS; //兩個停止位 SetCommState(hCom,&dcb); PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);

3. 添加發送和接收函式

分別雙擊IDC_SEND按鈕和IDC_RECEIVE按鈕,新增兩個按鈕的響應函式

//傳送串列埠資訊
void CRS485CommDlg::OnSend() 
{
    // TODO: Add your control notification handler code here
    // 在此需要簡單介紹百特公司XMA5000的通訊協議:
    //該儀表RS485通訊採用主機廣播方式通訊。
    //序列半雙工,幀11位,1個起始位(0),8個數據位,2個停止位(1)
    //如:讀儀表顯示的瞬時值,主機發送:DC1 AAA BB ETX
    //其中:DC1是標準ASCII碼的一個控制符號,碼值為11H(十進位制的17)
    //在XMA5000的通訊協議中,DC1表示讀瞬時值
    //AAA是從機地址碼,也就是XMA5000顯示儀表的通訊地址
    //BB為通道號,讀瞬時值時該值為01
    //ETX也是標準ASCII碼的一個控制符號,碼值為03H
    //在XMA5000的通訊協議中,ETX表示主機結束符

    char lpOutBuffer[7];
    memset(lpOutBuffer,''\0'',7); //前7個位元組先清零
    lpOutBuffer[0]=''\x11'';  //傳送緩衝區的第1個位元組為DC1
    lpOutBuffer[1]=''0'';  //第2個位元組為字元0(30H)
    lpOutBuffer[2]=''0''; //第3個位元組為字元0(30H)
    lpOutBuffer[3]=''1''; // 第4個位元組為字元1(31H)
    lpOutBuffer[4]=''0''; //第5個位元組為字元0(30H)
    lpOutBuffer[5]=''1''; //第6個位元組為字元1(31H)
    lpOutBuffer[6]=''\x03''; //第7個位元組為字元ETX
    //從該段程式碼可以看出,儀表的通訊地址為001 
    DWORD dwBytesWrite=7;
    COMSTAT ComStat;
    DWORD dwErrorFlags;
    BOOL bWriteStat;
    ClearCommError(hCom,&dwErrorFlags,&ComStat);
    bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,&dwBytesWrite,NULL);
    if(!bWriteStat)
    {
        AfxMessageBox("寫串列埠失敗!");
    }
}

//接收串列埠資訊
void CRS485CommDlg::OnReceive() 
{
    // TODO: Add your control notification handler code here
    char str[100];
    memset(str,''\0'',100);
    DWORD wCount=100;//讀取的位元組數
    BOOL bReadStat;
    bReadStat=ReadFile(hCom,str,wCount,&wCount,NULL);
    if(!bReadStat)
    {
        AfxMessageBox("讀串列埠失敗!");
    }
    PurgeComm(hCom, PURGE_TXABORT|
    PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
    m_disp=str;
    UpdateData(FALSE); 
}

4. 關閉串列埠

  您可以觀察返回的字串,其中有和儀表顯示值相同的部分,您可以進行相應的字串操作取出儀表的顯示值。
  開啟ClassWizard,為靜態文字框IDC_DISP新增CString型別變數m_disp,同時新增WM_CLOSE的相應函式:

void CRS485CommDlg::OnClose() 
{
    // TODO: Add your message handler code here and/or call default
    CloseHandle(hCom); //程式退出時關閉串列埠
    CDialog::OnClose();
}

  程式的相應部分已經在程式碼內部作了詳細介紹。連線好硬體部分,編譯執行程式,細心體會串列埠同步操作部分。

相關推薦

VC串列程式設計例項1

  本例程採用同步串列埠操作,我們只介紹軟體部分,RS485介面接線方法不作介紹,感興趣的讀者可以查閱相關資料。   開啟VC++6.0,新建基於對話方塊的工程RS485Comm,在主對話方塊視窗IDD_RS485COMM_DIALOG上新增兩個按鈕,ID分別

VC串列程式設計例項2

  本例程採用非同步串列埠操作,我們只介紹軟體部分,RS485介面接線方法不作介紹,感興趣的讀者可以查閱相關資料。   開啟VC++6.0,新建基於對話方塊的工程RS485Comm,在主對話方塊視窗IDD_RS485COMM_DIALOG上新增兩個按鈕,ID分

Linux下的串列程式設計例項

親測可用,移植時根據需求修改即可,轉載自:http://blog.csdn.net/w282529350/article/details/7378388 //串列埠相關的標頭檔案 #include<stdio.h> /*標準輸入輸出定義*/ #

深入淺出VC++串列程式設計之基於控制元件

1.MSComm控制元件  Visual C++為我們提供了一種好用的ActiveX控制元件Microsoft Communications Control(即MSComm)來支援應用程式對串列埠的訪問,在應用程式中插入MSComm控制元件後就可以較為方便地實現對通

Vc 串列程式設計 Win32 控制元件

  在工業控制中,工控機(一般都基於Windows平臺)經常需要與智慧儀表通過串列埠進行通訊。串列埠通訊方便易行,應用廣泛。 一般情況下,工控機和各智慧儀表通過RS485匯流排進行通訊。RS485的通訊方式是半雙工的,只能由作為主節點的工控PC機依次輪詢網路上的各智慧控

深入淺出VC++串列程式設計之基本概念

  除錯工具  在MS-DOS下使用的程式設計環境是TC 2.0;  在Windows 2000下的程式設計環境是VC++ 6.0;  藉助工具:串列埠除錯助手2.1(圖8)。 圖8 串列埠除錯助手   串列埠除錯助手是由《Visual C++/Turbo C串列埠通訊程式設計實踐》一書作者龔建偉編寫的

Windows下C++ 串列程式設計例項

原文連結:http://blog.sina.com.cn/s/blog_afb1793101016mq2.html 1. 本例子使用了比較規範的軟體設計方法,類的設計具有比較好的可擴充套件性和移植性、程式碼的註釋採用doxgen支援的javaDoc風格。 2. 為了能方

深入淺出VC++串列程式設計之DOS的串列程式設計

/* Name : Sample Comm's Program - 1024 Byte Buffer - buff1024.c *//* Written By : Craig Peacock <[email protected]> */#include <dos.h>#inc

深入淺出VC++串列程式設計之簡訊應用開發

前面數次連載我們以較長的篇幅講解了串列埠通訊的硬體原理、DOS平臺控制以及基於WIN32 API、控制元件和第三方類的串列埠程式設計。作為本系列文章的最後一次連載,本章將給出一個典型的應用例項:西門子簡訊服務模組TC35

深入淺出VC++串列程式設計--簡訊應用開發

前面數次連載我們以較長的篇幅講解了串列埠通訊的硬體原理、DOS平臺控制以及基於WIN32 API、控制元件和第三方類的串列埠程式設計。作為本系列文章的最後一次連載,本章將給出一個典型的應用例項:西門子簡訊服務模組TC35的串列埠控制。  1.簡訊控制終端  作為簡訊 (Sho

20160426 VC++(VS2013)串列程式設計圖文教程(MSComm的使用)

1、新建MFC對話方塊工程如下 2、給編輯框控制元件新增變數,其中Edit Box新增Value變數,Button新增Control變數,ID和變數分別為: IDC_BTNOPEN()     

VC++串列通訊程式設計詳解

總結來看串列埠通訊原理,(也可以說大多數通訊原理也是如此)。 通訊首先要有個通訊,可以簡單的把通訊看成一個小桶,傳送方住水桶裡裝水,接收方從水桶中取水。如果你要和對方通訊首先需要將桶蓋開啟,再將水

linux下串列程式設計設定函式---------set_opt(fd1,115200,8,'N'1)--------------------

open /dev/ttys0, 裝置檔案之後,得到檔案描述符, 對串列埠進行設定。 /** *串列埠設定函式:例(fd1, 115200, 8, 'N', 1); *引數: *fd:串列埠裝置節點

基於VC++的串列程式設計

序列通訊介面標準有多個版本,但是基本上都是在RS-232標準的基礎上發展而來。RS-232C標準時美國EIA和BELL等公司一起開發並於1969年公佈的通訊協議。1997年TIA發不了最新的一個版本,命名為TIA/EIA-232-F。ITU和CCITT釋出了一個類似的標準-V

Linux串列程式設計教程(三)——串列程式設計詳(原始碼)解:http://blog.csdn.net/u011192270/article/details/48174353 Linux下的串列程式設計(二)----(圖文並茂,講解深刻)http://blog.csdn.net/w28252

Linux串列埠程式設計教程(三)——串列埠程式設計詳(原始碼)解:http://blog.csdn.net/u011192270/article/details/48174353 Linux下的串列埠程式設計(二)----(圖文並茂,講解深刻)http://blog.csdn.ne

Linux串列程式設計詳解 linux串列相關設定函式

tcgetattr    函式用於獲取與終端相關的引數。引數fd為終端的檔案描述符,返回的結果儲存在termios 結構體中 http://baike.baidu.com/view/5644808.htm?fr=aladdin tcset

Linux C++串列程式設計 ROS

串列埠簡介                     序列介面(Serial port)又稱“序列埠”,主要用於序列式逐位資料傳輸。常見的有一般計算機應用的

MFC串列通訊例項

參考MSComm控制元件的用法和函式說明。裡面講得也算詳細了。所以這裡直接獻上原始碼示例。 github下載地址 CSDN下載地址 效果如圖: 需要注意的是: 1.如果想同時recv/send,則必須加個執行緒。 2.奇偶校驗中,引數設定為,無(n),偶校驗(o),

Linux串列程式設計

串列埠通訊是指一次只傳送一個數據位。雖然在通訊的時候串列埠有 8 位或者 9 位等,但是在物理層面傳輸的時候,它仍然是以單個 bit 的方式傳輸的 一般特指 RS232 標準的介面 在 linux 下串列埠程式設計流程如下: 開啟串列埠 核心是用op

Android之串列程式設計

閱讀時長:10分鐘 原文地址:juejin.im/post/5bd96c… 原文作者:YKamh 技術預備:Java基礎 如今我們生活中充滿了各種智慧裝置,方便了我們的生活,這正是物聯網時代。如果我們要開發智慧裝置,那麼Android串列埠程式設計是我們應該必備的技能。 在投身到An