ppi fix
This commit is contained in:
@@ -73,25 +73,12 @@ namespace Modbus.Net.Siemens
|
|||||||
/// <returns>是否连接成功</returns>
|
/// <returns>是否连接成功</returns>
|
||||||
public override async Task<bool> ConnectAsync()
|
public override async Task<bool> ConnectAsync()
|
||||||
{
|
{
|
||||||
IOutputStruct outputStruct;
|
|
||||||
using (await _lock.LockAsync())
|
using (await _lock.LockAsync())
|
||||||
{
|
{
|
||||||
if (ProtocolLinker.IsConnected) return true;
|
if (ProtocolLinker.IsConnected) return true;
|
||||||
if (!await ProtocolLinker.ConnectAsync()) return false;
|
if (!await ProtocolLinker.ConnectAsync()) return false;
|
||||||
var inputStruct = new ComCreateReferenceSiemensInputStruct(SlaveAddress, MasterAddress);
|
|
||||||
outputStruct =
|
|
||||||
(await (await
|
|
||||||
ForceSendReceiveAsync(this[typeof(ComCreateReferenceSiemensProtocol)],
|
|
||||||
inputStruct)).SendReceiveAsync(this[typeof(ComConfirmMessageSiemensProtocol)], answer =>
|
|
||||||
answer != null
|
|
||||||
? new ComConfirmMessageSiemensInputStruct(SlaveAddress, MasterAddress)
|
|
||||||
: null)).Unwrap<ComConfirmMessageSiemensOutputStruct>();
|
|
||||||
if (outputStruct == null && ProtocolLinker.IsConnected)
|
|
||||||
{
|
|
||||||
ProtocolLinker.Disconnect();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return outputStruct != null;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.IO.Ports;
|
||||||
|
|
||||||
namespace Modbus.Net.Siemens
|
namespace Modbus.Net.Siemens
|
||||||
{
|
{
|
||||||
@@ -16,11 +16,19 @@ namespace Modbus.Net.Siemens
|
|||||||
/// <param name="com">串口地址</param>
|
/// <param name="com">串口地址</param>
|
||||||
/// <param name="slaveAddress">从站号</param>
|
/// <param name="slaveAddress">从站号</param>
|
||||||
public SiemensPpiProtocolLinker(string com, int slaveAddress)
|
public SiemensPpiProtocolLinker(string com, int slaveAddress)
|
||||||
: base(com, slaveAddress)
|
: base(com, slaveAddress, parity:Parity.Even)
|
||||||
{
|
{
|
||||||
((IConnectorWithController<byte[], byte[]>)BaseConnector).AddController(new FifoController(
|
((IConnectorWithController<byte[], byte[]>)BaseConnector).AddController(new FifoController(
|
||||||
int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")),
|
int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "FetchSleepTime")),
|
||||||
lengthCalc: DuplicateWithCount.GetDuplcateFunc(new List<int> { 1 }, 6),
|
lengthCalc: content =>
|
||||||
|
{
|
||||||
|
if (content[0] == 0x10)
|
||||||
|
return 6;
|
||||||
|
else if (content[0] == 0xE5)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return DuplicateWithCount.GetDuplcateFunc(new List<int> { 1 }, 6)(content);
|
||||||
|
},
|
||||||
checkRightFunc: ContentCheck.FcsCheckRight,
|
checkRightFunc: ContentCheck.FcsCheckRight,
|
||||||
waitingListMaxCount: ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount") != null ?
|
waitingListMaxCount: ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount") != null ?
|
||||||
int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount")) :
|
int.Parse(ConfigurationReader.GetValue("COM:" + com + ":" + slaveAddress, "WaitingListCount")) :
|
||||||
|
|||||||
@@ -433,24 +433,36 @@ namespace Modbus.Net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
protected void CheckOpen()
|
protected void CheckOpen()
|
||||||
{
|
{
|
||||||
if (!SerialPort.IsOpen)
|
if (SerialPort == null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SerialPort.Open();
|
Connect();
|
||||||
}
|
}
|
||||||
catch (Exception err)
|
catch (Exception err1)
|
||||||
{
|
{
|
||||||
logger.LogError(err, "Com client {ConnectionToken} open error", _com);
|
logger.LogError(err1, "Com client {ConnectionToken} open error", _com);
|
||||||
Dispose();
|
Dispose();
|
||||||
|
}
|
||||||
|
if (!SerialPort.IsOpen)
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
SerialPort.Open();
|
Connect();
|
||||||
}
|
}
|
||||||
catch (Exception err2)
|
catch (Exception err2)
|
||||||
{
|
{
|
||||||
logger.LogError(err2, "Com client {ConnectionToken} open error", _com);
|
logger.LogError(err2, "Com client {ConnectionToken} open error", _com);
|
||||||
Dispose();
|
Dispose();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Connect();
|
||||||
|
}
|
||||||
|
catch (Exception err3)
|
||||||
|
{
|
||||||
|
logger.LogError(err3, "Com client {ConnectionToken} open error", _com);
|
||||||
|
Dispose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,9 @@ namespace Modbus.Net
|
|||||||
public static bool? FcsCheckRight(byte[] content)
|
public static bool? FcsCheckRight(byte[] content)
|
||||||
{
|
{
|
||||||
var fcsCheck = 0;
|
var fcsCheck = 0;
|
||||||
for (var i = 4; i < content.Length - 2; i++)
|
var start = content[0] == 0x10 ? 1 : 4;
|
||||||
|
if (content[0] == 0xE5) return true;
|
||||||
|
for (var i = start; i < content.Length - 2; i++)
|
||||||
fcsCheck += content[i];
|
fcsCheck += content[i];
|
||||||
fcsCheck = fcsCheck % 256;
|
fcsCheck = fcsCheck % 256;
|
||||||
if (fcsCheck != content[content.Length - 2]) return false;
|
if (fcsCheck != content[content.Length - 2]) return false;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
"h:slaveAddress": 1,
|
"h:slaveAddress": 1,
|
||||||
"i:masterAddress": 2,
|
"i:masterAddress": 2,
|
||||||
"j:src": 1,
|
"j:src": 1,
|
||||||
"k:dst": 0
|
"k:dst": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"a:id": "ModbusMachine2",
|
"a:id": "ModbusMachine2",
|
||||||
@@ -48,6 +48,19 @@
|
|||||||
"g:slaveAddress": 3,
|
"g:slaveAddress": 3,
|
||||||
"h:masterAddress": 2,
|
"h:masterAddress": 2,
|
||||||
"i:endian": "BigEndianLsb"
|
"i:endian": "BigEndianLsb"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a:id": "SiemensMachine2",
|
||||||
|
"b:protocol": "Siemens",
|
||||||
|
"c:type": "Ppi",
|
||||||
|
"d:connectionString": "COM11",
|
||||||
|
"e:model": "S7_200",
|
||||||
|
"f:addressMap": "AddressMapSiemens",
|
||||||
|
"g:keepConnect": true,
|
||||||
|
"h:slaveAddress": 2,
|
||||||
|
"i:masterAddress": 0,
|
||||||
|
"j:src": 1,
|
||||||
|
"k:dst": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"addressMap": {
|
"addressMap": {
|
||||||
|
|||||||
@@ -8,12 +8,18 @@ namespace Modbus.Net.Tests
|
|||||||
{
|
{
|
||||||
private BaseMachine<string, string>? _siemensTcpMachine;
|
private BaseMachine<string, string>? _siemensTcpMachine;
|
||||||
|
|
||||||
|
private BaseMachine<string, string>? _siemensPpiMachine;
|
||||||
|
|
||||||
private string _machineIp = "10.10.18.251";
|
private string _machineIp = "10.10.18.251";
|
||||||
|
|
||||||
|
private string _machineCom = "COM11";
|
||||||
|
|
||||||
[TestInitialize]
|
[TestInitialize]
|
||||||
public void Init()
|
public void Init()
|
||||||
{
|
{
|
||||||
_siemensTcpMachine = new SiemensMachine<string, string>("1", SiemensType.Tcp, _machineIp, SiemensMachineModel.S7_1200, null, true, 2, 0);
|
_siemensTcpMachine = new SiemensMachine<string, string>("1", SiemensType.Tcp, _machineIp, SiemensMachineModel.S7_1200, null, true, 2, 0);
|
||||||
|
|
||||||
|
_siemensPpiMachine = new SiemensMachine<string, string>("2", SiemensType.Ppi, _machineCom, SiemensMachineModel.S7_200, null, true, 2, 0, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
@@ -43,9 +49,14 @@ namespace Modbus.Net.Tests
|
|||||||
|
|
||||||
_siemensTcpMachine!.GetAddresses = addresses;
|
_siemensTcpMachine!.GetAddresses = addresses;
|
||||||
await _siemensTcpMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
await _siemensTcpMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
||||||
|
_siemensPpiMachine!.GetAddresses = addresses;
|
||||||
|
await _siemensPpiMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
||||||
|
|
||||||
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
|
var ans2 = await _siemensPpiMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
|
|
||||||
Assert.AreEqual(ans.Datas["Q 0.0"].DeviceValue, dic1["Q 0.0"]);
|
Assert.AreEqual(ans.Datas["Q 0.0"].DeviceValue, dic1["Q 0.0"]);
|
||||||
|
Assert.AreEqual(ans2.Datas["Q 0.0"].DeviceValue, dic1["Q 0.0"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
@@ -65,8 +76,13 @@ namespace Modbus.Net.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
_siemensTcpMachine!.GetAddresses = addresses;
|
_siemensTcpMachine!.GetAddresses = addresses;
|
||||||
|
_siemensPpiMachine!.GetAddresses = addresses;
|
||||||
|
|
||||||
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
|
var ans2 = await _siemensPpiMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
|
|
||||||
Assert.AreEqual(ans.Datas["I 0.0"].DeviceValue, 0);
|
Assert.AreEqual(ans.Datas["I 0.0"].DeviceValue, 0);
|
||||||
|
Assert.AreEqual(ans2.Datas["I 0.0"].DeviceValue, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
@@ -88,6 +104,7 @@ namespace Modbus.Net.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
_siemensTcpMachine!.GetAddresses = addresses;
|
_siemensTcpMachine!.GetAddresses = addresses;
|
||||||
|
_siemensPpiMachine!.GetAddresses = addresses;
|
||||||
|
|
||||||
var dic1 = new Dictionary<string, double>()
|
var dic1 = new Dictionary<string, double>()
|
||||||
{
|
{
|
||||||
@@ -97,8 +114,13 @@ namespace Modbus.Net.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
await _siemensTcpMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
await _siemensTcpMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
||||||
|
await _siemensPpiMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
||||||
|
|
||||||
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
|
var ans2 = await _siemensPpiMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
|
|
||||||
Assert.AreEqual(ans.Datas["M 0.0"].DeviceValue, dic1["M 0"]);
|
Assert.AreEqual(ans.Datas["M 0.0"].DeviceValue, dic1["M 0"]);
|
||||||
|
Assert.AreEqual(ans2.Datas["M 0.0"].DeviceValue, dic1["M 0"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
@@ -120,6 +142,7 @@ namespace Modbus.Net.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
_siemensTcpMachine!.GetAddresses = addresses;
|
_siemensTcpMachine!.GetAddresses = addresses;
|
||||||
|
_siemensPpiMachine!.GetAddresses = addresses;
|
||||||
|
|
||||||
var dic1 = new Dictionary<string, double>()
|
var dic1 = new Dictionary<string, double>()
|
||||||
{
|
{
|
||||||
@@ -129,9 +152,13 @@ namespace Modbus.Net.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
await _siemensTcpMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
await _siemensTcpMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
||||||
|
await _siemensPpiMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
||||||
|
|
||||||
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
|
var ans2 = await _siemensPpiMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
|
|
||||||
Assert.AreEqual(ans.Datas["M 0.0"].DeviceValue, dic1["M 0.0"]);
|
Assert.AreEqual(ans.Datas["M 0.0"].DeviceValue, dic1["M 0.0"]);
|
||||||
|
Assert.AreEqual(ans2.Datas["M 0.0"].DeviceValue, dic1["M 0.0"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
@@ -144,7 +171,7 @@ namespace Modbus.Net.Tests
|
|||||||
new AddressUnit
|
new AddressUnit
|
||||||
{
|
{
|
||||||
Id = "0",
|
Id = "0",
|
||||||
Area = "DB2",
|
Area = "DB1",
|
||||||
Address = 0,
|
Address = 0,
|
||||||
SubAddress = 0,
|
SubAddress = 0,
|
||||||
CommunicationTag = "A1",
|
CommunicationTag = "A1",
|
||||||
@@ -155,15 +182,21 @@ namespace Modbus.Net.Tests
|
|||||||
var dic1 = new Dictionary<string, double>()
|
var dic1 = new Dictionary<string, double>()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
"DB2 0.0", r.Next(0, UInt16.MaxValue)
|
"DB1 0.0", r.Next(0, UInt16.MaxValue)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
_siemensTcpMachine!.GetAddresses = addresses;
|
_siemensTcpMachine!.GetAddresses = addresses;
|
||||||
|
_siemensPpiMachine!.GetAddresses = addresses;
|
||||||
|
|
||||||
await _siemensTcpMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
await _siemensTcpMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
||||||
|
await _siemensPpiMachine.SetDatasAsync(MachineDataType.Address, dic1);
|
||||||
|
|
||||||
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
Assert.AreEqual(ans.Datas["DB2 0.0"].DeviceValue, dic1["DB2 0.0"]);
|
var ans2 = await _siemensPpiMachine.GetDatasAsync(MachineDataType.Address);
|
||||||
|
|
||||||
|
Assert.AreEqual(ans.Datas["DB1 0.0"].DeviceValue, dic1["DB1 0.0"]);
|
||||||
|
Assert.AreEqual(ans2.Datas["DB1 0.0"].DeviceValue, dic1["DB1 0.0"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
@@ -176,7 +209,7 @@ namespace Modbus.Net.Tests
|
|||||||
new AddressUnit
|
new AddressUnit
|
||||||
{
|
{
|
||||||
Id = "0",
|
Id = "0",
|
||||||
Area = "DB2",
|
Area = "DB1",
|
||||||
Address = 2,
|
Address = 2,
|
||||||
SubAddress = 0,
|
SubAddress = 0,
|
||||||
CommunicationTag = "A1",
|
CommunicationTag = "A1",
|
||||||
@@ -185,7 +218,7 @@ namespace Modbus.Net.Tests
|
|||||||
new AddressUnit
|
new AddressUnit
|
||||||
{
|
{
|
||||||
Id = "1",
|
Id = "1",
|
||||||
Area = "DB2",
|
Area = "DB1",
|
||||||
Address = 4,
|
Address = 4,
|
||||||
SubAddress = 0,
|
SubAddress = 0,
|
||||||
CommunicationTag = "A2",
|
CommunicationTag = "A2",
|
||||||
@@ -194,7 +227,7 @@ namespace Modbus.Net.Tests
|
|||||||
new AddressUnit
|
new AddressUnit
|
||||||
{
|
{
|
||||||
Id = "2",
|
Id = "2",
|
||||||
Area = "DB2",
|
Area = "DB1",
|
||||||
Address = 6,
|
Address = 6,
|
||||||
SubAddress = 0,
|
SubAddress = 0,
|
||||||
CommunicationTag = "A3",
|
CommunicationTag = "A3",
|
||||||
@@ -203,7 +236,7 @@ namespace Modbus.Net.Tests
|
|||||||
new AddressUnit
|
new AddressUnit
|
||||||
{
|
{
|
||||||
Id = "3",
|
Id = "3",
|
||||||
Area = "DB2",
|
Area = "DB1",
|
||||||
Address = 8,
|
Address = 8,
|
||||||
SubAddress = 0,
|
SubAddress = 0,
|
||||||
CommunicationTag = "A4",
|
CommunicationTag = "A4",
|
||||||
@@ -212,7 +245,7 @@ namespace Modbus.Net.Tests
|
|||||||
new AddressUnit
|
new AddressUnit
|
||||||
{
|
{
|
||||||
Id = "4",
|
Id = "4",
|
||||||
Area = "DB2",
|
Area = "DB1",
|
||||||
Address = 10,
|
Address = 10,
|
||||||
SubAddress = 0,
|
SubAddress = 0,
|
||||||
CommunicationTag = "A5",
|
CommunicationTag = "A5",
|
||||||
@@ -221,7 +254,7 @@ namespace Modbus.Net.Tests
|
|||||||
new AddressUnit
|
new AddressUnit
|
||||||
{
|
{
|
||||||
Id = "5",
|
Id = "5",
|
||||||
Area = "DB2",
|
Area = "DB1",
|
||||||
Address = 14,
|
Address = 14,
|
||||||
SubAddress = 0,
|
SubAddress = 0,
|
||||||
CommunicationTag = "A6",
|
CommunicationTag = "A6",
|
||||||
@@ -252,20 +285,35 @@ namespace Modbus.Net.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
_siemensTcpMachine!.GetAddresses = addresses;
|
_siemensTcpMachine!.GetAddresses = addresses;
|
||||||
|
_siemensPpiMachine!.GetAddresses = addresses;
|
||||||
|
|
||||||
await _siemensTcpMachine.SetDatasAsync(MachineDataType.CommunicationTag, dic1);
|
await _siemensTcpMachine.SetDatasAsync(MachineDataType.CommunicationTag, dic1);
|
||||||
|
await _siemensPpiMachine.SetDatasAsync(MachineDataType.CommunicationTag, dic1);
|
||||||
|
|
||||||
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.CommunicationTag);
|
var ans = await _siemensTcpMachine.GetDatasAsync(MachineDataType.CommunicationTag);
|
||||||
|
var ans2 = await _siemensPpiMachine.GetDatasAsync(MachineDataType.CommunicationTag);
|
||||||
|
|
||||||
Assert.AreEqual(ans.Datas["A1"].DeviceValue, dic1["A1"]);
|
Assert.AreEqual(ans.Datas["A1"].DeviceValue, dic1["A1"]);
|
||||||
Assert.AreEqual(ans.Datas["A2"].DeviceValue, dic1["A2"]);
|
Assert.AreEqual(ans.Datas["A2"].DeviceValue, dic1["A2"]);
|
||||||
Assert.AreEqual(ans.Datas["A3"].DeviceValue, dic1["A3"]);
|
Assert.AreEqual(ans.Datas["A3"].DeviceValue, dic1["A3"]);
|
||||||
Assert.AreEqual(ans.Datas["A4"].DeviceValue, dic1["A4"]);
|
Assert.AreEqual(ans.Datas["A4"].DeviceValue, dic1["A4"]);
|
||||||
Assert.AreEqual(ans.Datas["A5"].DeviceValue, dic1["A5"]);
|
Assert.AreEqual(ans.Datas["A5"].DeviceValue, dic1["A5"]);
|
||||||
Assert.AreEqual(ans.Datas["A6"].DeviceValue, dic1["A6"]);
|
Assert.AreEqual(ans.Datas["A6"].DeviceValue, dic1["A6"]);
|
||||||
|
|
||||||
|
Assert.AreEqual(ans2.Datas["A1"].DeviceValue, dic1["A1"]);
|
||||||
|
Assert.AreEqual(ans2.Datas["A2"].DeviceValue, dic1["A2"]);
|
||||||
|
Assert.AreEqual(ans2.Datas["A3"].DeviceValue, dic1["A3"]);
|
||||||
|
Assert.AreEqual(ans2.Datas["A4"].DeviceValue, dic1["A4"]);
|
||||||
|
Assert.AreEqual(ans2.Datas["A5"].DeviceValue, dic1["A5"]);
|
||||||
|
Assert.AreEqual(ans2.Datas["A6"].DeviceValue, dic1["A6"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestCleanup]
|
[TestCleanup]
|
||||||
public void MachineClean()
|
public void MachineClean()
|
||||||
{
|
{
|
||||||
_siemensTcpMachine!.Disconnect();
|
_siemensTcpMachine!.Disconnect();
|
||||||
|
|
||||||
|
_siemensPpiMachine!.Disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user