程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

C#实现ModbusTCP之间的通讯方式,解析报文

balukai 2025-02-08 09:59:52 文章精选 4 ℃

视频演示:


代码实现:

private float GetModbusTcpVal()
{
    try
    {
        float result = 0;
        if ((weightParameter.DetectorIsEnabled1 ?? "0") == "1")
        {
            if (weightParameter.DetectorAccessType1 == "IP")
            {
                clientTcp = new TcpClient(weightParameter.DetectorSerialPort1, int.Parse(weightParameter.DetectorSerialParm1)); // 替换为服务器IP和端口
                NetworkStream stream = clientTcp.GetStream();


                // 十六进制数据
                string hexData = "010300120002640E00";
                // 将十六进制数据转换为字节数组
                byte[] data = Tools.ConvertHexStringToByteArray(hexData);
                // 发送数据
                stream.Write(data, 0, data.Length);


                // 接收响应
                data = new byte[1024];
                int bytes = stream.Read(data, 0, data.Length);
                string response = Encoding.Unicode.GetString(data, 0, bytes);
                byte[] byteDatas = Encoding.Unicode.GetBytes(response);


                //字节转十六进制字符
                string hexString = BitConverter.ToString(byteDatas).Replace("-", " ");
                //需要转换的数组
                byte[] bytes3 = { byteDatas[3], byteDatas[4], byteDatas[5], byteDatas[6] }; // 示例字节数组
                //数组倒序
                Array.Reverse(bytes3);
                //四个字节转浮点
                result = BitConverter.ToSingle(bytes3, 0); // 从字节数组的第一个元素开始转换
            }
        }
        return result;
    }
    catch (Exception e)
    {
        return -1;
    }
    finally
    {
        // 清理资源
        clientTcp.Close();
    }
}



最近发表
标签列表