From ba48d97c2b0fbfbdebe73b90a780866220771fc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Wei=C3=9F?= <72068105+Sandoun@users.noreply.github.com> Date: Mon, 20 Jun 2022 17:09:48 +0200 Subject: [PATCH] Added missing async write methods - refactoring --- Examples/Program.cs | 6 +- Examples/TestRegisters.cs | 2 +- MewtocolNet/Mewtocol/CpuInfo.cs | 96 ++++++++++ MewtocolNet/Mewtocol/DynamicInterface.cs | 30 +++- MewtocolNet/Mewtocol/LinkedLists.cs | 4 +- MewtocolNet/Mewtocol/MewtocolHelpers.cs | 8 +- MewtocolNet/Mewtocol/MewtocolInterface.cs | 41 +++-- .../Mewtocol/MewtocolInterfaceRequests.cs | 2 +- MewtocolNet/Mewtocol/PLCInfo.cs | 43 +++++ MewtocolNet/Mewtocol/PLCMode.cs | 67 +++++++ MewtocolNet/Mewtocol/RegisterEnums.cs | 14 ++ MewtocolNet/Mewtocol/Responses.cs | 167 ++---------------- .../Mewtocol/Subregisters/BRegister.cs | 2 +- .../Mewtocol/Subregisters/BRegisterResult.cs | 2 +- .../Mewtocol/Subregisters/NRegister.cs | 2 +- .../Mewtocol/Subregisters/NRegisterResult.cs | 2 +- MewtocolNet/Mewtocol/Subregisters/Register.cs | 2 +- .../Mewtocol/Subregisters/SRegister.cs | 2 +- .../Mewtocol/Subregisters/SRegisterResult.cs | 2 +- 19 files changed, 314 insertions(+), 180 deletions(-) create mode 100644 MewtocolNet/Mewtocol/CpuInfo.cs create mode 100644 MewtocolNet/Mewtocol/PLCInfo.cs create mode 100644 MewtocolNet/Mewtocol/PLCMode.cs diff --git a/Examples/Program.cs b/Examples/Program.cs index f707c6a..de1c005 100644 --- a/Examples/Program.cs +++ b/Examples/Program.cs @@ -34,8 +34,12 @@ namespace Examples { Task.Factory.StartNew(async () => { await Task.Delay(2000); + //inverts the boolean register - interf.SetRegister(nameof(registers.TestBool1), !registers.TestBool1); + await interf.SetRegisterAsync(nameof(registers.TestBool1), !registers.TestBool1); + + Console.WriteLine("Testregister was toggled"); + //adds 10 each time the plc connects to the PLCs INT regíster interf.SetRegister(nameof(registers.TestInt16), (short)(registers.TestInt16 + 10)); //adds 1 each time the plc connects to the PLCs DINT regíster diff --git a/Examples/TestRegisters.cs b/Examples/TestRegisters.cs index 1e0a21b..101b80d 100644 --- a/Examples/TestRegisters.cs +++ b/Examples/TestRegisters.cs @@ -10,7 +10,7 @@ namespace Examples { [Register(100, RegisterType.R)] public bool TestBool1 { get; private set; } - //corresponds to a R100 boolean register in the PLC + //corresponds to a XD input of the PLC [Register(RegisterType.X, SpecialAddress.D)] public bool TestBoolInputXD { get; private set; } diff --git a/MewtocolNet/Mewtocol/CpuInfo.cs b/MewtocolNet/Mewtocol/CpuInfo.cs new file mode 100644 index 0000000..ff6ecc8 --- /dev/null +++ b/MewtocolNet/Mewtocol/CpuInfo.cs @@ -0,0 +1,96 @@ +using System; + +namespace MewtocolNet.Registers { + public class CpuInfo { + /// + /// CPU type of the PLC + /// + public enum CpuType { + /// + /// FP 0 / FP 2.7K + /// + FP0_FP1_2_7K, + /// + /// FP0 / FP1, 5K / 10K + /// + FP0_FP1_5K_10K, + /// + /// FP1 M 0.9K + /// + FP1_M_0_9K, + /// + /// FP2 16k / 32k + /// + FP2_16K_32K, + /// + /// FP3 C 10K + /// + FP3_C_10K, + /// + /// FP3 C 16K + /// + FP3_C_16K, + /// + /// FP5 16K + /// + FP5_16K, + /// + /// FP 5 24K + /// + FP5_24K, + /// + /// Includes panasonic FPX, FPX-H, Sigma + /// + FP_Sigma_X_H_30K_60K_120K + + } + + public CpuType Cputype { get; set; } + public int ProgramCapacity { get; set; } + public string CpuVersion { get; set; } + + + public static CpuInfo BuildFromHexString (string _cpuType, string _cpuVersion, string _progCapacity) { + + CpuInfo retInf = new CpuInfo(); + + switch (_cpuType) { + case "02": + retInf.Cputype = CpuType.FP5_16K; + break; + case "03": + retInf.Cputype = CpuType.FP3_C_10K; + break; + case "04": + retInf.Cputype = CpuType.FP1_M_0_9K; + break; + case "05": + retInf.Cputype = CpuType.FP0_FP1_2_7K; + break; + case "06": + retInf.Cputype = CpuType.FP0_FP1_5K_10K; + break; + case "12": + retInf.Cputype = CpuType.FP5_24K; + break; + case "13": + retInf.Cputype = CpuType.FP3_C_16K; + break; + case "20": + retInf.Cputype = CpuType.FP_Sigma_X_H_30K_60K_120K; + break; + case "50": + retInf.Cputype = CpuType.FP2_16K_32K; + break; + } + + retInf.ProgramCapacity = Convert.ToInt32(_progCapacity); + retInf.CpuVersion = _cpuVersion.Insert(1, "."); + return retInf; + + } + } + + + +} \ No newline at end of file diff --git a/MewtocolNet/Mewtocol/DynamicInterface.cs b/MewtocolNet/Mewtocol/DynamicInterface.cs index 513c1b9..266fee9 100644 --- a/MewtocolNet/Mewtocol/DynamicInterface.cs +++ b/MewtocolNet/Mewtocol/DynamicInterface.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using MewtocolNet.Logging; -using MewtocolNet.Responses; +using MewtocolNet.Registers; namespace MewtocolNet { @@ -296,6 +296,34 @@ namespace MewtocolNet { #endregion + #region Register accessing + + /// + /// Gets a register that was added by its name + /// + /// + public Register GetRegister (string name) { + + return Registers.FirstOrDefault(x => x.Value.Name == name).Value; + + } + + /// + /// Gets a register that was added by its name + /// + /// The type of register + /// A casted register or the default value + public T GetRegister (string name) where T : Register { + try { + var reg = Registers.FirstOrDefault(x => x.Value.Name == name); + return reg.Value as T; + } catch (InvalidCastException) { + return default(T); + } + } + + #endregion + #region Register Reading /// diff --git a/MewtocolNet/Mewtocol/LinkedLists.cs b/MewtocolNet/Mewtocol/LinkedLists.cs index 9924761..5554330 100644 --- a/MewtocolNet/Mewtocol/LinkedLists.cs +++ b/MewtocolNet/Mewtocol/LinkedLists.cs @@ -3,9 +3,9 @@ using System.Collections.Generic; namespace MewtocolNet.Links { - public class LinkedData { + internal class LinkedData { - public static Dictionary ErrorCodes = new System.Collections.Generic.Dictionary { + internal static Dictionary ErrorCodes = new System.Collections.Generic.Dictionary { {21, "NACK error"}, {22, "WACK error"}, diff --git a/MewtocolNet/Mewtocol/MewtocolHelpers.cs b/MewtocolNet/Mewtocol/MewtocolHelpers.cs index 9743194..ae1dbb1 100644 --- a/MewtocolNet/Mewtocol/MewtocolHelpers.cs +++ b/MewtocolNet/Mewtocol/MewtocolHelpers.cs @@ -3,10 +3,14 @@ using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Collections.Generic; -using MewtocolNet.Responses; +using MewtocolNet.Registers; using System.Collections; namespace MewtocolNet { + + /// + /// Contains helper methods + /// public static class MewtocolHelpers { /// @@ -20,7 +24,7 @@ namespace MewtocolNet { } - public static byte[] ToHexASCIIBytes (this string _str) { + internal static byte[] ToHexASCIIBytes (this string _str) { ASCIIEncoding ascii = new ASCIIEncoding(); byte[] bytes = ascii.GetBytes(_str.ToUpper()); return bytes; diff --git a/MewtocolNet/Mewtocol/MewtocolInterface.cs b/MewtocolNet/Mewtocol/MewtocolInterface.cs index 050ef51..5092e07 100644 --- a/MewtocolNet/Mewtocol/MewtocolInterface.cs +++ b/MewtocolNet/Mewtocol/MewtocolInterface.cs @@ -4,15 +4,12 @@ using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; using System.Collections.Generic; -using System.Threading; using System.Threading.Tasks; using System.Linq; -using MewtocolNet.Responses; +using MewtocolNet.Registers; using MewtocolNet.RegisterAttributes; using MewtocolNet.Logging; using System.Collections; -using System.Reflection; -using MewtocolNet.Logging; using System.Diagnostics; namespace MewtocolNet { @@ -372,6 +369,22 @@ namespace MewtocolNet { /// The value to write to the register public void SetRegister (string registerName, object value) { + var foundRegister = GetAllRegisters().FirstOrDefault(x => x.Name == registerName); + + if (foundRegister == null) { + throw new Exception($"Register with the name {registerName} was not found"); + } + + _ = SetRegisterAsync(registerName, value); + + } + + /// + /// Sets a register in the PLCs memory asynchronously, returns the result status from the PLC + /// + /// The name the register was given to or a property name from the RegisterCollection class + /// The value to write to the register + public async Task SetRegisterAsync (string registerName, object value) { var foundRegister = GetAllRegisters().FirstOrDefault(x => x.Name == registerName); @@ -381,52 +394,54 @@ namespace MewtocolNet { if (foundRegister.GetType() == typeof(BRegister)) { - _ = WriteBoolRegister((BRegister)foundRegister, (bool)value, StationNumber); + return await WriteBoolRegister((BRegister)foundRegister, (bool)value, StationNumber); } if (foundRegister.GetType() == typeof(NRegister)) { - _ = WriteNumRegister((NRegister)foundRegister, (short)value, StationNumber); - + return await WriteNumRegister((NRegister)foundRegister, (short)value, StationNumber); + } if (foundRegister.GetType() == typeof(NRegister)) { - _ = WriteNumRegister((NRegister)foundRegister, (ushort)value, StationNumber); + return await WriteNumRegister((NRegister)foundRegister, (ushort)value, StationNumber); } if (foundRegister.GetType() == typeof(NRegister)) { - _ = WriteNumRegister((NRegister)foundRegister, (int)value, StationNumber); + return await WriteNumRegister((NRegister)foundRegister, (int)value, StationNumber); } if (foundRegister.GetType() == typeof(NRegister)) { - _ = WriteNumRegister((NRegister)foundRegister, (uint)value, StationNumber); + return await WriteNumRegister((NRegister)foundRegister, (uint)value, StationNumber); } if (foundRegister.GetType() == typeof(NRegister)) { - _ = WriteNumRegister((NRegister)foundRegister, (float)value, StationNumber); + return await WriteNumRegister((NRegister)foundRegister, (float)value, StationNumber); } if (foundRegister.GetType() == typeof(NRegister)) { - _ = WriteNumRegister((NRegister)foundRegister, (TimeSpan)value, StationNumber); + return await WriteNumRegister((NRegister)foundRegister, (TimeSpan)value, StationNumber); } if (foundRegister.GetType() == typeof(SRegister)) { - _ = WriteStringRegister((SRegister)foundRegister, (string)value, StationNumber); + return await WriteStringRegister((SRegister)foundRegister, (string)value, StationNumber); } + return false; + } #endregion diff --git a/MewtocolNet/Mewtocol/MewtocolInterfaceRequests.cs b/MewtocolNet/Mewtocol/MewtocolInterfaceRequests.cs index 59db7e8..37433fc 100644 --- a/MewtocolNet/Mewtocol/MewtocolInterfaceRequests.cs +++ b/MewtocolNet/Mewtocol/MewtocolInterfaceRequests.cs @@ -5,7 +5,7 @@ using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Threading.Tasks; -using MewtocolNet.Responses; +using MewtocolNet.Registers; using System.Linq; using System.Globalization; diff --git a/MewtocolNet/Mewtocol/PLCInfo.cs b/MewtocolNet/Mewtocol/PLCInfo.cs new file mode 100644 index 0000000..c89748e --- /dev/null +++ b/MewtocolNet/Mewtocol/PLCInfo.cs @@ -0,0 +1,43 @@ +namespace MewtocolNet.Registers { + /// + /// Contains generic information about the plc + /// + public class PLCInfo { + + /// + /// Contains information about the PLCs cpu + /// + public CpuInfo CpuInformation {get;set;} + /// + /// Contains information about the PLCs operation modes + /// + public PLCMode OperationMode {get;set;} + /// + /// Current error code of the PLC + /// + public string ErrorCode {get;set;} + + /// + /// Current station number of the PLC + /// + public int StationNumber { get;set;} + + /// + /// Generates a string containing some of the most important informations + /// + /// + public override string ToString () { + + return $"Type: {CpuInformation.Cputype},\n" + + $"Capacity: {CpuInformation.ProgramCapacity}k\n" + + $"CPU v: {CpuInformation.CpuVersion}\n" + + $"Station Num: {StationNumber}\n" + + $"--------------------------------\n" + + $"OP Mode: {(OperationMode.RunMode ? "Run" : "Prog")}\n" + + $"Error Code: {ErrorCode}"; + + } + + } + +} \ No newline at end of file diff --git a/MewtocolNet/Mewtocol/PLCMode.cs b/MewtocolNet/Mewtocol/PLCMode.cs new file mode 100644 index 0000000..f3b0e58 --- /dev/null +++ b/MewtocolNet/Mewtocol/PLCMode.cs @@ -0,0 +1,67 @@ +using System; + +namespace MewtocolNet.Registers { + + /// + /// All modes + /// + public class PLCMode { + public bool RunMode { get; set; } + public bool TestRunMode { get; set; } + public bool BreakExcecuting { get; set; } + public bool BreakValid { get; set; } + public bool OutputEnabled { get; set; } + public bool StepRunMode { get; set; } + public bool MessageExecuting { get; set; } + public bool RemoteMode { get; set; } + + /// + /// Gets operation mode from 2 digit hex number + /// + internal static PLCMode BuildFromHex (string _hexString) { + + string lower = Convert.ToString(Convert.ToInt32(_hexString.Substring(0, 1)), 2).PadLeft(4, '0'); + string higher = Convert.ToString(Convert.ToInt32(_hexString.Substring(1, 1)), 2).PadLeft(4, '0'); + string combined = lower + higher; + + var retMode = new PLCMode(); + + for (int i = 0; i < 8; i++) { + char digit = combined[i]; + bool state = false; + if (digit.ToString() == "1") + state = true; + switch (i) { + case 0: + retMode.RunMode = state; + break; + case 1: + retMode.TestRunMode = state; + break; + case 2: + retMode.BreakExcecuting = state; + break; + case 3: + retMode.BreakValid = state; + break; + case 4: + retMode.OutputEnabled = state; + break; + case 5: + retMode.StepRunMode = state; + break; + case 6: + retMode.MessageExecuting = state; + break; + case 7: + retMode.RemoteMode = state; + break; + } + } + + return retMode; + + } + } + +} \ No newline at end of file diff --git a/MewtocolNet/Mewtocol/RegisterEnums.cs b/MewtocolNet/Mewtocol/RegisterEnums.cs index d640f5a..66f7582 100644 --- a/MewtocolNet/Mewtocol/RegisterEnums.cs +++ b/MewtocolNet/Mewtocol/RegisterEnums.cs @@ -5,6 +5,10 @@ using System.Text; using System.Threading.Tasks; namespace MewtocolNet { + + /// + /// The special register type + /// public enum RegisterType { /// @@ -42,8 +46,16 @@ namespace MewtocolNet { } + /// + /// The special input / output channel address + /// public enum SpecialAddress { + #pragma warning disable CS1591 + + /// + /// No defined + /// None, A = -10, B = -11, @@ -52,6 +64,8 @@ namespace MewtocolNet { E = -14, F = -15, + #pragma warning restore + } } diff --git a/MewtocolNet/Mewtocol/Responses.cs b/MewtocolNet/Mewtocol/Responses.cs index 2a79361..b9b2289 100644 --- a/MewtocolNet/Mewtocol/Responses.cs +++ b/MewtocolNet/Mewtocol/Responses.cs @@ -1,170 +1,33 @@ -using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Linq; using System.Text; using System.ComponentModel; -namespace MewtocolNet.Responses { - +namespace MewtocolNet.Registers { + /// /// The formatted result of a ascii command /// public struct CommandResult { + + /// + /// Success state of the message + /// public bool Success {get;set;} + /// + /// Response text of the message + /// public string Response {get;set;} + /// + /// Error code of the message + /// public string Error {get;set;} + /// + /// Error text of the message + /// public string ErrorDescription {get;set;} - public override string ToString() { - string errmsg = Success ? "" : ErrorDescription; - return $"Success: {Success}, Response: {Response} {errmsg}"; - } } - - - /// - /// Contains generic information about the plc - /// - public class PLCInfo { - - public class PLCMode { - public bool RunMode {get;set;} - public bool TestRunMode {get;set;} - public bool BreakExcecuting {get;set;} - public bool BreakValid {get;set;} - public bool OutputEnabled {get;set;} - public bool StepRunMode {get;set;} - public bool MessageExecuting {get;set;} - public bool RemoteMode {get;set;} - - /// - /// Gets operation mode from 2 digit hex number - /// - public static PLCMode BuildFromHex (string _hexString) { - - string lower = Convert.ToString(Convert.ToInt32(_hexString.Substring(0, 1)), 2).PadLeft(4, '0'); - string higher = Convert.ToString(Convert.ToInt32(_hexString.Substring(1, 1)), 2).PadLeft(4, '0'); - string combined = lower + higher; - - var retMode = new PLCMode(); - - for (int i = 0; i < 8; i++) { - char digit = combined[i]; - bool state = false; - if(digit.ToString() == "1") state = true; - switch (i) { - case 0 : - retMode.RunMode = state; - break; - case 1 : - retMode.TestRunMode = state; - break; - case 2 : - retMode.BreakExcecuting = state; - break; - case 3 : - retMode.BreakValid = state; - break; - case 4 : - retMode.OutputEnabled = state; - break; - case 5 : - retMode.StepRunMode = state; - break; - case 6 : - retMode.MessageExecuting = state; - break; - case 7 : - retMode.RemoteMode = state; - break; - } - } - - return retMode; - - } - } - - public class CpuInfo { - public enum CpuType { - FP0_FP1_2_7K, - FP0_FP1_5K_10K, - FP1_M_0_9K, - FP2_16K_32K, - FP3_C_10K, - FP3_C_16K, - FP5_16K, - FP5_24K, - FP_Sigma_X_H_30K_60K_120K - - } - - public CpuType Cputype {get;set;} - public int ProgramCapacity {get;set;} - public string CpuVersion {get;set;} - - - public static CpuInfo BuildFromHexString (string _cpuType, string _cpuVersion, string _progCapacity) { - - CpuInfo retInf = new CpuInfo(); - - switch (_cpuType) { - case "02": - retInf.Cputype = CpuType.FP5_16K; - break; - case "03": - retInf.Cputype = CpuType.FP3_C_10K; - break; - case "04": - retInf.Cputype = CpuType.FP1_M_0_9K; - break; - case "05": - retInf.Cputype = CpuType.FP0_FP1_2_7K; - break; - case "06": - retInf.Cputype = CpuType.FP0_FP1_5K_10K; - break; - case "12": - retInf.Cputype = CpuType.FP5_24K; - break; - case "13": - retInf.Cputype = CpuType.FP3_C_16K; - break; - case "20": - retInf.Cputype = CpuType.FP_Sigma_X_H_30K_60K_120K; - break; - case "50": - retInf.Cputype = CpuType.FP2_16K_32K; - break; - } - - retInf.ProgramCapacity = Convert.ToInt32(_progCapacity); - retInf.CpuVersion = _cpuVersion.Insert(1, "."); - return retInf; - - } - } - - public CpuInfo CpuInformation {get;set;} - public PLCMode OperationMode {get;set;} - public string ErrorCode {get;set;} - public int StationNumber { get;set;} - - public override string ToString () { - - return $"Type: {CpuInformation.Cputype},\n" + - $"Capacity: {CpuInformation.ProgramCapacity}k\n" + - $"CPU v: {CpuInformation.CpuVersion}\n" + - $"Station Num: {StationNumber}\n" + - $"--------------------------------\n" + - $"OP Mode: {(OperationMode.RunMode ? "Run" : "Prog")}\n" + - $"Error Code: {ErrorCode}"; - - } - - } - - } \ No newline at end of file diff --git a/MewtocolNet/Mewtocol/Subregisters/BRegister.cs b/MewtocolNet/Mewtocol/Subregisters/BRegister.cs index ee83e94..146e3b0 100644 --- a/MewtocolNet/Mewtocol/Subregisters/BRegister.cs +++ b/MewtocolNet/Mewtocol/Subregisters/BRegister.cs @@ -2,7 +2,7 @@ using System.Text; using MewtocolNet; -namespace MewtocolNet.Responses { +namespace MewtocolNet.Registers { /// /// Defines a register containing a boolean diff --git a/MewtocolNet/Mewtocol/Subregisters/BRegisterResult.cs b/MewtocolNet/Mewtocol/Subregisters/BRegisterResult.cs index 17e8f36..62d1c8a 100644 --- a/MewtocolNet/Mewtocol/Subregisters/BRegisterResult.cs +++ b/MewtocolNet/Mewtocol/Subregisters/BRegisterResult.cs @@ -1,4 +1,4 @@ -namespace MewtocolNet.Responses { +namespace MewtocolNet.Registers { public class BRegisterResult { public CommandResult Result { get; set; } diff --git a/MewtocolNet/Mewtocol/Subregisters/NRegister.cs b/MewtocolNet/Mewtocol/Subregisters/NRegister.cs index 3232711..6381cf6 100644 --- a/MewtocolNet/Mewtocol/Subregisters/NRegister.cs +++ b/MewtocolNet/Mewtocol/Subregisters/NRegister.cs @@ -1,6 +1,6 @@ using System; -namespace MewtocolNet.Responses { +namespace MewtocolNet.Registers { /// /// Defines a register containing a number /// diff --git a/MewtocolNet/Mewtocol/Subregisters/NRegisterResult.cs b/MewtocolNet/Mewtocol/Subregisters/NRegisterResult.cs index e76f1d1..66b381c 100644 --- a/MewtocolNet/Mewtocol/Subregisters/NRegisterResult.cs +++ b/MewtocolNet/Mewtocol/Subregisters/NRegisterResult.cs @@ -1,4 +1,4 @@ -namespace MewtocolNet.Responses { +namespace MewtocolNet.Registers { /// /// Result for a read/write operation /// diff --git a/MewtocolNet/Mewtocol/Subregisters/Register.cs b/MewtocolNet/Mewtocol/Subregisters/Register.cs index 2cd6b6b..83a6620 100644 --- a/MewtocolNet/Mewtocol/Subregisters/Register.cs +++ b/MewtocolNet/Mewtocol/Subregisters/Register.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace MewtocolNet.Responses { +namespace MewtocolNet.Registers { /// /// A class describing a register diff --git a/MewtocolNet/Mewtocol/Subregisters/SRegister.cs b/MewtocolNet/Mewtocol/Subregisters/SRegister.cs index 6da8b4d..9414caa 100644 --- a/MewtocolNet/Mewtocol/Subregisters/SRegister.cs +++ b/MewtocolNet/Mewtocol/Subregisters/SRegister.cs @@ -1,7 +1,7 @@ using System; using System.Text; -namespace MewtocolNet.Responses { +namespace MewtocolNet.Registers { /// /// Defines a register containing a string /// diff --git a/MewtocolNet/Mewtocol/Subregisters/SRegisterResult.cs b/MewtocolNet/Mewtocol/Subregisters/SRegisterResult.cs index c7ad14c..f3cc1bf 100644 --- a/MewtocolNet/Mewtocol/Subregisters/SRegisterResult.cs +++ b/MewtocolNet/Mewtocol/Subregisters/SRegisterResult.cs @@ -1,4 +1,4 @@ -namespace MewtocolNet.Responses { +namespace MewtocolNet.Registers { public class SRegisterResult { public CommandResult Result { get; set; } public SRegister Register { get; set; }