// See https://aka.ms/new-console-template for more information using System.Diagnostics; using HybirdFrameworkCore.Autofac.Attribute; using HybirdFrameworkCore.Utils; using HybirdFrameworkDriver.ModbusTcpMaster; internal class Program { public static void Main(string[] args) { ModbusTcpMaster master = new ModbusTcpMaster() { Ip = "192.168.1.5", ReadAction = ReadFunc }; bool connected = master.Connect(); Debug.Assert(connected, "连接modbus server 失败"); #region 测试写 WaterCoolData coolData = new WaterCoolData(); //写入ushort coolData.ushortType.Value = 18; bool writeResult4 = master.WriteValue(coolData.ushortType); Debug.Assert(writeResult4, "写入失败"); //写入byte 0-8 byte[1] coolData.Status.Value = 12; bool writeResult1 = master.WriteValue(coolData.Status); Debug.Assert(writeResult1, "写入失败"); //写入bit coolData.DraughtFan2.Value = true; bool writeResult3 = master.WriteValue(coolData.DraughtFan2); Debug.Assert(writeResult3, "写入失败"); #endregion 测试写 } private static void ReadFunc(ModbusTcpMaster master) { byte[]? bytes = master.BatchRead(0, 46); if (bytes != null) { WaterCoolData coolData = ModbusDecoder.Decode(bytes); float temperature1Value = coolData.Temperature1.Value; } } private static void Test1() { Console.WriteLine("Hello, World!"); List list = new List { new(0, 4), new(4, 8), new(12, 1), new(13, 2), new(15, 1), new(16, 1), new(17, 1), new(18, 2), new(20, 2), new(22, 2), new(24, 2), new(26, 1), new(27, 2), new(29, 2), new(31, 1), new(32, 1), new(33, 29) }; Queue queue = new Queue(); int size = 0; foreach (PropertyAttribute p in list) { size += p.Length; if (size < 8) { queue.Enqueue(new EncodeData() { Start = 0, Length = p.Length }); } else { Console.WriteLine("---------------------------begin one byte---------------------"); int length = 0; while (queue.Count > 0) { EncodeData data = queue.Dequeue(); length += data.Length; Console.WriteLine($"use {data.Start}, {data.Length}"); } size -= length; int occupy = 8 - length; Console.WriteLine($"use 0, {occupy}"); Console.WriteLine("---------------------------end one byte---------------------"); size -= occupy; while (size >= 8) { Console.WriteLine("---------------------------begin one byte---------------------"); Console.WriteLine($"use {occupy}, 8"); Console.WriteLine("---------------------------end one byte---------------------"); size -= 8; occupy += 8; } if (size > 0) { queue.Enqueue(new EncodeData() { Start = occupy, Length = size }); } } } foreach (EncodeData d in queue) { Console.WriteLine($"{d.Start}, {d.Length}"); } UInt32 i = UInt32.MaxValue - 1; byte[] bytes = BitConverter.GetBytes(i).Reverse().ToArray(); foreach (byte b in bytes) { Console.WriteLine(b); } Console.WriteLine(BitUtls.BytesToHexStr(bytes)); UInt32 r = BitConverter.ToUInt32(bytes); Console.WriteLine(r); bytes = BitConverter.GetBytes(r); foreach (byte b in bytes) { Console.WriteLine(b); } Console.WriteLine(BitUtls.BytesToHexStr(bytes)); } } public struct EncodeData { public int Start { get; set; } public int Length { get; set; } public byte[] Value { get; set; } }