2017-04-01 update 1 IInputStrcut IOutputStruct Template System.
This commit is contained in:
@@ -137,8 +137,7 @@ namespace Modbus.Net.Modbus
|
||||
var inputStruct = new ReadDataModbusInputStruct(SlaveAddress, startAddress,
|
||||
(ushort) getByteCount, AddressTranslator);
|
||||
var outputStruct = await
|
||||
Wrapper.SendReceiveAsync(Wrapper[typeof (ReadDataModbusProtocal)], inputStruct) as
|
||||
ReadDataModbusOutputStruct;
|
||||
Wrapper.SendReceiveAsync<ReadDataModbusOutputStruct>(Wrapper[typeof (ReadDataModbusProtocal)], inputStruct);
|
||||
return outputStruct?.DataValue;
|
||||
}
|
||||
catch
|
||||
@@ -160,8 +159,7 @@ namespace Modbus.Net.Modbus
|
||||
var inputStruct = new WriteDataModbusInputStruct(SlaveAddress, startAddress, setContents,
|
||||
AddressTranslator, Endian);
|
||||
var outputStruct = await
|
||||
Wrapper.SendReceiveAsync(Wrapper[typeof (WriteDataModbusProtocal)], inputStruct) as
|
||||
WriteDataModbusOutputStruct;
|
||||
Wrapper.SendReceiveAsync<WriteDataModbusOutputStruct>(Wrapper[typeof (WriteDataModbusProtocal)], inputStruct);
|
||||
return outputStruct?.WriteCount == setContents.Length;
|
||||
}
|
||||
catch
|
||||
@@ -181,8 +179,7 @@ namespace Modbus.Net.Modbus
|
||||
{
|
||||
var inputStruct = new GetSystemTimeModbusInputStruct(SlaveAddress);
|
||||
var outputStruct =
|
||||
Wrapper.SendReceive(Wrapper[typeof(GetSystemTimeModbusProtocal)], inputStruct) as
|
||||
GetSystemTimeModbusOutputStruct;
|
||||
Wrapper.SendReceive<GetSystemTimeModbusOutputStruct>(Wrapper[typeof(GetSystemTimeModbusProtocal)], inputStruct);
|
||||
return outputStruct?.Time;
|
||||
}
|
||||
catch (Exception)
|
||||
@@ -202,8 +199,7 @@ namespace Modbus.Net.Modbus
|
||||
{
|
||||
var inputStruct = new SetSystemTimeModbusInputStruct(SlaveAddress, setTime);
|
||||
var outputStruct =
|
||||
Wrapper.SendReceive(Wrapper[typeof(SetSystemTimeModbusProtocal)], inputStruct) as
|
||||
SetSystemTimeModbusOutputStruct;
|
||||
Wrapper.SendReceive<SetSystemTimeModbusOutputStruct>(Wrapper[typeof(SetSystemTimeModbusProtocal)], inputStruct);
|
||||
return outputStruct?.WriteCount > 0;
|
||||
}
|
||||
catch (Exception)
|
||||
|
||||
@@ -33,8 +33,7 @@ namespace Modbus.Net.OPC
|
||||
var readRequestOpcInputStruct = new ReadRequestOpcInputStruct(startAddress, split.ToString());
|
||||
var readRequestOpcOutputStruct =
|
||||
await
|
||||
Wrapper.SendReceiveAsync(Wrapper[typeof(ReadRequestOpcProtocal)], readRequestOpcInputStruct) as
|
||||
ReadRequestOpcOutputStruct;
|
||||
Wrapper.SendReceiveAsync<ReadRequestOpcOutputStruct>(Wrapper[typeof(ReadRequestOpcProtocal)], readRequestOpcInputStruct);
|
||||
return readRequestOpcOutputStruct?.GetValue;
|
||||
}
|
||||
catch (Exception)
|
||||
@@ -51,8 +50,7 @@ namespace Modbus.Net.OPC
|
||||
var writeRequestOpcInputStruct = new WriteRequestOpcInputStruct(startAddress, split.ToString(), setContents[0]);
|
||||
var writeRequestOpcOutputStruct =
|
||||
await
|
||||
Wrapper.SendReceiveAsync(Wrapper[typeof(WriteRequestOpcProtocal)], writeRequestOpcInputStruct)
|
||||
as WriteRequestOpcOutputStruct;
|
||||
Wrapper.SendReceiveAsync<WriteRequestOpcOutputStruct>(Wrapper[typeof(WriteRequestOpcProtocal)], writeRequestOpcInputStruct);
|
||||
return writeRequestOpcOutputStruct?.WriteResult == true;
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@@ -183,8 +183,8 @@ namespace Modbus.Net.Siemens
|
||||
0xd3c7, SiemensTypeCode.Byte, startAddress, (ushort) getByteCount, AddressTranslator);
|
||||
var readRequestSiemensOutputStruct =
|
||||
await
|
||||
Wrapper.SendReceiveAsync(Wrapper[typeof (ReadRequestSiemensProtocal)],
|
||||
readRequestSiemensInputStruct) as ReadRequestSiemensOutputStruct;
|
||||
Wrapper.SendReceiveAsync<ReadRequestSiemensOutputStruct>(Wrapper[typeof (ReadRequestSiemensProtocal)],
|
||||
readRequestSiemensInputStruct);
|
||||
return readRequestSiemensOutputStruct?.GetValue;
|
||||
}
|
||||
catch (Exception)
|
||||
@@ -207,8 +207,8 @@ namespace Modbus.Net.Siemens
|
||||
0xd3c8, startAddress, setContents, AddressTranslator);
|
||||
var writeRequestSiemensOutputStruct =
|
||||
await
|
||||
Wrapper.SendReceiveAsync(Wrapper[typeof (WriteRequestSiemensProtocal)],
|
||||
writeRequestSiemensInputStruct) as WriteRequestSiemensOutputStruct;
|
||||
Wrapper.SendReceiveAsync<WriteRequestSiemensOutputStruct>(Wrapper[typeof (WriteRequestSiemensProtocal)],
|
||||
writeRequestSiemensInputStruct);
|
||||
return writeRequestSiemensOutputStruct?.AccessResult == SiemensAccessResult.NoError;
|
||||
}
|
||||
catch (Exception)
|
||||
|
||||
@@ -109,6 +109,18 @@ namespace Modbus.Net
|
||||
return AsyncHelper.RunSync(() => SendReceiveAsync(unit, content));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送协议,通过传入需要使用的协议内容和输入结构
|
||||
/// </summary>
|
||||
/// <param name="unit">协议的实例</param>
|
||||
/// <param name="content">输入信息的结构化描述</param>
|
||||
/// <returns>输出信息的结构化描述</returns>
|
||||
/// <typeparam name="T">IOutputStruct的具体类型</typeparam>
|
||||
public virtual T SendReceive<T>(ProtocalUnit unit, IInputStruct content) where T : class, IOutputStruct
|
||||
{
|
||||
return AsyncHelper.RunSync(() => SendReceiveAsync<T>(unit, content));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送协议,通过传入需要使用的协议内容和输入结构
|
||||
/// </summary>
|
||||
@@ -116,6 +128,18 @@ namespace Modbus.Net
|
||||
/// <param name="content">输入信息的结构化描述</param>
|
||||
/// <returns>输出信息的结构化描述</returns>
|
||||
public virtual async Task<IOutputStruct> SendReceiveAsync(ProtocalUnit unit, IInputStruct content)
|
||||
{
|
||||
return await SendReceiveAsync<IOutputStruct>(unit, content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送协议,通过传入需要使用的协议内容和输入结构
|
||||
/// </summary>
|
||||
/// <param name="unit">协议的实例</param>
|
||||
/// <param name="content">输入信息的结构化描述</param>
|
||||
/// <returns>输出信息的结构化描述</returns>
|
||||
/// <typeparam name="T">IOutputStruct的具体类型</typeparam>
|
||||
public virtual async Task<T> SendReceiveAsync<T>(ProtocalUnit unit, IInputStruct content) where T : class, IOutputStruct
|
||||
{
|
||||
var t = 0;
|
||||
var formatContent = unit.Format(content);
|
||||
@@ -133,7 +157,7 @@ namespace Modbus.Net
|
||||
}
|
||||
if (receiveContent != null)
|
||||
{
|
||||
return unit.Unformat(receiveContent, ref t);
|
||||
return unit.Unformat<T>(receiveContent, ref t);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -19,6 +19,17 @@ namespace Modbus.Net
|
||||
/// <returns>格式化后的字节流</returns>
|
||||
public abstract byte[] Format(IInputStruct message);
|
||||
|
||||
/// <summary>
|
||||
/// 从输入结构格式化
|
||||
/// </summary>
|
||||
/// <param name="message">结构化的输入数据</param>
|
||||
/// <typeparam name="T">IInputStruct的具体类型</typeparam>
|
||||
/// <returns>格式化后的字节流</returns>
|
||||
public byte[] Format<T>(T message) where T : IInputStruct
|
||||
{
|
||||
return Format(message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从对象的参数数组格式化
|
||||
/// </summary>
|
||||
@@ -37,6 +48,18 @@ namespace Modbus.Net
|
||||
/// <returns>结构化的输出数据</returns>
|
||||
public abstract IOutputStruct Unformat(byte[] messageBytes, ref int pos);
|
||||
|
||||
/// <summary>
|
||||
/// 把仪器返回的内容填充到输出结构中
|
||||
/// </summary>
|
||||
/// <param name="messageBytes">返回数据的字节流</param>
|
||||
/// <param name="pos">转换标记位</param>
|
||||
/// <typeparam name="T">IOutputStruct的具体类型</typeparam>
|
||||
/// <returns>结构化的输出数据</returns>
|
||||
public T Unformat<T>(byte[] messageBytes, ref int pos) where T : class, IOutputStruct
|
||||
{
|
||||
return Unformat(messageBytes, ref pos) as T;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 转换静态方法,把对象数组转换为字节数组。
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user