Commit 5df80339 LN

1

1 个父辈 fd03e0ff
......@@ -176,12 +176,12 @@ namespace OnlineStore.AssemblyLine
chbDebug.Checked = feedEquip.IsDebug;
if (feedEquip.UpdownUseAxis)
{
portName = feedEquip.Config.UpDown_Axis.DeviceName;
SlvAddr = feedEquip.Config.UpDown_Axis.GetAxisValue();
portName = feedEquip.Config.Batch_Axis.DeviceName;
SlvAddr = feedEquip.Config.Batch_Axis.GetAxisValue();
txtAxisDeviceName.Text = portName;
txtSlaveId.Text = SlvAddr.ToString();
comboBox1.Items.Clear();
comboBox1.Items.Add(feedEquip.Config.UpDown_Axis.Explain);
comboBox1.Items.Add(feedEquip.Config.Batch_Axis.Explain);
comboBox1.SelectedIndex = 0;
txtAxisValue.Text = SlvAddr.ToString();
......@@ -200,7 +200,7 @@ namespace OnlineStore.AssemblyLine
cmbSizeList.SelectedIndex = 0;
lblStoreStatus.Text = KTK_Store.GetRunStr(feedEquip.lineStatus, feedEquip.runStatus);
lblThisSta.Text = feedEquip.WarnMsg;
txtP1.Text = feedEquip.Config.UpDownAxisP1.ToString();
txtP1.Text = feedEquip.Config.BatchAxisP1.ToString();
IsLoad = true;
}
......@@ -584,7 +584,7 @@ namespace OnlineStore.AssemblyLine
int position = FormUtil.GetIntValue(txtSizePosition);
if (position != -1)
{
int speed = feedEquip.Config.UpdownAxis_DownSpeed;
int speed = feedEquip.Config.BatchAxis_DownSpeed;
LogUtil.info("点击【移栽位置】,料盘高度【" + cmbSizeList.Text + "】 位置【" + position + "】速度【" + speed + "】");
ACServerManager.AbsMove(portName, SlvAddr, position, speed);
}
......@@ -614,7 +614,7 @@ namespace OnlineStore.AssemblyLine
int position = FormUtil.GetIntValue(txtP1);
if (position != -1)
{
int speed =feedEquip.Config.UpdownAxis_P1Speed;
int speed =feedEquip.Config.BatchAxis_P1Speed;
LogUtil.info("点击【P1点测试】, 位置【" + position + "】速度【" + speed + "】");
ACServerManager.AbsMove(portName, SlvAddr, position, speed);
}
......@@ -623,7 +623,7 @@ namespace OnlineStore.AssemblyLine
private void btnSave_Click(object sender, EventArgs e)
{
int p1Position = FormUtil.GetIntValue(txtP1);
feedEquip.Config.UpDownAxisP1 = p1Position;
feedEquip.Config.BatchAxisP1 = p1Position;
int size = 0;
try { size = Convert.ToInt32(cmbSizeList.Text); } catch (Exception ex) { }
......@@ -640,7 +640,7 @@ namespace OnlineStore.AssemblyLine
int position = FormUtil.GetIntValue(txtBoxP);
if (position != -1)
{
int speed = feedEquip.Config.UpdownAxis_DownSpeed;
int speed = feedEquip.Config.BatchAxis_DownSpeed;
LogUtil.info("点击【料仓门口下降位置】,料盘高度【" + cmbSizeList.Text + "】 位置【" + position + "】速度【" + speed + "】");
ACServerManager.AbsMove(portName, SlvAddr, position, speed);
}
......
......@@ -3,7 +3,7 @@ PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,1,,,,,
,,,,,,,,,
PRO,0,移栽上下运动是否使用伺服,UpDownUseAxis,0,,,,,
PRO,0,移栽上下移动料盘高度对应的上升位置,UpDownPositions,12=1000;16=1300;20=2000;24=2000;36=3000;,,,,,
AXIS,0,批量上料轴,UpDown_Axis,2,COM1,0,,,
AXIS,0,批量上料轴,Batch_Axis,2,COM1,0,,,
PRO,0,批量上料轴待机点 P1,BatchAxisP1,2000,,,,,
PRO,0,批量上料轴目标速度,BatchAxis_TargetSpeed,150,,,,,
PRO,0,批量上料轴加速度,BatchAxis_AddSpeed,400,,,,,
......
......@@ -47,15 +47,15 @@ namespace OnlineStore.DeviceLibrary
UpdownUseAxis = config.UpDownUseAxis.Equals(1);
if (UpdownUseAxis)
{
Config.UpDown_Axis.TargetSpeed = Config.UpdownAxis_TargetSpeed;
Config.UpDown_Axis.AddSpeed = Config.UpdownAxis_AddSpeed;
Config.UpDown_Axis.DelSpeed = Config.UpdownAxis_DelSpeed;
Config.UpDown_Axis.HomeAddSpeed = Config.UpdownAxis_HomeAddSpeed;
Config.UpDown_Axis.HomeHighSpeed = Config.UpdownAxis_HomeHighSpeed;
Config.UpDown_Axis.HomeLowSpeed = Config.UpdownAxis_HomeLowSpeed;
Config.Batch_Axis.TargetSpeed = Config.BatchAxis_TargetSpeed;
Config.Batch_Axis.AddSpeed = Config.BatchAxis_AddSpeed;
Config.Batch_Axis.DelSpeed = Config.BatchAxis_DelSpeed;
Config.Batch_Axis.HomeAddSpeed = Config.BatchAxis_HomeAddSpeed;
Config.Batch_Axis.HomeHighSpeed = Config.BatchAxis_HomeHighSpeed;
Config.Batch_Axis.HomeLowSpeed = Config.BatchAxis_HomeLowSpeed;
portName = Config.UpDown_Axis.DeviceName;
slvAddr = config.UpDown_Axis.GetAxisValue();
portName = Config.Batch_Axis.DeviceName;
slvAddr = config.Batch_Axis.GetAxisValue();
}
}
......@@ -424,7 +424,7 @@ namespace OnlineStore.DeviceLibrary
if (UpdownUseAxis)
{
LogInfo("停止运动:停止伺服");
ACServerManager.SuddenStop(Config.UpDown_Axis);
ACServerManager.SuddenStop(Config.Batch_Axis);
}
runStatus = LineRunStatus.Runing;
MoveInfo.EndMove();
......@@ -522,7 +522,7 @@ namespace OnlineStore.DeviceLibrary
{
return true;
}
IOMove(IO_Type.UpDownAxis_ServoOn, IO_VALUE.HIGH);
IOMove(IO_Type.BatchAxis_ServoOn, IO_VALUE.HIGH);
Thread.Sleep(1000);
//打开所有轴
ACServerManager.OpenPort(portName);
......@@ -530,7 +530,7 @@ namespace OnlineStore.DeviceLibrary
//初始化
if (!IsIntSlvBlock)
{
ACServerManager.InitSlvAddr(portName, slvAddr, Config.UpDown_Axis.TargetSpeed, Config.UpDown_Axis.AddSpeed, Config.UpDown_Axis.DelSpeed);
ACServerManager.InitSlvAddr(portName, slvAddr, Config.Batch_Axis.TargetSpeed, Config.Batch_Axis.AddSpeed, Config.Batch_Axis.DelSpeed);
Thread.Sleep(100);
}
ACServerManager.AlarmClear(portName, slvAddr);
......@@ -547,9 +547,15 @@ namespace OnlineStore.DeviceLibrary
}
}
IsIntSlvBlock = true;
IOMove(IO_Type.UpDownAxis_BreakOn, IO_VALUE.HIGH);
IOMove(IO_Type.BatchAxis_BreakOn, IO_VALUE.HIGH);
return true;
}
private void IOMove(object batchAxis_ServoOn, IO_VALUE hIGH)
{
throw new NotImplementedException();
}
/// <summary>
/// 打开所有轴
/// </summary>
......@@ -560,24 +566,24 @@ namespace OnlineStore.DeviceLibrary
if (ACServerManager.ServerOnStatus(portName, slvAddr))
{
LogUtil.info( Name + "成功打开轴:" + Config.UpDown_Axis.Explain);
LogUtil.info( Name + "成功打开轴:" + Config.Batch_Axis.Explain);
}
else
{
//清理报警,再重新打开一次
LogUtil.info( Name + "第一次打开轴" + Config.UpDown_Axis.Explain + "失败,先清理一下报警,再重新打开一次");
LogUtil.info( Name + "第一次打开轴" + Config.Batch_Axis.Explain + "失败,先清理一下报警,再重新打开一次");
ACServerManager.AlarmClear(portName, slvAddr);
System.Threading.Thread.Sleep(1200);
ACServerManager.ServoOn(portName, slvAddr);
System.Threading.Thread.Sleep(100);
if (ACServerManager.ServerOnStatus(portName, slvAddr))
{
LogUtil.info( Name + "清理报警后重新打卡轴成功:" + Config.UpDown_Axis.Explain);
LogUtil.info( Name + "清理报警后重新打卡轴成功:" + Config.Batch_Axis.Explain);
}
else
{
ACServerManager.ServoOff(portName, slvAddr);
WarnMsg = Name + "打开轴" + Config.UpDown_Axis.Explain + "失败 ";
WarnMsg = Name + "打开轴" + Config.Batch_Axis.Explain + "失败 ";
LogUtil.info( Name + WarnMsg);
Alarm(LineAlarmType.AxisAlarm, 5.ToString(), WarnMsg, MoveInfo.MoveType);
return false;
......@@ -591,14 +597,14 @@ namespace OnlineStore.DeviceLibrary
public void CloseAxis()
{
LogUtil.info(Name + "关闭刹车,关闭伺服");
IOMove(IO_Type.UpDownAxis_BreakOn, IO_VALUE.LOW);
IOMove(IO_Type.BatchAxis_BreakOn, IO_VALUE.LOW);
ACServerManager.ServoOff(portName, slvAddr);
//关闭串口,等下次重新打开
ACServerManager.ColsePort(portName);
Thread.Sleep(100);
IOMove(IO_Type.UpDownAxis_ServoOn, IO_VALUE.LOW);
IOMove(IO_Type.BatchAxis_ServoOn, IO_VALUE.LOW);
}
......@@ -690,7 +696,7 @@ namespace OnlineStore.DeviceLibrary
{
if (UpdownUseAxis)
{
ACAxisMove(Config.UpDown_Axis, Config.UpDownAxisP1, Config.UpdownAxis_P1Speed);
ACAxisMove(Config.Batch_Axis, Config.BatchAxisP1, Config.BatchAxis_P1Speed);
}
else
{
......@@ -703,7 +709,7 @@ namespace OnlineStore.DeviceLibrary
if (UpdownUseAxis)
{
int position = Config.GetUpdownPosition(trayHeight);
ACAxisMove(Config.UpDown_Axis, position, Config.UpdownAxis_DownSpeed);
ACAxisMove(Config.Batch_Axis, position, Config.BatchAxis_DownSpeed);
}
else
{
......@@ -715,7 +721,7 @@ namespace OnlineStore.DeviceLibrary
if (UpdownUseAxis)
{
int position = Config.GetUpdownBoxPosition(trayHeight);
ACAxisMove(Config.UpDown_Axis, position,Config.UpdownAxis_DownSpeed);
ACAxisMove(Config.Batch_Axis, position,Config.BatchAxis_DownSpeed);
}
else
{
......@@ -727,7 +733,7 @@ namespace OnlineStore.DeviceLibrary
if (UpdownUseAxis)
{
MoveInfo.NextMoveStep(LineMoveStep.MH_UpDownHomeMove);
ACAxisHomeMove(Config.UpDown_Axis);
ACAxisHomeMove(Config.Batch_Axis);
}
else
{
......
......@@ -596,29 +596,44 @@ namespace OnlineStore.DeviceLibrary
// FeederProcess();
//如果驱动电机正转过程中,驱动电机INV1状态 驱动电机INV2状态 有信号,需要报警
//if (IOValue(IO_Type.DriveMotor_Run).Equals(IO_VALUE.HIGH))
//{
// if (IOValue(IO_Type.DriveMotor_INV1).Equals(IO_VALUE.LOW))
// {
// WarnMsg = "驱动电机INV1状态异常";
// LogUtil.error("驱动电机正转过程中,DriveMotor_INV1 信号LOW,需要报警", 300);
// //Alarm(LineAlarmType.SuddenStop, "1", WarnMsg, LineMoveType.None);
// }
// else if (IOValue(IO_Type.DriveMotor_INV2).Equals(IO_VALUE.LOW))
// {
// WarnMsg = "驱动电机INV2状态异常";
// LogUtil.error("驱动电机正转过程中,DriveMotor_INV2 信号LOW,需要报警", 301);
// // Alarm(LineAlarmType.SuddenStop, "1", WarnMsg, LineMoveType.None);
// }
//}
}
}
catch (Exception ex)
{
LogUtil.error(Name + "定时检测报警出错:" + ex.ToString());
}
Thread.Sleep(1);
}
public string GetINVMsg()
{
if (IOValue(IO_Type.DriveMotor_Run).Equals(IO_VALUE.HIGH))
{
if (IOValue(IO_Type.DriveMotor_INV1).Equals(IO_VALUE.LOW))
{
WarnMsg = "驱动电机INV1状态异常";
LogUtil.error("驱动电机正转过程中,DriveMotor_INV1信号LOW,需要报警", 300);
Alarm(LineAlarmType.SuddenStop, "1", WarnMsg, LineMoveType.None);
return " 驱动电机INV1状态异常";
}
else if (IOValue(IO_Type.DriveMotor_INV2).Equals(IO_VALUE.LOW))
{
WarnMsg = "驱动电机INV2状态异常";
LogUtil.error("驱动电机正转过程中,DriveMotor_INV2信号LOW,需要报警", 301);
Alarm(LineAlarmType.SuddenStop, "1", WarnMsg, LineMoveType.None);
}
return " 驱动电机INV2状态异常";
}
}
}
catch (Exception ex)
{
LogUtil.error(Name + "定时检测报警出错:" + ex.ToString());
}
Thread.Sleep(1);
return "";
}
/// <summary>
/// 定时处理,监听信号,监听IO
......@@ -882,15 +897,12 @@ namespace OnlineStore.DeviceLibrary
return;
}
lock (moveEquip.waitInListLock)
{
// InOutParam param = new InOutParam(trayCode,wareNum, posId, plateH, plateW );
StartInStoreMove(param);
//如果当前正在出入库中,需要记录下来,等待空闲时执行
LogUtil.info( moveEquip.Name + " 收到服务器入库命令: " + param.ToStr() + " ,写入排队列表中等待!");
moveEquip.waitInStoreList.Add(param);
}
LineServer.CheckInStorePos(storeId, param);
StartInStoreMove(param);
}
}
}
......
......@@ -98,7 +98,7 @@ namespace OnlineStore.DeviceLibrary
{
//有料盘,直接扫码通过 。如果移栽在出库过程中,不能扫码
IsWaitEmptyGo = false;
if (!IsScanCode&& CanScanCode())
if (!IsScanCode && CanScanCode())
{
if (!IsWaitToScan)
{
......@@ -120,7 +120,7 @@ namespace OnlineStore.DeviceLibrary
}
else
{
string msg = Name + " 托盘顺序错乱,上个托盘号【" + preTrayNum + "】当前有料托盘【" + trayNum + "】最大盘号【"+TrayManager.MaxTrayNum+"】";
string msg = Name + " 托盘顺序错乱,上个托盘号【" + preTrayNum + "】当前有料托盘【" + trayNum + "】最大盘号【" + TrayManager.MaxTrayNum + "】";
TrayManager.UpdateTrayNumError(0, msg);
LogUtil.error(msg);
}
......@@ -243,6 +243,8 @@ namespace OnlineStore.DeviceLibrary
private DateTime preRWTime = DateTime.Now;
private void CheckWait(LineMoveInfo checkWaitInfo)
{
try
{
List<WaitResultInfo> list = checkWaitInfo.WaitList;
if (list.Count <= 0)
{
......@@ -267,46 +269,42 @@ namespace OnlineStore.DeviceLibrary
NotOkMsg = wait.ToStr();
if (wait.WaitType == 2)
{
NotOkMsg = " (" + Config.GetDisplayName(wait.IoType) + "=" + wait.IoValue + ") ";
wait.IsEnd = IOValue(wait.IoType).Equals(wait.IoValue);
if (!wait.IsEnd)
{
TimeSpan rwSpan = DateTime.Now - preRWTime;
if (span.TotalMilliseconds > LineManager.Config.IOSingle_TimerOut)
{
ConfigIO io = Config.getWaitIO(wait.IoType);
WarnMsg = Name + " 等待信号(" + io.DisplayStr + "=" + wait.IoValue + ") 超时";
WarnMsg = Name + " 等待" + NotOkMsg + "超时";
Alarm(LineAlarmType.IoSingleTimeOut, io.ElectricalDefinition, WarnMsg, checkWaitInfo.MoveType);
LogUtil.error(checkWaitInfo.Name + ":" + wait.IoType + "等待信号(" + io.DisplayStr + "=" + wait.IoValue + ") 超时", 14);
LogUtil.error(checkWaitInfo.Name + ":" + wait.IoType + "等待" + NotOkMsg + "超时", 14);
isOk = false;
break;
}
//TimeSpan rwSpan = DateTime.Now - preRWTime;
////一分钟还未检测到
//if (rwSpan.TotalSeconds > 3)
//{
// preRWTime = DateTime.Now;
// //把IO重置位0
// string msg = checkWaitInfo.Name + " : " + wait.IoType + " = " + wait.IoValue + " 已等待" + Math.Abs(span.TotalMilliseconds) + ",重写DO信号:";
// foreach (WaitResultInfo ww in list)
// {
// if (ww != null && ww.WaitType.Equals(2))
// {
// if (Config.DOList.ContainsKey(ww.IoType))
// {
// IOMove(wait.IoType, ww.IoValue);
// msg += wait.ToStr() + ",";
// }
// }
// }
//}
else if (rwSpan.TotalSeconds > 3 && span.TotalSeconds > 3 && (checkWaitInfo.WriteIoList != null) && checkWaitInfo.WriteIoList.Count > 0)
{
List<WriteIOInfo> wLists = new List<WriteIOInfo>(checkWaitInfo.WriteIoList);
preRWTime = DateTime.Now;
string msg = checkWaitInfo.Name + " " + NotOkMsg + " 已等待" + Math.Abs(span.TotalSeconds) + "秒,重写DO:";
foreach (WriteIOInfo ww in wLists)
{
IOMove(ww.IoType, ww.IoValue);
msg += "[" + ww.IoType + "+" + ww.IoValue + "],";
}
LogUtil.error(msg);
}
}
}
else if (wait.WaitType == 3)
{
wait.IsEnd = (span.TotalMilliseconds >= wait.TimeMSeconds);
}else if (wait.WaitType == 8)
}
else if (wait.WaitType == 8)
{
string posId = checkWaitInfo.MoveParam.PosId;
int id = checkWaitInfo.MoveParam.GetStoreId();
......@@ -334,11 +332,16 @@ namespace OnlineStore.DeviceLibrary
}
else if (span.TotalSeconds > checkWaitInfo.TimeOutSeconds)
{
WarnMsg = checkWaitInfo.Name + " 【" + checkWaitInfo.MoveStep + "】 [" + NotOkMsg + "]已等待[" + Math.Round(span.TotalSeconds, 1) + "]秒";
WarnMsg = checkWaitInfo.Name + "[" + checkWaitInfo.MoveStep + "][" + NotOkMsg + "]已等待[" + Math.Round(span.TotalSeconds, 1) + "]秒";
LogUtil.error(WarnMsg, 100);
Alarm(LineAlarmType.IoSingleTimeOut, "", WarnMsg, checkWaitInfo.MoveType);
}
}
catch (Exception ex)
{
LogUtil.error(checkWaitInfo.Name + " [" + checkWaitInfo.MoveStep + "] CheckWait 出错:" + ex.ToString());
}
}
#endregion
......@@ -444,7 +447,7 @@ namespace OnlineStore.DeviceLibrary
//判断是否可以入库
string posId = MoveInfo.MoveParam.PosId;
int id = MoveInfo.MoveParam.GetStoreId();
bool result= LineServer.RightInPosId(id, posId);
bool result = LineServer.RightInPosId(id, posId);
MoveEquip moveEquip = null;
MoveEquipMap.TryGetValue(id, out moveEquip);
if (!result || moveEquip == null)
......@@ -543,6 +546,8 @@ namespace OnlineStore.DeviceLibrary
}
private void SideWayStop()
{
SideWay12IsWait = false;
SideWay34IsWait = false;
SW12_MoveInfo.EndMove();
SW34_MoveInfo.EndMove();
......@@ -565,6 +570,9 @@ namespace OnlineStore.DeviceLibrary
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay1_TopCylinder_Up, upValue));
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay2_TopCylinder_Down, downValue));
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay2_TopCylinder_Up, upValue));
moveInfo.WriteIoList.Add(WriteIOInfo.NInfo(IO_Type.SidesWay12_TopCylinder_Down, downValue));
moveInfo.WriteIoList.Add(WriteIOInfo.NInfo(IO_Type.SidesWay12_TopCylinder_Up, upValue));
}
}
public void SideWay34TopCylinderMove(IO_VALUE downValue, IO_VALUE upValue, LineMoveInfo moveInfo = null)
......@@ -578,10 +586,32 @@ namespace OnlineStore.DeviceLibrary
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay3_TopCylinder_Up, upValue));
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay4_TopCylinder_Down, downValue));
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay4_TopCylinder_Up, upValue));
moveInfo.WriteIoList.Add(WriteIOInfo.NInfo(IO_Type.SidesWay34_TopCylinder_Down, downValue));
moveInfo.WriteIoList.Add(WriteIOInfo.NInfo(IO_Type.SidesWay34_TopCylinder_Up, upValue));
}
}
/// <summary>
/// 判断横移轨道34是否有托盘
/// </summary>
/// <returns></returns>
public bool SideWay34HasTray()
{
//正在横移中,且托盘顶升气缸未下降
if (SW34_MoveInfo.MoveType.Equals(LineMoveType.None).Equals(false) && SW34_MoveInfo.MoveStep <= LineMoveStep.SW07_TopCylinderDown)
{
return true;
}
if (IOValue(IO_Type.SidesWay3_FixtureCheck).Equals(IO_VALUE.HIGH))
{
return true;
}
return false;
}
private DateTime SideWay12Ntime = DateTime.Now;
private bool SideWay12IsWait = false;
private DateTime SideWay34Ntime = DateTime.Now;
private bool SideWay34IsWait = false;
private void SideWayTimerProcess()
{
//流水线转动中,并且在忙碌或出入库处理中,需要处理移栽
......@@ -589,51 +619,88 @@ namespace OnlineStore.DeviceLibrary
{
if (SW12_MoveInfo.MoveType.Equals(LineMoveType.None) && IOValue(IO_Type.SidesWay2_FixtureCheck).Equals(IO_VALUE.LOW))
{
TimeSpan span12 = DateTime.Now - SideWay12Ntime;
//检测到阻挡夹具信号后,阻挡气缸下降,等待有夹具信号,阻挡气缸上升,
//顶升气缸上升到位,开始流水线转动,检测到出口信号后,停止转动,顶升气缸下降,阻挡2下降,盘通过
if (IOValue(IO_Type.SidesWay1_StopFixtureCheck).Equals(IO_VALUE.HIGH))
{
SWLog("横移轨道1检测到托盘,开始移动托盘");
if (SideWay12IsWait && span12.TotalSeconds > 1)
{
SWLog("横移轨道阻挡1检测到托盘,开始移动托盘,下降横移气缸12");
SW12_MoveInfo.NewMove(LineMoveType.InStore);
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW01_StopCylinderDown);
IOMove(IO_Type.SidesWay1_StopCylinderDown, IO_VALUE.HIGH);
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW00_Wait);
SideWay12TopCylinderMove(IO_VALUE.HIGH, IO_VALUE.LOW, SW12_MoveInfo);
}
else if (!SideWay12IsWait)
{
SideWay12IsWait = true;
SideWay12Ntime = DateTime.Now;
}
}
else if (IOValue(IO_Type.SidesWay1_FixtureCheck).Equals(IO_VALUE.HIGH))
{
SWLog("横移轨道1检测到托盘,开始移动托盘");
if (SideWay12IsWait && span12.TotalSeconds > 1)
{
SWLog("横移轨道1检测到托盘,阻挡1上升,等待横移1夹具检测信号");
SW12_MoveInfo.NewMove(LineMoveType.InStore);
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW01_StopCylinderDown);
IOMove(IO_Type.SidesWay1_StopCylinderDown, IO_VALUE.HIGH);
SideWay12TopCylinderMove(IO_VALUE.HIGH, IO_VALUE.LOW, SW12_MoveInfo);
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW02_WaitFixtureCheck);
IOMove(IO_Type.SidesWay1_StopCylinderDown, IO_VALUE.LOW);
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay1_FixtureCheck, IO_VALUE.HIGH));
}
else if (!SideWay12IsWait)
{
SideWay12IsWait = true;
SideWay12Ntime = DateTime.Now;
}
}
else
{
SideWay12IsWait = false;
}
}
else
{
SideWay12IsWait = false;
SideWay12BusyProcess();
}
if (SW34_MoveInfo.MoveType.Equals(LineMoveType.None) && IOValue(IO_Type.SidesWay4_FixtureCheck).Equals(IO_VALUE.LOW))
{
TimeSpan span34 = DateTime.Now - SideWay34Ntime;
//检测到阻挡夹具信号后,阻挡气缸下降,等待有夹具信号,阻挡气缸上升,
//顶升气缸上升到位,开始流水线转动,检测到出口信号后,停止转动,顶升气缸下降,阻挡4下降,盘通过
if (IOValue(IO_Type.SidesWay3_FixtureCheck).Equals(IO_VALUE.HIGH))
{
if (SideWay34IsWait && span34.TotalSeconds > 1)
{
SWLog("横移轨道3检测到托盘,开始移动托盘");
SW34_MoveInfo.NewMove(LineMoveType.InStore);
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW01_StopCylinderDown);
IOMove(IO_Type.SidesWay3_StopCylinderDown, IO_VALUE.HIGH);
SideWay34TopCylinderMove(IO_VALUE.HIGH, IO_VALUE.LOW, SW34_MoveInfo);
}
else if (!SideWay34IsWait)
{
SideWay34IsWait = true;
SideWay34Ntime = DateTime.Now;
}
}
else
{
SideWay34IsWait = false;
}
}
else
{
SideWay34IsWait = false;
SideWay34BusyProcess();
}
}
else
{
SideWay34IsWait = false;
SideWay12IsWait = false;
}
}
private void SideWay12BusyProcess()
......@@ -646,52 +713,72 @@ namespace OnlineStore.DeviceLibrary
{
return;
}
if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW01_StopCylinderDown))
if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW00_Wait))
{
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW01_StopCylinderDown);
SWLog("横移轨道12:阻挡1下降,最多下降1000 ");
IOMove(IO_Type.SidesWay1_StopCylinderDown, IO_VALUE.HIGH);
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW01_StopCylinderDown))
{
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW02_WaitFixtureCheck);
SWLog("横移轨道12:横移1阻挡上升,等待横移1夹具检测信号 ");
SWLog("横移轨道12:阻挡1上升,等待横移1夹具检测信号 ");
IOMove(IO_Type.SidesWay1_StopCylinderDown, IO_VALUE.LOW);
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay1_FixtureCheck, IO_VALUE.HIGH));
}
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW02_WaitFixtureCheck))
{
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW03_TopCylinderUp);
SWLog("横移轨道12:顶升气缸上升 ,横移1阻挡上升 ");
SWLog("横移轨道12:顶升气缸上升 ,横移1阻挡上升 ,至少等待1000 ");
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
IOMove(IO_Type.SidesWay1_StopCylinderDown, IO_VALUE.LOW);
SideWay12TopCylinderMove(IO_VALUE.LOW, IO_VALUE.HIGH, SW12_MoveInfo);
}
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW03_TopCylinderUp))
{
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW04_DriveMotorMove);
SWLog("横移轨道12:开始转动电机 ,等待1000,等待出口夹具检测信号 ");
SWLog("横移轨道12:开始转动电机 ,等待1000,等待SidesWay2_FixtureCheck=1, SidesWay1_FixtureCheck=0 ");
IOMove(IO_Type.SidesWay12_DriveMotor, IO_VALUE.HIGH);
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay2_FixtureCheck, IO_VALUE.HIGH));
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay1_FixtureCheck, IO_VALUE.LOW));
}
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW04_DriveMotorMove))
{
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW06_TopCylinderDown);
SWLog("横移轨道12:料盘已到达出口,顶升气缸下降 ");
IOMove(IO_Type.SidesWay12_DriveMotor, IO_VALUE.LOW);
SideWay12TopCylinderMove(IO_VALUE.HIGH, IO_VALUE.LOW, SW12_MoveInfo);
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW05_WaitOutFixtureCheck);
SWLog("横移轨道12:等待托盘到达出口 ");
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay2_FixtureCheck, IO_VALUE.HIGH));
}
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW05_WaitOutFixtureCheck))
{
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW06_WatOutFixture2);
SWLog("横移轨道12:再次验证托盘是否在出口处 ");
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay2_FixtureCheck, IO_VALUE.HIGH));
}
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW06_TopCylinderDown))
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW06_WatOutFixture2))
{
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW08_WaitTrayGo);
SWLog("横移轨道12:等待SidesWay2_FixtureCheck=0,最多等待5秒 ");
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW07_TopCylinderDown);
SWLog("横移轨道12:托盘已到达出口,顶升气缸下降 ");
SideWay12TopCylinderMove(IO_VALUE.HIGH, IO_VALUE.LOW, SW12_MoveInfo);
}
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW07_TopCylinderDown))
{
SW12_MoveInfo.NextMoveStep(LineMoveStep.SW09_WaitTrayGo);
SWLog("横移轨道12:等待SidesWay2_FixtureCheck=0,最多等待5秒,关闭横移电机 ");
IOMove(IO_Type.SidesWay12_DriveMotor, IO_VALUE.LOW);
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay2_FixtureCheck, IO_VALUE.LOW));
SW12_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(5000));
SW12_MoveInfo.OneWaitCanEndStep = true;
}
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW07_StopDrive))
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW08_StopDrive))
{
}
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW08_WaitTrayGo))
else if (SW12_MoveInfo.MoveStep.Equals(LineMoveStep.SW09_WaitTrayGo))
{
SW12_MoveInfo.EndMove();
SWLog("横移轨道12:横移结束 ");
......@@ -708,7 +795,14 @@ namespace OnlineStore.DeviceLibrary
{
return;
}
if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW01_StopCylinderDown))
if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW00_Wait))
{
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW01_StopCylinderDown);
SWLog("横移轨道34:阻挡3下降,最多下降1000 ");
IOMove(IO_Type.SidesWay3_StopCylinderDown, IO_VALUE.HIGH);
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
}
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW01_StopCylinderDown))
{
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW02_WaitFixtureCheck);
SWLog("横移轨道34:横移3阻挡上升,等待横移3夹具检测信号 ");
......@@ -725,35 +819,46 @@ namespace OnlineStore.DeviceLibrary
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW03_TopCylinderUp))
{
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW04_DriveMotorMove);
SWLog("横移轨道34:开始转动电机 ,等待1000 ,等待SidesWay4_FixtureCheck=1 ");
SWLog("横移轨道34:开始转动电机 ,等待1000 ,等待SidesWay4_FixtureCheck=1 ,SidesWay3_FixtureCheck=0 ");
IOMove(IO_Type.SidesWay34_DriveMotor, IO_VALUE.HIGH);
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay4_FixtureCheck, IO_VALUE.HIGH));
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay3_FixtureCheck, IO_VALUE.LOW));
}
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW04_DriveMotorMove))
{
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW06_TopCylinderDown);
SWLog("横移轨道34:料盘已到达出口,顶升气缸下降 ");
IOMove(IO_Type.SidesWay34_DriveMotor, IO_VALUE.LOW);
SideWay34TopCylinderMove(IO_VALUE.HIGH, IO_VALUE.LOW, SW34_MoveInfo);
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW05_WaitOutFixtureCheck);
SWLog("横移轨道34:等待托盘到达出口 ");
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay4_FixtureCheck, IO_VALUE.HIGH));
}
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW05_WaitOutFixtureCheck))
{
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW06_WatOutFixture2);
SWLog("横移轨道34:再次验证托盘是否到达出口 ");
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay4_FixtureCheck, IO_VALUE.HIGH));
}
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW06_WatOutFixture2))
{
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW07_TopCylinderDown);
SWLog("横移轨道34:托盘已到达出口,顶升气缸下降 ");
SideWay34TopCylinderMove(IO_VALUE.HIGH, IO_VALUE.LOW, SW34_MoveInfo);
}
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW06_TopCylinderDown))
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW07_TopCylinderDown))
{
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW08_WaitTrayGo);
SWLog("横移轨道34:等待SidesWay4_FixtureCheck=0 ,最多等待5秒 ");
SW34_MoveInfo.NextMoveStep(LineMoveStep.SW09_WaitTrayGo);
SWLog("横移轨道34:等待SidesWay4_FixtureCheck=0 ,最多等待5秒,关闭横移电机 ");
IOMove(IO_Type.SidesWay34_DriveMotor, IO_VALUE.LOW);
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SidesWay4_FixtureCheck, IO_VALUE.LOW));
SW34_MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(5000));
SW34_MoveInfo.OneWaitCanEndStep = true;
}
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW07_StopDrive))
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW08_StopDrive))
{
}
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW08_WaitTrayGo))
else if (SW34_MoveInfo.MoveStep.Equals(LineMoveStep.SW09_WaitTrayGo))
{
SW34_MoveInfo.EndMove();
SWLog("横移轨道34:横移结束 ");
......@@ -863,19 +968,22 @@ namespace OnlineStore.DeviceLibrary
return false;
}
MoveEquip move = MoveEquipMap[id];
if (!move.alarmType.Equals(LineAlarmType.None)||move.waitInStoreList.Count > 0 || move.IsDebug )
if (!move.alarmType.Equals(LineAlarmType.None) || move.waitInStoreList.Count > 0 || move.IsDebug || move.waitOutStoreList.Count > 0)
{
return false;
}
if (runStatus.Equals(LineRunStatus.Runing) || runStatus.Equals(LineRunStatus.Busy))
{
if ((move.MoveInfo.MoveType.Equals(LineMoveType.None) || move.MoveInfo.MoveType.Equals(LineMoveType.OutStore))
&& (move.runStatus.Equals(LineRunStatus.Runing) || move.runStatus.Equals(LineRunStatus.Busy)) )
if (move.MoveInfo.MoveType.Equals(LineMoveType.None) && move.runStatus.Equals(LineRunStatus.Runing))
{
return true;
}
else if (move.runStatus.Equals(LineRunStatus.Busy) && move.MoveInfo.MoveType.Equals(LineMoveType.OutStore) &&
move.MoveInfo.MoveStep >= (LineMoveStep.MO_56_BeforeAfterCylinderAfter))
{
return true;
}
}
// LogUtil.error("runStatus【" + runStatus + "】,move.MoveInfo.MoveType【" + move.MoveInfo.MoveType + "】,move.runStatus【" + move.runStatus + "】 ");
return false;
}
......@@ -890,7 +998,7 @@ namespace OnlineStore.DeviceLibrary
return false;
}
MoveEquip move = MoveEquipMap[id];
if (!move.alarmType.Equals(LineAlarmType.None) || move.IsDebug)
if (!move.alarmType.Equals(LineAlarmType.None) || move.IsDebug || move.waitOutStoreList.Count > 0)
{
return false;
}
......
......@@ -489,13 +489,13 @@ namespace OnlineStore.DeviceLibrary
}
case LineMoveStep.MH_OtherCylinder_Back:
{
LogInfo("停止运行完成,停止伺服!");
LogInfo("停止运行完成!");
CloseAxis();
if (UpdownUseAxis)
{
LogInfo("停止运动:停止伺服");
ACServerManager.SuddenStop(Config.UpDown_Axis);
CloseAxis();
}
runStatus = LineRunStatus.Runing;
MoveInfo.EndMove();
......@@ -667,7 +667,7 @@ namespace OnlineStore.DeviceLibrary
ACServerManager.ServoOff(portName, slvAddr);
//关闭串口,等下次重新打开
ACServerManager.ColsePort(portName);
// ACServerManager.ColsePort(portName);
Thread.Sleep(100);
IOMove(IO_Type.UpDownAxis_ServoOn, IO_VALUE.LOW);
......
......@@ -65,6 +65,7 @@ namespace OnlineStore.DeviceLibrary
}
else if (wait.WaitType.Equals(2))
{
NotOkMsg = " (" + Config.GetDisplayName(wait.IoType) + "=" + wait.IoValue + ") ";
wait.IsEnd = IOValue(wait.IoType).Equals(wait.IoValue);
if (!wait.IsEnd)
......@@ -75,9 +76,9 @@ namespace OnlineStore.DeviceLibrary
LogUtil.debug(moveInfo.Name + "未检测到:IsUse_Tray_Check= " + wait.IoValue + ",直接跳过检测继续下一步");
}
//夹紧按钮若果超过一秒钟还未收到,默认成功
else if (wait.IoType.Equals(IO_Type.ClampCylinder_Slack) && wait.IoValue.Equals(IO_VALUE.HIGH) && span.TotalMilliseconds > 3000)
else if (wait.IoType.Equals(IO_Type.ClampCylinder_Slack) && wait.IoValue.Equals(IO_VALUE.HIGH) && span.TotalMilliseconds > 4000)
{
LogInfo("未检测到:ClampCylinder_Slack=HIGH,超过2秒钟,默认下一步骤");
LogInfo("未检测到:ClampCylinder_Slack=HIGH,超过4秒钟,默认下一步骤");
wait.IsEnd = true;
}
else
......@@ -86,42 +87,30 @@ namespace OnlineStore.DeviceLibrary
//一分钟还未检测到
if (span.TotalMilliseconds > LineManager.Config.IOSingle_TimerOut)
{
//把IO重置位0
LogUtil.error(moveInfo.Name + " : " + wait.IoType + "=" + wait.IoValue + " 已等待" + Math.Abs(span.TotalMilliseconds) + ",将DO写0", 17);
ConfigIO io = Config.getWaitIO(wait.IoType);
WarnMsg = Name + "等待信号(" + io.DisplayStr + "=" + wait.IoValue + ") 超时";
WarnMsg = Name + "等待" + NotOkMsg + " 超时";
Alarm(LineAlarmType.IoSingleTimeOut, io.ElectricalDefinition, WarnMsg, MoveInfo.MoveType);
LogUtil.error( MoveInfo.Name + " : " + wait.IoType + "等待信号(" + io.DisplayStr + "=" + wait.IoValue + ") 超时", 13);
foreach (WaitResultInfo ww in list)
LogUtil.error( MoveInfo.Name + WarnMsg, 13);
}
else if (rwSpan.TotalSeconds > 3&&span.TotalSeconds>3)
{
if (ww != null && ww.WaitType.Equals(2))
preRWTime = DateTime.Now;
string msg = moveInfo.Name + " " + NotOkMsg + "已等待 " + Math.Abs(span.TotalSeconds) + "秒,重写DO:";
bool isLog = false;
foreach (WaitResultInfo ww in list)
{
if (Config.DOList.ContainsKey(ww.IoType))
if (ww != null && ww.WaitType.Equals(2) && Config.DOList.ContainsKey(ww.IoType))
{
IOMove(wait.IoType, IO_VALUE.LOW);
isLog = true;
IOMove(ww.IoType, ww.IoValue);
msg += ww.ToStr() + ",";
}
}
if (isLog)
{
LogUtil.error(msg);
}
}
//else if (rwSpan.TotalSeconds > 3)
//{
// preRWTime = DateTime.Now;
// //把IO重置位0
// string msg = moveInfo.Name + " : " + wait.IoType + " = " + wait.IoValue + " 已等待" + Math.Abs(span.TotalMilliseconds) + ",重写DO信号:";
// foreach (WaitResultInfo ww in list)
// {
// if (ww != null && ww.WaitType.Equals(2))
// {
// if (Config.DOList.ContainsKey(ww.IoType))
// {
// IOMove(wait.IoType, ww.IoValue);
// msg += wait.ToStr()+",";
// }
// }
// }
// LogUtil.error(msg);
//}
isOk = false;
break;
}
......@@ -141,6 +130,9 @@ namespace OnlineStore.DeviceLibrary
{
int storeId = moveInfo.MoveParam.GetStoreId();
wait.IsEnd = LineServer.BoxCanReviceTray(storeId);
}else if (wait.WaitType.Equals(10))
{
// wait.IsEnd = LineManager.Line.SideWay34HasTray().Equals(false);
}
if (wait.IsEnd && moveInfo.OneWaitCanEndStep)
{
......@@ -159,7 +151,7 @@ namespace OnlineStore.DeviceLibrary
}
else if (span.TotalSeconds > moveInfo.TimeOutSeconds)
{
WarnMsg = moveInfo.Name + "【" + moveInfo.MoveType + "】【" + moveInfo.MoveStep + "】等待[" + NotOkMsg
WarnMsg = moveInfo.Name + "[" + moveInfo.MoveType + "][" + moveInfo.MoveStep + "]等待[" + NotOkMsg
+ "]超时[" + Math.Round(span.TotalSeconds, 1) + "]秒";
LogUtil.error( WarnMsg, 18);
Alarm(LineAlarmType.IoSingleTimeOut, "", WarnMsg, moveInfo.MoveType);
......@@ -318,9 +310,6 @@ namespace OnlineStore.DeviceLibrary
this.MoveInfo.NextMoveStep(LineMoveStep.MO_60_UpDownCylinderUp);
UpdownUpMove();
// CylinderMove(MoveInfo, IO_Type.UpDownCylinder_Down, IO_Type.UpDownCylinder_Up);
//出库完成
// this.MoveEndEvent.Invoke(DeviceID, MoveInfo.MoveType, MoveInfo.MoveParam);
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.MO_60_UpDownCylinderUp))
{
......@@ -328,17 +317,12 @@ namespace OnlineStore.DeviceLibrary
TrayManager.DelNeedEmptyTrayNum();
OutStoreLog("出库 SecondStoreMove:移栽完成,放行托盘");
SecondMoveInfo.NewMove(LineMoveType.CheckFixture);
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_09_TopCylinder_Down);
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_06_TopCylinder_Down);
CylinderMove(SecondMoveInfo, IO_Type.TopCylinder_UP, IO_Type.TopCylinder_Down);
LogInfo("【" + posId + "】出库处理结束,!");
//if (GetBox().storeStatus.Equals(LineStatus.OutMoveExecute))
//{
// GetBox().storeStatus = LineStatus.StoreOnline;
//}
lineStatus = LineStatus.StoreOnline;
runStatus = LineRunStatus.Runing;
//storeStatus = StoreStatus.OutStoreBoxEnd;
MoveInfo.EndMove();
}
......@@ -424,7 +408,7 @@ namespace OnlineStore.DeviceLibrary
//阻挡气缸移动
InStoreLog("放托盘(放开阻挡):SecondStoreMove=MO_09_TopCylinder_Down 物品已移走,顶升气缸1下降)");
SecondMoveInfo.NewMove(LineMoveType.CheckFixture);
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_09_TopCylinder_Down);
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_06_TopCylinder_Down);
CylinderMove(SecondMoveInfo, IO_Type.TopCylinder_UP, IO_Type.TopCylinder_Down);
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.MI_10_WaitBox))
......@@ -453,18 +437,26 @@ namespace OnlineStore.DeviceLibrary
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.MI_13_UpdownCylinderUp))
{
InStoreLog("入库:(MI_14_BeforeAfterCylinderAfter,前后气缸1后退 )");
InStoreLog("入库:(MI_14_BeforeAfterCylinderAfter,前后气缸1后退,等待4000 )");
MoveInfo.NextMoveStep(LineMoveStep.MI_14_BeforeAfterCylinderAfter);
CylinderMove(MoveInfo, IO_Type.BeforeAfterCylinder_Before, IO_Type.BeforeAfterCylinder_After);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(4000));
//此时box就可以入库操作了 //触发事件,BOX入库
LineServer.StartInStore(DeviceID, MoveInfo.MoveParam);
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.MI_14_BeforeAfterCylinderAfter))
{
InStoreLog("入库:(MI_15_SendEnd , 送料流程完成)");
MoveInfo.NextMoveStep(LineMoveStep.MI_15_SendEnd);
//判断料仓是否在入库中,如果么有在入库中,需要重新发送入库消息
if (!LineServer.IsInStorePro(DeviceID))
{
InStoreLog("入库:(MI_15_SendEnd , 送料流程完成,料仓还未开始入库,再次发送starIn命令)");
LineServer.StartInStore(DeviceID, MoveInfo.MoveParam);
}
else
{
InStoreLog("入库:(MI_15_SendEnd , 送料流程完成,料仓已开始入库)");
}
}
else if (MoveInfo.MoveStep.Equals(LineMoveStep.MI_15_SendEnd))
{
......@@ -668,7 +660,7 @@ namespace OnlineStore.DeviceLibrary
}
else
{
string msg = Name + " 托盘顺序错乱,上个托盘号【" + preTrayNum + "】当前托盘号 【" + currMoveTrayNum + "】最大盘号【"+TrayManager.MaxTrayNum+"】";
string msg = Name + " 托盘顺序错乱,上个托盘号【" + preTrayNum + "】当前托盘号 【" + currMoveTrayNum + "】最大盘号【" + TrayManager.MaxTrayNum + "】";
TrayManager.UpdateTrayNumError(DeviceID, msg);
LogUtil.error(msg);
return;
......@@ -687,10 +679,14 @@ namespace OnlineStore.DeviceLibrary
{
TrayManager.UpdateTrayNumError(-1, "");
}
CheckLog("托盘放行 SecondStoreMove:(MO_10_StopCylinder2_Down ,阻挡气缸1-2下降) ");
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_10_StopCylinder2_Down);
IOMove(IO_Type.StopCylinder_Down2, IO_VALUE.HIGH);
SecondMoveInfo.EndStepWait();
CheckLog("托盘放行 SecondStoreMove:(MO_07_WaitCanGo ,移栽2,需要判断是否可以放盘通过,最多等待10000)");
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_07_WaitCanGo);
//if (DeviceID.Equals(2))
//{
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(10000));
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitSideWay());
// SecondMoveInfo.OneWaitCanEndStep = true;
//}
}
}
catch (Exception ex)
......@@ -747,7 +743,7 @@ namespace OnlineStore.DeviceLibrary
TrayManager.UpdateTrayNumError(-1, "");
}
CheckLog("托盘检测 SecondStoreMove:(MO_09_TopCylinder_Down ,托盘号【" + currMoveTrayNum + "】,直接放盘通过,顶升气缸下降)");
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_09_TopCylinder_Down);
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_06_TopCylinder_Down);
CylinderMove(SecondMoveInfo, IO_Type.TopCylinder_UP, IO_Type.TopCylinder_Down);
}
......@@ -761,7 +757,19 @@ namespace OnlineStore.DeviceLibrary
#endregion
#region 不需要出入库,直接放行
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MO_09_TopCylinder_Down))
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MO_06_TopCylinder_Down))
{
CheckLog("托盘放行 SecondStoreMove:(MO_07_WaitCanGo ,移栽2,需要判断是否可以放盘通过,最多等待10000)");
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_07_WaitCanGo);
//if (DeviceID.Equals(2))
//{
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(10000));
// SecondMoveInfo.WaitList.Add(WaitResultInfo.WaitSideWay());
// SecondMoveInfo.OneWaitCanEndStep = true;
//}
}
else if (SecondMoveInfo.MoveStep.Equals(LineMoveStep.MO_07_WaitCanGo))
{
CheckLog("托盘放行 SecondStoreMove:(MO_10_StopCylinder2_Down ,阻挡气缸1-2下降)");
SecondMoveInfo.NextMoveStep(LineMoveStep.MO_10_StopCylinder2_Down);
......
......@@ -90,6 +90,7 @@ namespace OnlineStore.DeviceLibrary
LastSetpTime = DateTime.Now;
IsInWait = true;
WaitList = new List<WaitResultInfo>();
WriteIoList = new List<WriteIOInfo>();
OneWaitCanEndStep = false;
CanWhileCount = 5;
}
......@@ -100,6 +101,7 @@ namespace OnlineStore.DeviceLibrary
{
IsInWait = false;
WaitList = new List<WaitResultInfo>();
WriteIoList = new List<WriteIOInfo>();
}
public void NewMove(LineMoveType type )
{
......@@ -107,6 +109,7 @@ namespace OnlineStore.DeviceLibrary
this.moveType = type;
LastSetpTime = DateTime.Now;
WaitList = new List<WaitResultInfo>();
WriteIoList = new List<WriteIOInfo>();
MoveNum++;
}
public void NewMove(LineMoveType type, InOutParam param)
......@@ -116,6 +119,7 @@ namespace OnlineStore.DeviceLibrary
this.MoveParam = param;
LastSetpTime = DateTime.Now;
WaitList = new List<WaitResultInfo>();
WriteIoList = new List<WriteIOInfo>();
}
public void EndMove()
{
......@@ -125,6 +129,7 @@ namespace OnlineStore.DeviceLibrary
LastSetpTime = DateTime.Now;
IsInWait = false;
WaitList = new List<WaitResultInfo>();
WriteIoList = new List<WriteIOInfo>();
CanWhileCount = 0;
}
public LineMoveInfo clone()
......@@ -133,6 +138,7 @@ namespace OnlineStore.DeviceLibrary
}
public List<WaitResultInfo> WaitList = new List<WaitResultInfo>();
public List<WriteIOInfo> WriteIoList = new List<WriteIOInfo>();
/// <summary>
/// 重置之后继续出入库时,退回上一个步骤执行
/// </summary>
......@@ -142,7 +148,18 @@ namespace OnlineStore.DeviceLibrary
IsInWait = false;
}
}
public class WriteIOInfo
{
public static WriteIOInfo NInfo(string type,IO_VALUE value)
{
WriteIOInfo i = new WriteIOInfo();
i.IoType = type;
i.IoValue = value;
return i;
}
public string IoType = "";
public IO_VALUE IoValue = IO_VALUE.HIGH;
}
public class WaitResultInfo
{
private WaitResultInfo()
......@@ -256,6 +273,12 @@ namespace OnlineStore.DeviceLibrary
wait.WaitType = 9;
return wait;
}
public static WaitResultInfo WaitSideWay()
{
WaitResultInfo wait = new WaitResultInfo();
wait.WaitType = 10;
return wait;
}
public string ToStr()
{
if (WaitType == 1)
......@@ -298,6 +321,9 @@ namespace OnlineStore.DeviceLibrary
else if (WaitType == 9)
{
return "BOX可以开始入库";
}else if (WaitType == 10)
{
return "等待横移34无托盘";
}
else
{
......
......@@ -238,7 +238,11 @@ namespace OnlineStore.DeviceLibrary
/// <summary>
/// 移载(流水线)装置出库处理 ,顶升气缸1下降
/// </summary>
MO_09_TopCylinder_Down = 3109,
MO_06_TopCylinder_Down = 3106,
/// <summary>
/// 如果是移栽2需要等待托盘是否可以走
/// </summary>
MO_07_WaitCanGo=3107,
/// <summary>
/// 移载(流水线)装置出库处理, 阻挡气缸1-2下降
/// </summary>
......@@ -374,6 +378,7 @@ namespace OnlineStore.DeviceLibrary
#region 横移轨道处理
SW00_Wait=5000,
/// <summary>
/// 阻挡气缸下降
/// </summary>
......@@ -398,18 +403,22 @@ namespace OnlineStore.DeviceLibrary
/// </summary>
SW05_WaitOutFixtureCheck=5005,
/// <summary>
/// 等待出口信号持续一段时间
/// </summary>
SW06_WatOutFixture2=5006,
/// <summary>
/// 停止横移轨道转动,横移轨道顶升气缸下降
/// </summary>
SW06_TopCylinderDown=5006,
SW07_TopCylinderDown=5007,
/// <summary>
/// 阻挡2下降,等待托盘流出
/// </summary>
SW07_StopDrive=5007,
SW08_StopDrive=5008,
/// <summary>
/// 等待托盘流出,上升阻挡气缸
/// </summary>
SW08_WaitTrayGo=5008,
SW09_WaitTrayGo=5009,
#endregion
......
......@@ -113,6 +113,27 @@ namespace OnlineStore.DeviceLibrary
}
return false;
}
public static bool IsInStorePro(int id)
{
BoxInfo box = GetBoxInfo(id);
TimeSpan span = DateTime.Now - box.LastMsgTime;
if (box != null && span.TotalSeconds < ClientKeepSecond)
{
LineStatus status = (LineStatus)box.SStatus;
LineRunStatus runs = (LineRunStatus)box.SRunStatus;
if (runs.Equals(LineRunStatus.Busy))
{
if (status.Equals(LineStatus.InStoreEnd) || status.Equals(LineStatus.InStoreExecute))
{
return true;
}
}
}
return false;
}
/// <summary>
/// 获取所有在线的CID
/// </summary>
......
......@@ -51,8 +51,8 @@ namespace OnlineStore.LoadCSVLibrary
/// <summary>
/// AXIS 0 批量上料轴 UpDown_Axis 2
/// </summary>
[ConfigProAttribute("UpDown_Axis", false)]
public ConfigMoveAxis UpDown_Axis { get; set; }
[ConfigProAttribute("Batch_Axis", false)]
public ConfigMoveAxis Batch_Axis { get; set; }
/// <summary>
/// PRO 0 批量上料轴待机点 P1 BatchAxisP1 403000
/// </summary>
......
......@@ -287,10 +287,9 @@ namespace OnlineStore.LoadCSVLibrary
/// DO 0 移载4升降轴伺服ON UpDownAxis_ServoOn 31 移载4升降轴伺服ON Y08 DO-08
/// </summary>
public static string UpDownAxis_ServoOn = "UpDownAxis_ServoOn";
///// <summary>
/////
///// </summary>
//public static string Right_Door_LimitSingle = "Right_Door_LimitSingle";
public static string BatchAxis_BreakOn = "BatchAxis_BreakOn";
public static string BatchAxis_ServoOn = "BatchAxis_ServoOn";
}
public enum IO_VALUE
......
......@@ -290,5 +290,14 @@ namespace OnlineStore.LoadCSVLibrary
}
return null;
}
public string GetDisplayName(string ioType)
{
ConfigIO io = getWaitIO(ioType);
if (io == null)
{
return ioType;
}
return io.DisplayStr;
}
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!