Commit a215ee24 几米阳光

原来的出入库增加批量操作的判定

1 个父辈 6522a61a
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<appSettings> <appSettings>
<!--是否开机自动启动料仓--> <!--是否开机自动启动料仓-->
<add key="App_AutoRun" value="1" /> <add key="App_AutoRun" value="1" />
<add key="App_Title" value="料仓_自动上下料" /> <add key="App_Title" value="料仓_批量上下料" />
<add key="scanner_start_command" value="S" /> <add key="scanner_start_command" value="S" />
<!-- 开始吹气的判断值(配置值=服务器发送的湿度值-开始吹气值)--> <!-- 开始吹气的判断值(配置值=服务器发送的湿度值-开始吹气值)-->
<add key="StartBlowValue" value="4" /> <add key="StartBlowValue" value="4" />
......
...@@ -33,7 +33,7 @@ namespace OnlineStore.AutoInOutStore ...@@ -33,7 +33,7 @@ namespace OnlineStore.AutoInOutStore
updown = boxBean.Config.UpDown_Axis; updown = boxBean.Config.UpDown_Axis;
compress_Slv = boxBean.Config.CompressAxis_Slv; compress_Slv = boxBean.Config.CompressAxis_Slv;
inout = boxBean.Config.InOut_Axis; inout = boxBean.Config.InOut_Axis;
auto = boxBean.Config.Auto_Axis; auto = boxBean.Config.Batch_Axis;
InitializeComponent(); InitializeComponent();
txtComSpeed.Text = boxBean.Config.CompressAxis_EndSpeed.ToString(); txtComSpeed.Text = boxBean.Config.CompressAxis_EndSpeed.ToString();
this.Text = boxBean.StoreName + "_轴点动调试"; this.Text = boxBean.StoreName + "_轴点动调试";
......
...@@ -299,14 +299,14 @@ namespace OnlineStore.AutoInOutStore ...@@ -299,14 +299,14 @@ namespace OnlineStore.AutoInOutStore
private void btnDOpen_Click(object sender, EventArgs e) private void btnDOpen_Click(object sender, EventArgs e)
{ {
KND.IOMove(IO_Type.AutoDoor_Close, IO_VALUE.LOW); KND.IOMove(IO_Type.BatchDoor_Close, IO_VALUE.LOW);
KND.IOMove(IO_Type.AutoDoor_Open, IO_VALUE.HIGH); KND.IOMove(IO_Type.BatchDoor_Open, IO_VALUE.HIGH);
} }
private void btnDClose_Click(object sender, EventArgs e) private void btnDClose_Click(object sender, EventArgs e)
{ {
KND.IOMove(IO_Type.AutoDoor_Open, IO_VALUE.LOW); KND.IOMove(IO_Type.BatchDoor_Open, IO_VALUE.LOW);
KND.IOMove(IO_Type.AutoDoor_Close, IO_VALUE.HIGH); KND.IOMove(IO_Type.BatchDoor_Close, IO_VALUE.HIGH);
} }
private void btnSXi_Click(object sender, EventArgs e) private void btnSXi_Click(object sender, EventArgs e)
......
...@@ -11,8 +11,8 @@ DI,料盘宽度检测1,WidthCheck1,208,192.168.200.10,0,料盘宽度检测1,X09,DI-09,0, ...@@ -11,8 +11,8 @@ DI,料盘宽度检测1,WidthCheck1,208,192.168.200.10,0,料盘宽度检测1,X09,DI-09,0,
DI,料盘宽度检测2,WidthCheck2,209,192.168.200.10,0,料盘宽度检测2,X10,DI-10,0, DI,料盘宽度检测2,WidthCheck2,209,192.168.200.10,0,料盘宽度检测2,X10,DI-10,0,
DI,料盘检测1(上料机构),TrayCheck_LoadMaterial ,210,192.168.200.10,0,料盘检测1(上料机构),X11,DI-11,0, DI,料盘检测1(上料机构),TrayCheck_LoadMaterial ,210,192.168.200.10,0,料盘检测1(上料机构),X11,DI-11,0,
DI,上料机构出料检测,OutCheck,211,192.168.200.10,0,上料机构出料检测,X12,DI-12,0, DI,上料机构出料检测,OutCheck,211,192.168.200.10,0,上料机构出料检测,X12,DI-12,0,
DI,门锁气缸打开端,AutoDoor_Open,212,192.168.200.10,0,门锁气缸打开端,X13,DI-13,0, DI,门锁气缸打开端,BatchDoor_Open,212,192.168.200.10,0,门锁气缸打开端,X13,DI-13,0,
DI,门锁气缸关闭端,AutoDoor_Close,213,192.168.200.10,0,门锁气缸关闭端,X14,DI-14,0, DI,门锁气缸关闭端,BatchDoor_Close,213,192.168.200.10,0,门锁气缸关闭端,X14,DI-14,0,
DI,料盘检测2(料叉机构),TrayCheck_Fixture,214,192.168.200.10,0,料盘检测2(料叉机构),X15,DI-15,0, DI,料盘检测2(料叉机构),TrayCheck_Fixture,214,192.168.200.10,0,料盘检测2(料叉机构),X15,DI-15,0,
DI,压紧机构计量检测,CompressAxis_Check,215,192.168.200.10,0,压紧机构计量检测,X16,DI-16,0, DI,压紧机构计量检测,CompressAxis_Check,215,192.168.200.10,0,压紧机构计量检测,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,
...@@ -42,13 +42,14 @@ DI,左侧门关闭,DoorColse_Single,203,192.168.200.11,0,左侧门关闭,X20,DI-24,0, ...@@ -42,13 +42,14 @@ DI,左侧门关闭,DoorColse_Single,203,192.168.200.11,0,左侧门关闭,X20,DI-24,0,
AXIS,(轴一)旋转轴,Middle_Axis,1,COM4,0,,,,, AXIS,(轴一)旋转轴,Middle_Axis,1,COM4,0,,,,,
AXIS,(轴二)升降轴轴,UpDown_Axis,1,COM5,0,,,,, AXIS,(轴二)升降轴轴,UpDown_Axis,1,COM5,0,,,,,
AXIS,(轴三)进出轴,InOut_Axis,1,COM6,0,,,,, AXIS,(轴三)进出轴,InOut_Axis,1,COM6,0,,,,,
AXIS,(轴五)自动上下轴,Auto_Axis,1,COM7,0,,,,, AXIS,(轴五)批量上下料轴,Batch_Axis,1,COM7,0,,,,,
,,,,,,,,,, ,,,,,,,,,,
,,,,,,,,,, ,,,,,,,,,,
PRO,升降轴 进料口取料点 P1,UpDownAxis_DoorOPosition_P1,403000,,,,,,, PRO,升降轴 进料口取料点 P1,UpDownAxis_DoorOPosition_P1,403000,,,,,,,
PRO,升降轴 进料口出料前点 P2,UpDownAxis_DoorIPosition_P2,415000,,,,,,, PRO,升降轴 进料口出料前点 P2,UpDownAxis_DoorIPosition_P2,415000,,,,,,,
PRO,升降轴 进料口取料缓冲点 P7,UpDownAxis_DoorOBPosition_P7,415000,,,,,,, PRO,升降轴 进料口取料缓冲点 P7,UpDownAxis_DoorOBPosition_P7,415000,,,,,,,
PRO,升降轴 进料口出料缓冲点 P8,UpDownAxis_DoorIBPosition_P8,403000,,,,,,, PRO,升降轴 进料口出料缓冲点 P8,UpDownAxis_DoorIBPosition_P8,403000,,,,,,,
PRO,升降轴 待机点P1集合,UpDownAxis_P1_List,8#20000;12#22000,,,,,,,
PRO,旋转轴(轴1)P1 待机原位点,MiddleAxis_P1_Position,268093,,,,,,, PRO,旋转轴(轴1)P1 待机原位点,MiddleAxis_P1_Position,268093,,,,,,,
PRO,进出轴(轴3)P1待机原位点,InOutAxis_P1_Position,1000,,,,,,, PRO,进出轴(轴3)P1待机原位点,InOutAxis_P1_Position,1000,,,,,,,
PRO,压紧轴(轴4)P1待机原位点,CompressAxis_P1_Position,-75000,,,,,,, PRO,压紧轴(轴4)P1待机原位点,CompressAxis_P1_Position,-75000,,,,,,,
...@@ -125,16 +126,19 @@ PRO,硕科步进电机(压紧轴)控制减速度,CompressAxis_DelSpeed,15000,,,,,,, ...@@ -125,16 +126,19 @@ PRO,硕科步进电机(压紧轴)控制减速度,CompressAxis_DelSpeed,15000,,,,,,,
PRO,硕科步进电机(压紧轴)控制归零速度(原点返回速度),CompressAxis_HomeSpeed,15000,,,,,,, PRO,硕科步进电机(压紧轴)控制归零速度(原点返回速度),CompressAxis_HomeSpeed,15000,,,,,,,
PRO,硕科步进电机轴地址(压紧轴),CompressAxis_Slv,1,,,,,, , PRO,硕科步进电机轴地址(压紧轴),CompressAxis_Slv,1,,,,,, ,
,,,,,,,,,, ,,,,,,,,,,
PRO,(轴五)自动轴目标速度,AutoAxis_TargetSpeed,50,,,,,,, PRO,(轴五)上料轴目标速度,BatchAxis_TargetSpeed,50,,,,,,,
PRO,(轴五)自动轴加速度,AutoAxis_AddSpeed,300,,,,,,, PRO,(轴五)上料轴加速度,BatchAxis_AddSpeed,300,,,,,,,
PRO,(轴五)自动轴减速度,AutoAxis_DelSpeed,300,,,,,,, PRO,(轴五)上料轴减速度,BatchAxis_DelSpeed,300,,,,,,,
PRO,(轴五)自动轴原点低速,AutoAxis_HomeLowSpeed,20,,,,,,, PRO,(轴五)上料轴原点低速,BatchAxis_HomeLowSpeed,20,,,,,,,
PRO,(轴五)自动轴原点高速,AutoAxis_HomeHighSpeed,60,,,,,,, PRO,(轴五)上料轴原点高速,BatchAxis_HomeHighSpeed,60,,,,,,,
PRO,(轴五)自动轴原点加速度,AutoAxis_HomeAddSpeed,200,,,,,,, PRO,(轴五)上料轴原点加速度,BatchAxis_HomeAddSpeed,200,,,,,,,
PRO,(轴五)自动轴P1点,AutoAxis_P1,200,,,,,, , PRO,(轴五)上料轴P1点(出库时接料盘的位置),BatchAxis_P1,200,,,,,, ,
PRO,(轴五)自动轴停止时可误差的脉冲数的最小值,AutoAxis_ErrorCountMin,10,,,,,,, PRO,(轴五)上料轴停止时可误差的脉冲数的最小值,BatchAxis_ErrorCountMin,10,,,,,,,
PRO,(轴五)自动轴停止时可误差的脉冲数的最大值,AutoAxis_ErrorCountMax,1000,,,,,,, PRO,(轴五)上料轴停止时可误差的脉冲数的最大值,BatchAxis_ErrorCountMax,1000,,,,,,,
PRO,(轴五)自动轴最小限位,AutoAxis_PositionMin,0,,,,,,, PRO,(轴五)上料轴最小限位,BatchAxis_PositionMin,0,,,,,,,
PRO,(轴五)自动轴最大限位,AutoAxis_PositionMax,0,,,,,,, PRO,(轴五)上料轴最大限位,BatchAxis_PositionMax,0,,,,,,,
PRO,(轴五)上料轴P1速度,BatchAxis_P1_Speed,50,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
PRO,IO模块对应的DI数量,IO_DILength,192.168.200.10#16;192.168.200.11#4,,,,,, , PRO,IO模块对应的DI数量,IO_DILength,192.168.200.10#16;192.168.200.11#4,,,,,, ,
PRO,模块对应的DO数量,IO_DOLength,192.168.200.10#16;192.168.200.11#4,,,,,,, PRO,模块对应的DO数量,IO_DOLength,192.168.200.10#16;192.168.200.11#4,,,,,,,
...@@ -144,12 +144,12 @@ namespace OnlineStore.DeviceLibrary ...@@ -144,12 +144,12 @@ namespace OnlineStore.DeviceLibrary
moveAxisList.Add(Config.Middle_Axis); moveAxisList.Add(Config.Middle_Axis);
moveAxisList.Add(Config.UpDown_Axis); moveAxisList.Add(Config.UpDown_Axis);
moveAxisList.Add(Config.InOut_Axis); moveAxisList.Add(Config.InOut_Axis);
moveAxisList.Add(Config.Auto_Axis); moveAxisList.Add(Config.Batch_Axis);
this.AxisAlarmCodeMap = new Dictionary<string , AxisAlarmInfo>(); this.AxisAlarmCodeMap = new Dictionary<string , AxisAlarmInfo>();
this.AxisAlarmCodeMap.Add(Config.UpDown_Axis.DeviceName, new AxisAlarmInfo()); this.AxisAlarmCodeMap.Add(Config.UpDown_Axis.DeviceName, new AxisAlarmInfo());
this.AxisAlarmCodeMap.Add(Config.InOut_Axis.DeviceName, new AxisAlarmInfo()); this.AxisAlarmCodeMap.Add(Config.InOut_Axis.DeviceName, new AxisAlarmInfo());
this.AxisAlarmCodeMap.Add(this.Config.Middle_Axis.DeviceName, new AxisAlarmInfo()); this.AxisAlarmCodeMap.Add(this.Config.Middle_Axis.DeviceName, new AxisAlarmInfo());
this.AxisAlarmCodeMap.Add(this.Config.Auto_Axis.DeviceName, new AxisAlarmInfo()); this.AxisAlarmCodeMap.Add(this.Config.Batch_Axis.DeviceName, new AxisAlarmInfo());
} }
/// <summary> /// <summary>
...@@ -369,7 +369,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -369,7 +369,7 @@ namespace OnlineStore.DeviceLibrary
StoreMove.NextMoveStep(StoreMoveStep.BOX_H_MiddleAxisToP1); StoreMove.NextMoveStep(StoreMoveStep.BOX_H_MiddleAxisToP1);
LogUtil.info(LOGGER, StoreName + "复位中:旋转轴运动到P1,上下轴走到P1,压紧轴到P1!"); LogUtil.info(LOGGER, StoreName + "复位中:旋转轴运动到P1,上下轴走到P1,压紧轴到P1!");
ACAxisMove(Config.Middle_Axis, Config.MiddleAxis_P1_Position, Config.MiddleAxis_P1_Speed); ACAxisMove(Config.Middle_Axis, Config.MiddleAxis_P1_Position, Config.MiddleAxis_P1_Speed);
ACAxisMove(Config.UpDown_Axis, Config.UpDownAxis_DoorOPosition_P1, Config.UpDownAxis_P1_Speed); ACAxisMove(Config.UpDown_Axis, Config.GetDefaultUpDownP1(), Config.UpDownAxis_P1_Speed);
ComMoveToPosition(Config.CompressAxis_P1_Position); ComMoveToPosition(Config.CompressAxis_P1_Position);
break; break;
case StoreMoveStep.BOX_H_MiddleAxisToP1: case StoreMoveStep.BOX_H_MiddleAxisToP1:
...@@ -398,7 +398,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -398,7 +398,7 @@ namespace OnlineStore.DeviceLibrary
StoreMove.NextMoveStep(StoreMoveStep.BOX_M_H_TOP1_OtherAxisToP1); StoreMove.NextMoveStep(StoreMoveStep.BOX_M_H_TOP1_OtherAxisToP1);
LogUtil.info(LOGGER, StoreName + "复位中:旋转轴运动到P1,上下轴走到P1,压紧轴到P1!"); LogUtil.info(LOGGER, StoreName + "复位中:旋转轴运动到P1,上下轴走到P1,压紧轴到P1!");
ACAxisMove(Config.Middle_Axis, Config.MiddleAxis_P1_Position, Config.MiddleAxis_P1_Speed); ACAxisMove(Config.Middle_Axis, Config.MiddleAxis_P1_Position, Config.MiddleAxis_P1_Speed);
ACAxisMove(Config.UpDown_Axis, Config.UpDownAxis_DoorOPosition_P1, Config.UpDownAxis_P1_Speed); ACAxisMove(Config.UpDown_Axis, Config.GetDefaultUpDownP1(), Config.UpDownAxis_P1_Speed);
ComMoveToPosition(Config.CompressAxis_P1_Position); ComMoveToPosition(Config.CompressAxis_P1_Position);
break; break;
case StoreMoveStep.BOX_M_H_TOP1_OtherAxisToP1: case StoreMoveStep.BOX_M_H_TOP1_OtherAxisToP1:
...@@ -428,17 +428,33 @@ namespace OnlineStore.DeviceLibrary ...@@ -428,17 +428,33 @@ namespace OnlineStore.DeviceLibrary
} }
private void OpenDoorAndWait() private void OpenDoorAndWait()
{ {
KND.IOMove(IO_Type.Door_Down, IO_VALUE.LOW); if (StoreMove.MoveType.Equals(StoreMoveType.InStore) || StoreMove.MoveType.Equals(StoreMoveType.OutStore))
KND.IOMove(IO_Type.Door_Up, IO_VALUE.HIGH); {
//如果是批量出入库,不需要经过此门
if (StoreMove.IsBatchInOutStore)
{
return;
}
}
StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Down, IO_VALUE.LOW)); StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Down, IO_VALUE.LOW));
StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Up, IO_VALUE.HIGH)); StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Up, IO_VALUE.HIGH));
KND.IOMove(IO_Type.Door_Down, IO_VALUE.LOW);
KND.IOMove(IO_Type.Door_Up, IO_VALUE.HIGH);
} }
private void CloseDoorAndWait() private void CloseDoorAndWait()
{ {
KND.IOMove(IO_Type.Door_Down, IO_VALUE.HIGH); if (StoreMove.MoveType.Equals(StoreMoveType.InStore) || StoreMove.MoveType.Equals(StoreMoveType.OutStore))
KND.IOMove(IO_Type.Door_Up, IO_VALUE.LOW); {
//如果是批量出入库,不需要经过此门
if (StoreMove.IsBatchInOutStore)
{
return;
}
}
StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Down, IO_VALUE.HIGH)); StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Down, IO_VALUE.HIGH));
StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Up, IO_VALUE.LOW)); StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Up, IO_VALUE.LOW));
KND.IOMove(IO_Type.Door_Down, IO_VALUE.HIGH);
KND.IOMove(IO_Type.Door_Up, IO_VALUE.LOW);
} }
/// <summary> /// <summary>
...@@ -497,7 +513,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -497,7 +513,7 @@ namespace OnlineStore.DeviceLibrary
StoreMove.NextMoveStep(StoreMoveStep.BOX_H_MiddleAxisToP1); StoreMove.NextMoveStep(StoreMoveStep.BOX_H_MiddleAxisToP1);
LogUtil.info(LOGGER, StoreName + "回原点:旋转轴运动到P1,上下轴到P1,压紧轴到P1!"); LogUtil.info(LOGGER, StoreName + "回原点:旋转轴运动到P1,上下轴到P1,压紧轴到P1!");
ACAxisMove(Config.Middle_Axis, Config.MiddleAxis_P1_Position, Config.MiddleAxis_P1_Speed); ACAxisMove(Config.Middle_Axis, Config.MiddleAxis_P1_Position, Config.MiddleAxis_P1_Speed);
ACAxisMove(Config.UpDown_Axis, Config.UpDownAxis_DoorOPosition_P1, Config.UpDownAxis_P1_Speed); ACAxisMove(Config.UpDown_Axis, Config.GetDefaultUpDownP1(), Config.UpDownAxis_P1_Speed);
ComMoveToPosition(Config.CompressAxis_P1_Position); ComMoveToPosition(Config.CompressAxis_P1_Position);
break; break;
case StoreMoveStep.BOX_H_MiddleAxisToP1: case StoreMoveStep.BOX_H_MiddleAxisToP1:
...@@ -1121,7 +1137,12 @@ namespace OnlineStore.DeviceLibrary ...@@ -1121,7 +1137,12 @@ namespace OnlineStore.DeviceLibrary
if (currInOutFixture.WareNum.Equals("")) if (currInOutFixture.WareNum.Equals(""))
{ {
LogUtil.info(LOGGER, StoreName + "开始执行排队中的出库【" + currInOutFixture.ToStr() + "】"); LogUtil.info(LOGGER, StoreName + "开始执行排队中的出库【" + currInOutFixture.ToStr() + "】");
StartOutStoreMove(new InOutStoreParam("", currInOutFixture.PosId, currInOutFixture.plateH, currInOutFixture.plateW)); bool result = StartOutStoreMove(new InOutStoreParam("", currInOutFixture.PosId, currInOutFixture.plateH, currInOutFixture.plateW),true);
if (!result)
{
LogUtil.info(LOGGER, StoreName + " 执行排队中的出库【" + currInOutFixture.ToStr() + "】失败,重新加入等待队列");
AddWaitOutInfo(currInOutFixture);
}
} }
} }
} }
...@@ -1197,7 +1218,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -1197,7 +1218,7 @@ namespace OnlineStore.DeviceLibrary
ACServerManager.SuddenStop(Config.Middle_Axis.DeviceName, Config.Middle_Axis.GetAxisValue()); ACServerManager.SuddenStop(Config.Middle_Axis.DeviceName, Config.Middle_Axis.GetAxisValue());
ACServerManager.SuddenStop(Config.UpDown_Axis.DeviceName, Config.UpDown_Axis.GetAxisValue()); ACServerManager.SuddenStop(Config.UpDown_Axis.DeviceName, Config.UpDown_Axis.GetAxisValue());
ACServerManager.SuddenStop(Config.InOut_Axis.DeviceName, Config.InOut_Axis.GetAxisValue()); ACServerManager.SuddenStop(Config.InOut_Axis.DeviceName, Config.InOut_Axis.GetAxisValue());
ACServerManager.SuddenStop(Config.Auto_Axis.DeviceName, Config.Auto_Axis.GetAxisValue()); ACServerManager.SuddenStop(Config.Batch_Axis.DeviceName, Config.Batch_Axis.GetAxisValue());
} }
public override void StopMove(bool IsCloseAxis) public override void StopMove(bool IsCloseAxis)
{ {
...@@ -1330,7 +1351,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -1330,7 +1351,7 @@ namespace OnlineStore.DeviceLibrary
IsScanCode = false; IsScanCode = false;
InOutStoreParam param = new InOutStoreParam(message, posId, plateH, plateW, 0); InOutStoreParam param = new InOutStoreParam(message, posId, plateH, plateW, 0);
StartInStoreMove(param); StartInStoreMove(param,true);
//如果当前正在出入库中,需要记录下来,等待空闲时执行 //如果当前正在出入库中,需要记录下来,等待空闲时执行
LogUtil.info(LOGGER, StoreName + " 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】 开始入库!"); LogUtil.info(LOGGER, StoreName + " 收到服务器入库命令:库位号【" + posId + "】二维码【" + message + "】 开始入库!");
} }
...@@ -1640,7 +1661,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -1640,7 +1661,7 @@ namespace OnlineStore.DeviceLibrary
{ {
if (CanStarInOut()) if (CanStarInOut())
{ {
StartOutStoreMove(new InOutStoreParam("", posId, position)); StartOutStoreMove(new InOutStoreParam("", posId, position),true);
} }
else else
{ {
......
...@@ -23,6 +23,12 @@ namespace OnlineStore.DeviceLibrary ...@@ -23,6 +23,12 @@ namespace OnlineStore.DeviceLibrary
ACServerManager.SpeedMove(moveAxis.DeviceName, moveAxis.GetAxisValue(), targetSpeed); ACServerManager.SpeedMove(moveAxis.DeviceName, moveAxis.GetAxisValue(), targetSpeed);
} }
private static void ACAxisRelMove(ConfigMoveAxis moveAxis, int targetPosition, int targetSpeed)
{
StoreMove.WaitList.Add(WaitResultInfo.WaitAxis(moveAxis, targetPosition, targetSpeed));
moveAxis.TargetPosition = targetPosition;
ACServerManager.AbsMove(moveAxis.DeviceName, moveAxis.GetAxisValue(), targetPosition, targetSpeed);
}
private static void ACAxisHomeMove(ConfigMoveAxis moveAxis) private static void ACAxisHomeMove(ConfigMoveAxis moveAxis)
{ {
moveAxis.TargetPosition = 0; moveAxis.TargetPosition = 0;
...@@ -170,13 +176,46 @@ namespace OnlineStore.DeviceLibrary ...@@ -170,13 +176,46 @@ namespace OnlineStore.DeviceLibrary
StoreManager.Store.Alarm(StoreAlarmType.IoSingleTimeOut, "", WarnMsg, StoreMove.MoveType); StoreManager.Store.Alarm(StoreAlarmType.IoSingleTimeOut, "", WarnMsg, StoreMove.MoveType);
} }
} }
/// <summary>
/// 判断AC伺服电机轴是否运动完成
/// </summary>
private static bool ACAxisMoveIsEnd(ConfigMoveAxis moveAxis, int targetPosition, int targetSpeed, out string msg)
{
msg = "";
bool isOk = ACServerManager.GetBusyStatus(moveAxis.DeviceName, moveAxis.GetAxisValue()).Equals(0);
if (isOk)
{
int outCount = ACServerManager.GetActualtPosition(moveAxis.DeviceName, moveAxis.GetAxisValue());
int errorCount = Math.Abs(outCount - targetPosition);
if (errorCount <= moveAxis.CanErrorCountMax)
{
return true;
}
//判断是否需要重新运动
if (StoreMove.CanWhileCount > 0)
{
LogUtil.error(Name + moveAxis.DisplayStr + "目标[" + targetPosition + "]当前[" + outCount +
"],误差过大,重新运动,剩余[" + StoreMove.CanWhileCount + "]次");
ACServerManager.AbsMove(moveAxis.DeviceName, moveAxis.GetAxisValue(), targetPosition, targetSpeed);
StoreMove.CanWhileCount--;
}
else
{
msg = Name + moveAxis.DisplayStr + "目标[" + targetPosition + "]当前[" + outCount + "],误差过大,需要报警";
LogUtil.error(msg);
}
}
return false;
}
private static bool AxisMoveISEnd(WaitResultInfo wait) private static bool AxisMoveISEnd(WaitResultInfo wait)
{ {
string msg = ""; string msg = "";
if (wait.IsHomeMove) if (wait.IsHomeMove)
{ {
wait.IsEnd = ACHomeMoveIsEnd(wait.AxisInfo, out msg); wait.IsEnd = ACHomeMoveIsEnd(wait.AxisInfo, out msg);
}else
{
wait.IsEnd = ACAxisMoveIsEnd(wait.AxisInfo, wait.TargetPosition, wait.TargetSpeed, out msg);
} }
if (!wait.IsEnd) if (!wait.IsEnd)
{ {
......
...@@ -92,7 +92,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -92,7 +92,7 @@ namespace OnlineStore.DeviceLibrary
/// <summary> /// <summary>
/// 开始出库运动 /// 开始出库运动
/// </summary> /// </summary>
public abstract void StartOutStoreMove(InOutStoreParam param); //public abstract bool StartOutStoreMove(InOutStoreParam param);
protected abstract void OutStoreProcess(); protected abstract void OutStoreProcess();
#endregion #endregion
...@@ -100,17 +100,17 @@ namespace OnlineStore.DeviceLibrary ...@@ -100,17 +100,17 @@ namespace OnlineStore.DeviceLibrary
/// <summary> /// <summary>
/// 开始入库移动移动 /// 开始入库移动移动
/// </summary> /// </summary>
public abstract void StartInStoreMove(InOutStoreParam param); //public abstract bool StartInStoreMove(InOutStoreParam param);
protected abstract void InStoreProcess(); protected abstract void InStoreProcess();
#endregion #endregion
public string GetRunStr() public string GetRunStr(StoreRunStatus runStatus,bool IsStore)
{ {
string sta = "运行中"; string sta = "运行中";
string aa = ""; string aa = "";
switch (storeRunStatus) switch (runStatus)
{ {
case StoreRunStatus.Busy: case StoreRunStatus.Busy:
sta = "忙碌"; sta = "忙碌";
...@@ -128,7 +128,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -128,7 +128,7 @@ namespace OnlineStore.DeviceLibrary
sta = "等待启动"; sta = "等待启动";
break; break;
} }
if (storeRunStatus > StoreRunStatus.Wait) if (runStatus > StoreRunStatus.Wait)
{ {
//"0":"急停中", "1":"设备联机", "2":"故障中", "3":"入库执行中", "4":"出库执行中", 5":"料盘入仓位完成", "6":"料盘出仓位完成", 7":"设备调试中", //"0":"急停中", "1":"设备联机", "2":"故障中", "3":"入库执行中", "4":"出库执行中", 5":"料盘入仓位完成", "6":"料盘出仓位完成", 7":"设备调试中",
switch (storeStatus) switch (storeStatus)
......
...@@ -79,5 +79,11 @@ namespace OnlineStore.DeviceLibrary ...@@ -79,5 +79,11 @@ namespace OnlineStore.DeviceLibrary
/// 轴4( 压紧轴) 压紧前点P3 /// 轴4( 压紧轴) 压紧前点P3
/// </summary> /// </summary>
public int ComPress_P3{ get; set; } public int ComPress_P3{ get; set; }
/// <summary>
/// 上下料轴需要下降的相对高度
/// </summary>
public int BatchAxis_DownValue = 0;
} }
} }
...@@ -241,13 +241,41 @@ namespace OnlineStore.DeviceLibrary ...@@ -241,13 +241,41 @@ namespace OnlineStore.DeviceLibrary
/// </summary> /// </summary>
SO_14_WaitTake=114, SO_14_WaitTake=114,
/// <summary>
/// 料仓出库,批量出库,所有轴运行到吸盘下方,,轴1( 转盘) 至P1( 待机点)轴2( 上下) 至P1
/// </summary>
SO_58_ToBatchDoorPosition = 158,
/// <summary>
/// 料仓出库,定位气缸退回(有压紧轴的不需要此步骤
/// </summary>
SO_59_LocationCylinder_Down = 159,
/// <summary>
/// 料仓出库,,叉子进出料口,,轴3( 叉子) 至P2( 进料口取料点)
/// /// </summary>
SO_60_DeviceToDoor = 160,
/// <summary>
/// 料仓出库,,把物品放下,,轴2( 上下) 至P8( 进料口出料缓冲点)轴4( 压紧) 至P1( 待机点)
/// </summary>
SO_61_DevicePutWare = 161,
/// <summary>
/// 料仓出库,,叉子从出料口返回,,轴3( 叉子) 动作至P1( 待机点)
/// 批量轴需要下降对应的高度
/// </summary>
SO_62_DeviceOutFromDoor = 162,
/// <summary>
/// 料仓出库,,升降轴返回,, 轴2至P1( 待机点)
/// </summary>
SO_63_GoBack = 163,
#endregion #endregion
#region 料仓内部入库步骤 #region 料仓内部入库步骤
/// <summary> /// <summary>
/// 入库检测 /// 入库检测
/// </summary> /// </summary>
SI_00_TrayCheck=200, SI_00_TrayCheck =200,
/// <summary> /// <summary>
/// 入库,。定位气缸下降 /// 入库,。定位气缸下降
/// </summary> /// </summary>
...@@ -270,6 +298,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -270,6 +298,7 @@ namespace OnlineStore.DeviceLibrary
SI_05_DeviceToDoor = 205, SI_05_DeviceToDoor = 205,
/// <summary> /// <summary>
/// 入库。。把物品放入叉子上,轴2( 上下) 至P7( 进料口取料缓冲点),压紧物品(有压紧轴的才需要此步骤),轴4( 压紧) 至P2(压紧点) /// 入库。。把物品放入叉子上,轴2( 上下) 至P7( 进料口取料缓冲点),压紧物品(有压紧轴的才需要此步骤),轴4( 压紧) 至P2(压紧点)
/// 批量入库:此步骤表示吸盘放物品
/// </summary> /// </summary>
SI_06_DoorWarToDevice = 206, SI_06_DoorWarToDevice = 206,
...@@ -383,26 +412,30 @@ namespace OnlineStore.DeviceLibrary ...@@ -383,26 +412,30 @@ namespace OnlineStore.DeviceLibrary
#endregion #endregion
#region 自动上下料出料功能 //#region 自动上下料出料功能
/// <summary> ///// <summary>
/// 吸盘吸走料盘,同时上料轴开始上升 ///// 吸盘吸走料盘,同时上料轴开始上升
/// </summary> ///// </summary>
AUTO_O01_SuckingDisc_Work, //AUTO_O01_SuckingDisc_Work,
/// <summary> ///// <summary>
/// 等待1秒后吸盘下降 ///// 等待1秒后吸盘下降
/// </summary> ///// </summary>
AUTO_O02_WaitTimeDown, //AUTO_O02_WaitTimeDown,
/// <summary> ///// <summary>
/// 吸盘下降 ///// 吸盘下降
/// </summary> ///// </summary>
AUTO_O03_SuckingDisc_Down, //AUTO_O03_SuckingDisc_Down,
/// <summary> ///// <summary>
/// 放下料盘 ///// 放下料盘
/// </summary> ///// </summary>
AUTO_O04_PutTrayDown, //AUTO_O04_PutTrayDown,
///// <summary>
///// 吸盘上升
///// </summary>
//AUTO_O05_SuckingDisc_Up,
//#endregion
#endregion
} }
public enum StoreAlarmType public enum StoreAlarmType
......
...@@ -48,7 +48,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -48,7 +48,7 @@ namespace OnlineStore.DeviceLibrary
get { return moveType; } get { return moveType; }
} }
/// <summary> /// <summary>
///出入库参数 ///出入库参数,料仓内部使用
/// </summary> /// </summary>
public InOutStoreParam MoveParam { get; set; } public InOutStoreParam MoveParam { get; set; }
/// <summary> /// <summary>
...@@ -60,6 +60,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -60,6 +60,7 @@ namespace OnlineStore.DeviceLibrary
/// 是否再当前步骤等待中 /// 是否再当前步骤等待中
/// </summary> /// </summary>
public bool IsInWait { get; set; } public bool IsInWait { get; set; }
/// <summary> /// <summary>
/// 上一个执行步骤 /// 上一个执行步骤
/// </summary> /// </summary>
...@@ -79,7 +80,12 @@ namespace OnlineStore.DeviceLibrary ...@@ -79,7 +80,12 @@ namespace OnlineStore.DeviceLibrary
{ {
get { return moveStep; } get { return moveStep; }
} }
/// <summary>
/// 是否是批量出入库
/// </summary>
public bool IsBatchInOutStore=true ;
public List<WaitResultInfo> WaitList = new List<WaitResultInfo>();
public void NextMoveStep(StoreMoveStep step) public void NextMoveStep(StoreMoveStep step)
{ {
PreMoveStep = moveStep; PreMoveStep = moveStep;
...@@ -124,20 +130,19 @@ namespace OnlineStore.DeviceLibrary ...@@ -124,20 +130,19 @@ namespace OnlineStore.DeviceLibrary
WaitList = new List<WaitResultInfo>(); WaitList = new List<WaitResultInfo>();
CanWhileCount = 0; CanWhileCount = 0;
} }
public StoreMoveInfo clone() //public StoreMoveInfo clone()
{ //{
return (StoreMoveInfo)this.MemberwiseClone(); // return (StoreMoveInfo)this.MemberwiseClone();
} //}
public List<WaitResultInfo> WaitList = new List<WaitResultInfo>(); ///// <summary>
/// <summary> ///// 重置之后继续出入库时,退回上一个步骤执行
/// 重置之后继续出入库时,退回上一个步骤执行 ///// </summary>
/// </summary> //public void BackStep()
public void BackStep() //{
{ // moveStep = PreMoveStep;
moveStep = PreMoveStep; // IsInWait = false;
IsInWait = false; //}
}
} }
public class WaitResultInfo public class WaitResultInfo
...@@ -402,10 +407,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -402,10 +407,7 @@ namespace OnlineStore.DeviceLibrary
/// </summary> /// </summary>
public int HeightValue { get; set; } public int HeightValue { get; set; }
internal static WaitResultInfo WaitIO(object trayCheck_Door, IO_VALUE hIGH)
{
throw new NotImplementedException();
}
} }
public enum StoreMoveType public enum StoreMoveType
{ {
......
...@@ -59,11 +59,15 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -59,11 +59,15 @@ namespace OnlineStore.LoadCSVLibrary
public int CompressAxis_CPosition_P3 { get; set; } public int CompressAxis_CPosition_P3 { get; set; }
/// <summary> /// <summary>
/// 轴3(进出轴) 进料口取料点P2 /// 轴3(进出轴) 进料口取料点P2 ,料仓门口取料放料点
/// </summary> /// </summary>
[CSVAttribute("进出轴进料口取料点P2")] [CSVAttribute("进出轴仓门取料点P2")]
public int InOutAxis_DoorPosition_P2 { get; set; } public int InOutAxis_DoorPosition_P2 { get; set; }
/// <summary>
/// 轴3(进出轴) 进出轴吸盘取料点P2 ,吸盘下方取放料点,批量出入库时使用
/// </summary>
[CSVAttribute("进出轴吸盘取料点P2")]
public int InOutAxis_Batch_P2 { get; set; }
public static bool CheckPosition(AutoStorePosition position, AUTO_SA_Config Config) public static bool CheckPosition(AutoStorePosition position, AUTO_SA_Config Config)
{ {
try try
...@@ -92,6 +96,11 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -92,6 +96,11 @@ namespace OnlineStore.LoadCSVLibrary
LogUtil.error(position.PositionNum + " InOutAxis_Position_P3位置超出" + Config.InOut_Axis.Explain + "上下限(" + iMin + "-" + iMax + ")"); LogUtil.error(position.PositionNum + " InOutAxis_Position_P3位置超出" + Config.InOut_Axis.Explain + "上下限(" + iMin + "-" + iMax + ")");
return false; return false;
} }
if (iMin > position.InOutAxis_Batch_P2 || iMax < position.InOutAxis_Batch_P2)
{
LogUtil.error(position.PositionNum + " InOutAxis_Batch_P2位置超出" + Config.InOut_Axis.Explain + "上下限(" + iMin + "-" + iMax + ")");
return false;
}
} }
if (Config.UpDown_Axis.PositionIsHasLimit()) if (Config.UpDown_Axis.PositionIsHasLimit())
{ {
......
...@@ -22,7 +22,7 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -22,7 +22,7 @@ namespace OnlineStore.LoadCSVLibrary
/// 高 /// 高
/// </summary> /// </summary>
[CSVAttribute("高度")] [CSVAttribute("高度")]
public int BagHigh { get; set; } public int BagHeight { get; set; }
/// <summary> /// <summary>
/// 宽 /// 宽
/// </summary> /// </summary>
......
...@@ -138,11 +138,11 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -138,11 +138,11 @@ namespace OnlineStore.LoadCSVLibrary
/// <summary> /// <summary>
/// 门锁气缸打开端 Door_Open X13 DI-13 /// 门锁气缸打开端 Door_Open X13 DI-13
/// </summary> /// </summary>
public static string AutoDoor_Open = "Door_Open"; public static string BatchDoor_Open = "Door_Open";
/// <summary> /// <summary>
/// 门锁气缸关闭端 Door_Close X14 DI-14 /// 门锁气缸关闭端 Door_Close X14 DI-14
/// </summary> /// </summary>
public static string AutoDoor_Close = "Door_Close"; public static string BatchDoor_Close = "Door_Close";
/// <summary> /// <summary>
/// 料盘检测2(料叉机构) TrayCheck_Fixture X15 DI-15 /// 料盘检测2(料叉机构) TrayCheck_Fixture X15 DI-15
/// </summary> /// </summary>
...@@ -169,5 +169,7 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -169,5 +169,7 @@ namespace OnlineStore.LoadCSVLibrary
public static string SuckingDisc_Work = "SuckingDisc_Work"; public static string SuckingDisc_Work = "SuckingDisc_Work";
public static string TrayCheck_Door = "TrayCheck_Door"; public static string TrayCheck_Door = "TrayCheck_Door";
//public static string TrayCheck_Door = "TrayCheck_Door";
} }
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!