using ConnectionUtil; using HMI.Core.Api; using HMI.Core.Util; using HMI.Simple.Util; using log4net; using ModBusTcp; using Panuon.WPF.UI; using Plugin.DataBoard; using Plugin.TestResult_WPF; using Plugin.TsExecution; using System; using System.IO; using System.Threading; using System.Threading.Tasks; using System.Windows; namespace UnitTest { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : WindowX { private ILog log = LogManager.GetLogger("UnitTest"); public MainWindow() { ProductModelHelper.GetModelBySNR("cc123", out string model, out string msg); LangUtil.Load(); InitializeComponent(); //RebuildDb(); ModBusTcpController controller = new ModBusTcpController("127.0.0.1", 502); if (controller.Start(out msg)) { bool res; int? target; controller.WriteBool("1", true, out msg); controller.ReadDOBool("1", out res, out msg); Console.WriteLine(res); controller.ReadDOInt("1", out target, out msg); Console.WriteLine(target); controller.WriteInt("1", 1, out msg); controller.ReadDOInt("1", out target, out msg); Console.WriteLine(target); Console.WriteLine(target); } //page.Children.Add(new UserControl1()); } TcpClientWrapper tcpClient; PipeClient2 client; public string Conv(object obj) { if (obj == null || obj is DBNull) { return "NULL"; } if (obj is DateTime dt) { return $"'{dt.ToString("yyyy-MM-dd HH:mm:ss")}'"; } return $"'{obj.ToString()}'"; } public void RebuildDb() { string folder = "C:\\Workspace\\VisualStudio\\WPFProject\\WPFProject\\bin\\x64\\Debug\\Config\\DataBoard"; var startDate = DateTime.Parse("2025-10-01"); var endDate = startDate.AddDays(1); SqliteHelper sourceHelper = new SqliteHelper("C:\\Workspace\\VisualStudio\\WPFProject\\WPFProject\\bin\\x64\\Debug\\Config\\DataBoard\\DataLog.db"); while (endDate < DateTime.Parse("2025-10-12")) { string targetFile = Path.Combine(folder, $"Data_{startDate.ToString("yyyyMMdd")}.db"); SqliteHelper targetHelper = null; if (!File.Exists(targetFile)) { SqliteHelper.CreateDatabase(targetFile); targetHelper = new SqliteHelper(targetFile); targetHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS serialData ( id INTEGER PRIMARY KEY AUTOINCREMENT, sn TEXT NOT NULL, model TEXT, station TEXT NOT NULL, step TEXT NOT NULL, position TEXT, limitDown TEXT, limitUp TEXT, unit TEXT, offset TEXT, value TEXT, status TEXT, finalStatus TEXT, consumeTime TEXT, totalConsumeTime TEXT, time DATETIME NOT NULL);"); targetHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS testResult ( id INTEGER PRIMARY KEY AUTOINCREMENT, sn TEXT NOT NULL, model TEXT, station TEXT NOT NULL, position TEXT, status TEXT, result TEXT NOT NULL, time DATETIME NOT NULL);"); string sql = $@"SELECT sn,model,station,step,position,limitDown,limitUp,unit,offset,value,status, finalStatus,consumeTime,totalConsumeTime,time FROM serialData WHERE time>='{startDate.ToString("yyyy-MM-dd")}' AND time < '{endDate.ToString("yyyy-MM-dd")}';"; var dt = sourceHelper.GetDataTable(sql); foreach (System.Data.DataRow dr in dt.Rows) { targetHelper.ExecuteSql($@"INSERT INTO serialData (sn,model,station,step,position,limitDown,limitUp,unit,offset,value,status,finalStatus,consumeTime,totalConsumeTime,time) VALUES ({Conv(dr["sn"])}, {Conv(dr["model"])}, {Conv(dr["station"])}, {Conv(dr["step"])}, {Conv(dr["position"])}, {Conv(dr["limitDown"])}, {Conv(dr["limitUP"])}, {Conv(dr["unit"])}, {Conv(dr["offset"])}, {Conv(dr["value"])}, {Conv(dr["status"])}, {Conv(dr["finalStatus"])}, {Conv(dr["consumeTime"])}, {Conv(dr["totalConsumeTime"])}, {Conv(dr["time"])})"); } sql = $@"SELECT sn,model,station,position,status,result,time FROM testResult WHERE time>='{startDate.ToString("yyyy-MM-dd")}' AND time < '{endDate.ToString("yyyy-MM-dd")}';"; dt = sourceHelper.GetDataTable(sql); foreach (System.Data.DataRow dr in dt.Rows) { targetHelper.ExecuteSql($@"INSERT INTO testResult (sn,model,station,position,status,result,time) VALUES ({Conv(dr["sn"])}, {Conv(dr["model"])}, {Conv(dr["station"])}, {Conv(dr["position"])}, {Conv(dr["status"])}, {Conv(dr["result"])}, {Conv(dr["time"])})"); } targetHelper.Dispose(); startDate = startDate.AddDays(1); endDate = endDate.AddDays(1); } } sourceHelper.Dispose(); } private void Button_Click(object sender, RoutedEventArgs e) { //Task.Run(() => //{ // for (int j = 0; j < 1000; j++) // { // string status = (j % 2 == 0) ? "Passed" : "Failed"; // string d = (j % 2 == 0) ? "9" : "9999999999999999999999999999999999999999999999999999999999999999995"; // tsExecution.AddTestData(0, $"ConnectivityCANRec,2,3,4,{d},6,{status}"); // Thread.Sleep(5); // } //}); //Task.Run(() => //{ // for (int j = 0; j < 1000; j++) // { // string status = (j % 2 == 0) ? "Passed" : "Failed"; // string d = (j % 2 == 0) ? "9" : "9999999999999999999999999999999999999999999999999999999999999999995"; // tsExecution.AddTestData(1, $"ConnectivityCANRec,2,3,4,{d},6,{status}"); // Thread.Sleep(5); // } //}); //Task.Run(() => //{ // for (int j = 0; j < 1000; j++) // { // string status = (j % 2 == 0) ? "Passed" : "Failed"; // string d = (j % 2 == 0) ? "9" : "9999999999999999999999999999999999999999999999999999999999999999995"; // tsExecution.AddTestData(2, $"ConnectivityCANRec,2,3,4,{d},6,{status}"); // Thread.Sleep(5); // } //}); //Task.Run(() => //{ // for (int j = 0; j < 1000; j++) // { // string status = (j % 2 == 0) ? "Passed" : "Failed"; // string d = (j % 2 == 0) ? "9" : "9999999999999999999999999999999999999999999999999999999999999999995"; // tsExecution.AddTestData(3, $"ConnectivityCANRec,2,3,4,{d},6,{status}"); // Thread.Sleep(5); // } //}); //Task.Run(() => //{ // for (int j = 0; j < 1000; j++) // { // string status = (j % 2 == 0) ? "Passed" : "Failed"; // string d = (j % 2 == 0) ? "9" : "9999999999999999999999999999999999999999999999999999999999999999995"; // tsExecution.AddTestData(1, $"ConnectivityCANRec,2,3,4,{d},6,{status}"); // Thread.Sleep(5); // } //}); //tsExecution.UpdatePositionStatus(0, "Passed"); tsExecution.UpdatePositionStatus(0, "Failed"); //tsExecution.UpdatePositionProcessValue(0, 12); //tsExecution.PausePosition(0); //tsExecution.SetPositionBarcode(0, "123456789"); //tsExecution.SavePositionCSV(0); //tsExecution.UpdatePositionStatus(1, "Failed"); //tsExecution.UpdatePositionStatus(2, "Ready"); //tsExecution.UpdatePositionStatus(3, "Testing"); //tsExecution.UpdatePositionProcessValue(1, 50); //tsExecution.UpdatePositionProcessValue(2, 100); //tsExecution.UpdatePositionProcessValue(3, 99); //client = new PipeClient2("DAService"); ////client.OnData += Client_OnData1; //client.Connect(); //tcpClient = new TcpClientWrapper("127.0.0.1", 5555); //tcpClient.Connect(); //viewControl.View.GetDataTable(0).GetSingleCell(0).SetStatus("testing"); //new Thread(new ThreadStart(PipeServerMessage)).Start(); //new Thread(new ThreadStart(PipeClientMessage)).Start(); } private void Client_OnData1(object sender, PipeDataEventArgs e) { Console.WriteLine($"{e.Data}"); } private void Client_OnData(object sender, PipeDataEventArgs e) { Dispatcher.Invoke(() => { console.Text += e.Data; }); } private void Button_Click2(object sender, RoutedEventArgs e) { var allStart = DateTime.Now; for (int i = 0; i < 100; i++) { var start = DateTime.Now; if (client.SendMessage("ping", out string res)) { var interval = (DateTime.Now - start).TotalMilliseconds; Console.WriteLine($"{interval}: {res}"); } } Console.WriteLine($"Total: {(DateTime.Now - allStart).TotalMilliseconds}"); } private void Button_Click3(object sender, RoutedEventArgs e) { try { var allStart = DateTime.Now; for (int i = 0; i < 500; i++) { var start = DateTime.Now; string data = input.Text; string str = $"{{\"command\":5,\"value\":{data},\"id\":\"DITag0\"}}\r\n"; string res = tcpClient.SendMessage(str); var interval = (DateTime.Now - start).TotalMilliseconds; Console.WriteLine($"{interval}: {res}"); } Console.WriteLine($"Total: {(DateTime.Now - allStart).TotalMilliseconds}"); } catch (Exception ex) { } } private void Button_Click4(object sender, RoutedEventArgs e) { try { var allStart = DateTime.Now; for (int i = 0; i < 500; i++) { var start = DateTime.Now; string data = input.Text; string str = $"{{\"command\":5,\"value\":{data},\"id\":\"DITag0\"}}"; client.SendMessage(str, out string res); var interval = (DateTime.Now - start).TotalMilliseconds; Console.WriteLine($"{interval}: {res}"); } Console.WriteLine($"Total: {(DateTime.Now - allStart).TotalMilliseconds}"); } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } } private void HandlePlugin(object obj) { if (obj is IPlugin plugin) { plugin.SetBaseFolder("C:\\Workspace\\VisualStudio\\WPFProject\\WPFProject\\bin\\x64\\Debug\\Config\\TsExecution"); plugin.SetLogger(log); plugin.InitFinish(); } } private ViewControl viewControl; private TsExecution tsExecution; private DataBoard dataBoard; private void Window_Loaded(object sender, RoutedEventArgs e) { var plugin = new TsExecution(); HandlePlugin(plugin); border.Child = plugin; tsExecution = plugin; this.Loaded -= Window_Loaded; } } }