From 809abe2aac4617cc838d36fec913f5268a066eb4 Mon Sep 17 00:00:00 2001 From: patrick <patrick.xu@broconcentric.com> Date: 星期六, 19 十月 2019 13:50:28 +0800 Subject: [PATCH] 1. 简化部分配置 2. 修改OmronFins驱动 --- src/Bro.Device.OmronFins/OmronFinsDriver.cs | 103 ++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 72 insertions(+), 31 deletions(-) diff --git a/src/Bro.Device.OmronFins/OmronFinsDriver.cs b/src/Bro.Device.OmronFins/OmronFinsDriver.cs index ee5b718..534c13e 100644 --- a/src/Bro.Device.OmronFins/OmronFinsDriver.cs +++ b/src/Bro.Device.OmronFins/OmronFinsDriver.cs @@ -30,15 +30,16 @@ InitialOpClient(); } - byte[] data = frame.GetSendReadFrameBytes(item, CurrentSid); - opStream.Write(data, 0, data.Length); + byte[] data = opFrame.GetSendReadFrameBytes(item, CurrentSid); + var stream = opClient.GetStream(); + stream.Write(data, 0, data.Length); byte[] buffer = new byte[2048]; - int readSize = opStream.Read(buffer, 0, buffer.Length); + int readSize = stream.Read(buffer, 0, buffer.Length); if (readSize > 0) { - List<int> list = frame.AnalyseReceivedItems(buffer.Take(readSize).ToArray(), item); + List<int> list = opFrame.AnalyseReceivedItems(buffer.Take(readSize).ToArray(), item); item.ITEM_VALUE = string.Join(",", list); } } @@ -69,6 +70,7 @@ Stopwatch sw = new Stopwatch(); sw.Start(); + NetworkStream stream = null; lock (opClientLock) { do @@ -77,8 +79,9 @@ { InitialOpClient(); - byte[] data = frame.GetSendWriteFrameBytes(item, CurrentSid); - opStream.Write(data, 0, data.Length); + byte[] data = opFrame.GetSendWriteFrameBytes(item, CurrentSid); + stream = opClient.GetStream(); + stream.Write(data, 0, data.Length); sw.Stop(); if (sw.ElapsedMilliseconds > 10) @@ -108,10 +111,10 @@ try { byte[] buffer = new byte[1024]; - int bufferCount = opStream.Read(buffer, 0, buffer.Length); + int bufferCount = stream.Read(buffer, 0, buffer.Length); if (bufferCount > 0) { - frame.AnalyseReceivedItems(buffer.Take(bufferCount).ToArray(), item); + opFrame.AnalyseReceivedItems(buffer.Take(bufferCount).ToArray(), item); } } catch (Exception ex) @@ -126,10 +129,10 @@ try { byte[] buffer = new byte[1024]; - int bufferCount = opStream.Read(buffer, 0, buffer.Length); + int bufferCount = stream.Read(buffer, 0, buffer.Length); if (bufferCount > 0) { - frame.AnalyseReceivedItems(buffer.Take(bufferCount).ToArray(), item); + opFrame.AnalyseReceivedItems(buffer.Take(bufferCount).ToArray(), item); } } catch (Exception ex) @@ -343,7 +346,8 @@ { plcEP = new IPEndPoint(IPAddress.Parse(IConfig.PLCIpAddress), IConfig.PLCPort); - frame = new FinsFrame(IConfig.DNA, IConfig.DA1, IConfig.DA2, IConfig.SNA, IConfig.SA1, IConfig.SA2, false); + scanFrame = new FinsFrame(IConfig.DNA, 0, IConfig.DA2, IConfig.SNA, 0, IConfig.SA2, false); + opFrame = new FinsFrame(IConfig.DNA, 0, IConfig.DA2, IConfig.SNA, 0, IConfig.SA2, false); oldValues = new List<int>(); } @@ -393,15 +397,13 @@ } } - FinsFrame frame = null; + FinsFrame scanFrame = null; + FinsFrame opFrame = null; static object opClientLock = new object(); TcpClient scanClient = new TcpClient(); TcpClient opClient = new TcpClient(); - - NetworkStream scanStream = null; - NetworkStream opStream = null; IPEndPoint plcEP; @@ -433,6 +435,10 @@ // } //} + byte serverNode = 0; + byte scanNode = 0; + byte opNode = 0; + private void InitialScanClient() { if (scanClient == null || !scanClient.Connected) @@ -443,13 +449,31 @@ scanClient.Client.Blocking = true; scanClient.SendBufferSize = 0; scanClient.ReceiveBufferSize = 0; + scanClient.ReceiveTimeout = scanClient.SendTimeout = 5000; scanClient.Connect(plcEP); - byte[] dataRequest = frame.GetTcpRequestFrame(1); - scanStream = scanClient.GetStream(); - scanStream.Write(dataRequest, 0, dataRequest.Length); + scanFrame = new FinsFrame(IConfig.DNA, serverNode, IConfig.DA2, IConfig.SNA, scanNode, IConfig.SA2, false); + + byte[] dataRequest = scanFrame.GetTcpRequestFrame(0); + var stream = scanClient.GetStream(); + stream.Write(dataRequest, 0, dataRequest.Length); byte[] dataRead = new byte[2048]; - scanStream.Read(dataRead, 0, dataRead.Length); + int readSize = stream.Read(dataRead, 0, dataRead.Length); + + if (readSize <= 0) + { + throw new ProcessException("PLC閫氫俊鎻℃墜淇″彿杩斿洖涓嶅彲涓虹┖"); + } + + if (dataRead[15] != 0) + { + throw new ProcessException($"PLC閫氫俊鎻℃墜淇″彿杩斿洖寮傚父锛歿dataRead[15]}"); + } + + serverNode = dataRead[23]; + scanNode = dataRead[19]; + + scanFrame = new FinsFrame(IConfig.DNA, serverNode, IConfig.DA2, IConfig.SNA, scanNode, IConfig.SA2, false); } } @@ -463,11 +487,26 @@ opClient.Client.Blocking = true; opClient.Connect(plcEP); - byte[] dataRequest = frame.GetTcpRequestFrame(2); - opStream = opClient.GetStream(); - opStream.Write(dataRequest, 0, dataRequest.Length); + opFrame = new FinsFrame(IConfig.DNA, serverNode, IConfig.DA2, IConfig.SNA, opNode, IConfig.SA2, false); + byte[] dataRequest = opFrame.GetTcpRequestFrame(0); + var stream = opClient.GetStream(); + stream.Write(dataRequest, 0, dataRequest.Length); byte[] dataRead = new byte[2048]; - opStream.Read(dataRead, 0, dataRead.Length); + int readSize = stream.Read(dataRead, 0, dataRead.Length); + + if (readSize <= 0) + { + throw new ProcessException("PLC閫氫俊鎻℃墜淇″彿杩斿洖涓嶅彲涓虹┖"); + } + + if (dataRead[15] != 0) + { + throw new ProcessException($"PLC閫氫俊鎻℃墜淇″彿杩斿洖寮傚父锛歿dataRead[15]}"); + } + + serverNode = dataRead[23]; + opNode = dataRead[19]; + opFrame = new FinsFrame(IConfig.DNA, serverNode, IConfig.DA2, IConfig.SNA, opNode, IConfig.SA2, false); } } @@ -487,15 +526,16 @@ item.OP_TYPE = 1; item.ITEM_LENGTH = length; - var data = frame.GetSendReadFrameBytes(item, CurrentSid); - opStream.Write(data, 0, data.Length); + var data = opFrame.GetSendReadFrameBytes(item, CurrentSid); + var stream = opClient.GetStream(); + stream.Write(data, 0, data.Length); byte[] buffer = new byte[2048]; - int readSize = opStream.Read(buffer, 0, buffer.Length); + int readSize = stream.Read(buffer, 0, buffer.Length); if (readSize > 0) { - List<int> values = frame.AnalyseReceivedItems(buffer.Take(readSize).ToArray(), item); + List<int> values = opFrame.AnalyseReceivedItems(buffer.Take(readSize).ToArray(), item); return values; } else @@ -519,17 +559,18 @@ if (scanBuffer == null) { - scanBuffer = frame.GetSendReadFrameBytes(item, CurrentSid); + scanBuffer = scanFrame.GetSendReadFrameBytes(item, CurrentSid); } - scanStream.Write(scanBuffer, 0, scanBuffer.Length); + var stream = scanClient.GetStream(); + stream.Write(scanBuffer, 0, scanBuffer.Length); byte[] buffer = new byte[2048]; - int readSize = scanStream.Read(buffer, 0, buffer.Length); + int readSize = stream.Read(buffer, 0, buffer.Length); if (readSize > 0) { - List<int> values = frame.AnalyseReceivedItems(buffer.Take(readSize).ToArray(), item); + List<int> values = scanFrame.AnalyseReceivedItems(buffer.Take(readSize).ToArray(), item); return values; } else -- Gitblit v1.8.0