问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/guangwenyin/article/details/123165485

工作模式


通过串口服务器,采集到天平的称量值发送到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 产品使用手册
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号