消息队列版本

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.Windows.Forms;
using System.Xml.Serialization;
using NewLife.Caching;
namespace NDSD_Screwdriver
{
@ -25,7 +26,7 @@ namespace NDSD_Screwdriver
/// <summary>
/// 输出端口操作
/// </summary>
private DOperate DOperate;
private DOperate DOperateInfo;
/// <summary>
/// TCP服务器
@ -67,19 +68,28 @@ namespace NDSD_Screwdriver
private CancellationTokenSource cancellationTokenSource;
private CancellationTokenSource sendCancellationTokenSource;
public int textRFID = 0;
private Queue<DOperateEntity> _methodQueue;
private ICache cache = Cache.Default;
int FlashIndex = 0;
bool _flashflag = true;
public MainForm()
{
InitializeComponent();
_methodQueue = new Queue<DOperateEntity>();
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
/// </summary>
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
}
}
/// <summary>
/// IO控制
/// </summary>
private void LightControl()
{
}
private void ComDataAnalysis(string str)
{
}
/// <summary>
/// 列表回调函数
/// </summary>
@ -572,6 +604,54 @@ namespace NDSD_Screwdriver
}, 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>
@ -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

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

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

@ -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)

@ -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
/// <param name="delay">延迟1代表0.1s/100ms</param>
public void DTimeOpen(Port port, int delay)
{
// string str = sendAnalysis.DTimeOpenDataAnalysis((byte)port, delay).ToHex(" ");
Server.SendMessage(sendAnalysis.DTimeOpenDataAnalysis((byte)port, delay));
}

Loading…
Cancel
Save