消息队列版本

master
杨威 1 month ago
parent edf0ae93f6
commit 08e13239fa

@ -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; }
/// <summary>
/// -1 DClose > 0 DTimeOpen =0 Dopen
/// </summary>
public int delay { get; set; }
}
}

@ -17,6 +17,7 @@ using System.Threading.Tasks;
using System.Timers; using System.Timers;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml.Serialization; using System.Xml.Serialization;
using NewLife.Caching;
namespace NDSD_Screwdriver namespace NDSD_Screwdriver
{ {
@ -25,7 +26,7 @@ namespace NDSD_Screwdriver
/// <summary> /// <summary>
/// 输出端口操作 /// 输出端口操作
/// </summary> /// </summary>
private DOperate DOperate; private DOperate DOperateInfo;
/// <summary> /// <summary>
/// TCP服务器 /// TCP服务器
@ -67,19 +68,28 @@ namespace NDSD_Screwdriver
private CancellationTokenSource cancellationTokenSource; private CancellationTokenSource cancellationTokenSource;
private CancellationTokenSource sendCancellationTokenSource;
public int textRFID = 0; public int textRFID = 0;
private Queue<DOperateEntity> _methodQueue;
private ICache cache = Cache.Default;
int FlashIndex = 0; int FlashIndex = 0;
bool _flashflag = true;
public MainForm() public MainForm()
{ {
InitializeComponent(); InitializeComponent();
_methodQueue = new Queue<DOperateEntity>();
FlashThreadTime();
var memorySetting = MemorySetting.Current; var memorySetting = MemorySetting.Current;
SqlLiteTool.CreateTable(memorySetting.DB); SqlLiteTool.CreateTable(memorySetting.DB);
@ -88,7 +98,7 @@ namespace NDSD_Screwdriver
LogDataGridView.AutoGenerateColumns = false; LogDataGridView.AutoGenerateColumns = false;
LogDataGridView.DataSource = null; LogDataGridView.DataSource = null;
LogDataGridView.DataSource = RFIDLogsEntitys; LogDataGridView.DataSource = RFIDLogsEntitys;
DOperate = new DOperate(); DOperateInfo = new DOperate();
if (!server.ServerOpen(memorySetting.ServerIP, memorySetting.ServerPort)) if (!server.ServerOpen(memorySetting.ServerIP, memorySetting.ServerPort))
{ {
MessageBox.Show("服务端打开失败!"); MessageBox.Show("服务端打开失败!");
@ -99,6 +109,7 @@ namespace NDSD_Screwdriver
{ {
serialPort = new SerialPortFactory(memorySetting.Com); serialPort = new SerialPortFactory(memorySetting.Com);
StartLongRunningTask(); StartLongRunningTask();
SendRunningTask();
} }
catch (Exception e) catch (Exception e)
{ {
@ -107,6 +118,10 @@ namespace NDSD_Screwdriver
} }
} }
private void MainForm_FormClosed(object sender, FormClosedEventArgs e) private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{ {
if (server != null) if (server != null)
@ -124,6 +139,16 @@ namespace NDSD_Screwdriver
} }
} }
if (sendCancellationTokenSource != null)
{
sendCancellationTokenSource.Cancel();
}
if (cancellationTokenSource != null)
{
cancellationTokenSource.Cancel();
}
timer.Close(); timer.Close();
timer.Dispose(); timer.Dispose();
@ -140,7 +165,7 @@ namespace NDSD_Screwdriver
private void DOTest_Click(object sender, EventArgs e) private void DOTest_Click(object sender, EventArgs e)
{ {
//string str = serialPort.Read(); //string str = serialPort.Read();
ScrewdriverTest screwdriverTest = new ScrewdriverTest(server, DOperate); ScrewdriverTest screwdriverTest = new ScrewdriverTest(server, DOperateInfo);
screwdriverTest.Show(); screwdriverTest.Show();
} }
@ -159,16 +184,10 @@ namespace NDSD_Screwdriver
/// </summary> /// </summary>
private void InitTable() private void InitTable()
{ {
_flashflag = true;
FlashIndex = 0; FlashIndex = 0;
textRFID = 0; textRFID = 0;
timer.Start(); timer.Start();
//if (flashThread != null)
//{
// flashThread.Abort();
//}
//FlashThread();
var memorySetting = MemorySetting.Current; var memorySetting = MemorySetting.Current;
//读取rfid数据 //读取rfid数据
@ -378,6 +397,7 @@ namespace NDSD_Screwdriver
else else
{ {
timer.Stop(); timer.Stop();
_flashflag = false;
} }
flag = 1; flag = 1;
break; break;
@ -426,33 +446,57 @@ namespace NDSD_Screwdriver
SetRowsLightState(i, Brushes.Transparent); SetRowsLightState(i, Brushes.Transparent);
} }
} }
timer.Stop(); if(_flashflag)
Thread.Sleep(100); timer.Stop();
Thread.Sleep(500);
//刷新IO的状态 //刷新IO的状态
for (int i = 0; i < RFIDStatesEntities.Count; i++) for (int i = 0; i < RFIDStatesEntities.Count; i++)
{ {
if (RFIDStatesEntities[i].RFIDState == 1) if (RFIDStatesEntities[i].RFIDState == 1)
{ {
DOperate.DOpen(lightsEntities[i].Yellow); // DOperateInfo.DOpen(lightsEntities[i].Yellow);
Thread.Sleep(100); _methodQueue.Enqueue(new DOperateEntity()
{
port = lightsEntities[i].Yellow,
delay = 0
});
} }
else if (RFIDStatesEntities[i].RFIDState == 3) else if (RFIDStatesEntities[i].RFIDState == 3)
{ {
DOperate.DOpen(lightsEntities[i].Green); _methodQueue.Enqueue(new DOperateEntity()
Thread.Sleep(100); {
DOperate.DClose(lightsEntities[i].Yellow); port = lightsEntities[i].Green,
Thread.Sleep(100); delay = 0
});
_methodQueue.Enqueue(new DOperateEntity()
{
port = lightsEntities[i].Yellow,
delay = -1
});
} }
else if (RFIDStatesEntities[i].RFIDState == 4) else if (RFIDStatesEntities[i].RFIDState == 4)
{ {
DOperate.DOpen(lightsEntities[i].Red);
Thread.Sleep(100); _methodQueue.Enqueue(new DOperateEntity()
DOperate.DClose(lightsEntities[i].Yellow); {
Thread.Sleep(100); port = lightsEntities[i].Red,
delay = 0
});
_methodQueue.Enqueue(new DOperateEntity()
{
port = lightsEntities[i].Yellow,
delay = -1
});
} }
} }
timer.Start(); if (_flashflag)
timer.Start();
RefreshRoll(); RefreshRoll();
} }
@ -515,19 +559,7 @@ namespace NDSD_Screwdriver
} }
} }
/// <summary>
/// IO控制
/// </summary>
private void LightControl()
{
}
private void ComDataAnalysis(string str)
{
}
/// <summary> /// <summary>
/// 列表回调函数 /// 列表回调函数
/// </summary> /// </summary>
@ -572,6 +604,54 @@ namespace NDSD_Screwdriver
}, cancellationTokenSource.Token); }, cancellationTokenSource.Token);
} }
/// <summary>
/// RFID刷新任务
/// </summary>
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);
}
///// <summary> ///// <summary>
///// 等待工作指示灯闪烁进程 ///// 等待工作指示灯闪烁进程
///// </summary> ///// </summary>
@ -607,13 +687,21 @@ namespace NDSD_Screwdriver
if (step == 0) if (step == 0)
{ {
step = 1; 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; monitorEntities[FlashIndex].RowEntitys[2].Color = Brushes.Yellow;
} }
else if (step == 1) else if (step == 1)
{ {
step=0; step=0;
monitorEntities[FlashIndex].RowEntitys[2].Color = Brushes.Transparent; monitorEntities[FlashIndex].RowEntitys[2].Color = Brushes.Transparent;
} }
RefreshRoll(); RefreshRoll();
@ -686,12 +774,26 @@ namespace NDSD_Screwdriver
{ {
for (int i = 0; i < RFIDStatesEntities.Count; i++) for (int i = 0; i < RFIDStatesEntities.Count; i++)
{ {
DOperate.DClose(lightsEntities[i].Yellow);
Thread.Sleep(100); _methodQueue.Enqueue(new DOperateEntity()
DOperate.DClose(lightsEntities[i].Red); {
Thread.Sleep(100); port = lightsEntities[i].Yellow,
DOperate.DClose(lightsEntities[i].Green); delay = -1
Thread.Sleep(100); });
_methodQueue.Enqueue(new DOperateEntity()
{
port = lightsEntities[i].Red,
delay = -1
});
_methodQueue.Enqueue(new DOperateEntity()
{
port = lightsEntities[i].Green,
delay = -1
});
} }
} }
#endregion #endregion

