2 Commits 95472d81b6 ... 1319216d4c

Autor SHA1 Mensaje Fecha
  yhluo 1319216d4c Merge branch 'master' of repos.ubtob.net:usoft/mes-client hace 5 meses
  yhluo 081fca8702 百岗日志解析 hace 5 meses

+ 207 - 0
UAS_MES_BG/FunctionCode/Make/Make_ParseLog.Designer.cs

@@ -0,0 +1,207 @@
+namespace UAS_MES_NEW.Make
+{
+    partial class Make_ParseLog
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.Device = new System.Windows.Forms.ComboBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.txtPath = new System.Windows.Forms.TextBox();
+            this.Choose = new System.Windows.Forms.Button();
+            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
+            this.logList = new System.Windows.Forms.ListView();
+            this.sn = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.time = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.fileName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.panel1 = new System.Windows.Forms.Panel();
+            this.panel2 = new System.Windows.Forms.Panel();
+            this.panel3 = new System.Windows.Forms.Panel();
+            this.panel1.SuspendLayout();
+            this.panel2.SuspendLayout();
+            this.panel3.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // Device
+            // 
+            this.Device.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.Device.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.Device.FormattingEnabled = true;
+            this.Device.Items.AddRange(new object[] {
+            "SPI设备",
+            "AOI设备",
+            "印刷机"});
+            this.Device.Location = new System.Drawing.Point(192, 59);
+            this.Device.Name = "Device";
+            this.Device.Size = new System.Drawing.Size(328, 32);
+            this.Device.TabIndex = 1;
+            this.Device.SelectedIndexChanged += new System.EventHandler(this.Device_SelectedIndexChanged);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Font = new System.Drawing.Font("微软雅黑", 10.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label1.Location = new System.Drawing.Point(60, 57);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(101, 30);
+            this.label1.TabIndex = 0;
+            this.label1.Text = "设备选择";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Font = new System.Drawing.Font("微软雅黑", 10.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.label2.Location = new System.Drawing.Point(60, 137);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(101, 30);
+            this.label2.TabIndex = 4;
+            this.label2.Text = "路径选择";
+            // 
+            // txtPath
+            // 
+            this.txtPath.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.txtPath.Location = new System.Drawing.Point(192, 132);
+            this.txtPath.Name = "txtPath";
+            this.txtPath.Size = new System.Drawing.Size(474, 39);
+            this.txtPath.TabIndex = 2;
+            // 
+            // Choose
+            // 
+            this.Choose.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.Choose.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.Choose.Location = new System.Drawing.Point(692, 130);
+            this.Choose.Name = "Choose";
+            this.Choose.Size = new System.Drawing.Size(122, 38);
+            this.Choose.TabIndex = 5;
+            this.Choose.Text = "选择";
+            this.Choose.UseVisualStyleBackColor = true;
+            this.Choose.Click += new System.EventHandler(this.Choose_Click);
+            // 
+            // openFileDialog1
+            // 
+            this.openFileDialog1.FileName = "openFileDialog1";
+            this.openFileDialog1.RestoreDirectory = true;
+            // 
+            // logList
+            // 
+            this.logList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.sn,
+            this.time,
+            this.fileName});
+            this.logList.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.logList.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.logList.HideSelection = false;
+            this.logList.Location = new System.Drawing.Point(0, 0);
+            this.logList.Name = "logList";
+            this.logList.Size = new System.Drawing.Size(814, 492);
+            this.logList.TabIndex = 6;
+            this.logList.UseCompatibleStateImageBehavior = false;
+            this.logList.View = System.Windows.Forms.View.Details;
+            // 
+            // sn
+            // 
+            this.sn.Text = "序号";
+            this.sn.Width = 55;
+            // 
+            // time
+            // 
+            this.time.Text = "时间";
+            this.time.Width = 220;
+            // 
+            // fileName
+            // 
+            this.fileName.Text = "文件名称";
+            this.fileName.Width = 380;
+            // 
+            // panel1
+            // 
+            this.panel1.Controls.Add(this.Device);
+            this.panel1.Controls.Add(this.label1);
+            this.panel1.Controls.Add(this.Choose);
+            this.panel1.Controls.Add(this.label2);
+            this.panel1.Controls.Add(this.txtPath);
+            this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+            this.panel1.Location = new System.Drawing.Point(0, 0);
+            this.panel1.Name = "panel1";
+            this.panel1.Size = new System.Drawing.Size(1304, 334);
+            this.panel1.TabIndex = 7;
+            // 
+            // panel2
+            // 
+            this.panel2.Controls.Add(this.panel3);
+            this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.panel2.Location = new System.Drawing.Point(0, 334);
+            this.panel2.Name = "panel2";
+            this.panel2.Size = new System.Drawing.Size(1304, 492);
+            this.panel2.TabIndex = 8;
+            // 
+            // panel3
+            // 
+            this.panel3.Controls.Add(this.logList);
+            this.panel3.Dock = System.Windows.Forms.DockStyle.Left;
+            this.panel3.Location = new System.Drawing.Point(0, 0);
+            this.panel3.Name = "panel3";
+            this.panel3.Size = new System.Drawing.Size(814, 492);
+            this.panel3.TabIndex = 7;
+            // 
+            // Make_ParseLog
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.BackColor = System.Drawing.SystemColors.Window;
+            this.ClientSize = new System.Drawing.Size(1304, 826);
+            this.Controls.Add(this.panel2);
+            this.Controls.Add(this.panel1);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+            this.Name = "Make_ParseLog";
+            this.Text = "Make_ParseLog";
+            this.Load += new System.EventHandler(this.Make_ParseLog_Load);
+            this.panel1.ResumeLayout(false);
+            this.panel1.PerformLayout();
+            this.panel2.ResumeLayout(false);
+            this.panel3.ResumeLayout(false);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ComboBox Device;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox txtPath;
+        private System.Windows.Forms.Button Choose;
+        private System.Windows.Forms.OpenFileDialog openFileDialog1;
+        private System.Windows.Forms.ListView logList;
+        private System.Windows.Forms.Panel panel1;
+        private System.Windows.Forms.Panel panel2;
+        private System.Windows.Forms.Panel panel3;
+        private System.Windows.Forms.ColumnHeader time;
+        private System.Windows.Forms.ColumnHeader fileName;
+        private System.Windows.Forms.ColumnHeader sn;
+    }
+}

