Commit 501ba9eb LN

出料增加配置

1 个父辈 37653041
...@@ -412,7 +412,7 @@ namespace OnlineStore.AssemblyLine ...@@ -412,7 +412,7 @@ namespace OnlineStore.AssemblyLine
} }
if (lblWarnMsg.Text.Equals("")) if (lblWarnMsg.Text.Equals(""))
{ {
foreach (MoveEquip move in lineBean.MoveEquipMap.Values) foreach (MoveEquip move in lineBean.AllEquipMap.Values)
{ {
if (move.WarnMsg.Equals("").Equals(false)) if (move.WarnMsg.Equals("").Equals(false))
{ {
......
类型,分类编号,说明,名称,属性值,设备名称,默认值,描述,电器定义,代码定义 类型,分类编号,说明,名称,属性值,设备名称,默认值,描述,电器定义,代码定义
PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,1,,,,, PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,1,,,,,
PRO,0,对应的横移模块,SidesWayNum,0,,,,, PRO,0,对应的横移模块,SidesWayNum,0,,,,,
PRO,0,设备对应的出料流水线的编号,DLineEquipNum,1,,,,,
PRO,0,设备对应的出料流水线的第几条流水线,DLineLineNum,1,,,,,
\ No newline at end of file \ No newline at end of file
类型,分类编号,说明,名称,属性值,设备名称,默认值,描述,电器定义,代码定义 类型,分类编号,说明,名称,属性值,设备名称,默认值,描述,电器定义,代码定义
PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,1,,,,, PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,1,,,,,
PRO,0,对应的横移模块,SidesWayNum,0,,,,, PRO,0,对应的横移模块,SidesWayNum,0,,,,,
PRO,0,设备对应的出料流水线的编号,DLineEquipNum,1,,,,,
PRO,0,设备对应的出料流水线的第几条流水线,DLineLineNum,2,,,,,
\ No newline at end of file \ No newline at end of file
类型,分类编号,说明,名称,属性值,设备名称,默认值,描述,电器定义,代码定义 类型,分类编号,说明,名称,属性值,设备名称,默认值,描述,电器定义,代码定义
PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,1,,,,, PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,1,,,,,
PRO,0,对应的横移模块,SidesWayNum,0,,,,, PRO,0,对应的横移模块,SidesWayNum,0,,,,,
PRO,0,设备对应的出料流水线的编号,DLineEquipNum,2,,,,,
PRO,0,设备对应的出料流水线的第几条流水线,DLineLineNum,1,,,,,
\ No newline at end of file \ No newline at end of file
类型,分类编号,说明,名称,属性值,设备名称,默认值,描述,电器定义,代码定义 类型,分类编号,说明,名称,属性值,设备名称,默认值,描述,电器定义,代码定义
PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,1,,,,, PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,1,,,,,
PRO,0,对应的横移模块,SidesWayNum,4,,,,, PRO,0,对应的横移模块,SidesWayNum,4,,,,,
PRO,0,设备对应的出料流水线的编号,DLineEquipNum,2,,,,,
PRO,0,设备对应的出料流水线的第几条流水线,DLineLineNum,2,,,,,
...@@ -109,15 +109,32 @@ namespace OnlineStore.DeviceLibrary ...@@ -109,15 +109,32 @@ namespace OnlineStore.DeviceLibrary
BusyMoveProcess(); BusyMoveProcess();
//判断流水线打开了才可以运行 //判断流水线打开了才可以运行
if (SecondMoveInfo.MoveType.Equals(LineMoveType.None))
{
//LineBean lineBean = LineManager.Line;
//if (lineBean.isCanProcessLine() && IOManager.IOValue(IO_Type.DriveMotor_Run, 0).Equals(IO_VALUE.HIGH) && lineBean.runStatus >= LineRunStatus.Runing && lineBean.IsSleep.Equals(false))
//{
// StartCheckFixture();
//}
//皮带1皮带2先转动,到达位置后,皮带3再转动 if (runStatus.Equals(LineRunStatus.Runing)&&alarmType.Equals(LineAlarm.None)) {
//判断是否需要入库
if (IOValue(IO_Type.DLine_Exit_Check3).Equals(IO_VALUE.LOW)&& LineRuning.Equals(false))
{
//皮带3入口或者中间有料盘,出口无料盘,转动皮带三
if ((IOValue(IO_Type.DLine_Entry_Check3).Equals(IO_VALUE.HIGH) || IOValue(IO_Type.DLine_Middle_Check3).Equals(IO_VALUE.HIGH)))
{
StartLineRun(IO_Type.DLine_Run3, IO_Type.DLine_Location_Check3);
}
}
if (IOValue(IO_Type.DLine_Entry_Check3).Equals(IO_VALUE.LOW) && LineRuning.Equals(false)&& MoveInfo.MoveType.Equals(LineMoveType.None))
{
if ((IOValue(IO_Type.DLine_Entry_Check1).Equals(IO_VALUE.HIGH) || IOValue(IO_Type.DLine_Exit_Check1).Equals(IO_VALUE.HIGH)))
{
StartLineRun(IO_Type.DLine_Run1, IO_Type.DLine_Location_Check1);
}
}
if (IOValue(IO_Type.DLine_Middle_Check3).Equals(IO_VALUE.LOW) && LineRuning.Equals(false)&& SecondMoveInfo.MoveType.Equals(LineMoveType.None))
{
if ((IOValue(IO_Type.DLine_Entry_Check2).Equals(IO_VALUE.HIGH) || IOValue(IO_Type.DLine_Exit_Check2).Equals(IO_VALUE.HIGH)))
{
StartLineRun(IO_Type.DLine_Run2, IO_Type.DLine_Location_Check2);
}
}
//皮带1皮带2先转动,到达位置后,皮带3再转动
} }
IOTimeOutProcess(); IOTimeOutProcess();
...@@ -200,15 +217,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -200,15 +217,7 @@ namespace OnlineStore.DeviceLibrary
{ {
switch (MoveInfo.MoveStep) switch (MoveInfo.MoveStep)
{ {
case LineMoveStep.DL_R_CylinderDown: case LineMoveStep.DL_R_CylinderDown:
LogInfo(MoveInfo.MoveType + "完成,开始转动皮带!");
MoveInfo.NextMoveStep(LineMoveStep.DL_R_StartRun);
IOMove(IO_Type.DLine_Run1, IO_VALUE.HIGH);
IOMove(IO_Type.DLine_Run2, IO_VALUE.HIGH);
IOMove(IO_Type.DLine_Run3, IO_VALUE.HIGH);
IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.HIGH);
break;
case LineMoveStep.DL_R_StartRun:
LogInfo(MoveInfo.MoveType + "完成!"); LogInfo(MoveInfo.MoveType + "完成!");
runStatus = LineRunStatus.Runing; runStatus = LineRunStatus.Runing;
MoveInfo.EndMove(); MoveInfo.EndMove();
...@@ -233,7 +242,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -233,7 +242,7 @@ namespace OnlineStore.DeviceLibrary
runStatus = LineRunStatus.Busy; runStatus = LineRunStatus.Busy;
MoveInfo.EndMove(); MoveInfo.EndMove();
SecondMoveInfo.EndMove(); SecondMoveInfo.EndMove();
StopLineRun();
LogInfo("停止运动:(定位气缸下降,皮带线停转 )开始 "); LogInfo("停止运动:(定位气缸下降,皮带线停转 )开始 ");
CylinderMove(null, IO_Type.SeparateDevice_Up, IO_Type.SeparateDevice_Down); CylinderMove(null, IO_Type.SeparateDevice_Up, IO_Type.SeparateDevice_Down);
......
...@@ -4,6 +4,7 @@ using System; ...@@ -4,6 +4,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
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
...@@ -36,6 +37,39 @@ namespace OnlineStore.DeviceLibrary ...@@ -36,6 +37,39 @@ namespace OnlineStore.DeviceLibrary
} }
internal bool CanStartOut(int lineNum)
{
if (alarmType.Equals(LineAlarm.None).Equals(false) || runStatus.Equals(LineRunStatus.Runing).Equals(false))
{
return false;
}
if (lineNum.Equals(1))
{
if (LineRuning.Equals(true) && LastMoveDO.Equals(IO_Type.DLine_Run1))
{
return false;
}
if (MoveInfo.MoveType.Equals(LineMoveType.None)&& IOValue(IO_Type.DLine_Entry_Check1).Equals(IO_VALUE.LOW))
{
MoveInfo.NewMove(LineMoveType.OutStore);
return true;
}
}else if (lineNum.Equals(2))
{
if (LineRuning.Equals(true) && LastMoveDO.Equals(IO_Type.DLine_Run2))
{
return false;
}
if (SecondMoveInfo.MoveType.Equals(LineMoveType.None) && IOValue(IO_Type.DLine_Entry_Check2).Equals(IO_VALUE.LOW))
{
SecondMoveInfo.NewMove(LineMoveType.OutStore);
return true;
}
}
return false;
}
#endregion #endregion
#region 料盘移栽处理 #region 料盘移栽处理
...@@ -94,9 +128,95 @@ namespace OnlineStore.DeviceLibrary ...@@ -94,9 +128,95 @@ namespace OnlineStore.DeviceLibrary
lineStatus = LineStatus.StoreOnline; lineStatus = LineStatus.StoreOnline;
MoveInfo.EndMove(); MoveInfo.EndMove();
} }
} }
#endregion #endregion
private void StartLineRun(string moveDO, string checkDI, int timeOutMS = 10000)
{
LineRuning = true;
Task.Factory.StartNew( delegate {
LineRunAndWait(moveDO, checkDI, timeOutMS);
});
}
private bool LineRuning = false;
private string LastMoveDO = "";
private string LastCheckDI = "";
private void StopLineRun()
{
if (LineRuning)
{
LineRuning = false;
}
}
private string LineRunAndWait(string moveDO, string checkDI, int timeOutMS = 10000)
{
LastMoveDO = moveDO;
LastCheckDI = checkDI;
LogInfo("开始转动:" + moveDO);
IOMove(moveDO, IO_VALUE.HIGH);
LineRuning = true;
DateTime startTime = DateTime.Now;
string result = "";
bool isStop = false;
//先等待信号灭一次,然后再亮时停止
while (true)
{
Thread.Sleep(20);
TimeSpan span = DateTime.Now - startTime;
if (!LineRuning)
{
isStop = true;
result = "用户中止";
}
else if (span.TotalMilliseconds > timeOutMS)
{
isStop = true;
result = "运行超时";
}
//判断Buzy及位置是否结束
else if (IOValue(checkDI).Equals(IO_VALUE.LOW))
{
isStop = true;
}
if (isStop)
{
LogInfo("验证"+checkDI+"=Low结束:" + result );
break;
}
}
result = "";
while (true)
{
Thread.Sleep(20);
TimeSpan span = DateTime.Now - startTime;
if (!LineRuning)
{
isStop = true;
result = "用户中止" ;
}
else if (span.TotalMilliseconds > timeOutMS)
{
isStop = true;
result = "运行超时" ;
}
//判断Buzy及位置是否结束
else if (IOValue(checkDI).Equals(IO_VALUE.HIGH))
{
isStop = true;
}
if (isStop)
{
LogInfo("停止运动:" + result+" "+moveDO);
IOMove(moveDO, IO_VALUE.LOW);
LineRuning = false;
return result;
}
}
}
} }
} }
...@@ -673,7 +673,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -673,7 +673,7 @@ namespace OnlineStore.DeviceLibrary
//判断急停 //判断急停
else if (this.runStatus >= LineRunStatus.HomeMoving) else if (this.runStatus >= LineRunStatus.HomeMoving)
{ {
foreach (MoveEquip moveEquip in this.MoveEquipMap.Values) foreach (EquipBase moveEquip in this.AllEquipMap.Values)
{ {
if (!moveEquip.IsDebug) if (!moveEquip.IsDebug)
{ {
......
...@@ -51,9 +51,40 @@ namespace OnlineStore.DeviceLibrary ...@@ -51,9 +51,40 @@ namespace OnlineStore.DeviceLibrary
} }
return false; return false;
} }
/// <summary>
/// 判断出料流水线是否可以开始出料
/// </summary>
internal bool DLineStartOut(int dlineId, int LineNum)
{
foreach (DischargeLine line in DisLineMap.Values)
{
if ((line.DeviceID % 100).Equals(dlineId))
{
if (line.CanStartOut(LineNum))
{
return true;
}
}
}return false;
}
internal bool DLineStopOut(int dlineId,int LineNum)
{
foreach (DischargeLine line in DisLineMap.Values)
{
if ((line.DeviceID % 100).Equals(dlineId))
{
if (LineNum.Equals(1)&&line.MoveInfo.MoveType.Equals(LineMoveType.OutStore))
{
line.MoveInfo.EndMove();
}
else if (LineNum.Equals(2) && line.SecondMoveInfo.MoveType.Equals(LineMoveType.OutStore))
{
line.SecondMoveInfo.EndMove();
}
}
}
return false;
}
private bool isInprocess = false; private bool isInprocess = false;
private DateTime lastProTime = DateTime.Now; private DateTime lastProTime = DateTime.Now;
private void InOutTimerProcess() private void InOutTimerProcess()
......
...@@ -21,9 +21,14 @@ namespace OnlineStore.DeviceLibrary ...@@ -21,9 +21,14 @@ namespace OnlineStore.DeviceLibrary
return true; return true;
} }
} }
else if (wait.WaitType.Equals(WaitEnum.W202_DLineCanOut))
{
bool result = LineManager.Line.DLineStartOut(Config.DLineEquipNum, Config.DLineLineNum);
wait.IsEnd = result;
}
return false; return false;
} }
private void StartCheckFixture() private void StartCheckFixture()
{ {
int num = TrayManager.GetNum(DeviceID); int num = TrayManager.GetNum(DeviceID);
...@@ -328,6 +333,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -328,6 +333,9 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.NextMoveStep(LineMoveStep.PO_10_BeforeAfterCylinderAfter); MoveInfo.NextMoveStep(LineMoveStep.PO_10_BeforeAfterCylinderAfter);
CylinderMove(MoveInfo, IO_Type.BeforeAfterCylinder_Before, IO_Type.BeforeAfterCylinder_After); CylinderMove(MoveInfo, IO_Type.BeforeAfterCylinder_Before, IO_Type.BeforeAfterCylinder_After);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(4000)); MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(4000));
//出料皮带线停止出库
LineManager.Line.DLineStopOut(Config.DLineEquipNum, Config.DLineLineNum);
} }
else if( MoveInfo.MoveStep.Equals(LineMoveStep.PO_10_BeforeAfterCylinderAfter)) else if( MoveInfo.MoveStep.Equals(LineMoveStep.PO_10_BeforeAfterCylinderAfter))
{ {
......
...@@ -278,17 +278,25 @@ namespace OnlineStore.DeviceLibrary ...@@ -278,17 +278,25 @@ namespace OnlineStore.DeviceLibrary
WaitResultInfo wait = new WaitResultInfo(); WaitResultInfo wait = new WaitResultInfo();
wait.WaitType = WaitEnum.W010_SW34NoTray; wait.WaitType = WaitEnum.W010_SW34NoTray;
return wait; return wait;
} }
/// <summary> /// <summary>
/// 等待出料移栽可以开始移栽 /// 等待出料移栽可以开始移栽
/// </summary> /// </summary>
/// <returns></returns>
public static WaitResultInfo WaitProvidingEquipCanOut() public static WaitResultInfo WaitProvidingEquipCanOut()
{ {
WaitResultInfo wait = new WaitResultInfo(); WaitResultInfo wait = new WaitResultInfo();
wait.WaitType = WaitEnum.W201_ProvidingCanOut; wait.WaitType = WaitEnum.W201_ProvidingCanOut;
return wait; return wait;
} }
/// <summary>
/// 等待出料流水线可以接收料盘
/// </summary>
public static WaitResultInfo WaitDLineCanReviceTray()
{
WaitResultInfo wait = new WaitResultInfo();
wait.WaitType = WaitEnum.W202_DLineCanOut;
return wait;
}
public string ToStr() public string ToStr()
{ {
if (WaitType.Equals(WaitEnum.W001_AxisMove)) if (WaitType.Equals(WaitEnum.W001_AxisMove))
...@@ -337,6 +345,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -337,6 +345,9 @@ namespace OnlineStore.DeviceLibrary
}else if (WaitType.Equals(WaitEnum.W201_ProvidingCanOut)) }else if (WaitType.Equals(WaitEnum.W201_ProvidingCanOut))
{ {
return "移栽模块可移栽出库"; return "移栽模块可移栽出库";
}else if (WaitType.Equals(WaitEnum.W202_DLineCanOut))
{
return "出料流水线可接收料盘";
} }
else else
{ {
...@@ -441,6 +452,10 @@ namespace OnlineStore.DeviceLibrary ...@@ -441,6 +452,10 @@ namespace OnlineStore.DeviceLibrary
/// 移栽模块可移栽出库 /// 移栽模块可移栽出库
/// </summary> /// </summary>
internal static int W201_ProvidingCanOut = 201; internal static int W201_ProvidingCanOut = 201;
/// <summary>
/// 等待出料流水线可以接收料盘
/// </summary>
internal static int W202_DLineCanOut = 202;
} }
public enum LineMoveType public enum LineMoveType
{ {
......
...@@ -354,45 +354,45 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -354,45 +354,45 @@ namespace OnlineStore.LoadCSVLibrary
public static string DLine_Reset = "DLine_Reset"; public static string DLine_Reset = "DLine_Reset";
/// <summary> /// <summary>
/// DI 皮带线1定位检测,Location_Check1, ,X021 /// DI 皮带线1定位检测,DLine_Location_Check1, ,X021
/// </summary> /// </summary>
public static string Location_Check1 = "Location_Check1"; public static string DLine_Location_Check1 = "DLine_Location_Check1";
/// <summary> /// <summary>
/// DI 皮带线1入口料盘检测, EntryPosition_Check1, , X022 /// DI 皮带线1入口料盘检测, DLine_Entry_Check1, , X022
/// </summary> /// </summary>
public static string EntryPosition_Check1 = "EntryPosition_Check1"; public static string DLine_Entry_Check1 = "DLine_Entry_Check1";
/// <summary> /// <summary>
/// DI 皮带线1出口料盘检测,ExitPosition_Check1, X023 /// DI 皮带线1出口料盘检测,DLine_Exit_Check1, X023
/// </summary> /// </summary>
public static string ExitPosition_Check1 = "ExitPosition_Check1"; public static string DLine_Exit_Check1 = "DLine_Exit_Check1";
/// <summary> /// <summary>
/// DI 皮带线2定位检测, Location_Check2, X024 /// DI 皮带线2定位检测, DLine_Location_Check2, X024
/// </summary> /// </summary>
public static string Location_Check2 = "Location_Check2"; public static string DLine_Location_Check2 = "DLine_Location_Check2";
/// <summary> /// <summary>
/// DI 皮带线2入口料盘检测,EntryPosition_Check2, ,X025 /// DI 皮带线2入口料盘检测,DLine_Entry_Check2, ,X025
/// </summary> /// </summary>
public static string EntryPosition_Check2 = "EntryPosition_Check2"; public static string DLine_Entry_Check2 = "DLine_Entry_Check2";
/// <summary> /// <summary>
/// DI 皮带线2出口料盘检测, ExitPosition_Check2, X026 /// DI 皮带线2出口料盘检测, DLine_Exit_Check2, X026
/// </summary> /// </summary>
public static string ExitPosition_Check2 = "ExitPosition_Check2"; public static string DLine_Exit_Check2 = "DLine_Exit_Check2";
/// <summary> /// <summary>
/// DI 皮带线3定位检测,Location_Check3, X027 /// DI 皮带线3定位检测,DLine_Location_Check3, X027
/// </summary> /// </summary>
public static string Location_Check3 = "Location_Check3"; public static string DLine_Location_Check3 = "DLine_Location_Check3";
/// <summary> /// <summary>
/// DI 皮带线3入口料盘检测, EntryPosition_Check3, X028 /// DI 皮带线3入口料盘检测, DLine_Entry_Check3, X028
/// </summary> /// </summary>
public static string EntryPosition_Check3 = "EntryPosition_Check3"; public static string DLine_Entry_Check3 = "DLine_Entry_Check3";
/// <summary> /// <summary>
/// DI 皮带线3中间位置料盘检测,MiddlePosition_Check3, ,X029 /// DI 皮带线3中间位置料盘检测,DLine_Middle_Check3, ,X029
/// </summary> /// </summary>
public static string MiddlePosition_Check3 = "MiddlePosition_Check3"; public static string DLine_Middle_Check3 = "DLine_Middle_Check3";
/// <summary> /// <summary>
/// DI 皮带线3出口料盘检测, ExitPosition_Check3, X030 /// DI 皮带线3出口料盘检测, DLine_Exit_Check3, X030
/// </summary> /// </summary>
public static string ExitPosition_Check3 = "ExitPosition_Check3"; public static string DLine_Exit_Check3 = "DLine_Exit_Check3";
/// <summary> /// <summary>
/// DI 分盘装置1定位气缸上升端,SeparateDevice_Up, X031 /// DI 分盘装置1定位气缸上升端,SeparateDevice_Up, X031
/// </summary> /// </summary>
......
...@@ -32,6 +32,18 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -32,6 +32,18 @@ namespace OnlineStore.LoadCSVLibrary
/// </summary> /// </summary>
[ConfigProAttribute("SidesWayNum", false)] [ConfigProAttribute("SidesWayNum", false)]
public int SidesWayNum { get; set; } public int SidesWayNum { get; set; }
/// <summary>
/// PRO,0,设备对应的出料流水线的编号,DLineEquipNum,1,,,,,
/// </summary>
[ConfigProAttribute("DLineEquipNum", false)]
public int DLineEquipNum { get; set; }
/// <summary>
/// PRO,0,设备对应的出料流水线的第几条流水线,DLineLineNum,1,,,,,
/// </summary>
[ConfigProAttribute("DLineLineNum", false)]
public int DLineLineNum { get; set; }
} }
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!