我正在通过设备从C#在带有库的C#控制台程序中获取数据。格式:32位带浮点数。我的答案是17445。但是期望值为660。Nmodbus4
modbus rtu
如何转换数据并从17445获取660?
稍微解释一下就好了!
using Modbus.Device;
using Modbus.Utility;
using System;
using System.Collections;
using System.Globalization;
using System.IO.Ports;
namespace Elemer19
{
class Program
{
static void Main(string[] args)
{
string[] pathFolder = ReadDirectory.readDir();
Console.WriteLine("OPENING COM PORT - {0}", pathFolder[0]);
byte slaveID = 4;
ushort startAddress = 0x20c;
ushort numOfPoints = 1;
SerialPort _serialPort = new SerialPort(pathFolder[0],
9600,
Parity.None,
8,
StopBits.One);
try
{
_serialPort.Open();
ModbusSerialMaster master = ModbusSerialMaster.CreateRtu(
_serialPort);
master.Transport.ReadTimeout = 300;
ushort[] data = master.ReadHoldingRegisters(slaveID, startAddress, numOfPoints);
foreach (int item in data)
{
Console.Write("\r\n{0}", item); // 17445
}
}
catch (Exception ex)
{
Console.WriteLine(DateTime.Now.ToString() + ":Connect process " + ex.StackTrace +
"==>" + ex.Message);
}
Console.ReadLine();
}
}}
我找到了想要的东西。
ushort[] received = new ushort[] { data[1], data[0] };
byte[] asByte = new byte[4];
Buffer.BlockCopy(received, 0, asByte, 0, 4);
float result = BitConverter.ToSingle(asByte, 0);
Console.Write("Result-{0}", result); // 660