<add>[important]能点亮电子标签
This commit is contained in:
parent
7023e6cefd
commit
46c9edc244
70
WcsMain/Business/CirculationTask/ElTag/LightElTag.cs
Normal file
70
WcsMain/Business/CirculationTask/ElTag/LightElTag.cs
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
using CirculateTool;
|
||||||
|
using WcsMain.Common;
|
||||||
|
using WcsMain.DataBase.Dao;
|
||||||
|
using WcsMain.DataBase.TableEntity;
|
||||||
|
using WcsMain.ElTag.Atop;
|
||||||
|
using WcsMain.ElTag.Atop.Entity;
|
||||||
|
using WcsMain.Enum.TaskEnum;
|
||||||
|
|
||||||
|
namespace WcsMain.Business.CirculationTask.ElTag;
|
||||||
|
|
||||||
|
|
||||||
|
[Circulation]
|
||||||
|
public class LightElTag(AppElTagTaskDao tagTaskDao, ConnectOprServe connectOprServe)
|
||||||
|
{
|
||||||
|
|
||||||
|
private readonly AppElTagTaskDao _tagTaskDao = tagTaskDao;
|
||||||
|
private readonly ConnectOprServe _connectOprServe = connectOprServe;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 点亮电子标签
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[Circulation("点亮电子标签")]
|
||||||
|
public bool Light()
|
||||||
|
{
|
||||||
|
List<AppElTagTask>? tasks = _tagTaskDao.Query(new AppElTagTask { TaskStatus = (int)ElTagTaskStatusEnum.NeedLight });
|
||||||
|
if (tasks == default)
|
||||||
|
{
|
||||||
|
ConsoleLog.Exception("【异常】查询 电子标签 任务失败,数据库连接异常");
|
||||||
|
Thread.Sleep(5000);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
tasks.ForEach(LightTask);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 执行点亮标签任务
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tagTask"></param>
|
||||||
|
public void LightTask(AppElTagTask tagTask)
|
||||||
|
{
|
||||||
|
if (CommonData.AppElTags == default || CommonData.AppElTags.Count < 1) return;
|
||||||
|
var tagInfo = CommonData.AppElTags.Find(f => f.Location == tagTask.Location);
|
||||||
|
if(tagInfo == default)
|
||||||
|
{
|
||||||
|
ConsoleLog.Warning($"【警告】电子标签:{tagTask.Location} 不存在,无法点亮");
|
||||||
|
_tagTaskDao.Update(new AppElTagTask
|
||||||
|
{
|
||||||
|
TaskId = tagTask.TaskId,
|
||||||
|
TaskStatus = (int)ElTagTaskStatusEnum.Error,
|
||||||
|
ConfirmTime = DateTime.Now,
|
||||||
|
Remark = "点位不存在"
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* 点亮标签 */
|
||||||
|
var resultException = _connectOprServe.ShowMsg(tagInfo.ControllerDisplayName, tagInfo.TagId, tagTask.NeedNum);
|
||||||
|
if(resultException == default )
|
||||||
|
{
|
||||||
|
_tagTaskDao.Update(new AppElTagTask
|
||||||
|
{
|
||||||
|
TaskId = tagTask.TaskId,
|
||||||
|
TaskStatus = (int)ElTagTaskStatusEnum.Lighting,
|
||||||
|
LightTime = DateTime.Now,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -10,11 +10,6 @@ namespace WcsMain.Common;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class CommonData
|
public static class CommonData
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// IOC
|
|
||||||
/// </summary>
|
|
||||||
[NotNull]
|
|
||||||
public static IContainer? Container { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 系统设置项,加载于 appsettings.json
|
/// 系统设置项,加载于 appsettings.json
|
||||||
|
|
@ -40,6 +35,11 @@ public static class CommonData
|
||||||
[NotNull]
|
[NotNull]
|
||||||
public static List<AppLocation>? AppLocations { get; set; }
|
public static List<AppLocation>? AppLocations { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电子标签基础资料
|
||||||
|
/// </summary>
|
||||||
|
[NotNull]
|
||||||
|
public static List<AppElTagBase>? AppElTags { get; set; }
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
43
WcsMain/DataBase/Dao/AppElTagBaseDao.cs
Normal file
43
WcsMain/DataBase/Dao/AppElTagBaseDao.cs
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
using WcsMain.Common;
|
||||||
|
using WcsMain.DataBase.TableEntity;
|
||||||
|
using WcsMain.WcsAttribute.AutoFacAttribute;
|
||||||
|
|
||||||
|
namespace WcsMain.DataBase.Dao;
|
||||||
|
|
||||||
|
[Component]
|
||||||
|
public class AppElTagBaseDao
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 条件查询
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="queryData"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<AppElTagBase>? Query(AppElTagBase queryData)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var sqlFuc = CommonTool.DbServe.Queryable<AppElTagBase>()
|
||||||
|
.WhereIF(queryData.Location != default, w => w.Location == queryData.Location)
|
||||||
|
.WhereIF(queryData.TagName != default, w => w.TagName == queryData.TagName)
|
||||||
|
.WhereIF(queryData.TagId != default, w => w.TagId == queryData.TagId)
|
||||||
|
.WhereIF(queryData.TagType != default, w => w.TagType == queryData.TagType)
|
||||||
|
.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.Remark != default, w => w.Remark == queryData.Remark);
|
||||||
|
return sqlFuc.ToList();
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
_ = ex;
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询所有
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<AppElTagBase>? Query() => Query(new AppElTagBase());
|
||||||
|
}
|
||||||
66
WcsMain/DataBase/Dao/AppElTagTaskDao.cs
Normal file
66
WcsMain/DataBase/Dao/AppElTagTaskDao.cs
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
using WcsMain.Common;
|
||||||
|
using WcsMain.DataBase.TableEntity;
|
||||||
|
using WcsMain.WcsAttribute.AutoFacAttribute;
|
||||||
|
|
||||||
|
namespace WcsMain.DataBase.Dao;
|
||||||
|
|
||||||
|
[Component]
|
||||||
|
public class AppElTagTaskDao
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 条件查询
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="queryData"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<AppElTagTask>? Query(AppElTagTask queryData)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var sqlFuc = CommonTool.DbServe.Queryable<AppElTagTask>()
|
||||||
|
.WhereIF(queryData.TaskId != default, w => w.TaskId == queryData.TaskId)
|
||||||
|
.WhereIF(queryData.Location != default, w => w.Location == queryData.Location)
|
||||||
|
.WhereIF(queryData.OrderId != default, w => w.OrderId == queryData.OrderId)
|
||||||
|
.WhereIF(queryData.VehicleNo != default, w => w.VehicleNo == queryData.VehicleNo)
|
||||||
|
.WhereIF(queryData.GoodsId != default, w => w.GoodsId == queryData.GoodsId)
|
||||||
|
.WhereIF(queryData.GoodsName != default, w => w.GoodsName == queryData.GoodsName)
|
||||||
|
.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.Remark != default, w => w.Remark == queryData.Remark);
|
||||||
|
return sqlFuc.ToList();
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
_ = ex;
|
||||||
|
return default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 全部查询
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<AppElTagTask>? Query() => Query(new AppElTagTask());
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据主键更新
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="updateData"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public int Update(AppElTagTask updateData)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var sqlFuc = CommonTool.DbServe.Updateable(updateData).IgnoreColumns(ignoreAllNullColumns: true);
|
||||||
|
return sqlFuc.ExecuteCommand();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_ = ex;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
88
WcsMain/DataBase/TableEntity/AppElTagTask.cs
Normal file
88
WcsMain/DataBase/TableEntity/AppElTagTask.cs
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace WcsMain.DataBase.TableEntity;
|
||||||
|
|
||||||
|
[SugarTable("tbl_app_eltag_task")]
|
||||||
|
public class AppElTagTask
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 任务号
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "task_id", IsPrimaryKey = true)]
|
||||||
|
public string? TaskId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 点位
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "location")]
|
||||||
|
public string? Location { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 订单号
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "order_id")]
|
||||||
|
public string? OrderId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 载具号
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "vehicle_no")]
|
||||||
|
public string? VehicleNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 物料编号
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "goods_id")]
|
||||||
|
public string? GoodsId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 物料名称
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "goods_name")]
|
||||||
|
public string? GoodsName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 任务状态
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "task_status")]
|
||||||
|
public int? TaskStatus { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 需求数量
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "need_num")]
|
||||||
|
public int? NeedNum { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 拣选数量
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "pick_num")]
|
||||||
|
public int? PickNum { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 任务创建时间
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "create_time")]
|
||||||
|
public DateTime? CreateTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 点亮时间
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "light_time")]
|
||||||
|
public DateTime? LightTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 确认时间
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "confirm_time")]
|
||||||
|
public DateTime? ConfirmTime { get; set;}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 备注
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "remark")]
|
||||||
|
public string? Remark { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
using WcsMain.Common;
|
using LedSimple;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using WcsMain.Common;
|
||||||
using WcsMain.DataBase.Dao;
|
using WcsMain.DataBase.Dao;
|
||||||
using WcsMain.DataBase.TableEntity;
|
using WcsMain.DataBase.TableEntity;
|
||||||
|
using WcsMain.ElTag.Atop.AtopEnum;
|
||||||
|
using WcsMain.ElTag.Atop.Entity;
|
||||||
using WcsMain.Enum.General;
|
using WcsMain.Enum.General;
|
||||||
|
using WcsMain.Enum.TaskEnum;
|
||||||
using WcsMain.Enum.Tcp;
|
using WcsMain.Enum.Tcp;
|
||||||
using WcsMain.Tcp.Entity;
|
using WcsMain.Tcp.Entity;
|
||||||
using WcsMain.WcsAttribute.AutoFacAttribute;
|
using WcsMain.WcsAttribute.AutoFacAttribute;
|
||||||
|
|
@ -26,7 +31,7 @@ public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHan
|
||||||
CommonTool.OprTcpClient = new OprTcpClient();
|
CommonTool.OprTcpClient = new OprTcpClient();
|
||||||
CommonTool.OprTcpClient.SetConnecting((tcpData) => ConsoleLog.Info($"电子标签:{tcpData} 正在连接"));
|
CommonTool.OprTcpClient.SetConnecting((tcpData) => ConsoleLog.Info($"电子标签:{tcpData} 正在连接"));
|
||||||
CommonTool.OprTcpClient.SetConnectFailAction((tcpData, ex) => ConsoleLog.Warning($"电子标签:{tcpData} 连接失败,参考信息:{ex.Message}"));
|
CommonTool.OprTcpClient.SetConnectFailAction((tcpData, ex) => ConsoleLog.Warning($"电子标签:{tcpData} 连接失败,参考信息:{ex.Message}"));
|
||||||
CommonTool.OprTcpClient.SetConnectSuccess((tcpData) => ConsoleLog.Success($"电子标签:{tcpData} 连接成功"));
|
CommonTool.OprTcpClient.SetConnectSuccess(ConnectSuccess);
|
||||||
CommonTool.OprTcpClient.SetConnectOffline((tcpData) => ConsoleLog.Warning($"电子标签:{tcpData} 失去连接"));
|
CommonTool.OprTcpClient.SetConnectOffline((tcpData) => ConsoleLog.Warning($"电子标签:{tcpData} 失去连接"));
|
||||||
CommonTool.OprTcpClient.SetGetData(GetData);
|
CommonTool.OprTcpClient.SetGetData(GetData);
|
||||||
}
|
}
|
||||||
|
|
@ -52,6 +57,66 @@ public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHan
|
||||||
}, TaskCreationOptions.LongRunning);
|
}, TaskCreationOptions.LongRunning);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 连接成功的事件 ---- 重置标签
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tcpServe"></param>
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
|
||||||
|
//CommonTool.OprTcpClient.Send(TagSendInfo.SetTagModel(Convert.ToByte(tagInfo.TagId), TagMode.Picking), tagInfo.ControllerDisplayName!);
|
||||||
|
//CommonTool.OprTcpClient.Send(TagSendInfo.(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!);
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 向标签发送一个显示值
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="controllerDisplayName"></param>
|
||||||
|
/// <param name="tagId"></param>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
/// <param name="ledColor"></param>
|
||||||
|
/// <param name="ledStatus"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
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("必须的值为空,无法发送电子标签");
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -62,6 +127,31 @@ public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHan
|
||||||
/// <param name="datas"></param>
|
/// <param name="datas"></param>
|
||||||
public void GetData(TcpServeConnectionData tcpServe, byte[] datas)
|
public void GetData(TcpServeConnectionData tcpServe, byte[] datas)
|
||||||
{
|
{
|
||||||
|
TagReturnInfo returnInfo = new()
|
||||||
|
{
|
||||||
|
ControllerDisplayName = tcpServe.DisplayName,
|
||||||
|
Ip = tcpServe.TcpServe!.TcpIp,
|
||||||
|
Port = Convert.ToInt32(datas[2]) == 0x60 ? 1 : 2,
|
||||||
|
SubCommand = Convert.ToInt32(datas[6]),
|
||||||
|
TagId = datas.Length > 7 ? Convert.ToInt32(datas[7]) : 0
|
||||||
|
};
|
||||||
|
if (returnInfo.SubCommand == 6 || returnInfo.SubCommand == 7)
|
||||||
|
{
|
||||||
|
if (datas[8] >= 160) returnInfo.SubCommand = 8;
|
||||||
|
|
||||||
|
List<string> returnData = [];
|
||||||
|
for (int i = 8; i < datas.Length; i++)
|
||||||
|
{
|
||||||
|
if (i == 8 && datas[8] >= 160)
|
||||||
|
{
|
||||||
|
returnData.Add(datas[8] == 160 ? Convert.ToString(Convert.ToChar(32)) : Convert.ToString(Convert.ToChar(datas[8] - 128)));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (datas[i] > 0) returnData.Add(Convert.ToString(Convert.ToChar(datas[i])));
|
||||||
|
}
|
||||||
|
returnInfo.Data = string.Join("", returnData);
|
||||||
|
}
|
||||||
|
ConsoleLog.Info($"电子标签获取返回值:{returnInfo}");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
public class TagReturnInfo
|
public class TagReturnInfo
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 控制器别称
|
||||||
|
/// </summary>
|
||||||
|
public string? ControllerDisplayName { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 按下的按键类型
|
/// 按下的按键类型
|
||||||
|
|
@ -36,8 +40,10 @@ public class TagReturnInfo
|
||||||
public string? Ip { get; set; }
|
public string? Ip { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
public int Abbr { get; set; }
|
/// 标签 ID
|
||||||
|
/// </summary>
|
||||||
|
public int TagId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 传回消息的端口 ---- 注意不是控制器端口
|
/// 传回消息的端口 ---- 注意不是控制器端口
|
||||||
|
|
@ -48,4 +54,11 @@ public class TagReturnInfo
|
||||||
/// 返回的数据
|
/// 返回的数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string? Data { get; set; }
|
public string? Data { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return $"控制器别称:{ControllerDisplayName},标签Id:{TagId},提交方式:{SubCommand},提交数据:{Data}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,38 @@ namespace WcsMain.ElTag.Atop.Entity;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class TagSendInfo
|
public class TagSendInfo
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 标签自检 ????
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static byte[] CheckAllTag()
|
||||||
|
{
|
||||||
|
byte[] data = new byte[7];
|
||||||
|
data[0] = 7;
|
||||||
|
data[1] = 0;
|
||||||
|
data[2] = 0x60;
|
||||||
|
data[6] = 0x09;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置标签模式
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tagId"></param>
|
||||||
|
/// <param name="tagMode"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static byte[] SetTagModel(byte tagId, TagMode tagMode)
|
||||||
|
{
|
||||||
|
byte[] data = new byte[8];
|
||||||
|
data[0] = 8;
|
||||||
|
data[1] = 0;
|
||||||
|
data[2] = 0x60;
|
||||||
|
data[6] = tagMode == TagMode.Stock ? (byte)0x19 : (byte)0x1A;
|
||||||
|
data[7] = tagId;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 展示标签的ID
|
/// 展示标签的ID
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -73,7 +105,7 @@ public class TagSendInfo
|
||||||
data[6] = 0x1F;
|
data[6] = 0x1F;
|
||||||
data[7] = tagId;
|
data[7] = tagId;
|
||||||
data[8] = 0;
|
data[8] = 0;
|
||||||
data[9] = (byte)ledColor;
|
data[9] = Convert.ToByte(ledColor);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,7 +124,39 @@ public class TagSendInfo
|
||||||
data[6] = 0x1F;
|
data[6] = 0x1F;
|
||||||
data[7] = tagId;
|
data[7] = tagId;
|
||||||
data[8] = 4;
|
data[8] = 4;
|
||||||
data[9] = (byte)ledStatus;
|
data[9] = Convert.ToByte(ledStatus);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 展示字符串
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tagId"></param>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static byte[] ShowValue(byte tagId, string? value)
|
||||||
|
{
|
||||||
|
if(string.IsNullOrEmpty(value)) value = string.Empty;
|
||||||
|
if(value.Length < 6)
|
||||||
|
{
|
||||||
|
value = value.PadLeft(6, '0');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = value.Substring(value.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 < value.Length; i++)
|
||||||
|
{
|
||||||
|
data[8 + i] = Convert.ToByte(value[i]);
|
||||||
|
}
|
||||||
|
data[14] = 0x00;
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,17 +11,6 @@ namespace WcsMain.ElTag.Atop;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class OprTcpClient : BaseTcpClient
|
public class OprTcpClient : BaseTcpClient
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 连接电子标签客户端
|
|
||||||
/// </summary>
|
|
||||||
public void Send()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
14
WcsMain/Enum/TaskEnum/ElTagTaskStatusEnum.cs
Normal file
14
WcsMain/Enum/TaskEnum/ElTagTaskStatusEnum.cs
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
namespace WcsMain.Enum.TaskEnum;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电子标签任务状态枚举
|
||||||
|
/// </summary>
|
||||||
|
public enum ElTagTaskStatusEnum
|
||||||
|
{
|
||||||
|
NeedLight = 0, // 待点亮
|
||||||
|
Lighting = 1, // 点亮种
|
||||||
|
Confirm = 2, // 已确认
|
||||||
|
Error = 9, // 发生异常
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -19,7 +19,7 @@ namespace WcsMain.StartAction;
|
||||||
[Component]
|
[Component]
|
||||||
public class ServiceStart(WcsCirculation wcsCirculation, ConnectPLCs connectPLCs, SocketOperation socketOperation,
|
public class ServiceStart(WcsCirculation wcsCirculation, ConnectPLCs connectPLCs, SocketOperation socketOperation,
|
||||||
AppStackerDao appStackerDao, AppLocationDao appLocationDao, AppConfigDao appConfigDao, ConnectPlcServe connectPlcServe,
|
AppStackerDao appStackerDao, AppLocationDao appLocationDao, AppConfigDao appConfigDao, ConnectPlcServe connectPlcServe,
|
||||||
ConnectOprServe connectOprServe)
|
ConnectOprServe connectOprServe, AppElTagBaseDao appElTagBaseDao)
|
||||||
{
|
{
|
||||||
private readonly AppConfigDao _appconfigDao = appConfigDao;
|
private readonly AppConfigDao _appconfigDao = appConfigDao;
|
||||||
private readonly AppLocationDao _applocationDao = appLocationDao;
|
private readonly AppLocationDao _applocationDao = appLocationDao;
|
||||||
|
|
@ -29,6 +29,7 @@ public class ServiceStart(WcsCirculation wcsCirculation, ConnectPLCs connectPLCs
|
||||||
private readonly WcsCirculation _wcsCirculation = wcsCirculation;
|
private readonly WcsCirculation _wcsCirculation = wcsCirculation;
|
||||||
private readonly ConnectPlcServe _connectPlcServe = connectPlcServe;
|
private readonly ConnectPlcServe _connectPlcServe = connectPlcServe;
|
||||||
private readonly ConnectOprServe _connectOprServe = connectOprServe;
|
private readonly ConnectOprServe _connectOprServe = connectOprServe;
|
||||||
|
private readonly AppElTagBaseDao _appElTagBaseDao = appElTagBaseDao;
|
||||||
|
|
||||||
private static string _errMsg = string.Empty;
|
private static string _errMsg = string.Empty;
|
||||||
|
|
||||||
|
|
@ -40,6 +41,7 @@ public class ServiceStart(WcsCirculation wcsCirculation, ConnectPLCs connectPLCs
|
||||||
LoadingConfig(); // 加载数据库中的配置项 (config 表)
|
LoadingConfig(); // 加载数据库中的配置项 (config 表)
|
||||||
LoadingStackerData(); // 加载数据库中的堆垛机信息
|
LoadingStackerData(); // 加载数据库中的堆垛机信息
|
||||||
LoadingLocationData(); // 加载数据库中的库位信息
|
LoadingLocationData(); // 加载数据库中的库位信息
|
||||||
|
LoadElTagBase(); // 加载电子标签基础资料
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(_errMsg))
|
if (!string.IsNullOrEmpty(_errMsg))
|
||||||
{
|
{
|
||||||
|
|
@ -195,4 +197,20 @@ public class ServiceStart(WcsCirculation wcsCirculation, ConnectPLCs connectPLCs
|
||||||
CommonData.AppLocations = appLocations;
|
CommonData.AppLocations = appLocations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 加载电子标签基础资料
|
||||||
|
/// </summary>
|
||||||
|
public void LoadElTagBase()
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(_errMsg)) return;
|
||||||
|
ConsoleLog.Info("正在加载库位信息...");
|
||||||
|
List<AppElTagBase>? eltags = _appElTagBaseDao.Query();
|
||||||
|
if (eltags == default)
|
||||||
|
{
|
||||||
|
_errMsg = "加载电子标签基础信息失败,请检查数据库服务器连接是否正常";
|
||||||
|
CommonData.AppElTags = [];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CommonData.AppElTags = eltags;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -108,9 +108,10 @@ public class BaseTcpClient
|
||||||
int readLength = await networkStream.ReadAsync(bytes);
|
int readLength = await networkStream.ReadAsync(bytes);
|
||||||
if (readLength > 0)
|
if (readLength > 0)
|
||||||
{
|
{
|
||||||
|
bytes = bytes.Take(readLength).ToArray();
|
||||||
serveData.RecvMsgTime = DateTime.Now;
|
serveData.RecvMsgTime = DateTime.Now;
|
||||||
_getData?.BeginInvoke(serveData, bytes, null, null);
|
_getData?.Invoke(serveData, bytes);
|
||||||
_getMessage?.BeginInvoke(serveData, Encoding.ASCII.GetString(bytes), null, null);
|
_getMessage?.Invoke(serveData, Encoding.ASCII.GetString(bytes));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
_connectOffline?.Invoke(serveData);
|
_connectOffline?.Invoke(serveData);
|
||||||
|
|
@ -173,10 +174,10 @@ public class BaseTcpClient
|
||||||
}
|
}
|
||||||
if (tcpServe.TcpClient == default) return;
|
if (tcpServe.TcpClient == default) return;
|
||||||
// 尝试发送消息
|
// 尝试发送消息
|
||||||
var networkStream = tcpServe.TcpClient.GetStream();
|
|
||||||
byte[] bytes = [];
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var networkStream = tcpServe.TcpClient.GetStream();
|
||||||
|
byte[] bytes = [];
|
||||||
networkStream.Write(bytes);
|
networkStream.Write(bytes);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user