Commit e7a4127f 张东亮

存储机构-开启自动取图以及独立AB拍照点位置

1 个父辈 639d141a
...@@ -130,7 +130,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -130,7 +130,7 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.WaitList.Add(WaitResultInfo.WaitAxis(Config, targetPosition, targetSpeed)); MoveInfo.WaitList.Add(WaitResultInfo.WaitAxis(Config, targetPosition, targetSpeed));
Config.TargetPosition = targetPosition; Config.TargetPosition = targetPosition;
AxisManager.instance.AbsMove(Config.DeviceName, Config.GetAxisValue(), targetPosition, targetSpeed,Config.AddSpeed,Config.DelSpeed); AxisManager.instance.AbsMove(Config.DeviceName, Config.GetAxisValue(), targetPosition, targetSpeed,Config.AddSpeed,Config.DelSpeed);
//LogUtil.info($"{this.AxisName} AbsMove To [{targetPosition}] [speed={targetSpeed}]"); LogUtil.info($"{this.AxisName} AbsMove To [{targetPosition}] [speed={targetSpeed}]");
} }
} }
......
...@@ -372,9 +372,13 @@ namespace OnlineStore.DeviceLibrary ...@@ -372,9 +372,13 @@ namespace OnlineStore.DeviceLibrary
/// </summary> /// </summary>
SI_05_GetReel, SI_05_GetReel,
/// <summary> /// <summary>
/// 料仓入库:A/B面移栽X轴到P3(A/B面料屉库位取放料点) /// 料仓入库:A/B面移栽X轴到P1
/// </summary> /// </summary>
SI_06_InOutBackFromBuff, SI_06_InOutBackToP1FromBuff,
/// <summary>
/// 料仓入库:清除缓存
/// </summary>
SI_06_ClearBuffInfo,
/// <summary> /// <summary>
/// 料仓入库:A/B面移栽旋转轴到P3(A面料屉库位垂直取放料点) /// 料仓入库:A/B面移栽旋转轴到P3(A面料屉库位垂直取放料点)
/// </summary> /// </summary>
......
...@@ -109,36 +109,65 @@ namespace OnlineStore.DeviceLibrary ...@@ -109,36 +109,65 @@ namespace OnlineStore.DeviceLibrary
} }
private float GetDrawerX()
{
if (CheckASide())
{
return Config.FindPos_Drawer_A_X;
}
else
{
return Config.FindPos_Drawer_B_X;
}
}
private float GetDrawerY()
{
if (CheckASide())
{
return Config.FindPos_Drawer_A_Y;
}
else
{
return Config.FindPos_Drawer_B_Y;
}
}
private float GetError_X()
{
return Config.FindPos_Drawer_X_Error;
}
private float GetError_Y()
{
return Config.FindPos_Drawer_Y_Error;
}
private bool CheckMarkXPoint(EyemOcsFXYR eyemOcsFXYR) private bool CheckMarkXPoint(EyemOcsFXYR eyemOcsFXYR)
{ {
if (Math.Abs(Config.Drawer_X - eyemOcsFXYR.fX) < Config.Drawer_X_Error) if (Math.Abs(GetDrawerX() - eyemOcsFXYR.fX) < GetError_X())
{ {
LogInfo($"视觉对位 {MoveInfo.SLog}:Mark点X轴坐标{eyemOcsFXYR.fX},模板Mark点X轴坐标{Config.Drawer_X},X轴偏差{(Config.Drawer_X - eyemOcsFXYR.fX)},在误差范围内" + LogInfo($"视觉对位 {MoveInfo.SLog}:Mark点X轴坐标{eyemOcsFXYR.fX},模板Mark点X轴坐标{GetDrawerX()},X轴偏差{(GetDrawerX() - eyemOcsFXYR.fX)},在误差范围内" +
$"[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); $"[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
AutoFindPosSaveImage($"OK_Mark点X轴坐标{eyemOcsFXYR.fX},模板Mark点X轴坐标{Config.Drawer_X},X轴偏差{(Config.Drawer_X - eyemOcsFXYR.fX)}"); AutoFindPosSaveImage($"OK_Mark点X轴坐标{eyemOcsFXYR.fX},模板Mark点X轴坐标{GetDrawerX()},X轴偏差{(GetDrawerX() - eyemOcsFXYR.fX)}");
return true; return true;
} }
AutoFindPosSaveImage($"NG_Mark点X轴坐标{eyemOcsFXYR.fX},模板Mark点X轴坐标{Config.Drawer_X},X轴偏差{(Config.Drawer_X - eyemOcsFXYR.fX)}"); AutoFindPosSaveImage($"NG_Mark点X轴坐标{eyemOcsFXYR.fX},模板Mark点X轴坐标{GetDrawerX()},X轴偏差{(GetDrawerX() - eyemOcsFXYR.fX)}");
LogInfo($"视觉对位 {MoveInfo.SLog}:Mark点X轴坐标{eyemOcsFXYR.fX},模板Mark点X轴坐标{Config.Drawer_X},X轴偏差{(Config.Drawer_X - eyemOcsFXYR.fX)}," + LogInfo($"视觉对位 {MoveInfo.SLog}:Mark点X轴坐标{eyemOcsFXYR.fX},模板Mark点X轴坐标{GetDrawerX()},X轴偏差{(GetDrawerX() - eyemOcsFXYR.fX)}," +
$"行走机构相对移动{(Config.Drawer_X - eyemOcsFXYR.fX) * autoFindPos.XCoeffOfCoorToPulse}[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); $"行走机构相对移动{(GetDrawerX() - eyemOcsFXYR.fX) * autoFindPos.XCoeffOfCoorToPulse}[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
MoveAxis.AbsMove(MoveInfo, Convert.ToInt32(MoveAxis.GetAclPosition() + (Config.Drawer_X - eyemOcsFXYR.fX) * autoFindPos.XCoeffOfCoorToPulse), Config.MoveAxis_P1_Speed / 10); MoveAxis.AbsMove(MoveInfo, Convert.ToInt32(MoveAxis.GetAclPosition() + (GetDrawerX() - eyemOcsFXYR.fX) * autoFindPos.XCoeffOfCoorToPulse), Config.MoveAxis_P1_Speed / 10);
return false; return false;
} }
private bool CheckMarkYPoint(EyemOcsFXYR eyemOcsFXYR) private bool CheckMarkYPoint(EyemOcsFXYR eyemOcsFXYR)
{ {
if (Math.Abs(Config.Drawer_Y - eyemOcsFXYR.fY) < Config.Drawer_Y_Error) if (Math.Abs(GetDrawerY() - eyemOcsFXYR.fY) < GetError_Y())
{ {
LogInfo($"视觉对位 {MoveInfo.SLog}:Mark点Y轴坐标{eyemOcsFXYR.fY},模板Mark点Y轴坐标{Config.Drawer_Y},Y轴偏差{(Config.Drawer_Y - eyemOcsFXYR.fY)},在误差范围内" + LogInfo($"视觉对位 {MoveInfo.SLog}:Mark点Y轴坐标{eyemOcsFXYR.fY},模板Mark点Y轴坐标{GetDrawerY()},Y轴偏差{(GetDrawerY() - eyemOcsFXYR.fY)},在误差范围内" +
$"[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); $"[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
AutoFindPosSaveImage($"OK_Mark点Y轴坐标{eyemOcsFXYR.fY},模板Mark点Y轴坐标{Config.Drawer_Y},Y轴偏差{(Config.Drawer_Y - eyemOcsFXYR.fY)}"); AutoFindPosSaveImage($"OK_Mark点Y轴坐标{eyemOcsFXYR.fY},模板Mark点Y轴坐标{GetDrawerY()},Y轴偏差{(GetDrawerY() - eyemOcsFXYR.fY)}");
return true; return true;
} }
AutoFindPosSaveImage($"NG_Mark点Y轴坐标{eyemOcsFXYR.fY},模板Mark点Y轴坐标{Config.Drawer_Y},Y轴偏差{(Config.Drawer_Y - eyemOcsFXYR.fY)}"); AutoFindPosSaveImage($"NG_Mark点Y轴坐标{eyemOcsFXYR.fY},模板Mark点Y轴坐标{GetDrawerY()},Y轴偏差{(GetDrawerY() - eyemOcsFXYR.fY)}");
UpdownAxis.AbsMove(MoveInfo, Convert.ToInt32(UpdownAxis.GetAclPosition() + (Config.Drawer_Y - eyemOcsFXYR.fY) * autoFindPos.YCoeffOfCoorToPulse), Config.Updown_P1_Speed / 10); UpdownAxis.AbsMove(MoveInfo, Convert.ToInt32(UpdownAxis.GetAclPosition() + (GetDrawerY() - eyemOcsFXYR.fY) * autoFindPos.YCoeffOfCoorToPulse), Config.Updown_P1_Speed / 10);
PullAxis_Updown.AbsMove(MoveInfo, Convert.ToInt32(PullAxis_Updown.GetAclPosition() + (Config.Drawer_Y - eyemOcsFXYR.fY) * autoFindPos.YCoeffOfCoorToPulse), Config.Updown_P1_Speed / 10); PullAxis_Updown.AbsMove(MoveInfo, Convert.ToInt32(PullAxis_Updown.GetAclPosition() + (GetDrawerY() - eyemOcsFXYR.fY) * autoFindPos.YCoeffOfCoorToPulse), Config.Updown_P1_Speed / 10);
LogInfo($"视觉对位 {MoveInfo.SLog}:Mark点Y轴坐标{eyemOcsFXYR.fY},模板Mark点Y轴坐标{Config.Drawer_Y},Y轴偏差{(Config.Drawer_Y - eyemOcsFXYR.fY)}," + LogInfo($"视觉对位 {MoveInfo.SLog}:Mark点Y轴坐标{eyemOcsFXYR.fY},模板Mark点Y轴坐标{GetDrawerY()},Y轴偏差{(GetDrawerY() - eyemOcsFXYR.fY)}," +
$"移栽升降轴、料屉升降轴相对移动{(Config.Drawer_Y - eyemOcsFXYR.fY) * autoFindPos.YCoeffOfCoorToPulse}[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); $"移栽升降轴、料屉升降轴相对移动{(GetDrawerY() - eyemOcsFXYR.fY) * autoFindPos.YCoeffOfCoorToPulse}[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
return false; return false;
} }
private void AutoFindPosSaveImage(string imgInfo) private void AutoFindPosSaveImage(string imgInfo)
...@@ -243,7 +272,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -243,7 +272,7 @@ namespace OnlineStore.DeviceLibrary
//取图 //取图
//Bitmap bitmap = null; //Bitmap bitmap = null;
Bitmap bitmap = AcqImage(CamPosSide(MoveInfo.MoveParam.PosInfo.PosId)); Bitmap bitmap = AcqImage(CamPosSide(MoveInfo.MoveParam.PosInfo.PosId));
int res = AutoFindPos.GetMarkInfo(bitmap, $"{MoveInfo.MoveParam.PosInfo.PosId.Substring(0, 4)}",$"row{autoFindPos.CurRow}_col{autoFindPos.CurColumn}", out ocsFXYR); int res = AutoFindPos.GetMarkInfo(bitmap, $"{MoveInfo.MoveParam.PosInfo.PosId.Substring(0, 4)}", $"row{autoFindPos.CurRow}_col{autoFindPos.CurColumn}", out ocsFXYR);
LogInfo($"视觉对位 {MoveInfo.SLog}:取图[ret={res}],行={autoFindPos.CurRow},列={autoFindPos.CurColumn}[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); LogInfo($"视觉对位 {MoveInfo.SLog}:取图[ret={res}],行={autoFindPos.CurRow},列={autoFindPos.CurColumn}[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
if (res == 0) if (res == 0)
{ {
...@@ -452,10 +481,10 @@ namespace OnlineStore.DeviceLibrary ...@@ -452,10 +481,10 @@ namespace OnlineStore.DeviceLibrary
Columns = boxEquip_Config.Drawer_Columns; Columns = boxEquip_Config.Drawer_Columns;
FailedDrawers = new List<string>(); FailedDrawers = new List<string>();
} }
public void SetParam(int curRow, int curColumn, float xCooef, float yCooef) public void SetParam(int curRow, int curColumn,int startRow,int startCol, float xCooef, float yCooef)
{ {
CurRow = curRow; CurRow = startRow;
CurColumn = curColumn; CurColumn = startCol;
PreColumn = curColumn; PreColumn = curColumn;
PreRow = curRow; PreRow = curRow;
Row_Spacing = boxEquip_Config.Row_Spacing; Row_Spacing = boxEquip_Config.Row_Spacing;
...@@ -471,14 +500,14 @@ namespace OnlineStore.DeviceLibrary ...@@ -471,14 +500,14 @@ namespace OnlineStore.DeviceLibrary
/// <param name="bitmap">输入图片</param> /// <param name="bitmap">输入图片</param>
/// <param name="markCoor">mark点坐标信息</param> /// <param name="markCoor">mark点坐标信息</param>
/// <returns>0 正常 -4未定位到 </returns> /// <returns>0 正常 -4未定位到 </returns>
public static int GetMarkInfo(Bitmap bitmap,string subpath,string filename, out EyemOcsFXYR markCoor,out Bitmap resBitmap) public static int GetMarkInfo(Bitmap bitmap, string subpath, string filename, out EyemOcsFXYR markCoor, out Bitmap resBitmap)
{ {
int flag; int flag;
markCoor = new EyemOcsFXYR(); markCoor = new EyemOcsFXYR();
EyemImage tpDstImg; EyemImage tpDstImg;
EyemImage image = eyemCvtToEyemImage(bitmap); EyemImage image = eyemCvtToEyemImage(bitmap);
flag = eyemMarkerTracing(image, 120, ref markCoor, out tpDstImg); flag = eyemMarkerTracing(image, 120, ref markCoor, out tpDstImg);
string path = Application.StartupPath + ConfigAppSettings.GetValue(Setting_Init.ImagePath) + subpath+"\\"+DateTime.Now.ToString("yyyyMMdd"); string path = Application.StartupPath + ConfigAppSettings.GetValue(Setting_Init.ImagePath) + subpath + "\\" + DateTime.Now.ToString("yyyyMMdd");
string path1 = path + "\\" + "Src\\"; string path1 = path + "\\" + "Src\\";
string path2 = path + "\\" + "ResOut\\"; string path2 = path + "\\" + "ResOut\\";
string time = DateTime.Now.ToString("HHmmss"); string time = DateTime.Now.ToString("HHmmss");
...@@ -514,11 +543,11 @@ namespace OnlineStore.DeviceLibrary ...@@ -514,11 +543,11 @@ namespace OnlineStore.DeviceLibrary
Directory.CreateDirectory(path1); Directory.CreateDirectory(path1);
if (!System.IO.Directory.Exists(path2)) if (!System.IO.Directory.Exists(path2))
Directory.CreateDirectory(path2); Directory.CreateDirectory(path2);
bitmap.Save(path1 + filename+$"_{flag}_{time}" + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp); bitmap.Save(path1 + filename + $"_{flag}_{time}" + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
Bitmap resBitmap = eyemCvtToBitmap(tpDstImg); Bitmap resBitmap = eyemCvtToBitmap(tpDstImg);
if (resBitmap != null) if (resBitmap != null)
{ {
resBitmap.Save(string.Format("{0}{1}_{2}_{3}_{4}_{5}_{6}.bmp", path2, filename, flag, time,markCoor.fX, markCoor.fY, markCoor.fR)); resBitmap.Save(string.Format("{0}{1}_{2}_{3}_{4}_{5}_{6}.bmp", path2, filename, flag, time, markCoor.fX, markCoor.fY, markCoor.fR));
} }
Marshal.FreeHGlobal(image.vpImage); Marshal.FreeHGlobal(image.vpImage);
eyemImageFree(ref tpDstImg); eyemImageFree(ref tpDstImg);
......
...@@ -60,12 +60,26 @@ namespace OnlineStore.DeviceLibrary ...@@ -60,12 +60,26 @@ namespace OnlineStore.DeviceLibrary
while (IsOpen) while (IsOpen)
{ {
Bitmap bmp = AcqImage(name); Bitmap bmp = AcqImage(name);
// LogUtil.info($"{name} 取图");
if (bmp != null) if (bmp != null)
{ {
camera_event?.Invoke(new CameraArgs(name, bmp)); camera_event?.Invoke(new CameraArgs(name, bmp));
} }
Thread.Sleep(3000 / 10); if (MoveInfo != null)
{
if (MoveInfo.MoveType.Equals(MoveType.InStore) || MoveInfo.MoveType.Equals(MoveType.OutStore))
{
if (CheckASide() && name.Equals("box_A"))
{
SaveImage(name);
}
else
{
SaveImage("box_B");
}
}
}
Thread.Sleep(500);
} }
} }
void StopCamera() void StopCamera()
...@@ -76,16 +90,17 @@ namespace OnlineStore.DeviceLibrary ...@@ -76,16 +90,17 @@ namespace OnlineStore.DeviceLibrary
} }
public Bitmap AcqImage(string camName) public Bitmap AcqImage(string camName)
{ {
return camera.GetImage(camName); Bitmap bitmap = camera.GetImage(camName);
return bitmap;
} }
public void SaveImage(string camName, string subpath, string filename) public void SaveImage(string camName)
{ {
string path = Application.StartupPath + ConfigAppSettings.GetValue(Setting_Init.ImagePath) + subpath; string path = Application.StartupPath + ConfigAppSettings.GetValue(Setting_Init.ImagePath) + camName + "\\" + DateTime.Now.ToString("yyyyMMdd");
if (AutoSaveImage) if (AutoSaveImage)
{ {
if (!System.IO.Directory.Exists(path)) if (!System.IO.Directory.Exists(path))
Directory.CreateDirectory(path); Directory.CreateDirectory(path);
camera.SaveImage(camName, path, filename, System.Drawing.Imaging.ImageFormat.Bmp); camera.SaveImage(camName, path, DateTime.Now.ToString("hhmmssfff"), System.Drawing.Imaging.ImageFormat.Bmp);
} }
} }
} }
......
...@@ -15,7 +15,6 @@ namespace OnlineStore.DeviceLibrary ...@@ -15,7 +15,6 @@ namespace OnlineStore.DeviceLibrary
{ {
partial class BoxEquip partial class BoxEquip
{ {
/// <summary> /// <summary>
/// 料盘放到出料口成功,并将料盘信息写入该口 /// 料盘放到出料口成功,并将料盘信息写入该口
/// </summary> /// </summary>
...@@ -50,9 +49,10 @@ namespace OnlineStore.DeviceLibrary ...@@ -50,9 +49,10 @@ namespace OnlineStore.DeviceLibrary
break; break;
case StepEnum.SO_01_MoveAxis_Ready: case StepEnum.SO_01_MoveAxis_Ready:
MoveInfo.NextMoveStep(StepEnum.SO_02_ToPosition); MoveInfo.NextMoveStep(StepEnum.SO_02_ToPosition);
startTime = DateTime.Now;
LogInfo($"出库 {MoveInfo.SLog}:到库位,行走机构到存储库位取放点位P3,移栽升降轴到料屉上方过渡点P6/P12," + LogInfo($"出库 {MoveInfo.SLog}:到库位,行走机构到存储库位取放点位P3,移栽升降轴到料屉上方过渡点P6/P12," +
$"料斗拉取升降轴到料屉提取低点P4,移栽压紧轴到压紧前点P2,移栽X轴到库位取放点P3,移栽旋转轴到料屉库位垂直取放料点P3,料屉拉取进出轴到拍照点[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); $"料斗拉取升降轴到料屉提取低点P4,移栽压紧轴到压紧前点P2,移栽X轴到库位取放点P3,移栽旋转轴到料屉库位垂直取放料点P3[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
PullAxis_Inout_To_Cam(); PullAxis_Inout_To_Cam();//料屉拉取进出轴到拍照点
MoveAxisToP3(); MoveAxisToP3();
UpdownAxisTo_P6_P12(); UpdownAxisTo_P6_P12();
PullAxis_UpdownToLowP4(); PullAxis_UpdownToLowP4();
...@@ -108,33 +108,46 @@ namespace OnlineStore.DeviceLibrary ...@@ -108,33 +108,46 @@ namespace OnlineStore.DeviceLibrary
PullAxis_UpdownToHighP3(); PullAxis_UpdownToHighP3();
break; break;
case StepEnum.SO_10_LiftTray: case StepEnum.SO_10_LiftTray:
MoveInfo.NextMoveStep(StepEnum.SO_11_PushTray); //MoveInfo.NextMoveStep(StepEnum.SO_11_PushTray);
MoveInfo.NextMoveStep(StepEnum.SO_12_PutTrayMiddle);
LogInfo($"出库 {MoveInfo.SLog}:推到抽屉提取点,料斗拉取进出轴到料屉提取点P2/P4,移栽旋转轴到取放料水平点P2,移栽X到P1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); LogInfo($"出库 {MoveInfo.SLog}:推到抽屉提取点,料斗拉取进出轴到料屉提取点P2/P4,移栽旋转轴到取放料水平点P2,移栽X到P1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
PullAxis_Inout_To_P2_P4(); PullAxis_Inout_To_P2_P4();
MiddleAxis_To_P2(); MiddleAxis_To_P2();
XAxis_To_P1(); XAxis_To_P1();
break; break;
case StepEnum.SO_11_PushTray: //case StepEnum.SO_11_PushTray:
MoveInfo.NextMoveStep(StepEnum.SO_12_PutTrayMiddle); // MoveInfo.NextMoveStep(StepEnum.SO_12_PutTrayMiddle);
PullAxis_UpdownToMiddleP2(); // PullAxis_UpdownToMiddleP2();
// if (CheckASide())
// {
// LogInfo($"出库 {MoveInfo.SLog}:料斗拉取升降轴到料屉水平点P2,同时检测{trayAColumns[GetPosColumn()]}=1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
// if (!GetShieldState(sheidAColmns[GetPosColumn()]))
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(trayAColumns[GetPosColumn()], IO_VALUE.HIGH));
// }
// else
// {
// LogInfo($"出库 {MoveInfo.SLog}:料斗拉取升降轴到料屉水平点P2,同时检测{trayBColumns[GetPosColumn()]} = 1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
// if (!GetShieldState(sheidBColmns[GetPosColumn()]))
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(trayBColumns[GetPosColumn()], IO_VALUE.HIGH));
// }
// break;
case StepEnum.SO_12_PutTrayMiddle:
MoveInfo.NextMoveStep(StepEnum.SO_12_PutTrayDown);
//LogInfo($"出库 {MoveInfo.SLog}:放下料屉,料斗拉取升降轴到料屉提取低点P4[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
PullAxis_UpdownToLowP4();
if (CheckASide()) if (CheckASide())
{ {
LogInfo($"出库 {MoveInfo.SLog}:料斗拉取升降轴到料屉水平点P2,同时检测{trayAColumns[GetPosColumn()]}=1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); LogInfo($"出库 {MoveInfo.SLog}:放下料屉,料斗拉取升降轴到料屉提取低点P4,同时检测{trayAColumns[GetPosColumn()]}=1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
if (!GetShieldState(sheidAColmns[GetPosColumn()])) if (!GetShieldState(sheidAColmns[GetPosColumn()]))
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(trayAColumns[GetPosColumn()], IO_VALUE.HIGH)); MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(trayAColumns[GetPosColumn()], IO_VALUE.HIGH));
} }
else else
{ {
LogInfo($"出库 {MoveInfo.SLog}:料斗拉取升降轴到料屉水平点P2,同时检测{trayBColumns[GetPosColumn()]} = 1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); LogInfo($"出库 {MoveInfo.SLog}:放下料屉,料斗拉取升降轴到料屉提取低点P4,同时检测{trayBColumns[GetPosColumn()]} = 1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
if (!GetShieldState(sheidBColmns[GetPosColumn()])) if (!GetShieldState(sheidBColmns[GetPosColumn()]))
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(trayBColumns[GetPosColumn()], IO_VALUE.HIGH)); MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(trayBColumns[GetPosColumn()], IO_VALUE.HIGH));
} }
break; break;
case StepEnum.SO_12_PutTrayMiddle:
MoveInfo.NextMoveStep(StepEnum.SO_12_PutTrayDown);
LogInfo($"出库 {MoveInfo.SLog}:放下料屉,料斗拉取升降轴到料屉提取低点P4[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
PullAxis_UpdownToLowP4();
break;
case StepEnum.SO_12_PutTrayDown: case StepEnum.SO_12_PutTrayDown:
MoveInfo.NextMoveStep(StepEnum.SO_13_InoutBack); MoveInfo.NextMoveStep(StepEnum.SO_13_InoutBack);
LogInfo($"出库 {MoveInfo.SLog}:料斗拉取进出轴到拍照点[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); LogInfo($"出库 {MoveInfo.SLog}:料斗拉取进出轴到拍照点[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
...@@ -156,6 +169,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -156,6 +169,7 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.MoveParam.PosInfoBack = MoveInfo.MoveParam.PosInfo.ToCopy(); MoveInfo.MoveParam.PosInfoBack = MoveInfo.MoveParam.PosInfo.ToCopy();
MoveInfo.MoveParam.PosInfo = inOutParam.PosInfo.ToCopy(); MoveInfo.MoveParam.PosInfo = inOutParam.PosInfo.ToCopy();
MoveInfo.MoveParam.MoveP = new LineMoveP(Config, inOutParam.PosInfo.PosId); MoveInfo.MoveParam.MoveP = new LineMoveP(Config, inOutParam.PosInfo.PosId);
PullAxis_Inout_To_Cam();
return; return;
} }
} }
...@@ -172,6 +186,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -172,6 +186,7 @@ namespace OnlineStore.DeviceLibrary
MoveInfo.MoveParam.PosInfoBack = MoveInfo.MoveParam.PosInfo.ToCopy(); MoveInfo.MoveParam.PosInfoBack = MoveInfo.MoveParam.PosInfo.ToCopy();
MoveInfo.MoveParam.PosInfo = inOutParam.PosInfo.ToCopy(); MoveInfo.MoveParam.PosInfo = inOutParam.PosInfo.ToCopy();
MoveInfo.MoveParam.MoveP = new LineMoveP(Config, inOutParam.PosInfo.PosId); MoveInfo.MoveParam.MoveP = new LineMoveP(Config, inOutParam.PosInfo.PosId);
PullAxis_Inout_To_Cam();
return; return;
} }
} }
...@@ -179,19 +194,19 @@ namespace OnlineStore.DeviceLibrary ...@@ -179,19 +194,19 @@ namespace OnlineStore.DeviceLibrary
} }
//直接出库,执行该步骤的情况:1.另一个料叉有料;2.另一面有出库任务但出料口有料;3.另一面没有出库任务; //直接出库,执行该步骤的情况:1.另一个料叉有料;2.另一面有出库任务但出料口有料;3.另一面没有出库任务;
MoveInfo.NextMoveStep(StepEnum.SO_14_GetReels_Ready); MoveInfo.NextMoveStep(StepEnum.SO_14_GetReels_Ready);
MoveAxisToP1();
PullAxis_UpdownToP1(); PullAxis_UpdownToP1();
UpdownAxisTo_P4_P10(); UpdownAxisTo_P4_P10();
if (MoveInfo.MoveParam.PosInfoBack == null) if (MoveInfo.MoveParam.PosInfoBack == null)
LogInfo($"出库 {MoveInfo.SLog}:[{MoveInfo.MoveParam.PosInfo.barcode}]取料完成,准备送往出料口。料屉升降轴到P1点,移栽升降轴到下暂存区放料高点P4/P10"); LogInfo($"出库 {MoveInfo.SLog}:[{MoveInfo.MoveParam.PosInfo.barcode}]取料完成,准备送往出料口。行走机构到待机点P1,料屉升降轴到P1点,移栽升降轴到下暂存区放料高点P4/P10");
else else
LogInfo($"出库 {MoveInfo.SLog}:[{MoveInfo.MoveParam.PosInfo.ToStr()}][{MoveInfo.MoveParam.PosInfoBack.ToStr()}]取料完成,准备送往出料口。料屉升降轴到P1点,移栽升降轴到下暂存区放料高点P4/P10"); LogInfo($"出库 {MoveInfo.SLog}:[{MoveInfo.MoveParam.PosInfo.ToStr()}][{MoveInfo.MoveParam.PosInfoBack.ToStr()}]取料完成,准备送往出料口。行走机构到待机点P1,料屉升降轴到P1点,移栽升降轴到下暂存区放料高点P4/P10");
break; break;
case StepEnum.SO_14_GetReels_Ready: case StepEnum.SO_14_GetReels_Ready:
//已出一边的料,切换到另一边 //已出一边的料,切换到另一边
MoveInfo.NextMoveStep(StepEnum.SO_15_ToBufferArea); MoveInfo.NextMoveStep(StepEnum.SO_15_ToBufferArea);
LogInfo($"出库 {MoveInfo.SLog}:到暂存区出料口," + //LogInfo($"出库 {MoveInfo.SLog}:到暂存区出料口," +
$"行走机构到进出料机构取放点P2[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); // $"行走机构到进出料机构取放点P2[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
MoveAxisToP2();
break; break;
case StepEnum.SO_15_ToBufferArea: case StepEnum.SO_15_ToBufferArea:
if (!OutDoorCheck(MoveInfo.MoveParam)) if (!OutDoorCheck(MoveInfo.MoveParam))
...@@ -208,8 +223,9 @@ namespace OnlineStore.DeviceLibrary ...@@ -208,8 +223,9 @@ namespace OnlineStore.DeviceLibrary
if(!CheckInputMiddleAxisInBuff()) if(!CheckInputMiddleAxisInBuff())
{ {
MoveInfo.NextMoveStep(StepEnum.SO_17_InOutToBuff); MoveInfo.NextMoveStep(StepEnum.SO_17_InOutToBuff);
LogInfo($"出库 {MoveInfo.SLog}:移栽X轴到进出料暂存区取放点P2[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); LogInfo($"出库 {MoveInfo.SLog}:移栽X轴到进出料暂存区取放点P2,行走机构到进出料机构取放点P2[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
XAxis_To_P2(); XAxis_To_P2();
MoveAxisToP2();
} }
else if (MoveInfo.IsTimeOut()) else if (MoveInfo.IsTimeOut())
{ {
...@@ -225,7 +241,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -225,7 +241,7 @@ namespace OnlineStore.DeviceLibrary
break; break;
case StepEnum.SO_18_PutReel: case StepEnum.SO_18_PutReel:
MoveInfo.NextMoveStep(StepEnum.SO_19_InOutBackFromBuff); MoveInfo.NextMoveStep(StepEnum.SO_19_InOutBackFromBuff);
LogInfo($"出库 {MoveInfo.SLog}:[{MoveInfo.MoveParam.PosInfo.ToStr()}]出库完成,移栽X轴到待机点P1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]"); LogInfo($"出库 {MoveInfo.SLog}:[{MoveInfo.MoveParam.PosInfo.ToStr()}]出库完成[耗时:{(DateTime.Now-startTime).TotalSeconds.ToString("f2")}秒],移栽X轴到待机点P1[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
XAxis_To_P1(); XAxis_To_P1();
break; break;
case StepEnum.SO_19_InOutBackFromBuff: case StepEnum.SO_19_InOutBackFromBuff:
......
...@@ -619,10 +619,27 @@ namespace OnlineStore.DeviceLibrary ...@@ -619,10 +619,27 @@ namespace OnlineStore.DeviceLibrary
{ {
PullAxis_Updown.AbsMove(MoveInfo, Config.PullAxis_Updown_P1, Config.PullAxis_Updown_P1_Speed); PullAxis_Updown.AbsMove(MoveInfo, Config.PullAxis_Updown_P1, Config.PullAxis_Updown_P1_Speed);
} }
if (!PullAxis_Inout.IsInPosition(Config.PullAxis_Inout_P1)) if(PullAxis_Inout.IsInPosition(Config.PullAxis_Inout_CamA) || PullAxis_Inout.IsInPosition(Config.PullAxis_Inout_CamB)
|| PullAxis_Inout.IsInPosition(Config.PullAxis_Inout_P1))
{ {
PullAxis_Inout.AbsMove(MoveInfo, Config.PullAxis_Inout_P1, Config.PullAxis_Inout_P1_Speed);
}
else
{
if (CheckASide())
{
PullAxis_Inout.AbsMove(MoveInfo, Config.PullAxis_Inout_CamA, Config.PullAxis_Inout_P1_Speed);
}
else
{
PullAxis_Inout.AbsMove(MoveInfo, Config.PullAxis_Inout_CamB, Config.PullAxis_Inout_P1_Speed);
}
//else
//{
// PullAxis_Inout.AbsMove(MoveInfo, Config.PullAxis_Inout_P1, Config.PullAxis_Inout_P1_Speed);
//}
} }
if (MoveInfo.MoveStep.Equals(StepEnum.SI_00_StartInstore)) if (MoveInfo.MoveStep.Equals(StepEnum.SI_00_StartInstore))
{ {
MoveInfo.NextMoveStep(StepEnum.SI_01_PullAxis_Ready); MoveInfo.NextMoveStep(StepEnum.SI_01_PullAxis_Ready);
...@@ -631,7 +648,7 @@ namespace OnlineStore.DeviceLibrary ...@@ -631,7 +648,7 @@ namespace OnlineStore.DeviceLibrary
{ {
MoveInfo.NextMoveStep(StepEnum.SO_01_PullAxis_Ready); MoveInfo.NextMoveStep(StepEnum.SO_01_PullAxis_Ready);
} }
LogInfo($"{InOutType} {MoveInfo.SLog}:料屉拉取升降轴、料屉拉取进出轴到待机点P1"); LogInfo($"{InOutType} {MoveInfo.SLog}:料屉拉取升降轴到待机点P1、料屉拉取进出轴到拍照点");
} }
/// <summary> /// <summary>
/// 判断行走机构是否在安全位置 /// 判断行走机构是否在安全位置
...@@ -689,19 +706,50 @@ namespace OnlineStore.DeviceLibrary ...@@ -689,19 +706,50 @@ namespace OnlineStore.DeviceLibrary
return false; return false;
} }
if (Math.Abs(Config.Drawer_X - ocsFXYR.fX) < Config.Drawer_X_Error && Math.Abs(Config.Drawer_Y - ocsFXYR.fY) < Config.Drawer_Y_Error) if (Math.Abs(GetValidateDrawerX() - ocsFXYR.fX) < GetValidateDrawerXError() && Math.Abs(GetValidateDrawerY() - ocsFXYR.fY) < GetValidateDrawerYError())
{ {
CamDetectError = false; CamDetectError = false;
return true; return true;
} }
else else
{ {
SetWarnMsg($"相机检查库位异常 {MoveInfo.SLog}:Mark点Y轴坐标{ocsFXYR.fY},模板Mark点Y轴坐标{Config.Drawer_Y},Y轴偏差{(Config.Drawer_Y - ocsFXYR.fY)};" + SetWarnMsg($"相机检查库位异常 {MoveInfo.SLog}:Mark点Y轴坐标{ocsFXYR.fY},模板Mark点Y轴坐标{GetValidateDrawerY()},Y轴偏差{(GetValidateDrawerY() - ocsFXYR.fY)};" +
$"Mark点X轴坐标{ ocsFXYR.fX},模板Mark点X轴坐标{ Config.Drawer_X},X轴偏差{ (Config.Drawer_X - ocsFXYR.fX)},"); $"Mark点X轴坐标{ ocsFXYR.fX},模板Mark点X轴坐标{GetValidateDrawerX()},X轴偏差{ (GetValidateDrawerX() - ocsFXYR.fX)},");
} }
CamDetectError = true; CamDetectError = true;
return false; return false;
} }
private float GetValidateDrawerX()
{
if(CheckASide())
{
return Config.Validate_Drawer_A_X;
}
else
{
return Config.Validate_Drawer_B_X;
}
}
private float GetValidateDrawerY()
{
if (CheckASide())
{
return Config.Validate_Drawer_A_Y;
}
else
{
return Config.Validate_Drawer_B_Y;
}
}
private float GetValidateDrawerXError()
{
return Config.Validate_Drawer_X_Error;
}
private float GetValidateDrawerYError()
{
return Config.Validate_Drawer_Y_Error;
}
#endregion #endregion
#region 入库 #region 入库
private DateTime startInStoreTime = DateTime.Now; private DateTime startInStoreTime = DateTime.Now;
......
...@@ -72,25 +72,94 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -72,25 +72,94 @@ namespace OnlineStore.LoadCSVLibrary
public ConfigMoveAxis ComAxis_B { get; set; } public ConfigMoveAxis ComAxis_B { get; set; }
#endregion #endregion
/// <summary> /// <summary>
/// 抽屉Mark_X坐标 /// A面抽屉对位Mark_X坐标
/// </summary> /// </summary>
[ConfigProAttribute("Drawer_X")] [ConfigProAttribute("FindPos_Drawer_A_X")]
public float Drawer_X { get; set; } public float FindPos_Drawer_A_X { get; set; }
/// <summary> /// <summary>
/// 抽屉Mark_Y坐标 /// A面抽屉对位Mark_Y坐标
/// </summary> /// </summary>
[ConfigProAttribute("Drawer_Y")] [ConfigProAttribute("FindPos_Drawer_A_Y")]
public float Drawer_Y { get; set; } public float FindPos_Drawer_A_Y { get; set; }
/// <summary>
/// A面抽屉对位Mark_X坐标
/// </summary>
[ConfigProAttribute("Validate_Drawer_A_X")]
public float Validate_Drawer_A_X { get; set; }
/// <summary>
/// A面抽屉对位Mark_Y坐标
/// </summary>
[ConfigProAttribute("Validate_Drawer_A_Y")]
public float Validate_Drawer_A_Y { get; set; }
/// <summary>
/// A面X方向像素到脉冲的系数
/// </summary>
[ConfigProAttribute("PixelToPulse_A_X")]
public float PixelToPulse_A_X { get; set; }
/// <summary>
/// A面Y方向像素到脉冲的系数
/// </summary>
[ConfigProAttribute("PixelToPulse_A_Y")]
public float PixelToPulse_A_Y { get; set; }
/// <summary>
/// B面抽屉对位Mark_X坐标
/// </summary>
[ConfigProAttribute("FindPos_Drawer_B_X")]
public float FindPos_Drawer_B_X { get; set; }
/// <summary>
/// B面抽屉对位Mark_Y坐标
/// </summary>
[ConfigProAttribute("FindPos_Drawer_B_Y")]
public float FindPos_Drawer_B_Y { get; set; }
/// <summary>
/// B面抽屉对位Mark_X坐标
/// </summary>
[ConfigProAttribute("Validate_Drawer_B_X")]
public float Validate_Drawer_B_X { get; set; }
/// <summary>
/// B面抽屉对位Mark_Y坐标
/// </summary>
[ConfigProAttribute("Validate_Drawer_B_Y")]
public float Validate_Drawer_B_Y { get; set; }
/// <summary>
/// B面X方向像素到脉冲的系数
/// </summary>
[ConfigProAttribute("PixelToPulse_B_X")]
public float PixelToPulse_B_X { get; set; }
/// <summary>
/// B面Y方向像素到脉冲的系数
/// </summary>
[ConfigProAttribute("PixelToPulse_B_Y")]
public float PixelToPulse_B_Y { get; set; }
/// <summary> /// <summary>
/// 抽屉Mark_X方向误差范围 /// 抽屉Mark_X方向误差范围
/// </summary> /// </summary>
[ConfigProAttribute("Drawer_X_Error")] [ConfigProAttribute("FindPos_Drawer_X_Error")]
public float Drawer_X_Error { get; set; } public float FindPos_Drawer_X_Error { get; set; }
/// <summary> /// <summary>
/// 抽屉Mark_Y方向误差范围 /// 抽屉Mark_Y方向误差范围
/// </summary> /// </summary>
[ConfigProAttribute("Drawer_Y_Error")] [ConfigProAttribute("FindPos_Drawer_Y_Error")]
public float Drawer_Y_Error { get; set; } public float FindPos_Drawer_Y_Error { get; set; }
/// <summary>
/// 验证抽屉Mark_X方向误差范围
/// </summary>
[ConfigProAttribute("Validate_Drawer_X_Error")]
public float Validate_Drawer_X_Error { get; set; }
/// <summary>
/// 验证抽屉Mark_Y方向误差范围
/// </summary>
[ConfigProAttribute("Validate_Drawer_Y_Error")]
public float Validate_Drawer_Y_Error { get; set; }
/// <summary> /// <summary>
/// 抽屉行间距 /// 抽屉行间距
/// </summary> /// </summary>
...@@ -112,6 +181,19 @@ namespace OnlineStore.LoadCSVLibrary ...@@ -112,6 +181,19 @@ namespace OnlineStore.LoadCSVLibrary
[ConfigProAttribute("Drawer_Columns")] [ConfigProAttribute("Drawer_Columns")]
public int Drawer_Columns { get; set; } public int Drawer_Columns { get; set; }
/// <summary> /// <summary>
/// 抽屉内行数
/// </summary>
[ConfigProAttribute("Rows_In_Drawer")]
public int Rows_In_Drawer { get; set; }
/// <summary>
/// 抽屉内列数
/// </summary>
[ConfigProAttribute("Cols_In_Drawer")]
public int Cols_In_Drawer { get; set; }
/// <summary>
/// PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,0,,,,,,,,,,,, /// PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,0,,,,,,,,,,,,
/// </summary> /// </summary>
[ConfigProAttribute("IsDebug")] [ConfigProAttribute("IsDebug")]
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!