C++实现RS485通信

180it 2022-03-05 PM 1208℃ 0条

1、虚拟串口配置,使用虚拟串口助手配置虚拟串口,注:选择一个未被使用的串口进行实验
20210721132324601.png

 虚拟串口配置程序下载地址:https://download.csdn.net/download/wangzhiyang925/20395464


模拟串口收发配置程序下载:https://download.csdn.net/download/wangzhiyang925/20395980
20210721133650381.png
COM10发送消息:端口号选择COM10、波特率设置:115200、设置定时发送
3.png
再开启一个接收串口,设置端口号:COM11、波特率:115200

以上设置成功后,发送端开始发送,接收端可以正常接收

以下是代码实现数据接收:

#pragma once
#include <stdlib.h>
#include <wtypes.h>
#include <windows.h>
#include <stdio.h>
#include <cstdint>
#include <string>
#include <vector>
 
using namespace std;
 
 
int main() {
 
    /*
    //RS485通信,串口接收数据
    */
    //查看所有串口信息
    vector<string> strCom;
    char strTemp[255];
    HANDLE hCom;
    for (int i = 0; i < 255; i++)
    {
        //strTemp.Format("\\\\.\\COM%d", i + 1);
        sprintf(strTemp, "\\\\.\\COM%d", i + 1);
        hCom = CreateFile(strTemp, 0, 0, 0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if (INVALID_HANDLE_VALUE == hCom)
            continue;
        strCom.push_back(strTemp);
        CloseHandle(hCom);
    }
 
    //打开设备
    HANDLE hHandle = CreateFile("\\\\.\\COM11", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
    if (hHandle == INVALID_HANDLE_VALUE) {
        printf("Serial=COM11,Error opening port");
        return 0;
    }
 
    //获取设备属性值+修改+设置
    DCB mDCB;
    GetCommState(hHandle, &mDCB);
    mDCB.Parity = NOPARITY;
    mDCB.ByteSize = 8;
    mDCB.StopBits = ONESTOPBIT;
    mDCB.BaudRate = CBR_115200;
 
    SetCommState(hHandle, &mDCB);
 
    //设置串口写和读的缓冲区大小
    SetupComm(&mDCB, 1024, 1024);
 
    //设置超时时间,暂时不设置
 
    //在发送和接收前,清空渡河写的缓冲区域
    PurgeComm(&mDCB, PURGE_TXCLEAR | PURGE_RXCLEAR);
 
    //开始接收串口数据
    DWORD wCount; //读取的字节数
    unsigned char lpInBuffer[1024];
    int nCount = 0;
    while (1) {
        if (!ReadFile(hHandle, lpInBuffer, 1024, &wCount, 0)) {
            printf("error:%d\n", GetLastError());
        }
        else {
            if (wCount != 0) {
                printf("Info%d:", nCount);
                nCount++;
                for (int i = 0; i < wCount; i++)
                    printf("%x ", lpInBuffer[i]);
                printf("\n");
            }
            else {
                Sleep(1000);
            }
        }
    }
 
    //关闭设备句柄
    CloseHandle(hHandle);
}

接收数据结果:
20210721134229946.png

来源:https://blog.csdn.net/wangzhiyang925/article/details/118964255

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

C++实现RS485通信