2014-08-28 update 1
This commit is contained in:
@@ -44,6 +44,7 @@
|
||||
<Compile Include="AddressTranslator.cs" />
|
||||
<Compile Include="BaseProtocal.cs" />
|
||||
<Compile Include="ComConnector.cs" />
|
||||
<Compile Include="ModbusUtility.cs" />
|
||||
<Compile Include="RtuProtocalLinker.cs" />
|
||||
<Compile Include="ConfigurationManager.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
|
||||
@@ -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
|
||||
|
||||
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
|
||||
{
|
||||
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();
|
||||
|
||||
/*
|
||||
//调用方法二:自动构造
|
||||
//第一步:先生成一个输入结构体,然后向这个结构体中填写数据
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
<Window x:Class="NA200H.UI.WPF.MainWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
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>
|
||||
|
||||
<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>
|
||||
</Window>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user