基于TCP/IP实现串口到网络的通讯转换

工作模式

图片来源:https://www.usr.cn/Product/142.html
通过串口服务器,采集到天平的称量值发送到PC端


操作步骤

1.软件测试

测试工具: USR-M0_V2.2.5.8

基础设置:模块静态IP 设置成服务器IP,HTTP服务端口 设置成4001,网关 设置成当前连接的网关IP,勾选 Reset、Link、RFC2217。如下图所示:

在这里插入图片描述

端口设置:校验/数据/停止 设置成NONE/8/1,串口波特率 设置成9600,模块工作方式 设置成TCP Server,本地端口 设置成21018,远程端口 设置成8234。如下图所示:
在这里插入图片描述

2.数据接收测试

测试工具: SerialPortUtility

串口设置:串口选择TCP/UDP,波特率选择9600,Mode选择TCP Client,Dest IP 输入192.168.5.19,Dest Port 输入21018。如下图所示:
在这里插入图片描述

3.代码实现

首先需要声明一个InitializeTcpClient方法,用来接收服务器IP和端口号

这里需要引用 SuperSocket.ClientEngine.dll SuperSocket.ProtoBase.dll

private AsyncTcpSession InitializeTcpClient(string serverIP, int port)
{
    client = new AsyncTcpSession();
    // 连接断开事件
    client.Closed += client_Closed;
    // 收到服务器数据事件
    client.DataReceived += client_DataReceived;
    // 连接到服务器事件
    client.Connected += client_Connected;
    // 发生错误的处理
    client.Error += client_Error;
    IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(serverIP), port);
    client.Connect(endPoint);

    return client;
}
private void client_Closed(object sender, EventArgs e)
{
    Console.WriteLine("连接断开");
}

private void client_DataReceived(object sender, DataEventArgs e)
{
    string deviceData = Encoding.Default.GetString(e.Data);
    ReadWeight(deviceData);
}

private void client_Connected(object sender, EventArgs e)
{
    Console.WriteLine("连接成功");
}

private void client_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
{
    Console.WriteLine(e.Exception.Message);
}

将deviceData字符串转换为字符数组,进行拆分替换后,最终拿到称量值数据

public string weight = "";

private string ReadWeight(string deviceData)
{         
    try
    {        
        string[] deviceStr = deviceData.Split(" ".ToCharArray());
        if (deviceStr.Length > 0)
        {
            string[] weightStr = deviceStr[1].Split("\r".ToCharArray());
            weight = weightStr[0].ToUpper().Trim().Replace("SS", "").Replace("SD", "").Replace("g", "").Replace(Environment.NewLine, "").Substring(0, 6);
        }
        return weight;
    }
    catch (Exception ex)
    {
        return ex.ToString();
    }
}

4.最终效果

当 PWR、WORK、LINK、TX 指示灯亮起,表示连接成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


参考资料

ME,ML,MS天平和电脑通讯指导文件
USR-TCP232-306 产品使用手册

请作者喝杯咖啡吧

如果本文对你有帮助的话,可以请作者喝杯咖啡~

微信支付宝
在这里插入图片描述在这里插入图片描述
  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: QT是一个流行的跨平台开发框架,支持多种Web、移动和桌面应用程序的编写。TCP/IP是因特网通信协议的核心,提供了基于网络的协议和服务,同时TCP/IP也是数据通信的基础协议。 由于QT框架非常强大,其提供了许多可扩展的模块和库,包括QtNetwork模块,该模块可用于构建可靠和高效的网络应用程序,并且包括一些TCP/IP打包和解包工具。这些工具可以帮助开发者更轻松地构建面向网络的应用程序,并且提供高效的数据包处理和传输机制。 在QT网络模块中,最常用的TCP/IP打包工具是QDataStream类。 这个类提供了一组方法,可以将Qt数据类型和基本数据类型打包成TCP/IP数据包形式。同时还提供了解开TCP/IP数据包的接口。使用QDataStream可以让开发者轻松实现TCP/IP协议的打包和解包功能,同时还可以用它来进行错误检测和恢复数据完整性。 总之,QT提供了强大的网络模块,可以帮助开发者构建高效和稳定的网络应用程序。在这个模块中,TCP/IP打包工具是一个重要的组件,它帮助开发者更轻松地实现TCP/IP协议的支持和应用。 ### 回答2: Qt是一个跨平台的应用程序开发框架,可以用于开发各种类型的应用程序。其中,Qt提供了丰富的网络编程类库,支持使用TCP/IP协议进行网络通信。在TCP/IP通信过程中,需要将数据打包成包的形式进行传输,这就需要使用Qt提供的打包工具。 Qt提供了一个名为QDataStream的类,它可以将数据从内存中读取并写入到TCP/IP报文中,也可以将数据从TCP/IP报文中反序列化到内存中。QDataStream支持各种数据类型,包括整数、浮点数、字符串等。此外,QDataStream还支持自定义数据类型的序列化和反序列化,可以轻松地将自定义的对象写入到TCP/IP报文中。 使用Qt进行TCP/IP通信时,可以将需要发送的数据转换成字节数组并发送。这种方式简单易用,但数据量较大时可能会有一定的性能影响。因此,在Qt中也提供了高级的打包工具,如QIODevice。QIODevice是一个抽象类,提供了对各种I/O设备的统一操作接口,例如文件、串口等。借助QIODevice,可以将TCP/IP报文直接写入网络套接字,实现高效的数据传输。 总之,Qt提供了丰富的网络编程类库和打包工具,可以轻松地实现TCP/IP通信和数据传输。用户可以根据自己的需求选择适合的工具方便地进行开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值