2014-10-11 update 2
This commit is contained in:
@@ -9,30 +9,6 @@ namespace ModBus.Net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class AddressTranslator
|
public abstract class AddressTranslator
|
||||||
{
|
{
|
||||||
protected static AddressTranslator _instance;
|
|
||||||
|
|
||||||
public static AddressTranslator Instance
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (_instance == null)
|
|
||||||
{
|
|
||||||
CreateTranslator(new AddressTranslatorBase());
|
|
||||||
}
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
protected set
|
|
||||||
{
|
|
||||||
if (value == null) CreateTranslator(new AddressTranslatorBase());
|
|
||||||
_instance = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void CreateTranslator(AddressTranslator instance)
|
|
||||||
{
|
|
||||||
Instance = instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract KeyValuePair<int,int> AddressTranslate(string address, bool isRead);
|
public abstract KeyValuePair<int,int> AddressTranslate(string address, bool isRead);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ namespace ModBus.Net
|
|||||||
/// <returns>数据是否正确接收</returns>
|
/// <returns>数据是否正确接收</returns>
|
||||||
protected ProtocalLinker _protocalLinker;
|
protected ProtocalLinker _protocalLinker;
|
||||||
|
|
||||||
|
|
||||||
protected BaseProtocal()
|
protected BaseProtocal()
|
||||||
{
|
{
|
||||||
Protocals = new Dictionary<string, ProtocalUnit>();
|
Protocals = new Dictionary<string, ProtocalUnit>();
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ namespace ModBus.Net
|
|||||||
/// 协议收发主体
|
/// 协议收发主体
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected BaseProtocal Wrapper;
|
protected BaseProtocal Wrapper;
|
||||||
|
|
||||||
|
public AddressTranslator AddressTranslator { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置连接字符串
|
/// 设置连接字符串
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -39,8 +42,19 @@ namespace ModBus.Net
|
|||||||
/// <returns>是否设置成功</returns>
|
/// <returns>是否设置成功</returns>
|
||||||
public abstract bool SetDatas(byte belongAddress, string startAddress, object[] setContents);
|
public abstract bool SetDatas(byte belongAddress, string startAddress, object[] setContents);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取PLC时间
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="belongAddress">从站地址</param>
|
||||||
|
/// <returns>PLC时间</returns>
|
||||||
public abstract DateTime GetTime(byte belongAddress);
|
public abstract DateTime GetTime(byte belongAddress);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置PLC时间
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="belongAddress">从站地址</param>
|
||||||
|
/// <param name="setTime">设置PLC时间</param>
|
||||||
|
/// <returns>设置是否成功</returns>
|
||||||
public abstract bool SetTime(byte belongAddress, DateTime setTime);
|
public abstract bool SetTime(byte belongAddress, DateTime setTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,10 +47,10 @@ namespace ModBus.Net
|
|||||||
#region 读PLC数据
|
#region 读PLC数据
|
||||||
public class ReadDataInputStruct : InputStruct
|
public class ReadDataInputStruct : InputStruct
|
||||||
{
|
{
|
||||||
public ReadDataInputStruct(byte belongAddress, string startAddress, ushort getCount)
|
public ReadDataInputStruct(byte belongAddress, string startAddress, ushort getCount, AddressTranslator addressTranslator)
|
||||||
{
|
{
|
||||||
BelongAddress = belongAddress;
|
BelongAddress = belongAddress;
|
||||||
KeyValuePair<int, int> translateAddress = AddressTranslator.Instance.AddressTranslate(startAddress, true);
|
KeyValuePair<int, int> translateAddress = addressTranslator.AddressTranslate(startAddress, true);
|
||||||
FunctionCode = (byte)translateAddress.Value;
|
FunctionCode = (byte)translateAddress.Value;
|
||||||
StartAddress = (ushort)translateAddress.Key;
|
StartAddress = (ushort)translateAddress.Key;
|
||||||
GetCount = getCount;
|
GetCount = getCount;
|
||||||
@@ -110,10 +110,10 @@ namespace ModBus.Net
|
|||||||
#region 写PLC数据
|
#region 写PLC数据
|
||||||
public class WriteDataInputStruct : InputStruct
|
public class WriteDataInputStruct : InputStruct
|
||||||
{
|
{
|
||||||
public WriteDataInputStruct(byte belongAddress, string startAddress, object[] writeValue)
|
public WriteDataInputStruct(byte belongAddress, string startAddress, object[] writeValue, AddressTranslator addressTranslator)
|
||||||
{
|
{
|
||||||
BelongAddress = belongAddress;
|
BelongAddress = belongAddress;
|
||||||
KeyValuePair<int, int> translateAddress = AddressTranslator.Instance.AddressTranslate(startAddress, false);
|
KeyValuePair<int, int> translateAddress = addressTranslator.AddressTranslate(startAddress, false);
|
||||||
FunctionCode = (byte)translateAddress.Value;
|
FunctionCode = (byte)translateAddress.Value;
|
||||||
StartAddress = (ushort)translateAddress.Key;
|
StartAddress = (ushort)translateAddress.Key;
|
||||||
WriteCount = (ushort)writeValue.Length;
|
WriteCount = (ushort)writeValue.Length;
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ namespace ModBus.Net
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var inputStruct = new ReadDataInputStruct(belongAddress, startAddress, getCount % 2 == 0 ? (ushort)(getCount / 2) : (ushort)(getCount / 2 + 1));
|
var inputStruct = new ReadDataInputStruct(belongAddress, startAddress, getCount % 2 == 0 ? (ushort)(getCount / 2) : (ushort)(getCount / 2 + 1), AddressTranslator);
|
||||||
var outputStruct =
|
var outputStruct =
|
||||||
Wrapper.SendReceive(Wrapper["ReadDataModbusProtocal"], inputStruct) as ReadDataOutputStruct;
|
Wrapper.SendReceive(Wrapper["ReadDataModbusProtocal"], inputStruct) as ReadDataOutputStruct;
|
||||||
return outputStruct.DataValue;
|
return outputStruct.DataValue;
|
||||||
@@ -91,7 +91,7 @@ namespace ModBus.Net
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var inputStruct = new WriteDataInputStruct(belongAddress, startAddress, setContents);
|
var inputStruct = new WriteDataInputStruct(belongAddress, startAddress, setContents, AddressTranslator);
|
||||||
var outputStruct =
|
var outputStruct =
|
||||||
Wrapper.SendReceive(Wrapper["WriteDataModbusProtocal"], inputStruct) as
|
Wrapper.SendReceive(Wrapper["WriteDataModbusProtocal"], inputStruct) as
|
||||||
WriteDataOutputStruct;
|
WriteDataOutputStruct;
|
||||||
|
|||||||
@@ -56,9 +56,9 @@ namespace NA200H.UI.ConsoleApp
|
|||||||
|
|
||||||
//调用方法二:自动构造
|
//调用方法二:自动构造
|
||||||
//第一步:先生成一个输入结构体,然后向这个结构体中填写数据
|
//第一步:先生成一个输入结构体,然后向这个结构体中填写数据
|
||||||
AddressTranslator.CreateTranslator(new AddressTranslatorNA200H());
|
AddressTranslator addressTranslator = new AddressTranslatorNA200H();
|
||||||
|
|
||||||
ReadDataInputStruct readCoilStatusInputStruct = new ReadDataInputStruct(0x02, "N1", 0x0a);
|
ReadDataInputStruct readCoilStatusInputStruct = new ReadDataInputStruct(0x02, "N1", 0x0a, addressTranslator);
|
||||||
//第二步:再生成一个输出结构体,执行相应协议的发送指令,并将输出信息自动转换到输出结构体中
|
//第二步:再生成一个输出结构体,执行相应协议的发送指令,并将输出信息自动转换到输出结构体中
|
||||||
ReadDataOutputStruct readCoilStatusOutputStruct = (ReadDataOutputStruct)wrapper.SendReceive(wrapper["ReadDataModbusProtocal"], readCoilStatusInputStruct);
|
ReadDataOutputStruct readCoilStatusOutputStruct = (ReadDataOutputStruct)wrapper.SendReceive(wrapper["ReadDataModbusProtocal"], readCoilStatusInputStruct);
|
||||||
//第三步:读取这个输出结构体的信息。
|
//第三步:读取这个输出结构体的信息。
|
||||||
@@ -74,7 +74,7 @@ namespace NA200H.UI.ConsoleApp
|
|||||||
Console.Read();
|
Console.Read();
|
||||||
Console.Read();
|
Console.Read();
|
||||||
|
|
||||||
ReadDataInputStruct readHoldRegisterInputStruct = new ReadDataInputStruct(0x02, "NW1", 4);
|
ReadDataInputStruct readHoldRegisterInputStruct = new ReadDataInputStruct(0x02, "NW1", 4, addressTranslator);
|
||||||
ReadDataOutputStruct readHoldRegisterOutputStruct = (ReadDataOutputStruct)wrapper.SendReceive(wrapper["ReadDataModbusProtocal"], readHoldRegisterInputStruct);
|
ReadDataOutputStruct readHoldRegisterOutputStruct = (ReadDataOutputStruct)wrapper.SendReceive(wrapper["ReadDataModbusProtocal"], readHoldRegisterInputStruct);
|
||||||
ushort[] array2 =
|
ushort[] array2 =
|
||||||
ValueHelper.Instance.ObjectArrayToDestinationArray<ushort>(
|
ValueHelper.Instance.ObjectArrayToDestinationArray<ushort>(
|
||||||
@@ -88,7 +88,7 @@ namespace NA200H.UI.ConsoleApp
|
|||||||
Console.Read();
|
Console.Read();
|
||||||
Console.Read();
|
Console.Read();
|
||||||
|
|
||||||
WriteDataInputStruct writeMultiCoilInputStruct = new WriteDataInputStruct(0x02, "Q20", new object[] { true, false, true, true, false, false, true, true, true, false });
|
WriteDataInputStruct writeMultiCoilInputStruct = new WriteDataInputStruct(0x02, "Q20", new object[] { true, false, true, true, false, false, true, true, true, false }, addressTranslator);
|
||||||
WriteDataOutputStruct writeMultiCoilOutputStruct = (WriteDataOutputStruct)wrapper.SendReceive(wrapper["WriteDataModbusProtocal"], writeMultiCoilInputStruct);
|
WriteDataOutputStruct writeMultiCoilOutputStruct = (WriteDataOutputStruct)wrapper.SendReceive(wrapper["WriteDataModbusProtocal"], writeMultiCoilInputStruct);
|
||||||
Console.WriteLine(writeMultiCoilOutputStruct.StartAddress);
|
Console.WriteLine(writeMultiCoilOutputStruct.StartAddress);
|
||||||
Console.WriteLine(writeMultiCoilOutputStruct.WriteCount);
|
Console.WriteLine(writeMultiCoilOutputStruct.WriteCount);
|
||||||
@@ -96,7 +96,7 @@ namespace NA200H.UI.ConsoleApp
|
|||||||
Console.Read();
|
Console.Read();
|
||||||
Console.Read();
|
Console.Read();
|
||||||
|
|
||||||
WriteDataInputStruct writeMultiRegisterInputStruct = new WriteDataInputStruct(0x02, "NW1", new object[] { (ushort)25, (ushort)18, (ushort)17 });
|
WriteDataInputStruct writeMultiRegisterInputStruct = new WriteDataInputStruct(0x02, "NW1", new object[] { (ushort)25, (ushort)18, (ushort)17 }, addressTranslator);
|
||||||
WriteDataOutputStruct writeMultiRegisterOutputStruct = (WriteDataOutputStruct)wrapper.SendReceive(wrapper["WriteDataModbusProtocal"], writeMultiRegisterInputStruct);
|
WriteDataOutputStruct writeMultiRegisterOutputStruct = (WriteDataOutputStruct)wrapper.SendReceive(wrapper["WriteDataModbusProtocal"], writeMultiRegisterInputStruct);
|
||||||
Console.WriteLine(writeMultiRegisterOutputStruct.StartAddress);
|
Console.WriteLine(writeMultiRegisterOutputStruct.StartAddress);
|
||||||
Console.WriteLine(writeMultiRegisterOutputStruct.WriteCount);
|
Console.WriteLine(writeMultiRegisterOutputStruct.WriteCount);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace NA200H.UI.WPF
|
|||||||
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
|
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
utility = new ModbusUtility((int) ModbusType.Tcp, "192.168.3.247");
|
utility = new ModbusUtility((int) ModbusType.Tcp, "192.168.3.247");
|
||||||
AddressTranslator.CreateTranslator(new AddressTranslatorNA200H());
|
utility.AddressTranslator = new AddressTranslatorNA200H();
|
||||||
//byte[] getNum = utility.GetDatas(0x02, "03:10000", 8);
|
//byte[] getNum = utility.GetDatas(0x02, "03:10000", 8);
|
||||||
byte[] getNum = utility.GetDatas(0x02, "NW1", 8);
|
byte[] getNum = utility.GetDatas(0x02, "NW1", 8);
|
||||||
object[] getNumObjects =
|
object[] getNumObjects =
|
||||||
|
|||||||
Reference in New Issue
Block a user