液晶标签剩余协议对接 编码
This commit is contained in:
@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.DbModels.Task;
|
||||
using WCS.BLL.Manager;
|
||||
using WCS.DAL.Db;
|
||||
using WCS.DAL.DbModels;
|
||||
@ -27,7 +28,7 @@ namespace WCS.BLL.HardWare
|
||||
ShelfCode = shelfInfo.ShelfCode;
|
||||
RowCounts = shelfInfo.Rowcounts;
|
||||
ColumnCounts = shelfInfo.Columncounts;
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
SetCurrentMode(TaskModeEnum.待机模式);
|
||||
ClientIp = shelfInfo.ClientIp;
|
||||
LightId = shelfInfo.LightId;
|
||||
WarningLight = new WarningLight() { LightId = shelfInfo.LightId };
|
||||
@ -60,16 +61,15 @@ namespace WCS.BLL.HardWare
|
||||
|
||||
while (true)
|
||||
{
|
||||
//未完成首次连接时 暂不发送
|
||||
if (TcpCleint.IsFirstConnected == false)
|
||||
{
|
||||
await Task.Delay(2000);
|
||||
continue;
|
||||
}
|
||||
|
||||
Logs.Write($"[test]");
|
||||
Logs.Write($"[test]{ShelfCode}");
|
||||
try
|
||||
{
|
||||
//未完成首次连接时 暂不发送
|
||||
if (TcpCleint.IsFirstConnected == false)
|
||||
{
|
||||
await Task.Delay(2000);
|
||||
continue;
|
||||
}
|
||||
//查询是否有需要刷新的
|
||||
var needRefreshModules = MXL4Modules.Where(t => t.IsNeedRefresh)
|
||||
.ToList();
|
||||
@ -78,16 +78,121 @@ namespace WCS.BLL.HardWare
|
||||
//查询当前是否有任务
|
||||
var currentTasks = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ModuleId == module.ModuleId)
|
||||
.Where(t => t.IsSended == false)
|
||||
.OrderBy(t => t.CreateTime)
|
||||
.ToList();
|
||||
//存在入库、出库、盘点等任务
|
||||
//入库、出库、盘点等任务
|
||||
if (currentTasks != null && currentTasks.Count > 0)
|
||||
{
|
||||
var firstTask = currentTasks.First();
|
||||
var taskMode = currentTasks.First().TaskMode;
|
||||
#region 处理模组的模式 没有Continue
|
||||
if (module.CurrentMode == TaskModeEnum.待机模式)
|
||||
{
|
||||
//进入对应模式
|
||||
switch (taskMode)
|
||||
{
|
||||
case (TaskModeEnum.入库模式):
|
||||
module.GoInInstoreMode(TcpCleint);
|
||||
break;
|
||||
case (TaskModeEnum.出库模式):
|
||||
module.GoInOutstoreMode(TcpCleint);
|
||||
break;
|
||||
case (TaskModeEnum.盘点模式):
|
||||
module.GoInStocktakingMode(TcpCleint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
//等待10ms这边将状态成功更新了来
|
||||
await Task.Delay(10);
|
||||
}
|
||||
else
|
||||
{
|
||||
taskMode = module.CurrentMode;
|
||||
}
|
||||
#endregion
|
||||
|
||||
//只显示当前模式的任务
|
||||
currentTasks = currentTasks.Where(t => t.TaskMode == taskMode).ToList();
|
||||
//这个分支应该很少跑到 有刷新必然有新任务
|
||||
if (currentTasks == null || currentTasks.Count == 0)
|
||||
{
|
||||
Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!");
|
||||
var tasks = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ModuleId == module.ModuleId)
|
||||
.Where(t => t.IsSended == true)
|
||||
.Where(t => t.TaskMode == taskMode)
|
||||
.OrderBy(t => t.CreateTime)
|
||||
.ToList();
|
||||
if (tasks != null && tasks.Count > 0)
|
||||
{
|
||||
Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!有已发送的任务未完成故不处理!");
|
||||
module.IsNeedRefresh = false;
|
||||
continue;
|
||||
}
|
||||
//退出对应模式到待机模式! 后续持续刷新数据!
|
||||
else
|
||||
{
|
||||
Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!没有已发送未完成的任务!退出当前模式!");
|
||||
// 退出对应模式
|
||||
switch (taskMode)
|
||||
{
|
||||
case (TaskModeEnum.入库模式):
|
||||
module.GoOutInstoreMode(TcpCleint);
|
||||
break;
|
||||
case (TaskModeEnum.出库模式):
|
||||
module.GoOutOutstoreMode(TcpCleint);
|
||||
break;
|
||||
case (TaskModeEnum.盘点模式):
|
||||
module.GoOutStocktakingMode(TcpCleint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
//按照任务顺序给其发送数据
|
||||
foreach (var currentTask in currentTasks)
|
||||
{
|
||||
module.SendTaskId(currentTask.TaskID, TcpCleint);
|
||||
module.SendMatCode(currentTask.MatCode, TcpCleint);
|
||||
module.SendMatName(currentTask.MatName, TcpCleint);
|
||||
module.SendMatSpec(currentTask.MatSpec, TcpCleint);
|
||||
module.SendMatBatch(currentTask.MatBatch, TcpCleint);
|
||||
module.SendMatQty(currentTask.Qty, TcpCleint);
|
||||
|
||||
currentTask.IsSended = true;
|
||||
DbHelp.db.Updateable(currentTask).ExecuteCommand();
|
||||
}
|
||||
//发送完毕后就不刷新了
|
||||
module.IsNeedRefresh = false;
|
||||
continue;
|
||||
}
|
||||
//不存在入库、出库、盘点等任务
|
||||
//不存在入库、出库、盘点等任务 应该变成待机
|
||||
else
|
||||
{
|
||||
module.SetCurrentMode(Mode.待机模式);
|
||||
//退出对应模式到待机模式! 后续持续刷新数据!
|
||||
if (module.CurrentMode != TaskModeEnum.待机模式)
|
||||
{
|
||||
// 退出对应模式
|
||||
switch (module.CurrentMode)
|
||||
{
|
||||
case (TaskModeEnum.入库模式):
|
||||
module.GoOutInstoreMode(TcpCleint);
|
||||
break;
|
||||
case (TaskModeEnum.出库模式):
|
||||
module.GoOutOutstoreMode(TcpCleint);
|
||||
break;
|
||||
case (TaskModeEnum.盘点模式):
|
||||
module.GoOutStocktakingMode(TcpCleint);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
//向上层系统获取数据
|
||||
|
||||
@ -96,7 +201,6 @@ namespace WCS.BLL.HardWare
|
||||
//获取成功 无数据
|
||||
module.StandbyNoInfoDisplay(TcpCleint);
|
||||
module.IsNeedRefresh = false;//未获取到库存数据 回没有库位显示信息给硬件
|
||||
|
||||
//获取失败 跳过此次循环后继续获取
|
||||
}
|
||||
}
|
||||
@ -115,7 +219,7 @@ namespace WCS.BLL.HardWare
|
||||
public string ShelfCode { get; set; }
|
||||
public int RowCounts { get; set; }
|
||||
public int ColumnCounts { get; set; }
|
||||
public Mode CurrentMode { get; set; }
|
||||
public TaskModeEnum CurrentMode { get; set; }
|
||||
public DateTime SetCurrentModeTime { get; set; }
|
||||
public string ModulesStr { get; set; }//当前货架所有模组的Str
|
||||
public string GroupName { get; set; }
|
||||
@ -128,15 +232,15 @@ namespace WCS.BLL.HardWare
|
||||
public WarningLight WarningLight { get; set; }
|
||||
public void ClearWarning()
|
||||
{
|
||||
if (this.CurrentMode == Mode.入库模式)
|
||||
if (this.CurrentMode == TaskModeEnum.入库模式)
|
||||
{
|
||||
WarningLight.BlueLight(TcpCleint);
|
||||
}
|
||||
else if (this.CurrentMode == Mode.出库模式)
|
||||
else if (this.CurrentMode == TaskModeEnum.出库模式)
|
||||
{
|
||||
WarningLight.GreenLight(TcpCleint);
|
||||
}
|
||||
else if (this.CurrentMode == Mode.盘点模式)
|
||||
else if (this.CurrentMode == TaskModeEnum.盘点模式)
|
||||
{
|
||||
WarningLight.GreenLight(TcpCleint);
|
||||
}
|
||||
@ -215,7 +319,7 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void SetCurrentMode(Mode mode)
|
||||
public void SetCurrentMode(TaskModeEnum mode)
|
||||
{
|
||||
this.CurrentMode = mode;
|
||||
this.SetCurrentModeTime = DateTime.Now;
|
||||
@ -275,17 +379,38 @@ namespace WCS.BLL.HardWare
|
||||
if (data[TcpCleint.PreFixLength + 3] == 0x02)
|
||||
GoBackStandbyModeReturnProcess(data, boardId);
|
||||
break;
|
||||
case 0xA1://标签返回入库成功信号
|
||||
case 0xA1:
|
||||
//标签返回入库成功信号
|
||||
if (data[TcpCleint.PreFixLength + 3] == 0x05)
|
||||
InStoreSuccessProcess(data, boardId);
|
||||
//进入入库模式成功
|
||||
else if (data[TcpCleint.PreFixLength + 3] == 0x01)
|
||||
GoInInStoreReturnProcess(data, boardId);
|
||||
//退出入库模式
|
||||
else if (data[TcpCleint.PreFixLength + 3] == 0x03)
|
||||
GoBackStandbyModeReturnProcess(data, boardId);
|
||||
break;
|
||||
case 0xA2://标签返回出库成功信号
|
||||
case 0xA2:
|
||||
//标签返回出库成功信号
|
||||
if (data[TcpCleint.PreFixLength + 3] == 0x04)
|
||||
OutStoreSuccessProcess(data, boardId);
|
||||
//进入出库模式成功
|
||||
else if (data[TcpCleint.PreFixLength + 3] == 0x01)
|
||||
GoInOutStoreReturnProcess(data, boardId);
|
||||
//退出出库模式
|
||||
else if (data[TcpCleint.PreFixLength + 3] == 0x03)
|
||||
GoBackStandbyModeReturnProcess(data, boardId);
|
||||
break;
|
||||
case 0xA3://标签返回盘点成功信号
|
||||
case 0xA3:
|
||||
//标签返回盘点成功信号
|
||||
if (data[TcpCleint.PreFixLength + 3] == 0x03)
|
||||
StocktakingSuccessProcess(data, boardId);
|
||||
//进入盘点模式
|
||||
else if (data[TcpCleint.PreFixLength + 3] == 0x01)
|
||||
GoInStocktakingReturnProcess(data, boardId);
|
||||
//退出盘点模式
|
||||
else if (data[TcpCleint.PreFixLength + 3] == 0x02)
|
||||
GoBackStandbyModeReturnProcess(data, boardId);
|
||||
break;
|
||||
default:
|
||||
;
|
||||
@ -311,8 +436,64 @@ namespace WCS.BLL.HardWare
|
||||
Logs.Write($"【回到待机模式】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
|
||||
}
|
||||
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
SetCurrentMode(TaskModeEnum.待机模式);
|
||||
}
|
||||
/// <summary>
|
||||
/// 标签返回进入入库模式信号
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public void GoInInStoreReturnProcess(byte[] data, int boardId)
|
||||
{
|
||||
//获取对应的模组
|
||||
var module = MXL4Modules.Where(t => t.BoardId == boardId)
|
||||
.FirstOrDefault();
|
||||
if (module != null)
|
||||
{
|
||||
module.SetCurrentMode(TaskModeEnum.入库模式);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【进入入库模式成功】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 标签返回进入出库模式信号
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public void GoInOutStoreReturnProcess(byte[] data, int boardId)
|
||||
{
|
||||
//获取对应的模组
|
||||
var module = MXL4Modules.Where(t => t.BoardId == boardId)
|
||||
.FirstOrDefault();
|
||||
if (module != null)
|
||||
{
|
||||
module.SetCurrentMode(TaskModeEnum.出库模式);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【进入出库模式成功】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 标签返回进入盘点模式信号
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public void GoInStocktakingReturnProcess(byte[] data, int boardId)
|
||||
{
|
||||
//获取对应的模组
|
||||
var module = MXL4Modules.Where(t => t.BoardId == boardId)
|
||||
.FirstOrDefault();
|
||||
if (module != null)
|
||||
{
|
||||
module.SetCurrentMode(TaskModeEnum.盘点模式);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【进入盘点模式成功】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 标签返回入库成功信号
|
||||
|
Reference in New Issue
Block a user