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">
-
+
+
+
+
+
+
+
+
+
diff --git a/NA200H/NA200H.UI.WPF/MainWindow.xaml.cs b/NA200H/NA200H.UI.WPF/MainWindow.xaml.cs
index 0f0c649..a4d4864 100644
--- a/NA200H/NA200H.UI.WPF/MainWindow.xaml.cs
+++ b/NA200H/NA200H.UI.WPF/MainWindow.xaml.cs
@@ -12,15 +12,33 @@ namespace NA200H.UI.WPF
{
public MainWindow()
{
- InitializeComponent();
- BaseProtocal wrapper = new ModbusRtuProtocal();
- 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++)
- {
- Console.WriteLine(readHoldRegisterOutputStruct.HoldRegisterStatus[i]);
- }
- Console.Read();
+ InitializeComponent();
+ }
+
+ private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
+ {
+ ModbusUtility.GetInstance().ModbusType = ModbusType.Rtu;
+ ushort[] getNum = ModbusUtility.GetInstance().ReadHoldRegister(0x02, "0", 4);
+ SetValue(getNum);
+ }
+
+ private void SetValue(ushort[] getNum)
+ {
+ Add1.Text = getNum[0].ToString();
+ Add2.Text = getNum[1].ToString();
+ Add3.Text = getNum[2].ToString();
+ AddAns.Text = getNum[3].ToString();
+ }
+
+ private void Calc_OnClick(object sender, RoutedEventArgs e)
+ {
+ ushort add1 = 0, add2 = 0, add3 = 0;
+ ushort.TryParse(Add1.Text, out add1);
+ ushort.TryParse(Add2.Text, out add2);
+ ushort.TryParse(Add3.Text, out add3);
+ ModbusUtility.GetInstance().WriteMultiRegister(0x02, "0", new object[] {add1, add2, add3});
+ ushort[] getNum = ModbusUtility.GetInstance().ReadHoldRegister(0x02, "0", 4);
+ SetValue(getNum);
}
}
}