mirror of
https://github.com/OpenLogics/MewtocolNet.git
synced 2025-12-06 03:01:24 +00:00
Add underlying byte data for registers
- change backend logic for register r/w - remade interface builder pattern for better syntactic sugar - refined tests
This commit is contained in:
@@ -14,10 +14,10 @@ namespace MewtocolTests {
|
||||
this.output = output;
|
||||
}
|
||||
|
||||
private void Test(IRegisterInternal reg, string propName, uint expectAddr, string expectPlcName) {
|
||||
private void Test(IRegisterInternal reg, uint expectAddr, string expectPlcName) {
|
||||
|
||||
Assert.NotNull(reg);
|
||||
Assert.Equal(propName, reg.Name);
|
||||
Assert.StartsWith("auto_prop_register_", reg.Name);
|
||||
Assert.Null(reg.Value);
|
||||
|
||||
Assert.Equal(expectAddr, reg.MemoryAddress);
|
||||
@@ -32,83 +32,103 @@ namespace MewtocolTests {
|
||||
[Fact(DisplayName = "Boolean generation")]
|
||||
public void BooleanGen() {
|
||||
|
||||
var interf = Mewtocol.Ethernet("192.168.0.1");
|
||||
interf.AddRegisterCollection(new TestBoolRegisters());
|
||||
var interf = Mewtocol.Ethernet("192.168.0.1")
|
||||
.WithRegisterCollections(x =>
|
||||
x.AddCollection(new TestBoolRegisters())
|
||||
).Build();
|
||||
|
||||
var register1 = interf.GetRegister(nameof(TestBoolRegisters.RType));
|
||||
var register2 = interf.GetRegister(nameof(TestBoolRegisters.XType));
|
||||
output.WriteLine(((MewtocolInterface)interf).memoryManager.ExplainLayout());
|
||||
|
||||
var register3 = interf.GetRegister(nameof(TestBoolRegisters.RType_MewString));
|
||||
var register1 = interf.GetRegister("auto_prop_register_1");
|
||||
var register2 = interf.GetRegister("auto_prop_register_2");
|
||||
var register3 = interf.GetRegister("auto_prop_register_3");
|
||||
|
||||
Test((IRegisterInternal)register1, nameof(TestBoolRegisters.RType), 85, "R85A");
|
||||
Test((IRegisterInternal)register2, nameof(TestBoolRegisters.XType), 0, "XD");
|
||||
|
||||
Test((IRegisterInternal)register3, nameof(TestBoolRegisters.RType_MewString), 85, "R85B");
|
||||
Test((IRegisterInternal)register1, 0, "XD");
|
||||
Test((IRegisterInternal)register2, 85, "R85A");
|
||||
Test((IRegisterInternal)register3, 85, "R85B");
|
||||
|
||||
}
|
||||
|
||||
[Fact(DisplayName = "Number 16 bit generation")]
|
||||
public void N16BitGen () {
|
||||
|
||||
var interf = Mewtocol.Ethernet("192.168.0.1");
|
||||
interf.AddRegisterCollection(new Nums16Bit());
|
||||
var interf = Mewtocol.Ethernet("192.168.0.1")
|
||||
.WithRegisterCollections(x =>
|
||||
x.AddCollection(new Nums16Bit())
|
||||
).Build();
|
||||
|
||||
var register1 = interf.GetRegister(nameof(Nums16Bit.Int16Type));
|
||||
var register2 = interf.GetRegister(nameof(Nums16Bit.UInt16Type));
|
||||
var register3 = interf.GetRegister(nameof(Nums16Bit.Enum16Type));
|
||||
|
||||
var register4 = interf.GetRegister(nameof(Nums16Bit.Int16Type_MewString));
|
||||
var register5 = interf.GetRegister(nameof(Nums16Bit.Enum16Type_MewString));
|
||||
var register1 = interf.GetRegister("auto_prop_register_1");
|
||||
var register2 = interf.GetRegister("auto_prop_register_2");
|
||||
var register3 = interf.GetRegister("auto_prop_register_3");
|
||||
|
||||
//test generic properties
|
||||
Test((IRegisterInternal)register1, nameof(Nums16Bit.Int16Type), 899, "DT899");
|
||||
Test((IRegisterInternal)register2, nameof(Nums16Bit.UInt16Type), 342, "DT342");
|
||||
Test((IRegisterInternal)register3, nameof(Nums16Bit.Enum16Type), 50, "DT50");
|
||||
|
||||
Test((IRegisterInternal)register4, nameof(Nums16Bit.Int16Type_MewString), 900, "DT900");
|
||||
Test((IRegisterInternal)register5, nameof(Nums16Bit.Enum16Type_MewString), 51, "DT51");
|
||||
Test((IRegisterInternal)register1, 50, "DT50");
|
||||
Test((IRegisterInternal)register2, 342, "DT342");
|
||||
Test((IRegisterInternal)register3, 899, "DT899");
|
||||
|
||||
}
|
||||
|
||||
[Fact(DisplayName = "Number 32 bit generation")]
|
||||
public void N32BitGen () {
|
||||
|
||||
var interf = Mewtocol.Ethernet("192.168.0.1");
|
||||
interf.AddRegisterCollection(new Nums32Bit());
|
||||
var interf = Mewtocol.Ethernet("192.168.0.1")
|
||||
.WithRegisterCollections(x => x
|
||||
.AddCollection(new Nums32Bit())
|
||||
).Build();
|
||||
|
||||
var register1 = interf.GetRegister(nameof(Nums32Bit.Int32Type));
|
||||
var register2 = interf.GetRegister(nameof(Nums32Bit.UInt32Type));
|
||||
var register3 = interf.GetRegister(nameof(Nums32Bit.Enum32Type));
|
||||
var register4 = interf.GetRegister(nameof(Nums32Bit.FloatType));
|
||||
var register5 = interf.GetRegister(nameof(Nums32Bit.TimeSpanType));
|
||||
output.WriteLine(((MewtocolInterface)interf).memoryManager.ExplainLayout());
|
||||
|
||||
var register6 = interf.GetRegister(nameof(Nums32Bit.Enum32Type_MewString));
|
||||
var register7 = interf.GetRegister(nameof(Nums32Bit.TimeSpanType_MewString));
|
||||
var register1 = interf.GetRegister("auto_prop_register_1");
|
||||
var register2 = interf.GetRegister("auto_prop_register_2");
|
||||
var register3 = interf.GetRegister("auto_prop_register_3");
|
||||
|
||||
//only one generated because same type
|
||||
var register4 = interf.GetRegister("auto_prop_register_4");
|
||||
|
||||
var register6 = interf.GetRegister("auto_prop_register_5");
|
||||
var register7 = interf.GetRegister("auto_prop_register_6");
|
||||
|
||||
//test generic properties
|
||||
Test((IRegisterInternal)register1, nameof(Nums32Bit.Int32Type), 7001, "DDT7001");
|
||||
Test((IRegisterInternal)register2, nameof(Nums32Bit.UInt32Type), 765, "DDT765");
|
||||
Test((IRegisterInternal)register3, nameof(Nums32Bit.Enum32Type), 51, "DDT51");
|
||||
Test((IRegisterInternal)register4, nameof(Nums32Bit.FloatType), 7003, "DDT7003");
|
||||
Test((IRegisterInternal)register5, nameof(Nums32Bit.TimeSpanType), 7012, "DDT7012");
|
||||
Test((IRegisterInternal)register1, 7000, "DDT7000");
|
||||
Test((IRegisterInternal)register2, 7002, "DDT7002");
|
||||
Test((IRegisterInternal)register3, 7004, "DDT7004");
|
||||
|
||||
Test((IRegisterInternal)register4, 7006, "DDT7006");
|
||||
|
||||
Test((IRegisterInternal)register6, nameof(Nums32Bit.Enum32Type_MewString), 53, "DDT53");
|
||||
Test((IRegisterInternal)register7, nameof(Nums32Bit.TimeSpanType_MewString), 7014, "DDT7014");
|
||||
Test((IRegisterInternal)register6, 7008, "DDT7008");
|
||||
Test((IRegisterInternal)register7, 7010, "DDT7010");
|
||||
|
||||
}
|
||||
|
||||
[Fact(DisplayName = "String generation")]
|
||||
public void StringGen() {
|
||||
|
||||
var interf = Mewtocol.Ethernet("192.168.0.1");
|
||||
interf.AddRegisterCollection(new TestStringRegisters());
|
||||
var interf = Mewtocol.Ethernet("192.168.0.1")
|
||||
.WithRegisterCollections(x =>
|
||||
x.AddCollection(new TestStringRegisters())
|
||||
).Build();
|
||||
|
||||
var register1 = interf.GetRegister(nameof(TestStringRegisters.StringType));
|
||||
var register2 = interf.GetRegister(nameof(TestStringRegisters.StringType_MewString));
|
||||
var register1 = interf.GetRegister("auto_prop_register_1");
|
||||
|
||||
//test generic properties
|
||||
Test((IRegisterInternal)register1, nameof(TestStringRegisters.StringType), 7005, "DT7005");
|
||||
Test((IRegisterInternal)register2, nameof(TestStringRegisters.StringType_MewString), 7050, "DT7050");
|
||||
Test((IRegisterInternal)register1, 7005, "DT7005");
|
||||
|
||||
}
|
||||
|
||||
[Fact(DisplayName = "Byte Array generation")]
|
||||
public void ByteArrGen() {
|
||||
|
||||
var interf = Mewtocol.Ethernet("192.168.0.1")
|
||||
.WithRegisterCollections(x =>
|
||||
x.AddCollection(new TestBitwiseRegisters())
|
||||
).Build();
|
||||
|
||||
var register1 = interf.GetRegister("auto_prop_register_1");
|
||||
//var register2 = interf.GetRegister("auto_prop_register_2");
|
||||
|
||||
//test generic properties
|
||||
Test((IRegisterInternal)register1, 7000, "DT7000");
|
||||
//Test((IRegisterInternal)register2, 7001, "DT7001");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -30,10 +30,10 @@ namespace MewtocolTests.EncapsulatedTests {
|
||||
|
||||
public class TestBoolRegisters : RegisterCollection {
|
||||
|
||||
[Register(IOType.R, memoryArea: 85, spAdress: 0xA)]
|
||||
[Register("R85A")]
|
||||
public bool RType { get; set; }
|
||||
|
||||
[Register(IOType.X, (byte)0xD)]
|
||||
[Register("XD")]
|
||||
public bool XType { get; set; }
|
||||
|
||||
[Register("R85B")]
|
||||
@@ -44,71 +44,62 @@ namespace MewtocolTests.EncapsulatedTests {
|
||||
public class Nums16Bit : RegisterCollection {
|
||||
|
||||
|
||||
[Register(899)]
|
||||
[Register("DT899")]
|
||||
public short Int16Type { get; set; }
|
||||
|
||||
[Register(342)]
|
||||
[Register("DT342")]
|
||||
public ushort UInt16Type { get; set; }
|
||||
|
||||
[Register(50)]
|
||||
[Register("DT50")]
|
||||
public CurrentState Enum16Type { get; set; }
|
||||
|
||||
[Register("DT900")]
|
||||
public short Int16Type_MewString { get; set; }
|
||||
|
||||
[Register("DT51")]
|
||||
public CurrentState Enum16Type_MewString { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class Nums32Bit : RegisterCollection {
|
||||
|
||||
[Register(7001)]
|
||||
[Register("DDT7000")]
|
||||
public int Int32Type { get; set; }
|
||||
|
||||
[Register(765)]
|
||||
[Register("DDT7002")]
|
||||
public uint UInt32Type { get; set; }
|
||||
|
||||
[Register(51)]
|
||||
[Register("DDT7004")]
|
||||
public CurrentState32 Enum32Type { get; set; }
|
||||
|
||||
[Register(7003)]
|
||||
[Register("DDT7006")]
|
||||
public float FloatType { get; set; }
|
||||
|
||||
[Register(7012)]
|
||||
[Register("DDT7006")]
|
||||
public float FloatType2 { get; set; } // this is legal, because the cast type is the same
|
||||
|
||||
//[Register("DDT7006")]
|
||||
//public int FloatType3 { get; set; } // this is not legal
|
||||
|
||||
[Register("DDT7010")]
|
||||
public TimeSpan TimeSpanType { get; set; }
|
||||
|
||||
[Register("DDT53")]
|
||||
public CurrentState32 Enum32Type_MewString { get; set; }
|
||||
[Register("DDT7008")]
|
||||
public TimeSpan TimeSpanType2 { get; set; }
|
||||
|
||||
[Register("DDT7014")]
|
||||
public TimeSpan TimeSpanType_MewString { get; set; }
|
||||
[Register("DDT7013")]
|
||||
public TimeSpan TimeSpanType3 { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class TestStringRegisters : RegisterCollection {
|
||||
|
||||
[Register(7005, 5)]
|
||||
[Register("DT7005")]
|
||||
public string? StringType { get; set; }
|
||||
|
||||
[Register("DT7050")]
|
||||
public string? StringType_MewString { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class TestBitwiseRegisters : RegisterCollection {
|
||||
|
||||
[Register(7010)]
|
||||
public BitArray TestBitRegister { get; set; }
|
||||
[Register("DT7000")]
|
||||
public BitArray BitArr16 { get; set; }
|
||||
|
||||
[Register(8010, BitCount.B32)]
|
||||
public BitArray TestBitRegister32 { get; set; }
|
||||
|
||||
[Register(1204, BitCount.B16, 9)]
|
||||
public bool BitValue { get; set; }
|
||||
|
||||
[Register(1204, BitCount.B32, 5)]
|
||||
public bool FillTest { get; set; }
|
||||
//[Register("DT7001")]
|
||||
//public BitArray BitArr32 { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ namespace MewtocolTests
|
||||
|
||||
output.WriteLine($"Testing: {plc.PLCName}");
|
||||
|
||||
var cycleClient = Mewtocol.Ethernet(plc.PLCIP, plc.PLCPort);
|
||||
var cycleClient = Mewtocol.Ethernet(plc.PLCIP, plc.PLCPort).Build();
|
||||
|
||||
await cycleClient.ConnectAsync();
|
||||
|
||||
@@ -124,7 +124,7 @@ namespace MewtocolTests
|
||||
|
||||
output.WriteLine($"Testing: {plc.PLCName}\n");
|
||||
|
||||
var client = Mewtocol.Ethernet(plc.PLCIP, plc.PLCPort);
|
||||
var client = Mewtocol.Ethernet(plc.PLCIP, plc.PLCPort).Build();
|
||||
|
||||
await client.ConnectAsync();
|
||||
|
||||
@@ -155,7 +155,7 @@ namespace MewtocolTests
|
||||
|
||||
output.WriteLine($"\n\n --- Testing: {plc.PLCName} ---\n");
|
||||
|
||||
var client = Mewtocol.Ethernet(plc.PLCIP, plc.PLCPort);
|
||||
var client = Mewtocol.Ethernet(plc.PLCIP, plc.PLCPort).Build();
|
||||
|
||||
foreach (var testRW in testRegisterRW) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user