Commit 63922c39 几米阳光

增加光栅功能

1 个父辈 31a4f2e7
...@@ -220,14 +220,18 @@ namespace OnlineStore.ACSingleStore ...@@ -220,14 +220,18 @@ namespace OnlineStore.ACSingleStore
if (store.Config.IsHasDoorLimit.Equals(1)) if (store.Config.IsHasDoorLimit.Equals(1))
{ {
if (store.KNDIOValue(IO_Type.Left_Door_LimitSingle).Equals(IO_VALUE.LOW)) if (store.KNDIOValue(IO_Type.Door_LimitSingle).Equals(IO_VALUE.LOW))
{ {
lblWarnMsg.Text = lblWarnMsg.Text + " 左侧门未关"; lblWarnMsg.Text = lblWarnMsg.Text + " 前门未关";
}
if (store.KNDIOValue(IO_Type.Right_Door_LimitSingle).Equals(IO_VALUE.LOW))
{
lblWarnMsg.Text = lblWarnMsg.Text + " 右侧门未关";
} }
//if (store.KNDIOValue(IO_Type.Left_Door_LimitSingle).Equals(IO_VALUE.LOW))
//{
// lblWarnMsg.Text = lblWarnMsg.Text + " 左侧门未关";
//}
//if (store.KNDIOValue(IO_Type.Right_Door_LimitSingle).Equals(IO_VALUE.LOW))
//{
// lblWarnMsg.Text = lblWarnMsg.Text + " 右侧门未关";
//}
} }
//如果不在出入库中,且叉子上有信号,需要提示检查叉子 //如果不在出入库中,且叉子上有信号,需要提示检查叉子
if (store.storeRunStatus.Equals(StoreRunStatus.Runing) && store.KNDIOValue(IO_Type.TrayCheck_Fixture).Equals(IO_VALUE.HIGH)) if (store.storeRunStatus.Equals(StoreRunStatus.Runing) && store.KNDIOValue(IO_Type.TrayCheck_Fixture).Equals(IO_VALUE.HIGH))
......
...@@ -14,4 +14,15 @@ ...@@ -14,4 +14,15 @@
轴三运动时要判断气缸到位 轴三运动时要判断气缸到位
出库时等待拿走料盘与等待10秒有一个条件到达就完成 出库时等待拿走料盘与等待10秒有一个条件到达就完成
轴三复位时,如果已经原点返回过且原点信号亮,需要先相对走-5000才能原点返回
\ No newline at end of file \ No newline at end of file
轴三复位时,如果已经原点返回过且原点信号亮,需要先相对走-5000才能原点返回
20190107 :IO定义修改
原来:
DI11左前门限位
DI12右前门限位
修改后
DI11:前门限位
DI13:光栅信号
DO15:门禁功能屏蔽
...@@ -9,10 +9,10 @@ DI,进料口门上升端,Door_Up,206,192.168.200.10,0,进料口门上升端,X07,DI-07,0 ...@@ -9,10 +9,10 @@ DI,进料口门上升端,Door_Up,206,192.168.200.10,0,进料口门上升端,X07,DI-07,0
DI,进料口门下降端,Door_Down,207,192.168.200.10,0,进料口门下降端,X08,DI-08,0 DI,进料口门下降端,Door_Down,207,192.168.200.10,0,进料口门下降端,X08,DI-08,0
DI,定位气缸1上升端,LocationCylinder_Up,208,192.168.200.10,0,定位气缸1上升端,X09,DI-09,0 DI,定位气缸1上升端,LocationCylinder_Up,208,192.168.200.10,0,定位气缸1上升端,X09,DI-09,0
DI,定位气缸1下降端,LocationCylinder_Down,209,192.168.200.10,0,定位气缸1下降端,X10,DI-10,0 DI,定位气缸1下降端,LocationCylinder_Down,209,192.168.200.10,0,定位气缸1下降端,X10,DI-10,0
DI,左侧门限位,Left_Door_LimitSingle,210,192.168.200.10,0,左侧门限位,X11,DI-11,0 DI,前门限位,Door_LimitSingle,210,192.168.200.10,0,前门限位,X11,DI-11,0
DI,右侧门限位,Right_Door_LimitSingle,211,192.168.200.10,0,右侧门限位,X12,DI-12,0 ,,Right_Door_LimitSingle,211,192.168.200.10,0,右侧门限位,X12,DI-12,0
DI,料盘检测3,TrayCheck_3,212,192.168.200.10,0,料盘检测3,X13,DI-13,0 DI,安全光栅,SafetyLightCurtains,212,192.168.200.10,0,安全光栅,X13,DI-13,0
DI,料盘检测4,TrayCheck_4,213,192.168.200.10,0,料盘检测4,X14,DI-14,0 ,,TrayCheck_4,213,192.168.200.10,0,,X14,DI-14,0
DI,定位气缸2上升端,LocationCylinder2_Up,214,192.168.200.10,0,定位气缸2上升端,X15,DI-15,0 DI,定位气缸2上升端,LocationCylinder2_Up,214,192.168.200.10,0,定位气缸2上升端,X15,DI-15,0
DI,定位气缸2下降端,LocationCylinder2_Down,215,192.168.200.10,0,定位气缸2下降端,X16,DI-16,0 DI,定位气缸2下降端,LocationCylinder2_Down,215,192.168.200.10,0,定位气缸2下降端,X16,DI-16,0
DO,自动指示灯,AutoRun_HddLed,100,192.168.200.10,0,自动指示灯,Y01,DO-01,0 DO,自动指示灯,AutoRun_HddLed,100,192.168.200.10,0,自动指示灯,Y01,DO-01,0
......
...@@ -123,9 +123,70 @@ namespace OnlineStore.DeviceLibrary ...@@ -123,9 +123,70 @@ namespace OnlineStore.DeviceLibrary
Alarm(StoreAlarmType.SuddenStop, "1", WarnMsg, StoreMoveType.None); Alarm(StoreAlarmType.SuddenStop, "1", WarnMsg, StoreMoveType.None);
} }
} }
else
{
//光栅处理
SafetyLightProcess();
}
} }
} }
private object safetyInProcess = "";
/// <summary>
/// 光栅处理
/// </summary>
private void SafetyLightProcess()
{
if (Monitor.TryEnter(safetyInProcess))
{
try
{
//遮挡光栅信号
if (KNDIOValue(IO_Type.SafetyLightCurtains).Equals(IO_VALUE.LOW))
{
if (NeedCheckSafetyLight.Equals(1))
{
if (StoreMove.MoveType.Equals(StoreMoveType.OutStore) && StoreMove.MoveStep.Equals(StoreMoveStep.SO_10_DeviceToDoor))
{
NeedCheckSafetyLight = 2;
LOGGER.Info("出库SO_10_DeviceToDoor运动中,光栅被遮挡,停止进出轴运动");
ACServerManager.SuddenStop(Config.InOut_Axis.DeviceName, Config.InOut_Axis.GetAxisValue());
}
else if (StoreMove.MoveType.Equals(StoreMoveType.InStore) && StoreMove.MoveStep.Equals(StoreMoveStep.SI_05_DeviceToDoor))
{
NeedCheckSafetyLight = 2;
LOGGER.Info("入库SI_05_DeviceToDoor运动中,光栅被遮挡,停止进出轴运动");
ACServerManager.SuddenStop(Config.InOut_Axis.DeviceName, Config.InOut_Axis.GetAxisValue());
}
}
}
else
{
if (NeedCheckSafetyLight.Equals(2))
{
if (StoreMove.MoveType.Equals(StoreMoveType.OutStore) && StoreMove.MoveStep.Equals(StoreMoveStep.SO_10_DeviceToDoor))
{
LOGGER.Info("出库SO_10_DeviceToDoor运动中,光栅已恢复,继续进出轴运动");
SO_10_DeviceToDoorPro();
}
else if (StoreMove.MoveType.Equals(StoreMoveType.InStore) && StoreMove.MoveStep.Equals(StoreMoveStep.SI_05_DeviceToDoor))
{
LOGGER.Info("入库SI_05_DeviceToDoor运动中,光栅已恢复,继续进出轴运动");
SI_05_DeviceToDoor();
}
}
}
}
catch (Exception ex)
{
LogUtil.error("光栅处理出错:" + ex.ToString());
}
finally
{
Monitor.Exit(safetyInProcess);
}
}
}
private void CheckPositionLimit(ACStorePosition position) private void CheckPositionLimit(ACStorePosition position)
{ {
try try
...@@ -973,7 +1034,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -973,7 +1034,7 @@ namespace OnlineStore.DeviceLibrary
CheckAxisAlarm(); CheckAxisAlarm();
} }
} }
public void TimerProcess() public void TimerProcess()
{ {
try try
......
...@@ -480,19 +480,20 @@ namespace OnlineStore.DeviceLibrary ...@@ -480,19 +480,20 @@ namespace OnlineStore.DeviceLibrary
} }
else else
{ {
InStoreLog("入库:SI_05 叉子进入入料口,进出轴至P2(进料口取料点) "); SI_05_DeviceToDoor();
StoreMove.NextMoveStep(StoreMoveStep.SI_05_DeviceToDoor);
ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed);
} }
} }
else if (StoreMove.MoveStep == StoreMoveStep.SI_04_CompressWare) else if (StoreMove.MoveStep == StoreMoveStep.SI_04_CompressWare)
{ {
InStoreLog("入库:SI_05 叉子进入入料口,进出轴至P2(进料口取料点) "); SI_05_DeviceToDoor();
StoreMove.NextMoveStep(StoreMoveStep.SI_05_DeviceToDoor); //InStoreLog("入库:SI_05 叉子进入入料口,进出轴至P2(进料口取料点) ");
ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed); //StoreMove.NextMoveStep(StoreMoveStep.SI_05_DeviceToDoor);
//ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed);
//NeedCheckSafetyLight = 1;
} }
else if (StoreMove.MoveStep == StoreMoveStep.SI_05_DeviceToDoor) else if (StoreMove.MoveStep == StoreMoveStep.SI_05_DeviceToDoor)
{ {
NeedCheckSafetyLight = 0;
InStoreLog("入库:SI_06 拿物品,压紧轴至P2(压紧点)) 升降轴至P7(进料口取料缓冲点) "); InStoreLog("入库:SI_06 拿物品,压紧轴至P2(压紧点)) 升降轴至P7(进料口取料缓冲点) ");
StoreMove.NextMoveStep(StoreMoveStep.SI_06_DoorWarToDevice); StoreMove.NextMoveStep(StoreMoveStep.SI_06_DoorWarToDevice);
if (IsHasCompress_Axis) if (IsHasCompress_Axis)
...@@ -622,6 +623,20 @@ namespace OnlineStore.DeviceLibrary ...@@ -622,6 +623,20 @@ namespace OnlineStore.DeviceLibrary
#endregion #endregion
private void SO_10_DeviceToDoorPro()
{
StoreMove.NextMoveStep(StoreMoveStep.SO_10_DeviceToDoor);
OutStoreLog("出库:SO_10 叉子进出料口,进出轴至P2(进料口取料点) ");
ACAxisMove(Config.InOut_Axis, StoreMove.MoveParam.MoveP.InOut_P2, Config.InOutAxis_P2_Speed);
NeedCheckSafetyLight = 1;
}
private void SI_05_DeviceToDoor()
{
InStoreLog("入库:SI_05 叉子进入入料口,进出轴至P2(进料口取料点) ");
StoreMove.NextMoveStep(StoreMoveStep.SI_05_DeviceToDoor);
ACAxisMove(Config.InOut_Axis, StoreMove.MoveParam.MoveP.InOut_P2, Config.InOutAxis_P2_Speed);
NeedCheckSafetyLight = 1;
}
#region 出库 #region 出库
private DateTime startOutStoreTime = DateTime.Now; private DateTime startOutStoreTime = DateTime.Now;
...@@ -764,9 +779,11 @@ namespace OnlineStore.DeviceLibrary ...@@ -764,9 +779,11 @@ namespace OnlineStore.DeviceLibrary
{ {
if (IsHasCompress_Axis|| Config.IsHasLocationCylinder.Equals(0)) if (IsHasCompress_Axis|| Config.IsHasLocationCylinder.Equals(0))
{ {
StoreMove.NextMoveStep(StoreMoveStep.SO_10_DeviceToDoor); SO_10_DeviceToDoorPro();
OutStoreLog("出库:SO_10 叉子进出料口,进出轴至P2(进料口取料点) "); //StoreMove.NextMoveStep(StoreMoveStep.SO_10_DeviceToDoor);
ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed); //OutStoreLog("出库:SO_10 叉子进出料口,进出轴至P2(进料口取料点) ");
//ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed);
//NeedCheckSafetyLight = 1;
} }
else else
{ {
...@@ -778,12 +795,15 @@ namespace OnlineStore.DeviceLibrary ...@@ -778,12 +795,15 @@ namespace OnlineStore.DeviceLibrary
//此处需要等待移栽没有工作,才能把盘放入出料口 //此处需要等待移栽没有工作,才能把盘放入出料口
else if (StoreMove.MoveStep == StoreMoveStep.SO_09_LocationCylinder_Down) else if (StoreMove.MoveStep == StoreMoveStep.SO_09_LocationCylinder_Down)
{ {
OutStoreLog("出库:SO_10 叉子进出料口,进出轴至P2(进料口取料点) "); SO_10_DeviceToDoorPro();
StoreMove.NextMoveStep(StoreMoveStep.SO_10_DeviceToDoor); //OutStoreLog("出库:SO_10 叉子进出料口,进出轴至P2(进料口取料点) ");
ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed); //StoreMove.NextMoveStep(StoreMoveStep.SO_10_DeviceToDoor);
//ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed);
//NeedCheckSafetyLight = 1;
} }
else if (StoreMove.MoveStep == StoreMoveStep.SO_10_DeviceToDoor) else if (StoreMove.MoveStep == StoreMoveStep.SO_10_DeviceToDoor)
{ {
NeedCheckSafetyLight = 0;
OutStoreLog("出库:SO_11 放下物品,升降轴至P8(进料口出料缓冲点) "); OutStoreLog("出库:SO_11 放下物品,升降轴至P8(进料口出料缓冲点) ");
StoreMove.NextMoveStep(StoreMoveStep.SO_11_DevicePutWare); StoreMove.NextMoveStep(StoreMoveStep.SO_11_DevicePutWare);
if (IsHasCompress_Axis) if (IsHasCompress_Axis)
......
...@@ -16,7 +16,8 @@ namespace OnlineStore.DeviceLibrary ...@@ -16,7 +16,8 @@ namespace OnlineStore.DeviceLibrary
/// </summary> /// </summary>
public abstract class KTK_Store : KTK_DeviceBase public abstract class KTK_Store : KTK_DeviceBase
{ {
protected int NeedCheckSafetyLight = 0;
public KTK_Store() public KTK_Store()
{ {
} }
...@@ -276,22 +277,41 @@ namespace OnlineStore.DeviceLibrary ...@@ -276,22 +277,41 @@ namespace OnlineStore.DeviceLibrary
string deviceName = moveAxis.DeviceName; string deviceName = moveAxis.DeviceName;
short axisNo = moveAxis.GetAxisValue(); short axisNo = moveAxis.GetAxisValue();
bool isOk = ACServerManager.GetBusyStatus(deviceName, axisNo).Equals(0); //如果是进出轴,并且光栅被遮挡,直接返回false
if (NeedCheckSafetyLight.Equals(2))
{
if (StoreMove.MoveStep.Equals(StoreMoveStep.SO_10_DeviceToDoor) ||
StoreMove.MoveStep.Equals(StoreMoveStep.SI_05_DeviceToDoor))
{
return false;
}
}
bool isOk = ACServerManager.GetBusyStatus(deviceName, axisNo).Equals(0);
int outCount = ACServerManager.GetActualtPosition(deviceName, axisNo); int outCount = ACServerManager.GetActualtPosition(deviceName, axisNo);
int errorCount = Math.Abs(outCount - targetPosition); int errorCount = Math.Abs(outCount - targetPosition);
if (isOk) if (isOk)
{ {
if (errorCount > moveAxis.CanErrorCountMax) if (errorCount > moveAxis.CanErrorCountMax)
{ {
if (NeedCheckSafetyLight.Equals(2))
{
if (StoreMove.MoveStep.Equals(StoreMoveStep.SO_10_DeviceToDoor) ||
StoreMove.MoveStep.Equals(StoreMoveStep.SI_05_DeviceToDoor))
{
return false;
}
}
//判断是否需要重新运动 //判断是否需要重新运动
if (StoreMove.CanWhileCount > 0) if (StoreMove.CanWhileCount > 0)
{ {
LogUtil.error(LOGGER, moveAxis.DisplayStr+ "目标位置[" + targetPosition + "]当前位置[" + outCount + LogUtil.error(LOGGER, moveAxis.DisplayStr + "目标位置[" + targetPosition + "]当前位置[" + outCount +
"],误差过大,重新开始运动,剩余[" + StoreMove.CanWhileCount + "]次"); "],误差过大,重新开始运动,剩余[" + StoreMove.CanWhileCount + "]次");
//LogUtil.error(LOGGER, StoreName + " storeMoveStep=" + StoreMove.MoveStep + moveAxis.DisplayStr + "目标位置[" + targetPosition + "]重新开始运动"); //LogUtil.error(LOGGER, StoreName + " storeMoveStep=" + StoreMove.MoveStep + moveAxis.DisplayStr + "目标位置[" + targetPosition + "]重新开始运动");
ACServerManager.AbsMove(moveAxis.DeviceName, moveAxis.GetAxisValue(), targetPosition, targetSpeed); ACServerManager.AbsMove(moveAxis.DeviceName, moveAxis.GetAxisValue(), targetPosition, targetSpeed);
StoreMove.CanWhileCount--; StoreMove.CanWhileCount--;
return false;
} }
else else
{ {
...@@ -303,7 +323,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -303,7 +323,7 @@ namespace OnlineStore.DeviceLibrary
} }
else else
{ {
return true; return true;
} }
} }
......
...@@ -483,8 +483,8 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -483,8 +483,8 @@ namespace OnlineStore.LoadCSVLibrary
//MustHaveDIList.Add(IO_Type.Left_Door_LimitSingle); //MustHaveDIList.Add(IO_Type.Left_Door_LimitSingle);
//MustHaveDIList.Add(IO_Type.Right_Door_LimitSingle); //MustHaveDIList.Add(IO_Type.Right_Door_LimitSingle);
MustHaveDIList.Add(IO_Type.TrayCheck_3); MustHaveDIList.Add(IO_Type.Door_LimitSingle);
MustHaveDIList.Add(IO_Type.TrayCheck_4); MustHaveDIList.Add(IO_Type.SafetyLightCurtains);
MustHaveDIList.Add(IO_Type.LocationCylinder2_Down); MustHaveDIList.Add(IO_Type.LocationCylinder2_Down);
MustHaveDIList.Add(IO_Type.LocationCylinder2_Up); MustHaveDIList.Add(IO_Type.LocationCylinder2_Up);
......
...@@ -297,24 +297,33 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -297,24 +297,33 @@ namespace OnlineStore.LoadCSVLibrary
/// DI 流水线急停 LINE_Suddown 203 /// DI 流水线急停 LINE_Suddown 203
/// </summary> /// </summary>
public static string LINE_Suddown = "LINE_Suddown"; public static string LINE_Suddown = "LINE_Suddown";
///// <summary>
///// 左侧门限位
///// </summary>
//public static string Left_Door_LimitSingle = "Left_Door_LimitSingle";
///// <summary>
///// 右侧门限位
///// </summary>
//public static string Right_Door_LimitSingle = "Right_Door_LimitSingle";
/// <summary> /// <summary>
/// 左侧门限位 /// 前门限位
/// </summary>
public static string Left_Door_LimitSingle = "Left_Door_LimitSingle";
/// <summary>
/// 右侧门限位
/// </summary> /// </summary>
public static string Right_Door_LimitSingle = "Right_Door_LimitSingle"; public static string Door_LimitSingle = "Door_LimitSingle";
/// <summary> /// <summary>
/// 摄像机光源 /// 摄像机光源
/// </summary> /// </summary>
public static string CameraLight_Power = "CameraLight_Power"; public static string CameraLight_Power = "CameraLight_Power";
public static string TrayCheck_3 = "TrayCheck_3"; //public static string TrayCheck_3 = "TrayCheck_3";
public static string TrayCheck_4 = "TrayCheck_4"; //public static string TrayCheck_4 = "TrayCheck_4";
/// <summary> /// <summary>
/// DO DisableDoorControl 禁用门禁功能 /// DO DisableDoorControl 禁用门禁功能
/// </summary> /// </summary>
public static string DisableDoorControl = "DisableDoorControl"; public static string DisableDoorControl = "DisableDoorControl";
/// <summary>
/// 安全光栅
/// </summary>
public static string SafetyLightCurtains = "SafetyLightCurtains";
} }
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!