Commit 363fea0d 张东亮

贴标

1 个父辈 232d4f2f
......@@ -43,6 +43,12 @@ namespace DeviceLibrary
return (float)(Math.Acos(cosM) * 180 / Math.PI * k);
}
/// <summary>
/// 获取以点为中心的角度,-180~180
/// </summary>
/// <param name="pt1"></param>
/// <param name="pt2"></param>
/// <returns></returns>
public static double getAngle(Point pt1, Point pt2)
{
double mb_x = pt2.X - pt1.X;
......@@ -173,14 +179,14 @@ namespace DeviceLibrary
labelAngle = angles[0] + 180;
}
widthOffset = widthOffsets.Max();
widthOffset = widthOffsets[0];
LogUtil.info($"use widthOffset:{widthOffset}");
labelAngle = labelAngle > 360 ? labelAngle - 360 : labelAngle;
labelAngle = labelAngle > 360 ? labelAngle - 360 : labelAngle;
LogUtil.info($"labelAngle1:{labelAngle}");
var p1 = PointWithAngle(org, labelAngle, widthOffset);
g.FillEllipse(tmpPlace, new Rectangle(p1, pointsize));
//匹配照片角度与贴标旋转轴的角度差
//匹配照片角度与贴标旋转轴的角度差--左右两侧角度
labelAngle += 83;
LogUtil.info($"labelAngle2:{labelAngle}");
//g.FillEllipse(red, new Rectangle(PointRotate(org, op, labelAngle), pointsize));
......@@ -190,12 +196,22 @@ namespace DeviceLibrary
//贴标偏移
var p3 = PointWithAngle(p2, labelAngle, Label_R_Offset);
labelAngle -= 83;
labelAngle = labelAngle > 360 ? labelAngle - 360 : labelAngle;
labelAngle = 360 - labelAngle;
LogUtil.info($"labelAngle4:{labelAngle}");
labelAngle += Label_R_Angle_Diff;
if (labelAngle <= 180)
{
labelAngle = Label_R_Angle_Diff - (180 - labelAngle);
}
else
{
labelAngle=(labelAngle - 180) + Label_R_Angle_Diff;
}
//labelAngle = 360 - labelAngle;
////贴标位置相对于水平正方向的角度
//LogUtil.info($"labelAngle4:{labelAngle}");
////标签横向位置相对圆心的角度
//labelAngle += Label_R_Angle_Diff;
labelAngle = labelAngle < 0 ? labelAngle + 360 : labelAngle;
labelAngle = labelAngle > 360 ? labelAngle - 360 : labelAngle;
LogUtil.info($"labelAngle5:{labelAngle}");
g.FillEllipse(yeelow, new Rectangle(p3, pointsize));
......@@ -209,7 +225,7 @@ namespace DeviceLibrary
LabelResult?.Invoke(new LabelResult() { Bitmap = (Bitmap)bitmap.Clone() });
bitmap.Dispose();
return p3;
return p2;
}
static IdWorker id = new IdWorker(1, 1);
static string[] pnreglist;
......
......@@ -37,19 +37,20 @@ namespace DeviceLibrary
LeftMoveInfo.log($"批量轴上升到P2位置,二次提升,LeftStartMovePosition={LeftStartMovePosition}");
break;
case MoveStep.L03:
if (IOValue(IO_Type.LeftOverHead_Check).Equals(IO_VALUE.HIGH))
//if (IOValue(IO_Type.LeftOverHead_Check).Equals(IO_VALUE.HIGH))
//{
// LeftMoveInfo.NextMoveStep(MoveStep.L02);
// Left_Batch_Axis.AbsMove(LeftMoveInfo, LeftStartMovePosition, Config.Left_Batch_P2_speed);
// LeftMoveInfo.log($"批量轴上升过头,下降到:LeftStartMovePosition={LeftStartMovePosition}");
//}
//else
{
LeftMoveInfo.NextMoveStep(MoveStep.L02);
Left_Batch_Axis.AbsMove(LeftMoveInfo, LeftStartMovePosition, Config.Left_Batch_P2_speed);
LeftMoveInfo.log($"批量轴上升过头,下降到:LeftStartMovePosition={LeftStartMovePosition}");
}
else {
LeftMoveInfo.NextMoveStep(MoveStep.L04);
}
break;
case MoveStep.L04:
var currpos = Left_Batch_Axis.GetAclPosition()- LeftMoveInfo.MoveParam.HeightPos;
if (currpos < Config.Left_Batch_P1)
var currpos = Left_Batch_Axis.GetAclPosition();
if (currpos <= Config.Left_Batch_P1)
{
//LeftShelfNoTray = true;
LeftMoveInfo.NextMoveStep(MoveStep.L40_ShelfFull);
......@@ -63,7 +64,7 @@ namespace DeviceLibrary
}
break;
case MoveStep.L10_WaitReelPut:
Msg.add(crc.GetString("Res0095","左侧空闲中"), MsgLevel.info);
Msg.add(crc.GetString("Res0095", "左侧空闲中"), MsgLevel.info);
break;
case MoveStep.L11_ReelPutted:
LeftCount++;
......@@ -73,13 +74,13 @@ namespace DeviceLibrary
LeftMoveInfo.log($"左侧料盘已放入,批量轴下降");
break;
case MoveStep.L12:
if (IOValue(IO_Type.LeftOverHead_Check).Equals(IO_VALUE.HIGH))
{
LeftMoveInfo.NextMoveStep(MoveStep.L11_ReelPutted);
Left_Batch_Axis.AbsMove(LeftMoveInfo, LeftStartMovePosition, Config.Left_Batch_P2_speed);
LeftMoveInfo.log($"批量轴上升过头,下降到:LeftStartMovePosition={LeftStartMovePosition}");
}
else
//if (IOValue(IO_Type.LeftOverHead_Check).Equals(IO_VALUE.HIGH))
//{
// LeftMoveInfo.NextMoveStep(MoveStep.L11_ReelPutted);
// Left_Batch_Axis.AbsMove(LeftMoveInfo, LeftStartMovePosition, Config.Left_Batch_P2_speed);
// LeftMoveInfo.log($"批量轴上升过头,下降到:LeftStartMovePosition={LeftStartMovePosition}");
//}
//else
{
LabelMoveInfo.MoveParam = LeftMoveInfo.MoveParam.clone();
LeftMoveInfo.NextMoveStep(MoveStep.L20_WaitLabel);
......@@ -89,7 +90,8 @@ namespace DeviceLibrary
case MoveStep.L20_WaitLabel:
break;
case MoveStep.L30_LabelFinish:
if (SafeReleaseLeftShelf) {
if (SafeReleaseLeftShelf)
{
//LeftShelfNoTray = true;
SafeReleaseLeftShelf = false;
LeftMoveInfo.NextMoveStep(MoveStep.L40_ShelfFull);
......@@ -98,7 +100,8 @@ namespace DeviceLibrary
else
{
LeftMoveInfo.NextMoveStep(MoveStep.L04);
LeftMoveInfo.log($"贴标完成,准备下一盘料");
LeftBatchAxisToP2(false);
LeftMoveInfo.log($"贴标完成,准备下一盘料,批量轴上升到P2位置,二次提升,LeftStartMovePosition={LeftStartMovePosition}");
}
break;
case MoveStep.L40_ShelfFull:
......@@ -206,16 +209,16 @@ namespace DeviceLibrary
string state = "";
if (IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.HIGH))
{
state += string.Format(crc.GetString("Res0069","有料串,已放置{0}张料盘"), LeftCount);
state += string.Format(crc.GetString("Res0069", "有料串,已放置{0}张料盘"), LeftCount);
if (LeftShelfNoTray)
state += "," + crc.GetString("Res0043","料串已满");
state += "," + crc.GetString("Res0043", "料串已满");
else
state += ".";
state += crc.GetString("Res0045","当前ReelID:") + LeftMoveInfo.MoveParam.WareCode;
state += crc.GetString("Res0045", "当前ReelID:") + LeftMoveInfo.MoveParam.WareCode;
}
else
{
return crc.GetString("Res0046","无料串");
return crc.GetString("Res0046", "无料串");
}
return state;
......@@ -238,7 +241,7 @@ namespace DeviceLibrary
}
LeftMoveInfo.log("BatchAxisToP2 目标P2: " + targetP2 + "(" + currPosition + ")");
}
//targetSpeed = Config.BatchAxis_P3Speed / 2;
targetSpeed = Config.Left_Batch_P2_speed / 10;
}
LeftMoveInfo.TimeOutSeconds = 200;
LeftMoveInfo.CanWhileCount = 0;
......@@ -256,7 +259,7 @@ namespace DeviceLibrary
void LeftBatchAxisToP1()
{
int targetP1 = Config.Left_Batch_P1;
int targetSpeed = Config.Left_Batch_P2_speed/10;
int targetSpeed = Config.Left_Batch_P2_speed / 10;
LeftMoveInfo.TimeOutSeconds = 200;
LeftMoveInfo.CanWhileCount = 0;
......
......@@ -100,20 +100,16 @@ namespace DeviceLibrary
}
//等待右侧料串计算盘高
//else if (RightMoveInfo.MoveStep >= MoveStep.R06_GettedReelHigh && RightMoveInfo.MoveStep <= MoveStep.R10_WaitReelLeave)
else if (LastHeightPos > 0)
else //if (LastHeightPos > 0)
{
MiddleMoveInfo.NextMoveStep(MoveStep.M07);
MiddleMoveInfo.MoveParam.PlateH = LastHeight;
MiddleMoveInfo.MoveParam.HeightPos = LastHeightPos;
LastHeightPos = 0;
MiddleMoveInfo.NextMoveStep(MoveStep.M07);
MiddleMoveInfo.log($"已获取盘高,开始往左侧料串移栽,{MiddleMoveInfo.MoveParam.ToStr()}");
MiddleMoveInfo.log($"开始往左侧料串移栽,{MiddleMoveInfo.MoveParam.ToStr()}");
}
else if (MiddleMoveInfo.IsTimeOut(60))
{
MiddleMoveInfo.log("等待计算盘高");
}
//else if (MiddleMoveInfo.IsTimeOut(60))
//{
// MiddleMoveInfo.log("等待计算盘高");
//}
break;
case MoveStep.M07:
if (!Take_Middle_Axis.IsSafe(Config.Take_Middle_P3,out string msg))
......
......@@ -38,13 +38,13 @@ namespace DeviceLibrary
RightMoveInfo.log($"批量轴上升到P2位置,二次提升,RightStartMovePosition={RightStartMovePosition}");
break;
case MoveStep.R03:
if (IOValue(IO_Type.RightOverHead_Check).Equals(IO_VALUE.HIGH))
{
RightMoveInfo.NextMoveStep(MoveStep.R02);
Right_Batch_Axis.AbsMove(RightMoveInfo, RightStartMovePosition, Config.Right_Batch_P2_speed);
RightMoveInfo.log($"批量轴上升过头,下降到:RightStartMovePosition={RightStartMovePosition}");
}
else
//if (IOValue(IO_Type.RightOverHead_Check).Equals(IO_VALUE.HIGH))
//{
// RightMoveInfo.NextMoveStep(MoveStep.R02);
// Right_Batch_Axis.AbsMove(RightMoveInfo, RightStartMovePosition, Config.Right_Batch_P2_speed);
// RightMoveInfo.log($"批量轴上升过头,下降到:RightStartMovePosition={RightStartMovePosition}");
//}
//else
{
RightMoveInfo.NextMoveStep(MoveStep.R04);
}
......@@ -54,10 +54,10 @@ namespace DeviceLibrary
{
if (MiddleMoveInfo.MoveStep >= MoveStep.M09 || MiddleMoveInfo.MoveStep < MoveStep.M02)
{
RightMoveInfo.NextMoveStep(MoveStep.R06_GettedReelHigh);
GetHeight();
RightMoveInfo.NextMoveStep(MoveStep.R06_GettedReelInfo);
//GetHeight();
ScanCode();
RightMoveInfo.log($"开始扫码,并获取上一盘料高度,LastHeight={LastHeight}");
RightMoveInfo.log($"开始扫码");//并获取上一盘料高度,LastHeight={LastHeight}
}
}
else
......@@ -82,7 +82,7 @@ namespace DeviceLibrary
RightMoveInfo.log($"批量轴已上升到顶,料串已空.");
}
break;
case MoveStep.R06_GettedReelHigh:
case MoveStep.R06_GettedReelInfo:
if (RightScanTask.IsCompleted)
{
var (x, k, s) = RightScanTask.Result;
......@@ -334,58 +334,6 @@ namespace DeviceLibrary
Right_Batch_Axis.BatchAxisStartCheck(IO_Type.RightTop_Check, IO_VALUE.HIGH);
}
int RightEndMovePosition = 0;
int LastHeight = 0;
int LastHeightPos = 0;
private int GetHeight()
{
LastHeight = 0;
LastHeightPos = 0;
int AxisChangeValue = Config.Right_Batch_ChangeValue;
//计算高度
RightEndMovePosition = Right_Batch_Axis.GetAclPosition();
bool isLast = false;
int chaz = Math.Abs(RightEndMovePosition - Config.Right_Batch_P2);
if (chaz < Right_Batch_Axis.Config.CanErrorCountMax)
{
isLast = true;
}
float height = (float)Math.Ceiling(1F * Math.Abs(RightEndMovePosition - RightStartMovePosition) / AxisChangeValue);
LastHeightPos = Math.Abs(RightEndMovePosition - RightStartMovePosition);
string buchongStr = "";
if (isLast)
{
buchongStr = $"(最后一盘料已补充5)";
height += 5;
}
//如果检测出<=15,都按照8计算
if (height <= 15)
{
LastHeight = 8;
}
else
{
List<int> heightList = new List<int> { 8, 12, 16, 20 };
heightList = (from m in heightList orderby m descending select m).ToList<int>();
float minCha = height;
foreach (int h in heightList)
{
//取差值最小的接近值
float cha = Math.Abs(h - (height - 4));
if (cha < minCha)
{
LastHeight = h;
minCha = cha;
}
}
}
if (LastHeight <= 8) { LastHeight = 8; }
string msg = Name + $" 计算盘高:上升前 [{RightStartMovePosition}]实时[{RightEndMovePosition}]差值[{(RightEndMovePosition - RightStartMovePosition)}]系数[{AxisChangeValue}] 计算后{buchongStr}[{height}],归类为【{LastHeight}mm】";
LogUtil.info(msg);
return LastHeight;
}
}
}
\ No newline at end of file
......@@ -70,7 +70,7 @@ namespace DeviceLibrary
public ServerCommunication ServerCM;
DeviceLib.WebApi.HttpService agvService = new DeviceLib.WebApi.HttpService(ConfigHelper.Config.Get("AGVService_Port",8088));
DeviceLib.WebApi.HttpService agvService = new DeviceLib.WebApi.HttpService(ConfigHelper.Config.Get("AGVService_Port", 8088));
public MainMachine(Robot_Config _config)
{
Config = _config;
......@@ -315,8 +315,11 @@ namespace DeviceLibrary
break;
}
}
bool isAgvRun {get => LeftMoveInfo.MoveStep >= MoveStep.L60_InShelf || LeftMoveInfo.MoveStep >= MoveStep.L50_OutShelf
|| RightMoveInfo.MoveStep >= MoveStep.R30_OutShelf || RightMoveInfo.MoveStep >= MoveStep.R40_InShelf; }
bool isAgvRun
{
get => LeftMoveInfo.MoveStep >= MoveStep.L60_InShelf || LeftMoveInfo.MoveStep >= MoveStep.L50_OutShelf
|| RightMoveInfo.MoveStep >= MoveStep.R30_OutShelf || RightMoveInfo.MoveStep >= MoveStep.R40_InShelf;
}
public bool IgnoreSafecheck = false;
public bool IgnoreGratingSignal = false;
......@@ -361,6 +364,8 @@ namespace DeviceLibrary
}
Msg.add(crc.GetString("Res0064", "左后门没有关闭") + (ok ? crc.GetString("Res0061", "[已忽略]") : ""), MsgLevel.warning);
}
if (Config.DIList.ContainsKey(IO_Type.RightBackDoor_Check))
{
if (IOValue(IO_Type.RightBackDoor_Check).Equals(IO_VALUE.LOW))
{
if (!IgnoreSafecheck)
......@@ -370,6 +375,8 @@ namespace DeviceLibrary
}
Msg.add(crc.GetString("Res0065", "右后门没有关闭") + (ok ? crc.GetString("Res0061", "[已忽略]") : ""), MsgLevel.warning);
}
}
lastSafeCheckStatus = ok;
return ok;
}
......
......@@ -27,7 +27,7 @@ namespace DeviceLibrary
R03,
R04,
R05,
R06_GettedReelHigh, //获取料盘高度
R06_GettedReelInfo, //获取料盘高度
R07,
R08,
R10_WaitReelLeave, //等待料盘离开
......
......@@ -63,7 +63,7 @@ DI,0,急停,SuddenStop_BTN,0,HC,X00,,,,,,,,,,
DI,0,进料口确认按钮,Right_BTN,1,HC,X01,,,,,,,,,,
DI,0,出料口确认按钮,Left_BTN,2,HC,X02,,,,,,,,,,
DI,0,后门左门禁,LeftBackDoor_Check,3,HC,X03,,,,,,,,,,
DI,0,后门右门禁,RightBackDoor_Check,4,HC,X04,,,,,,,,,,
,0,后门右门禁,RightBackDoor_Check,4,HC,X04,,,,,,,,,,
DI,0,气压检测,Airpressure_Check,5,HC,X05,,,,,,,,,,
DI,0,光栅信号,GratingSignal_Check,6,HC,X06,,,,,,,,,,
DI,0,NG料箱检测,HasNgBox,7,HC,X07,,,,,,,,,,
......@@ -81,9 +81,9 @@ DI,0,出料口料串到位检测,LeftEnd_Check,18,HC,X18,,,,,,,,,,
DI,0,出料口阻挡气缸上升端,LeftStopUP,19,HC,X19,,,,,,,,,,
DI,0,出料口阻挡气缸下降端,LeftStopDown,20,HC,X20,,,,,,,,,,
DI,0,进料定位料盘检测,RightTop_Check,21,HC,X21,,,,,,,,,,
DI,0,进料定位料盘超限检测,RightOverHead_Check,22,HC,X22,,,,,,,,,,
,0,进料定位料盘超限检测,RightOverHead_Check,22,HC,X22,,,,,,,,,,
DI,0,出料定位料盘检测,LeftTop_Check,23,HC,X23,,,,,,,,,,
DI,0,出料定位料盘超限检测,LeftOverHead_Check,24,HC,X24,,,,,,,,,,
,0,出料定位料盘超限检测,LeftOverHead_Check,24,HC,X24,,,,,,,,,,
DI,0,吸嘴气缸前进端,LabelCylinder_Fwd,25,HC,X25,,,,,,,,,,
DI,0,吸嘴气缸后退端,LabelCylinder_Bck,26,HC,X26,,,,,,,,,,
DI,0,吸盘压力检测,TraySize_7,27,HC,X27,,,,,,,,,,
......
......@@ -116,17 +116,17 @@ namespace OnlineStore.LoadCSVLibrary
/// </summary>
public static string RightTop_Check = "RightTop_Check";
/// <summary>
/// DI,0,进料定位料盘超限检测,RightOverHead_Check,22,HC,X22,,,,,,,,,,
/// DI,0,进料定位料盘超限检测,RightOverHead_Check,22,HC,X22,,,,,,,,,,--不用
/// </summary>
public static string RightOverHead_Check = "RightOverHead_Check";
//public static string RightOverHead_Check = "RightOverHead_Check";
/// <summary>
/// DI,0,出料定位料盘检测,LeftTop_Check,23,HC,X23,,,,,,,,,,
/// </summary>
public static string LeftTop_Check = "LeftTop_Check";
/// <summary>
/// DI,0,出料定位料盘超限检测,LeftOverHead_Check,24,HC,X24,,,,,,,,,,
/// DI,0,出料定位料盘超限检测,LeftOverHead_Check,24,HC,X24,,,,,,,,,,--不用
/// </summary>
public static string LeftOverHead_Check = "LeftOverHead_Check";
// public static string LeftOverHead_Check = "LeftOverHead_Check";
/// <summary>
/// DI,0,吸嘴气缸前进端,LabelCylinder_Fwd,25,HC,X25,,,,,,,,,,
/// </summary>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!