C++实现RS485通信

2 篇文章 0 订阅

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

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

模拟串口收发配置程序下载:https://download.csdn.net/download/wangzhiyang925/20395980

COM10发送消息:端口号选择COM10、波特率设置:115200、设置定时发送

再开启一个接收串口,设置端口号: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);
}

接收数据结果:

 

 

  • 0
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: RS-485是一种串口通信协议,用于实现多个设备之间的远距离通信实现RS-485通信的主要步骤如下: 1. 选择合适的RS-485通信芯片或模块。RS-485通信需要使用特殊的芯片或模块来实现,可以选择市场上提供的成品模块,也可以选择自己设计的电路。 2. 连接电气接口。RS-485通信需要连接两根数据线A和B,这两根线分别连接到每个设备的RS-485接口上。还需要连接一个公共地线GND,所有设备的地线都连接到同一个地点。 3. 设置通信参数。RS-485通信需要设置波特率、数据位、停止位等通信参数。波特率是指每秒传输的数据位数,数据位是指每个字节的位数,停止位是指数据传输结束后的位数。 4. 编写通信程序。使用编程语言编写程序来控制RS-485通信,可以选择C、C++、Python等语言。在程序中,可以通过串口库来进行RS-485通信控制,包括发送和接收数据。 5. 测试通信功能。在完成编写程序后,需要进行通信测试。可以使用两个RS-485设备进行测试,通过向一个设备发送数据,然后另一个设备接收数据,验证通信是否成功。 需要注意的是,RS-485通信是半双工通信,即同一时间只能发送或接收数据。在程序设计时需要考虑这一点,以保证数据的正确传输。此外,还需要注意电气连接的正确性,以免产生通信错误或损坏设备。 ### 回答2: RS485是一种常用的串行通信协议,用于在多个设备之间进行数据传输。要实现RS485通信,需要以下步骤: 1. 硬件准备:首先,需要准备RS485通信模块或芯片。该模块通常包含一个RS485收发器和相关线路电路,以便与设备进行连接。另外,还需要选择适当的电缆和连接器来连接设备。 2. 确定通信设置:在实施RS485通信之前,需要确定通信参数,如波特率、数据位、校验位等。这些参数需要与要通信的设备一致,以确保正常的数据传输。 3. 连接设备:将RS485模块与要通信的设备进行连接。通常,RS485模块有多个引脚,包括A线和B线用于数据传输,GND线用于共地。将这些线路连接到设备的相应引脚。 4. 设置模式:根据具体的RS485模块设定,可以通过设置模式来选择是发送还是接收数据。一些模块可能有一个控制引脚来实现这个功能。 5. 编写程序:使用相应的编程语言,编写程序来实现RS485通信。根据具体的开发环境,可以使用相关的库或函数来进行串行通信。在程序中,需要设置好通信参数并实现发送和接收数据的功能。 6. 测试与调试:完成程序编写后,进行测试和调试,以确保数据的准确传输。可以发送一些测试数据,在接收端验证接收到的数据是否正确,并根据需要进行调整和优化。 综上所述,实现RS485通信需要进行硬件准备、确定通信设置、连接设备、设置模式、编写程序以及测试与调试等步骤,以确保设备之间的可靠数据传输。 ### 回答3: RS485是一种常用的串行通信协议,通常用于实现局域网中的数据传输。要实现RS485通信,需要进行以下步骤: 1. 准备硬件设备:首先需要准备RS485通信所需的硬件设备,包括RS485转换器、电缆等。RS485转换器可以将UART串口信号转换为RS485信号。 2. 配置串口:通过软件设置串口的参数,包括波特率、数据位数、停止位数和校验位等。一般来说,RS485通信使用的是半双工通信模式,其中一个设备作为主机发送数据,而其他设备作为从机接收数据。 3. 编写程序:在主机和从机之间,分别编写程序进行数据的发送和接收。主机程序需要发送数据,并等待从机的响应;从机程序需要接收主机发送的数据,并进行相应的处理。 4. 实现通信协议:根据具体的通信需求,进行通信协议的设计。通常采用帧格式来定义数据的结构,包括起始标识、目标地址、数据长度和校验等。 5. 进行数据传输:通过串口进行数据传输,主机将数据发送给从机,从机接收并进行处理。在数据传输过程中,要注意数据的可靠性和稳定性,可以通过校验等方式进行数据的校验和纠错。 实现RS485通信需要同时考虑硬件和软件的设计,包括硬件设备选型、串口配置、程序编写和通信协议设计等方面。只有在硬件和软件都正确配置和编写的情况下,才能实现可靠的RS485通信

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值