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));
}