Commit 338752ba 张东亮

存储机构压紧轴回原时旋转轴确保在水平、优先出库限制取消、入料机构回原时如果夹爪有料,回原后放到NG箱、入库扫到相同条码时如果缓存口有相同缓存信息认为上一次抓料失…

…败,清除缓存、入料机构从缓存口抓料添加3次重试抓取
1 个父辈 0fd93eeb
......@@ -188,12 +188,14 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// BOX复位:料斗拉取升降轴、AB面压紧轴返回原点
/// </summary>
BOX_H04_PullAxis_Updown_ABComAxis_Home,
BOX_H04_PullAxis_Updown_Home,
/// <summary>
/// BOX复位:AB面移栽x轴原点返回
/// </summary>
BOX_H05_XAxis_AB_UpDown_Home,
BOX_H05_1_UpdownToP1,
BOX_H05_2_MiddleAxisToP1,
BOX_H05_3_ComAxis_Home,
/// <summary>
/// BOX复位:行走机构、移栽升降轴、AB面移栽旋转轴原点返回
/// </summary>
......
......@@ -660,15 +660,13 @@ namespace OnlineStore.DeviceLibrary
PullAxis_Inout.HomeMove(MoveInfo);
break;
case StepEnum.BOX_H03_PullAxis_InoutHome:
MoveInfo.NextMoveStep(StepEnum.BOX_H04_PullAxis_Updown_ABComAxis_Home);
LogInfo($"复位 {MoveInfo.SLog}:抽屉拉取升降轴、AB面压紧轴回原点");
MoveInfo.NextMoveStep(StepEnum.BOX_H04_PullAxis_Updown_Home);
LogInfo($"复位 {MoveInfo.SLog}:抽屉拉取升降轴");
//if (!IsMoveAxisInSafePos())
// MoveAxis.AbsMove(MoveInfo, Config.MoveAxis_SafePos, Config.MoveAxis_P1_Speed);
PullAxis_Updown.HomeMove(MoveInfo);
ComAxis_A.HomeMove(MoveInfo);
ComAxis_B.HomeMove(MoveInfo);
break;
case StepEnum.BOX_H04_PullAxis_Updown_ABComAxis_Home:
case StepEnum.BOX_H04_PullAxis_Updown_Home:
MoveInfo.NextMoveStep(StepEnum.BOX_H05_XAxis_AB_UpDown_Home);
LogInfo($"复位 {MoveInfo.SLog}:AB面移栽X轴回原点、移栽升降轴回原");
XAxis_A.HomeMove(MoveInfo);
......@@ -683,12 +681,23 @@ namespace OnlineStore.DeviceLibrary
MiddleAxis_B.HomeMove(MoveInfo);
break;
case StepEnum.BOX_H05_1_UpdownToP1:
MoveInfo.NextMoveStep(StepEnum.BOX_H06_1_OtherAxis_Home);
MoveInfo.NextMoveStep(StepEnum.BOX_H05_2_MiddleAxisToP1);
LogInfo($"复位 {MoveInfo.SLog}:料斗升降和移栽升降到待机点");
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P1, Config.Updown_P1_Speed);
PullAxis_Updown.AbsMove(MoveInfo, Config.PullAxis_Updown_P1, Config.PullAxis_Updown_P1_Speed);
break;
case StepEnum.BOX_H05_2_MiddleAxisToP1:
MoveInfo.NextMoveStep(StepEnum.BOX_H05_3_ComAxis_Home);
LogInfo($"复位 {MoveInfo.SLog}:AB面移栽旋转轴返回水平点P2");
MiddleAxis_A.AbsMove(MoveInfo, Config.MiddleAxis_A_P2, Config.MiddleAxis_A_P2_Speed);
MiddleAxis_B.AbsMove(MoveInfo, Config.MiddleAxis_B_P2, Config.MiddleAxis_B_P2_Speed);
break;
case StepEnum.BOX_H05_3_ComAxis_Home:
MoveInfo.NextMoveStep(StepEnum.BOX_H06_1_OtherAxis_Home);
LogInfo($"复位 {MoveInfo.SLog}:AB面压紧轴回原点");
ComAxis_A.HomeMove(MoveInfo);
ComAxis_B.HomeMove(MoveInfo);
break;
case StepEnum.BOX_H06_1_OtherAxis_Home:
MoveInfo.NextMoveStep(StepEnum.BOX_H06_2_OtherAxis_Home);
//开门
......@@ -808,12 +817,12 @@ namespace OnlineStore.DeviceLibrary
int SigLastTime = 7;//5秒
protected override void OnTimerProcess()
{
bool isRunning = runStatus.Equals(RunStatus.Runing);
if (isRunning && ExecuteOutListProcess())
{
LogInfo("优先出库执行");
return;
}
//bool isRunning = runStatus.Equals(RunStatus.Runing);
//if (isRunning && ExecuteOutListProcess())
//{
// LogInfo("优先出库执行");
// return;
//}
//if (!runStatus.Equals(RunStatus.Runing))
// return;
TimeSpan timeSpanA = DateTime.Now - dtUpperA;
......
using CodeLibrary;
using OnlineStore.Common;
using OnlineStore.DeviceLibrary.deviceLibrary;
using OnlineStore.DeviceLibrary.deviceLibrary;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms.VisualStyles;
namespace OnlineStore.DeviceLibrary
{
......
......@@ -1407,10 +1407,10 @@ namespace OnlineStore.DeviceLibrary
public bool CloseOutStoreCheck = false;
public override bool StartOutstore(InOutParam param)
{
if (InDoorSigCheck())
{
return false;
}
//if (InDoorSigCheck())
//{
// return false;
//}
if (!CloseOutStoreCheck)
{
if (!OutDoorCheck(param))
......
......@@ -218,8 +218,10 @@ namespace OnlineStore.DeviceLibrary
OnlyResetInputAxis = false;
LogInfo($"复位 {MoveInfo.SLog} :批量轴开始复位");
}
/// <summary>
/// 复位时,是否有夹爪气缸夹住了料盘
/// </summary>
bool clampHasReelWhen = false;
protected override void ResetProcess()
{
if (MoveInfo.IsInWait)
......@@ -359,12 +361,22 @@ namespace OnlineStore.DeviceLibrary
else if (MoveInfo.IsStep(StepEnum.IR05_UpdownHome))
{
IR06_UpdownToP1();
clampHasReelWhen = false;
}
else if (MoveInfo.IsStep(StepEnum.IR06_UpdownToP1))
{
MoveInfo.NextMoveStep(StepEnum.IR07_ClampRelax);
LogInfo($"复位{MoveInfo.SLog}:夹爪气缸放松");
ClampRelax(MoveInfo, MoveInfo.MoveParam.PosInfo.barcode);
if (CheckClampHasReel())
{
clampHasReelWhen = true;
LogInfo($"复位{MoveInfo.SLog}:夹爪气缸有料,需要放到NG");
}
else
{
MoveInfo.NextMoveStep(StepEnum.IR07_ClampRelax);
LogInfo($"复位{MoveInfo.SLog}:夹爪气缸放松");
ClampRelax(MoveInfo, MoveInfo.MoveParam.PosInfo.barcode);
}
}
else if (MoveInfo.IsStep(StepEnum.IR07_ClampRelax))
{
......@@ -388,6 +400,17 @@ namespace OnlineStore.DeviceLibrary
LogInfo("复位完成");
runStatus = RunStatus.Runing;
MoveInfo.EndMove();
if(clampHasReelWhen)
{
runStatus = RunStatus.Busy;
MoveInfo.NewMove(MoveType.OutStore, new InOutParam());
MoveInfo.NextMoveStep(StepEnum.II81_MiddleToNg);
MoveLog($"出库{MoveInfo.SLog}: 回原夹爪有料 升降轴到P8(NG料区放料高点){Config.Updown_P8_NGH},旋转轴到P6(NG料区放料点){Config.Middle_P6_NG}");
MiddleAxis.AbsMove(MoveInfo, Config.Middle_P6_NG, Config.Middle_P6_Speed);
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P8_NGH, Config.Updown_P8_Speed);
clampHasReelWhen = false;
}
}
else if (MoveInfo.IsTimeOut(180))
{
......
using Asa;
using log4net.Util;
using OnlineStore.Common;
using OnlineStore.DeviceLibrary.deviceLibrary;
using OnlineStore.LoadCSVLibrary;
......@@ -132,6 +133,14 @@ namespace OnlineStore.DeviceLibrary
}
}
/// <summary>
/// 检查夹爪是否有料
/// </summary>
/// <returns></returns>
bool CheckClampHasReel()
{
return IOValue(IO_Type.Feeding_Reel_13_Check).Equals(IO_VALUE.HIGH) || IOValue(IO_Type.Feeding_Reel_7_Check).Equals(IO_VALUE.HIGH);
}
#region 入库
private DateTime startInTime = DateTime.Now;
public override bool StartInstore(InOutParam param)
......@@ -236,22 +245,7 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.IsStep(StepEnum.II09_UpdownToP1))
{
// MoveInfo.NextMoveStep(StepEnum.II09_MiddleToP1);
// MoveLog($"入库取料{shelf}{MoveInfo.SLog}: 旋转轴到待机点P1 {Config.Middle_P1}");
// UpdownAxis.AbsMove(MoveInfo, Config.Middle_P1, Config.Middle_P1_Speed);
//}else if (MoveInfo.IsStep(StepEnum.II09_MiddleToP1))
//{
//如果是测试,直接开始取目标位置
//if (MoveInfo.MoveParam.PosInfo.barcode.EndsWith("TEST"))
//{
// MoveLog($"入库取料{shelf}{MoveInfo.SLog}: 条码 {MoveInfo.MoveParam.PosInfo.barcode}为测试料,直接去目标位置");
// LastPosInfo = MoveInfo.MoveParam.PosInfo;
// StrartToTargetP();
//}
//else
{
II10_WaitAxisCheck();
}
II10_WaitAxisCheck();
}
else if (MoveInfo.IsStep(StepEnum.II10_WaitAxisCheck))
{
......@@ -281,7 +275,7 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.IsTimeOut(60))
{
SetWarnMsg(Name+" " + moveBean.Name + "获取料盘高度超时");
SetWarnMsg(Name + " " + moveBean.Name + "获取料盘高度超时");
}
}
else if (MoveInfo.IsStep(StepEnum.II13_GetPosId))
......@@ -649,14 +643,31 @@ namespace OnlineStore.DeviceLibrary
MiddleAxis.AbsMove(MoveInfo, Config.Middle_P6_NG, Config.Middle_P6_Speed);
UpdownAxis.AbsMove(MoveInfo, Config.Updown_P8_NGH, Config.Updown_P8_Speed);
}
else if (lastPosInfo.GetPosSide().Equals("A"))
{
II41_MiddleToP4();
}
else
{
II61_MiddleToP5();
//检查暂存区是否有相同料
if (BufferDataManager.AInStoreInfo != null && BufferDataManager.AInStoreInfo.barcode.Equals(lastPosInfo.barcode) && IOValue(IO_Type.FeedingA_Instore_UpperArea_ReelCheck).Equals(IO_VALUE.LOW))
{
SServerManager.cancelPutInTask(Name, BufferDataManager.AInStoreInfo.barcode);
BufferDataManager.AInStoreInfo = null;
MoveLog($"入库取料{MoveInfo.SLog}: A上暂存区已有相同{lastPosInfo.ToStr()},且信号未亮,清除A上暂存区");
}
else if (BufferDataManager.BInStoreInfo != null && BufferDataManager.BInStoreInfo.barcode.Equals(lastPosInfo.barcode) && IOValue(IO_Type.FeedingB_Instore_UpperArea_ReelCheck).Equals(IO_VALUE.LOW))
{
SServerManager.cancelPutInTask(Name, BufferDataManager.BInStoreInfo.barcode);
BufferDataManager.BInStoreInfo = null;
MoveLog($"入库取料{MoveInfo.SLog}: A上暂存区已有相同{lastPosInfo.ToStr()},且信号未亮,清除B上暂存区");
}
if (lastPosInfo.GetPosSide().Equals("A"))
{
II41_MiddleToP4();
}
else
{
II61_MiddleToP5();
}
}
TrayStartLeave();
}
......@@ -916,6 +927,10 @@ namespace OnlineStore.DeviceLibrary
BatchMove_B.GetTrayStartLeave();
}
}
/// <summary>
/// 夹爪重试次数
/// </summary>
int clampTryCount = 0;
protected override void OutstoreProcess()
{
if (MoveInfo.IsInWait)
......@@ -933,6 +948,7 @@ namespace OnlineStore.DeviceLibrary
{
if (BufferDataManager.AOutStoreInfo != null)
{
clampTryCount = 0;
if (BufferDataManager.AOutStoreInfo.barcode.Equals(MoveInfo.MoveParam.PosInfo.barcode))
{
MoveInfo.NextMoveStep(StepEnum.IO02_UpdownToP6);
......@@ -973,9 +989,19 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.IsStep(StepEnum.IO06_UpdownToP6))
{
MoveInfo.NextMoveStep(StepEnum.IO07_1_InoutToP1);
MoveLog($"出库A->{shelf}料串 {MoveInfo.SLog}: 进出轴到P1(待机点点){Config.Inout_P1}");
InOutAxis.AbsMove(MoveInfo, Config.Inout_P1, Config.Inout_P1_Speed);
if (CheckClampHasReel() || clampTryCount > 3)
{
MoveInfo.NextMoveStep(StepEnum.IO07_1_InoutToP1);
clampTryCount = 0;
MoveLog($"出库A->{shelf}料串 {MoveInfo.SLog}: 进出轴到P1(待机点点){Config.Inout_P1}");
InOutAxis.AbsMove(MoveInfo, Config.Inout_P1, Config.Inout_P1_Speed);
}
else
{
MoveInfo.NextMoveStep(StepEnum.IO03_InoutToP2);
clampTryCount++;
MoveLog($"出库A->{shelf}料串 {MoveInfo.SLog}: 未检测到料,重新抓取");
}
}
else if (MoveInfo.IsStep(StepEnum.IO07_1_InoutToP1))
{
......@@ -987,7 +1013,7 @@ namespace OnlineStore.DeviceLibrary
ToNG();
return;
}
else if(string.IsNullOrEmpty(MoveInfo.MoveParam.PosInfo.hSerial))
else if (string.IsNullOrEmpty(MoveInfo.MoveParam.PosInfo.hSerial))
{
ToUrgentBox();
return;
......@@ -1030,6 +1056,7 @@ namespace OnlineStore.DeviceLibrary
{
if (BufferDataManager.BOutStoreInfo != null)
{
clampTryCount = 0;
if (BufferDataManager.BOutStoreInfo.barcode.Equals(MoveInfo.MoveParam.PosInfo.barcode))
{
MoveInfo.NextMoveStep(StepEnum.IO12_UpdownToP12);
......@@ -1071,16 +1098,26 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.IsStep(StepEnum.IO16_UpdownToP6))
{
MoveInfo.NextMoveStep(StepEnum.IO17_1_InoutToP1);
MoveLog($"出库B->{shelf}料串 {MoveInfo.SLog}: j进出轴到P11(待机点){Config.Inout_P1}");
InOutAxis.AbsMove(MoveInfo, Config.Inout_P1, Config.Inout_P1_Speed);
if (CheckClampHasReel() || clampTryCount > 3)
{
MoveInfo.NextMoveStep(StepEnum.IO17_1_InoutToP1);
clampTryCount = 0;
MoveLog($"出库B->{shelf}料串 {MoveInfo.SLog}: j进出轴到P11(待机点){Config.Inout_P1}");
InOutAxis.AbsMove(MoveInfo, Config.Inout_P1, Config.Inout_P1_Speed);
}
else
{
MoveInfo.NextMoveStep(StepEnum.IO13_InoutToP3);
clampTryCount++;
MoveLog($"出库B->{shelf}料串 {MoveInfo.SLog}: 未检测到料,重新抓取");
}
}
else if (MoveInfo.IsStep(StepEnum.IO17_1_InoutToP1))
{
//判断料盘信号是否消失
if (IOValue(IO_Type.FeedingB_Outstore_UnderArea_ReelCheck).Equals(IO_VALUE.LOW))
{
if(MoveInfo.MoveParam.PosInfo.IsNG)
if (MoveInfo.MoveParam.PosInfo.IsNG)
{
ToNG();
return;
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!