2016-04-30 update 1 version 1.1.1 add port support in modbus and siemens tcp connection.

This commit is contained in:
parallelbgls@outlook.com
2016-04-30 10:59:32 +08:00
parent d8ce64f22f
commit 668bbf8fcf
10 changed files with 92 additions and 9 deletions

1
.gitignore vendored
View File

@@ -154,3 +154,4 @@ $RECYCLE.BIN/
# Mac desktop service store files # Mac desktop service store files
.DS_Store .DS_Store
/Modbus.Net/packages

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata> <metadata>
<id>Modbus.Net.Modbus</id> <id>Modbus.Net.Modbus</id>
<version>1.1.0</version> <version>1.1.1</version>
<title>Modbus.Net.Modbus</title> <title>Modbus.Net.Modbus</title>
<authors>Chris L.(Luo Sheng)</authors> <authors>Chris L.(Luo Sheng)</authors>
<owners>Hangzhou Delian Information and Science Technology Co.,Ltd.</owners> <owners>Hangzhou Delian Information and Science Technology Co.,Ltd.</owners>

View File

@@ -13,5 +13,10 @@
{ {
ProtocalLinker = new ModbusTcpProtocalLinker(ip); ProtocalLinker = new ModbusTcpProtocalLinker(ip);
} }
public ModbusTcpProtocal(string ip, int port)
{
ProtocalLinker = new ModbusTcpProtocalLinker(ip, port);
}
} }
} }

View File

@@ -22,5 +22,10 @@
{ {
} }
public ModbusTcpProtocalLinker(string ip, int port) : base(ip, port)
{
}
} }
} }

View File

@@ -1,4 +1,5 @@
using System.Threading.Tasks; using System;
using System.Threading.Tasks;
namespace Modbus.Net.Modbus namespace Modbus.Net.Modbus
{ {
@@ -21,6 +22,34 @@ namespace Modbus.Net.Modbus
{ {
private ModbusType _modbusType; private ModbusType _modbusType;
protected string ConnectionStringIp
{
get
{
if (ConnectionString == null) return null;
return ConnectionString.Contains(":") ? ConnectionString.Split(':')[0] : ConnectionString;
}
}
protected int? ConnectionStringPort
{
get
{
if (ConnectionString == null) return null;
if (!ConnectionString.Contains(":")) return null;
var connectionStringSplit = ConnectionString.Split(':');
try
{
return connectionStringSplit.Length < 2 ? (int?)null : int.Parse(connectionStringSplit[1]);
}
catch
{
return null;
}
}
}
public ModbusType ModbusType public ModbusType ModbusType
{ {
get get
@@ -39,7 +68,7 @@ namespace Modbus.Net.Modbus
} }
case ModbusType.Tcp: case ModbusType.Tcp:
{ {
Wrapper = ConnectionString == null ? new ModbusTcpProtocal() : new ModbusTcpProtocal(ConnectionString); Wrapper = ConnectionString == null ? new ModbusTcpProtocal() : (ConnectionStringPort == null ? new ModbusTcpProtocal(ConnectionString) : new ModbusTcpProtocal(ConnectionStringIp,ConnectionStringPort.Value));
break; break;
} }
} }

View File

@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata> <metadata>
<id>Modbus.Net.Siemens</id> <id>Modbus.Net.Siemens</id>
<version>1.1.0</version> <version>1.1.1</version>
<title>Modbus.Net.Siemens</title> <title>Modbus.Net.Siemens</title>
<authors>Chris L.(Luo Sheng)</authors> <authors>Chris L.(Luo Sheng)</authors>
<owners>Hangzhou Delian Information and Science Technology Co.,Ltd.</owners> <owners>Hangzhou Delian Information and Science Technology Co.,Ltd.</owners>

View File

@@ -12,13 +12,20 @@ namespace Modbus.Net.Siemens
private readonly byte _tdpuSize; private readonly byte _tdpuSize;
private readonly string _ip; private readonly string _ip;
private readonly int _port;
private int _connectTryCount; private int _connectTryCount;
public SiemensTcpProtocal(byte tdpuSize, ushort tsapSrc, ushort tsapDst, ushort maxCalling, ushort maxCalled, ushort maxPdu) : this(tdpuSize, tsapSrc, tsapDst, maxCalling, maxCalled, maxPdu, ConfigurationManager.IP) public SiemensTcpProtocal(byte tdpuSize, ushort tsapSrc, ushort tsapDst, ushort maxCalling, ushort maxCalled, ushort maxPdu) : this(tdpuSize, tsapSrc, tsapDst, maxCalling, maxCalled, maxPdu, ConfigurationManager.IP)
{ {
} }
public SiemensTcpProtocal(byte tdpuSize, ushort tsapSrc, ushort tsapDst, ushort maxCalling, ushort maxCalled, ushort maxPdu, string ip) public SiemensTcpProtocal(byte tdpuSize, ushort tsapSrc, ushort tsapDst, ushort maxCalling, ushort maxCalled,
ushort maxPdu, string ip) : this (tdpuSize, tsapSrc, tsapDst, maxCalling, maxCalled, maxPdu, ip, 0)
{
}
public SiemensTcpProtocal(byte tdpuSize, ushort tsapSrc, ushort tsapDst, ushort maxCalling, ushort maxCalled, ushort maxPdu, string ip, int port)
{ {
_taspSrc = tsapSrc; _taspSrc = tsapSrc;
_tsapDst = tsapDst; _tsapDst = tsapDst;
@@ -27,6 +34,7 @@ namespace Modbus.Net.Siemens
_maxPdu = maxPdu; _maxPdu = maxPdu;
_tdpuSize = tdpuSize; _tdpuSize = tdpuSize;
_ip = ip; _ip = ip;
_port = port;
_connectTryCount = 0; _connectTryCount = 0;
} }
@@ -69,7 +77,7 @@ namespace Modbus.Net.Siemens
public override async Task<bool> ConnectAsync() public override async Task<bool> ConnectAsync()
{ {
_connectTryCount++; _connectTryCount++;
ProtocalLinker = new SiemensTcpProtocalLinker(_ip); ProtocalLinker = _port == 0 ? new SiemensTcpProtocalLinker(_ip) : new SiemensTcpProtocalLinker(_ip, _port);
if (!await ProtocalLinker.ConnectAsync()) return false; if (!await ProtocalLinker.ConnectAsync()) return false;
_connectTryCount = 0; _connectTryCount = 0;
var inputStruct = new CreateReferenceSiemensInputStruct(_tdpuSize, _taspSrc, _tsapDst); var inputStruct = new CreateReferenceSiemensInputStruct(_tdpuSize, _taspSrc, _tsapDst);

View File

@@ -33,5 +33,11 @@ namespace Modbus.Net.Siemens
{ {
} }
public SiemensTcpProtocalLinker(string ip, int port)
: base(ip, port)
{
}
} }
} }

