本人的课题是基于VC串口通信的温控系统,如何才能很好的实现VC串口与PC机和传感器以及其他串口之间的通信呢

解决方案 »

  1.   

    把波特率,停止位,校验位,数据位设置好,直接进行通信就好了。比如发个0X00给PC,PC就弹出一个窗口,PC发个0X00给下位机,下位机就流水灯
      

  2.   

    网上一把一把的
    #pragma once
    #include <Windows.h>
    #include "Defines.h"
    #include "DbConnection.h"
    #include "Comm.h"
    #include "stdafx.h"
    class Comm
    {
    private: HANDLE m_hComm;// 串口设备句柄 public: Comm(void);
    public:
    ~Comm(void); public:
    BOOL OpenComm(wchar_t* pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits);
    BOOL CloseComm();
    int ReadComm(void* pData, int nLength);
    int WriteComm(void* pData, int nLength);
    };
      

  3.   

    我的代码 用过C就能看懂
    #include "StdAfx.h"
    #include "Comm.h"Comm::Comm()
    {
    m_hComm=NULL;
    }Comm::~Comm()
    {
    m_hComm=NULL;
    }// 打开串口
    // 输入: pPort - 串口名称或设备路径,可用"COM1"或"\\.\COM1"两种方式,建议用后者
    //       nBaudRate - 波特率
    //       nParity - 奇偶校验
    //       nByteSize - 数据字节宽度
    //       nStopBits - 停止位
    BOOL Comm::OpenComm(wchar_t * pPort, int nBaudRate, int nParity, int nByteSize, int nStopBits)
    {
    DCB dcb; // 串口控制块
    COMMTIMEOUTS timeouts = { // 串口超时控制参数
    100, // 读字符间隔超时时间: 100 ms
    1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
    500, // 基本的(额外的)读超时时间: 500 ms
    1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
    100}; // 基本的(额外的)写超时时间: 100 ms m_hComm = CreateFile(pPort, // 串口名称或设备路径
    GENERIC_READ | GENERIC_WRITE, // 读写方式
    0, // 共享方式:独占
    NULL, // 默认的安全描述符
    OPEN_EXISTING, // 创建方式
    0, // 不需设置文件属性
    NULL); // 不需参照模板文件 if(m_hComm == INVALID_HANDLE_VALUE) return FALSE; // 打开串口失败 GetCommState(m_hComm, &dcb); // 取DCB dcb.BaudRate = nBaudRate;
    dcb.ByteSize = nByteSize;
    dcb.Parity = nParity;
    dcb.StopBits = nStopBits; SetCommState(m_hComm, &dcb); // 设置DCB SetupComm(m_hComm, 4096, 1024); // 设置输入输出缓冲区大小 SetCommTimeouts(m_hComm, &timeouts); // 设置超时 return TRUE;
    }// 关闭串口
    BOOL Comm::CloseComm()
    {
    return CloseHandle(m_hComm);
    }// 写串口
    // 输入: pData - 待写的数据缓冲区指针
    //       nLength - 待写的数据长度
    // 返回: 实际写入的数据长度
    int Comm::WriteComm(void* pData, int nLength)
    {
    DWORD dwNumWrite; // 串口发出的数据长度 WriteFile(m_hComm, pData, (DWORD)nLength, &dwNumWrite, NULL); return (int)dwNumWrite;
    }// 读串口
    // 输入: pData - 待读的数据缓冲区指针
    //       nLength - 待读的最大数据长度
    // 返回: 实际读出的数据长度
    int Comm::ReadComm(void* pData, int nLength)
    {
    DWORD dwNumRead; // 串口收到的数据长度 ReadFile(m_hComm, pData, (DWORD)nLength, &dwNumRead, NULL); return (int)dwNumRead;
    }
      

  4.   

    这个说起来就长了,主要还是要了解几个串口API
      

  5.   

    网上下载一个开源的CSerialPort的类,自己看看就会了。
      

  6.   

    百度:VC MSComm 会有一堆的