Files
Modbus.Net/Modbus.Net/ModBus.Net/SimenseTcpProtocal.cs
parallelbgls@outlook.com 2e9c099384 2015-05-14 update 1
2015-05-14 14:09:36 +08:00

78 lines
2.7 KiB
C#

using System;
namespace ModBus.Net
{
public class SimenseTcpProtocal : SimenseProtocal
{
private ushort _taspSrc;
private ushort _tsapDst;
private ushort _maxCalling;
private ushort _maxCalled;
private ushort _maxPdu;
private byte _tdpuSize;
private string _ip;
private int connectTryCount;
public SimenseTcpProtocal(byte tdpuSize, ushort tsapSrc, ushort tsapDst, ushort maxCalling, ushort maxCalled, ushort maxPdu) : this(tdpuSize, tsapSrc, tsapDst, maxCalling, maxCalled, maxPdu, ConfigurationManager.IP)
{
}
public SimenseTcpProtocal(byte tdpuSize, ushort tsapSrc, ushort tsapDst, ushort maxCalling, ushort maxCalled, ushort maxPdu, string ip)
{
_taspSrc = tsapSrc;
_tsapDst = tsapDst;
_maxCalling = maxCalling;
_maxCalled = maxCalled;
_maxPdu = maxPdu;
_tdpuSize = tdpuSize;
_ip = ip;
connectTryCount = 0;
}
public override byte[] SendReceive(params object[] content)
{
while (!ProtocalLinker.IsConnected)
{
Connect();
}
return base.SendReceive(content);
}
public override OutputStruct SendReceive(ProtocalUnit unit, InputStruct content)
{
if (!ProtocalLinker.IsConnected)
{
if (connectTryCount > 10) return null;
Connect();
}
return base.SendReceive(unit, content);
}
private OutputStruct ForceSendReceive(ProtocalUnit unit, InputStruct content)
{
return base.SendReceive(unit, content);
}
public override bool Connect()
{
connectTryCount++;
ProtocalLinker = new SimenseTcpProtocalLinker(_ip);
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;
}
}
}