View File

@@ -29,7 +29,34 @@ namespace Modbus.Net.Siemens
private readonly ushort _maxCalling; private readonly ushort _maxCalling;
private readonly ushort _maxCalled; private readonly ushort _maxCalled;
private readonly ushort _maxPdu; private readonly ushort _maxPdu;
protected string ConnectionStringIp
{
get
{
if (ConnectionString == null) return null;
return ConnectionString.Contains(":") ? ConnectionString.Split(':')[0] : ConnectionString;
}
}
protected int? ConnectionStringPort
{
get
{
if (ConnectionString == null) return null;
if (!ConnectionString.Contains(":")) return null;
var connectionStringSplit = ConnectionString.Split(':');
try
{
return connectionStringSplit.Length < 2 ? (int?)null : int.Parse(connectionStringSplit[1]);
}
catch
{
return null;
}
}
}
private SiemensType _siemensType; private SiemensType _siemensType;
public SiemensType ConnectionType public SiemensType ConnectionType
@@ -53,7 +80,7 @@ namespace Modbus.Net.Siemens
// } // }
case SiemensType.Tcp: case SiemensType.Tcp:
{ {
Wrapper = ConnectionString == null ? new SiemensTcpProtocal(_tdpuSize, _taspSrc, _tsapDst, _maxCalling, _maxCalled, _maxPdu) : new SiemensTcpProtocal(_tdpuSize, _taspSrc, _tsapDst, _maxCalling, _maxCalled, _maxPdu, ConnectionString); Wrapper = ConnectionString == null ? new SiemensTcpProtocal(_tdpuSize, _taspSrc, _tsapDst, _maxCalling, _maxCalled, _maxPdu) : (ConnectionStringPort == null ? new SiemensTcpProtocal(_tdpuSize, _taspSrc, _tsapDst, _maxCalling, _maxCalled, _maxPdu, ConnectionString) : new SiemensTcpProtocal(_tdpuSize, _taspSrc, _tsapDst, _maxCalling, _maxCalled, _maxPdu, ConnectionStringIp, ConnectionStringPort.Value));
break; break;
} }
} }

View File

@@ -50,13 +50,15 @@ namespace NA200H.UI.WPF
//}); //});
//machine.AddressFormater = new AddressFormaterNA200H(); //machine.AddressFormater = new AddressFormaterNA200H();
//machine.AddressTranslator = new AddressTranslatorNA200H(); //machine.AddressTranslator = new AddressTranslatorNA200H();
machine = new SiemensMachine(SiemensType.Tcp, "192.168.3.11", SiemensMachineModel.S7_300, new List<AddressUnit>() //machine.AddressCombiner = new AddressCombinerContinus();
machine = new SiemensMachine(SiemensType.Tcp, "192.168.3.11:102", SiemensMachineModel.S7_300, new List<AddressUnit>()
{ {
new AddressUnit() {Id = 1, Area = "V", Address = 0, CommunicationTag = "Add1", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0}, new AddressUnit() {Id = 1, Area = "V", Address = 0, CommunicationTag = "Add1", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0},
new AddressUnit() {Id = 2, Area = "V", Address = 2, CommunicationTag = "Add2", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0}, new AddressUnit() {Id = 2, Area = "V", Address = 2, CommunicationTag = "Add2", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0},
new AddressUnit() {Id = 3, Area = "V", Address = 4, CommunicationTag = "Add3", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0}, new AddressUnit() {Id = 3, Area = "V", Address = 4, CommunicationTag = "Add3", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0},
new AddressUnit() {Id = 4, Area = "V", Address = 6, CommunicationTag = "Ans", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0} new AddressUnit() {Id = 4, Area = "V", Address = 6, CommunicationTag = "Ans", DataType = typeof(ushort), Zoom = 1, DecimalPos = 0}
}); });
machine.AddressCombiner = new AddressCombinerContinus();
var result = machine.GetDatas(); var result = machine.GetDatas();
var resultFormat = BaseMachine.MapGetValuesToSetValues(result); var resultFormat = BaseMachine.MapGetValuesToSetValues(result);
SetValue(new ushort[4] {(ushort)resultFormat["Add1"], (ushort)resultFormat["Add2"], (ushort)resultFormat["Add3"], (ushort)resultFormat["Ans"]}); SetValue(new ushort[4] {(ushort)resultFormat["Add1"], (ushort)resultFormat["Add2"], (ushort)resultFormat["Add3"], (ushort)resultFormat["Ans"]});