diff --git a/WcsMain/ApiServe/Controllers/Dto/WcsDto/ElTag/EditTaskInfoRequest.cs b/WcsMain/ApiServe/Controllers/Dto/WcsDto/ElTag/EditTaskInfoRequest.cs
new file mode 100644
index 0000000..4efd811
--- /dev/null
+++ b/WcsMain/ApiServe/Controllers/Dto/WcsDto/ElTag/EditTaskInfoRequest.cs
@@ -0,0 +1,77 @@
+using DataCheck;
+using SqlSugar;
+using System.Text.Json.Serialization;
+
+namespace WcsMain.ApiServe.Controllers.Dto.WcsDto.ElTag;
+
+public class EditTaskInfoRequest
+{
+ ///
+ /// 任务号
+ ///
+ [DataRules]
+ [JsonPropertyName("taskId")]
+ public string? TaskId { get; set; }
+
+ ///
+ /// 点位
+ ///
+ [JsonPropertyName("location")]
+ public string? Location { get; set; }
+
+ ///
+ /// 订单号
+ ///
+ [JsonPropertyName("orderId")]
+ public string? OrderId { get; set; }
+
+ ///
+ /// 载具号
+ ///
+ [JsonPropertyName("vehicleNo")]
+ public string? VehicleNo { get; set; }
+
+ ///
+ /// 物料编号
+ ///
+ [JsonPropertyName("goodsId")]
+ public string? GoodsId { get; set; }
+
+ ///
+ /// 物料名称
+ ///
+ [JsonPropertyName("goodsName")]
+ public string? GoodsName { get; set; }
+
+ ///
+ /// 任务状态
+ ///
+ [JsonPropertyName("taskStatus")]
+ public int? TaskStatus { get; set; }
+
+ ///
+ /// 需求数量
+ ///
+ [JsonPropertyName("needNum")]
+ public int? NeedNum { get; set; }
+
+ ///
+ /// 拣选数量
+ ///
+ [JsonPropertyName("pickNum")]
+ public int? PickNum { get; set; }
+
+
+ ///
+ /// 创建人
+ ///
+ [JsonPropertyName("createPerson")]
+ public string? CreatePerson { get; set; }
+
+
+ ///
+ /// 备注
+ ///
+ [JsonPropertyName("remark")]
+ public string? Remark { get; set; }
+}
diff --git a/WcsMain/ApiServe/Controllers/Dto/WcsDto/ElTag/QueryTaskRequest.cs b/WcsMain/ApiServe/Controllers/Dto/WcsDto/ElTag/QueryTaskRequest.cs
new file mode 100644
index 0000000..4ef6ac1
--- /dev/null
+++ b/WcsMain/ApiServe/Controllers/Dto/WcsDto/ElTag/QueryTaskRequest.cs
@@ -0,0 +1,47 @@
+using System.Text.Json.Serialization;
+
+namespace WcsMain.ApiServe.Controllers.Dto.WcsDto.ElTag;
+
+public class QueryTaskRequest
+{
+
+ ///
+ /// 查询的字符串
+ ///
+ [JsonPropertyName("searchStr")]
+ public string? SearchStr { get; set; }
+
+ ///
+ /// 任务状态
+ ///
+ [JsonPropertyName("elTagTaskStatus")]
+ public List? TaskStatus { get; set; }
+
+ ///
+ /// 查询时间范围
+ ///
+ [JsonPropertyName("timeRange")]
+ public List? TimeRange { get; set; }
+
+ ///
+ /// 分页信息
+ ///
+ [JsonPropertyName("page")]
+ public ElTagTaskPage? Page { get; set; }
+}
+
+public class ElTagTaskPage
+{
+ ///
+ /// 每页大小
+ ///
+ [JsonPropertyName("pageSize")]
+ public int PageSize { get; set; }
+
+ ///
+ /// 当前页数
+ ///
+ [JsonPropertyName("pageIndex")]
+ public int PageIndex { get; set; }
+
+}
diff --git a/WcsMain/ApiServe/Controllers/WcsController/ElTagController.cs b/WcsMain/ApiServe/Controllers/WcsController/ElTagController.cs
index e61066d..46f4d36 100644
--- a/WcsMain/ApiServe/Controllers/WcsController/ElTagController.cs
+++ b/WcsMain/ApiServe/Controllers/WcsController/ElTagController.cs
@@ -4,6 +4,7 @@ using WcsMain.ApiServe.ControllerFilter.ExceptionFilter;
using WcsMain.ApiServe.Controllers.Dto;
using WcsMain.ApiServe.Controllers.Dto.WcsDto.ElTag;
using WcsMain.ApiServe.Service.WcsService;
+using WcsMain.DataBase.TableEntity;
namespace WcsMain.ApiServe.Controllers.WcsController;
@@ -32,5 +33,28 @@ public class ElTagController(ElTagService elTagService) : ControllerBase
}
+ ///
+ /// 分页查询电子标签任务表
+ ///
+ ///
+ ///
+ [HttpPost("queryTaskWithPage")]
+ public WcsApiResponse> QueryTaskWithPage([FromBody] QueryTaskRequest request)
+ {
+ return _elTagService.QueryTaskWithPage(request);
+ }
+
+ ///
+ /// 编辑电子标签任务信息
+ ///
+ ///
+ ///
+ [HttpPost("editTaskInfo")]
+ public WcsApiResponse EditTaskInfo([FromBody] EditTaskInfoRequest request)
+ {
+ return _elTagService.EditTaskInfo(request);
+ }
+
+
}
diff --git a/WcsMain/ApiServe/Service/WcsService/ElTagService.cs b/WcsMain/ApiServe/Service/WcsService/ElTagService.cs
index e9187c1..f002060 100644
--- a/WcsMain/ApiServe/Service/WcsService/ElTagService.cs
+++ b/WcsMain/ApiServe/Service/WcsService/ElTagService.cs
@@ -1,13 +1,18 @@
using WcsMain.ApiServe.Controllers.Dto;
using WcsMain.ApiServe.Controllers.Dto.WcsDto.ElTag;
using WcsMain.ApiServe.Factory;
+using WcsMain.DataBase.Dao;
+using WcsMain.DataBase.TableEntity;
using WcsMain.WcsAttribute.AutoFacAttribute;
namespace WcsMain.ApiServe.Service.WcsService;
[Service]
-public class ElTagService
+public class ElTagService(AppElTagTaskDao tagTaskDao)
{
+
+ private readonly AppElTagTaskDao _tagTaskDao = tagTaskDao;
+
///
/// 展示电子标签的数字
///
@@ -17,4 +22,36 @@ public class ElTagService
{
return WcsApiResponseFactory.Fail();
}
+
+ ///
+ /// 分页查询电子标签任务
+ ///
+ ///
+ ///
+ public WcsApiResponse> QueryTaskWithPage(QueryTaskRequest request)
+ {
+ (List? elTagTasks, int totalRows) = _tagTaskDao.QueryWithPage(request);
+ if (elTagTasks == default)
+ {
+ return WcsApiResponseFactory.DataBaseErr>();
+ }
+ return WcsApiResponseFactory.Success(totalRows, elTagTasks);
+ }
+
+ ///
+ /// 编辑电子标签任务信息
+ ///
+ ///
+ ///
+ public WcsApiResponse EditTaskInfo(EditTaskInfoRequest request)
+ {
+ var updateResult = _tagTaskDao.Update(new AppElTagTask
+ {
+ TaskId = request.TaskId,
+ TaskStatus = request.TaskStatus,
+ Remark = "WCS变更信息"
+ });
+ return updateResult > 0 ? WcsApiResponseFactory.Success() : WcsApiResponseFactory.DataBaseErr();
+ }
+
}
diff --git a/WcsMain/ApiServe/Service/WcsService/RunningInfoService.cs b/WcsMain/ApiServe/Service/WcsService/RunningInfoService.cs
index 33a578d..6a2c535 100644
--- a/WcsMain/ApiServe/Service/WcsService/RunningInfoService.cs
+++ b/WcsMain/ApiServe/Service/WcsService/RunningInfoService.cs
@@ -31,7 +31,9 @@ public class RunningInfoService
{
fileNames.Add(fileInfo.Name);
}
- return WcsApiResponseFactory.Success(fileNames, "查询成功");
+ var fileNameArray = fileNames.ToArray();
+ Array.Reverse(fileNameArray);
+ return WcsApiResponseFactory.Success(fileNameArray.ToList(), "查询成功");
}
///
diff --git a/WcsMain/ApiServe/Service/WcsService/StackerService.cs b/WcsMain/ApiServe/Service/WcsService/StackerService.cs
index 95cc624..bce8688 100644
--- a/WcsMain/ApiServe/Service/WcsService/StackerService.cs
+++ b/WcsMain/ApiServe/Service/WcsService/StackerService.cs
@@ -5,7 +5,7 @@ using WcsMain.ApiServe.Controllers.Dto.WcsDto.Stacker;
using WcsMain.ApiServe.Factory;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
-using WcsMain.PlcOperation.Stacker;
+using WcsMain.EquipOperation.Stacker;
using WcsMain.WcsAttribute.AutoFacAttribute;
namespace WcsMain.ApiServe.Service.WcsService;
diff --git a/WcsMain/Business/CirculationTask/CommonCirculation/ConnectPlcWithCirculation.cs b/WcsMain/Business/CirculationTask/CommonCirculation/ConnectPlcWithCirculation.cs
index 75b0daf..55fcac6 100644
--- a/WcsMain/Business/CirculationTask/CommonCirculation/ConnectPlcWithCirculation.cs
+++ b/WcsMain/Business/CirculationTask/CommonCirculation/ConnectPlcWithCirculation.cs
@@ -1,8 +1,8 @@
using CirculateTool;
using WcsMain.Common;
-using WcsMain.PlcOperation;
+using WcsMain.EquipOperation;
-namespace WcsMain.Business.CirculationTask;
+namespace WcsMain.Business.CirculationTask.CommonCirculation;
///
/// 定时器检测 PLC 是否连接,若没有连接则重新连接
diff --git a/WcsMain/Business/CirculationTask/CommonCirculation/HeartBeat.cs b/WcsMain/Business/CirculationTask/CommonCirculation/HeartBeat.cs
index 45e385b..467d5ee 100644
--- a/WcsMain/Business/CirculationTask/CommonCirculation/HeartBeat.cs
+++ b/WcsMain/Business/CirculationTask/CommonCirculation/HeartBeat.cs
@@ -1,5 +1,5 @@
using CirculateTool;
-using WcsMain.PlcOperation;
+using WcsMain.EquipOperation.Convey;
namespace WcsMain.Business.CirculationTask.CommonCirculation;
diff --git a/WcsMain/Business/CirculationTask/ElTag/LightElTag.cs b/WcsMain/Business/CirculationTask/ElTag/LightElTag.cs
index b57f9e4..8e8dbf5 100644
--- a/WcsMain/Business/CirculationTask/ElTag/LightElTag.cs
+++ b/WcsMain/Business/CirculationTask/ElTag/LightElTag.cs
@@ -5,16 +5,18 @@ using WcsMain.DataBase.TableEntity;
using WcsMain.ElTag.Atop;
using WcsMain.ElTag.Atop.Entity;
using WcsMain.Enum.TaskEnum;
+using WcsMain.EquipOperation.ElTag;
namespace WcsMain.Business.CirculationTask.ElTag;
[Circulation]
-public class LightElTag(AppElTagTaskDao tagTaskDao, ConnectOprServe connectOprServe)
+public class LightElTag(AppElTagTaskDao tagTaskDao, AtopOperation atopOperation, AppElTagBaseDao elTagBaseDao)
{
private readonly AppElTagTaskDao _tagTaskDao = tagTaskDao;
- private readonly ConnectOprServe _connectOprServe = connectOprServe;
+ private readonly AtopOperation _atopOperation = atopOperation;
+ private readonly AppElTagBaseDao _elTagBaseDao = elTagBaseDao;
///
/// 点亮电子标签
@@ -55,16 +57,20 @@ public class LightElTag(AppElTagTaskDao tagTaskDao, ConnectOprServe connectOprSe
return;
}
/* 点亮标签 */
- var resultException = _connectOprServe.ShowMsg(tagInfo.ControllerDisplayName, tagInfo.TagId, tagTask.NeedNum);
+ var resultException = _atopOperation.ShowMsg(tagInfo.ControllerDisplayName, tagInfo.TagId, tagTask.NeedNum);
if(resultException == default )
{
+ ConsoleLog.Success($"点亮电子标签成功,点位:{tagTask.Location},数据:{tagTask.NeedNum},载具号:{tagTask.VehicleNo},标签号:{tagInfo.TagId}");
_tagTaskDao.Update(new AppElTagTask
{
TaskId = tagTask.TaskId,
TaskStatus = (int)ElTagTaskStatusEnum.Lighting,
LightTime = DateTime.Now,
- });
+ }); // 更新任务状态
+ _elTagBaseDao.Update(new AppElTagBase { Location = tagTask.Location, TaskId = tagTask.TaskId, LastLightTime = DateTime.Now }); // 更新点位状态,绑定任务
+ return;
}
+ ConsoleLog.Warning($"【警告】点亮电子标签失败,点位:{tagTask.Location},数据:{tagTask.NeedNum},载具号:{tagTask.VehicleNo},标签号:{tagInfo.TagId},异常信息:{resultException.Message}");
}
}
diff --git a/WcsMain/Business/CirculationTask/Stacker/CheckAccount.cs b/WcsMain/Business/CirculationTask/Stacker/CheckAccount.cs
index 9916cf9..36472b2 100644
--- a/WcsMain/Business/CirculationTask/Stacker/CheckAccount.cs
+++ b/WcsMain/Business/CirculationTask/Stacker/CheckAccount.cs
@@ -4,9 +4,9 @@ using WcsMain.Common;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.Enum;
+using WcsMain.EquipOperation.Entity;
+using WcsMain.EquipOperation.Stacker;
using WcsMain.ExtendMethod;
-using WcsMain.PlcOperation.Entity;
-using WcsMain.PlcOperation.Stacker;
namespace WcsMain.Business.CirculationTask.Stacker;
diff --git a/WcsMain/Business/CirculationTask/Stacker/ExeTaskDoubleFork.cs b/WcsMain/Business/CirculationTask/Stacker/ExeTaskDoubleFork.cs
index a27c296..d24c3c4 100644
--- a/WcsMain/Business/CirculationTask/Stacker/ExeTaskDoubleFork.cs
+++ b/WcsMain/Business/CirculationTask/Stacker/ExeTaskDoubleFork.cs
@@ -7,10 +7,10 @@ using WcsMain.DataBase.TableEntity;
using WcsMain.DataService;
using WcsMain.Enum.Stacker;
using WcsMain.Enum.TaskEnum;
+using WcsMain.EquipOperation.Convey;
+using WcsMain.EquipOperation.Entity.Stacker;
+using WcsMain.EquipOperation.Stacker;
using WcsMain.ExtendMethod;
-using WcsMain.PlcOperation;
-using WcsMain.PlcOperation.Entity.Stacker;
-using WcsMain.PlcOperation.Stacker;
using static Dm.net.buffer.ByteArrayBuffer;
namespace WcsMain.Business.CirculationTask.Stacker;
diff --git a/WcsMain/Business/CirculationTask/Stacker/ExecuteWcsTask.cs b/WcsMain/Business/CirculationTask/Stacker/ExecuteWcsTask.cs
index 16398f9..801a5e0 100644
--- a/WcsMain/Business/CirculationTask/Stacker/ExecuteWcsTask.cs
+++ b/WcsMain/Business/CirculationTask/Stacker/ExecuteWcsTask.cs
@@ -5,9 +5,9 @@ using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.Enum.Stacker;
using WcsMain.Enum.TaskEnum;
+using WcsMain.EquipOperation.Entity.Stacker;
+using WcsMain.EquipOperation.Stacker;
using WcsMain.ExtendMethod;
-using WcsMain.PlcOperation.Entity.Stacker;
-using WcsMain.PlcOperation.Stacker;
namespace WcsMain.Business.CirculationTask.Stacker;
diff --git a/WcsMain/Business/CirculationTask/StackerConvey/CheckAccount.cs b/WcsMain/Business/CirculationTask/StackerConvey/CheckAccount.cs
index d961ba9..f02300d 100644
--- a/WcsMain/Business/CirculationTask/StackerConvey/CheckAccount.cs
+++ b/WcsMain/Business/CirculationTask/StackerConvey/CheckAccount.cs
@@ -3,8 +3,8 @@ using WcsMain.Business.CommonAction;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.Enum;
-using WcsMain.PlcOperation.Entity;
-using WcsMain.PlcOperation.StackerConvey;
+using WcsMain.EquipOperation.Entity;
+using WcsMain.EquipOperation.StackerConvey;
namespace WcsMain.Business.CirculationTask.StackerConvey;
diff --git a/WcsMain/DataBase/Dao/AppElTagBaseDao.cs b/WcsMain/DataBase/Dao/AppElTagBaseDao.cs
index 2eddd74..2d000b3 100644
--- a/WcsMain/DataBase/Dao/AppElTagBaseDao.cs
+++ b/WcsMain/DataBase/Dao/AppElTagBaseDao.cs
@@ -25,6 +25,7 @@ public class AppElTagBaseDao
.WhereIF(queryData.ControllerDisplayName != default, w => w.ControllerDisplayName == queryData.ControllerDisplayName)
.WhereIF(queryData.Area != default, w => w.Area == queryData.Area)
.WhereIF(queryData.LedStatus != default, w => w.LedStatus == queryData.LedStatus)
+ .WhereIF(queryData.TaskId != default, w => w.TaskId == queryData.TaskId)
.WhereIF(queryData.Remark != default, w => w.Remark == queryData.Remark);
return sqlFuc.ToList();
}
@@ -40,4 +41,54 @@ public class AppElTagBaseDao
///
///
public List? Query() => Query(new AppElTagBase());
+
+ ///
+ /// 根据主键更新,不更新null值
+ ///
+ ///
+ ///
+ public int Update(AppElTagBase appElTag)
+ {
+ try
+ {
+ var sqlFuc = CommonTool.DbServe.Updateable(appElTag).IgnoreNullColumns();
+ return sqlFuc.ExecuteCommand();
+ }
+ catch(Exception ex) { _ = ex; return 0; }
+ }
+
+
+
+
+
+
+
+
+
+ /*******************************业务************************************/
+
+
+
+
+ ///
+ /// 重置绑定的任务信息
+ ///
+ ///
+ ///
+ public int ResetLocation(string location)
+ {
+ try
+ {
+ var sqlFuc = CommonTool.DbServe.Updateable()
+ .SetColumns(s => s.LastLightTime == null)
+ .SetColumns(s => s.TaskId == null)
+ .Where(w => w.Location == location);
+ return sqlFuc.ExecuteCommand();
+ }
+ catch (Exception ex) { _ = ex; return 0; }
+ }
+
+
+
+
}
diff --git a/WcsMain/DataBase/Dao/AppElTagTaskDao.cs b/WcsMain/DataBase/Dao/AppElTagTaskDao.cs
index 7b9db1d..a3e9c13 100644
--- a/WcsMain/DataBase/Dao/AppElTagTaskDao.cs
+++ b/WcsMain/DataBase/Dao/AppElTagTaskDao.cs
@@ -1,4 +1,5 @@
-using WcsMain.Common;
+using WcsMain.ApiServe.Controllers.Dto.WcsDto.ElTag;
+using WcsMain.Common;
using WcsMain.DataBase.TableEntity;
using WcsMain.WcsAttribute.AutoFacAttribute;
@@ -27,6 +28,7 @@ public class AppElTagTaskDao
.WhereIF(queryData.TaskStatus != default, w => w.TaskStatus == queryData.TaskStatus)
.WhereIF(queryData.NeedNum != default, w => w.NeedNum == queryData.NeedNum)
.WhereIF(queryData.PickNum != default, w => w.PickNum == queryData.PickNum)
+ .WhereIF(queryData.CreatePerson != default, w => w.CreatePerson == queryData.CreatePerson)
.WhereIF(queryData.Remark != default, w => w.Remark == queryData.Remark);
return sqlFuc.ToList();
}
@@ -63,4 +65,52 @@ public class AppElTagTaskDao
}
}
+
+ /****************************************业务************************************/
+
+
+ ///
+ /// 分页查询 电子标签任务表
+ ///
+ ///
+ ///
+ public (List? elTagTasks, int totalRows) QueryWithPage(QueryTaskRequest request)
+ {
+ try
+ {
+ int totalRows = 0;
+ var sqlFuc = CommonTool.DbServe.Queryable()
+ .WhereIF(!string.IsNullOrEmpty(request.SearchStr),
+ w => w.TaskId!.Contains(request.SearchStr!)
+ || w.Location!.Contains(request.SearchStr!)
+ || w.VehicleNo!.Contains(request.SearchStr!)
+ || w.GoodsId!.Contains(request.SearchStr!)
+ || w.Remark!.Contains(request.SearchStr!));
+ if(request.TaskStatus != default)
+ {
+ List taskStatus = [];
+ request.TaskStatus.ForEach(item => taskStatus.Add(item));
+ sqlFuc.Where(w => taskStatus.Contains(w.TaskStatus));
+ }
+ if (request.TimeRange is { Count: 2 }) // 时间范围
+ {
+ sqlFuc.Where(w => w.CreateTime > request.TimeRange[0] && w.CreateTime < request.TimeRange[1]);
+ }
+ sqlFuc.OrderByDescending(o => new { o.CreateTime });
+ var queryResult = sqlFuc.ToPageList(request.Page!.PageIndex, request.Page!.PageSize, ref totalRows);
+ return (queryResult, totalRows);
+ }
+ catch (Exception ex)
+ {
+ _ = ex;
+ return default;
+ }
+ }
+
+
+
+
+
+
+
}
diff --git a/WcsMain/DataBase/TableEntity/AppElTagBase.cs b/WcsMain/DataBase/TableEntity/AppElTagBase.cs
index 7ec7f11..7621545 100644
--- a/WcsMain/DataBase/TableEntity/AppElTagBase.cs
+++ b/WcsMain/DataBase/TableEntity/AppElTagBase.cs
@@ -48,6 +48,18 @@ public class AppElTagBase
[SugarColumn(ColumnName = "led_status")]
public int? LedStatus { get; set; }
+ ///
+ /// 上次点亮的时间
+ ///
+ [SugarColumn(ColumnName = "last_light_time")]
+ public DateTime? LastLightTime { get; set; }
+
+ ///
+ /// 当前点亮的任务号
+ ///
+ [SugarColumn(ColumnName = "task_id")]
+ public string? TaskId { get; set; }
+
///
/// 备注
///
diff --git a/WcsMain/DataBase/TableEntity/AppElTagTask.cs b/WcsMain/DataBase/TableEntity/AppElTagTask.cs
index 106e021..8ad256e 100644
--- a/WcsMain/DataBase/TableEntity/AppElTagTask.cs
+++ b/WcsMain/DataBase/TableEntity/AppElTagTask.cs
@@ -1,4 +1,5 @@
using SqlSugar;
+using System.Text.Json.Serialization;
namespace WcsMain.DataBase.TableEntity;
@@ -9,78 +10,99 @@ public class AppElTagTask
/// 任务号
///
[SugarColumn(ColumnName = "task_id", IsPrimaryKey = true)]
+ [JsonPropertyName("taskId")]
public string? TaskId { get; set; }
///
/// 点位
///
[SugarColumn(ColumnName = "location")]
+ [JsonPropertyName("location")]
public string? Location { get; set; }
///
/// 订单号
///
[SugarColumn(ColumnName = "order_id")]
+ [JsonPropertyName("orderId")]
public string? OrderId { get; set; }
///
/// 载具号
///
[SugarColumn(ColumnName = "vehicle_no")]
+ [JsonPropertyName("vehicleNo")]
public string? VehicleNo { get; set; }
///
/// 物料编号
///
[SugarColumn(ColumnName = "goods_id")]
+ [JsonPropertyName("goodsId")]
public string? GoodsId { get; set; }
///
/// 物料名称
///
[SugarColumn(ColumnName = "goods_name")]
+ [JsonPropertyName("goodsName")]
public string? GoodsName { get; set; }
///
/// 任务状态
///
[SugarColumn(ColumnName = "task_status")]
+ [JsonPropertyName("taskStatus")]
public int? TaskStatus { get; set; }
///
/// 需求数量
///
[SugarColumn(ColumnName = "need_num")]
+ [JsonPropertyName("needNum")]
public int? NeedNum { get; set; }
///
/// 拣选数量
///
[SugarColumn(ColumnName = "pick_num")]
+ [JsonPropertyName("pickNum")]
public int? PickNum { get; set; }
+
+ ///
+ /// 创建人
+ ///
+ [SugarColumn(ColumnName = "create_person")]
+ [JsonPropertyName("createPerson")]
+ public string? CreatePerson { get; set; }
+
///
/// 任务创建时间
///
[SugarColumn(ColumnName = "create_time")]
+ [JsonPropertyName("createTime")]
public DateTime? CreateTime { get; set; }
///
/// 点亮时间
///
[SugarColumn(ColumnName = "light_time")]
+ [JsonPropertyName("lightTime")]
public DateTime? LightTime { get; set; }
///
/// 确认时间
///
[SugarColumn(ColumnName = "confirm_time")]
+ [JsonPropertyName("confirmTime")]
public DateTime? ConfirmTime { get; set;}
///
/// 备注
///
[SugarColumn(ColumnName = "remark")]
+ [JsonPropertyName("remark")]
public string? Remark { get; set; }
diff --git a/WcsMain/ElTag/Atop/AtopEnum/AtopSubCommandEnum.cs b/WcsMain/ElTag/Atop/AtopEnum/AtopSubCommandEnum.cs
new file mode 100644
index 0000000..07ffea0
--- /dev/null
+++ b/WcsMain/ElTag/Atop/AtopEnum/AtopSubCommandEnum.cs
@@ -0,0 +1,11 @@
+namespace WcsMain.ElTag.Atop.AtopEnum;
+
+public enum AtopSubCommandEnum
+{
+ Confirm = 6, // 确认
+ StockOut = 7, // 缺货
+ TimeOut = 10, // 超时
+ ErrInstruct = 12, // 指令非法
+ Stuck = 13, // 卡键 ---- 按键按下未弹起
+ Others = 100, // 其他,灯不亮
+}
diff --git a/WcsMain/ElTag/Atop/BaseOprDataHandler.cs b/WcsMain/ElTag/Atop/BaseOprDataHandler.cs
index 2dfc80c..fccc7ee 100644
--- a/WcsMain/ElTag/Atop/BaseOprDataHandler.cs
+++ b/WcsMain/ElTag/Atop/BaseOprDataHandler.cs
@@ -1,8 +1,13 @@
-using WcsMain.Common;
-using WcsMain.Tcp.Client;
-using WcsMain.Tcp.Entity;
+using System.Text.RegularExpressions;
+using WcsMain.Common;
+using WcsMain.DataBase.Dao;
+using WcsMain.DataBase.TableEntity;
+using WcsMain.ElTag.Atop.AtopEnum;
+using WcsMain.ElTag.Atop.Entity;
+using WcsMain.Enum.TaskEnum;
+using WcsMain.EquipOperation.ElTag;
+using WcsMain.ExtendMethod;
using WcsMain.WcsAttribute.AutoFacAttribute;
-using static SocketTool.SocketClient;
namespace WcsMain.ElTag.Atop;
@@ -10,9 +15,103 @@ namespace WcsMain.ElTag.Atop;
/// 电子标签收到数据的数据处理类
///
[Component]
-public class BaseOprDataHandler
+public class BaseOprDataHandler(AppElTagBaseDao tagBaseDao, AppElTagTaskDao tagTaskDao, AtopOperation atopOperation)
{
+ private readonly AppElTagBaseDao _tagBaseDao = tagBaseDao;
+ private readonly AppElTagTaskDao _tagTaskDao = tagTaskDao;
+ private readonly AtopOperation _atopOperation = atopOperation;
+
+ ///
+ /// 收到数据时的处理方法
+ ///
+ ///
+ public void GetMsg(TagReturnInfo tcpServe)
+ {
+ Task.Factory.StartNew(() =>
+ {
+ switch (tcpServe.SubCommand)
+ {
+ case (int)AtopSubCommandEnum.Confirm: // 确认
+ Confirm(tcpServe);
+ break;
+ case (int)AtopSubCommandEnum.StockOut: // 缺货
+ goto case (int)AtopSubCommandEnum.Confirm;
+ case (int)AtopSubCommandEnum.TimeOut: // 超时
+ ConsoleLog.Exception($"【异常】电子标签反馈超时,控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
+ break;
+ case (int)AtopSubCommandEnum.ErrInstruct: // 指令非法
+ ConsoleLog.Warning($"【警告】电子标签反馈指令非法,控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
+ break;
+ case (int)AtopSubCommandEnum.Stuck: // 卡键
+ ConsoleLog.Warning($"【警告】电子标签反馈标签卡键,控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
+ break;
+ }
+ });
+
+
+
+ if(tcpServe.SubCommand==(int)AtopSubCommandEnum.Confirm || tcpServe.SubCommand==(int)AtopSubCommandEnum.StockOut)
+ {
+ Task.Factory.StartNew(() => Confirm(tcpServe)); // 当确定拣选或者缺货时
+ return;
+ }
+
+ }
+
+
+
+ ///
+ /// 按下确认键
+ ///
+ ///
+ public void Confirm(TagReturnInfo tcpServe)
+ {
+ /* 找出这个标签最新点亮的那条记录 */
+ List? eltags = _tagBaseDao.Query(new AppElTagBase { ControllerDisplayName = tcpServe.ControllerDisplayName, TagId = tcpServe.TagId });
+ if(eltags == default)
+ {
+ ConsoleLog.Exception($"【异常】电子标签确认查询数据库标签信息失败,与数据库服务器连连接中断,控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
+ _atopOperation.ShowMsg(tcpServe.ControllerDisplayName, tcpServe.TagId, tcpServe.Data); // 重新点亮标签
+ return;
+ }
+ if(eltags.Count < 1)
+ {
+ ConsoleLog.Warning($"【异常】电子标签确认按钮按下,该标签不在基础资料表,控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
+ return;
+ }
+ /* 取最新一条记录 */
+ eltags = [.. eltags.OrderByDescending(el => el.LastLightTime)];
+ var eltag = eltags[0];
+ string? taskId = eltag.TaskId; // 获取任务号
+ if(string.IsNullOrEmpty(taskId) )
+ {
+ ConsoleLog.Warning($"【异常】电子标签确认按钮按下,该标签没有绑定的显示任务,控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
+ return;
+ }
+ /* 获取该任务号对应的任务 */
+ List? tagTasks = _tagTaskDao.Query(new AppElTagTask { TaskId = taskId });
+ if(tagTasks == default)
+ {
+ ConsoleLog.Exception($"【异常】电子标签确认查询数据库任务失败,与数据库服务器连连接中断,控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
+ _atopOperation.ShowMsg(tcpServe.ControllerDisplayName, tcpServe.TagId, tcpServe.Data); // 重新点亮标签
+ return;
+ }
+ if (tagTasks.Count < 1)
+ {
+ ConsoleLog.Warning($"【异常】电子标签确认按钮按下,该标签对应的任务:{taskId} 不存在,控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
+ return;
+ }
+ var tagTask = tagTasks[0]; // 获取到的任务
+ int pickNum = Regex.Replace(tcpServe.Data!, "\\D", "").IsNumber() ? Convert.ToInt32(tcpServe.Data) : -1;
+ /* 更新任务状态为确认 */
+ _tagTaskDao.Update(new AppElTagTask() { TaskId = tagTask.TaskId, ConfirmTime = DateTime.Now, TaskStatus = (int)ElTagTaskStatusEnum.Confirm, PickNum = pickNum, Remark = "标签确认" });
+ /* 更新绑定的库位信息为空 */
+ _tagBaseDao.ResetLocation(eltag.Location!);
+ ConsoleLog.Success($"电子标签确认按钮按下,标签任务号:{tagTask.TaskId} 已经确认,箱号:{tagTask.VehicleNo},拣选数量:{tagTask.NeedNum}({pickNum}) 控制器:{tcpServe.ControllerDisplayName},标签号:{tcpServe.TagId},数据:{tcpServe.Data}");
+ /* 发送WMS电子标签任务完成 */
+ // [TODO]
+ }
}
diff --git a/WcsMain/ElTag/Atop/ConnectOprServe.cs b/WcsMain/ElTag/Atop/ConnectOprServe.cs
index fd51f75..d6847a8 100644
--- a/WcsMain/ElTag/Atop/ConnectOprServe.cs
+++ b/WcsMain/ElTag/Atop/ConnectOprServe.cs
@@ -8,6 +8,7 @@ using WcsMain.ElTag.Atop.Entity;
using WcsMain.Enum.General;
using WcsMain.Enum.TaskEnum;
using WcsMain.Enum.Tcp;
+using WcsMain.EquipOperation.ElTag;
using WcsMain.Tcp.Entity;
using WcsMain.WcsAttribute.AutoFacAttribute;
@@ -18,10 +19,12 @@ namespace WcsMain.ElTag.Atop;
///
///
[Component]
-public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHandler)
+public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHandler, AtopOperation atopOperation, AppElTagTaskDao tagTaskDao)
{
private readonly AppTcpDao _tcpDao = tcpDao;
private readonly BaseOprDataHandler _baseOprDataHandler = baseOprDataHandler;
+ private readonly AtopOperation _atopOperation = atopOperation;
+ private readonly AppElTagTaskDao _tagTaskDao = tagTaskDao;
///
/// 设置基本参数
@@ -64,57 +67,42 @@ public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHan
public void ConnectSuccess(TcpServeConnectionData tcpServe)
{
ConsoleLog.Success($"电子标签:{tcpServe.TcpServe!.TcpIp} 连接成功");
- if (CommonData.AppElTags == default || CommonData.AppElTags.Count < 1) return;
- var tagInfos = CommonData.AppElTags.FindAll(f => f.ControllerDisplayName == tcpServe.DisplayName);
- if (tagInfos == default) return;
-
- foreach (var tagInfo in tagInfos)
+ _atopOperation.BlinkingAll(tcpServe);
+ /* 点亮数据库中正在点亮的标签 */
+ List? tasks = _tagTaskDao.Query(new AppElTagTask { TaskStatus = (int)ElTagTaskStatusEnum.Lighting });
+ if (tasks == default)
{
-
- //CommonTool.OprTcpClient.Send(TagSendInfo.SetTagModel(Convert.ToByte(tagInfo.TagId), TagMode.Picking), tagInfo.ControllerDisplayName!);
- //CommonTool.OprTcpClient.Send(TagSendInfo.(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!);
+ ConsoleLog.Exception("【异常】查询 电子标签 任务失败,数据库连接异常");
+ Thread.Sleep(5000);
+ return;
}
- for (int i = 0; i < 5; i++)
- {
- foreach (var tagInfo in tagInfos)
- {
- CommonTool.OprTcpClient.Send(TagSendInfo.ShowTagId(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!);
- //CommonTool.OprTcpClient.Send(TagSendInfo.LedColor(Convert.ToByte(tagInfo.TagId), LedColor.Green), tagInfo.ControllerDisplayName!);
- //ShowMsg(tagInfo.ControllerDisplayName, tagInfo.TagId, 999, ledStatus: LedStatus.LEDOn);
- }
- Thread.Sleep(200);
- foreach (var tagInfo in tagInfos)
- {
- CommonTool.OprTcpClient.Send(TagSendInfo.TurnOffTag(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!);
- }
- Thread.Sleep(200);
- }
-
+ tasks.ForEach(LightTask);
}
///
- /// 向标签发送一个显示值
+ /// 执行点亮标签任务
///
- ///
- ///
- ///
- ///
- ///
- ///
- public Exception? ShowMsg(string? controllerDisplayName, int? tagId, int? value, LedColor ledColor = LedColor.Green, LedStatus ledStatus = LedStatus._0_5secblinking)
+ ///
+ public void LightTask(AppElTagTask tagTask)
{
- if(controllerDisplayName == default || tagId == default || value == default)
+ if (CommonData.AppElTags == default || CommonData.AppElTags.Count < 1) return;
+ var tagInfo = CommonData.AppElTags.Find(f => f.Location == tagTask.Location);
+ if (tagInfo == default) return;
+ /* 点亮标签 */
+ var resultException = _atopOperation.ShowMsg(tagInfo.ControllerDisplayName, tagInfo.TagId, tagTask.NeedNum);
+ if (resultException == default)
{
- return new Exception("必须的值为空,无法发送电子标签");
+ ConsoleLog.Success($"启动重复点亮电子标签成功,点位:{tagTask.Location},数据:{tagTask.NeedNum},载具号:{tagTask.VehicleNo},标签号:{tagInfo.TagId}");
+ _tagTaskDao.Update(new AppElTagTask
+ {
+ TaskId = tagTask.TaskId,
+ TaskStatus = (int)ElTagTaskStatusEnum.Lighting,
+ LightTime = DateTime.Now,
+ Remark = "重启点亮"
+ }); // 更新任务状态
+ return;
}
-
- if (value > 999) value = 999;
- byte[] elTagData = TagSendInfo.ShowValue(Convert.ToByte(tagId), value.ToString()!);
- var sendResult = CommonTool.OprTcpClient.Send(elTagData, controllerDisplayName); // 显示字符
- CommonTool.OprTcpClient.Send(TagSendInfo.LedColor(Convert.ToByte(tagId), ledColor), controllerDisplayName); // 显示颜色
- CommonTool.OprTcpClient.Send(TagSendInfo.LedStatus(Convert.ToByte(tagId), ledStatus), controllerDisplayName); // 显示闪烁频率
- if (sendResult.Success) return default;
- return sendResult.Exception;
+ ConsoleLog.Warning($"【警告】启动重复点亮电子标签失败,点位:{tagTask.Location},数据:{tagTask.NeedNum},载具号:{tagTask.VehicleNo},标签号:{tagInfo.TagId},异常信息:{resultException.Message}");
}
@@ -151,8 +139,52 @@ public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHan
}
returnInfo.Data = string.Join("", returnData);
}
+ /*-------------------------------------------------------------------*/
+ if (returnInfo.SubCommand == 9)
+ {
+ string p_str = "";
+ byte[] ccb_data = new byte[250];
+ for (int k = 8; k < datas.Length && k < 258; k++)
+ {
+ ccb_data[k - 8] = datas[k];
+ }
+ int maxid = DiagResult(ccb_data, ref p_str);
+ returnInfo.Data = p_str;
+ if (string.IsNullOrEmpty(returnInfo.Data.Trim()))
+ {
+ returnInfo.Data = string.Empty;
+ }
+ }
ConsoleLog.Info($"电子标签获取返回值:{returnInfo}");
+ _baseOprDataHandler.GetMsg(returnInfo);
+ }
+
+ private int DiagResult(byte[] ccb_data, ref string tagstr)
+ {
+ int k, tmp, maxid;
+ tagstr = "";
+ tmp = 0;
+ maxid = 0;
+ for (k = 1; k <= 250; k++)
+ {
+ if ((k - 1) % 8 == 0)
+ {
+ tmp = ccb_data[3 + (k - 1) / 8];
+ }
+ if (tmp % 2 != 1)
+ {
+ maxid = k;
+ tagstr += "1";
+ }
+ else
+ {
+ tagstr += "0";
+ }
+ tmp /= 2;
+ }
+ tagstr = tagstr[..maxid];
+ return maxid;
}
diff --git a/WcsMain/ElTag/Atop/Entity/TagReturnInfo.cs b/WcsMain/ElTag/Atop/Entity/TagReturnInfo.cs
index 8645363..03a42c8 100644
--- a/WcsMain/ElTag/Atop/Entity/TagReturnInfo.cs
+++ b/WcsMain/ElTag/Atop/Entity/TagReturnInfo.cs
@@ -59,6 +59,6 @@ public class TagReturnInfo
public override string ToString()
{
- return $"控制器别称:{ControllerDisplayName},标签Id:{TagId},提交方式:{SubCommand},提交数据:{Data}";
+ return $"控制器别称:{ControllerDisplayName},标签Id:{TagId},消息端口:{Port},提交方式:{SubCommand},按钮类型:{KeyType},提交数据:{Data}";
}
}
diff --git a/WcsMain/ElTag/Atop/Entity/TagSendInfo.cs b/WcsMain/ElTag/Atop/Entity/TagSendInfo.cs
index 585b595..433f674 100644
--- a/WcsMain/ElTag/Atop/Entity/TagSendInfo.cs
+++ b/WcsMain/ElTag/Atop/Entity/TagSendInfo.cs
@@ -134,16 +134,24 @@ public class TagSendInfo
///
///
///
- public static byte[] ShowValue(byte tagId, string? value)
+ public static byte[] ShowValue(byte tagId, int? value)
{
- if(string.IsNullOrEmpty(value)) value = string.Empty;
- if(value.Length < 6)
+ string showStr;
+ if (value == default || value > 999)
{
- value = value.PadLeft(6, '0');
+ showStr = "MAX";
}
else
{
- value = value.Substring(value.Length - 6, 6);
+ showStr = value!.ToString()!;
+ }
+ if(showStr!.Length < 6)
+ {
+ showStr = showStr.PadLeft(6, '0');
+ }
+ else
+ {
+ showStr = showStr.Substring(showStr.Length - 6, 6);
}
byte[] data = new byte[15];
data[0] = 0x0f;
@@ -152,9 +160,49 @@ public class TagSendInfo
data[6] = 0x00;
data[7] = tagId;
- for (int i = 0; i < value.Length; i++)
+ for (int i = 0; i < showStr.Length; i++)
{
- data[8 + i] = Convert.ToByte(value[i]);
+ data[8 + i] = Convert.ToByte(showStr[i]);
+ }
+ data[14] = 0x00;
+ return data;
+ }
+
+ ///
+ /// 展示字符串
+ ///
+ ///
+ ///
+ ///
+ public static byte[] ShowValue(byte tagId, string? value)
+ {
+ string showStr;
+ if (string.IsNullOrEmpty(value))
+ {
+ showStr = "ERR";
+ }
+ else
+ {
+ showStr = value!.ToString()!;
+ }
+ if (showStr!.Length < 6)
+ {
+ showStr = showStr.PadLeft(6, '0');
+ }
+ else
+ {
+ showStr = showStr.Substring(showStr.Length - 6, 6);
+ }
+ byte[] data = new byte[15];
+ data[0] = 0x0f;
+ data[1] = 0;
+ data[2] = 0x60;
+
+ data[6] = 0x00;
+ data[7] = tagId;
+ for (int i = 0; i < showStr.Length; i++)
+ {
+ data[8 + i] = Convert.ToByte(showStr[i]);
}
data[14] = 0x00;
return data;
diff --git a/WcsMain/PlcOperation/ConnectPLCs.cs b/WcsMain/EquipOperation/ConnectPLCs.cs
similarity index 83%
rename from WcsMain/PlcOperation/ConnectPLCs.cs
rename to WcsMain/EquipOperation/ConnectPLCs.cs
index 300879a..82a586c 100644
--- a/WcsMain/PlcOperation/ConnectPLCs.cs
+++ b/WcsMain/EquipOperation/ConnectPLCs.cs
@@ -4,7 +4,7 @@ using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.WcsAttribute.AutoFacAttribute;
-namespace WcsMain.PlcOperation;
+namespace WcsMain.EquipOperation;
///
/// 连接PLC
@@ -23,11 +23,17 @@ public class ConnectPLCs(AppPLCDao pLCDao, AppDBDao dBDao)
{
/* 查询所有PLC */
List? plcs = _plcDao.GetDataWithStatus(1);
- if (plcs == default || plcs.Count == 0)
+ if (plcs == default)
{
ConsoleLog.Tip("$[异常]PLC 数据查找失败,请检查网络是否正常或者是否录入PLC数据");
return true;
}
+ if (plcs.Count == 0)
+ {
+ ConsoleLog.Warning("【警告】您没有录入或者启用任何 PLC");
+ CommonData.IsConnectPlc = false;
+ return false;
+ }
List? dbs = _dbDao.Select();
CommonTool.Siemens = new SiemensS7();
CommonTool.Siemens.SetPlcs(plcs).SetPlcDB(dbs);
diff --git a/WcsMain/PlcOperation/ConveyOperation.cs b/WcsMain/EquipOperation/Convey/ConveyOperation.cs
similarity index 99%
rename from WcsMain/PlcOperation/ConveyOperation.cs
rename to WcsMain/EquipOperation/Convey/ConveyOperation.cs
index 4f40281..3d92b9a 100644
--- a/WcsMain/PlcOperation/ConveyOperation.cs
+++ b/WcsMain/EquipOperation/Convey/ConveyOperation.cs
@@ -1,10 +1,10 @@
using System.Text;
using System.Text.RegularExpressions;
using WcsMain.Common;
-using WcsMain.PlcOperation.Entity;
+using WcsMain.EquipOperation.Entity;
using WcsMain.WcsAttribute.AutoFacAttribute;
-namespace WcsMain.PlcOperation;
+namespace WcsMain.EquipOperation.Convey;
///
/// 输送机操作 ---- 箱式线,不包含于立库库前设备,库前请参考堆垛机操作
@@ -90,9 +90,9 @@ public class ConveyOperation
return writeResult.Message ?? "写入失败,未知原因";
}
-
-
+
+
///
/// 获取箱式线出库站台状态
///
diff --git a/WcsMain/EquipOperation/ElTag/AtopOperation.cs b/WcsMain/EquipOperation/ElTag/AtopOperation.cs
new file mode 100644
index 0000000..bd2de8b
--- /dev/null
+++ b/WcsMain/EquipOperation/ElTag/AtopOperation.cs
@@ -0,0 +1,88 @@
+using WcsMain.Common;
+using WcsMain.ElTag.Atop.AtopEnum;
+using WcsMain.ElTag.Atop.Entity;
+using WcsMain.Tcp.Entity;
+using WcsMain.WcsAttribute.AutoFacAttribute;
+
+namespace WcsMain.EquipOperation.ElTag;
+
+[Component]
+public class AtopOperation
+{
+
+ ///
+ /// 点亮这个连接中的所有电子标签,并闪烁
+ ///
+ ///
+ public void BlinkingAll(TcpServeConnectionData tcpServe)
+ {
+ if (CommonData.AppElTags == default || CommonData.AppElTags.Count < 1) return;
+ var tagInfos = CommonData.AppElTags.FindAll(f => f.ControllerDisplayName == tcpServe.DisplayName);
+ if (tagInfos == default) return;
+ /* 使标签闪烁一段时间,告知使用者电子标签已经连上 */
+ Thread.Sleep(5000);
+ foreach (var tagInfo in tagInfos)
+ {
+ int col = new Random().Next(0, 6);
+ CommonTool.OprTcpClient.Send(TagSendInfo.ShowTagId(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!);
+ CommonTool.OprTcpClient.Send(TagSendInfo.LedColor(Convert.ToByte(tagInfo.TagId), (LedColor)col), tagInfo.ControllerDisplayName!); // 显示颜色
+ CommonTool.OprTcpClient.Send(TagSendInfo.LedStatus(Convert.ToByte(tagInfo.TagId), LedStatus._0_25secblinking), tagInfo.ControllerDisplayName!); // 显示闪烁频率
+ }
+ Thread.Sleep(5000);
+ foreach (var tagInfo in tagInfos)
+ {
+ CommonTool.OprTcpClient.Send(TagSendInfo.TurnOffTag(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!);
+ }
+ }
+
+
+ ///
+ /// 向标签发送一个显示值
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Exception? ShowMsg(string? controllerDisplayName, int? tagId, int? value, LedColor ledColor = LedColor.Green, LedStatus ledStatus = LedStatus._0_5secblinking)
+ {
+ if (controllerDisplayName == default || tagId == default || value == default)
+ {
+ return new Exception("必须的值为空,无法发送电子标签");
+ }
+ byte[] elTagData = TagSendInfo.ShowValue(Convert.ToByte(tagId), value);
+ var sendResult = CommonTool.OprTcpClient.Send(elTagData, controllerDisplayName); // 显示字符
+ CommonTool.OprTcpClient.Send(TagSendInfo.LedColor(Convert.ToByte(tagId), ledColor), controllerDisplayName); // 显示颜色
+ CommonTool.OprTcpClient.Send(TagSendInfo.LedStatus(Convert.ToByte(tagId), ledStatus), controllerDisplayName); // 显示闪烁频率
+ if (sendResult.Success) return default;
+ return sendResult.Exception;
+ }
+
+
+ ///
+ /// 向标签发送一个显示值
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Exception? ShowMsg(string? controllerDisplayName, int? tagId, string? value, LedColor ledColor = LedColor.Green, LedStatus ledStatus = LedStatus._0_5secblinking)
+ {
+ if (controllerDisplayName == default || tagId == default || value == default)
+ {
+ return new Exception("必须的值为空,无法发送电子标签");
+ }
+ byte[] elTagData = TagSendInfo.ShowValue(Convert.ToByte(tagId), value);
+ var sendResult = CommonTool.OprTcpClient.Send(elTagData, controllerDisplayName); // 显示字符
+ CommonTool.OprTcpClient.Send(TagSendInfo.LedColor(Convert.ToByte(tagId), ledColor), controllerDisplayName); // 显示颜色
+ CommonTool.OprTcpClient.Send(TagSendInfo.LedStatus(Convert.ToByte(tagId), ledStatus), controllerDisplayName); // 显示闪烁频率
+ if (sendResult.Success) return default;
+ return sendResult.Exception;
+ }
+
+
+
+}
diff --git a/WcsMain/PlcOperation/Entity/ConveyPLCTask.cs b/WcsMain/EquipOperation/Entity/ConveyPLCTask.cs
similarity index 89%
rename from WcsMain/PlcOperation/Entity/ConveyPLCTask.cs
rename to WcsMain/EquipOperation/Entity/ConveyPLCTask.cs
index 19697fd..dae6174 100644
--- a/WcsMain/PlcOperation/Entity/ConveyPLCTask.cs
+++ b/WcsMain/EquipOperation/Entity/ConveyPLCTask.cs
@@ -1,4 +1,4 @@
-namespace WcsMain.PlcOperation.Entity;
+namespace WcsMain.EquipOperation.Entity;
///
/// 给输送机任务
diff --git a/WcsMain/PlcOperation/Entity/Stacker/StackerInfo.cs b/WcsMain/EquipOperation/Entity/Stacker/StackerInfo.cs
similarity index 97%
rename from WcsMain/PlcOperation/Entity/Stacker/StackerInfo.cs
rename to WcsMain/EquipOperation/Entity/Stacker/StackerInfo.cs
index d4e59a5..17e343c 100644
--- a/WcsMain/PlcOperation/Entity/Stacker/StackerInfo.cs
+++ b/WcsMain/EquipOperation/Entity/Stacker/StackerInfo.cs
@@ -1,6 +1,6 @@
using WcsMain.Enum.Stacker;
-namespace WcsMain.PlcOperation.Entity.Stacker;
+namespace WcsMain.EquipOperation.Entity.Stacker;
///
/// 堆垛机信息,读取的时候赋值
@@ -23,7 +23,7 @@ public class StackerInfo
///
public StackerStatusEnum StackerStatus { get; set; }
-
+
///
/// 当前巷道
diff --git a/WcsMain/PlcOperation/Entity/Stacker/StackerPlcTask.cs b/WcsMain/EquipOperation/Entity/Stacker/StackerPlcTask.cs
similarity index 98%
rename from WcsMain/PlcOperation/Entity/Stacker/StackerPlcTask.cs
rename to WcsMain/EquipOperation/Entity/Stacker/StackerPlcTask.cs
index ea05c98..8957b0c 100644
--- a/WcsMain/PlcOperation/Entity/Stacker/StackerPlcTask.cs
+++ b/WcsMain/EquipOperation/Entity/Stacker/StackerPlcTask.cs
@@ -1,7 +1,7 @@
using System.Collections;
using WcsMain.Enum.TaskEnum;
-namespace WcsMain.PlcOperation.Entity.Stacker;
+namespace WcsMain.EquipOperation.Entity.Stacker;
///
/// 写入PLC的任务 ---- 堆垛机
diff --git a/WcsMain/PlcOperation/Entity/StackerConvey/StackerConveyInfo.cs b/WcsMain/EquipOperation/Entity/StackerConvey/StackerConveyInfo.cs
similarity index 96%
rename from WcsMain/PlcOperation/Entity/StackerConvey/StackerConveyInfo.cs
rename to WcsMain/EquipOperation/Entity/StackerConvey/StackerConveyInfo.cs
index 2cc7a61..7b78e8a 100644
--- a/WcsMain/PlcOperation/Entity/StackerConvey/StackerConveyInfo.cs
+++ b/WcsMain/EquipOperation/Entity/StackerConvey/StackerConveyInfo.cs
@@ -1,6 +1,6 @@
using WcsMain.Enum.Plc;
-namespace WcsMain.PlcOperation.Entity.StackerConvey;
+namespace WcsMain.EquipOperation.Entity.StackerConvey;
///
/// 库前输送机反馈的状态信息
diff --git a/WcsMain/PlcOperation/Entity/StackerConvey/StackerConveyPlcTask.cs b/WcsMain/EquipOperation/Entity/StackerConvey/StackerConveyPlcTask.cs
similarity index 97%
rename from WcsMain/PlcOperation/Entity/StackerConvey/StackerConveyPlcTask.cs
rename to WcsMain/EquipOperation/Entity/StackerConvey/StackerConveyPlcTask.cs
index 1b87454..6e698d2 100644
--- a/WcsMain/PlcOperation/Entity/StackerConvey/StackerConveyPlcTask.cs
+++ b/WcsMain/EquipOperation/Entity/StackerConvey/StackerConveyPlcTask.cs
@@ -1,4 +1,4 @@
-namespace WcsMain.PlcOperation.Entity.StackerConvey;
+namespace WcsMain.EquipOperation.Entity.StackerConvey;
public class StackerConveyPlcTask
{
diff --git a/WcsMain/PlcOperation/Entity/StackerFeedbackStatus.cs b/WcsMain/EquipOperation/Entity/StackerFeedbackStatus.cs
similarity index 81%
rename from WcsMain/PlcOperation/Entity/StackerFeedbackStatus.cs
rename to WcsMain/EquipOperation/Entity/StackerFeedbackStatus.cs
index 33683e2..2588563 100644
--- a/WcsMain/PlcOperation/Entity/StackerFeedbackStatus.cs
+++ b/WcsMain/EquipOperation/Entity/StackerFeedbackStatus.cs
@@ -1,4 +1,4 @@
-namespace WcsMain.PlcOperation.Entity;
+namespace WcsMain.EquipOperation.Entity;
///
/// 堆垛机状态反馈实体
diff --git a/WcsMain/PlcOperation/Entity/TaskFeedBackEntity.cs b/WcsMain/EquipOperation/Entity/TaskFeedBackEntity.cs
similarity index 91%
rename from WcsMain/PlcOperation/Entity/TaskFeedBackEntity.cs
rename to WcsMain/EquipOperation/Entity/TaskFeedBackEntity.cs
index ae518f4..293284c 100644
--- a/WcsMain/PlcOperation/Entity/TaskFeedBackEntity.cs
+++ b/WcsMain/EquipOperation/Entity/TaskFeedBackEntity.cs
@@ -1,4 +1,4 @@
-namespace WcsMain.PlcOperation.Entity;
+namespace WcsMain.EquipOperation.Entity;
///
/// 过账数据实体
diff --git a/WcsMain/PlcOperation/Stacker/StackerOperation.cs b/WcsMain/EquipOperation/Stacker/StackerOperation.cs
similarity index 96%
rename from WcsMain/PlcOperation/Stacker/StackerOperation.cs
rename to WcsMain/EquipOperation/Stacker/StackerOperation.cs
index 98aadb0..9981427 100644
--- a/WcsMain/PlcOperation/Stacker/StackerOperation.cs
+++ b/WcsMain/EquipOperation/Stacker/StackerOperation.cs
@@ -1,11 +1,11 @@
using WcsMain.Common;
using WcsMain.DataBase.TableEntity;
using WcsMain.Enum.Stacker;
-using WcsMain.PlcOperation.Entity;
-using WcsMain.PlcOperation.Entity.Stacker;
+using WcsMain.EquipOperation.Entity;
+using WcsMain.EquipOperation.Entity.Stacker;
using WcsMain.WcsAttribute.AutoFacAttribute;
-namespace WcsMain.PlcOperation.Stacker;
+namespace WcsMain.EquipOperation.Stacker;
///
/// 堆垛机操作
@@ -13,7 +13,7 @@ namespace WcsMain.PlcOperation.Stacker;
[Component]
public class StackerOperation
{
-
+
/********************************** 总结方法 *******************************************/
@@ -31,15 +31,15 @@ public class StackerOperation
if (stackerId == default) return StackerUseStatusEnum.BusyOrErr;
/* 获取堆垛机状态 */
var (errMsg, stackerInfo) = GetStackerInfo((int)stackerId!);
- if(!string.IsNullOrEmpty(errMsg) || stackerInfo == default) return StackerUseStatusEnum.BusyOrErr;
+ if (!string.IsNullOrEmpty(errMsg) || stackerInfo == default) return StackerUseStatusEnum.BusyOrErr;
/* 堆垛机空闲条件 */
- var canUse = stackerInfo.PlcId == 0 && stackerInfo.ControlModel == StackerControlModeEnum.online
+ var canUse = stackerInfo.PlcId == 0 && stackerInfo.ControlModel == StackerControlModeEnum.online
&& stackerInfo.StackerStatus == StackerStatusEnum.free && stackerInfo.ErrCode == 0;
if (canUse) return StackerUseStatusEnum.Free;
/* 堆垛机等待任务条件(二次申请) */
var waitTask = stackerInfo.ControlModel == StackerControlModeEnum.online && stackerInfo.StackerStatus == StackerStatusEnum.applyTask
&& stackerInfo.ErrCode == 0;
- if(waitTask)
+ if (waitTask)
{
plcId1 = stackerInfo.PlcId;
spare1 = stackerInfo.Spare1;
@@ -203,7 +203,7 @@ public class StackerOperation
{
if (!CommonData.IsConnectPlc || CommonTool.Siemens == default) return "PLC尚未连接。"; // 未连接PLC
var dbAddressName = $"堆垛机写任务{task.StackerId}";
- if(forkId != 0) { dbAddressName += $"-{forkId}"; }
+ if (forkId != 0) { dbAddressName += $"-{forkId}"; }
var (writeResult, _) = CommonTool.Siemens.WritePlcWhithName(dbAddressName,
task.PlcId!,
task.TaskType!,
diff --git a/WcsMain/PlcOperation/StackerConvey/StackerConveyOperation.cs b/WcsMain/EquipOperation/StackerConvey/StackerConveyOperation.cs
similarity index 98%
rename from WcsMain/PlcOperation/StackerConvey/StackerConveyOperation.cs
rename to WcsMain/EquipOperation/StackerConvey/StackerConveyOperation.cs
index a7df500..7fbe251 100644
--- a/WcsMain/PlcOperation/StackerConvey/StackerConveyOperation.cs
+++ b/WcsMain/EquipOperation/StackerConvey/StackerConveyOperation.cs
@@ -1,15 +1,15 @@
using WcsMain.Common;
using WcsMain.Enum.Plc;
-using WcsMain.PlcOperation.Entity;
-using WcsMain.PlcOperation.Entity.StackerConvey;
+using WcsMain.EquipOperation.Entity;
+using WcsMain.EquipOperation.Entity.StackerConvey;
using WcsMain.WcsAttribute.AutoFacAttribute;
-namespace WcsMain.PlcOperation.StackerConvey;
+namespace WcsMain.EquipOperation.StackerConvey;
[Component]
public class StackerConveyOperation
{
-
+
///
/// 读取输送机状态
///
diff --git a/WcsMain/ExtendMethod/AppWcsTaskExtendMethod.cs b/WcsMain/ExtendMethod/AppWcsTaskExtendMethod.cs
index d8cf231..61822e6 100644
--- a/WcsMain/ExtendMethod/AppWcsTaskExtendMethod.cs
+++ b/WcsMain/ExtendMethod/AppWcsTaskExtendMethod.cs
@@ -1,6 +1,6 @@
using WcsMain.DataBase.TableEntity;
using WcsMain.Enum.TaskEnum;
-using WcsMain.PlcOperation.Entity.Stacker;
+using WcsMain.EquipOperation.Entity.Stacker;
namespace WcsMain.ExtendMethod;
diff --git a/WcsMain/StartAction/ServiceStart.cs b/WcsMain/StartAction/ServiceStart.cs
index 0ac441f..7c3f4bf 100644
--- a/WcsMain/StartAction/ServiceStart.cs
+++ b/WcsMain/StartAction/ServiceStart.cs
@@ -1,5 +1,4 @@
using WcsMain.Socket;
-using WcsMain.PlcOperation;
using WcsMain.Common;
using WcsMain.WcsAttribute.AutoFacAttribute;
using WcsMain.Plugins;
@@ -10,6 +9,7 @@ using WcsMain.DataBase.TableEntity;
using WcsMain.WcsAttribute.AppConfig;
using WcsMain.Business.Convey;
using WcsMain.ElTag.Atop;
+using WcsMain.EquipOperation;
namespace WcsMain.StartAction;
diff --git a/WcsMain/Tcp/Client/BaseTcpClient.cs b/WcsMain/Tcp/Client/BaseTcpClient.cs
index bc2264b..afe9d2a 100644
--- a/WcsMain/Tcp/Client/BaseTcpClient.cs
+++ b/WcsMain/Tcp/Client/BaseTcpClient.cs
@@ -164,9 +164,16 @@ public class BaseTcpClient
checkTasks.Add(Task.Factory.StartNew(() =>
{
// Ping 地址
- System.Net.NetworkInformation.Ping ping = new();
- var pingResult = ping.Send(tcpServe.TcpServe!.TcpIp!, 100);
- if(pingResult.Status != System.Net.NetworkInformation.IPStatus.Success)
+ bool pingok = false;
+ for(int i = 0; i < 4; i++)
+ {
+ System.Net.NetworkInformation.Ping ping = new();
+ var pingResult = ping.Send(tcpServe.TcpServe!.TcpIp!, 100);
+ if (pingResult.Status != System.Net.NetworkInformation.IPStatus.Success) continue;
+ pingok = true;
+ break;
+ }
+ if(!pingok)
{
tcpServe.TcpClient?.Close();
//tcpServe.IsConnected = Enum.General.TrueFalseEnum.FALSE;