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協議中,主機總是主動方,從機總是被動方。