From fe2aa4880d5c9fd88088ad0ed81ebaca05629f5f Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 17:59:45 +0800
Subject: [PATCH] feat: 集成CAN驱动/模拟器 + 仪器仪表注册/硬件调试模块

---
 Plugin.TestResult/SingleCell.xaml.cs |  194 ++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 179 insertions(+), 15 deletions(-)

diff --git a/Plugin.TestResult/SingleCell.xaml.cs b/Plugin.TestResult/SingleCell.xaml.cs
index 7d5659d..0e7a8b9 100644
--- a/Plugin.TestResult/SingleCell.xaml.cs
+++ b/Plugin.TestResult/SingleCell.xaml.cs
@@ -15,6 +15,7 @@
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.ComponentModel;
+using System.Dynamic;
 using System.IO;
 using System.Runtime.CompilerServices;
 using System.Windows;
@@ -296,6 +297,17 @@
         private string visualTestId;
         private Sqlite3Helper helper;
 
+        private void InitCurrentTestHelper()
+        {
+            if (helper == null)
+            {
+                var now = DateTime.Now;
+                string dateStr = now.ToString("yyyyMMdd");
+                visualTestId = $"{title}_{now.ToString("yyyyMMddHHmmssfff")}";
+                helper = CheckSqlHelper(dateStr);
+            }
+        }
+
         public void SetStatus(string status)
         {
             Dispatcher.Invoke(() =>
@@ -305,11 +317,8 @@
                 if (oldStatus != "testing" && status == "testing")
                 {
                     UpdateProbeCount(ProbeCount + 1);
-                    var now = DateTime.Now;
-                    string dateStr = now.ToString("yyyyMMdd");
-                    visualTestId = $"{title}_{now.ToString("yyyyMMddHHmmssfff")}";
-                    helper = CheckSqlHelper(dateStr);
-                    InsertARecourd();
+                    InitCurrentTestHelper();
+                    InsertARecord();
                 }
 
                 if (oldStatus != "ok" && status == "ok")
@@ -324,7 +333,7 @@
             });
         }
 
-        private void InsertARecourd()
+        private void InsertARecord()
         {
             try
             {
@@ -335,7 +344,7 @@
             }
             catch (Exception ex)
             {
-                ViewControl.Logger.Error($"Cell[{title}] SaveToDB Error.", ex);
+                ViewControl.Logger.Error($"Cell[{title}] InsertARecord Error.", ex);
             }
         }
 
@@ -456,6 +465,7 @@
 
                     try
                     {
+                        InitCurrentTestHelper();
                         string model = table?.CbProduct?.SelectedItem?.ToString();
                         sql = $@"INSERT INTO serialData (sn,model,station,position,step,limitDown,limitUp,unit,value,status,finalStatus,time,resultId) 
 VALUES ('{sn}','{model}','','{this.title}','{info.step}','{info.limitDown}','{info.limitUp}','{info.unit}','{info.value}','{info.result}',
@@ -616,7 +626,7 @@
             }
         }
 
-        private void NormalCSV(string filePath)
+        public void NormalCSV(string filePath)
         {
             try
             {
@@ -644,7 +654,7 @@
             }
         }
 
-        private void ReverseCSV(string filePath)
+        public void ReverseCSV_Bak(string filePath)
         {
             try
             {
@@ -777,6 +787,150 @@
             }
         }
 
