diff --git a/SlnMesnac.Business/base/BaseBusiness.cs b/SlnMesnac.Business/base/BaseBusiness.cs
index 610c6f4..7efc3b1 100644
--- a/SlnMesnac.Business/base/BaseBusiness.cs
+++ b/SlnMesnac.Business/base/BaseBusiness.cs
@@ -156,6 +156,36 @@ namespace SlnMesnac.Business.@base
}
}
+ ///
+ /// 使用---根据RFID Key读取RFID信息
+ ///
+ ///
+ ///
+ ///
+ public string ReadEpcStrByRfidKey(string rfidKey)
+ {
+ try
+ {
+ string epcStr = string.Empty;
+ var rfidEquip = GetRfidByKey(rfidKey);
+ if (rfidEquip == null || rfidEquip.GetOnlineStatus() == false)
+ {
+ return "";
+ }
+
+ List 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 "";
+ }
+ }
+
///
/// 使用---根据RFID Key读取光电信号
/// 有物体返回true
diff --git a/SlnMesnac.Rfid/Factory/RflyFactory.cs b/SlnMesnac.Rfid/Factory/RflyFactory.cs
index 401cd97..30642ec 100644
--- a/SlnMesnac.Rfid/Factory/RflyFactory.cs
+++ b/SlnMesnac.Rfid/Factory/RflyFactory.cs
@@ -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 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 tagInfoList = Device_DealTagInfoList(resultBuffer);
+
+ return tagInfoList;
+ }
+ catch (Exception e)
+ {
+ throw new InvalidOperationException($"按时间段盘点异常:{e.Message}");
+ }
+ }
+
///
/// 使用--异步获取光电状态
///
diff --git a/SlnMesnac.Rfid/RfidAbsractFactory.cs b/SlnMesnac.Rfid/RfidAbsractFactory.cs
index a5d5d03..8f47017 100644
--- a/SlnMesnac.Rfid/RfidAbsractFactory.cs
+++ b/SlnMesnac.Rfid/RfidAbsractFactory.cs
@@ -79,6 +79,8 @@ namespace SlnMesnac.Rfid
///
public abstract Task> GetRFIDAsync(int timeout = 5000);
+ public abstract List GetRFID(int timeout = 3000);
+
///
/// 使用--异步获取光电状态
///
diff --git a/SlnMesnac.WCS/MainCentralControl.cs b/SlnMesnac.WCS/MainCentralControl.cs
index b6e0959..3423750 100644
--- a/SlnMesnac.WCS/MainCentralControl.cs
+++ b/SlnMesnac.WCS/MainCentralControl.cs
@@ -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
});
}
+ ///
+ /// 获取agv状态
+ ///
+ private void GetAgvStatus()
+ {
+ List agvEquipList = SqlSugarClient.Queryable().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
///
diff --git a/SlnMesnac.WCS/WCS/BearAgv.cs b/SlnMesnac.WCS/WCS/BearAgv.cs
index 44191aa..30f87c5 100644
--- a/SlnMesnac.WCS/WCS/BearAgv.cs
+++ b/SlnMesnac.WCS/WCS/BearAgv.cs
@@ -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().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().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().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);
diff --git a/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs b/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs
index 32c5c30..b69ab8c 100644
--- a/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs
+++ b/SlnMesnac.WCS/WCS/CreateTaskByRecord.cs
@@ -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();
}
///
@@ -136,39 +139,38 @@ namespace SlnMesnac.WCS.WCS
///
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给 旋转移栽方向信号 写2,plc将料箱运到 缓存皮带线。
WmsPalletInfo? wmsPalletInfo = sqlSugarClient.Queryable().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().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().Count(it => it.EquipType == 7 && it.EquipStatus == 0 && string.IsNullOrEmpty(it.ContainerCode));
- ////判断色粉存放处是否有空托盘
- //WcsBaseEquip? startEquip = sqlSugarClient.Queryable().InnerJoin(
- // (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().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(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().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().Count(it => it.EquipType == 7 && it.EquipStatus == 0 && string.IsNullOrEmpty(it.ContainerCode));
+ ////判断色粉存放处是否有空托盘
+ //WcsBaseEquip? startEquip = sqlSugarClient.Queryable().InnerJoin(
+ // (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().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(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 任务流程
diff --git a/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs b/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs
index 988365c..0dbe168 100644
--- a/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs
+++ b/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs
@@ -121,6 +121,7 @@ namespace SlnMesnac.WPF.ViewModel
private void Init()
{
StartCheckStatus();
+
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromSeconds(1);
_timer.Tick += Timer_Tick;