串列埠通訊 (轉)
mmm的使用:namespace prefix = o ns = "urn:schemas--com::office" />
使用VC++提供的通訊控制元件MSComm 首先,在對話方塊中建立通訊控制元件,若Control工具欄中缺少該控制元件,可透過選單Project --> Add to Project --> Components and Control插入即可,再將該控制元件從工具箱中拉到對話方塊中。此時,你只需要關心控制元件提供的對 通訊的 的介面。換句話說,只需要設定和監視MSComm控制元件的屬性和事件。
開啟所需串列埠後,需要考慮串列埠通訊的時機。在接收或傳送資料過程中,可能需要監視並響應一些事件和錯誤,所以事件驅動是處理串列埠互動作用的一種非常有效的方法。使用 OnComm 事件和 CommEvent 屬性捕捉並檢查通訊事件和錯誤的值。發生通訊事件或錯誤時,將觸發 OnComm 事件,CommEvent 屬性的值將被改變,應用程式檢查 CommEvent 屬性值並作出相應的反應
// 若是在SDI中使用該控制元件則要下兩句,在對話方塊程式中該語句有MFC自己建立
// 所以不用人為新增
D style=WS_VISIBLE;
m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1);
// 串列埠控制元件的初始化
DWORD style=WS_VISIBLE;
m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1);
if(m_MSComm.GetPortOpen()) //如果串列埠是開啟的,則行關閉串列埠
{
m_MSComm.SetPortOpen(FALSE);
}
m_MSComm.SetCommPort(1); //選擇COM1
m_MSComm.SetInBufferSize(1024); //接收緩衝區
m_MSComm.SetOutBufferSize(1024);//傳送緩衝區
m_MSComm.SetInputLen(0);//設定當前接收區資料長度為0,表示全部讀取
m_MSComm.SetInputMode(1);//以二進位制方式讀寫資料
m_MSComm.SetRThreshold(1);//接收緩衝區有1個及1個以上字元時,將引發接收資料的OnComm事件
m_MSComm.SetSettings("9600,n,8,1");//波特率9600無檢驗位,8個資料位,1個停止位
if(!m_MSComm.GetPortOpen())//如果串列埠沒有開啟則開啟
m_MSComm.SetPortOpen(TRUE);//開啟串列埠
else
m_MSComm.SetOutBufferCount(0);
// 控制元件事件的響應宣告
// *.h
//{{AFX_MSG(CGolfView)
afx_msg BOOL OnComm();
DECLARE_EVENTSINK_MAP()
//}}AFX_MSG
// *.cpp
BEGIN_EVENTSINK_MAP(CGolfView, CView)
//{{AFX_EVENTSINK_MAP(CAboutDlg)
ON_EVENT(CGolfView, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
// 控制元件事件的響應
BOOL CGolfView::OnComm()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //設定BYTE陣列 An 8-bit integerthat is not signed.
CString strtemp;
switch(m_MSComm.GetCommEvent())
{
case 1: // comEvSend傳送資料
break;
case 2: // comEvReceive讀取資料
// MessageBox(_T("讀取資料事件"), _T("TRACE"), MB_OK);
variant_inp=m_MSComm.GetInput(); //讀緩衝區
safearray_inp=variant_inp; //VARIANT型變數轉換為ColeSafeArray型變數
len=safearray_inp.GetOneDimSize(); //得到有效資料長度
// 接受資料
for(k=0; k { safearray_inp.GetElement(&k,rxdata+k); //轉換為BYTE型陣列 BYTE bt=*(char*)(rxdata+k); //字元型 strtemp.Format("%c",bt); //將字元送入臨時變數strtemp存放 recd+=strtemp; } // UpdateData(TRUE); break; default: // 傳輸事件出錯 m_MSComm.SetOutBufferCount(0); break; } UpdateData(FALSE); //圖象內容 return TRUE; }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-974871/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 串列埠通訊串列埠
- Android 串列埠通訊Android串列埠
- linux 串列埠通訊Linux串列埠
- 11. 串列埠通訊串列埠
- (10)uart串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- 串列埠通訊協議串列埠協議
- 通過串列埠進行通訊 :串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 串列埠無法正常通訊串列埠
- C# SerialPort 串列埠通訊C#串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 安卓串列埠通訊疑問安卓串列埠
- ROS環境下串列埠通訊ROS串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- 小型plc串列埠通訊簡介串列埠
- C# 串列埠通訊利器 SerialPortStream庫C#串列埠
- STM32串列埠通訊串列埠
- STMF4串列埠通訊使用串列埠
- 串列埠通訊與其他通訊方式相比有什麼優勢?串列埠
- 串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發串列埠C#
- ros中使用serial包實現串列埠通訊ROS串列埠
- 打工筆記--------------------------c#實現串列埠通訊筆記C#串列埠
- C#實現掃碼槍串列埠通訊C#串列埠
- Arduino下的STM32的串列埠通訊UI串列埠
- 有沒有大佬玩過串列埠通訊啊?串列埠
- 樹莓派已經通過網路連線通過串列埠通訊在串列埠除錯小助手列印與操作樹莓派串列埠除錯
- 串列埠通訊上位機資料傳輸協議串列埠協議
- 基於WebSocket的modbus通訊(三)- websocket和串列埠Web串列埠
- Java實現RS485串列埠通訊Java串列埠
- 一種MODBUS RTU擴充套件串列埠通訊協議套件串列埠協議
- 串列埠通訊常見的錯誤和故障排除方法串列埠
- 定位模組LuatOS快速入門:源UART串列埠通訊串列埠
- 使用Modbus4J進行RTU模式串列埠通訊模式串列埠
- 張高興的 MicroPython 入門指南:(三)使用串列埠通訊Python串列埠
- 超級乾貨!Air780E的串列埠通訊分享AI串列埠
- 初步使用Ardunio IDE實現STM32的串列埠通訊IDE串列埠
- 如何使用Java串列埠進行資料通訊及應用案例Java串列埠
- 52微控制器使用T2串列埠通訊串列埠