+        public void ReverseCSV(string filePath)
+        {
+            try
+            {
+                if (allInfos == null || allInfos.Count < 4) return;
+
+                Dictionary<string, int> columnMap = new Dictionary<string, int>();
+                int colPoint = 0;
+                List<string> titleRow = new List<string>();
+                List<string[]> datas = new List<string[]>();
+                List<string> timeRow = new List<string>();
+
+                void AddTitle(string title)
+                {
+                    if (titleRow.IndexOf(title) < 0)
+                    {
+                        titleRow.Add(title);
+                    }
+                }
+
+                // 鍏堣缃〃澶�
+                for (int i = 0; i < allInfos.Count; i++)
+                {
+                    var info = allInfos[i];
+                    if (IgnoreTestItem.Contains(info.step.ToLower()))
+                    {
+                        continue;
+                    }
+                    string testTime = info.updateTime;
+                    int rowIndex = timeRow.IndexOf(testTime);
+                    if (rowIndex < 0)
+                    {
+                        timeRow.Add(testTime);
+                    }
+
+                    string title = $"{info.step}{(string.IsNullOrEmpty(info.unit) ? "" : $"({info.unit})")}";
+                    AddTitle("娴嬭瘯鏃堕棿");
+                    AddTitle(title);
+                    if (!string.IsNullOrEmpty(info.limitDown))
+                    {
+                        string key2 = $"{info.step}涓嬮檺";
+                        AddTitle(key2);
+                    }
+
+                    if (!string.IsNullOrEmpty(info.limitUp))
+                    {
+                        string key2 = $"{info.step}涓婇檺";
+                        AddTitle(key2);
+                    }
+
+                    if (!string.IsNullOrEmpty(info.limitUp))
+                    {
+                        string key2 = $"{info.step}娴嬭瘯缁撴灉";
+                        AddTitle(key2);
+                    }
+
+                    //if (!string.IsNullOrEmpty(info.updateTime))
+                    //{
+                    //    string key2 = $"{info.step}娴嬭瘯鏃堕棿";
+                    //    AddTitle(key2);
+                    //}
+                }
+
+                for (int i = 0; i < allInfos.Count; i++)
+                {
+                    var info = allInfos[i];
+                    if (IgnoreTestItem.Contains(info.step.ToLower()))
+                    {
+                        continue;
+                    }
+                    string testTime = info.updateTime;
+                    int row = timeRow.IndexOf(testTime);
+                    if (row < 0)
+                    {
+                        continue;
+                    }
+
+
+
+                    string title = $"{info.step}{(string.IsNullOrEmpty(info.unit) ? "" : $"({info.unit})")}";
+                    int col = titleRow.IndexOf(title);
+
+                    if (datas.Count <= row)
+                    {
+                        datas.Add(new string[titleRow.Count]);
+                    }
+                    var arr = datas[row];
+                    arr[col] = info.value;
+
+
+                    if (!string.IsNullOrEmpty(info.limitDown))
+                    {
+                        string key2 = $"{info.step}涓嬮檺";
+                        int col2 = titleRow.IndexOf(key2);
+                        arr[col2] = info.limitDown;
+                    }
+
+                    if (!string.IsNullOrEmpty(info.limitUp))
+                    {
+                        string key2 = $"{info.step}涓婇檺";
+                        int col2 = titleRow.IndexOf(key2);
+                        arr[col2] = info.limitUp;
+                    }
+
+                    if (!string.IsNullOrEmpty(info.limitUp))
+                    {
+                        string key2 = $"{info.step}娴嬭瘯缁撴灉";
+                        int col2 = titleRow.IndexOf(key2);
+                        arr[col2] = info.result;
+                    }
+
+                    if (!string.IsNullOrEmpty(info.updateTime))
+                    {
+                        string key2 = "娴嬭瘯鏃堕棿";// $"{info.step}娴嬭瘯鏃堕棿";
+                        int col2 = titleRow.IndexOf(key2);
+                        arr[col2] = info.updateTime;
+                    }
+                }
+
+
+                FileInfo fi = new FileInfo(filePath);
+                if (!fi.Directory.Exists)
+                {
+                    fi.Directory.Create();  //鏂囦欢涓嶅瓨鍦紝鍒涘缓鏂囦欢
+                }
+
+                using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
+                using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
+                {
+                    string title = string.Join(",", titleRow);
+                    sw.WriteLine(title);
+                    foreach (var info in datas)
+                    {
+                        string row = string.Join(",", info);
+                        sw.WriteLine(row);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                ViewControl.Logger.Error($"Cell[{title}] SaveInfoToCSV Error.", ex);
+            }
+        }
+
         /// <summary>
         /// 淇濆瓨娴嬭瘯鏁版嵁鍒癈SV
         /// </summary>
@@ -847,7 +1001,7 @@
         /// <param name="filePath"></param>
         public void SaveInfoToDB()
         {
-            Dispatcher.BeginInvoke(new Action(() =>
+            Dispatcher.Invoke(() =>
             {
                 try
                 {
@@ -876,7 +1030,7 @@
                 {
                     ViewControl.Logger.Error($"Cell[{title}] SaveToDB Error.", ex);
                 }
-            }));
+            });
         }
 
         private void MenuItem_Click(object sender, RoutedEventArgs e)
@@ -910,6 +1064,7 @@
                 return;
             }
             string modelPath = table.parent.testModelFile;
+            int dutNo = table.index * table.cellCount + this.index;
             var win = new ManualDebugWindow(manualDebugSeq, modelPath)
             {
                 Title = $"{this.title}鎵嬪姩璋冭瘯",
@@ -917,7 +1072,7 @@
                 OvenIndex = this.table.index,
                 OvenName = this.table.title,
 
-                CellIndex = this.index,
+                CellIndex = dutNo,
                 CellName = this.title
             };
             win.ShowDialog();
@@ -934,7 +1089,7 @@
             };
             if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
             {
-                this.SaveInfoToCSV(sfd.FileName);
+                this.NormalCSV(sfd.FileName);
             }
         }
 
@@ -947,8 +1102,17 @@
 
         public bool LightGreen(bool on, out string msg)
         {
-            return S7Context.WriteData(RunTimeVariablePool.DEFAULT_PLC_NAME,
-                $"Oven{table.index + 1}_Cell{index + 1}_Light_OK", on, out msg);
+            string key = $"Oven{table.index + 1}_Cell{index + 1}_Light_OK";
+            bool res = S7Context.WriteData(RunTimeVariablePool.DEFAULT_PLC_NAME, key, on, out msg);
+            if (res)
+            {
+                ViewControl.Logger.Debug($"Set Light [{key}] {on}.");
+            }
+            else
+            {
+                ViewControl.Logger.Debug($"Open Light [{key}] {on} Error.{msg}");
+            }
+            return res;
         }
 
         public bool LightRed(bool on, out string msg)

--
Gitblit v1.9.1