模拟C#与PLC Modbus TCP通讯,报文解析

 

  

    private void button1_Click(object sender, EventArgs e)
        {
            TcpClient client = new TcpClient("192.168.200.84", 4198); // 替换为服务器IP和端口
            NetworkStream stream = client.GetStream();
            try
            {
                // 十六进制数据
                string hexData = "010308d40002865300";

                // 将十六进制数据转换为字节数组
                byte[] data = 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("-"," ");

                textBox1.AppendText($"接收: { hexString}");
                textBox1.AppendText("\r\n");

                string hexValue = byteDatas[5].ToString("X2") + byteDatas[6].ToString("X2"); // 十六进制数作为字符串
                int result = Convert.ToInt32(hexValue, 16); // 转换为十进制

                textBox1.AppendText($"解析: { result}");
                textBox1.AppendText("\r\n");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                // 清理资源
                client.Close();
            }
        }

 

MODBUS TCP注意点

主机和从机、服务端和客户端

MODBUS请求响应模型

【在modbus协议中】

主机发送modbus请求,从机根据请求内容向主机返回响应。在modbus协议中,主机总是主动方,从机总是被动方。

posted @ 2024-12-10 14:36  上位机李工  阅读(367)  评论(0)    收藏  举报