diff --git a/NDSD-Screwdriver/DOperateEntity.cs b/NDSD-Screwdriver/DOperateEntity.cs new file mode 100644 index 0000000..eda50aa --- /dev/null +++ b/NDSD-Screwdriver/DOperateEntity.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NDSD_Screwdriver +{ + internal class DOperateEntity + { + public int port { get; set; } + + /// + /// -1 DClose > 0 DTimeOpen =0 Dopen + /// + public int delay { get; set; } + + } +} diff --git a/NDSD-Screwdriver/MainForm.cs b/NDSD-Screwdriver/MainForm.cs index 6c71001..7131922 100644 --- a/NDSD-Screwdriver/MainForm.cs +++ b/NDSD-Screwdriver/MainForm.cs @@ -17,6 +17,7 @@ using System.Threading.Tasks; using System.Timers; using System.Windows.Forms; using System.Xml.Serialization; +using NewLife.Caching; namespace NDSD_Screwdriver { @@ -25,7 +26,7 @@ namespace NDSD_Screwdriver /// /// 输出端口操作 /// - private DOperate DOperate; + private DOperate DOperateInfo; /// /// TCP服务器 @@ -67,19 +68,28 @@ namespace NDSD_Screwdriver private CancellationTokenSource cancellationTokenSource; + private CancellationTokenSource sendCancellationTokenSource; + public int textRFID = 0; - + private Queue _methodQueue; + private ICache cache = Cache.Default; int FlashIndex = 0; + bool _flashflag = true; + public MainForm() { InitializeComponent(); + _methodQueue = new Queue(); + + + FlashThreadTime(); var memorySetting = MemorySetting.Current; SqlLiteTool.CreateTable(memorySetting.DB); @@ -88,7 +98,7 @@ namespace NDSD_Screwdriver LogDataGridView.AutoGenerateColumns = false; LogDataGridView.DataSource = null; LogDataGridView.DataSource = RFIDLogsEntitys; - DOperate = new DOperate(); + DOperateInfo = new DOperate(); if (!server.ServerOpen(memorySetting.ServerIP, memorySetting.ServerPort)) { MessageBox.Show("服务端打开失败!"); @@ -99,6 +109,7 @@ namespace NDSD_Screwdriver { serialPort = new SerialPortFactory(memorySetting.Com); StartLongRunningTask(); + SendRunningTask(); } catch (Exception e) { @@ -107,6 +118,10 @@ namespace NDSD_Screwdriver } } + + + + private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { if (server != null) @@ -124,6 +139,16 @@ namespace NDSD_Screwdriver } } + if (sendCancellationTokenSource != null) + { + sendCancellationTokenSource.Cancel(); + } + + if (cancellationTokenSource != null) + { + cancellationTokenSource.Cancel(); + } + timer.Close(); timer.Dispose(); @@ -140,7 +165,7 @@ namespace NDSD_Screwdriver private void DOTest_Click(object sender, EventArgs e) { //string str = serialPort.Read(); - ScrewdriverTest screwdriverTest = new ScrewdriverTest(server, DOperate); + ScrewdriverTest screwdriverTest = new ScrewdriverTest(server, DOperateInfo); screwdriverTest.Show(); } @@ -159,16 +184,10 @@ namespace NDSD_Screwdriver /// private void InitTable() { + _flashflag = true; FlashIndex = 0; textRFID = 0; - timer.Start(); - //if (flashThread != null) - //{ - // flashThread.Abort(); - //} - //FlashThread(); - var memorySetting = MemorySetting.Current; //读取rfid数据 @@ -378,6 +397,7 @@ namespace NDSD_Screwdriver else { timer.Stop(); + _flashflag = false; } flag = 1; break; @@ -426,33 +446,57 @@ namespace NDSD_Screwdriver SetRowsLightState(i, Brushes.Transparent); } } - timer.Stop(); - Thread.Sleep(100); + if(_flashflag) + timer.Stop(); + Thread.Sleep(500); //刷新IO的状态 for (int i = 0; i < RFIDStatesEntities.Count; i++) { if (RFIDStatesEntities[i].RFIDState == 1) { - DOperate.DOpen(lightsEntities[i].Yellow); - Thread.Sleep(100); + // DOperateInfo.DOpen(lightsEntities[i].Yellow); + _methodQueue.Enqueue(new DOperateEntity() + { + port = lightsEntities[i].Yellow, + delay = 0 + }); + } else if (RFIDStatesEntities[i].RFIDState == 3) { - DOperate.DOpen(lightsEntities[i].Green); - Thread.Sleep(100); - DOperate.DClose(lightsEntities[i].Yellow); - Thread.Sleep(100); + _methodQueue.Enqueue(new DOperateEntity() + { + port = lightsEntities[i].Green, + delay = 0 + }); + + _methodQueue.Enqueue(new DOperateEntity() + { + port = lightsEntities[i].Yellow, + delay = -1 + }); + } else if (RFIDStatesEntities[i].RFIDState == 4) { - DOperate.DOpen(lightsEntities[i].Red); - Thread.Sleep(100); - DOperate.DClose(lightsEntities[i].Yellow); - Thread.Sleep(100); + + _methodQueue.Enqueue(new DOperateEntity() + { + port = lightsEntities[i].Red, + delay = 0 + }); + + _methodQueue.Enqueue(new DOperateEntity() + { + port = lightsEntities[i].Yellow, + delay = -1 + }); + } } - timer.Start(); + if (_flashflag) + timer.Start(); RefreshRoll(); } @@ -515,19 +559,7 @@ namespace NDSD_Screwdriver } } - /// - /// IO控制 - /// - private void LightControl() - { - - } - - private void ComDataAnalysis(string str) - { - - } - + /// /// 列表回调函数 /// @@ -572,6 +604,54 @@ namespace NDSD_Screwdriver }, cancellationTokenSource.Token); } + + /// + /// RFID刷新任务 + /// + private void SendRunningTask() + { + sendCancellationTokenSource = new CancellationTokenSource(); + Task.Run(() => + { + while (!sendCancellationTokenSource.Token.IsCancellationRequested) + { + + if (!cache.ContainsKey("Test")) + { + + while (_methodQueue.Count > 0) + { + var q = _methodQueue.Dequeue(); + // -1 DClose > 0 DTimeOpen =0 Dopen + + if (q.delay == -1) + { + DOperateInfo.DClose(q.port); + } + + if (q.delay == 0) + { + DOperateInfo.DOpen(q.port); + } + + if (q.delay > 0) + { + DOperateInfo.DTimeOpen(q.port, q.delay); + } + + Thread.Sleep(210); // 模拟一些长时间的工作 + } + } + else + { + _methodQueue.Clear(); + } + + Thread.Sleep(100); // 模拟一些长时间的工作 + } + }, cancellationTokenSource.Token); + } + ///// ///// 等待工作指示灯闪烁进程 ///// @@ -607,13 +687,21 @@ namespace NDSD_Screwdriver if (step == 0) { step = 1; - DOperate.DTimeOpen(lightsEntities[FlashIndex].Yellow, 1); + _methodQueue.Enqueue(new DOperateEntity() + { + port = lightsEntities[FlashIndex].Yellow, + delay = 1 + }); + + monitorEntities[FlashIndex].RowEntitys[2].Color = Brushes.Yellow; + } else if (step == 1) { step=0; monitorEntities[FlashIndex].RowEntitys[2].Color = Brushes.Transparent; + } RefreshRoll(); @@ -686,12 +774,26 @@ namespace NDSD_Screwdriver { for (int i = 0; i < RFIDStatesEntities.Count; i++) { - DOperate.DClose(lightsEntities[i].Yellow); - Thread.Sleep(100); - DOperate.DClose(lightsEntities[i].Red); - Thread.Sleep(100); - DOperate.DClose(lightsEntities[i].Green); - Thread.Sleep(100); + + _methodQueue.Enqueue(new DOperateEntity() + { + port = lightsEntities[i].Yellow, + delay = -1 + }); + + _methodQueue.Enqueue(new DOperateEntity() + { + port = lightsEntities[i].Red, + delay = -1 + }); + + + _methodQueue.Enqueue(new DOperateEntity() + { + port = lightsEntities[i].Green, + delay = -1 + }); + } } #endregion diff --git a/NDSD-Screwdriver/MemorySetting.cs b/NDSD-Screwdriver/MemorySetting.cs index bc38438..e4e072e 100644 --- a/NDSD-Screwdriver/MemorySetting.cs +++ b/NDSD-Screwdriver/MemorySetting.cs @@ -21,12 +21,12 @@ namespace NDSD_Screwdriver } - public string DB { get; set; }= "Data Source=ndsd.db;Version=3;" + public string DB { get; set; } = "Data Source=ndsd.db;Version=3;"; /// /// 服务端IP /// - public string ServerIP { get; set; } = "192.168.0.101"; + public string ServerIP { get; set; } = "172.16.1.55"; /// /// 服务端端口 diff --git a/NDSD-Screwdriver/NDSD_Screwdriver.csproj b/NDSD-Screwdriver/NDSD_Screwdriver.csproj index 419daa6..e0b0bda 100644 --- a/NDSD-Screwdriver/NDSD_Screwdriver.csproj +++ b/NDSD-Screwdriver/NDSD_Screwdriver.csproj @@ -98,6 +98,7 @@ + Form diff --git a/NDSD-Screwdriver/ScrewdriverTest.cs b/NDSD-Screwdriver/ScrewdriverTest.cs index 76e0425..a86fd7e 100644 --- a/NDSD-Screwdriver/ScrewdriverTest.cs +++ b/NDSD-Screwdriver/ScrewdriverTest.cs @@ -10,6 +10,7 @@ using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using DNSD_DB; +using NewLife.Caching; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock; @@ -21,15 +22,20 @@ namespace NDSD_Screwdriver TcpServer server; + + public ScrewdriverTest(TcpServer s, DOperate d) : this() { server = s; DOperate = d; } + private ICache cache = Cache.Default; public ScrewdriverTest() { InitializeComponent(); + cache.Set("Test", DateTime.Now); + } private void DOpenButton_Click(object sender, EventArgs e) @@ -104,7 +110,7 @@ namespace NDSD_Screwdriver private void ScrewdriverTest_FormClosed(object sender, FormClosedEventArgs e) { - + cache.Remove("Test"); } private void DelayButton_Click(object sender, EventArgs e) diff --git a/NDSD-TouchSocket/DOperate.cs b/NDSD-TouchSocket/DOperate.cs index 4450147..2e554e1 100644 --- a/NDSD-TouchSocket/DOperate.cs +++ b/NDSD-TouchSocket/DOperate.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using NewLife; namespace NDSD_TouchSocket { @@ -24,6 +25,8 @@ namespace NDSD_TouchSocket /// 延迟,1代表0.1s/100ms public void DTimeOpen(Port port, int delay) { + + // string str = sendAnalysis.DTimeOpenDataAnalysis((byte)port, delay).ToHex(" "); Server.SendMessage(sendAnalysis.DTimeOpenDataAnalysis((byte)port, delay)); }