视频演示:
代码实现:
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();
}
}