Commit 5a6e9ac4 LN

托盘检测入口加锁处理

1 个父辈 ec5a2f4b
......@@ -218,7 +218,8 @@ PRO,0,移栽上下轴流水线取放料详细位置P2,UpDownP2DetialList,0X0=800
20200302
上料模块,入料的时候如果链条油两个料架,阻挡下降时间过久,会两个一起过去。
20200303
托盘检测入口加锁处理。
......
......@@ -314,6 +314,11 @@ namespace OnlineStore.DeviceLibrary
preTrayNum = currTrayNum;
currTrayNum = RFIDManager.GetTrayNum(DeviceID, true);
LogInfo(" [" + trayCount + "] IP [" + RFIDManager.GetRFIP(DeviceID) + "] [" + preTrayNum + "] 当前托盘 [" + currTrayNum + "]");
if (preTrayNum.Equals(currTrayNum))
{
TrayManager.TrayErrorMsg =DateTime.Now.ToLongTimeString()+" "+ Name + "托盘号出现错乱:上一个托盘[" + preTrayNum + "] 当前托盘 [" + currTrayNum + "],连续两个托盘号一样";
LogUtil.error(Name + "托盘号出现错乱:上一个托盘[" + preTrayNum + "] 当前托盘 [" + currTrayNum + "],连续两个托盘号一样");
}
return true;
}
......
......@@ -134,8 +134,8 @@ namespace OnlineStore.DeviceLibrary
else if (IOValue(IO_Type.SL_Stop_Check).Equals(IO_VALUE.HIGH))
{
MoveInfo.NextMoveStep(LineMoveStep.FO_03_LineStart);
OutLog("准备出库料架: " + MoveInfo.SLog + " 阻挡工位检测有料架,进料阻挡下降,缓冲阻挡下降,流水线转动 1000");
IOMove(IO_Type.SL_Entry_StopDown, IO_VALUE.HIGH);
OutLog("准备出库料架: " + MoveInfo.SLog + " 阻挡工位检测有料架,进料阻挡下降1000ms,缓冲阻挡下降,流水线转动 1000");
IOMove(IO_Type.SL_Entry_StopDown, IO_VALUE.HIGH,1000);
IOMove(IO_Type.SL_Buffer_StopDown, IO_VALUE.LOW);
IOMove(IO_Type.SL_Line_Run, IO_VALUE.HIGH);
//等待指定时间
......
......@@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
......@@ -30,42 +31,69 @@ namespace OnlineStore.DeviceLibrary
}
return false;
}
internal DateTime lastStopDown = DateTime.Now;
private Stopwatch trayCheckWait = new Stopwatch();
private object lockObj = "";
private void StartCheckFixture()
{
bool canProcess = (LineManager.Line.SwNoProcess(Config.SidesWayNum));
//int num = TrayManager.GetTrayNum(DeviceID);
if (IOValue(IO_Type.StopCylinder_Check2).Equals(IO_VALUE.HIGH) )
if (Monitor.TryEnter(lockObj, 100))
{
if (TrayManager.checkWatch(trayCheckWait, TrayManager.SwTrayWaitTime, true) && canProcess)
try
{
trayCheckWait.Stop();
SecondMoveInfo.NewMove(LineMoveType.CheckFixture);
CheckLog("托盘阻挡" + SecondMoveInfo.SLog + "阻挡气缸1-1上升)");
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_Stop2Down);
IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.LOW);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Down1, IO_VALUE.LOW));
}
if (SecondMoveInfo.MoveType.Equals(LineMoveType.None).Equals(false))
{
return;
}
bool canProcess = (LineManager.Line.SwNoProcess(Config.SidesWayNum));
//int num = TrayManager.GetTrayNum(DeviceID);
if (IOValue(IO_Type.StopCylinder_Check2).Equals(IO_VALUE.HIGH))
{
if (TrayManager.checkWatch(trayCheckWait, TrayManager.SwTrayWaitTime, true) && canProcess)
{
trayCheckWait.Stop();
SecondMoveInfo.NewMove(LineMoveType.CheckFixture);
CheckLog("托盘阻挡" + SecondMoveInfo.SLog + "阻挡气缸1-1上升)");
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_Stop2Down);
IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.LOW);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Down1, IO_VALUE.LOW));
}
}
else if (IOValue(IO_Type.StopCylinder_Check1).Equals(IO_VALUE.HIGH) )
{
if (TrayManager.checkWatch(trayCheckWait, TrayManager.SwTrayWaitTime, true) && canProcess)
}
else if (IOValue(IO_Type.StopCylinder_Check1).Equals(IO_VALUE.HIGH) && (DateTime.Now - lastStopDown).TotalSeconds > 3)
{
if (TrayManager.checkWatch(trayCheckWait, TrayManager.SwTrayWaitTime, true) && canProcess)
{
lastStopDown = DateTime.Now;
trayCheckWait.Stop();
//托盘在第一个阻挡处
SecondMoveInfo.NewMove(LineMoveType.CheckFixture);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_00_Stop1Down);
LogUtil.info(Name + " 托盘检测:" + SecondMoveInfo.SLog + "阻挡气缸1-1下降 ,等待 StopCylinder_Check1=0");
//CheckLog(" 托盘检测:" + SecondMoveInfo.SLog + "阻挡气缸1-1下降 ,等待 StopCylinder_Check1=0" );
IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.HIGH);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Down1, IO_VALUE.HIGH));
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Check1, IO_VALUE.LOW));
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(TrayManager.StopDownWaitTime));
}
}
else
{
trayCheckWait.Stop();
}
}
catch (Exception ex)
{
trayCheckWait.Stop();
//托盘在第一个阻挡处
SecondMoveInfo.NewMove(LineMoveType.CheckFixture);
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_00_Stop1Down);
CheckLog(" 托盘检测:" + SecondMoveInfo.SLog + "阻挡气缸1-1下降 ,等待 StopCylinder_Check1=0" );
IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.HIGH);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Down1, IO_VALUE.HIGH));
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Check1, IO_VALUE.LOW));
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(TrayManager.StopDownWaitTime));
LogUtil.error(Name + " StartCheckFixture " + " 出错:" + ex.ToString());
}
finally
{
Monitor.Exit(lockObj);
}
}
else
{
trayCheckWait.Stop();
LogUtil.error(Name + " StartCheckFixture " + "失败,未得到锁");
}
}
private void MO_14_TopCylinder_Down()
......@@ -214,31 +242,14 @@ namespace OnlineStore.DeviceLibrary
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_Stop2Down);
CheckLog("托盘阻挡" + SecondMoveInfo.SLog + " 再次检测料盘信号");
//CheckLog("托盘阻挡" + SecondMoveInfo.SLog + " 等待" + TrayManager.SwTrayWaitTime + ",再次检测料盘信号");
IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.LOW);
// SecondMoveInfo.OneWaitCanEndStep = true;
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Check2, IO_VALUE.HIGH));
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(TrayManager.StopDownWaitTime));
// SecondMoveInfo.EndStepWait();
IOMove(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_03_Stop2Down))
{
//if (IOValue(IO_Type.StopCylinder_Check2).Equals(IO_VALUE.HIGH))
//{
{
CheckLog("托盘阻挡" + SecondMoveInfo.SLog + " ,等待编码信号稳定StopCylinder_Check2=1");
SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_04_Wait);
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Check2, IO_VALUE.HIGH));
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(100));
//SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(TrayManager.StopDownWaitTime));
//}
//else
//{
// SecondMoveInfo.NextMoveStep(LineMoveStep.MIO_03_Stop2Down);
// CheckLog("托盘阻挡" + SecondMoveInfo.SLog + " 等待" + TrayManager.SwTrayWaitTime + ",再次检测料盘信号");
// IOMove(IO_Type.StopCylinder_Down1, IO_VALUE.LOW);
// SecondMoveInfo.OneWaitCanEndStep = true;
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Check2, IO_VALUE.HIGH));
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(TrayManager.StopDownWaitTime));
//}
SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.StopCylinder_Check2, IO_VALUE.HIGH));
}
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MIO_04_Wait))
{
......@@ -309,6 +320,7 @@ namespace OnlineStore.DeviceLibrary
{
SecondMoveInfo.EndMove();
CheckLog("托盘放行 结束,触发 TrayPEndEvent ");
lastStopDown = DateTime.Now.AddSeconds(-2);
this.TrayPEndEvent?.Invoke(Config.SidesWayNum, currTrayNum);
}
else
......@@ -344,6 +356,7 @@ namespace OnlineStore.DeviceLibrary
{
CheckLog("托盘放行 结束,触发 TrayPEndEvent ");
SecondMoveInfo.EndMove();
lastStopDown = DateTime.Now.AddSeconds(-2);
this.TrayPEndEvent?.Invoke(Config.SidesWayNum, currTrayNum);
}
#endregion
......
......@@ -436,6 +436,7 @@ namespace OnlineStore.DeviceLibrary
{
Task.Factory.StartNew(delegate
{
LogUtil.info("定时会写IO: ["+ IoType + "]=["+ value + "],msTime="+msTime);
IOManager.IOMove(IoType, value, baseConfig.Id);
Thread.Sleep(msTime);
IO_VALUE tValue = value.Equals(IO_VALUE.HIGH) ? IO_VALUE.LOW : IO_VALUE.HIGH;
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!