+ 357 - 0
UAS_MES_BG/FunctionCode/Make/Make_ParseLog.cs

@@ -0,0 +1,357 @@
+using DevExpress.XtraPrinting;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web.Services.Description;
+using System.Windows.Forms;
+using System.Xml;
+using UAS_MES_NEW.DataOperate;
+using UAS_MES_NEW.Entity;
+using UAS_MES_NEW.PublicMethod;
+using static DevExpress.Xpo.DB.DataStoreLongrunnersWatch;
+
+namespace UAS_MES_NEW.Make
+{
+    public partial class Make_ParseLog : Form
+    {
+        public Make_ParseLog()
+        {
+            InitializeComponent();
+        }
+        DataHelper dh;
+        private void Make_ParseLog_Load(object sender, EventArgs e)
+        {
+            dh = SystemInf.dh;
+        }
+        private void Device_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            txtPath.Focus();
+            txtPath.SelectAll();
+        }
+
+        private void Choose_Click(object sender, EventArgs e)
+        {
+            if (Device.SelectedIndex == -1)
+            {
+                Device.Focus();
+                Device.SelectAll();
+                MessageBox.Show(this.ParentForm,"请选择设备", "提示");
+                return;
+            }
+            if (!String.IsNullOrEmpty(txtPath.Text))
+            {
+                txtPath.Focus();
+                txtPath.SelectAll();
+            }
+            try {
+                OpenFileDialog dialog = new OpenFileDialog();
+                /*dialog.Multiselect = true;//该值确定是否可以选择多个文件*/
+                switch (Device.SelectedIndex)
+                {
+                    case 0:
+                        dialog.Title = "请选择读取SPI设备文本文件";
+                        dialog.Filter = "文本文件 (*.txt)|*.txt|All files (*.*)|*.*";
+                        break;
+                    case 1:
+                        dialog.Title = "请选择读取AOI设备文本文件";
+                        dialog.Filter = "文本文件 (*.txt)|*.txt|All files (*.*)|*.*";
+                        break;
+                    case 2:
+                        dialog.Title = "请选择读取印刷机设备的文本文件";
+                        dialog.Filter = "文本文件 (*.xml)|*.xml|All files (*.*)|*.*";
+                        break;
+                }
+                
+                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
+                {
+                    txtPath.Text = dialog.FileName;
+                    dialog.Dispose();
+                    ListViewItem item = new ListViewItem();
+                    int count = logList.Items.Count;
+                    item.Text = (++count).ToString();
+                    item.SubItems.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    item.SubItems.Add(txtPath.Text);
+                    logList.Items.Add(item);
+                }
+
+                if (Device.SelectedIndex == 0) // SPI
+                {
+                    ParseLogInsert(txtPath.Text);
+                    Console.WriteLine();
+                }
+                else if (Device.SelectedIndex == 1) // AOI
+                {
+
+                }
+                else if (Device.SelectedIndex == 2) // 印刷机
+                {
+                    PrinterData xmlData = ReadWithXmlReader(txtPath.Text);
+                    Console.WriteLine();
+                }
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(this.ParentForm, ex.Message, "警告");
+            }
+        }
+
+        private void ParseLogInsert(string PathName)
+        {
+            try
+            {
+                StreamReader SR = File.OpenText(PathName);
+                string restOfStream = SR.ReadToEnd();
+                SR.Close();
+                SR.Dispose();
+
+                List<Log> logArr = new List<Log>() { };
+                string[] lines = restOfStream.Split(new string[] { "\r\n" }, StringSplitOptions.None);
+                foreach(var item in lines)
+                {
+                    string[] currItem = item.Split(',');
+                    string res = "";
+                    /*List<NgData> data = new List<NgData>();*/
+                    if (currItem[1] != "PASS")
+                    {
+                        res = "NG";
+                        #region
+                        /*string[] NgArr = currItem[1].Split(';');
+                        foreach (var ngItem in NgArr)
+                        {
+                            string[] ngItemArr = ngItem.Split('*');
+                            List<string> ngItemLocal = ngItemArr[1].Split('&').ToList();
+                            NgData ngData = new NgData { 
+                                Code = ngItemArr[0], 
+                                Local = ngItemLocal
+                            };
+                            data.Add(ngData);
+                        }*/
+                        #endregion
+                    }
+                    else
+                    {
+                        res = "PASS";
+                    }
+                    Log itemLog = new Log()
+                    {
+                        SN = currItem[0],
+                        Result = res,
+                        Details = currItem[1]
+                    };
+                    logArr.Add(itemLog);
+                }
+                InsertDb(logArr);
+            }
+            catch (Exception ex) 
+            {
+                MessageBox.Show(this.ParentForm, ex.Message, "警告");
+            }
+        }
+        private void InsertDb(List<Log> logs)
+        {
+            try
+            {
+                int type = Device.SelectedIndex;
+                StringBuilder sql = new StringBuilder();
+                List<string> param = new List<string>() { };
+                foreach (var item in logs)
+                {
+                    ConsoleLog(item);
+                    param.Add(item.SN);
+                    if (item.Result == "PASS")
+                    {
+                        param.Add(item.Result);
+                    }
+                    else
+                    {
+                        param.Add(item.Result);
+                    }
+                    param.Add(item.Details);
+                    param.Add(User.UserCode);
+                    param.Add(User.UserSourceCode);
+                    param.Add(User.UserLineCode);
+                    string res = "";
+                    param.Add(res);
+                    string[] paramList = param.ToArray();
+                    dh.CallProcedure("cs_insert_testrejects", ref paramList);
+                    Console.WriteLine(res);
+                    param.Clear();
+                }
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(this.ParentForm, ex.Message, "警告");
+            }
+        }
+
+        private void ConsoleLog(Log item)
+        {
+            try
+            {
+                string sourceDir = Path.GetDirectoryName(txtPath.Text);
+                string newFolderName = "Logs";
+                string newFolderPath = Path.Combine(sourceDir, newFolderName);
+
+                if (!Directory.Exists(newFolderPath))
+                {
+                    Directory.CreateDirectory(newFolderPath);
+                }
+                string newFileName = "Log_" + Path.GetFileName(txtPath.Text);
+                string newFilePath = Path.Combine(newFolderPath, newFileName);
+
+                string newContent = $"Time: {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} SN:{item.SN},Result:{item.Result},NgDetails:{item.Details}\r\n";
+                File.AppendAllText(newFilePath, newContent);
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show(this.ParentForm, ex.Message, "警告");
+            }
+        }
+
+        private PrinterData ReadWithXmlReader(string filePath)
+        {
+            PrinterData data = new PrinterData();
+
+            using (XmlReader reader = XmlReader.Create(filePath))
+            {
+                while (reader.Read())
+                {
+                    if (reader.NodeType == XmlNodeType.Element)
+                    {
+                        switch (reader.Name)
+                        {
+                            case "SN":
+                                data.SN = reader.ReadElementContentAsString();
+                                break;
+                            case "Barcode":
+                                data.Barcode = reader.ReadElementContentAsString();
+                                break;
+                            case "Direction":
+                                data.Direction = reader.ReadElementContentAsString();
+                                break;
+                            case "PrintTime":
+                                data.PrintTime = reader.ReadElementContentAsString();
+                                break;
+                            case "PANEL":
+                                ReadPanelData(reader, data.Panel);
+                                break;
+                            case "PROCESS":
+                                ReadProcessData(reader, data.Process);
+                                break;
+                        }
+                    }
+                }
+            }
+
+            return data;
+        }
+        private void ReadPanelData(XmlReader reader, Panel panel)
+        {
+            while (reader.Read())
+            {
+                if (reader.NodeType == XmlNodeType.Element)
+                {
+                    switch (reader.Name)
+                    {
+                        case "PanelID":
+                            panel.PanelID = reader.ReadElementContentAsString();
+                            break;
+                        case "PanelName":
+                            panel.PanelName = reader.ReadElementContentAsString();
+                            break;
+                        case "PanelFirm":
+                            panel.PanelFirm = reader.ReadElementContentAsString();
+                            break;
+                        case "PanelLength":
+                            panel.PanelLength = reader.ReadElementContentAsDouble();
+                            break;
+                        case "PanelWide":
+                            panel.PanelWide = reader.ReadElementContentAsDouble();
+                            break;
+                        case "PanelThickness":
+                            panel.PanelThickness = reader.ReadElementContentAsDouble();
+                            break;
+                    }
+                }
+                else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "PANEL")
+                {
+                    break;
+                }
+            }
+        }
+        private void ReadProcessData(XmlReader reader, Process process)
+        {
+            while (reader.Read())
+            {
+                if (reader.NodeType == XmlNodeType.Element)
+                {
+                    switch (reader.Name)
+                    {
+                        case "ProcessName":
+                            process.ProcessName = reader.ReadElementContentAsString();
+                            break;
+                        case "LineNumber":
+                            process.LineNumber = reader.ReadElementContentAsString();
+                            break;
+                        case "StencilNum":
+                            process.StencilNum = reader.ReadElementContentAsString();
+                            break;
+                    }
+                }
+                else if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "PROCESS")
+                {
+                    break;
+                }
+            }
+        }
+
+        private class Log
+        {
+            public string SN { set; get; }
+            public string Result { set; get; }
+            /*public List<NgData> Details { set; get; }*/
+            public string Details { set; get; }
+        }
+
+        private class NgData
+        {
+            public string Code { set; get; }
+
+            public List<string> Local{ set; get; }
+        }
+
+        private class PrinterData
+        {
+            public string SN { get; set; }
+            public string Barcode { get; set; }
+            public string Direction { get; set; }
+            public string PrintTime { get; set; }
+            public Panel Panel { get; set; } = new Panel();
+            public Process Process { get; set; } = new Process();
+        }
+
+        private class Panel
+        {
+            public string PanelID { get; set; }
+            public string PanelName { get; set; }
+            public string PanelFirm { get; set; }
+            public double PanelLength { get; set; }
+            public double PanelWide { get; set; }
+            public double PanelThickness { get; set; }
+        }
+
+        private class Process
+        {
+            public string ProcessName { get; set; }
+            public string LineNumber { get; set; }
+            public string StencilNum { get; set; }
+        }
+
+    }
+}

