change-提交520测试

master
liuwf 7 months ago
parent 75283b1895
commit c45080e27f

@ -156,6 +156,36 @@ namespace SlnMesnac.Business.@base
}
}
/// <summary>
/// 使用---根据RFID Key读取RFID信息
/// </summary>
/// <param name="rfidKey"></param>
/// <param name="epcStr"></param>
/// <exception cref="InvalidOperationException"></exception>
public string ReadEpcStrByRfidKey(string rfidKey)
{
try
{
string epcStr = string.Empty;
var rfidEquip = GetRfidByKey(rfidKey);
if (rfidEquip == null || rfidEquip.GetOnlineStatus() == false)
{
return "";
}
List<TagInfo> tagInfoList = rfidEquip.GetRFID();
if (tagInfoList == null || tagInfoList.Count == 0) return "";
epcStr = tagInfoList.OrderByDescending(x => x.Count).First().EPCstring;
epcStr = epcStr.Replace(" ", "").Replace("\r\n", "").Replace("\0", "").Replace("\n", "");
return epcStr;
}
catch (Exception ex)
{
// throw new InvalidOperationException($"根据RFID Key读取RFID信息异常:{ex.Message}");
return "";
}
}
/// <summary>
/// 使用---根据RFID Key读取光电信号
/// 有物体返回true

@ -1,4 +1,5 @@
using SlnMesnac.Common;
using Microsoft.IdentityModel.Logging;
using SlnMesnac.Common;
using SlnMesnac.Model.dto;
using SlnMesnac.Rfid.Dto;
using SlnMesnac.Rfid.Enum;
@ -229,6 +230,65 @@ namespace SlnMesnac.Rfid.Factory
}
}
public override List<TagInfo> GetRFID(int timeout = 3000)
{
byte[] u16byte = new byte[2];
byte[] bCRC = new byte[4];
try
{
#region 指令封装
MessagePack pMessagePack = new MessagePack();
pMessagePack.m_pData = new byte[8];
pMessagePack.m_pData[0] = 0xAA;
pMessagePack.m_pData[1] = 0x55;
pMessagePack.m_pData[2] = 0x02;
pMessagePack.m_pData[3] = 0x02;
//1s
pMessagePack.m_pData[4] = 0x03;
pMessagePack.m_pData[5] = 0xE8;
//2s
//pMessagePack.m_pData[4] = 0x07;
//pMessagePack.m_pData[5] = 0xD0;
//3s
//pMessagePack.m_pData[4] = 0x0B;
//pMessagePack.m_pData[5] = 0xA0;
Array.Copy(pMessagePack.m_pData, 2, bCRC, 0, 4);
pMessagePack.m_pData[6] = _stringChange.CalculateVerify(bCRC, bCRC.Length);
pMessagePack.m_pData[7] = 0x0D;
#endregion 指令封装
var waitClient = _tcpClient.CreateWaitingClient(new WaitingOptions()
{
FilterFunc = response =>
{
// 检查响应数据是否符合预期
if (response.Data != null && response.Data.Length > 0)
{
// 可以根据实际情况添加更多的检查逻辑
return true;
}
return false;
}
});
// 使用同步方法发送数据并获取响应
byte[] reciveBuffer = waitClient.SendThenReturn(pMessagePack.m_pData, timeout);
byte[] resultBuffer = PareReceiveBufferData(reciveBuffer, reciveBuffer.Length);
List<TagInfo> tagInfoList = Device_DealTagInfoList(resultBuffer);
return tagInfoList;
}
catch (Exception e)
{
throw new InvalidOperationException($"按时间段盘点异常:{e.Message}");
}
}
/// <summary>
/// 使用--异步获取光电状态
/// </summary>

@ -79,6 +79,8 @@ namespace SlnMesnac.Rfid
/// <exception cref="InvalidOperationException"></exception>
public abstract Task<List<TagInfo>> GetRFIDAsync(int timeout = 5000);
public abstract List<TagInfo> GetRFID(int timeout = 3000);
/// <summary>
/// 使用--异步获取光电状态
/// </summary>

