Commit 63922c39 几米阳光

增加光栅功能

1 个父辈 31a4f2e7
......@@ -220,14 +220,18 @@ namespace OnlineStore.ACSingleStore
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 + " 左侧门未关";
}
if (store.KNDIOValue(IO_Type.Right_Door_LimitSingle).Equals(IO_VALUE.LOW))
{
lblWarnMsg.Text = lblWarnMsg.Text + " 右侧门未关";
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))
......
......@@ -14,4 +14,15 @@
轴三运动时要判断气缸到位
出库时等待拿走料盘与等待10秒有一个条件到达就完成
轴三复位时,如果已经原点返回过且原点信号亮,需要先相对走-5000才能原点返回
\ 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
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_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,右侧门限位,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,料盘检测4,TrayCheck_4,213,192.168.200.10,0,料盘检测4,X14,DI-14,0
DI,前门限位,Door_LimitSingle,210,192.168.200.10,0,前门限位,X11,DI-11,0
,,Right_Door_LimitSingle,211,192.168.200.10,0,右侧门限位,X12,DI-12,0
DI,安全光栅,SafetyLightCurtains,212,192.168.200.10,0,安全光栅,X13,DI-13,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_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
......
......@@ -123,9 +123,70 @@ namespace OnlineStore.DeviceLibrary
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)
{
try
......@@ -973,7 +1034,7 @@ namespace OnlineStore.DeviceLibrary
CheckAxisAlarm();
}
}
public void TimerProcess()
{
try
......
......@@ -480,19 +480,20 @@ namespace OnlineStore.DeviceLibrary
}
else
{
InStoreLog("入库:SI_05 叉子进入入料口,进出轴至P2(进料口取料点) ");
StoreMove.NextMoveStep(StoreMoveStep.SI_05_DeviceToDoor);
ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed);
SI_05_DeviceToDoor();
}
}
else if (StoreMove.MoveStep == StoreMoveStep.SI_04_CompressWare)
{
InStoreLog("入库:SI_05 叉子进入入料口,进出轴至P2(进料口取料点) ");
StoreMove.NextMoveStep(StoreMoveStep.SI_05_DeviceToDoor);
ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed);
SI_05_DeviceToDoor();
//InStoreLog("入库:SI_05 叉子进入入料口,进出轴至P2(进料口取料点) ");
//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)
{
NeedCheckSafetyLight = 0;
InStoreLog("入库:SI_06 拿物品,压紧轴至P2(压紧点)) 升降轴至P7(进料口取料缓冲点) ");
StoreMove.NextMoveStep(StoreMoveStep.SI_06_DoorWarToDevice);
if (IsHasCompress_Axis)
......@@ -622,6 +623,20 @@ namespace OnlineStore.DeviceLibrary
#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 出库
private DateTime startOutStoreTime = DateTime.Now;
......@@ -764,9 +779,11 @@ namespace OnlineStore.DeviceLibrary
{
if (IsHasCompress_Axis|| Config.IsHasLocationCylinder.Equals(0))
{
StoreMove.NextMoveStep(StoreMoveStep.SO_10_DeviceToDoor);
OutStoreLog("出库:SO_10 叉子进出料口,进出轴至P2(进料口取料点) ");
ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed);
SO_10_DeviceToDoorPro();
//StoreMove.NextMoveStep(StoreMoveStep.SO_10_DeviceToDoor);
//OutStoreLog("出库:SO_10 叉子进出料口,进出轴至P2(进料口取料点) ");
//ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed);
//NeedCheckSafetyLight = 1;
}
else
{
......@@ -778,12 +795,15 @@ namespace OnlineStore.DeviceLibrary
//此处需要等待移栽没有工作,才能把盘放入出料口
else if (StoreMove.MoveStep == StoreMoveStep.SO_09_LocationCylinder_Down)
{
OutStoreLog("出库:SO_10 叉子进出料口,进出轴至P2(进料口取料点) ");
StoreMove.NextMoveStep(StoreMoveStep.SO_10_DeviceToDoor);
ACAxisMove(Config.InOut_Axis, moveP.InOut_P2, Config.InOutAxis_P2_Speed);
SO_10_DeviceToDoorPro();
//OutStoreLog("出库:SO_10 叉子进出料口,进出轴至P2(进料口取料点) ");
//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)
{
NeedCheckSafetyLight = 0;
OutStoreLog("出库:SO_11 放下物品,升降轴至P8(进料口出料缓冲点) ");
StoreMove.NextMoveStep(StoreMoveStep.SO_11_DevicePutWare);
if (IsHasCompress_Axis)
......
......@@ -16,7 +16,8 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
public abstract class KTK_Store : KTK_DeviceBase
{
protected int NeedCheckSafetyLight = 0;
public KTK_Store()
{
}
......@@ -276,22 +277,41 @@ namespace OnlineStore.DeviceLibrary
string deviceName = moveAxis.DeviceName;
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 errorCount = Math.Abs(outCount - targetPosition);
if (isOk)
{
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)
{
LogUtil.error(LOGGER, moveAxis.DisplayStr+ "目标位置[" + targetPosition + "]当前位置[" + outCount +
LogUtil.error(LOGGER, moveAxis.DisplayStr + "目标位置[" + targetPosition + "]当前位置[" + outCount +
"],误差过大,重新开始运动,剩余[" + StoreMove.CanWhileCount + "]次");
//LogUtil.error(LOGGER, StoreName + " storeMoveStep=" + StoreMove.MoveStep + moveAxis.DisplayStr + "目标位置[" + targetPosition + "]重新开始运动");
ACServerManager.AbsMove(moveAxis.DeviceName, moveAxis.GetAxisValue(), targetPosition, targetSpeed);
StoreMove.CanWhileCount--;
return false;
}
else
{
......@@ -303,7 +323,7 @@ namespace OnlineStore.DeviceLibrary
}
else
{
{
return true;
}
}
......
......@@ -483,8 +483,8 @@ namespace OnlineStore.LoadCSVLibrary
//MustHaveDIList.Add(IO_Type.Left_Door_LimitSingle);
//MustHaveDIList.Add(IO_Type.Right_Door_LimitSingle);
MustHaveDIList.Add(IO_Type.TrayCheck_3);
MustHaveDIList.Add(IO_Type.TrayCheck_4);
MustHaveDIList.Add(IO_Type.Door_LimitSingle);
MustHaveDIList.Add(IO_Type.SafetyLightCurtains);
MustHaveDIList.Add(IO_Type.LocationCylinder2_Down);
MustHaveDIList.Add(IO_Type.LocationCylinder2_Up);
......
......@@ -297,24 +297,33 @@ namespace OnlineStore.LoadCSVLibrary
/// DI 流水线急停 LINE_Suddown 203
/// </summary>
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>
public static string Left_Door_LimitSingle = "Left_Door_LimitSingle";
/// <summary>
/// 右侧门限位
/// 前门限位
/// </summary>
public static string Right_Door_LimitSingle = "Right_Door_LimitSingle";
public static string Door_LimitSingle = "Door_LimitSingle";
/// <summary>
/// 摄像机光源
/// </summary>
public static string CameraLight_Power = "CameraLight_Power";
public static string TrayCheck_3 = "TrayCheck_3";
public static string TrayCheck_4 = "TrayCheck_4";
//public static string TrayCheck_3 = "TrayCheck_3";
//public static string TrayCheck_4 = "TrayCheck_4";
/// <summary>
/// DO DisableDoorControl 禁用门禁功能
/// </summary>
public static string DisableDoorControl = "DisableDoorControl";
/// <summary>
/// 安全光栅
/// </summary>
public static string SafetyLightCurtains = "SafetyLightCurtains";
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!