2014-08-28 update 1
This commit is contained in:
@@ -44,6 +44,7 @@
|
|||||||
<Compile Include="AddressTranslator.cs" />
|
<Compile Include="AddressTranslator.cs" />
|
||||||
<Compile Include="BaseProtocal.cs" />
|
<Compile Include="BaseProtocal.cs" />
|
||||||
<Compile Include="ComConnector.cs" />
|
<Compile Include="ComConnector.cs" />
|
||||||
|
<Compile Include="ModbusUtility.cs" />
|
||||||
<Compile Include="RtuProtocalLinker.cs" />
|
<Compile Include="RtuProtocalLinker.cs" />
|
||||||
<Compile Include="ConfigurationManager.Designer.cs">
|
<Compile Include="ConfigurationManager.Designer.cs">
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
|
|||||||
@@ -583,14 +583,14 @@ namespace ModBus.Net
|
|||||||
|
|
||||||
public class WriteMultiRegisterInputStruct : InputStruct
|
public class WriteMultiRegisterInputStruct : InputStruct
|
||||||
{
|
{
|
||||||
public WriteMultiRegisterInputStruct(byte belongAddress, string startAddress, ushort[] writeValue)
|
public WriteMultiRegisterInputStruct(byte belongAddress, string startAddress, object[] writeValue)
|
||||||
{
|
{
|
||||||
BelongAddress = belongAddress;
|
BelongAddress = belongAddress;
|
||||||
FunctionCode = (int)ModbusProtocalReg.WriteMultiRegister;
|
FunctionCode = (int)ModbusProtocalReg.WriteMultiRegister;
|
||||||
StartAddress = AddressTranslatorNA200H.GetInstance().AddressTranslate(startAddress);
|
StartAddress = AddressTranslatorNA200H.GetInstance().AddressTranslate(startAddress);
|
||||||
WriteCount = (ushort)writeValue.Length;
|
WriteCount = (ushort)writeValue.Length;
|
||||||
WriteByteCount = (byte)(WriteCount * 2);
|
WriteByteCount = (byte)(WriteCount * 2);
|
||||||
WriteValue = writeValue.Clone() as ushort[];
|
WriteValue = writeValue.Clone() as object[];
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte BelongAddress { get; private set; }
|
public byte BelongAddress { get; private set; }
|
||||||
@@ -603,7 +603,7 @@ namespace ModBus.Net
|
|||||||
|
|
||||||
public byte WriteByteCount { get; private set; }
|
public byte WriteByteCount { get; private set; }
|
||||||
|
|
||||||
public ushort[] WriteValue { get; private set; }
|
public object[] WriteValue { get; private set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class WriteMultiRegisterOutputStruct : OutputStruct
|
public class WriteMultiRegisterOutputStruct : OutputStruct
|
||||||
|
|||||||
89
NA200H/ModBus.Net/ModbusUtility.cs
Normal file
89
NA200H/ModBus.Net/ModbusUtility.cs
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,7 @@ namespace NA200H.UI.ConsoleApp
|
|||||||
{
|
{
|
||||||
class Program
|
class Program
|
||||||
{
|
{
|
||||||
static void Main(string[] args)
|
private static void Main(string[] args)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
string ip = "192.168.4.247";
|
string ip = "192.168.4.247";
|
||||||
@@ -105,13 +105,19 @@ namespace NA200H.UI.ConsoleApp
|
|||||||
Console.Read();
|
Console.Read();
|
||||||
Console.Read();*/
|
Console.Read();*/
|
||||||
|
|
||||||
ReadHoldRegisterModbusProtocal.ReadHoldRegisterInputStruct readHoldRegisterInputStruct = new ReadHoldRegisterModbusProtocal.ReadHoldRegisterInputStruct(2, "0", 4);
|
ushort[] holdRegArr = ModbusUtility.GetInstance().ReadHoldRegister(0x02, "0", 4);
|
||||||
ReadHoldRegisterModbusProtocal.ReadHoldRegisterOutputStruct readHoldRegisterOutputStruct = (ReadHoldRegisterModbusProtocal.ReadHoldRegisterOutputStruct)wrapper.SendReceive(wrapper["ReadHoldRegisterModbusProtocal"], readHoldRegisterInputStruct);
|
foreach (var holdReg in holdRegArr)
|
||||||
for (int i = 0; i < readHoldRegisterOutputStruct.HoldRegisterStatus.Length; i++)
|
|
||||||
{
|
{
|
||||||
Console.WriteLine(readHoldRegisterOutputStruct.HoldRegisterStatus[i]);
|
Console.WriteLine(holdReg);
|
||||||
}
|
}
|
||||||
Console.Read();
|
Console.Read();
|
||||||
|
Console.Read();
|
||||||
|
|
||||||
|
Console.WriteLine(ModbusUtility.GetInstance()
|
||||||
|
.WriteMultiRegister(0x02, "0", new object[] {(ushort) 8, (ushort) 9, (ushort) 10}));
|
||||||
|
Console.Read();
|
||||||
|
Console.Read();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
//调用方法二:自动构造
|
//调用方法二:自动构造
|
||||||
//第一步:先生成一个输入结构体,然后向这个结构体中填写数据
|
//第一步:先生成一个输入结构体,然后向这个结构体中填写数据
|
||||||
|
|||||||
@@ -1,8 +1,16 @@
|
|||||||
<Window x:Class="NA200H.UI.WPF.MainWindow"
|
<Window x:Class="NA200H.UI.WPF.MainWindow"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Title="MainWindow" Height="350" Width="525">
|
Title="MainWindow" Height="350" Width="525" Loaded="MainWindow_OnLoaded">
|
||||||
<Grid>
|
<Grid>
|
||||||
|
<TextBox x:Name="Add1" HorizontalAlignment="Left" Height="23" Margin="46,125,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="65" TextAlignment="Center"/>
|
||||||
|
<TextBox x:Name="Add2" HorizontalAlignment="Left" Height="23" Margin="144,125,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="65" TextAlignment="Center"/>
|
||||||
|
<TextBox x:Name="Add3" HorizontalAlignment="Left" Height="23" Margin="242,125,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="65" TextAlignment="Center"/>
|
||||||
|
<TextBox x:Name="AddAns" HorizontalAlignment="Left" Height="23" Margin="400,125,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="65" IsEnabled="False" TextAlignment="Center"/>
|
||||||
|
<Button x:Name="Calc" Content="计算" HorizontalAlignment="Center" Margin="0,198,0,0" VerticalAlignment="Top" Width="75" Click="Calc_OnClick"/>
|
||||||
|
<Label Content="+" HorizontalAlignment="Left" Margin="116,125,0,0" VerticalAlignment="Top" Width="23" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||||
|
<Label Content="+" HorizontalAlignment="Left" Margin="214,125,0,0" VerticalAlignment="Top" Width="23" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||||
|
<Label Content="=" HorizontalAlignment="Left" Margin="343,122,0,0" VerticalAlignment="Top" Width="23" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
|
|||||||
@@ -13,14 +13,32 @@ namespace NA200H.UI.WPF
|
|||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
BaseProtocal wrapper = new ModbusRtuProtocal();
|
}
|
||||||
ReadHoldRegisterModbusProtocal.ReadHoldRegisterInputStruct readHoldRegisterInputStruct = new ReadHoldRegisterModbusProtocal.ReadHoldRegisterInputStruct(2, "0", 4);
|
|
||||||
ReadHoldRegisterModbusProtocal.ReadHoldRegisterOutputStruct readHoldRegisterOutputStruct = (ReadHoldRegisterModbusProtocal.ReadHoldRegisterOutputStruct)wrapper.SendReceive(wrapper["ReadHoldRegisterModbusProtocal"], readHoldRegisterInputStruct);
|
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
|
||||||
for (int i = 0; i < readHoldRegisterOutputStruct.HoldRegisterStatus.Length; i++)
|
|
||||||
{
|
{
|
||||||
Console.WriteLine(readHoldRegisterOutputStruct.HoldRegisterStatus[i]);
|
ModbusUtility.GetInstance().ModbusType = ModbusType.Rtu;
|
||||||
|
ushort[] getNum = ModbusUtility.GetInstance().ReadHoldRegister(0x02, "0", 4);
|
||||||
|
SetValue(getNum);
|
||||||
}
|
}
|
||||||
Console.Read();
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user