Commit e3121344 LN

出料气缸加长,皮带线逻辑修改。

1 个父辈 b96e30eb
......@@ -214,12 +214,12 @@ namespace OnlineStore.AssemblyLine
btnLine1Test.Text = line1Name + "出库测试";
btnLine2Test.Text = line2Name + "出库测试";
this.cmbLineType.Items.AddRange(new object[] {
line1Name+"运转-入口定位",
line2Name+"运转-入口定位",
//line1Name+"运转-入口定位",
//line2Name+"运转-入口定位",
line3Name+"运转测试",
line1Name+"运转-出口定位",
line2Name+"运转-出口定位"});
cmbLineType.SelectedIndex = 2;
line1Name+"运转测试",
line2Name+"运转测试"});
cmbLineType.SelectedIndex = 0;
IsLoad = true;
}
......@@ -362,25 +362,15 @@ namespace OnlineStore.AssemblyLine
return;
}
int index = cmbLineType.SelectedIndex;
string moveIo = IO_Type.DLine_Run1;
string waitIo = IO_Type.EntryLocation_Check1;
string moveIo = IO_Type.DLine_Run3;
string waitIo = IO_Type.Location_Check3;
if (index.Equals(1))
{
moveIo = IO_Type.DLine_Run2;
waitIo = IO_Type.EntryLocation_Check2;
}
else if (index.Equals(2))
{
moveIo = IO_Type.DLine_Run3;
waitIo = IO_Type.Location_Check3;
}
else if (index.Equals(3))
{
moveIo = IO_Type.DLine_Run1;
waitIo = IO_Type.ExitLocation_Check1;
}
else if (index.Equals(4))
else if (index.Equals(2))
{
moveIo = IO_Type.DLine_Run2;
waitIo = IO_Type.ExitLocation_Check2;
......
......@@ -291,8 +291,11 @@ IO_Value增加None的定义,防止误操作
20200312
皮带线判断修改
皮带线3扫码的时候不能开始送料。
短皮带线逻辑修改:对应气缸加长修改。
扫码修改:去掉不需要的缓存。
阻挡1下降条件修改:等待1离开或者2到达都可以继续。
上料1模块,等待500ms再下降顶升气缸
......
......@@ -46,14 +46,14 @@ namespace OnlineStore.DeviceLibrary
SecondMoveInfo = new LineMoveInfo(DeviceID, "[" + hengyiName + "-SMove]");
if (id.Equals(1))
{
TrayLine1 = new OutTrayLineBean("皮带线" + "_" + ((id - 1) * 3 + 1) + " ", IO_Type.EntryLocation_Check1, IO_Type.ExitLocation_Check1, IO_Type.ExitTray_Check1, IO_Type.DLine_Run1, IO_Type.EntryTray_Check3, this.DeviceID);
TrayLine2 = new OutTrayLineBean("皮带线" + "_" + ((id - 1) * 3 + 2) + " ", IO_Type.EntryLocation_Check2, IO_Type.ExitLocation_Check2, IO_Type.ExitTray_Check2, IO_Type.DLine_Run2, IO_Type.MiddleTray_Check3, this.DeviceID);
TrayLine1 = new OutTrayLineBean(330 + ((id - 1) * 3 + 1) , "皮带线" + "_" + ((id - 1) * 3 + 1) + " ", IO_Type.ExitLocation_Check1, IO_Type.ExitTray_Check1, IO_Type.DLine_Run1, IO_Type.EntryTray_Check3, this.DeviceID);
TrayLine2 = new OutTrayLineBean(330 + ((id - 1) * 3 + 2),"皮带线" + "_" + ((id - 1) * 3 + 2) + " ", IO_Type.ExitLocation_Check2, IO_Type.ExitTray_Check2, IO_Type.DLine_Run2, IO_Type.MiddleTray_Check3, this.DeviceID);
}
else
{
IsNewType = true;
TrayLine1 = new OutTrayLineBean("皮带线" + "_" + ((id - 1) * 3 + 1) + " ", IO_Type.EntryLocation_Check1, IO_Type.ExitLocation_Check1, IO_Type.ExitTray_Check1, IO_Type.DLine_Run1, IO_Type.MiddleTray_Check3, this.DeviceID);
TrayLine2 = new OutTrayLineBean("皮带线" + "_" + ((id - 1) * 3 + 2) + " ", IO_Type.EntryLocation_Check2, IO_Type.ExitLocation_Check2, IO_Type.ExitTray_Check2, IO_Type.DLine_Run2, IO_Type.EntryTray_Check3, this.DeviceID);
TrayLine1 = new OutTrayLineBean(330+ ((id - 1) * 3 + 1),"皮带线" + "_" + ((id - 1) * 3 + 1) + " ", IO_Type.ExitLocation_Check1, IO_Type.ExitTray_Check1, IO_Type.DLine_Run1, IO_Type.MiddleTray_Check3, this.DeviceID);
TrayLine2 = new OutTrayLineBean(330+((id - 1) * 3 + 2),"皮带线" + "_" + ((id - 1) * 3 + 2) + " ", IO_Type.ExitLocation_Check2, IO_Type.ExitTray_Check2, IO_Type.DLine_Run2, IO_Type.EntryTray_Check3, this.DeviceID);
}
Line3Turn = new LineTurnBean(DeviceID);
if ((DeviceID % 100).Equals(1))
......@@ -276,7 +276,7 @@ namespace OnlineStore.DeviceLibrary
else
{
//皮带线3出口有料,分盘定位装置无料
if (Line3TurnIsStop() && IOValue(IO_Type.SeparateDevice_Check).Equals(IO_VALUE.LOW) && StationInfo_NG.TrayValue.Equals(IO_VALUE.HIGH))
if (Line3TurnIsStop() && IOValue(IO_Type.SeparateDevice_Check).Equals(IO_VALUE.LOW) && StationInfo_NG.TrayValue.Equals(IO_VALUE.HIGH)&&IsInScanCode.Equals(false))
{
StartOutStoreMove(new InOutParam());
}
......
......@@ -328,10 +328,12 @@ namespace OnlineStore.DeviceLibrary
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_07_SeparateCheck))
{
MoveInfo.NextMoveStep(LineMoveStep.DON_08_CRun);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.HIGH);
if (IOValue(IO_Type.SeparateDevice_Check).Equals(IO_VALUE.HIGH))
{
int robotIndex = GetRobotIndex();
LogUtil.info(hengyiName + MoveInfo.SLog + "送料,接驳台有料盘,等待2000,调用arriveRobotLocation=" + robotIndex);
LogUtil.info(hengyiName + MoveInfo.SLog + "送料,接驳台有料盘,等待2000,调用arriveRobotLocation=" + robotIndex+"["+StationInfo_Move.CodeStr+"]");
SServerManager.arriveRobotLocation(Name, robotIndex, StationInfo_Move.CodeStr);
}
......@@ -339,8 +341,6 @@ namespace OnlineStore.DeviceLibrary
{
LogUtil.info(hengyiName + MoveInfo.SLog + "送料,接驳台无料盘,等待2000,");
}
IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.HIGH);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_08_CRun))
{
......
......@@ -497,7 +497,7 @@ namespace OnlineStore.DeviceLibrary
//}
if (wait.IsEnd)
{
if (MoveInfo.OneWaitCanEndStep)
if (moveInfo.OneWaitCanEndStep)
{
isOk = true;
break;
......@@ -505,7 +505,7 @@ namespace OnlineStore.DeviceLibrary
}
else
{
if (!MoveInfo.OneWaitCanEndStep)
if (!moveInfo.OneWaitCanEndStep)
{
isOk = false;
break;
......@@ -570,7 +570,20 @@ namespace OnlineStore.DeviceLibrary
protected void InLog(string msg)
{
string posId = MoveInfo.MoveParam != null ? MoveInfo.MoveParam.PosId : "";
if (String.IsNullOrEmpty( posId))
if (baseConfig.DType.Equals(DeviceType.MoveEquip))
{
if (String.IsNullOrEmpty(posId))
{
LogUtil.debug(Name + " " + msg);
}
else
{
LogUtil.debug(Name + " " + "[" + posId + "]" + msg);
}
}
else
{
if (String.IsNullOrEmpty(posId))
{
LogUtil.info(Name + " " + msg);
}
......@@ -579,10 +592,11 @@ namespace OnlineStore.DeviceLibrary
LogUtil.info(Name + " " + "[" + posId + "]" + msg);
}
}
}
protected void OutLog(string msg)
{
string posId = MoveInfo.MoveParam != null ? MoveInfo.MoveParam.PosId : "";
if (baseConfig.DType.Equals(DeviceType.ProvidingEquip))
if (baseConfig.DType.Equals(DeviceType.ProvidingEquip) || baseConfig.DType.Equals(DeviceType.MoveEquip))
{
if (String.IsNullOrEmpty(posId))
{
......
......@@ -884,7 +884,13 @@ namespace OnlineStore.DeviceLibrary
CylinderMove(null, IO_Type.SW_LocationCylinder_Up, IO_Type.SW_LocationCylinder_Down);
if (Config.SidesWayNum.Equals(1))
{
Task.Factory.StartNew(delegate
{
//需要等待500再下降
Thread.Sleep(500);
CylinderMove(null, IO_Type.SW_TopCylinder_Up, IO_Type.SW_TopCylinder_Down);
});
}
}
else
......
......@@ -154,7 +154,7 @@ namespace OnlineStore.DeviceLibrary
}
if (wait.IsEnd)
{
if (MoveInfo.OneWaitCanEndStep)
if (checkWaitInfo.OneWaitCanEndStep)
{
isOk = true;
break;
......@@ -162,7 +162,7 @@ namespace OnlineStore.DeviceLibrary
}
else
{
if (!MoveInfo.OneWaitCanEndStep)
if (!checkWaitInfo.OneWaitCanEndStep)
{
isOk = false;
break;
......
......@@ -15,11 +15,8 @@ namespace OnlineStore.DeviceLibrary
public class OutTrayLineBean
{
public int MaxPosition = 5;
// private DischargeLine equipBean = null;
private int equipBeanId = 301;
private string Line3_TrayCheck = "";
//入口定位信号
private string EntryLocation_Check = "";
//出口定位信号
private string ExitLocation_Check = "";
//出口料盘检测信号
......@@ -36,14 +33,14 @@ namespace OnlineStore.DeviceLibrary
get { return LineManager.Line.DisLineMap[equipBeanId]; }
}
internal bool Line3CanRun = true;
public OutTrayLineBean(string name, string entryLocationS, string exitLocationS, string exittrayS, string lineRundo, string line3checkDi, int dId)
private int Id = 0;
public OutTrayLineBean(int id, string name, string exitLocationS, string exittrayS, string lineRundo, string line3checkDi, int dId)
{
this.Id = id;
lineRun = new LineTurnBean(dId);
this.equipBeanId = dId;
//this.equipBean = equipBean;
this.Name = name;
MoveInfo = new LineMoveInfo(1001, name);
this.EntryLocation_Check = entryLocationS;
MoveInfo = new LineMoveInfo(Id, name);
this.ExitLocation_Check = exitLocationS;
this.ExitTray_Check = exittrayS;
this.LineRun_Do = lineRundo;
......@@ -60,31 +57,66 @@ namespace OnlineStore.DeviceLibrary
// private string posId = "";
public bool StartOut(InOutParam moveParam)
{
if (LineTurnIsStop() && MoveInfo.MoveType.Equals(LineMoveType.None) && (equipBean.runStatus .Equals(LineRunStatus.Runing)|| equipBean.runStatus.Equals(LineRunStatus.Busy)))
if (LineTurnIsStop() && MoveInfo.MoveType.Equals(LineMoveType.None) && (equipBean.runStatus.Equals(LineRunStatus.Runing) || equipBean.runStatus.Equals(LineRunStatus.Busy)))
{
if (LastTrayPosition <= 1)
{
LogUtil.error(Name + " 启动送料【" + moveParam.ToStr() + "】 失败,入口有料" , Id + 32);
return false;
}
//MoveInfo.MoveParam = moveParam;
MoveInfo.NewMove(LineMoveType.OutStore,moveParam);
posId = moveParam.PosId;
MoveInfo.NewMove(LineMoveType.OutStore, moveParam);
posId = moveParam.PosId + "[" + moveParam.WareCode + "]["+moveParam.rfid+"]";
if (moveParam.InStoreNg)
{
posId = "入库NG料";
posId =moveParam.rfid+ "NG料" + "[" + moveParam.WareCode + "]";
}
MoveInfo.NextMoveStep(LineMoveStep.DLO_01_WaitEntryNoTray);
LogUtil.info(Name + "开始出料【" + moveParam.ToStr() + "】:" + MoveInfo.SLog + "等待出口无料盘,NG气缸后退");
if (equipBeanId.Equals(302) && EntryLocation_Check.Equals(IO_Type.EntryLocation_Check2))
MoveInfo.NextMoveStep(LineMoveStep.DLO_01_NGBack);
LogUtil.info(Name + "开始送料【" + moveParam.ToStr() + "】:" + MoveInfo.SLog + "NG气缸后退");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(300));
if (equipBeanId.Equals(302) )
{
if (equipBean.CylinderIsOk(IO_Type.NGCylinder_Before, IO_Type.NGCylinder_After))
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_02_WaitEnteryNoTray);
LogUtil.info(Name + "送料【" + posId + "】:" + MoveInfo.SLog + "--- 等待入口无料-- ");
}
else
{
equipBean.CylinderMove(MoveInfo, IO_Type.NGCylinder_Before, IO_Type.NGCylinder_After);
}
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
else
{
if (LastTrayPosition > 1)
{
WaitReviceTray();
}
else
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_02_WaitEnteryNoTray);
LogUtil.info(Name + "送料【" + posId + "】:" + MoveInfo.SLog + "--- 等待入口无料-- ");
}
}
return true;
}
else
{
LogUtil.error(Name + " 启动出料【" + moveParam.ToStr() + "】 失败", equipBeanId+31);
LogUtil.error(Name + " 启动送料【" + moveParam.ToStr() + "】 失败", Id + 31);
return false;
}
}
private void WaitReviceTray()
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_04_CanReviceTray);
LogUtil.info(Name + "送料【" + posId + "】:" + MoveInfo.SLog + "--- 等待移栽放料盘-- ");
LastTrayPosition = 1;
if (equipBean.IsDebug)
{
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
}
}
string posId = "";
internal void OutStoreProcess()
{
......@@ -97,64 +129,62 @@ namespace OnlineStore.DeviceLibrary
{
return;
}
// string posId = MoveInfo.MoveParam == null ? "" : MoveInfo.MoveParam.PosId;
if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_01_WaitEntryNoTray))
{
if (IsInTurn().Equals(false) && equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.LOW))
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_02_WaitExitNoTray);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "等待出口无料盘");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
else if (MoveInfo.IsTimeOut(180))
if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_01_NGBack))
{
LogUtil.error(Name + "等待出口无料盘超时:" + FormUtil.GetSpanStr(MoveInfo.StepSpan()), 305);
MoveInfo.NextMoveStep(LineMoveStep.DLO_02_WaitEnteryNoTray);
LogUtil.info(Name + "送料【" + posId + "】:" + MoveInfo.SLog + "--- 等待入口无料-- ");
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_02_WaitExitNoTray))
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_02_WaitEnteryNoTray))
{
if (LineTurnIsStop())
if (LastTrayPosition > 1)
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_03_LineRun);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "出口无料盘,转动到入口定位");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
lineRun.StartLineRun(LineRun_Do, EntryLocation_Check, null);
WaitReviceTray();
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_03_LineRun))
{
if (LineTurnIsStop())
else if (MoveInfo.IsTimeOut(180))
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_04_CanReviceTray);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "--- 等待移栽放料盘-- ");
if (equipBean.IsDebug)
{ MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000)); }
LogUtil.error(Name + "等待入口无料超时" + FormUtil.GetSpanStr(MoveInfo.StepSpan()), Id + 33);
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_04_CanReviceTray))
{
if (equipBean.IsDebug)
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_05_TrayIsOk);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "调试中更改为已放料盘");
LogUtil.info(Name + "送料【" + posId + "】:" + MoveInfo.SLog + "调试中,更改为已放料盘");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_05_TrayIsOk))
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_06_OutCheck);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + " --料盘已放----转动到出口定位");
LastTrayPosition = 1;
lineRun.StartLineRun(LineRun_Do, ExitLocation_Check, null);
MoveInfo.NextMoveStep(LineMoveStep.DLO_06_WaitTime);
LogUtil.info(Name + "送料【" + posId + "】:" + MoveInfo.SLog + "盘已放,等待2000");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_06_OutCheck))
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_06_WaitTime))
{
if (LineTurnIsStop())
if (equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.HIGH))
{
//皮带线不转,并且入口无信号
if (equipBean.Line3TurnIsStop() && equipBean.IOValue(Line3_TrayCheck).Equals(IO_VALUE.LOW))
{
Line3CanRun = false;
if (Line3_TrayCheck.Equals(IO_Type.EntryTray_Check3))
{
DLO_LineRun(LineMoveStep.DLO_07_LineRun);
equipBean.Line3LastTrayP = 1;
}
}
else
{
return;
}
}
MoveInfo.NextMoveStep(LineMoveStep.DLO_07_LineRun);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
LogUtil.info(Name + "送料【" + posId + "】:" + MoveInfo.SLog + " [" + LastTrayPosition + "],转动到下个工位");
lineRun.StartLineRun(LineRun_Do, ExitLocation_Check, LineEndProcess);
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_07_LineRun))
{
if (LineTurnIsStop())
......@@ -162,13 +192,14 @@ namespace OnlineStore.DeviceLibrary
if (MoveInfo.MoveParam.InStoreNg)
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_08_NGBefore);
LogUtil.info(Name + "料【" + posId + "】:" + MoveInfo.SLog + "NG气缸前进");
LogUtil.info(Name + "料【" + posId + "】:" + MoveInfo.SLog + "NG气缸前进");
equipBean.CylinderMove(MoveInfo, IO_Type.NGCylinder_After, IO_Type.NGCylinder_Before);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
}
else
{
CheckIsNeedRun();
MoveInfo.EndMove();
LogUtil.info(Name + "送料【" + posId + "】结束");
}
}
}
......@@ -176,21 +207,13 @@ namespace OnlineStore.DeviceLibrary
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_09_NGAfter);
LastTrayPosition++;
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "NG气缸后退,更新最后一盘料位置:"+LastTrayPosition);
LogUtil.info(Name + "送料【" + posId + "】:" + MoveInfo.SLog + " [" + LastTrayPosition + "],NG气缸后退");
equipBean.CylinderMove(MoveInfo, IO_Type.NGCylinder_Before, IO_Type.NGCylinder_After);
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_09_NGAfter))
{
CheckIsNeedRun();
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_10_LineRun))
{
CheckIsNeedRun();
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_11_ExitNoTray))
{
MoveInfo.EndMove();
LogUtil.info(Name + "出料【" + posId + "】:出口无料盘,出库结束");
LogUtil.info(Name + "送料【" + posId + "】:结束");
}
}
private bool LineTurnIsStop()
......@@ -211,49 +234,6 @@ namespace OnlineStore.DeviceLibrary
}
return false;
}
private void CheckIsNeedRun()
{
if (equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.HIGH))
{
if (LastTrayPosition > 5)
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_11_ExitNoTray);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "最后一盘料位置【" + LastTrayPosition + "】,请检查" + ExitTray_Check + "信号是否正确");
}
else
{
DLO_LineRun(LineMoveStep.DLO_10_LineRun);
}
}
else
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_11_ExitNoTray);
}
}
private void DLO_LineRun(LineMoveStep nextStep)
{
if (equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.HIGH))
{
//皮带线不转,并且入口无信号
if (equipBean.Line3TurnIsStop() && equipBean.IOValue(Line3_TrayCheck).Equals(IO_VALUE.LOW))
{
Line3CanRun = false;
if (Line3_TrayCheck.Equals(IO_Type.EntryTray_Check3))
{
equipBean.Line3LastTrayP = 1;
}
}
else
{
return;
}
}
MoveInfo.NextMoveStep(nextStep);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "最后一盘料位置【" + LastTrayPosition + "】,转动到出口定位");
lineRun.StartLineRun(LineRun_Do, ExitLocation_Check, LineEndProcess);
}
/// <summary>
/// 转动结束,最后一盘料的位置+1
......@@ -306,14 +286,14 @@ namespace OnlineStore.DeviceLibrary
lineRun.StartLineRun(LineRun_Do, ExitLocation_Check, LineEndProcess);
}
else if (MoveInfo.MoveStep <= LineMoveStep.DLO_01_WaitEntryNoTray&&MoveInfo.IsInWait.Equals(false) &&
else if (MoveInfo.MoveStep <= LineMoveStep.DLO_01_NGBack&&MoveInfo.IsInWait.Equals(false) &&
equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.HIGH))
{
//皮带线1出口有料,皮带3入库无料,且在停止状态
if (equipBean.Line3TurnIsStop() && equipBean.IOValue(Line3_TrayCheck).Equals(IO_VALUE.LOW))
{
Line3CanRun = false;
LogUtil.debug(Name+ "出口有料,且"+ Line3_TrayCheck + "=LOW,转动一个工位,["+LineRun_Do+"] ["+ExitLocation_Check+"]");
LogUtil.debug(Name+ "出口有料,且"+ Line3_TrayCheck + "=LOW,转动一个工位,["+LineRun_Do+"] ["+ExitLocation_Check+"]");
lineRun.StartLineRun(LineRun_Do, ExitLocation_Check, LineEndProcess);
}
}
......
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
/// <summary>
/// 出料皮带线
/// </summary>
public class OutTrayLineBean
{
public int MaxPosition = 5;
// private DischargeLine equipBean = null;
private int equipBeanId = 301;
private string Line3_TrayCheck = "";
//入口定位信号
private string EntryLocation_Check = "";
//出口定位信号
private string ExitLocation_Check = "";
//出口料盘检测信号
private string ExitTray_Check = "";
//出口料盘检测信号
private string LineRun_Do = "";
//最后一盘料的位置,>5时可置为0,0表示当前皮带线无料盘
public int LastTrayPosition = 0;
private string Name = "";
private LineTurnBean lineRun = null;
internal LineMoveInfo MoveInfo = null;
public DischargeLine equipBean
{
get { return LineManager.Line.DisLineMap[equipBeanId]; }
}
internal bool Line3CanRun = true;
public OutTrayLineBean(string name, string entryLocationS, string exitLocationS, string exittrayS, string lineRundo, string line3checkDi, int dId)
{
lineRun = new LineTurnBean(dId);
this.equipBeanId = dId;
//this.equipBean = equipBean;
this.Name = name;
MoveInfo = new LineMoveInfo(1001, name);
this.EntryLocation_Check = entryLocationS;
this.ExitLocation_Check = exitLocationS;
this.ExitTray_Check = exittrayS;
this.LineRun_Do = lineRundo;
this.Line3_TrayCheck = line3checkDi;
}
public void StopRun()
{
MoveInfo.EndMove();
lineRun.StopLineRun();
Line3CanRun = true;
}
#region 出库处理
// private string posId = "";
public bool StartOut(InOutParam moveParam)
{
if (LineTurnIsStop() && MoveInfo.MoveType.Equals(LineMoveType.None) && (equipBean.runStatus .Equals(LineRunStatus.Runing)|| equipBean.runStatus.Equals(LineRunStatus.Busy)))
{
//MoveInfo.MoveParam = moveParam;
MoveInfo.NewMove(LineMoveType.OutStore,moveParam);
posId = moveParam.PosId;
if (moveParam.InStoreNg)
{
posId = "入库NG料";
}
MoveInfo.NextMoveStep(LineMoveStep.DLO_01_WaitEntryNoTray);
LogUtil.info(Name + "开始出料【" + moveParam.ToStr() + "】:" + MoveInfo.SLog + "等待出口无料盘,NG气缸后退");
if (equipBeanId.Equals(302) && EntryLocation_Check.Equals(IO_Type.EntryLocation_Check2))
{
equipBean.CylinderMove(MoveInfo, IO_Type.NGCylinder_Before, IO_Type.NGCylinder_After);
}
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
return true;
}
else
{
LogUtil.error(Name + " 启动出料【" + moveParam.ToStr() + "】 失败", equipBeanId+31);
return false;
}
}
string posId = "";
internal void OutStoreProcess()
{
if (MoveInfo.IsInWait)
{
equipBean.CheckWait(MoveInfo);
}
if (MoveInfo.IsInWait)
{
return;
}
// string posId = MoveInfo.MoveParam == null ? "" : MoveInfo.MoveParam.PosId;
if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_01_WaitEntryNoTray))
{
if (IsInTurn().Equals(false) && equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.LOW))
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_02_WaitExitNoTray);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "等待出口无料盘");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
else if (MoveInfo.IsTimeOut(180))
{
LogUtil.error(Name + "等待出口无料盘超时:" + FormUtil.GetSpanStr(MoveInfo.StepSpan()), 305);
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_02_WaitExitNoTray))
{
if (LineTurnIsStop())
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_03_LineRun);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "出口无料盘,转动到入口定位");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
lineRun.StartLineRun(LineRun_Do, EntryLocation_Check, null);
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_03_LineRun))
{
if (LineTurnIsStop())
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_04_CanReviceTray);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "--- 等待移栽放料盘-- ");
if (equipBean.IsDebug)
{ MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000)); }
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_04_CanReviceTray))
{
if (equipBean.IsDebug)
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_05_TrayIsOk);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "调试中更改为已放料盘");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_05_TrayIsOk))
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_06_OutCheck);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + " --料盘已放----转动到出口定位");
LastTrayPosition = 1;
lineRun.StartLineRun(LineRun_Do, ExitLocation_Check, null);
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_06_OutCheck))
{
if (LineTurnIsStop())
{
DLO_LineRun(LineMoveStep.DLO_07_LineRun);
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_07_LineRun))
{
if (LineTurnIsStop())
{
if (MoveInfo.MoveParam.InStoreNg)
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_08_NGBefore);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "NG气缸前进");
equipBean.CylinderMove(MoveInfo, IO_Type.NGCylinder_After, IO_Type.NGCylinder_Before);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
}
else
{
CheckIsNeedRun();
}
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_08_NGBefore))
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_09_NGAfter);
LastTrayPosition++;
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "NG气缸后退,更新最后一盘料位置:"+LastTrayPosition);
equipBean.CylinderMove(MoveInfo, IO_Type.NGCylinder_Before, IO_Type.NGCylinder_After);
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_09_NGAfter))
{
CheckIsNeedRun();
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_10_LineRun))
{
CheckIsNeedRun();
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.DLO_11_ExitNoTray))
{
MoveInfo.EndMove();
LogUtil.info(Name + "出料【" + posId + "】:出口无料盘,出库结束");
}
}
private bool LineTurnIsStop()
{
if (lineRun.InTurn.Equals(false) )
{
if (equipBean.IOValue(LineRun_Do).Equals(IO_VALUE.LOW))
{
if (lineRun.CanStart(500))
{
return true;
}
}
else
{
equipBean.IOMove(LineRun_Do, IO_VALUE.LOW);
}
}
return false;
}
private void CheckIsNeedRun()
{
if (equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.HIGH))
{
if (LastTrayPosition > 5)
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_11_ExitNoTray);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "最后一盘料位置【" + LastTrayPosition + "】,请检查" + ExitTray_Check + "信号是否正确");
}
else
{
DLO_LineRun(LineMoveStep.DLO_10_LineRun);
}
}
else
{
MoveInfo.NextMoveStep(LineMoveStep.DLO_11_ExitNoTray);
}
}
private void DLO_LineRun(LineMoveStep nextStep)
{
if (equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.HIGH))
{
//皮带线不转,并且入口无信号
if (equipBean.Line3TurnIsStop() && equipBean.IOValue(Line3_TrayCheck).Equals(IO_VALUE.LOW))
{
Line3CanRun = false;
if (Line3_TrayCheck.Equals(IO_Type.EntryTray_Check3))
{
equipBean.Line3LastTrayP = 1;
}
}
else
{
return;
}
}
MoveInfo.NextMoveStep(nextStep);
LogUtil.info(Name + "出料【" + posId + "】:" + MoveInfo.SLog + "最后一盘料位置【" + LastTrayPosition + "】,转动到出口定位");
lineRun.StartLineRun(LineRun_Do, ExitLocation_Check, LineEndProcess);
}
/// <summary>
/// 转动结束,最后一盘料的位置+1
/// </summary>
/// <param name="result"></param>
public void LineEndProcess(bool result)
{
if (result && LastTrayPosition > 0)
{
LastTrayPosition++;
}
if (!Line3CanRun)
{
equipBean.Line3Turn.LastEndTime = DateTime.Now;
}
Line3CanRun = true;
}
/// <summary>
/// 此皮带线是否有盘。重启会重置为空
/// </summary>
/// <returns></returns>
internal bool HasTray()
{
if (LastTrayPosition > 0 &&
LastTrayPosition <= MaxPosition * 10)
{
return true;
}
if (equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.HIGH))
{
return true;
}
return false;
}
internal bool IsInTurn()
{
return lineRun.InTurn;
}
#endregion
public void TimerPro()
{
//皮带线1出口无料
if (IsInTurn().Equals(false) && HasTray()&&lineRun.CanStart())
{
if (MoveInfo.MoveType.Equals(LineMoveType.None) &&
equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.LOW))
{
//皮带线1出口无料
lineRun.StartLineRun(LineRun_Do, ExitLocation_Check, LineEndProcess);
}
else if (MoveInfo.MoveStep <= LineMoveStep.DLO_01_WaitEntryNoTray&&MoveInfo.IsInWait.Equals(false) &&
equipBean.IOValue(ExitTray_Check).Equals(IO_VALUE.HIGH))
{
//皮带线1出口有料,皮带3入库无料,且在停止状态
if (equipBean.Line3TurnIsStop() && equipBean.IOValue(Line3_TrayCheck).Equals(IO_VALUE.LOW))
{
Line3CanRun = false;
LogUtil.debug(Name+ "出口有料盘,且"+ Line3_TrayCheck + "=LOW,转动一个工位,["+LineRun_Do+"] ["+ExitLocation_Check+"]");
lineRun.StartLineRun(LineRun_Do, ExitLocation_Check, LineEndProcess);
}
}
}
}
}
public class LineTurnBean
{
public delegate void TurnEndDel(bool result);
public TurnEndDel turnEnd = null;
public bool InTurn = false;
private string LastMoveDO = "";
private string LastCheckDI = "";
private int subType = 0;
internal DateTime LastEndTime = DateTime.Now;
public bool CanStart(int totalMS = 1000)
{
TimeSpan span = DateTime.Now - LastEndTime;
if (span.TotalMilliseconds > totalMS)
{
return true;
}
return false;
}
public LineTurnBean(int subType)
{
this.subType = subType;
}
public void StopLineRun()
{
if (InTurn)
{
InTurn = false;
}
}
private int canWhileCount = 3;
public void StartLineRun(string moveDO, string checkDI, TurnEndDel endProcess, int timeOutMS = 30000)
{
InTurn = true;
this.turnEnd = endProcess;
Task.Factory.StartNew(delegate
{
canWhileCount = 3;
LineRunAndWait(moveDO, checkDI, timeOutMS);
});
}
private string LineRunAndWait(string moveDO, string checkDI, int timeOutMS = 30000)
{
LastMoveDO = moveDO;
LastCheckDI = checkDI;
LogUtil.debug(subType+ "开始转动:" + moveDO+",等待信号:"+checkDI+"");
IOManager.IOMove(moveDO, IO_VALUE.HIGH, subType);
InTurn = true;
DateTime startTime = DateTime.Now;
string result = "";
bool isStop = false;
//先等待信号灭一次,然后再亮时停止
while (true)
{
Thread.Sleep(50);
TimeSpan span = DateTime.Now - startTime;
if (span.TotalSeconds > 1 && IOManager.IOValue(moveDO, subType).Equals(IO_VALUE.LOW))
{
LogUtil.error(subType + " LineRunAndWait1 转动[" + moveDO + "][" + checkDI + "],已等待[" + FormUtil.GetSpanStr(span) + "],重写IO:" + moveDO);
IOManager.IOMove(moveDO, IO_VALUE.HIGH, subType);
}
if (!InTurn)
{
isStop = true;
result = "手动停止";
}
else if (span.TotalMilliseconds > timeOutMS)
{
isStop = true;
result = "转动超时";
}
//判断Buzy及位置是否结束
else if (IOManager.IOValue(checkDI, subType).Equals(IO_VALUE.LOW))
{
isStop = true;
}
if (isStop)
{
if (result.Equals(""))
{
LogUtil.debug(subType + "验证" + checkDI + "=Low结束:" + result);
}
else
{
LogUtil.info(subType + "[" + moveDO + "] [" + checkDI + "] 验证" + checkDI + "=Low结束:" + result);
}
break;
}
}
result = "";
isStop = false;
while (true)
{
Thread.Sleep(50);
TimeSpan span = DateTime.Now - startTime;
if (span.TotalSeconds > 2 && IOManager.IOValue(moveDO, subType).Equals(IO_VALUE.LOW))
{
LogUtil.error(subType + " LineRunAndWait2 转动[" + moveDO + "][" + checkDI + "],已等待[" + FormUtil.GetSpanStr(span) + "],重写IO:" + moveDO);
IOManager.IOMove(moveDO, IO_VALUE.HIGH, subType);
}
if (!InTurn)
{
isStop = true;
result = "手动停止";
}
else if (span.TotalMilliseconds > timeOutMS)
{
isStop = true;
result = "转动超时";
}
//判断Buzy及位置是否结束
else if (IOManager.IOValue(checkDI, subType).Equals(IO_VALUE.HIGH))
{
if (canWhileCount > 0 && span.TotalMilliseconds < 800)
{
canWhileCount--;
LogUtil.info(subType + " 异常停止,重新开始转动:[" + moveDO + "] [" + checkDI + "] 耗时 [" + FormUtil.GetSpanStr(span) + "]["+canWhileCount+"]");
LineRunAndWait(moveDO, checkDI, timeOutMS);
}
isStop = true;
}
if (isStop)
{
if (result.Equals(""))
{
if (span.TotalSeconds >= 4 && span.TotalSeconds <= 5)
{
LogUtil.debug(subType + "停止运动:[" + moveDO + "] [" + checkDI + "] 耗时 [" + FormUtil.GetSpanStr(span) + "][" + canWhileCount + "]");
}
else
{
LogUtil.info(subType + "停止运动:[" + moveDO + "] [" + checkDI + "] 耗时 [" + FormUtil.GetSpanStr(span) + "][" + canWhileCount + "]");
}
}
else
{
LogUtil.info(subType + "[" + moveDO + "] [" + checkDI + "] 停止运动:" + result + " " + moveDO);
}
LastEndTime = DateTime.Now;
IOManager.IOMove(moveDO, IO_VALUE.LOW, subType);
Task.Factory.StartNew(delegate
{
turnEnd?.Invoke(result.Equals(""));
});
InTurn = false;
return result;
}
}
}
}
}
......@@ -1093,17 +1093,17 @@ namespace OnlineStore.DeviceLibrary
#region 皮带线12接收料盘并转动处理
/// <summary>
/// 皮带线12处理料盘:需要放入料盘,等待入口无料盘
/// 皮带线12处理料盘:NG气缸后退
/// </summary>
DLO_01_WaitEntryNoTray = 30301,
DLO_01_NGBack = 30301,
/// <summary>
/// 皮带线12处理料盘:需要放入料盘,等待出口无料盘
/// 皮带线12处理料盘:等待入口无料盘, 等待最后一盘料位置>1
/// </summary>
DLO_02_WaitExitNoTray,
/// <summary>
/// 皮带线12处理料盘:入口出口都没有料盘,转动皮带线到入口定位亮
/// </summary>
DLO_03_LineRun,
DLO_02_WaitEnteryNoTray,
///// <summary>
///// 皮带线12处理料盘:入口出口都没有料盘,转动皮带线到入口定位亮
///// </summary>
//DLO_03_LineRun,
/// <summary>
/// 皮带线12处理料盘:可以放入料盘,等待移栽放下料盘
/// </summary>
......@@ -1114,9 +1114,9 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
DLO_05_TrayIsOk,
/// <summary>
/// 皮带线12处理料盘:皮带线转动到出口定位信号亮
/// 皮带线12处理料盘:盘放下后等待2000ms
/// </summary>
DLO_06_OutCheck,
DLO_06_WaitTime,
/// <summary>
/// 皮带线12处理料盘:出库有料盘,继续转动一个工位,
/// </summary>
......@@ -1129,10 +1129,10 @@ namespace OnlineStore.DeviceLibrary
/// 皮带线12处理料盘:是NG料盘,NG气缸后退
/// </summary>
DLO_09_NGAfter,
/// <summary>
/// 皮带线12处理料盘:判断出口是否有料盘,有料盘需要转动,没有料盘结束
/// </summary>
DLO_10_LineRun,
///// <summary>
///// 皮带线12处理料盘:判断出口是否有料盘,有料盘需要转动,没有料盘结束
///// </summary>
//DLO_10_LineRun,
/// <summary>
/// 皮带线12处理料盘:出口无料盘,结束,
......
......@@ -193,10 +193,10 @@ namespace OnlineStore.LoadCSVLibrary
public static string DLine_Reset = "DLine_Reset";
/// <summary>
/// DI 0 皮带线1入口定位检测 EntryLocation_Check1 2 PRO_AOI_IP_2 0 皮带线1入口定位检测 X023 X023
/// </summary>
public static string EntryLocation_Check1 = "EntryLocation_Check1";
///// <summary>
///// DI 0 皮带线1入口定位检测 EntryLocation_Check1 2 PRO_AOI_IP_2 0 皮带线1入口定位检测 X023 X023
///// </summary>
//public static string EntryLocation_Check1 = "EntryLocation_Check1";
/// <summary>
/// DI 0 皮带线1出口定位检测 ExitLocation_Check1 3 PRO_AOI_IP_2 0 皮带线1出口定位检测 X024 X024
/// </summary>
......@@ -206,10 +206,10 @@ namespace OnlineStore.LoadCSVLibrary
/// </summary>
public static string ExitTray_Check1 = "ExitTray_Check1";
/// <summary>
/// DI,0,皮带线2入口定位检测 EntryLocation_Check2 5 PRO_AOI_IP_2 0 皮带线2入口定位检测 X026 X026
/// </summary>
public static string EntryLocation_Check2 = "EntryLocation_Check2";
///// <summary>
///// DI,0,皮带线2入口定位检测 EntryLocation_Check2 5 PRO_AOI_IP_2 0 皮带线2入口定位检测 X026 X026
///// </summary>
//public static string EntryLocation_Check2 = "EntryLocation_Check2";
/// <summary>
/// DI 皮带线2出口定位检测 ExitLocation_Check2 6 PRO_AOI_IP_2 0 皮带线2出口定位检测 X027 X027
/// </summary>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!