原創串口類庫v2的使用範例,很簡單,高手勿入

#pragma warning(disable: 4530)
#pragma warning(disable: 4786)
#include <iostream>
#include <exception>

using namespace std;
#include <winsock2.h>
#include <windows.h>
#include "cnComm.h"

//以下程序是每500ms送一次數據從COM1 到 COM2
//我沒有實際測試, 不在單位, 沒連接線
//不過我相信沒問題
//接收數據是在線程中

class MyComm : public cnComm//從cnComm擴展,自己處理 接受數據的
{
public:
 //這是cnComm的虛函數, 供監視線程調用的, 監視線程一收到數據就會調用這個函數
 //如果你是桌面應用就要發送自定義的窗口消息, 這是我在cnComm中默認用法
 virtual void OnReceive()
 {
  char Buffer[256];
  if(Read(Buffer, 256))//從串口讀數據 並打印在控制檯窗口
   cout << "Receive Data Form " << _dwPort << " : " << Buffer << endl;
 }
};
int main(int argc, char *argv[])
{
 try
 {
  //測試將PC的COM1 COM2相連測試
  cnComm Com1(false, 0);//阻塞 串口1 用來發送數據
  Com1.Open(1, 1200);//波特率1200

  MyComm Com2;//繼承擴展使用 非阻塞 串口2 用來接受數據
  Com2.Open(2, 1200);
  char Buffer[100] = {0};
  
  for(int i = 0; i < 10; i++)
  {
   Sleep(500);//每500ms送一次

   sprintf(Buffer, "這是第%d組數據 From COM1", i + 1);
   //這裏如果用異步,即非阻塞的讀寫方式, 函數會立即返回, 並且返回發送的字節數爲0
   //實際的發送在系統的後臺進行
   //我這裏用的是阻塞方式,爲的是你可以看到發送的過程, 和發送的字節數;
   //實際應用中一般用非阻塞(異步)的方式
   cout << "COM1 Send Data " << Com1.Write(Buffer) << " Byte."<< endl;
  }
  Sleep(500);
  cout << "Exit..." << endl;
  Com1.Close();
 }
 catch(exception &e)
 {
  cout << e.what() << endl;
 }
 return 0;
}
發佈了30 篇原創文章 · 獲贊 5 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章