2015-04-09 update 2

This commit is contained in:
parallelbgls@outlook.com
2015-04-09 17:08:04 +08:00
parent d5761a801e
commit 81f9df8117
8 changed files with 153 additions and 12 deletions

View File

@@ -83,5 +83,17 @@ namespace ModBus.Net
}
}
/// <summary>
/// 协议连接开始
/// </summary>
/// <returns></returns>
public abstract bool Connect();
/// <summary>
/// 协议连接断开
/// </summary>
/// <returns></returns>
public abstract bool Disconnect();
}
}

View File

@@ -73,10 +73,12 @@
<Compile Include="ModbusTcpProtocal.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SimenseProtocal.cs" />
<Compile Include="SimenseStructDefinition.cs" />
<Compile Include="SimenseTcpProtocal.cs" />
<Compile Include="SimenseProtocalLinkerBytesExtend.cs" />
<Compile Include="SimenseTcpProtocalLinker.cs" />
<Compile Include="SimenseUtility.cs" />
<Compile Include="TaskManager.cs" />
<Compile Include="TcpConnector.cs">
<SubType>Code</SubType>
</Compile>

View File

@@ -41,7 +41,15 @@ namespace ModBus.Net
{
public abstract class ModbusProtocal : BaseProtocal
{
public override bool Connect()
{
return ProtocalLinker.Connect();
}
public override bool Disconnect()
{
return ProtocalLinker.Disconnect();
}
}
#region PLC数据

View File

@@ -14,6 +14,17 @@ namespace ModBus.Net
{
get { return _baseConnector.IsConnected; }
}
public bool Connect()
{
return _baseConnector.Connect();
}
public bool Disconnect()
{
return _baseConnector.Disconnect();
}
/// <summary>
/// 发送并接收数据
/// </summary>

View File

@@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ModBus.Net
{
public struct TodClockStatus
{
public bool KV
{
get
{
var pos = 15;
return ValueHelper.Instance.GetBit(ValueHelper.Instance.GetBytes(TodValue), ref pos);
}
set { TodValue = ValueHelper.Instance.SetBit(ValueHelper.Instance.GetBytes(TodValue), 15, value); }
}
public byte K0_4
{
get
{
var pos = 0;
var byteValue = ValueHelper.Instance.GetByte(ValueHelper.Instance.GetBytes(TodValue), ref pos);
return (byte)(byteValue%64/4);
}
set
{
var pos = 0;
var byteValue = ValueHelper.Instance.GetByte(ValueHelper.Instance.GetBytes(TodValue), ref pos);
byteValue = (byte)(byteValue - (byteValue%128/4) + value);
TodValue = (ushort)(TodValue%128 + byteValue*128);
}
}
public bool ZNA
{
get
{
var pos = 5;
return ValueHelper.Instance.GetBit(ValueHelper.Instance.GetBytes(TodValue), ref pos);
}
set { TodValue = ValueHelper.Instance.SetBit(ValueHelper.Instance.GetBytes(TodValue), 5, value); }
}
public byte UA
{
get
{
var pos = 3;
var low = ValueHelper.Instance.GetBit(ValueHelper.Instance.GetBytes(TodValue), ref pos) ? 1 : 0;
var high = ValueHelper.Instance.GetBit(ValueHelper.Instance.GetBytes(TodValue), ref pos) ? 1 : 0;
high *= 2;
return (byte) (high + low);
}
set
{
TodValue = ValueHelper.Instance.SetBit(ValueHelper.Instance.GetBytes(TodValue), 3, value % 2 >= 1);
TodValue = ValueHelper.Instance.SetBit(ValueHelper.Instance.GetBytes(TodValue), 4, value / 2 >= 1);
}
}
public bool UZS
{
get
{
var pos = 2;
return ValueHelper.Instance.GetBit(ValueHelper.Instance.GetBytes(TodValue), ref pos);
}
set { TodValue = ValueHelper.Instance.SetBit(ValueHelper.Instance.GetBytes(TodValue), 2, value); }
}
public bool ESY
{
get
{
var pos = 1;
return ValueHelper.Instance.GetBit(ValueHelper.Instance.GetBytes(TodValue), ref pos);
}
set { TodValue = ValueHelper.Instance.SetBit(ValueHelper.Instance.GetBytes(TodValue), 1, value); }
}
public bool SYA
{
get
{
var pos = 0;
return ValueHelper.Instance.GetBit(ValueHelper.Instance.GetBytes(TodValue), ref pos);
}
set { TodValue = ValueHelper.Instance.SetBit(ValueHelper.Instance.GetBytes(TodValue), 0, value); }
}
public ushort TodValue { get; set; }
}
}

View File

@@ -32,14 +32,13 @@ namespace ModBus.Net
_tdpuSize = tdpuSize;
_ip = ip;
connectTryCount = 0;
Connected();
}
public override byte[] SendReceive(params object[] content)
{
while (!ProtocalLinker.IsConnected)
{
Connected();
Connect();
}
return base.SendReceive(content);
}
@@ -49,7 +48,7 @@ namespace ModBus.Net
if (!ProtocalLinker.IsConnected)
{
if (connectTryCount > 10) return null;
Connected();
Connect();
}
return base.SendReceive(unit, content);
}
@@ -59,16 +58,29 @@ namespace ModBus.Net
return base.SendReceive(unit, content);
}
protected void Connected()
public override bool Connect()
{
connectTryCount++;
ProtocalLinker = new SimenseTcpProtocalLinker(_ip);
var inputStruct = new CreateReferenceSimenseInputStruct(_tdpuSize, _taspSrc, _tsapDst);
var outputStruct =
(CreateReferenceSimenseOutputStruct)ForceSendReceive(this[typeof(CreateReferenceSimenseProtocal)], inputStruct);
if (!ProtocalLinker.IsConnected) return;
var inputStruct2 = new EstablishAssociationSimenseInputStruct(0x0101, _maxCalling, _maxCalled, _maxPdu);
var outputStruct2 = (EstablishAssociationSimenseOutputStruct)SendReceive(this[typeof(EstablishAssociationSimenseProtocal)], inputStruct2);
if (ProtocalLinker.Connect())
{
var inputStruct = new CreateReferenceSimenseInputStruct(_tdpuSize, _taspSrc, _tsapDst);
var outputStruct =
(CreateReferenceSimenseOutputStruct)
ForceSendReceive(this[typeof (CreateReferenceSimenseProtocal)], inputStruct);
if (!ProtocalLinker.IsConnected) return false;
var inputStruct2 = new EstablishAssociationSimenseInputStruct(0x0101, _maxCalling, _maxCalled, _maxPdu);
var outputStruct2 =
(EstablishAssociationSimenseOutputStruct)
SendReceive(this[typeof (EstablishAssociationSimenseProtocal)], inputStruct2);
return true;
}
return false;
}
public override bool Disconnect()
{
return ProtocalLinker.Disconnect();
}
}
}

View File

@@ -18,7 +18,7 @@ namespace ModBus.Net
protected TcpProtocalLinker(string ip, int port)
{
_baseConnector = new TcpConnector(ip, port, 10000);
_baseConnector = new TcpConnector(ip, port, 30);
}
}
}

View File

@@ -46,7 +46,7 @@ namespace ModBus.Net
#region Factory
protected static ValueHelper _Instance = null;
protected static ValueHelper _Instance;
/// <summary>
/// ValueHelper单例的实例