Commit d87f6ae7 LN

出库料架切换修改

1 个父辈 50093b71
此文件类型无法预览
......@@ -215,6 +215,7 @@ namespace OnlineStore.DeviceLibrary
private int LastWidth = 0;
private int LastHeight = 0;
private string CurrShelfID = "";
private string LastRfidID = "";//服务器发送的出库rfid
#region 入库
private void ClearLastTrayInfo()
......@@ -258,6 +259,7 @@ namespace OnlineStore.DeviceLibrary
InOutStoreLog("料架取料:" + MoveInfo.SLog + " 叉子后退到待机点P1, 重置盘信息");
ACAxisMove(Config.InOut_Axis, Config.InOutAxis_P1_Position, Config.InOutAxis_P1_Speed);
ClearLastTrayInfo();
LastRfidID = "";
}
......@@ -313,8 +315,8 @@ namespace OnlineStore.DeviceLibrary
{
//读取RFID
RFIDData data = RFIDManager.ReadRFID(Config.RFID_IP, true);
LogUtil.info(Name + "更新当前料架号【" + data.NumStr() + "】");
CurrShelfID = data.NumStr();
LogUtil.info(Name + "更新当前料架号CurrShelfID=【" + CurrShelfID + "】,LastRfidID=【" + LastRfidID+"】");
}
private void StartMoveToBag()
......@@ -820,15 +822,16 @@ namespace OnlineStore.DeviceLibrary
if (IOValue(IO_Type.LineTake_Check).Equals(IO_VALUE.HIGH))
{
if (IsRightShelfId(CurrShelfID, MoveInfo.MoveParam.realRfid))
// if (IsRightShelfId(CurrShelfID, MoveInfo.MoveParam.realRfid))
if (MoveInfo.MoveParam.rfid.Equals(LastRfidID))
{
LogUtil.error("入库,当前料架【" + CurrShelfID + "】和目标料架【" + MoveInfo.MoveParam.rfid + "," + MoveInfo.MoveParam.realRfid + "】 是同一个料架,开始取料");
LogUtil.error("出库 【" + LastRfidID + "】 【" + MoveInfo.MoveParam.rfid + "," + MoveInfo.MoveParam.realRfid + "】 同料架,开始取料");
SO_03_ToBagPosition();
return;
}
else
{
LogUtil.error("入库,当前料架【" + CurrShelfID + "】和目标料架【" + MoveInfo.MoveParam.rfid + "," + MoveInfo.MoveParam.realRfid + "】不是同一个料架,送出当前料架,稍后重新出库");
LogUtil.error("出库 【" + LastRfidID + "】 【" + MoveInfo.MoveParam.rfid + "," + MoveInfo.MoveParam.realRfid + "】不同料架,送出当前料架,稍后重新出库");
//送出料架,并且记录出库信息,等会重新出库
StartShelfOut();
......@@ -841,12 +844,12 @@ namespace OnlineStore.DeviceLibrary
else if (IOValue(IO_Type.LineTake_Check).Equals(IO_VALUE.LOW) && (!MoveInfo.MoveParam.rfid.Equals("")))
{
string mark = GetMarkInfo();
// string rfid = MoveInfo.MoveParam.rfid;
// string rfid = MoveInfo.MoveParam.rfid;
MoveInfo.NextMoveStep(StoreMoveStep.BI_00_ReadyShelf);
InOutStoreLog("出库 " + MoveInfo.SLog + ": 通知agv调度准备带料架的agv[" + mark + "],等待agv到达或检测到料架信号,进出轴到P1");
InOutBackToP1(MoveInfo.MoveParam.MoveP.InOut_P1);
//需要先叫agv到达
AgvClient.SetStatus(Config.AgvNodeName, mark,MoveInfo.MoveParam.rfid , ClientAction.NeedEnter, ClientLevel.High, true);
AgvClient.SetStatus(Config.AgvNodeName, mark, MoveInfo.MoveParam.rfid, ClientAction.NeedEnter, ClientLevel.High, true);
MoveInfo.WaitList.Add(WaitResultInfo.WaitAgvAction((int)ClientAction.Arrive));
}
else
......@@ -931,7 +934,7 @@ namespace OnlineStore.DeviceLibrary
string msg = StoreManager.PutShelfFinished(Name, MoveInfo.MoveParam.WareCode, CurrShelfID, posLoc.ToString(), out serverShelfData);
if (String.IsNullOrEmpty(msg).Equals(false))
{
LogUtil.error(Name + "【" + MoveInfo.MoveParam.WareCode + "】【" + CurrShelfID + "】【" + posLoc + "】PutShelfFinished 结果:" + msg);
LogUtil.error(Name + "【" + MoveInfo.MoveParam.WareCode + "】【" + CurrShelfID + "】【" + posLoc + "】【"+LastRfidID+"】PutShelfFinished 结果:" + msg);
serverShelfData = null;
}
}
......@@ -941,7 +944,7 @@ namespace OnlineStore.DeviceLibrary
string msg = StoreManager.UpdateTrayLoc(Name, MoveInfo.MoveParam.WareCode, CurrShelfID + "@" + posLoc.ToString(), out newTaskCount);
if (String.IsNullOrEmpty(msg).Equals(false))
{
LogUtil.error(Name + "【" + MoveInfo.MoveParam.WareCode + "】【" + CurrShelfID + "】【" + posLoc + "】UpdateTrayLoc 结果:" + msg);
LogUtil.error(Name + "【" + MoveInfo.MoveParam.WareCode + "】【" + CurrShelfID + "】【" + posLoc + "】【" + LastRfidID + "】UpdateTrayLoc 结果:" + msg);
serverShelfData = null;
}
if (newTaskCount > MoveInfo.MoveParam.taskCount)
......@@ -982,6 +985,7 @@ namespace OnlineStore.DeviceLibrary
// InOutStoreLog("出库完成,料架【" + CurrShelfID + "】没有剩余位置,送出料架");
// isNeedSend = true;
//}
string logName = "【" + CurrShelfID + "】【" + LastRfidID + "】";
//只有rfid不为空才需要送出料架
if (String.IsNullOrEmpty(MoveInfo.MoveParam.rfid))
{
......@@ -992,18 +996,18 @@ namespace OnlineStore.DeviceLibrary
{
if (serverShelfData.packageEmpty <= 0)
{
InOutStoreLog("出库完成,料架【" + CurrShelfID + "】没有位置,packageEmpty=" + serverShelfData.packageEmpty + ",送出料架");
InOutStoreLog("出库完成,料架"+ logName + "没有位置,packageEmpty=" + serverShelfData.packageEmpty + ",送出料架");
isNeedSend = true;
}
else if ((serverShelfData.cutPackageTask + serverShelfData.packageTask) <= 0)
{
InOutStoreLog("出库完成,料架【" + CurrShelfID + "】没有出库任务,cutPackageTask=" + serverShelfData.cutPackageTask + ",packageTask=" + serverShelfData.packageTask + ",送出料架");
InOutStoreLog("出库完成,料架" + logName + "没有出库任务,cutPackageTask=" + serverShelfData.cutPackageTask + ",packageTask=" + serverShelfData.packageTask + ",送出料架");
isNeedSend = true;
}
}
else if (MoveInfo.MoveParam.taskCount <=0)
{
InOutStoreLog("出库完成,料架【" + CurrShelfID + "】没有出库任务,taskCount=" + MoveInfo.MoveParam.taskCount + " 送出料架");
InOutStoreLog("出库完成,料架" + logName + "没有出库任务,taskCount=" + MoveInfo.MoveParam.taskCount + " 送出料架");
isNeedSend = true;
}
if (isNeedSend)
......@@ -1015,14 +1019,14 @@ namespace OnlineStore.DeviceLibrary
TimeSpan span = DateTime.Now - startOutStoreTime;
string posId = MoveInfo.MoveParam != null ? MoveInfo.MoveParam.PosID : "";
storeStatus = StoreStatus.StoreOnline;
LogInfo(" 【" + posId + "】 整个出库流程结束,耗时【" + FormUtil.GetSpanStr(span) + "】!");
LogInfo(" 【" + posId + "】 " + logName + " 整个出库流程结束,耗时【" + FormUtil.GetSpanStr(span) + "】!");
MoveEndToRuningStatus();
AutoInout.InOutEndProcess(this, StoreMoveType.OutStore);
if (!String.IsNullOrEmpty(MoveInfo.MoveParam.rfid))
{
if (StoreManager.Store.AutoShelfInstore)
{
LogInfo(" 料架【" + CurrShelfID + "】还有出库任务,设置 AutoShelfInstore = false");
LogInfo(" 料架" + logName + "还有出库任务,设置 AutoShelfInstore = false");
ConfigAppSettings.SaveValue(Setting_Init.AutoShelfInstore, 0);
StoreManager.Store.AutoShelfInstore = false;
}
......
......@@ -107,12 +107,18 @@ namespace OnlineStore.DeviceLibrary
InOutStoreLog(moveName + MoveInfo.SLog + "线体停止转动,定位装置上升,读取料架编号,设置状态为None");
AgvClient.SetStatus(Config.AgvNodeName);
// CylinderMove(MoveInfo, IO_Type.LocationCylinder_Down, IO_Type.LocationCylinder_Up);
UpdateShelfId();
if (!instoreShelf)
{
LastRfidID = MoveInfo.MoveParam.rfid;
InOutStoreLog("出库 " + MoveInfo.SLog + ":叉子进入库位中, 进出轴至P3(库位取放料点) ");
ACAxisMove(Config.InOut_Axis, MoveInfo.MoveParam.MoveP.InOut_P3, Config.InOutAxis_P3_Speed);
}
else
{
LastRfidID = "";
}
UpdateShelfId();
}
else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_08_LocationUp))
{
......@@ -344,6 +350,7 @@ namespace OnlineStore.DeviceLibrary
//EmprtShelfList = new ConcurrentQueue<string>();
InOutStoreLog(moveName + MoveInfo.SLog + ":停止转动,送出料架结束 ,设置状态为None,清空当前料架:"+CurrShelfID);
CurrShelfID = "";
LastRfidID = "";
AgvClient.SetStatus(Config.AgvNodeName);
}
}
......
......@@ -132,17 +132,18 @@ namespace OnlineStore.DeviceLibrary
{
continue;
}
LogUtil.info(deviceName + " 【" + cameraName + "】开始打开相机获取图片");
DateTime startTime = DateTime.Now;
LogUtil.info(deviceName + " 【" + cameraName + "】开始取图片");
using (Bitmap bitmap = GetCamerImage(cameraName))
{
if (bitmap == null)
{
LogUtil.error(deviceName + " 【" + cameraName + "】取图片失败[" + Camera._cam.ErrInfo + "],关闭相机");
LogUtil.error(deviceName + " 【" + cameraName + "】取图片失败[" + Camera._cam.ErrInfo + "],关闭相机");
CloseCamera(cameraName);
continue;
}
LogUtil.info(deviceName + " 【" + cameraName + "】获取图片完成,开始转换图片,并扫码");
LogUtil.info(deviceName + " 【" + cameraName + "】取图片完成,开始转换并扫码");
System.Threading.Thread.Sleep(1);
//转换托盘大概100-150ms,不打印日志
Bitmap bit = new Bitmap(bitmap);
......@@ -176,7 +177,7 @@ namespace OnlineStore.DeviceLibrary
{
SaveImageToFile(deviceName, cameraName, bit);
}
LogUtil.info(deviceName + " 【" + cameraName + "】扫码完成:" + r);
LogUtil.info(deviceName + " 【" + cameraName + "】扫码完成【" + FormUtil.GetSpanStr(DateTime.Now - startTime) + "】:" + r);
bit.Dispose();
ho_Image.Dispose();
bitmap.Dispose();
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!