Commit 9fea21ae LN

托盘横移修改:托盘检测信号需要持续500。阻挡气缸单独下降。

1 个父辈 e095c294
......@@ -34,6 +34,7 @@ namespace OnlineStore.DeviceLibrary
/// 升降轴
/// </summary>
public AxisBean UpdownAxis = null;
public delegate void TrayProcessEnd(int swNum, int trayNum);
protected virtual void StopMoveProcess()
{
......
......@@ -43,6 +43,7 @@ namespace OnlineStore.DeviceLibrary
return false;
}
public event TrayProcessEnd TrayPEndEvent;
#region 托盘检测
private InOutParam CheckParam = new InOutParam();
private void StartCheckFixture()
......@@ -54,10 +55,8 @@ namespace OnlineStore.DeviceLibrary
if (Config.SidesWayNum > 0)
{
bool isTestNeed = (LineManager.Line.runStatus <= LineRunStatus.Wait);
bool isNeedTray = (LineManager.Line.SwNoProcess(Config.SidesWayNum));
if (IOValue(IO_Type.SW_TrayCheck).Equals(IO_VALUE.HIGH) && (isTestNeed || isNeedTray))
bool canProcess = (LineManager.Line.SwNoProcess(Config.SidesWayNum));
if (IOValue(IO_Type.SW_TrayCheck).Equals(IO_VALUE.HIGH) && canProcess)
{
UpdateTrayNum();
// preTrayNum = currTrayNum;
......@@ -78,14 +77,13 @@ namespace OnlineStore.DeviceLibrary
TrayManager.UpdateSWState(Config.SidesWayNum, 1);
}
}
else if (Config.SidesWayNum.Equals(2) && IOValue(IO_Type.SW_StopCheck).Equals(IO_VALUE.HIGH) && (isTestNeed || isNeedTray))
else if (Config.SidesWayNum.Equals(2) && IOValue(IO_Type.SW_StopCheck).Equals(IO_VALUE.HIGH) && canProcess)
{
SecondMoveInfo.NewMove(LineMoveType.CheckFixture, CheckParam);
TrayManager.UpdateSWState(Config.SidesWayNum, 2);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_01_StopCylinder1Down);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_00_StopCylinder1Down);
CheckLog("检测到SW_StopCheck:" + SecondMoveInfo.SLog + "阻挡气缸下降 ,等待"+TrayManager.StopDownWaitTime);
IOMove(IO_Type.SW_StopDown, IO_VALUE.HIGH);
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SW_StopDown, IO_VALUE.LOW));
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(TrayManager.StopDownWaitTime));
}
}
......@@ -107,7 +105,7 @@ namespace OnlineStore.DeviceLibrary
{
//托盘在第一个阻挡处
SecondMoveInfo.NewMove(LineMoveType.CheckFixture);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_01_StopCylinder1Down);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_00_StopCylinder1Down);
CheckLog(" 检测到FL_StopCheck:" + SecondMoveInfo.SLog + " FL阻挡1下降 ,最多等待1秒)");
IOMove(IO_Type.FL_StopCylinder_Down1, IO_VALUE.HIGH);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.FL_StopCylinder_Down1, IO_VALUE.HIGH));
......@@ -133,11 +131,11 @@ namespace OnlineStore.DeviceLibrary
}
#region 托盘检测
if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_01_StopCylinder1Down))
if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_00_StopCylinder1Down))
{
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_StopCylinder2Down);
if (Config.SidesWayNum <= 0)
{
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_StopCylinder2Down);
CheckLog("托盘检测:" + SecondMoveInfo.SLog + "阻挡1上升,等待FL_TrayCheck=1)");
IOMove(IO_Type.FL_StopCylinder_Down1, IO_VALUE.LOW);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.FL_StopCylinder_Down1, IO_VALUE.LOW));
......@@ -145,12 +143,39 @@ namespace OnlineStore.DeviceLibrary
}
else
{
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_01_FixtureCheck);
CheckLog("托盘检测:" + SecondMoveInfo.SLog + "阻挡气缸上升,等待SW_TrayCheck=1)");
IOMove(IO_Type.SW_StopDown, IO_VALUE.LOW);
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SW_StopDown, IO_VALUE.LOW));
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SW_TrayCheck, IO_VALUE.HIGH));
}
}
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_01_FixtureCheck))
{
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_02_WaitFixture);
CheckLog("托盘检测:" + SecondMoveInfo.SLog + "再次等待SW_TrayCheck=1并需要持续:" + TrayManager.SwTrayWaitTime);
IOMove(IO_Type.SW_StopDown, IO_VALUE.LOW);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SW_TrayCheck, IO_VALUE.HIGH));
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(TrayManager.SwTrayWaitTime));
}
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_02_WaitFixture))
{
if (IOValue(IO_Type.SW_TrayCheck).Equals(IO_VALUE.HIGH))
{
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_StopCylinder2Down);
CheckLog("托盘检测:" + SecondMoveInfo.SLog + "阻挡气缸上升,等待SW_TrayCheck=1)");
IOMove(IO_Type.SW_StopDown, IO_VALUE.LOW);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SW_TrayCheck, IO_VALUE.HIGH));
}
else
{
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_02_WaitFixture);
CheckLog("托盘检测:" + SecondMoveInfo.SLog + "再次等待SW_TrayCheck=1并需要持续:" + TrayManager.SwTrayWaitTime);
IOMove(IO_Type.SW_StopDown, IO_VALUE.LOW);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SW_TrayCheck, IO_VALUE.HIGH));
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(TrayManager.SwTrayWaitTime));
}
}
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_03_StopCylinder2Down))
{
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_04_Wait);
......@@ -191,8 +216,7 @@ namespace OnlineStore.DeviceLibrary
else
{
CheckLog("托盘检测:不需要次托盘,结束处理 )");
TrayManager.UpdateSWState(Config.SidesWayNum, 1);
SecondMoveInfo.EndMove();
SMoveEnd();
}
}
}
......@@ -249,11 +273,10 @@ namespace OnlineStore.DeviceLibrary
{
if (Config.SidesWayNum.Equals(2))
{
//更新横移托盘已处理完成
TrayManager.UpdateSWState(Config.SidesWayNum, 1);
//preTrayNum = currTrayNum;
CheckLog("托盘放行: 此处为环形线横移2,顶升气缸不需要下降, (托盘放行结束) ");
SecondMoveInfo.EndMove();
SMoveEnd();
}
else
{
......@@ -275,11 +298,8 @@ namespace OnlineStore.DeviceLibrary
{
if (Config.SidesWayNum > 0)
{
//更新横移托盘已处理完成
TrayManager.UpdateSWState(Config.SidesWayNum, 1);
//preTrayNum = currTrayNum;
CheckLog("托盘放行 SecondStoreMove:(托盘放行结束) ");
SecondMoveInfo.EndMove();
SMoveEnd();
}
else
{
......@@ -308,8 +328,7 @@ namespace OnlineStore.DeviceLibrary
{
//preTrayNum = currTrayNum;
CheckLog("托盘放行 SecondStoreMove:(托盘放行结束) ");
// IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.HIGH);
SecondMoveInfo.EndMove();
SMoveEnd();
}
#endregion
......@@ -333,6 +352,13 @@ namespace OnlineStore.DeviceLibrary
}
}
private void SMoveEnd()
{
TrayManager.UpdateSWState(Config.SidesWayNum, 1);
SecondMoveInfo.EndMove();
this.TrayPEndEvent?.Invoke(Config.SidesWayNum, currTrayNum);
}
#endregion
#region 入料流程
......
......@@ -12,9 +12,10 @@ namespace OnlineStore.DeviceLibrary
{
#region 出料流程
private int OutStoreHeight = -1;
internal bool CanStartCheckOut()
internal bool CanStartCheckOut(int trayNum)
{
UpdateTrayNum();
preTrayNum = currTrayNum;
currTrayNum = trayNum;
if (CurrTrayIsNeed(currTrayNum, true))
{
SecondMoveInfo.NewMove(LineMoveType.CheckFixture, CheckParam);
......
......@@ -88,6 +88,7 @@ namespace OnlineStore.DeviceLibrary
AddDeviceName(ioList, config.IOIPList);
FeedingEquipMap.Add(config.Id, equip);
AllEquipMap.Add(config.Id, equip);
equip.TrayPEndEvent += Equip_TrayPEndEvent;
}
foreach (MoveEquip_Config config in configList.Values)
{
......@@ -104,6 +105,7 @@ namespace OnlineStore.DeviceLibrary
AddDeviceName(ioList, config.IOIPList);
ProvidingEquipMap.Add(config.Id, equip);
AllEquipMap.Add(config.Id, equip);
equip.TrayPEndEvent += Equip_TrayPEndEvent;
}
foreach (DischargeLine_Config config in disLineMap.Values)
{
......@@ -316,7 +318,7 @@ namespace OnlineStore.DeviceLibrary
private void RHomeOp()
{
TrayManager.SidesWayStateMap = new System.Collections.Concurrent.ConcurrentDictionary<int, int>() ;
// TrayManager.SidesWayStateMap = new System.Collections.Concurrent.ConcurrentDictionary<int, int>() ;
alarmType = LineAlarmType.None;
mainTimer.Enabled = false;
IoCheckTimer.Enabled = false;
......
......@@ -418,7 +418,7 @@ namespace OnlineStore.DeviceLibrary
{
//托盘在第一个阻挡处
SecondMoveInfo.NewMove(LineMoveType.CheckFixture);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_01_StopCylinder1Down);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_00_StopCylinder1Down);
CheckLog(" 托盘检测:料盘检测StopCylinder_Check1 " + SecondMoveInfo.SLog + "阻挡气缸1-1下降 ,最多等待1秒)");
IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.HIGH);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Down1, IO_VALUE.HIGH));
......@@ -442,7 +442,7 @@ namespace OnlineStore.DeviceLibrary
}
#region 托盘检测
if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_01_StopCylinder1Down))
if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_00_StopCylinder1Down))
{
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_StopCylinder2Down);
CheckLog("托盘阻挡" + SecondMoveInfo.SLog + " 阻挡气缸1-1上升,等待 阻挡2托盘检测=1)");
......@@ -450,7 +450,7 @@ namespace OnlineStore.DeviceLibrary
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Down1, IO_VALUE.LOW));
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Check2, IO_VALUE.HIGH));
}
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_02_FixtureCheck))
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_01_FixtureCheck))
{
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_StopCylinder2Down);
CheckLog("托盘阻挡" + SecondMoveInfo.SLog + " 阻挡气缸1-1上升)");
......
......@@ -10,6 +10,7 @@ namespace OnlineStore.DeviceLibrary
{
partial class ProvidingEquip
{
public event TrayProcessEnd TrayPEndEvent;
#region 托盘检测
protected override bool CheckWaitResult(LineMoveInfo moveInfo, WaitResultInfo wait)
......@@ -49,7 +50,7 @@ namespace OnlineStore.DeviceLibrary
{
//托盘在第一个阻挡处
SecondMoveInfo.NewMove(LineMoveType.CheckFixture);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_01_StopCylinder1Down);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_00_StopCylinder1Down);
TrayManager.UpdateSWState(Config.SidesWayNum, 2);
CheckLog(" 托盘检测:" + SecondMoveInfo.SLog + "阻挡气缸1-1下降 ,最多等待1秒)");
IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.HIGH);
......@@ -78,7 +79,7 @@ namespace OnlineStore.DeviceLibrary
}
#region 托盘检测
if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_01_StopCylinder1Down))
if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_00_StopCylinder1Down))
{
CheckLog("托盘阻挡" + SecondMoveInfo.SLog + " 阻挡气缸1-1上升,等待 阻挡2托盘检测=1)");
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_StopCylinder2Down);
......@@ -86,7 +87,7 @@ namespace OnlineStore.DeviceLibrary
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Down1, IO_VALUE.LOW));
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Check2, IO_VALUE.HIGH));
}
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_02_FixtureCheck))
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_01_FixtureCheck))
{
CheckLog("托盘阻挡" + SecondMoveInfo.SLog + " 阻挡气缸1-1上升)");
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_StopCylinder2Down);
......@@ -201,9 +202,10 @@ namespace OnlineStore.DeviceLibrary
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MO_18_StopCylinder_Back))
{
//preTrayNum = currTrayNum;
CheckLog("托盘放行 SecondMove:(托盘放行结束) ");
CheckLog("托盘放行 SecondMove:(托盘放行结束),出发 TrayPEndEvent ");
// IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.HIGH);
SecondMoveInfo.EndMove();
this.TrayPEndEvent?.Invoke(Config.SidesWayNum, currTrayNum);
}
#endregion
}
......
......@@ -12,6 +12,7 @@ namespace OnlineStore.DeviceLibrary
{
public class TrayManager
{
public static int SwTrayWaitTime = 500;
public static int StopDownWaitTime = 500;
public static RFID RfidReader = new RFID();
/// <summary>
......@@ -249,16 +250,16 @@ namespace OnlineStore.DeviceLibrary
#region 横移状态缓存
internal static ConcurrentDictionary<int, int> SidesWayStateMap = new ConcurrentDictionary<int, int>();
// internal static ConcurrentDictionary<int, int> SidesWayStateMap = new ConcurrentDictionary<int, int>();
internal static int GetSwStatus(int swNum)
{
if (SidesWayStateMap.ContainsKey(swNum))
{
return SidesWayStateMap[swNum];
}
//if (SidesWayStateMap.ContainsKey(swNum))
//{
// return SidesWayStateMap[swNum];
//}
return 0;
}
internal static bool CanMoveSidesWay(int swNum)
internal static bool LineCanMoveSW(int swNum)
{
int status = GetSwStatus(swNum);
......@@ -267,20 +268,14 @@ namespace OnlineStore.DeviceLibrary
{
if (equip.Config.SidesWayNum.Equals(swNum))
{
if (equip.IsDebug || equip.runStatus <= LineRunStatus.Wait)
if (equip.runStatus <= LineRunStatus.Wait || equip.isInSuddenDown || equip.isNoAirCheck)
{
return true;
}
//上料3如果报警,可以直接处理移栽
if (status.Equals(0) && swNum.Equals(2) && (equip.isInSuddenDown || equip.isNoAirCheck))
if (equip.SecondMoveInfo.MoveType.Equals(LineMoveType.None))
{
return true;
}
if (equip.SecondMoveInfo.MoveType.Equals(LineMoveType.None).Equals(false))
{
return false ;
}
break;
}
}
......@@ -288,29 +283,15 @@ namespace OnlineStore.DeviceLibrary
{
if (equip.Config.SidesWayNum.Equals(swNum))
{
if (equip.IsDebug || equip.runStatus <= LineRunStatus.Wait)
if (equip.runStatus <= LineRunStatus.Wait || equip.isInSuddenDown || equip.isNoAirCheck)
{
return true;
}
if (equip.SecondMoveInfo.MoveType.Equals(LineMoveType.None).Equals(false))
{
return false ;
}
break;
}
}
if (status.Equals(1) )
if (equip.SecondMoveInfo.MoveType.Equals(LineMoveType.None))
{
return true;
}
else if (swNum.Equals(1) || swNum.Equals(3))
{
if (status.Equals(0) )
{
return true;
break;
}
}
return false;
......@@ -323,19 +304,19 @@ namespace OnlineStore.DeviceLibrary
/// <param name="value">0=未处理等待中,1=托盘处理完成,可处理横移,2=托盘检测处理中</param>
internal static void UpdateSWState(int swNum, int value)
{
if (swNum <= 0)
{
return;
}
if (SidesWayStateMap.ContainsKey(swNum))
{
SidesWayStateMap[swNum] = value;
}
else
{
SidesWayStateMap.TryAdd(swNum, value);
}
//if (swNum <= 0)
//{
// return;
//}
//if (SidesWayStateMap.ContainsKey(swNum))
//{
// SidesWayStateMap[swNum] = value;
//}
//else
//{
// SidesWayStateMap.TryAdd(swNum, value);
//}
}
......
......@@ -7,7 +7,7 @@ using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
......@@ -386,9 +386,22 @@ namespace OnlineStore.DeviceLibrary
IOMove(IoType, value);
}
}
public void IOMove(string IoType, IO_VALUE value)
public void IOMove(string IoType, IO_VALUE value, int msTime = 0)
{
if (msTime <= 0)
{
IOManager.IOMove(IoType, value, baseConfig.Id);
}
else
{
Task.Factory.StartNew(delegate
{
IOManager.IOMove(IoType, value, baseConfig.Id);
Thread.Sleep(msTime);
IO_VALUE tValue = value.Equals(IO_VALUE.HIGH) ? IO_VALUE.LOW : IO_VALUE.HIGH;
IOManager.IOMove(IoType, tValue, baseConfig.Id);
});
}
}
public IO_VALUE IOValue(string IoType)
{
......
......@@ -265,11 +265,15 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
///移载(流水线)装置出入库处理,阻挡气缸1-1下降
/// </summary>
MIO_01_StopCylinder1Down = 3081,
MIO_00_StopCylinder1Down = 3080,
/// <summary>
///移载(流水线)装置出入库处理,夹具检测1-4=1
/// </summary>
MIO_02_FixtureCheck = 3082,
MIO_01_FixtureCheck = 3081,
/// <summary>
/// 移载(流水线)装置出入库处理,等待夹具持续500毫秒
/// </summary>
MIO_02_WaitFixture = 3082,
/// <summary>
///移载(流水线)装置出入库处理,阻挡气缸1-1上升
/// </summary>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!