| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | Stopwatch sw = new Stopwatch(); |
| | | sw.Start(); |
| | | |
| | | NetworkStream stream = null; |
| | | lock (opClientLock) |
| | | { |
| | | do |
| | |
| | | { |
| | | 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) |
| | |
| | | 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) |
| | |
| | | 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) |
| | |
| | | { |
| | | 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>(); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | |
| | |
| | | // } |
| | | //} |
| | | |
| | | byte serverNode = 0; |
| | | byte scanNode = 0; |
| | | byte opNode = 0; |
| | | |
| | | private void InitialScanClient() |
| | | { |
| | | if (scanClient == null || !scanClient.Connected) |
| | |
| | | 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); |
| | | } |
| | | } |
| | | |
| | |
| | | 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); |
| | | } |
| | | } |
| | | |
| | |
| | | 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 |
| | |
| | | |
| | | 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 |