|
|
@ -1,151 +1,37 @@
|
|
|
|
// See https://aka.ms/new-console-template for more information
|
|
|
|
// See https://aka.ms/new-console-template for more information
|
|
|
|
|
|
|
|
|
|
|
|
using System.Collections;
|
|
|
|
using System.Diagnostics;
|
|
|
|
using ConsoleStarter;
|
|
|
|
|
|
|
|
using HybirdFrameworkCore.Autofac.Attribute;
|
|
|
|
using HybirdFrameworkCore.Autofac.Attribute;
|
|
|
|
using HybirdFrameworkCore.Utils;
|
|
|
|
using HybirdFrameworkCore.Utils;
|
|
|
|
|
|
|
|
using HybirdFrameworkDriver.ModbusTcpMaster;
|
|
|
|
|
|
|
|
|
|
|
|
internal class Program
|
|
|
|
internal class Program
|
|
|
|
{
|
|
|
|
{
|
|
|
|
public static void Main(string[] args)
|
|
|
|
public static void Main(string[] args)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TestPerson testPerson = new TestPerson();
|
|
|
|
ModbusTcpMaster master = new ModbusTcpMaster()
|
|
|
|
testPerson.intParam = 11;
|
|
|
|
|
|
|
|
testPerson.intParamNull = 12;
|
|
|
|
|
|
|
|
testPerson.uit = 13;
|
|
|
|
|
|
|
|
testPerson.byteParam = 2;
|
|
|
|
|
|
|
|
testPerson._sb = 3;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
testPerson.s = "abcdef";
|
|
|
|
|
|
|
|
testPerson.st = -15;
|
|
|
|
|
|
|
|
testPerson.ust = 15;
|
|
|
|
|
|
|
|
testPerson.I16 = -16;
|
|
|
|
|
|
|
|
testPerson.UI16 = 16
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
testPerson.I32 = -32;
|
|
|
|
|
|
|
|
testPerson.UI32 = 32;
|
|
|
|
|
|
|
|
//testPerson.I64 = -64;
|
|
|
|
|
|
|
|
//testPerson.UI64 = 64;
|
|
|
|
|
|
|
|
//testPerson.lg = -100;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//testPerson.ulg = 100;
|
|
|
|
|
|
|
|
testPerson.ft = 12.11f;
|
|
|
|
|
|
|
|
testPerson.de = -12.12d;
|
|
|
|
|
|
|
|
// testPerson.de2 = -12.12d;
|
|
|
|
|
|
|
|
// testPerson.bl = false;
|
|
|
|
|
|
|
|
testPerson.ft2 = -13.126f;
|
|
|
|
|
|
|
|
testPerson.ft3 = 1000f;
|
|
|
|
|
|
|
|
testPerson.d3 = -13.129d;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
byte[] bytes2 = ModelConvert.Encode(testPerson);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TestPerson testPerson1 = ModelConvert.Declode<TestPerson>(bytes2);
|
|
|
|
|
|
|
|
int a = testPerson1.intParam;
|
|
|
|
|
|
|
|
int b9 = (int)testPerson1.intParamNull;
|
|
|
|
|
|
|
|
uint c = testPerson1.uit;
|
|
|
|
|
|
|
|
byte d = testPerson1.byteParam;
|
|
|
|
|
|
|
|
byte e = testPerson1._sb;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string f = testPerson1.s;
|
|
|
|
|
|
|
|
short a1 = testPerson1.st;
|
|
|
|
|
|
|
|
ushort a2 = testPerson1.ust;
|
|
|
|
|
|
|
|
Int16 a3 = testPerson1.I16;
|
|
|
|
|
|
|
|
UInt16 a4 = testPerson1.UI16;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Int32 b1 = testPerson1.I32;
|
|
|
|
|
|
|
|
UInt32 b2 = testPerson1.UI32;
|
|
|
|
|
|
|
|
//Int64 b3 = testPerson1.I64;
|
|
|
|
|
|
|
|
//UInt64 b4 = testPerson1.UI64;
|
|
|
|
|
|
|
|
//long b5 = testPerson1.lg;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//ulong c1 = testPerson1.ulg;
|
|
|
|
|
|
|
|
float c2 = testPerson1.ft;
|
|
|
|
|
|
|
|
double c3 = testPerson1.de;
|
|
|
|
|
|
|
|
//double c6 = testPerson1.de2;
|
|
|
|
|
|
|
|
//bool c4 = testPerson1.bl;
|
|
|
|
|
|
|
|
float c5 = testPerson1.ft2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 偏移量
|
|
|
|
|
|
|
|
float c6 = testPerson1.ft3;
|
|
|
|
|
|
|
|
// double负数转换
|
|
|
|
|
|
|
|
double d3 = testPerson1.d3;
|
|
|
|
|
|
|
|
double d4 = -d3;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<PropertyAttribute> list = new List<PropertyAttribute>
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
new(0, 4),
|
|
|
|
Ip = "",
|
|
|
|
new(4, 8),
|
|
|
|
ReadAction = ReadFunc
|
|
|
|
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)
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
int start = 0;
|
|
|
|
bool connected = master.Connect();
|
|
|
|
int length = 0;
|
|
|
|
Debug.Assert(connected, "连接modbus server 失败");
|
|
|
|
foreach (PropertyAttribute attribute in list)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (start < attribute.Start)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
start = attribute.Start;
|
|
|
|
|
|
|
|
length = attribute.Length;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Console.WriteLine($"{start}, {length}");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
byte[] bytes = new Byte[] { 0xFE, 0xFF };
|
|
|
|
|
|
|
|
ushort uInt16 = BitConverter.ToUInt16(bytes);
|
|
|
|
|
|
|
|
Console.WriteLine($"{uInt16}, {BitUtls.BytesToHexStr(bytes)}");
|
|
|
|
|
|
|
|
BitArray bitArray = new BitArray(16);
|
|
|
|
|
|
|
|
int index = 0;
|
|
|
|
|
|
|
|
foreach (var b in bytes)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
for (int i = 0; i < 8; i++)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
bool flag = (b & (1 << (index % 8))) > 0;
|
|
|
|
|
|
|
|
Console.WriteLine(flag);
|
|
|
|
|
|
|
|
bitArray[index++] = flag;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
byte[] newbytes = new byte[2];
|
|
|
|
|
|
|
|
bitArray.CopyTo(newbytes, 0);
|
|
|
|
|
|
|
|
foreach (var b in newbytes)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine(b);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ushort int16 = BitConverter.ToUInt16(newbytes);
|
|
|
|
WaterCoolData coolData = new WaterCoolData();
|
|
|
|
Console.WriteLine($"{int16}, {BitUtls.BytesToHexStr(newbytes)}");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UInt64 max = UInt64.MaxValue / 8;
|
|
|
|
coolData.DraughtFan2.Value = true;
|
|
|
|
byte[] bytes1 = BitConverter.GetBytes(max);
|
|
|
|
bool writeResult = master.WriteValue(coolData.DraughtFan2);
|
|
|
|
Console.WriteLine($"{max}, {BitUtls.BytesToHexStr(bytes1)}");
|
|
|
|
Debug.Assert(writeResult, "写入失败");
|
|
|
|
foreach (var b in bytes1)
|
|
|
|
}
|
|
|
|
{
|
|
|
|
|
|
|
|
Console.WriteLine(b);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BitArray array = new BitArray(16);
|
|
|
|
private static void ReadFunc(ModbusTcpMaster master)
|
|
|
|
array[0] = true;
|
|
|
|
{
|
|
|
|
byte[] ab = new byte[2];
|
|
|
|
byte[]? bytes = master.BatchRead(0, 46);
|
|
|
|
array.CopyTo(ab, 0);
|
|
|
|
if (bytes != null)
|
|
|
|
foreach (var b in ab)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Console.WriteLine(b);
|
|
|
|
WaterCoolData coolData = ModbusDecoder.Decode<WaterCoolData>(bytes);
|
|
|
|
|
|
|
|
float temperature1Value = coolData.Temperature1.Value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|