Warm tip: This article is reproduced from serverfault.com, please click

c#-如何转换通过Modbus接收的数据?

(c# - How to convert data received via modbus?)

发布于 2020-12-17 07:46:11

我正在通过设备从C#在带有库的C#控制台程序中获取数据格式:32位带浮点数我的答案是17445但是期望值为660Nmodbus4modbus 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();
 
        }
    }}
Questioner
Catsbreak
Viewed
0
Catsbreak 2020-12-21 14:29:23

我找到了想要的东西。

            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