Commit ea96d462 张东亮

动作优化

1 个父辈 7a64b7f6
......@@ -87,6 +87,7 @@
<Compile Include="storeBean\boxBean\AutoInoutInfo.cs" />
<Compile Include="storeBean\boxBean\BoxEquip_InExecute.cs" />
<Compile Include="storeBean\boxBean\BoxEquip_InExecute_Partial.cs" />
<Compile Include="storeBean\boxBean\BoxEquip_OutExecute_Partial.cs" />
<Compile Include="storeBean\boxBean\BoxEquip_OutExecute.cs" />
<Compile Include="storeBean\boxBean\BoxEquip_PosDebug.cs" />
<Compile Include="storeBean\boxBean\Humiture\HumitureBean.cs" />
......
......@@ -337,8 +337,47 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
SO_20_Finish,
#region 两侧同时放料
/// <summary>
/// 料仓出库:取料完成,准备去出料口
/// </summary>
SOB_14_GetReels_Ready,
/// <summary>
/// 料仓出库:到料盘暂存区
/// 1. 移栽升降轴到A/B下暂存区放料高点
/// 2. 行走机构到P2(进出料机构取放点)
/// 3. A面移栽旋转轴到P2(进出料暂存区取放料水平点),同时检测X02=1
/// 或者 B面移栽旋转轴到P2(进出料暂存区取放料水平点),同时检测X03=1
/// </summary>
SOB_15_ToBufferArea,
/// <summary>
/// 料仓出库:确保暂存区无料盘
/// 如果有料盘则报警,该区域无料时才会出库
/// </summary>
SOB_16_VerifyBufferState,
/// <summary>
/// 料仓出库:A/B面移栽X轴到P2(A/B进出料暂存区取放点)
/// </summary>
SOB_17_InOutToBuff,
/// <summary>
/// 料仓出库:放松料盘
/// 2. A/B面移栽压紧轴到P2压紧前点
/// </summary>
SOB_18_ReleaseReel,
/// <summary>
/// 料仓出库:把料盘放下
/// 1. 移栽升降轴到A/B下暂存区放料低点
/// </summary>
SOB_18_PutReel,
/// <summary>
/// 料仓出库:A/B面移栽X轴到P1(待机点)
/// </summary>
SOB_19_InOutBackFromBuff,
/// <summary>
/// 料仓出库:A/B面移栽旋转轴到P1(待机点)
/// </summary>
SOB_20_Finish,
#endregion
#endregion
#region 入库步骤,300开始
......
......@@ -214,6 +214,7 @@ namespace OnlineStore.DeviceLibrary
MiddleAxis_To_P2();
//XAxis_To_P1();
BothXAxis_To_P1();
BuffAreaInstoreDoor(true);
break;
case StepEnum.SI_01_MoveAxis_Ready:
MoveInfo.NextMoveStep(StepEnum.SI_02_ToBufferArea);
......
......@@ -148,6 +148,7 @@ namespace OnlineStore.DeviceLibrary
BothComAxis_To_P2();
BothMiddleAxis_To_P2();
BothXAxis_To_P1();
BuffAreaInstoreDoor(true);
break;
case StepEnum.SIB_01_MoveAxis_Ready:
MoveInfo.NextMoveStep(StepEnum.SIB_02_ToBufferArea);
......
......@@ -211,11 +211,26 @@ namespace OnlineStore.DeviceLibrary
}
}
}
else//两夹爪都有料
{
if(MoveInfo.MoveParam.PosInfoBack.PlateW==MoveInfo.MoveParam.PosInfo.PlateW &&
MoveInfo.MoveParam.PosInfoBack.PlateH == MoveInfo.MoveParam.PosInfo.PlateH)
{
MoveInfo.NextMoveStep(StepEnum.SOB_14_GetReels_Ready);
LogInfo($"出库 {MoveInfo.SLog}:[{MoveInfo.MoveParam.PosInfo.barcode}]取料完成,准备送往出料口。行走机构到待机点P1,料屉升降轴到P1点,移栽升降轴到下暂存区出库放料高点P4/P10");
MoveAxisToP1();
PullAxis_UpdownToP1();
UpdownAxisTo_P4_P10();
BuffAreaOutstoreDoor(true);
return;
}
}
//直接出库,执行该步骤的情况:1.另一个料叉有料;2.另一面有出库任务但出料口有料;3.另一面没有出库任务;
MoveInfo.NextMoveStep(StepEnum.SO_14_GetReels_Ready);
MoveAxisToP1();
PullAxis_UpdownToP1();
UpdownAxisTo_P4_P10();
BuffAreaOutstoreDoor(true);
if (MoveInfo.MoveParam.PosInfoBack == null)
LogInfo($"出库 {MoveInfo.SLog}:[{MoveInfo.MoveParam.PosInfo.barcode}]取料完成,准备送往出料口。行走机构到待机点P1,料屉升降轴到P1点,移栽升降轴到下暂存区出库放料高点P4/P10");
else
......
using CodeLibrary;
using OnlineStore.Common;
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
{
partial class BoxEquip
{
#region 出库
private void OutstoreExecute_BothSide()
{
switch (MoveInfo.MoveStep)
{
case StepEnum.SOB_14_GetReels_Ready:
//两侧已有同尺寸的料
MoveInfo.NextMoveStep(StepEnum.SOB_15_ToBufferArea);
break;
case StepEnum.SOB_15_ToBufferArea:
if (!BothOutDoorCheck(MoveInfo.MoveParam))
{
SetWarnMsg($"出库 {MoveInfo.SLog}:出料口有其他料盘,无法放置料盘[barcode={MoveInfo.MoveParam.PosInfo.barcode}][barcode={MoveInfo.MoveParam.PosInfoBack.barcode}]");
}
else
{
MoveInfo.NextMoveStep(StepEnum.SOB_16_VerifyBufferState);
BuffAreaOutstoreDoor(true);
LogInfo($"出库 {MoveInfo.SLog}:出料口无料盘确认,打开出料防护门,准备放料[barcode={MoveInfo.MoveParam.PosInfo.barcode}][barcode={MoveInfo.MoveParam.PosInfoBack.barcode}]");
}
break;
case StepEnum.SOB_16_VerifyBufferState:
if (!CheckInputMiddleAxisInBuff())
{
MoveInfo.NextMoveStep(StepEnum.SOB_17_InOutToBuff);
SetBoxStatus(DeviceStatus.OutStoreBoxEnd, RunStatus.Busy, MoveInfo.MoveParam.PosInfo.PosId, MoveInfo.MoveParam.PosInfo.barcode);
LogInfo($"出库 {MoveInfo.SLog}:移栽X轴到进出料暂存区取放点P2,行走机构到进出料机构取放点P2");
BothXAxis_To_P2();
MoveAxisToP2();
}
else if (MoveInfo.IsTimeOut())
{
SetWarnMsg($"等待上料机构旋转轴离开{MoveInfo.MoveParam.PosInfo.GetPosSide()}面暂存区超时");
}
break;
case StepEnum.SOB_17_InOutToBuff:
MoveInfo.NextMoveStep(StepEnum.SOB_18_ReleaseReel);
LogInfo($"出库 {MoveInfo.SLog}:松开料盘,移栽压紧轴到压紧前点P2");
BothComAxis_To_P2();
break;
case StepEnum.SOB_18_ReleaseReel:
MoveInfo.NextMoveStep(StepEnum.SOB_18_PutReel);
LogInfo($"出库 {MoveInfo.SLog}:放料盘,移栽升降轴到下暂存区放料低点P5/P11");
executeTime = (DateTime.Now - startTime).TotalSeconds.ToString("f2");
SetBoxStatus(DeviceStatus.OutStoreBoxEnd, RunStatus.Busy, MoveInfo.MoveParam.PosInfoBack.PosId, MoveInfo.MoveParam.PosInfoBack.barcode);
UpdownAxisTo_P5_P11();
break;
case StepEnum.SOB_18_PutReel:
MoveInfo.NextMoveStep(StepEnum.SOB_19_InOutBackFromBuff);
LogInfo($"出库 {MoveInfo.SLog}:[{MoveInfo.MoveParam.PosInfo.ToStr()}]出库完成[耗时:{(DateTime.Now - startTime).TotalSeconds.ToString("f2")}秒],移栽X轴到待机点P1,行走机构到待机点P1");
BothXAxis_To_P1();
MoveAxisToP1();
break;
case StepEnum.SOB_19_InOutBackFromBuff:
//出库料盘放置成功,将料盘信息写入对应出料口
if (CheckASide())
{
BufferDataManager.AOutStoreInfo = MoveInfo.MoveParam.PosInfo.ToCopy();
BufferDataManager.BOutStoreInfo = MoveInfo.MoveParam.PosInfoBack.ToCopy();
}
else
{
BufferDataManager.BOutStoreInfo = MoveInfo.MoveParam.PosInfo.ToCopy();
BufferDataManager.AOutStoreInfo = MoveInfo.MoveParam.PosInfoBack.ToCopy();
}
MoveInfo.NextMoveStep(StepEnum.SOB_20_Finish);
BuffAreaOutstoreDoor(false);
LogInfo($"出库 {MoveInfo.SLog}:关闭出料防护门,出库结束");
break;
case StepEnum.SOB_20_Finish:
SetBoxStatus(DeviceStatus.StoreOnline, RunStatus.Runing);
MoveInfo.EndMove();
//停止记录
StopRecord();
AutoInout.InOutEndProcess(this, MoveType.OutStore);
break;
}
}
#endregion
}
}
......@@ -198,7 +198,7 @@ namespace OnlineStore.DeviceLibrary
PullAxis_Inout.AbsMove(MoveInfo, Config.PullAxis_Inout_CamB, Config.PullAxis_InOut_FindPosSpeed);
else
PullAxis_Inout.AbsMove(MoveInfo, Config.PullAxis_Inout_CamB, Config.PullAxis_Inout_P1_Speed);
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.PullAxis_Inout_B_Check, IO_VALUE.HIGH));
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.PullAxis_Inout_B_Check, IO_VALUE.HIGH));
}
}
/// <summary>
......@@ -207,7 +207,7 @@ namespace OnlineStore.DeviceLibrary
/// <param name="open">true:开启</param>
private void BuffAreaInstoreDoor(bool open)
{
if(open)//开门-上升
if (open)//开门-上升
{
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.UpperArea_InstoreDoor_Up, IO_VALUE.HIGH));
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.UpperArea_InstoreDoor_UpCheck, IO_VALUE.HIGH));
......@@ -225,7 +225,7 @@ namespace OnlineStore.DeviceLibrary
IOMove(IO_Type.UpperArea_InstoreDoor_Up, IO_VALUE.LOW);
IOMove(IO_Type.UpperArea_InstoreDoor_Down, IO_VALUE.HIGH);
}
}
/// <summary>
/// 出料防护门操作
......@@ -519,7 +519,7 @@ namespace OnlineStore.DeviceLibrary
return;//暂时屏蔽
if (CheckASide())
{
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Hook_A_Check,hasTray? IO_VALUE.HIGH:IO_VALUE.LOW));
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Hook_A_Check, hasTray ? IO_VALUE.HIGH : IO_VALUE.LOW));
}
else
{
......@@ -733,7 +733,7 @@ namespace OnlineStore.DeviceLibrary
col = i;
}
}
row=GetRowByPosition(side);
row = GetRowByPosition(side);
PosId = $"{CID}{side}{row.ToString().PadLeft(2, '0')}{col.ToString().PadLeft(2, '0')}0101";
MoveInfo.MoveParam = new InOutParam(new InOutPosInfo("Reset", PosId));
MoveInfo.MoveParam.MoveP = new LineMoveP(Config, MoveInfo.MoveParam.PosInfo.PosId);
......@@ -761,8 +761,8 @@ namespace OnlineStore.DeviceLibrary
BoxPosition boxPosition = CSVPositionReader<BoxPosition>.GetPositon(currow);
if (boxPosition != null)
{
if((pullUpdwn>=boxPosition.PullAxis_Updown_P4-errPullUpdwn) &&
(pullUpdwn<=boxPosition.PullAxis_Updown_P3+errPullUpdwn))
if ((pullUpdwn >= boxPosition.PullAxis_Updown_P4 - errPullUpdwn) &&
(pullUpdwn <= boxPosition.PullAxis_Updown_P3 + errPullUpdwn))
{
LogInfo($"料斗升降轴当前【{pullUpdwn}】在第{i}层的提取高点P3【{boxPosition.PullAxis_Updown_P3}】和提取低点P4【{boxPosition.PullAxis_Updown_P4}】之间");
return i;
......@@ -1103,6 +1103,19 @@ namespace OnlineStore.DeviceLibrary
return false;
}
private bool BothOutDoorCheck(InOutParam param)
{
if (param.PosInfo == null || param.PosInfoBack == null)
return false;
if (CheckAOutDoor() && CheckBOutDoor())
{
return true;
}
return false;
}
/// <summary>
/// 检查A出料口状态
/// </summary>
......@@ -1183,7 +1196,7 @@ namespace OnlineStore.DeviceLibrary
|| !runStatus.Equals(RunStatus.Runing)
|| !MoveInfo.MoveType.Equals(MoveType.None))
{
// LogUtil.error(Name + " 启动出库【" + param.PosInfo.ToStr() + "】失败,忙碌或报警中 ,storeStatus:" + runStatus + ",MoveType:" + MoveInfo.MoveType + ",isInSuddenDown:" + isInSuddenDown + ",isNoAirCheck:" + isNoAirpressure_Check);
// LogUtil.error(Name + " 启动出库【" + param.PosInfo.ToStr() + "】失败,忙碌或报警中 ,storeStatus:" + runStatus + ",MoveType:" + MoveInfo.MoveType + ",isInSuddenDown:" + isInSuddenDown + ",isNoAirCheck:" + isNoAirpressure_Check);
return false;
}
......@@ -1217,6 +1230,7 @@ namespace OnlineStore.DeviceLibrary
return;
}
OutstoreExecute();
OutstoreExecute_BothSide();
}
#endregion
}
......
......@@ -464,19 +464,17 @@ namespace OnlineStore.DeviceLibrary
if (MoveInfo.MoveType.Equals(MoveType.None) && NoErrorAlarm())
{
if (StoreManager.XLRStore.boxEquip.MoveInfo.MoveType.Equals(MoveType.OutStore))
if (CheckStartOutPos("A下暂存区", BufferDataManager.AOutStoreInfo, IO_Type.FeedingA_Outstore_UnderArea_ReelCheck, BatchMoveList))
{
CheckStartOutPos("存储机构", StoreManager.XLRStore.boxEquip.MoveInfo.MoveParam.PosInfo, IO_VALUE.HIGH, BatchMoveList);
}
else if (CheckStartOutPos("A下暂存区", BufferDataManager.AOutStoreInfo, IO_Type.FeedingA_Outstore_UnderArea_ReelCheck, BatchMoveList))
else if (CheckStartOutPos("B下暂存区", BufferDataManager.BOutStoreInfo, IO_Type.FeedingB_Outstore_UnderArea_ReelCheck, BatchMoveList))
{
}
else if (CheckStartOutPos("B下暂存区", BufferDataManager.BOutStoreInfo, IO_Type.FeedingB_Outstore_UnderArea_ReelCheck, BatchMoveList))
else if (StoreManager.XLRStore.boxEquip.MoveInfo.MoveType.Equals(MoveType.OutStore))
{
CheckStartOutPos("存储机构", StoreManager.XLRStore.boxEquip.MoveInfo.MoveParam.PosInfo, IO_VALUE.HIGH, BatchMoveList);
}
else
{
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!