Commit 5a6e9ac4 LN

托盘检测入口加锁处理

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