@ -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;";
/// <summary> /// <summary>
/// 服务端IP /// 服务端IP
/// </summary> /// </summary>
public string ServerIP { get; set; } = "192.168.0.101"; public string ServerIP { get; set; } = "172.16.1.55";
/// <summary> /// <summary>
/// 服务端端口 /// 服务端端口

@ -98,6 +98,7 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="DOperateEntity.cs" />
<Compile Include="FrmSetting.cs"> <Compile Include="FrmSetting.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>

@ -10,6 +10,7 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using DNSD_DB; using DNSD_DB;
using NewLife.Caching;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
@ -21,15 +22,20 @@ namespace NDSD_Screwdriver
TcpServer server; TcpServer server;
public ScrewdriverTest(TcpServer s, DOperate d) : this() public ScrewdriverTest(TcpServer s, DOperate d) : this()
{ {
server = s; server = s;
DOperate = d; DOperate = d;
} }
private ICache cache = Cache.Default;
public ScrewdriverTest() public ScrewdriverTest()
{ {
InitializeComponent(); InitializeComponent();
cache.Set("Test", DateTime.Now);
} }
private void DOpenButton_Click(object sender, EventArgs e) private void DOpenButton_Click(object sender, EventArgs e)
@ -104,7 +110,7 @@ namespace NDSD_Screwdriver
private void ScrewdriverTest_FormClosed(object sender, FormClosedEventArgs e) private void ScrewdriverTest_FormClosed(object sender, FormClosedEventArgs e)
{ {
cache.Remove("Test");
} }
private void DelayButton_Click(object sender, EventArgs e) private void DelayButton_Click(object sender, EventArgs e)

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using NewLife;
namespace NDSD_TouchSocket namespace NDSD_TouchSocket
{ {
@ -24,6 +25,8 @@ namespace NDSD_TouchSocket
/// <param name="delay">延迟1代表0.1s/100ms</param> /// <param name="delay">延迟1代表0.1s/100ms</param>
public void DTimeOpen(Port port, int delay) public void DTimeOpen(Port port, int delay)
{ {
// string str = sendAnalysis.DTimeOpenDataAnalysis((byte)port, delay).ToHex(" ");
Server.SendMessage(sendAnalysis.DTimeOpenDataAnalysis((byte)port, delay)); Server.SendMessage(sendAnalysis.DTimeOpenDataAnalysis((byte)port, delay));
} }

Loading…
Cancel
Save