C++串⼝通信⽬录
⼀、⽬的:
1、MFC接受串⼝发送来的信号处理事情
⼆、参考
1、MFC显⽰串⼝输⼊信息:
①总结:good:我⾃⼰总结的,⾮常好⽤
1、mfc如何多串⼝编程
①总结:but:失败
1、VS2015找不到ActiveX: Microsoft communication contro
①总结:but:失败
a、VS2015打开没有发现类似选项,可能要下载东西进⾏安装
1、VS2010找不到ActiveX: Microsoft communication contro
①总结:but:失败
1、MFC 串⼝编程详细教程图⽂并茂
1、windows纯C++实现串⼝通信
①总结:but:亲测:运⾏就会报错
1、
①总结:but:失败,没有库
1、
①总结:but:失败
1、c++串⼝通信实例
①总结:good:成功
三、步骤:有缺陷,⽆法读取到⼀些串⼝数据如AA,请参考另⼀篇
1、参考:c++串⼝通信实例
1、运⾏结果
①C++程序和串⼝根据可以实现通信
②main中InitPort总是报错,猜测可能是因为虚拟串⼝导致,但是不影响程序的相互通信
③能够判断输⼊的和预留的字符串是否是相等的
④⽬前这个参考的代码中有缺陷,当输⼊“AA”,代码得到的却是“2A”,所以代码中需要对“2A”进⾏作假,如果为“2A”变为“AA”
2、SerialPort.h
///
这是头⽂件的代码,主要是定义了⼀个类
///
#ifndef SERIALPORT_H_
#define SERIALPORT_H_
#include <process.h>
#include "TChar.h"
#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <Windows.h>
using namespace std;
定园
/** 串⼝通信类
*
* 本类实现了对串⼝的基本操作
* 例如监听发到指定串⼝的数据、发送指定数据到串⼝
*/
typedef enum AxisType
{
AXIS_XX = 2,
AXIS_YY = 3,
AXIS_ZZ = 1,
AXIS_OO = 4,
}AXIS_TYPE;
class CSerialPort
{
苏翊鸣冬奥
public:
CSerialPort(void);
~CSerialPort(void);
不用客气用英语怎么说public:
/** 初始化串⼝函数
*
* @param: UINT portNo 串⼝编号,默认值为1,即COM1,注意,尽量不要⼤于9
* @param: UINT baud 波特率,默认为9600
* @param: char parity 是否进⾏奇偶校验,'Y'表⽰需要奇偶校验,'N'表⽰不需要奇偶校验
* @param: UINT databits 数据位的个数,默认值为8个数据位
* @param: UINT stopsbits 停⽌位使⽤格式,默认值为1
* @param: DWORD dwCommEvents 默认为EV_RXCHAR,即只要收发任意⼀个字符,则产⽣⼀个事件
* @return: bool 初始化是否成功
* @note: 在使⽤其他本类提供的函数前,请先调⽤本函数进⾏串⼝的初始化
* /n本函数提供了⼀些常⽤的串⼝参数设置,若需要⾃⾏设置详细的DCB参数,可使⽤重载函数
* /n本串⼝类析构时会⾃动关闭串⼝,⽆需额外执⾏关闭串⼝
* @e:
*/
//bool InitPort(UINT portNo = 3, UINT baud = CBR_19200, char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR); bool InitPort(UINT portNo, UINT baud, char parity, UINT databits , UINT stopsbits, DWORD dwCommEvents);
/** 串⼝初始化函数
*
* 本函数提供直接根据DCB参数设置串⼝参数
* @param: UINT portNo
夏花儿* @param: const LPDCB & plDCB
* @return: bool 初始化是否成功
* @note: 本函数提供⽤户⾃定义地串⼝初始化参数
* @e:
*/
bool InitPort(UINT portNo, const LPDCB& plDCB);
/** 开启监听线程
*
* 本监听线程完成对串⼝数据的监听,并将接收到的数据打印到屏幕输出
* @return: bool 操作是否成功
* @note: 当线程已经处于开启状态时,返回fla
* @e:
*/
bool OpenListenThread();
*
*
* @return: bool 操作是否成功
* @note: 调⽤本函数后,监听串⼝的线程将会被关闭
* @e:
中外名人名言*/
bool CloListenTread();
/** 向串⼝写数据
*
* 将缓冲区中的数据写⼊到串⼝
* @param: unsigned char * pData 指向需要写⼊串⼝的数据缓冲区
* @param: unsigned int length 需要写⼊的数据长度
* @return: bool 操作是否成功
* @note: length不要⼤于pData所指向缓冲区的⼤⼩
* @e:
*/
bool WriteData(unsigned char *pData, int length);
/** 获取串⼝缓冲区中的字节数
*
*
* @return: UINT 操作是否成功
酿酒坊* @note: 当串⼝缓冲区中⽆数据时,返回0
* @e:
*/
UINT GetBytesInCOM();
警句名言
/*UINT WriteData1(unsigned long long int *pData1, unsigned int length);*/
财鱼
/** 读取串⼝接收缓冲区中⼀个字节的数据
*
*
* @param: char & cRecved 存放读取数据的字符变量
* @return: bool 读取是否成功
* @note:
* @e:
*/
bool ReadChar(unsigned char &cRecved);
unsigned char *MotorMoveXY(unsigned char x, unsigned char y);//xy相对移动 unsigned char *StopMotor(unsigned char sm1);
unsigned char *SetSpeed(AXIS_TYPE enAxisType, int speed);
unsigned char *SetRunSpeed(int TY, int speed);
private:
/** 打开串⼝
*
*
* @param: UINT portNo 串⼝设备号
* @return: bool 打开是否成功
* @note:
* @e:
*/
bool openPort(UINT portNo);
/** 关闭串⼝
*
*
* @return: void 操作是否成功
* @note:
* @e:
*/
void CloPort();