以太网转RS485通讯类库封装

最近选用有人科技的以太网转RS485模块做项目,设备真漂亮,国货之光。调通了通讯的代码,发到网上供大家参考,多多交流。
在这里插入图片描述

以下分别是配套的头文件与源文件:

/***************************************************************
* Copyright(C) 2023,Company All Rights Reserved (1)版权说明
*
* @file    : Net2RS485.cpp (2) 文件名
*
* @brief   :  有人科技的网络转串口的通信类 (3) 文件描述
*
* @version : 1.0 (4) 版本信息
*
* @author  : 潘智斌 (5) 创建作者
*
* @date    : 2023/12/27 星期四
*
* Details  :
***************************************************************/
#ifndef _NET2RS485_H
#define _NET2RS485_H

#ifdef _WIN32
#include <io.h>
#else
#include <unistd.h>
#endif

#include <iostream>
#include <WinSock.h>
#include <sys/types.h>
//#include <string>
#include "DataDefine.h"
using namespace std;

#pragma comment(lib,"ws2_32.lib")

#define RETURN_OK 1
#define RETURN_ERR 0

class Net2RS485
{
private:
	WORD wVersion;
	WSADATA wdSockData;
	SOCKET clientSock;
	LidarPara para;
public:
	//打开数据通道
	int Open(string &ip, int &port);
	//关闭数据通道
	int Close();
	//发送数据的接口
	int Send(char *data, int len);
	//接收数据的接口
	int Recv(char *data, int &len);
};

#endif
/***************************************************************
* Copyright(C) 2023,Company All Rights Reserved (1)版权说明
*
* @file    : Net2RS485.cpp (2) 文件名
*
* @brief   :  有人科技的网络转串口的通信类 (3) 文件描述
*
* @version : 1.0 (4) 版本信息
*
* @author  : 潘智斌 (5) 创建作者
*
* @date    : 2023/12/27 星期三
*
* Details  :
***************************************************************/

#include "Net2RS485.h"

int Net2RS485::Open(string &ip, int &port)
{
	wVersion = MAKEWORD(2, 2);

	int ret = WSAStartup(wVersion, &wdSockData);			//启动 网络
	if (0 != ret)
	{
		printf("WSAStartup() failed : error() = %d\n", WSAGetLastError());
		system("pause");
		return -1;
	}

	if (2 != HIBYTE(wdSockData.wVersion) || 2 != LOBYTE(wdSockData.wVersion))	//校验版本
	{
		printf("version error\n");
		WSACleanup();
		system("pause");
		return RETURN_ERR;
	}

	clientSock = socket(AF_INET, SOCK_STREAM, 0);
	if (INVALID_SOCKET == clientSock)
	{
		printf("socket() failed , error() = %d\n", WSAGetLastError());
		WSACleanup();
		system("pause");
		return RETURN_ERR;
	}

	SOCKADDR_IN clientAddr;
	clientAddr.sin_family = AF_INET;
	clientAddr.sin_port = htons(port);
	clientAddr.sin_addr.s_addr = inet_addr(ip.data());

	ret = connect(clientSock, (sockaddr*)&clientAddr, sizeof(clientAddr));
	if (SOCKET_ERROR == ret)
	{
		printf("connect() failed, error : %d\n", WSAGetLastError());
		closesocket(clientSock);
		WSACleanup();
		//system("pause");
		return RETURN_ERR;
	}

	return RETURN_OK;
}

int Net2RS485::Close()
{
	closesocket(clientSock);
	WSACleanup();
	return RETURN_OK;
}

int Net2RS485::Send(char *data, int len)
{
	int result = send(clientSock, data, len, 0);
	if (SOCKET_ERROR == result)
	{
		printf("send() failed, error = %d\n", WSAGetLastError());
	}
	return RETURN_OK;
}
int Net2RS485::Recv(char *data, int &len)
{

	fd_set fdRead;
	FD_ZERO(&fdRead); //初始化
	FD_SET(clientSock, &fdRead);
	timeval tv = { 1, };
	int nRet = select(fdRead.fd_count, &fdRead, NULL, NULL, &tv);
	if (nRet == 0 || nRet == SOCKET_ERROR)
	{
		return RETURN_ERR;
	}

	//判断socket是否是可以读数据了
	if (FD_ISSET(clientSock, &fdRead))
	{
		len = recv(clientSock, data, 100, 0);
		if (len == 0 || len == SOCKET_ERROR)
		{
			printf("接受数据失败 \r\n");
			return RETURN_ERR;
		}
	}

	return RETURN_OK;
}
可将 RS-422/485 串口设备连接至以太网 支持网口升级固件程序,功能全面 支持TCP服务器、TCP客户端、UDP模式 支持虚拟串口、Web登录或使用VirCom进行配置 ZLSN3103 概述 ZLSN3103嵌入式联网模块是上海卓岚信息科技有限公司开发的一款RS485/422和TCP/IP之间协议化内嵌模块。ZLSN3103基于ZLSN2003核心模块设计,具有功能强大,支持网口升级程序等优点。ZLSN3103可以方便地使得串口设备连接到以太网和Internet,实现串口设备的网络化升级。 ZLSN3103是一款高性价比的联网模块,RS422接口支持全双工、不间断通信,内嵌485防雷保护,支持DHCP、DNS,可轻松实现异地远程设备监控。支持虚拟串口,原有串口PC端软件无需修改。 特点 支持在线网络升级固件程序,用户可以从卓岚公司获得软件升级工具和升级firmware,可自行升级到最高版本。 使用配置的ZLVircom工具可以搜索、管理局域网内(支持跨网段搜索)、Internet上的ZLSN2003模块。可一键式配置模块的所有参数。设备配置、管理非常方便。 支持DHCP功能,可以动态获得局域网内的DHCP服务器分配的IP。 支持DNS,自动解析目的域名为IP,目的IP可以为动态域名。 作为TCP Server(TCP服务器端)时,支持独有的100个连接的强大连接能力。 作为TCP Client(TCP客户端)的,支持连接8个目标服务器。作为TCP客户端时,可以在断线后自动进行重连。支持隐含心跳技术,保证网线断线后的恢复。 支持UDP、UDP组播等功能。 支持虚拟串口。 规格 网络界面 以太网 10/100 Mbps, RJ45 保护 内建1KV电磁隔离,RS485防雷保护 串口界面 界面 RS-422/485 串口数 1 校验位 None, Even, Odd, Space, Mark 数据位 5~9 停止位 1,2 流控 XON/XOFF 速率 1200bps~460800bps 软件特性 协议 TCP,HTTP,UDP,ICMP,ARP,IP,DNS,DHCP 虚拟串口平台 Windows 95/98/ME/NT/2000/XP/WIN7/WIN8 配置方式 Web浏览器、卓岚ZLVirCom、串口类AT命令 电器特性 电压输入 DC9~12V,210~250mA 机械特性 外壳材料 无 尺寸 长×宽×高=9.4cm×6.5cm×2.5cm 工作环境 工作温度,湿度 -0~70℃,5~95% RH 储存温度,湿度 -45~165℃,5~95% RH W
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pzb19841116

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值