Commit e8dd2942 张东亮

更新包装仓入库逻辑(针对料盘尺寸与料仓不匹配情况)

1 个父辈 3e714c06
此文件的差异太大,无法显示。
...@@ -49,7 +49,7 @@ namespace OnlineStore.ACPackingStore ...@@ -49,7 +49,7 @@ namespace OnlineStore.ACPackingStore
{ {
if (BoxBean == null) if (BoxBean == null)
{ {
LogUtil.error( "找不到对应的料仓"); LogUtil.error("找不到对应的料仓");
this.Close(); this.Close();
return; return;
} }
...@@ -105,12 +105,13 @@ namespace OnlineStore.ACPackingStore ...@@ -105,12 +105,13 @@ namespace OnlineStore.ACPackingStore
this.ShowInTaskbar = true; this.ShowInTaskbar = true;
try try
{ {
int num =Convert.ToInt32( BoxBean.CID.Substring(BoxBean.CID.Length - 2, 2)); int num = Convert.ToInt32(BoxBean.CID.Substring(BoxBean.CID.Length - 2, 2));
if (num >= 18 && num <= 24) if (num >= 18 && num <= 24)
{ {
numericUpDown1.Value = num; numericUpDown1.Value = num;
} }
}catch(Exception ex) }
catch (Exception ex)
{ {
} }
...@@ -155,11 +156,11 @@ namespace OnlineStore.ACPackingStore ...@@ -155,11 +156,11 @@ namespace OnlineStore.ACPackingStore
lblWarnMsg.Text = BoxBean.GetWarnMsg(); lblWarnMsg.Text = BoxBean.GetWarnMsg();
lblMoveInfo.Text = BoxBean.GetMoveStr(); lblMoveInfo.Text = BoxBean.GetMoveStr();
if ( BoxBean.MoveInfo.MoveType.Equals(StoreMoveType.InStore)) if (BoxBean.MoveInfo.MoveType.Equals(StoreMoveType.InStore))
{ {
lblMoveEquipInfo.Text = "入库:" + BoxBean.MoveInfo.MoveParam.ToShortStr(); lblMoveEquipInfo.Text = "入库:" + BoxBean.MoveInfo.MoveParam.ToShortStr();
} }
else if (BoxBean.MoveInfo.MoveType.Equals(StoreMoveType.OutStore) ) else if (BoxBean.MoveInfo.MoveType.Equals(StoreMoveType.OutStore))
{ {
lblMoveEquipInfo.Text = "出库:" + BoxBean.MoveInfo.MoveParam.ToShortStr(); lblMoveEquipInfo.Text = "出库:" + BoxBean.MoveInfo.MoveParam.ToShortStr();
} }
...@@ -241,6 +242,14 @@ namespace OnlineStore.ACPackingStore ...@@ -241,6 +242,14 @@ namespace OnlineStore.ACPackingStore
// lblWarnMsg.Text = ""; // lblWarnMsg.Text = "";
btnStartAuTo.Text = "开始自动出入库"; btnStartAuTo.Text = "开始自动出入库";
} }
if(BoxBean.CompressSigTimeOut)
{
btnClearcurState.Visible = true;
}
else
{
btnClearcurState.Visible = false;
}
} }
private void btnOutStore_Click(object sender, EventArgs e) private void btnOutStore_Click(object sender, EventArgs e)
...@@ -250,7 +259,7 @@ namespace OnlineStore.ACPackingStore ...@@ -250,7 +259,7 @@ namespace OnlineStore.ACPackingStore
string selectPositionNum = cmbPosition.Text; string selectPositionNum = cmbPosition.Text;
string sleShelfNum = cmbShelfPosition.Text; string sleShelfNum = cmbShelfPosition.Text;
LineMoveP ktk = LoadPostion(); LineMoveP ktk = LoadPostion();
InOutParam param = new InOutParam("", selectPositionNum,sleShelfNum, ktk); InOutParam param = new InOutParam("", selectPositionNum, sleShelfNum, ktk);
BoxBean.StartOutStoreMove(param); BoxBean.StartOutStoreMove(param);
} }
else else
...@@ -614,7 +623,7 @@ namespace OnlineStore.ACPackingStore ...@@ -614,7 +623,7 @@ namespace OnlineStore.ACPackingStore
string poText = cmbPosition.Text; string poText = cmbPosition.Text;
BoxBean.AutoInout.autoMsg = "自动出库:" + poText; BoxBean.AutoInout.autoMsg = "自动出库:" + poText;
LogUtil.info( BoxBean.Name + "开启自动出入库模式,开始位置【" + poText + "】(索引=" + currIndex + "),间隔=" + jiange + ",入库开始!"); LogUtil.info(BoxBean.Name + "开启自动出入库模式,开始位置【" + poText + "】(索引=" + currIndex + "),间隔=" + jiange + ",入库开始!");
//BoxBean.StartOutStoreMove(new InOutStoreParam("", poText)); //BoxBean.StartOutStoreMove(new InOutStoreParam("", poText));
BoxBean.StartInStoreMove(new InOutParam("", poText, cmbShelfPosition.Text)); BoxBean.StartInStoreMove(new InOutParam("", poText, cmbShelfPosition.Text));
...@@ -661,7 +670,7 @@ namespace OnlineStore.ACPackingStore ...@@ -661,7 +670,7 @@ namespace OnlineStore.ACPackingStore
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error( "出错:" + ex.StackTrace); LogUtil.error("出错:" + ex.StackTrace);
} }
} }
...@@ -806,8 +815,8 @@ namespace OnlineStore.ACPackingStore ...@@ -806,8 +815,8 @@ namespace OnlineStore.ACPackingStore
private void btnScanTest_Click(object sender, EventArgs e) private void btnScanTest_Click(object sender, EventArgs e)
{ {
BoxBean. IOMove(IO_Type.Camera_Led, IO_VALUE.HIGH); BoxBean.IOMove(IO_Type.Camera_Led, IO_VALUE.HIGH);
List<string> codes = CodeManager.CameraScan(BoxBean.Config.GetCameraList(),BoxBean.Name); List<string> codes = CodeManager.CameraScan(BoxBean.Config.GetCameraList(), BoxBean.Name);
BoxBean.IOMove(IO_Type.Camera_Led, IO_VALUE.LOW); BoxBean.IOMove(IO_Type.Camera_Led, IO_VALUE.LOW);
string result = ""; string result = "";
if (codes.Count > 0) if (codes.Count > 0)
...@@ -822,7 +831,7 @@ namespace OnlineStore.ACPackingStore ...@@ -822,7 +831,7 @@ namespace OnlineStore.ACPackingStore
else else
{ {
MessageBox.Show("未扫到二维码" ); MessageBox.Show("未扫到二维码");
} }
} }
...@@ -970,7 +979,7 @@ namespace OnlineStore.ACPackingStore ...@@ -970,7 +979,7 @@ namespace OnlineStore.ACPackingStore
private void btnComP4_Click(object sender, EventArgs e) private void btnComP4_Click(object sender, EventArgs e)
{ {
int value = FormUtil.GetIntValue(txtComP4 ); int value = FormUtil.GetIntValue(txtComP4);
AxisABSMove(BoxBean.Config.Comp_Axis, value, BoxBean.Config.CompAxis_P4_Speed); AxisABSMove(BoxBean.Config.Comp_Axis, value, BoxBean.Config.CompAxis_P4_Speed);
} }
...@@ -1005,7 +1014,7 @@ namespace OnlineStore.ACPackingStore ...@@ -1005,7 +1014,7 @@ namespace OnlineStore.ACPackingStore
{ {
return; return;
} }
DialogResult result = MessageBox.Show("确定将库位改为【4D" + num.ToString().PadLeft(2,'0') + "XXXXXX】的格式?", "", MessageBoxButtons.YesNo); DialogResult result = MessageBox.Show("确定将库位改为【4D" + num.ToString().PadLeft(2, '0') + "XXXXXX】的格式?", "", MessageBoxButtons.YesNo);
if (result.Equals(DialogResult.Yes)) if (result.Equals(DialogResult.Yes))
{ {
string appPath = Application.StartupPath; string appPath = Application.StartupPath;
...@@ -1060,7 +1069,21 @@ namespace OnlineStore.ACPackingStore ...@@ -1060,7 +1069,21 @@ namespace OnlineStore.ACPackingStore
{ {
int value = FormUtil.GetIntValue(txtInoutP101); int value = FormUtil.GetIntValue(txtInoutP101);
AxisABSMove(BoxBean.Config.InOut_Axis, value, BoxBean.Config.InOutAxis_P101_Speed ); AxisABSMove(BoxBean.Config.InOut_Axis, value, BoxBean.Config.InOutAxis_P101_Speed);
}
/// <summary>
/// 忽略料叉信号,使出库继续运行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnClearcurState_Click(object sender, EventArgs e)
{
if (BoxBean.MoveInfo.MoveStep.Equals(StoreMoveStep.SO_07_CheckComSig))
{
BoxBean.IsIgnoreComSig = true;
BoxBean.MoveInfo.EndStepWait();
}
} }
} }
} }
...@@ -15,6 +15,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -15,6 +15,7 @@ namespace OnlineStore.DeviceLibrary
{ {
#region 出入库结果验证 #region 出入库结果验证
public bool CompressSigTimeOut = false;
private void CheckWait() private void CheckWait()
{ {
List<WaitResultInfo> list = MoveInfo.WaitList; List<WaitResultInfo> list = MoveInfo.WaitList;
...@@ -81,6 +82,10 @@ namespace OnlineStore.DeviceLibrary ...@@ -81,6 +82,10 @@ namespace OnlineStore.DeviceLibrary
isOk = false; isOk = false;
break; break;
} }
if(wait.IoType.Equals(IO_Type.Compress_Check) && MoveInfo.MoveStep.Equals(StoreMoveStep.SO_07_CheckComSig))
{
CompressSigTimeOut = true;
}
} }
} }
else if (wait.WaitType.Equals(WaitEnum.W003_Time)) else if (wait.WaitType.Equals(WaitEnum.W003_Time))
...@@ -351,6 +356,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -351,6 +356,13 @@ namespace OnlineStore.DeviceLibrary
ACAxisMove(Config.Middle_Axis, MoveInfo.MoveParam.MoveP.Middle_P11, Config.MiddleAxis_P1_Speed); ACAxisMove(Config.Middle_Axis, MoveInfo.MoveParam.MoveP.Middle_P11, Config.MiddleAxis_P1_Speed);
} }
private void StartMoveTrayBack(string str = "料盘不属于该仓库")
{
MoveInfo.NextMoveStep(StoreMoveStep.SO_08_ToShelfPosition);
InOutStoreLog("送出料盘 " + MoveInfo.SLog + ":" + str + ",走到料架位置,旋转轴至P101,升降轴至P102");
ACAxisMove(Config.UpDown_Axis, MoveInfo.MoveParam.MoveP.UpDown_HP102, Config.UpDownAxis_P102_Speed);
ACAxisMove(Config.Middle_Axis, MoveInfo.MoveParam.MoveP.Middle_P101, Config.MiddleAxis_P101_Speed);
}
protected override void InStoreProcess() protected override void InStoreProcess()
{ {
LineMoveP moveP = MoveInfo.MoveParam.MoveP; LineMoveP moveP = MoveInfo.MoveParam.MoveP;
...@@ -363,14 +375,34 @@ namespace OnlineStore.DeviceLibrary ...@@ -363,14 +375,34 @@ namespace OnlineStore.DeviceLibrary
return; return;
} }
#region 料架取料盘扫码获取POSID #region 料架取料盘扫码获取POSID
if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_10_StartGetTray)) if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_10_StartGetTray))
{ {
if(MoveInfo.IsShelfLocked)
{
if (MoveInfo.NextLockedShelfPos())
{
//新的料架库位
startInStoreTime = DateTime.Now;
MoveInfo.SingleInstore = false;
MoveInfo.NextMoveStep(StoreMoveStep.BI_11_InoutToP1);
InOutStoreLog("料架取料 " + MoveInfo.SLog + ":叉子后退到待机点P1, 重置盘信息");
ACAxisMove(Config.InOut_Axis, Config.InOutAxis_P1_Position, Config.InOutAxis_P1_Speed);
ClearLastTrayInfo();
}
else
{
//所有料盘已取料完成,送出料架
StartShelfOut();
}
}
else
{
if (MoveInfo.NextShelfPos()) if (MoveInfo.NextShelfPos())
{ {
//新的料架库位 //新的料架库位
startInStoreTime = DateTime.Now; startInStoreTime = DateTime.Now;
MoveInfo.SingleInstore = false;
MoveInfo.NextMoveStep(StoreMoveStep.BI_11_InoutToP1); MoveInfo.NextMoveStep(StoreMoveStep.BI_11_InoutToP1);
InOutStoreLog("料架取料 " + MoveInfo.SLog + ":叉子后退到待机点P1, 重置盘信息"); InOutStoreLog("料架取料 " + MoveInfo.SLog + ":叉子后退到待机点P1, 重置盘信息");
ACAxisMove(Config.InOut_Axis, Config.InOutAxis_P1_Position, Config.InOutAxis_P1_Speed); ACAxisMove(Config.InOut_Axis, Config.InOutAxis_P1_Position, Config.InOutAxis_P1_Speed);
...@@ -382,6 +414,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -382,6 +414,8 @@ namespace OnlineStore.DeviceLibrary
StartShelfOut(); StartShelfOut();
} }
} }
}
else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_11_InoutToP1)) else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_11_InoutToP1))
{ {
MoveInfo.NextMoveStep(StoreMoveStep.BI_12_MoveToShelf); MoveInfo.NextMoveStep(StoreMoveStep.BI_12_MoveToShelf);
...@@ -443,9 +477,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -443,9 +477,9 @@ namespace OnlineStore.DeviceLibrary
} }
else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_17_InoutBack)) else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_17_InoutBack))
{ {
if (MoveInfo.SingleInstore) if (MoveInfo.SingleInstore || MoveInfo.IsShelfLocked)
{ {
//单盘入库,不需要扫码 //单盘入库或者该料架已锁定库位,不需要扫码
StartMoveToBag(); StartMoveToBag();
} }
else else
...@@ -553,12 +587,20 @@ namespace OnlineStore.DeviceLibrary ...@@ -553,12 +587,20 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.NextMoveStep(StoreMoveStep.BI_30_SetInstoreParam); MoveInfo.NextMoveStep(StoreMoveStep.BI_30_SetInstoreParam);
InOutStoreLog("扫码 " + MoveInfo.SLog + ": 获取库位号"); InOutStoreLog("扫码 " + MoveInfo.SLog + ": 获取库位号");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(10000)); MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(10000));
bool result = GetPosIdByCode(); bool result = GetPosIdByCode(MoveInfo.currShelfIndex,out CodeResultType codeResult);
if (!result) if (!result)//获取库位失败
{
if(codeResult == CodeResultType.NotFoundPos)//库位不在该料仓,将该料盘放回料架
{
//MoveInfo.MoveParam.PosID = "";
StartMoveTrayBack("此料盘不属于该仓库,放回料架");
}
else//无法获取库位信息
{ {
MoveInfo.MoveParam.PosID = ""; MoveInfo.MoveParam.PosID = "";
StartSendTray("获取入库库位失败"); StartSendTray("获取入库库位失败");
} }
}
else else
{ {
MoveInfo.EndStepWait(); MoveInfo.EndStepWait();
...@@ -678,6 +720,38 @@ namespace OnlineStore.DeviceLibrary ...@@ -678,6 +720,38 @@ namespace OnlineStore.DeviceLibrary
} }
#endregion #endregion
#region 把料盘送回料架逻辑
else if (MoveInfo.MoveStep == StoreMoveStep.SO_08_ToShelfPosition)
{
MoveInfo.NextMoveStep(StoreMoveStep.SO_11_ToShelf);
InOutStoreLog("送出料盘 " + MoveInfo.SLog + ":叉子进出料口,进出轴至P101");
ACAxisMove(Config.InOut_Axis, moveP.InOut_P101, Config.InOutAxis_P101_Speed);
}
else if (MoveInfo.MoveStep == StoreMoveStep.SO_11_ToShelf)
{
MoveInfo.NextMoveStep(StoreMoveStep.SO_12_PutReel);
InOutStoreLog("送出料盘 " + MoveInfo.SLog + ":放下物品,压紧轴到P1,升降轴至P101,清空 taskData=null ");
ACAxisMove(Config.Comp_Axis, moveP.ComPress_P1, Config.CompAxis_P1_Speed);
ACAxisMove(Config.UpDown_Axis, moveP.UpDown_LP101, Config.UpDownAxis_P101_Speed);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
else if (MoveInfo.MoveStep == StoreMoveStep.SO_12_PutReel)
{
MoveInfo.NextMoveStep(StoreMoveStep.SO_13_InoutBack);
InOutStoreLog("送出料盘 " + MoveInfo.SLog + ":叉子从出料口返回, 进出轴到P1 ");
InOutBackToP1(moveP.InOut_P1);
}
else if (MoveInfo.MoveStep == StoreMoveStep.SO_13_InoutBack)
{
MoveInfo.NextMoveStep(StoreMoveStep.BI_10_StartGetTray);
InOutStoreLog("送出料盘结束 " + MoveInfo.SLog + ": 升降轴返回,升降轴到P1,顶升下降,继续循环料架取料盘");
ACAxisMove(Config.UpDown_Axis, moveP.UpDown_P1, Config.UpDownAxis_P1_Speed);
}
#endregion
//料架进入逻辑 //料架进入逻辑
else if (MoveInfo.MoveStep < StoreMoveStep.BI_10_StartGetTray) else if (MoveInfo.MoveStep < StoreMoveStep.BI_10_StartGetTray)
{ {
...@@ -747,7 +821,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -747,7 +821,7 @@ namespace OnlineStore.DeviceLibrary
#region 出库 #region 出库
private DateTime startOutStoreTime = DateTime.Now; private DateTime startOutStoreTime = DateTime.Now;
public bool IsIgnoreComSig = false; //忽略料叉压紧信号
private void StartExecuctOut(InOutParam param) private void StartExecuctOut(InOutParam param)
{ {
...@@ -910,19 +984,22 @@ namespace OnlineStore.DeviceLibrary ...@@ -910,19 +984,22 @@ namespace OnlineStore.DeviceLibrary
} }
else if (MoveInfo.MoveStep == StoreMoveStep.SO_06_InoutBack) else if (MoveInfo.MoveStep == StoreMoveStep.SO_06_InoutBack)
{ {
MoveInfo.NextMoveStep(StoreMoveStep.SO_08_ToShelfPosition); MoveInfo.NextMoveStep(StoreMoveStep.SO_07_CheckComSig);
InOutStoreLog("出库 " + MoveInfo.SLog + ":走到料架位置,旋转轴至P101,升降轴至P102, "); InOutStoreLog("出库 " + MoveInfo.SLog + ":等待料叉压紧信号 ");
ACAxisMove(Config.UpDown_Axis, moveP.UpDown_HP102, Config.UpDownAxis_P102_Speed); MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Compress_Check, IO_VALUE.HIGH));
ACAxisMove(Config.Middle_Axis, moveP.Middle_P101, Config.MiddleAxis_P101_Speed);
} }
else if (MoveInfo.MoveStep == StoreMoveStep.SO_07_LocationUp) else if (MoveInfo.MoveStep == StoreMoveStep.SO_07_CheckComSig)
{
if(IOValue(IO_Type.Compress_Check).Equals(IO_VALUE.HIGH) || IsIgnoreComSig)
{ {
IsIgnoreComSig = false;
CompressSigTimeOut = false;
MoveInfo.NextMoveStep(StoreMoveStep.SO_08_ToShelfPosition); MoveInfo.NextMoveStep(StoreMoveStep.SO_08_ToShelfPosition);
InOutStoreLog("出库 " + MoveInfo.SLog + ":走到料架位置,旋转轴至P101,升降轴至P102 "); InOutStoreLog("出库 " + MoveInfo.SLog + ":走到料架位置,旋转轴至P101,升降轴至P102 ");
ACAxisMove(Config.UpDown_Axis, moveP.UpDown_HP102, Config.UpDownAxis_P102_Speed); ACAxisMove(Config.UpDown_Axis, moveP.UpDown_HP102, Config.UpDownAxis_P102_Speed);
ACAxisMove(Config.Middle_Axis, moveP.Middle_P101, Config.MiddleAxis_P101_Speed); ACAxisMove(Config.Middle_Axis, moveP.Middle_P101, Config.MiddleAxis_P101_Speed);
}
} }
else if (MoveInfo.MoveStep == StoreMoveStep.SO_08_ToShelfPosition) else if (MoveInfo.MoveStep == StoreMoveStep.SO_08_ToShelfPosition)
{ {
......
...@@ -70,7 +70,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -70,7 +70,7 @@ namespace OnlineStore.DeviceLibrary
else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_04_WaitTakeSingle)) else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_04_WaitTakeSingle))
{ {
MoveInfo.NextMoveStep(StoreMoveStep.BI_05_LineStop); MoveInfo.NextMoveStep(StoreMoveStep.BI_05_LineStop);
InOutStoreLog(moveName + MoveInfo.SLog + "调用Agv "+ Config.AgvNodeName + " FinishEnter,取料位检测到信号,停止线体正转"); InOutStoreLog(moveName + MoveInfo.SLog + "调用Agv " + Config.AgvNodeName + " FinishEnter,取料位检测到信号,停止线体正转");
LineStop(); LineStop();
AgvClient.SetStatus(Config.AgvNodeName, mark, "", ClientAction.FinishEnter, ClientLevel.High, true); AgvClient.SetStatus(Config.AgvNodeName, mark, "", ClientAction.FinishEnter, ClientLevel.High, true);
...@@ -122,7 +122,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -122,7 +122,7 @@ namespace OnlineStore.DeviceLibrary
} }
MoveInfo.NextMoveStep(StoreMoveStep.BI_08_LocationUp); MoveInfo.NextMoveStep(StoreMoveStep.BI_08_LocationUp);
InOutStoreLog(moveName + MoveInfo.SLog + "停止线体,读取料架"+CurrShelfID+",设置"+ Config.AgvNodeName + "=None"); InOutStoreLog(moveName + MoveInfo.SLog + "停止线体,读取料架" + CurrShelfID + ",设置" + Config.AgvNodeName + "=None");
AgvClient.SetStatus(Config.AgvNodeName); AgvClient.SetStatus(Config.AgvNodeName);
// CylinderMove(MoveInfo, IO_Type.LocationCylinder_Down, IO_Type.LocationCylinder_Up); // CylinderMove(MoveInfo, IO_Type.LocationCylinder_Down, IO_Type.LocationCylinder_Up);
...@@ -147,7 +147,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -147,7 +147,7 @@ namespace OnlineStore.DeviceLibrary
else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_08_LocationUp)) else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BI_08_LocationUp))
{ {
MoveInfo.NextMoveStep(StoreMoveStep.BI_09_TopCylinderUp); MoveInfo.NextMoveStep(StoreMoveStep.BI_09_TopCylinderUp);
InOutStoreLog(moveName + MoveInfo.SLog + ""+CurrShelfID+"顶升上升"); InOutStoreLog(moveName + MoveInfo.SLog + "" + CurrShelfID + "顶升上升");
CylinderMove(MoveInfo, IO_Type.TopCylinder_Down, IO_Type.TopCylinder_Up); CylinderMove(MoveInfo, IO_Type.TopCylinder_Down, IO_Type.TopCylinder_Up);
if (!instoreShelf) if (!instoreShelf)
...@@ -162,8 +162,22 @@ namespace OnlineStore.DeviceLibrary ...@@ -162,8 +162,22 @@ namespace OnlineStore.DeviceLibrary
if (instoreShelf) if (instoreShelf)
{ {
MoveInfo.NextMoveStep(StoreMoveStep.BI_10_StartGetTray); MoveInfo.NextMoveStep(StoreMoveStep.BI_10_StartGetTray);
//获取料架的锁定状态
bool lockState = StoreManager.GetShelfLockInfo(Name,CID, CurrShelfID, out MoveInfo.shelfLockDatas);
if (lockState && MoveInfo.shelfLockDatas != null)
{
MoveInfo.IsShelfLocked = true;
InOutStoreLog(moveName + MoveInfo.SLog + "开始到料架指定位置取料盘 ");
}
else
{
MoveInfo.IsShelfLocked = false;
InOutStoreLog(moveName + MoveInfo.SLog + "开始循环料架取料盘 "); InOutStoreLog(moveName + MoveInfo.SLog + "开始循环料架取料盘 ");
} }
}
else else
{ {
MoveInfo.NextMoveStep(StoreMoveStep.SO_06_InoutBack); MoveInfo.NextMoveStep(StoreMoveStep.SO_06_InoutBack);
...@@ -185,13 +199,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -185,13 +199,13 @@ namespace OnlineStore.DeviceLibrary
if (MoveInfo.MoveType.Equals(StoreMoveType.OutStore)) if (MoveInfo.MoveType.Equals(StoreMoveType.OutStore))
{ {
string mark = GetMarkInfo(); string mark = GetMarkInfo();
InOutStoreLog("送出[" + CurrShelfID + "][" + mark+"]:顶升下降,调用 NeedLeave[" + mark + "][" + CurrShelfID + "] "); InOutStoreLog("送出[" + CurrShelfID + "][" + mark + "]:顶升下降,调用 NeedLeave[" + mark + "][" + CurrShelfID + "] ");
AgvClient.NeedLeave(Config.AgvNodeName, mark, CurrShelfID); AgvClient.NeedLeave(Config.AgvNodeName, mark, CurrShelfID);
} }
else else
{ {
InOutStoreLog("送出空料架["+CurrShelfID+"]:顶升下降,调用 NeedLeave[0][" + CurrShelfID + "],clearPutInRfid[" + CurrShelfID + "]"); InOutStoreLog("送出空料架[" + CurrShelfID + "]:顶升下降,调用 NeedLeave[0][" + CurrShelfID + "],clearPutInRfid[" + CurrShelfID + "]");
AgvClient.NeedLeave(Config.AgvNodeName,"0", CurrShelfID); AgvClient.NeedLeave(Config.AgvNodeName, "0", CurrShelfID);
StoreManager.clearPutInRfid(Name, CurrShelfID); StoreManager.clearPutInRfid(Name, CurrShelfID);
} }
CylinderMove(MoveInfo, IO_Type.TopCylinder_Up, IO_Type.TopCylinder_Down); CylinderMove(MoveInfo, IO_Type.TopCylinder_Up, IO_Type.TopCylinder_Down);
...@@ -233,7 +247,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -233,7 +247,7 @@ namespace OnlineStore.DeviceLibrary
private void ShelfOutProcess() private void ShelfOutProcess()
{ {
string mark = GetMarkInfo(); string mark = GetMarkInfo();
string moveName = "送出空料架["+CurrShelfID+"]"; string moveName = "送出空料架[" + CurrShelfID + "]";
if (MoveInfo.MoveType.Equals(StoreMoveType.OutStore)) if (MoveInfo.MoveType.Equals(StoreMoveType.OutStore))
{ {
...@@ -253,7 +267,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -253,7 +267,7 @@ namespace OnlineStore.DeviceLibrary
//MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(30000)); //MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(30000));
//等待agv到达 //等待agv到达
MoveInfo.WaitList.Add(WaitResultInfo.WaitAgvAction((int)ClientAction.Arrive)); MoveInfo.WaitList.Add(WaitResultInfo.WaitAgvAction((int)ClientAction.Arrive));
InOutStoreLog(moveName + MoveInfo.SLog + ":再次调用 NeedLeave["+mark+"][" + CurrShelfID + "],等待Agv " + Config.AgvNodeName + " Arrive ,最多等待1200秒"); InOutStoreLog(moveName + MoveInfo.SLog + ":再次调用 NeedLeave[" + mark + "][" + CurrShelfID + "],等待Agv " + Config.AgvNodeName + " Arrive ,最多等待1200秒");
AgvClient.SetStatus(Config.AgvNodeName, mark, CurrShelfID, ClientAction.NeedLeave, ClientLevel.High, true); AgvClient.SetStatus(Config.AgvNodeName, mark, CurrShelfID, ClientAction.NeedLeave, ClientLevel.High, true);
} }
else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BS_03_WaitEmptyAgv)) else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BS_03_WaitEmptyAgv))
...@@ -276,12 +290,12 @@ namespace OnlineStore.DeviceLibrary ...@@ -276,12 +290,12 @@ namespace OnlineStore.DeviceLibrary
//如果agv未到达,直接结束 //如果agv未到达,直接结束
MoveEndToRuningStatus(); MoveEndToRuningStatus();
//EmprtShelfList = new ConcurrentQueue<string>(); //EmprtShelfList = new ConcurrentQueue<string>();
InOutStoreLog(moveName + MoveInfo.SLog + ":等待Agv " + Config.AgvNodeName + " Arrive超时,检测不到料架信号,认为料架已离开,出库结束,设置"+ Config.AgvNodeName + "=None"); InOutStoreLog(moveName + MoveInfo.SLog + ":等待Agv " + Config.AgvNodeName + " Arrive超时,检测不到料架信号,认为料架已离开,出库结束,设置" + Config.AgvNodeName + "=None");
} }
else else
{ {
TimeSpan span = DateTime.Now - MoveInfo.LastSetpTime; TimeSpan span = DateTime.Now - MoveInfo.LastSetpTime;
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime((int)span.TotalMilliseconds+ 30000)); MoveInfo.WaitList.Add(WaitResultInfo.WaitTime((int)span.TotalMilliseconds + 30000));
InOutStoreLog(moveName + MoveInfo.SLog + ":等待Agv " + Config.AgvNodeName + " Arrive超时,再等待30秒"); InOutStoreLog(moveName + MoveInfo.SLog + ":等待Agv " + Config.AgvNodeName + " Arrive超时,再等待30秒");
} }
} }
...@@ -309,7 +323,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -309,7 +323,8 @@ namespace OnlineStore.DeviceLibrary
InOutStoreLog(moveName + MoveInfo.SLog + ":等待取料工位无信号 "); InOutStoreLog(moveName + MoveInfo.SLog + ":等待取料工位无信号 ");
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineTake_Check, IO_VALUE.LOW)); MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineTake_Check, IO_VALUE.LOW));
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineIn_Check, IO_VALUE.HIGH)); // MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineIn_Check, IO_VALUE.HIGH));
}else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BS_07_WaitShelfOut)) }
else if (MoveInfo.MoveStep.Equals(StoreMoveStep.BS_07_WaitShelfOut))
{ {
MoveInfo.NextMoveStep(StoreMoveStep.BS_08_WaitLineIn); MoveInfo.NextMoveStep(StoreMoveStep.BS_08_WaitLineIn);
InOutStoreLog(moveName + MoveInfo.SLog + ":等待 入料口有信号,最多等待30秒"); InOutStoreLog(moveName + MoveInfo.SLog + ":等待 入料口有信号,最多等待30秒");
...@@ -352,7 +367,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -352,7 +367,7 @@ namespace OnlineStore.DeviceLibrary
MoveEndToRuningStatus(); MoveEndToRuningStatus();
AgvClient.SetStatus(Config.AgvNodeName); AgvClient.SetStatus(Config.AgvNodeName);
//EmprtShelfList = new ConcurrentQueue<string>(); //EmprtShelfList = new ConcurrentQueue<string>();
InOutStoreLog(moveName + MoveInfo.SLog + ":料架"+ CurrShelfID + "已离开 ,设置"+ Config.AgvNodeName + "=None,清理rfid"); InOutStoreLog(moveName + MoveInfo.SLog + ":料架" + CurrShelfID + "已离开 ,设置" + Config.AgvNodeName + "=None,清理rfid");
RFIDManager.ReadRFID(Config.RFID_IP, true); RFIDManager.ReadRFID(Config.RFID_IP, true);
CurrShelfID = ""; CurrShelfID = "";
LastOutParam = new InOutParam(); LastOutParam = new InOutParam();
...@@ -428,7 +443,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -428,7 +443,7 @@ namespace OnlineStore.DeviceLibrary
} }
else else
{ {
LogUtil.error(Name + logN + " ,["+MoveInfo.MoveType+"]["+ MoveInfo.MoveStep + "]未找到相关处理"); LogUtil.error(Name + logN + " ,[" + MoveInfo.MoveType + "][" + MoveInfo.MoveStep + "]未找到相关处理");
} }
return false; return false;
...@@ -553,7 +568,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -553,7 +568,7 @@ namespace OnlineStore.DeviceLibrary
if (humBean.NeedGetTem()) if (humBean.NeedGetTem())
{ {
lineOperation.op = 5; lineOperation.op = 5;
LogUtil.error(Name+ "没有湿度预警范围,需要从服务器获取,发送OP=" + lineOperation.op,DeviceID+105); LogUtil.error(Name + "没有湿度预警范围,需要从服务器获取,发送OP=" + lineOperation.op, DeviceID + 105);
} }
string server = ConfigAppSettings.GetValue(Setting_Init.http_server); string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
Operation resultOperation = HttpHelper.Post(StoreManager.GetPostApi(server), lineOperation, false); Operation resultOperation = HttpHelper.Post(StoreManager.GetPostApi(server), lineOperation, false);
...@@ -607,7 +622,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -607,7 +622,7 @@ namespace OnlineStore.DeviceLibrary
int rfidLoc = FormUtil.GetIntData(data, ParamDefine.rfidLoc); int rfidLoc = FormUtil.GetIntData(data, ParamDefine.rfidLoc);
string barcode = data.ContainsKey(ParamDefine.barcode) ? data[ParamDefine.barcode] : ""; string barcode = data.ContainsKey(ParamDefine.barcode) ? data[ParamDefine.barcode] : "";
string realRfid = data.ContainsKey(ParamDefine.realRfid) ? data[ParamDefine.realRfid] : ""; string realRfid = data.ContainsKey(ParamDefine.realRfid) ? data[ParamDefine.realRfid] : "";
int taskCount = FormUtil.GetIntData(data,ParamDefine.taskCount,0); int taskCount = FormUtil.GetIntData(data, ParamDefine.taskCount, 0);
//urgentReel: true 表示紧急料,需要出到料串上 //urgentReel: true 表示紧急料,需要出到料串上
//cutReel: true 表示分盘料,需要出到料串上 //cutReel: true 表示分盘料,需要出到料串上
...@@ -704,6 +719,124 @@ namespace OnlineStore.DeviceLibrary ...@@ -704,6 +719,124 @@ namespace OnlineStore.DeviceLibrary
//发送扫码内容到服务器进行入库操作 //发送扫码内容到服务器进行入库操作
Operation operation = getLineBoxStatus(); Operation operation = getLineBoxStatus();
operation.op = 1; operation.op = 1;
operation.data = new Dictionary<string, string>() { { "code", message }, { "boxId", 1.ToString() }, { ParamDefine.rfid, CurrShelfID }, { "cids", Config.All_CIDs.Replace('#', ',') } };
string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
Operation resultOperation = HttpHelper.Post(StoreManager.GetPostApi(server), operation, false);
if (resultOperation == null)
{
CodeMsg = "二维码【" + message + "】没有收到服务器反馈";
LogInfo("二维码【 " + message + "】没有收到服务器反馈!");
return false;
}
else if (!string.IsNullOrEmpty(resultOperation.msg))
{
//如果有提示消息,直接显示提示
LogInfo("二维码【 " + message + "】 :" + resultOperation.msg);
return false;
}
if (resultOperation.op.Equals(1))
{
Dictionary<string, string> data = resultOperation.data;
if (data != null && data.ContainsKey(ParamDefine.posId) && data.ContainsKey(ParamDefine.plateH) && data.ContainsKey(ParamDefine.plateW))
{
//服务器返回时有:posId库位编号,plateW:料盘宽度,plateH:料盘高度,
//postId格式BoxId#位置
string posId = data[ParamDefine.posId];
string plateW = data[ParamDefine.plateW];
string plateH = data[ParamDefine.plateH];
int storeId = InOutParam.GetPosStoreId(posId);
//根据发送的posId获取位置列表
ACBoxPosition position = CSVPositionReader<ACBoxPosition>.GetPositon(posId);
if (position == null)
{ //出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg = "入库未找到库位:二维码【" + message + "】库位【" + posId + "】 ";
LogUtil.error(Name + "收到服务器入库命令:入库未找到库位:二维码【" + message + "】库位【" + posId + "】");
return false;
}
LogInfo(" 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】设置入库参数 , 开始入库!");
int p3 = ComTargetPosition + Config.GetCom_P3_P2(plateW);
MoveInfo.MoveParam.UpdatePosId(message, posId, plateW, plateH, ComTargetPosition, p3);
return true;
}
}
else if (resultOperation.op.Equals(2))
{
ReviceOutStoreProcess(resultOperation);
}
else if (resultOperation.op.Equals(5))
{
humBean.ProcessHumidityCMD(resultOperation);
}
else
{
LogUtil.error("收到服务器命令:op=" + resultOperation.op + ",未找到对应处理");
}
}
catch (Exception ex)
{
LogUtil.error(Name + "GetPosIdByCode" + ex.StackTrace);
}
return false;
}
/// <summary>
/// 扫码结果类型
/// </summary>
enum CodeResultType
{
NoCode,
DeviceNotOpen,
NotResponseFromServer,
WarnMsg,
NotFoundPos,
Error,
Success
}
/// <summary>
/// 扫码枪数据接收
/// </summary>
/// <param name="codeResultType">扫码结果</param>
/// <returns></returns>
private bool GetPosIdByCode(int rfidLoc, out CodeResultType codeResultType)
{
try
{
if (LastWidth <= 0)
{
LastWidth = 7;
}
string message = StoreManager.ProcessCode(LastWidth, LastHeight, LastScanCodes);
if (message.Equals("") || string.IsNullOrEmpty(message))
{
CodeMsg = "未扫到二维码";
LogInfo("未扫到二维码");
codeResultType = CodeResultType.NoCode;
return false;
}
if (storeRunStatus.Equals(StoreRunStatus.Wait))
{
LogInfo("二维码【 " + message + "】,设备未启动,不需要发送服务器");
codeResultType = CodeResultType.DeviceNotOpen;
return false;
}
// CodeMsg = "收到二维码【 " + message + "】,发送给服务器获取入库PosID";
LogUtil.info(Name + "二维码【 " + message + "】,发送给服务器获取入库PosID");
//查询该料盘所在料仓以及仓位
bool checkRelationship = StoreManager.GetPosForPutIn(Name, Config, message, CurrShelfID, rfidLoc);
if (!checkRelationship)
{
codeResultType = CodeResultType.NotFoundPos;
return false;
}
//发送扫码内容到服务器进行入库操作
Operation operation = getLineBoxStatus();
operation.op = 1;
operation.data = new Dictionary<string, string>() { { "code", message }, { "boxId", 1.ToString() }, { ParamDefine.rfid, CurrShelfID } }; operation.data = new Dictionary<string, string>() { { "code", message }, { "boxId", 1.ToString() }, { ParamDefine.rfid, CurrShelfID } };
string server = ConfigAppSettings.GetValue(Setting_Init.http_server); string server = ConfigAppSettings.GetValue(Setting_Init.http_server);
Operation resultOperation = HttpHelper.Post(StoreManager.GetPostApi(server), operation, false); Operation resultOperation = HttpHelper.Post(StoreManager.GetPostApi(server), operation, false);
...@@ -711,12 +844,14 @@ namespace OnlineStore.DeviceLibrary ...@@ -711,12 +844,14 @@ namespace OnlineStore.DeviceLibrary
{ {
CodeMsg = "二维码【" + message + "】没有收到服务器反馈"; CodeMsg = "二维码【" + message + "】没有收到服务器反馈";
LogInfo("二维码【 " + message + "】没有收到服务器反馈!"); LogInfo("二维码【 " + message + "】没有收到服务器反馈!");
codeResultType = CodeResultType.NotResponseFromServer;
return false; return false;
} }
else if (!string.IsNullOrEmpty(resultOperation.msg)) else if (!string.IsNullOrEmpty(resultOperation.msg))
{ {
//如果有提示消息,直接显示提示 //如果有提示消息,直接显示提示
LogInfo("二维码【 " + message + "】 :" + resultOperation.msg); LogInfo("二维码【 " + message + "】 :" + resultOperation.msg);
codeResultType = CodeResultType.WarnMsg;
return false; return false;
} }
...@@ -738,11 +873,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -738,11 +873,13 @@ namespace OnlineStore.DeviceLibrary
{ //出入库没有找到服务器发送的库位,需要打印日志方便查询原因 { //出入库没有找到服务器发送的库位,需要打印日志方便查询原因
WarnMsg = "入库未找到库位:二维码【" + message + "】库位【" + posId + "】 "; WarnMsg = "入库未找到库位:二维码【" + message + "】库位【" + posId + "】 ";
LogUtil.error(Name + "收到服务器入库命令:入库未找到库位:二维码【" + message + "】库位【" + posId + "】"); LogUtil.error(Name + "收到服务器入库命令:入库未找到库位:二维码【" + message + "】库位【" + posId + "】");
codeResultType = CodeResultType.NotFoundPos;
return false; return false;
} }
LogInfo(" 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】设置入库参数 , 开始入库!"); LogInfo(" 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】设置入库参数 , 开始入库!");
int p3 = ComTargetPosition + Config.GetCom_P3_P2(plateW); int p3 = ComTargetPosition + Config.GetCom_P3_P2(plateW);
MoveInfo.MoveParam.UpdatePosId(message, posId, plateW, plateH, ComTargetPosition, p3); MoveInfo.MoveParam.UpdatePosId(message, posId, plateW, plateH, ComTargetPosition, p3);
codeResultType = CodeResultType.Success;
return true; return true;
} }
} }
...@@ -763,6 +900,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -763,6 +900,7 @@ namespace OnlineStore.DeviceLibrary
{ {
LogUtil.error(Name + "GetPosIdByCode" + ex.StackTrace); LogUtil.error(Name + "GetPosIdByCode" + ex.StackTrace);
} }
codeResultType = CodeResultType.Error;
return false; return false;
} }
......
...@@ -71,7 +71,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -71,7 +71,7 @@ namespace OnlineStore.DeviceLibrary
isInit = true; isInit = true;
string storeType = ConfigAppSettings.GetValue(Setting_Init.Store_Type); string storeType = ConfigAppSettings.GetValue(Setting_Init.Store_Type);
int count = ConfigAppSettings.GetIntValue(Setting_Init.store_count); int count = ConfigAppSettings.GetIntValue(Setting_Init.store_count);
LogUtil.info( "配置的料仓 类型=" + storeType + ",开始加载料仓配置"); LogUtil.info("配置的料仓 类型=" + storeType + ",开始加载料仓配置");
string appPath = Application.StartupPath; string appPath = Application.StartupPath;
string CID = ConfigAppSettings.GetValue(Setting_Init.Store_CID); string CID = ConfigAppSettings.GetValue(Setting_Init.Store_CID);
Dictionary<int, AC_BOX_Config> storeConfig = new Dictionary<int, AC_BOX_Config>(); Dictionary<int, AC_BOX_Config> storeConfig = new Dictionary<int, AC_BOX_Config>();
...@@ -107,7 +107,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -107,7 +107,7 @@ namespace OnlineStore.DeviceLibrary
{ {
CSVPositionReader<ACBoxPosition>.AddCSVFile(positionConfigFile); CSVPositionReader<ACBoxPosition>.AddCSVFile(positionConfigFile);
} }
LogUtil.info( "加载料仓完成!"); LogUtil.info("加载料仓完成!");
} }
...@@ -134,7 +134,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -134,7 +134,7 @@ namespace OnlineStore.DeviceLibrary
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("出错:"+ ex.ToString()); LogUtil.error("出错:" + ex.ToString());
MessageBox.Show(ex.ToString(), "加载配置错误(请检查配置)"); MessageBox.Show(ex.ToString(), "加载配置错误(请检查配置)");
Application.Exit(); Application.Exit();
} }
...@@ -170,7 +170,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -170,7 +170,7 @@ namespace OnlineStore.DeviceLibrary
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error("出错:"+ ex.ToString()); LogUtil.error("出错:" + ex.ToString());
} }
return false; return false;
} }
...@@ -560,6 +560,128 @@ namespace OnlineStore.DeviceLibrary ...@@ -560,6 +560,128 @@ namespace OnlineStore.DeviceLibrary
return msg; return msg;
} }
private static string Addr_getShelfLockInfo = "/rest/api/qisda/device/getShelfLockInfo"; //包装仓获取料架锁定状态地址
public static bool GetShelfLockInfo(string deviceName, string cid,string rfid,out List<ShelfLockData> shelfLockDatas)
{
string msg = "";
shelfLockDatas = null;
try
{
Dictionary<string, string> paramMap = new Dictionary<string, string>();
paramMap.Add(ParamDefine.rfid, rfid);
string server = GetAddr(Addr_getShelfLockInfo, paramMap);
DateTime startTime = DateTime.Now;
string resultStr = HttpHelper.Post(server, "");
LogUtil.info(deviceName + "料架锁定状态 " + FormUtil.GetSpanStr(DateTime.Now - startTime) + " 【" + server + "】【" + resultStr + "】");
ShelfLockInfo serverResult = JsonHelper.DeserializeJsonToObject<ShelfLockInfo>(resultStr);
if (serverResult == null)
{
msg = deviceName + " 没有收到服务器反馈";
LogUtil.info(msg);
return false;
}
if (serverResult.data.Count ==0) //该料架未锁定
{
msg = deviceName + " 料架【"+rfid+"】 没有锁定库位的料";
LogUtil.info(msg);
return false;
}
else //该料架存在锁定库位的料
{
shelfLockDatas = new List<ShelfLockData>();
string plates = "";
foreach (ShelfLockData item in serverResult.data)
{
LogUtil.info("锁定的CID="+item.cid+";当前CID="+cid);
if(item.cid.Equals(cid))//该料盘属于此料仓
{
shelfLockDatas.Add(item);
plates += "["+item.lockPos+"]# ";
}
}
msg = deviceName + " 料架【" + rfid + "】 在该料仓锁定库位的料:【"+plates+"】";
LogUtil.info(msg);
return true;
}
}
catch (Exception ex)
{
LogUtil.error(deviceName + " ", ex);
}
return false;
}
private static string Addr_PosForPutin = "/service/store/emptyPosForPutin"; //获取当前料盘属于的料仓编号
public static bool GetPosForPutIn(string deviceName,AC_BOX_Config boxConfig,string barcode,string rfid,int rfidLoc)
{
string msg = "";
try
{
// http://localhost/myproject/service/store/emptyPosForPutin
// 参数:cids: 多个 cid
//code: 条码内容
Dictionary<string, string> paramMap = new Dictionary<string, string>();
paramMap.Add("cids",boxConfig.All_CIDs.Replace('#',','));
paramMap.Add("code", barcode);
paramMap.Add(ParamDefine.rfid, rfid);
paramMap.Add("rfidLoc", rfidLoc.ToString());
string server = GetAddr(Addr_PosForPutin, paramMap);
DateTime startTime = DateTime.Now;
LogUtil.info(deviceName + " 条码【 " + barcode + "】料串【" + rfid + "】,获取入库库位:");
string resultStr = HttpHelper.Post(server, "");
LogUtil.info(deviceName + "CodeReceived " + FormUtil.GetSpanStr(DateTime.Now - startTime) + " 【" + server + "】【" + resultStr + "】");
//{"result":"0","msg":"","pos":"11#AC1_18_4_28","barcode":"R506072019102200414","cid":"line-ac-11"}
LineOperation serverResult = JsonHelper.DeserializeJsonToObject<LineOperation>(resultStr);
if (serverResult == null)
{
msg = deviceName + " 【" + barcode + "】结果:没有收到服务器反馈 ";
LogUtil.info(msg);
return false;
}
else if ((!string.IsNullOrEmpty(serverResult.msg)) || serverResult.result.Equals(0).Equals(false))
{
msg = deviceName + " 【" + barcode + "】结果:" + serverResult.msg;
LogUtil.info(msg);
return false;
}
if (serverResult.cid.Equals(boxConfig.CID)) //该料盘在此料仓
{
// 仓位命名: 4D01020304
//第1和第2位表示楼层(4D)
//第3和第4位表示料仓(01) 01 - 18为流水线料仓, 19 - 24为包装料仓
//第5和第6位表示列(02)
//第7和第8位表示行(03)
//第9和第10位表示隔板位置(04)
//例如: 4D12010124 表示4楼12号料仓第1列第1行架子上的第24个隔板位置
//4D19050208 表示4楼19号料仓(包装料仓)第5列第2行架子上的第8个隔板位置
msg = deviceName + " 料盘【" + barcode + "】属于该料仓【"+boxConfig.CID+"】";
LogUtil.info(msg);
return true;
}
else
{
msg = deviceName + " 料盘【" + barcode + "】不属于该料仓【" + boxConfig.CID + "】";
LogUtil.info(msg);
return false;
}
}
catch (Exception ex)
{
LogUtil.error(deviceName + " ", ex);
}
return false;
}
} }
public class AfterPutData public class AfterPutData
{ {
...@@ -671,5 +793,62 @@ namespace OnlineStore.DeviceLibrary ...@@ -671,5 +793,62 @@ namespace OnlineStore.DeviceLibrary
// smallTask: 还有多少盘小料任务(放置到双层线的D料架上) // smallTask: 还有多少盘小料任务(放置到双层线的D料架上)
// bigTask: 还有多少盘大料任务(放置到C料架上) // bigTask: 还有多少盘大料任务(放置到C料架上)
} }
public class ShelfLockInfo
{
//返回: {"code":0,"msg":"ok","data":
//[{"barcode":"S20052301213","cid":"packing-20","rfid":"A12","rfidLoc":"3","lockPos":"4D2001AA0006","lockPosId":"1231"}]}
/// <summary>
/// 返回码,0为正常,其他为异常
/// </summary>
public int code { get; set; }
/// <summary>
/// 消息
/// </summary>
public string msg { get; set; }
public List<ShelfLockData> data { get; set; }
}
public class ShelfLockData
{
/// <summary>
/// 库位中料盘的条码
/// </summary>
public string barcode { get; set; }
/// <summary>
/// 库位中料盘的锁定库位对应的料仓编
/// </summary>
public string cid { get; set; }
/// <summary>
/// 料架RFID
/// </summary>
public string rfid { get; set; }
/// <summary>
/// 料架的库位
/// </summary>
public int rfidLoc { get; set; }
/// <summary>
/// 库位中料盘的锁定库位
/// </summary>
public string lockPos { get; set; }
}
public class LineOperation
{
// //{"result":"0","msg":"","pos":"11#AC1_18_4_28","barcode":"R506072019102200414","cid":"line-ac-11"}
// 返回: {"code": 0, "msg":"ok", data:7}
/// <summary>
/// 0=成功
/// </summary>
public int result;
public string cid;
public string msg = "";
public string pos = "";
public string barcode = "";
}
} }
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<HintPath>..\..\dll\CodeLibrary.dll</HintPath> <HintPath>..\..\dll\CodeLibrary.dll</HintPath>
</Reference> </Reference>
<Reference Include="halcondotnet"> <Reference Include="halcondotnet">
<HintPath>..\..\..\RC32-SZBOSCH-ACSingleStore\dll\halcondotnet.dll</HintPath> <HintPath>..\..\dll\halcondotnet.dll</HintPath>
</Reference> </Reference>
<Reference Include="HFReader9CSharp"> <Reference Include="HFReader9CSharp">
<HintPath>..\..\dll\RFID\HFReader9CSharp.dll</HintPath> <HintPath>..\..\dll\RFID\HFReader9CSharp.dll</HintPath>
......
...@@ -141,3 +141,4 @@ PRO,温湿度端口号,Humiture_Port,COM5,,,,,,, ...@@ -141,3 +141,4 @@ PRO,温湿度端口号,Humiture_Port,COM5,,,,,,,
PRO,扫码的相机名称(多个用#分隔),CameraNameList,GigE:MV-CE200-10GC (00D76546875),,,,,,, PRO,扫码的相机名称(多个用#分隔),CameraNameList,GigE:MV-CE200-10GC (00D76546875),,,,,,,
PRO,RFID读卡器IP,RFID_IP,192.168.104.101,,,,,,, PRO,RFID读卡器IP,RFID_IP,192.168.104.101,,,,,,,
PRO,是否是调试状态,IsInDebug,0,,,,,,, PRO,是否是调试状态,IsInDebug,0,,,,,,,
PRO,所有料仓的CID(用#号分隔),All_CIDs,packing-1#packing-2#packing-3#packing-4#packing-5#packing-6#packing-7#packing-8,,,,,,,
...@@ -141,3 +141,4 @@ PRO,温湿度端口号,Humiture_Port,COM5,,,,,,, ...@@ -141,3 +141,4 @@ PRO,温湿度端口号,Humiture_Port,COM5,,,,,,,
PRO,扫码的相机名称(多个用#分隔),CameraNameList,GigE:MV-CE200-10GC (00D76546940),,,,,,, PRO,扫码的相机名称(多个用#分隔),CameraNameList,GigE:MV-CE200-10GC (00D76546940),,,,,,,
PRO,RFID读卡器IP,RFID_IP,192.168.104.102,,,,,,, PRO,RFID读卡器IP,RFID_IP,192.168.104.102,,,,,,,
PRO,是否是调试状态,IsInDebug,0,,,,,,, PRO,是否是调试状态,IsInDebug,0,,,,,,,
PRO,所有料仓的CID(用#号分隔),All_CIDs,packing-2#packing-3#packing-4#packing-5#packing-6#packing-7#packing-8#packing-1,,,,,,,
\ No newline at end of file \ No newline at end of file
...@@ -192,6 +192,41 @@ namespace OnlineStore.DeviceLibrary ...@@ -192,6 +192,41 @@ namespace OnlineStore.DeviceLibrary
MoveP.UpDown_P5 = position.UpdownAxis_OH_P5; MoveP.UpDown_P5 = position.UpdownAxis_OH_P5;
MoveP.UpDown_P6 = position.UpdownAxis_OL_P6; MoveP.UpDown_P6 = position.UpdownAxis_OL_P6;
} }
internal void UpdatePosIdAndShelfId(string wareNo,string rfid,string posId, string ShelfPosID)
{
WareCode = wareNo;
this.ShelfPosID = ShelfPosID;
this.rfid = rfid;
ShelfPosition sp = CSVPositionReader<ShelfPosition>.GetPositon(ShelfPosID);
if (sp == null)
{
LogUtil.error("GetPositon[" + ShelfPosID + "]=null,没有库位不能执行出入库");
}
MoveP.InOut_P101 = sp.InoutAxis_P101;
MoveP.UpDown_LP101 = sp.UpDownAxis_LP101;
MoveP.UpDown_HP102 = sp.UpDownAxis_HP102;
MoveP.Middle_P101 = sp.MiddleAxis_P101;
PosID = posId;
ACBoxPosition position = CSVPositionReader<ACBoxPosition>.GetPositon(posId);
if (position == null)
{
LogUtil.error("GetPositon[" + posId + "] =null,没有库位不能执行出入库");
}
//MoveP.ComPress_P2 = comP2;
//MoveP.ComPress_P3 = comP3;
MoveP.InOut_P3 = position.InoutAxis_P3;
MoveP.Middle_P2 = position.MiddleAxis_P2;
MoveP.UpDown_P3 = position.UpdownAxis_IH_P3;
MoveP.UpDown_P4 = position.UpdownAxis_IL_P4;
MoveP.UpDown_P5 = position.UpdownAxis_OH_P5;
MoveP.UpDown_P6 = position.UpdownAxis_OL_P6;
}
} }
} }
...@@ -240,9 +240,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -240,9 +240,9 @@ namespace OnlineStore.DeviceLibrary
SO_06_InoutBack = 2006, SO_06_InoutBack = 2006,
/// <summary> /// <summary>
/// 料仓出库,定位气缸伸出(有压紧轴的不需要此步骤 ) /// 料仓出库,等待压紧信号确认
/// </summary> /// </summary>
SO_07_LocationUp = 2007, SO_07_CheckComSig = 2007,
/// <summary> /// <summary>
/// 料仓出库,走到料架位置,旋转轴至P20,升降轴至P102, /// 料仓出库,走到料架位置,旋转轴至P20,升降轴至P102,
......
...@@ -149,7 +149,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -149,7 +149,7 @@ namespace OnlineStore.DeviceLibrary
/// </summary> /// </summary>
public List<string> ShelfPositionList = new List<string>(); public List<string> ShelfPositionList = new List<string>();
private string currShelfPosId = ""; private string currShelfPosId = "";
private int currShelfIndex = -1; public int currShelfIndex = -1;
public bool NextShelfPos() public bool NextShelfPos()
{ {
...@@ -164,6 +164,33 @@ namespace OnlineStore.DeviceLibrary ...@@ -164,6 +164,33 @@ namespace OnlineStore.DeviceLibrary
MoveParam.UpdateShelfPosId(currShelfPosId); MoveParam.UpdateShelfPosId(currShelfPosId);
return true; return true;
} }
/// <summary>
/// 入库时,料架已锁定库位的位置,无需扫码
/// </summary>
public bool IsShelfLocked = false;//料架是否锁定
/// <summary>
/// 料架锁定位置的料
/// </summary>
public List<ShelfLockData> shelfLockDatas =null;
public bool NextLockedShelfPos()
{
currShelfIndex++;
if (currShelfIndex >= shelfLockDatas.Count)
{
shelfLockDatas = null;
return false;
}
currShelfPosId = ShelfPositionList[shelfLockDatas[currShelfIndex].rfidLoc];
//设置取料位置
MoveParam.UpdatePosIdAndShelfId(shelfLockDatas[currShelfIndex].barcode,
shelfLockDatas[currShelfIndex].rfid,
shelfLockDatas[currShelfIndex].lockPos, currShelfPosId);
return true;
}
} }
public class WaitResultInfo public class WaitResultInfo
...@@ -182,7 +209,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -182,7 +209,7 @@ namespace OnlineStore.DeviceLibrary
wait.IoValue = ioValue; wait.IoValue = ioValue;
return wait; return wait;
} }
public static WaitResultInfo WaitAxis(ConfigMoveAxis axis,int targetPosition,int targetSpeed ) public static WaitResultInfo WaitAxis(ConfigMoveAxis axis, int targetPosition, int targetSpeed)
{ {
WaitResultInfo wait = new WaitResultInfo(); WaitResultInfo wait = new WaitResultInfo();
wait.WaitType = WaitEnum.W001_AxisMove; wait.WaitType = WaitEnum.W001_AxisMove;
...@@ -241,7 +268,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -241,7 +268,7 @@ namespace OnlineStore.DeviceLibrary
wait.IsEnd = false; wait.IsEnd = false;
return wait; return wait;
} }
public static WaitResultInfo WaitAxisOrg(ConfigMoveAxis axis,IO_VALUE value ) public static WaitResultInfo WaitAxisOrg(ConfigMoveAxis axis, IO_VALUE value)
{ {
WaitResultInfo wait = new WaitResultInfo(); WaitResultInfo wait = new WaitResultInfo();
wait.WaitType = WaitEnum.W006_AxisOrg; wait.WaitType = WaitEnum.W006_AxisOrg;
...@@ -322,15 +349,18 @@ namespace OnlineStore.DeviceLibrary ...@@ -322,15 +349,18 @@ namespace OnlineStore.DeviceLibrary
else if (WaitType.Equals(WaitEnum.W008_Compress)) else if (WaitType.Equals(WaitEnum.W008_Compress))
{ {
return "压紧轴压紧到位"; return "压紧轴压紧到位";
}else if (WaitType.Equals(WaitEnum.W009_ScanCode)) }
else if (WaitType.Equals(WaitEnum.W009_ScanCode))
{ {
return "扫码完成"; return "扫码完成";
}else if (WaitType.Equals(WaitEnum.W010_AgvStatus)) }
else if (WaitType.Equals(WaitEnum.W010_AgvStatus))
{ {
return " Agv_" + (ClientAction)AgvAction+" "; return " Agv_" + (ClientAction)AgvAction + " ";
}else if (WaitType.Equals(WaitEnum.W011_DoorCloseEvent)) }
else if (WaitType.Equals(WaitEnum.W011_DoorCloseEvent))
{ {
return "Agv_DoorClose事件" ; return "Agv_DoorClose事件";
} }
else else
{ {
...@@ -381,7 +411,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -381,7 +411,7 @@ namespace OnlineStore.DeviceLibrary
/// <summary> /// <summary>
/// 是否已经结束 /// 是否已经结束
/// </summary> /// </summary>
public bool IsEnd{ get; set; } public bool IsEnd { get; set; }
public int AgvAction = 0; public int AgvAction = 0;
...@@ -420,7 +450,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -420,7 +450,7 @@ namespace OnlineStore.DeviceLibrary
/// <summary> /// <summary>
/// 压紧轴压紧到位 /// 压紧轴压紧到位
/// </summary> /// </summary>
internal static int W008_Compress= 8; internal static int W008_Compress = 8;
/// <summary> /// <summary>
/// 扫码完成 /// 扫码完成
/// </summary> /// </summary>
......
...@@ -556,6 +556,12 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -556,6 +556,12 @@ namespace OnlineStore.LoadCSVLibrary
/// </summary> /// </summary>
[ConfigProAttribute("CompAxis_Max_P3")] [ConfigProAttribute("CompAxis_Max_P3")]
public int CompAxis_Max_P3 { get; set; } public int CompAxis_Max_P3 { get; set; }
/// <summary>
/// PRO 所有料仓的CID(用#号分隔) All_CIDs packing-1#packing-2#packing-3#packing-4#packing-5#packing-6#packing-7#packing-8
/// </summary>
[ConfigProAttribute("All_CIDs")]
public string All_CIDs { get; set; }
private List< ComP2Info> ComP2List = null; private List< ComP2Info> ComP2List = null;
public ComP2Info GetComP2(int plateh) public ComP2Info GetComP2(int plateh)
{ {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!