@ -87,6 +87,7 @@ namespace SlnMesnac.WCS
public void Start()
{
StartCheckStatus();
GetAgvStatus();
DeleteTaskLogic();
//根据条件创建任务
@ -164,6 +165,7 @@ namespace SlnMesnac.WCS
//实时获取agv状态
MessageSynchronousLogic(agvEquipList);
//色粉库位有未取走色粉声光报警
ListeningTonerLocation();
}
catch (Exception ex)
@ -175,6 +177,30 @@ namespace SlnMesnac.WCS
});
}
/// <summary>
/// 获取agv状态
/// </summary>
private void GetAgvStatus()
{
List<WcsBaseEquip> agvEquipList = SqlSugarClient.Queryable<WcsBaseEquip>().Where(it => it.EquipType == 1).ToList();
Task.Run(async () =>
{
while (true)
{
try
{
//实时获取agv状态
MessageSynchronousLogic(agvEquipList);
}
catch (Exception ex)
{
_logger.Error($"获取agv状态异常:{ex.Message}");
}
await Task.Delay(1000 * 30);
}
});
}
#endregion
/// <summary>

@ -478,6 +478,7 @@ namespace SlnMesnac.WCS.WCS
workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#接驳位到位信号"), 0);
workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#出接驳位信号"), false);
workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#小料箱agv已取走反馈"), true);
_logger.Agv($"agv取走料{task.PalletInfoCode}3#忙碌状态清0");
}
}
}
@ -489,8 +490,6 @@ namespace SlnMesnac.WCS.WCS
return;
}
//workShop3Plc.writeStringByAddress(StaticData.GetPlcAddress("3#小料箱下料点机台号"), "", 6);
//workShop3Plc.writeStringByAddress(StaticData.GetPlcAddress("3#小料箱下料点RFID号"), "", 12);
//解锁起始库位忙碌状态
WcsBaseEquip? startEquip = sqlSugarClient.Queryable<WcsBaseEquip>().First(it => it.AgvPositionCode == task.CurrPointNo);
sqlSugarClient.AsTenant().BeginTran();
@ -616,6 +615,7 @@ namespace SlnMesnac.WCS.WCS
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#取完成"), true);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#接驳位到位信号"), false);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#缓存空进AGV任务反馈"), false);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#出接驳位信号"), false);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#出一个空托盘信号"), false);
}
}
@ -696,7 +696,15 @@ namespace SlnMesnac.WCS.WCS
}
else if (outFlag == 1)
{ //托盘已经离开wcs通知agv离开
await ContinueTaskHandle(task);
bool result = await ContinueTaskHandle(task);
if (result)
{
//从下料点直接取清空RFID及机台号条码等信息--ok
workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 0);
workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#接驳位到位信号"), 0);
workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#出接驳位信号"), false);
workShop3Plc.writeBoolByAddress(StaticData.GetPlcAddress("3#小料箱agv已取走反馈"), true);
}
}
}
else if (task.TaskStatus == 10) //任务完成wcs复位3#接驳位信号,删除任务
@ -738,21 +746,16 @@ namespace SlnMesnac.WCS.WCS
}
else if (task.TaskStatus == 2) //取完料箱前往目的地
{
//解锁起始库位
WcsBaseEquip? baseEquip = sqlSugarClient.Queryable<WcsBaseEquip>().First(t => t.AgvPositionCode == task.CurrPointNo);
if (baseEquip != null)
{
sqlSugarClient.AsTenant().BeginTran();
try
{
baseEquip.EquipStatus = 0;
baseEquip.ContainerCode = null;
task.TaskStatus = 3;
if (wcsTaskLog != null)
{
wcsTaskLog.TaskStatus = task.TaskStatus;
}
sqlSugarClient.Updateable(baseEquip).ExecuteCommand();
sqlSugarClient.Updateable(task).ExecuteCommand();
sqlSugarClient.Updateable(wcsTaskLog).ExecuteCommand();
sqlSugarClient.AsTenant().CommitTran();
@ -782,6 +785,14 @@ namespace SlnMesnac.WCS.WCS
busyFlag = workShop3Plc.readInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"));
if (busyFlag == 0)
{
//解锁起始库位
WcsBaseEquip? baseEquip = sqlSugarClient.Queryable<WcsBaseEquip>().First(t => t.AgvPositionCode == task.CurrPointNo);
if (baseEquip != null)
{
baseEquip.EquipStatus = 0;
baseEquip.ContainerCode = null;
sqlSugarClient.Updateable(baseEquip).ExecuteCommand();
}
//抢占线体状态agv进入接驳位
workShop3Plc.writeInt16ByAddress(StaticData.GetPlcAddress("3#线体忙碌状态"), 1);
await ContinueTaskHandle(task);

@ -44,7 +44,10 @@ namespace SlnMesnac.WCS.WCS
CreateTaskByReadPlcSignal();
//监听2#计量室旋转移栽plc信号处理相关流程
ListeningWorkShop2TransplantingMachine();
var CreateProductTaskByLocationCodeThread = new Thread(ListeningWorkShop2TransplantingMachine);
CreateProductTaskByLocationCodeThread.IsBackground = true;
CreateProductTaskByLocationCodeThread.Name = "监听1#2#计量室旋转移栽plc信号处理连廊箱体旋转相关流程";
CreateProductTaskByLocationCodeThread.Start();
}
/// <summary>
@ -136,39 +139,38 @@ namespace SlnMesnac.WCS.WCS
/// </summary>
private void ListeningWorkShop2TransplantingMachine()
{
Task.Run(async () =>
while (true)
{
while (true)
try
{
try
if (workShop2Plc == null || !workShop2Plc.IsConnected)
{
if (workShop2Plc == null || !workShop2Plc.IsConnected)
{
continue;
}
continue;
}
#region 计量室料箱返回处理流程:空箱入缓存链条线,色粉派送至色粉存放点
#region 计量室料箱返回处理流程:空箱入缓存链条线,色粉派送至色粉存放点
//2#接驳位色粉派送至色粉存放点任务
if (workShop2Plc != null && workShop2Plc.IsConnected)
//2#接驳位色粉派送至色粉存放点任务
if (workShop2Plc != null && workShop2Plc.IsConnected)
{
bool returnJudgeSignal = workShop2Plc.readBoolByAddress(StaticData.GetPlcAddress("2#料箱运回RFID读取"));
int busy2Flag = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"));
int Amount = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#缓存链条线库存数"));
//是否还有未在色粉库位的色粉箱体
bool anyTonerPallet = HasAnyTonerInLine();
if (returnJudgeSignal && busy2Flag == 0 && (Amount < 3 || anyTonerPallet))
{
_logger.Info("22222=============");
bool returnJudgeSignal = workShop2Plc.readBoolByAddress(StaticData.GetPlcAddress("2#料箱运回RFID读取"));
int busy2Flag = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"));
int Amount = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#缓存链条线库存数"));
//是否还有未在色粉库位的色粉箱体
bool anyTonerPallet = HasAnyTonerInLine();
if (returnJudgeSignal && busy2Flag == 0 && (Amount < 3 || anyTonerPallet))
string rfid = ReadEpcStrByRfidKey("2#Transplant");
if (string.IsNullOrEmpty(rfid))
{//二次读取
rfid = ReadEpcStrByRfidKey("2#Transplant");
}
if (!string.IsNullOrEmpty(rfid))
{
string rfid = await ReadEpcStrByRfidKeyAsync("2#Transplant");
if (string.IsNullOrEmpty(rfid))
{//二次读取
rfid = await ReadEpcStrByRfidKeyAsync("2#Transplant");
}
//让其他线程
Thread.Sleep(4000);
busy2Flag = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"));
if (!string.IsNullOrEmpty(rfid) && busy2Flag == 0)
if (busy2Flag == 0)
{
// 判断有无色粉, 如果没有色粉wcs给 旋转移栽方向信号 写2plc将料箱运到 缓存皮带线。
WmsPalletInfo? wmsPalletInfo = sqlSugarClient.Queryable<WmsPalletInfo>().First(it => it.PalletInfoCode == rfid);
@ -180,6 +182,7 @@ namespace SlnMesnac.WCS.WCS
if (createResult)
{
//3色粉上提升机移栽等待
_logger.Info($"2#移栽===={rfid}携带色粉去往色粉库位");
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1);
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#移栽平台任务"), 3);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运回RFID读取"), false);
@ -187,6 +190,7 @@ namespace SlnMesnac.WCS.WCS
else
{ //色粉库位无空闲位置,空转一圈
//2空箱转运
_logger.Info($"2#移栽===={rfid}携带色粉,色粉库位无空闲位置,空转一圈");
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1);
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#移栽平台任务"), 2);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运回RFID读取"), false);
@ -195,6 +199,7 @@ namespace SlnMesnac.WCS.WCS
else if (wmsPalletInfo != null && wmsPalletInfo.Amount > 0 && wmsPalletInfo.TonerFlag == 0) //携带满料
{
//2空箱转运
_logger.Info($"2#移栽===={rfid}携带满料,空转一圈");
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1);
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#移栽平台任务"), 2);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运回RFID读取"), false);
@ -204,6 +209,7 @@ namespace SlnMesnac.WCS.WCS
if (Amount < 3)
{
//1上提升机去缓存线
_logger.Info($"2#移栽===={rfid}空箱,去缓存区");
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1);
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#移栽平台任务"), 1);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运回RFID读取"), false);
@ -211,125 +217,136 @@ namespace SlnMesnac.WCS.WCS
else
{
//2空箱转运
_logger.Info($"2#移栽===={rfid}空箱,空箱转运");
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1);
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#移栽平台任务"), 2);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运回RFID读取"), false);
}
}
}
else
{
//没读到2空箱转运
//workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1);
//workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#移栽平台任务"), 2);
//workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运回RFID读取"), false);
}
}
}
#endregion 计量室料箱返回处理流程:空箱入缓存链条线,色粉派送至色粉存放点
#region 连廊料箱在计量室连廊移栽处理流程wcs读RFID判断是否空箱空箱下plc信号旋转非空箱通知plc上提升机计量室
if (workShop2Plc != null && workShop2Plc.IsConnected)
{
_logger.Info("11111=============");
bool returnJudgeSignal = workShop2Plc.readBoolByAddress(StaticData.GetPlcAddress("2#料箱运进计量室RFID读取"));
int busy1Flag = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("1#提升机忙碌状态"));
if (returnJudgeSignal && busy1Flag == 0)
else
{
//test
string rfid = await ReadEpcStrByRfidKeyAsync("1#MetrologyRoom");
if (string.IsNullOrEmpty(rfid))
{
rfid = await ReadEpcStrByRfidKeyAsync("1#MetrologyRoom");
}
if (!string.IsNullOrEmpty(rfid))
{
// 判断有无料, 如果没有料wcs下发空箱旋转信号有料通知plc上提升机计量室
WmsPalletInfo? wmsPalletInfo = sqlSugarClient.Queryable<WmsPalletInfo>().First(it => it.PalletInfoCode == rfid);
if (wmsPalletInfo != null && wmsPalletInfo.Amount > 0 && wmsPalletInfo.TonerFlag == 0) //携带满料
{
//1#移栽平台任务1上提升机,2空箱转运
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("1#移栽平台任务"), 1);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运进计量室RFID读取"), false);
}
else if (wmsPalletInfo != null && wmsPalletInfo.Amount == 0)
{
//1#移栽平台任务1上提升机,2空箱转运
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("1#移栽平台任务"), 2);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运进计量室RFID读取"), false);
}
}
else
{
//没读到,当成空箱子旋转一圈
//1#移栽平台任务1上提升机,2空箱转运
//workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("1#移栽平台任务"), 2);
//workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运进计量室RFID读取"), false);
}
//没读到2空箱转运
// _logger.Info($"1#移栽====没读到,空箱转运");
//workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#线体忙碌状态"), 1);
//workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("2#移栽平台任务"), 2);
//workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运回RFID读取"), false);
}
}
#endregion 连廊料箱在计量室连廊移栽处理流程wcs读RFID判断是否空箱空箱下plc信号旋转非空箱通知plc上提升机计量室
#region 色粉存放点空托盘派送至2#接驳位-----暂时不使用
/////如果色粉存放点可用空库位小于等于2个并且有空托盘在库位判断2#缓存链条线库存容量3低于2个并且无 从3#接驳位到2#接驳位的送料任务或 色粉存放点到2#缓存链条线任务,
/////2.生成色粉存放点到2#缓存链条线任务
//int canUseAmount = sqlSugarClient.Queryable<WcsBaseEquip>().Count(it => it.EquipType == 7 && it.EquipStatus == 0 && string.IsNullOrEmpty(it.ContainerCode));
////判断色粉存放处是否有空托盘
//WcsBaseEquip? startEquip = sqlSugarClient.Queryable<WcsBaseEquip>().InnerJoin<WmsPalletInfo>(
// (wbe, wpi) => wbe.ContainerCode == wpi.PalletInfoCode && wpi.Amount == 0 && wbe.EquipStatus == 0)
// .Where(wbe => wbe.EquipType == 7 && !string.IsNullOrEmpty(wbe.ContainerCode)).First();
//if (canUseAmount < 2 && startEquip != null)
//{
// int cacheLineAmount = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#缓存链条线库存数"));
// bool hasTask = sqlSugarClient.Queryable<WcsTask>().Any(it => it.TaskType == StaticTaskType.EmptyReturnFromTonerTask || it.TaskType == StaticTaskType.TransferMaterialMetrologyRoomBoxTask);
// if (cacheLineAmount < 2 && !hasTask)
// {
// try
// {
// sqlSugarClient.AsTenant().BeginTran();
// WcsTask task = new WcsTask();
// task.TaskType = StaticTaskType.EmptyReturnFromTonerTask;
// task.CurrPointNo = startEquip.AgvPositionCode;
// task.EndPointNo = "2DeliverMetrologyRoomPoint";
// task.TaskStatus = 0;
// task.CreatedTime = DateTime.Now;
// task.CreatedBy = "wcs";
// task.TaskName = "色粉存放点空托盘派送至2#接驳位";
// task.PalletInfoCode = startEquip.ContainerCode;
// int id = sqlSugarClient.Insertable(task).ExecuteReturnIdentity();
// WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(task);
// wcsTaskLog.Id = id;
// startEquip.EquipStatus = 1;
// sqlSugarClient.Updateable(startEquip).ExecuteCommand();
// sqlSugarClient.Insertable(wcsTaskLog).ExecuteCommand();
// sqlSugarClient.AsTenant().CommitTran();
// _logger.Agv($"生成{task.TaskName},起点:{task.CurrPointNo},终点:{task.EndPointNo}");
// }
// catch (Exception ex)
// {
// sqlSugarClient.AsTenant().RollbackTran();
// _logger.Error($"色粉存放点空托盘派送至2#接驳位任务提交事务异常{ex.Message}");
// }
// }
//}
#endregion 色粉存放点空托盘派送至2#接驳位-----暂时不使用
}
catch (Exception ex)
#endregion 计量室料箱返回处理流程:空箱入缓存链条线,色粉派送至色粉存放点
#region 连廊料箱在计量室连廊移栽处理流程wcs读RFID判断是否空箱空箱下plc信号旋转非空箱通知plc上提升机计量室
if (workShop2Plc != null && workShop2Plc.IsConnected)
{
_logger.Error($"ListeningWorkShop2TransplantingMachine方法异常:" + ex.StackTrace);
}
finally
{
await Task.Delay(1000 * 2);
bool returnJudgeSignal = workShop2Plc.readBoolByAddress(StaticData.GetPlcAddress("2#料箱运进计量室RFID读取"));
int busy1Flag = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("1#提升机忙碌状态"));
if (returnJudgeSignal && busy1Flag == 0)
{
//test
string rfid = ReadEpcStrByRfidKey("1#MetrologyRoom");
if (string.IsNullOrEmpty(rfid))
{
rfid = ReadEpcStrByRfidKey("1#MetrologyRoom");
}
if (!string.IsNullOrEmpty(rfid))
{
// 判断有无料, 如果没有料wcs下发空箱旋转信号有料通知plc上提升机计量室
WmsPalletInfo? wmsPalletInfo = sqlSugarClient.Queryable<WmsPalletInfo>().First(it => it.PalletInfoCode == rfid);
if (wmsPalletInfo != null && wmsPalletInfo.Amount > 0 && wmsPalletInfo.TonerFlag == 1) //携带色粉
{
//2空箱转运
_logger.Info($"1#移栽===={rfid}携带色粉,空箱转运");
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("1#移栽平台任务"), 2);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运进计量室RFID读取"), false);
}
if (wmsPalletInfo != null && wmsPalletInfo.Amount > 0 && wmsPalletInfo.TonerFlag == 0) //携带满料
{
//1#移栽平台任务1上提升机,2空箱转运
_logger.Info($"1#移栽===={rfid}携带满料,去提升机计量室");
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("1#移栽平台任务"), 1);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运进计量室RFID读取"), false);
}
else if (wmsPalletInfo != null && wmsPalletInfo.Amount == 0)
{
//1#移栽平台任务1上提升机,2空箱转运
_logger.Info($"1#移栽===={rfid}空箱,空箱转运");
workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("1#移栽平台任务"), 2);
workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运进计量室RFID读取"), false);
}
}
else
{
//没读到,当成空箱子旋转一圈
//1#移栽平台任务1上提升机,2空箱转运
// _logger.Info($"1#移栽====没读到,空箱转运");
//workShop2Plc.writeInt16ByAddress(StaticData.GetPlcAddress("1#移栽平台任务"), 2);
//workShop2Plc.writeBoolByAddress(StaticData.GetPlcAddress("2#料箱运进计量室RFID读取"), false);
}
}
}
#endregion 连廊料箱在计量室连廊移栽处理流程wcs读RFID判断是否空箱空箱下plc信号旋转非空箱通知plc上提升机计量室
#region 色粉存放点空托盘派送至2#接驳位-----暂时不使用
/////如果色粉存放点可用空库位小于等于2个并且有空托盘在库位判断2#缓存链条线库存容量3低于2个并且无 从3#接驳位到2#接驳位的送料任务或 色粉存放点到2#缓存链条线任务,
/////2.生成色粉存放点到2#缓存链条线任务
//int canUseAmount = sqlSugarClient.Queryable<WcsBaseEquip>().Count(it => it.EquipType == 7 && it.EquipStatus == 0 && string.IsNullOrEmpty(it.ContainerCode));
////判断色粉存放处是否有空托盘
//WcsBaseEquip? startEquip = sqlSugarClient.Queryable<WcsBaseEquip>().InnerJoin<WmsPalletInfo>(
// (wbe, wpi) => wbe.ContainerCode == wpi.PalletInfoCode && wpi.Amount == 0 && wbe.EquipStatus == 0)
// .Where(wbe => wbe.EquipType == 7 && !string.IsNullOrEmpty(wbe.ContainerCode)).First();
//if (canUseAmount < 2 && startEquip != null)
//{
// int cacheLineAmount = workShop2Plc.readInt16ByAddress(StaticData.GetPlcAddress("2#缓存链条线库存数"));
// bool hasTask = sqlSugarClient.Queryable<WcsTask>().Any(it => it.TaskType == StaticTaskType.EmptyReturnFromTonerTask || it.TaskType == StaticTaskType.TransferMaterialMetrologyRoomBoxTask);
// if (cacheLineAmount < 2 && !hasTask)
// {
// try
// {
// sqlSugarClient.AsTenant().BeginTran();
// WcsTask task = new WcsTask();
// task.TaskType = StaticTaskType.EmptyReturnFromTonerTask;
// task.CurrPointNo = startEquip.AgvPositionCode;
// task.EndPointNo = "2DeliverMetrologyRoomPoint";
// task.TaskStatus = 0;
// task.CreatedTime = DateTime.Now;
// task.CreatedBy = "wcs";
// task.TaskName = "色粉存放点空托盘派送至2#接驳位";
// task.PalletInfoCode = startEquip.ContainerCode;
// int id = sqlSugarClient.Insertable(task).ExecuteReturnIdentity();
// WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(task);
// wcsTaskLog.Id = id;
// startEquip.EquipStatus = 1;
// sqlSugarClient.Updateable(startEquip).ExecuteCommand();
// sqlSugarClient.Insertable(wcsTaskLog).ExecuteCommand();
// sqlSugarClient.AsTenant().CommitTran();
// _logger.Agv($"生成{task.TaskName},起点:{task.CurrPointNo},终点:{task.EndPointNo}");
// }
// catch (Exception ex)
// {
// sqlSugarClient.AsTenant().RollbackTran();
// _logger.Error($"色粉存放点空托盘派送至2#接驳位任务提交事务异常{ex.Message}");
// }
// }
//}
#endregion 色粉存放点空托盘派送至2#接驳位-----暂时不使用
}
});
catch (Exception ex)
{
_logger.Error($"ListeningWorkShop2TransplantingMachine方法异常:" + ex.StackTrace);
}
finally
{
Thread.Sleep(1000 * 2);
}
}
}
#region 任务流程

@ -121,6 +121,7 @@ namespace SlnMesnac.WPF.ViewModel
private void Init()
{
StartCheckStatus();
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromSeconds(1);
_timer.Tick += Timer_Tick;

Loading…
Cancel
Save