patrick
2019-10-19 809abe2aac4617cc838d36fec913f5268a066eb4
1. 简化部分配置
2. 修改OmronFins驱动
3个文件已修改
121 ■■■■■ 已修改文件
src/A032.Process/ProcessConfig.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/A032.Process/ProcessControl_Method.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.OmronFins/OmronFinsDriver.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/A032.Process/ProcessConfig.cs
@@ -102,18 +102,20 @@
        [Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))]
        public string LogPath { get; set; }
        [Category("日志配置")]
        [Description("GRR日志文件夹路径")]
        [Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))]
        public string GRRLogPath { get; set; }
        //[Category("日志配置")]
        //[Description("GRR日志文件夹路径")]
        //[Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))]
        //public string GRRLogPath { get; set; }
        [Category("CSV文件配置")]
        [Description("是否做CSV文件输出")]
        [Browsable(false)]
        public bool IsCSVOutput { get; set; } = false;
        [Category("CSV文件配置")]
        [Description("CSV输出文件夹路径")]
        [Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))]
        [Browsable(false)]
        public string CSVFilePath { get; set; }
        #endregion
@@ -123,9 +125,9 @@
        //[Editor(typeof(ComplexCollectionEditor<WarningSet>), typeof(UITypeEditor))]
        //public List<WarningSet> WarningSets { get; set; } = new List<WarningSet>();
        [Category("PLC相关配置")]
        [Description("产品出列时是否有确认动作。true:有确认动作,确认后产品出列;false:没有确认动作,查询时产品出列")]
        public bool IsConfirmWhenProductionDone { get; set; } = false;
        //[Category("PLC相关配置")]
        //[Description("产品出列时是否有确认动作。true:有确认动作,确认后产品出列;false:没有确认动作,查询时产品出列")]
        //public bool IsConfirmWhenProductionDone { get; set; } = false;
        [Category("NG图片保存配置")]
        [Description("NG图片保存目录")]
src/A032.Process/ProcessControl_Method.cs
@@ -308,7 +308,7 @@
            return new ProcessResponse(true);
        }
        [ProcessMethod("", "Robot_Monitor_EmptyTrayEmpty", "机器人监听事件-满Tray区域放满", true)]
        [ProcessMethod("", "Robot_Monitor_FullTrayFull", "机器人监听事件-满Tray区域放满", true)]
        public ProcessResponse Robot_Monitor_FullTrayFull(IOperationConfig config, IDevice device)
        {
            bool isFullTrayFull = config.InputPara[0] == 1;
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