+ 123 - 0
UAS_MES_BG/FunctionCode/Make/Make_ParseLog.resx

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 23</value>
+  </metadata>
+</root>

+ 9 - 0
UAS_MES_BG/UAS_MES_BG.csproj

@@ -575,6 +575,12 @@
     <Compile Include="FunctionCode\Make\Make_NewPo.Designer.cs">
       <DependentUpon>Make_NewPo.cs</DependentUpon>
     </Compile>
+    <Compile Include="FunctionCode\Make\Make_ParseLog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FunctionCode\Make\Make_ParseLog.Designer.cs">
+      <DependentUpon>Make_ParseLog.cs</DependentUpon>
+    </Compile>
     <Compile Include="FunctionCode\Make\Make_PreFeedingCollection.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -1341,6 +1347,9 @@
     <EmbeddedResource Include="FunctionCode\Make\Make_NewPo.resx">
       <DependentUpon>Make_NewPo.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="FunctionCode\Make\Make_ParseLog.resx">
+      <DependentUpon>Make_ParseLog.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="FunctionCode\Make\Make_PreFeedingCollection.resx">
       <DependentUpon>Make_PreFeedingCollection.cs</DependentUpon>
     </EmbeddedResource>

+ 25 - 0
UAS_MES_BG/UAS_MES_BG.sln

@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.14.36202.13 d17.14
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UAS_MES_BG", "UAS_MES_BG.csproj", "{0D5D213A-3898-4696-85F3-4A153548CC67}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{0D5D213A-3898-4696-85F3-4A153548CC67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0D5D213A-3898-4696-85F3-4A153548CC67}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0D5D213A-3898-4696-85F3-4A153548CC67}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0D5D213A-3898-4696-85F3-4A153548CC67}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {C84A248C-D420-4DD1-9664-4652AAAD3C86}
+	EndGlobalSection
+EndGlobal