From e0fea8731ea4ffa9db3e82eeb456dbd0ed89100b Mon Sep 17 00:00:00 2001 From: "parallelbgls@outlook.com" Date: Thu, 28 Aug 2014 11:04:32 +0800 Subject: [PATCH] 2014-08-28 update 1 --- NA200H/ModBus.Net/ModBus.Net.csproj | 1 + NA200H/ModBus.Net/ModbusProtocal.cs | 6 +- NA200H/ModBus.Net/ModbusUtility.cs | 89 ++++++++++++++++++++ NA200H/{NA200H.sln => Modbus.Net-vs2013.sln} | 0 NA200H/NA200H.UI.Console/Program.cs | 18 ++-- NA200H/NA200H.UI.WPF/MainWindow.xaml | 12 ++- NA200H/NA200H.UI.WPF/MainWindow.xaml.cs | 36 ++++++-- 7 files changed, 142 insertions(+), 20 deletions(-) create mode 100644 NA200H/ModBus.Net/ModbusUtility.cs rename NA200H/{NA200H.sln => Modbus.Net-vs2013.sln} (100%) diff --git a/NA200H/ModBus.Net/ModBus.Net.csproj b/NA200H/ModBus.Net/ModBus.Net.csproj index 98f435b..011fc74 100644 --- a/NA200H/ModBus.Net/ModBus.Net.csproj +++ b/NA200H/ModBus.Net/ModBus.Net.csproj @@ -44,6 +44,7 @@ + True diff --git a/NA200H/ModBus.Net/ModbusProtocal.cs b/NA200H/ModBus.Net/ModbusProtocal.cs index 8815260..3e78e69 100644 --- a/NA200H/ModBus.Net/ModbusProtocal.cs +++ b/NA200H/ModBus.Net/ModbusProtocal.cs @@ -583,14 +583,14 @@ namespace ModBus.Net public class WriteMultiRegisterInputStruct : InputStruct { - public WriteMultiRegisterInputStruct(byte belongAddress, string startAddress, ushort[] writeValue) + public WriteMultiRegisterInputStruct(byte belongAddress, string startAddress, object[] writeValue) { BelongAddress = belongAddress; FunctionCode = (int)ModbusProtocalReg.WriteMultiRegister; StartAddress = AddressTranslatorNA200H.GetInstance().AddressTranslate(startAddress); WriteCount = (ushort)writeValue.Length; WriteByteCount = (byte)(WriteCount * 2); - WriteValue = writeValue.Clone() as ushort[]; + WriteValue = writeValue.Clone() as object[]; } public byte BelongAddress { get; private set; } @@ -603,7 +603,7 @@ namespace ModBus.Net public byte WriteByteCount { get; private set; } - public ushort[] WriteValue { get; private set; } + public object[] WriteValue { get; private set; } } public class WriteMultiRegisterOutputStruct : OutputStruct diff --git a/NA200H/ModBus.Net/ModbusUtility.cs b/NA200H/ModBus.Net/ModbusUtility.cs new file mode 100644 index 0000000..d41d33b --- /dev/null +++ b/NA200H/ModBus.Net/ModbusUtility.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections; +using System.Windows.Forms; + +public enum ModbusType +{ + Rtu = 0, + Tcp = 1, +} + +namespace ModBus.Net +{ + public class ModbusUtility + { + private BaseProtocal _wrapper; + + private ModbusType _modbusType; + + public ModbusType ModbusType + { + get + { + return _modbusType; + } + set + { + _modbusType = value; + switch (_modbusType) + { + case ModbusType.Rtu: + { + _wrapper = new ModbusRtuProtocal(); + break; + } + case ModbusType.Tcp: + { + _wrapper = new ModbusTcpProtocal(); + break; + } + } + } + } + + private static ModbusUtility _modbusUtility; + private ModbusUtility() + { + ModbusType = ModbusType.Rtu; + } + + public static ModbusUtility GetInstance() + { + return _modbusUtility ?? (_modbusUtility = new ModbusUtility()); + } + + public ushort[] ReadHoldRegister(byte belongAddress, string startAddress, ushort getCount) + { + try + { + var inputStruct = new ReadHoldRegisterModbusProtocal.ReadHoldRegisterInputStruct(belongAddress, startAddress, getCount); + var outputStruct = + _wrapper.SendReceive(_wrapper["ReadHoldRegisterModbusProtocal"], inputStruct) as + ReadHoldRegisterModbusProtocal.ReadHoldRegisterOutputStruct; + return outputStruct.HoldRegisterStatus; + } + catch + { + return null; + } + } + + public bool WriteMultiRegister(byte belongAddress, string startAddress, object[] writeValue) + { + try + { + var inputStruct = new WriteMultiRegisterModbusProtocal.WriteMultiRegisterInputStruct(belongAddress, + startAddress, writeValue); + var outputStruct = + _wrapper.SendReceive(_wrapper["WriteMultiRegisterModbusProtocal"], inputStruct) as + WriteMultiRegisterModbusProtocal.WriteMultiRegisterOutputStruct; + if (outputStruct.WriteCount != writeValue.Length) return false; + return true; + } + catch + { + return false; + } + } + } +} diff --git a/NA200H/NA200H.sln b/NA200H/Modbus.Net-vs2013.sln similarity index 100% rename from NA200H/NA200H.sln rename to NA200H/Modbus.Net-vs2013.sln diff --git a/NA200H/NA200H.UI.Console/Program.cs b/NA200H/NA200H.UI.Console/Program.cs index c7958b1..92d2633 100644 --- a/NA200H/NA200H.UI.Console/Program.cs +++ b/NA200H/NA200H.UI.Console/Program.cs @@ -10,7 +10,7 @@ namespace NA200H.UI.ConsoleApp { class Program { - static void Main(string[] args) + private static void Main(string[] args) { /* string ip = "192.168.4.247"; @@ -36,7 +36,7 @@ namespace NA200H.UI.ConsoleApp Console.Read(); */ - + /*string ip = "192.168.3.246"; try { @@ -105,13 +105,19 @@ namespace NA200H.UI.ConsoleApp Console.Read(); Console.Read();*/ - ReadHoldRegisterModbusProtocal.ReadHoldRegisterInputStruct readHoldRegisterInputStruct = new ReadHoldRegisterModbusProtocal.ReadHoldRegisterInputStruct(2, "0", 4); - ReadHoldRegisterModbusProtocal.ReadHoldRegisterOutputStruct readHoldRegisterOutputStruct = (ReadHoldRegisterModbusProtocal.ReadHoldRegisterOutputStruct)wrapper.SendReceive(wrapper["ReadHoldRegisterModbusProtocal"], readHoldRegisterInputStruct); - for (int i = 0; i < readHoldRegisterOutputStruct.HoldRegisterStatus.Length; i++) + ushort[] holdRegArr = ModbusUtility.GetInstance().ReadHoldRegister(0x02, "0", 4); + foreach (var holdReg in holdRegArr) { - Console.WriteLine(readHoldRegisterOutputStruct.HoldRegisterStatus[i]); + Console.WriteLine(holdReg); } Console.Read(); + Console.Read(); + + Console.WriteLine(ModbusUtility.GetInstance() + .WriteMultiRegister(0x02, "0", new object[] {(ushort) 8, (ushort) 9, (ushort) 10})); + Console.Read(); + Console.Read(); + /* //调用方法二:自动构造 //第一步:先生成一个输入结构体,然后向这个结构体中填写数据 diff --git a/NA200H/NA200H.UI.WPF/MainWindow.xaml b/NA200H/NA200H.UI.WPF/MainWindow.xaml index d9d3a56..a42d8d9 100644 --- a/NA200H/NA200H.UI.WPF/MainWindow.xaml +++ b/NA200H/NA200H.UI.WPF/MainWindow.xaml @@ -1,8 +1,16 @@  + Title="MainWindow" Height="350" Width="525" Loaded="MainWindow_OnLoaded"> - + + + + +