|
|
@@ -1571,13 +1571,13 @@ namespace TeamAAS_VP.Services
|
|
|
/// <param name="outImage"></param>
|
|
|
/// <param name="outGraphicCollection"></param>
|
|
|
/// <returns></returns>
|
|
|
- public bool ExecutePhotoEx(ProcedureModel procedure, Dictionary<string, string> InputTerminal, out CogToolBlockTerminalCollection outputCollection,out ICogImage outImage,out CogGraphicCollection outGraphicCollection)
|
|
|
+ public bool ExecutePhotoEx(ProcedureModel procedure, Dictionary<string, string> InputTerminal, out CogToolBlockTerminalCollection outputCollection, out ICogImage outImage, out CogGraphicCollection outGraphicCollection)
|
|
|
{
|
|
|
outImage = null;
|
|
|
outGraphicCollection = null;
|
|
|
try
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
// 1. 采集图像
|
|
|
var camera = _cameraService.GetCamera(procedure.CameraId);
|
|
|
bool succed = camera.SetExposureTime(procedure.ExposureTime);
|
|
|
@@ -1600,7 +1600,7 @@ namespace TeamAAS_VP.Services
|
|
|
outputCollection = null;
|
|
|
return false;
|
|
|
}
|
|
|
- outImage= image;
|
|
|
+ outImage = image;
|
|
|
procedure.ToolBlock.Inputs["InputImage"].Value = image;
|
|
|
LogHelper.WriteLogInfo(string.Format(Lang.采集图像完成用时0ms, (DateTime.Now - nowtime).Milliseconds));
|
|
|
|
|
|
@@ -1638,7 +1638,7 @@ namespace TeamAAS_VP.Services
|
|
|
if (item.Value is ICogRecord)
|
|
|
record = item.Value as ICogRecord;
|
|
|
}
|
|
|
- outGraphicCollection= outputCollection["Graphic"].Value as CogGraphicCollection;
|
|
|
+ outGraphicCollection = outputCollection["Graphic"].Value as CogGraphicCollection;
|
|
|
return true;
|
|
|
}
|
|
|
else
|
|
|
@@ -1667,7 +1667,7 @@ namespace TeamAAS_VP.Services
|
|
|
/// <param name="robotCoord"></param>
|
|
|
/// <param name="cancellationToken"></param>
|
|
|
/// <returns></returns>
|
|
|
- public async Task<(bool IsSucceed, double X, double Y, double U)> ExecutePhotoGetSinglePoint(ProcedureModel procedure, Dictionary<string, string> InputTerminal, double[] robotCoord, CancellationToken cancellationToken)
|
|
|
+ public async Task<(bool IsSucceed, double X, double Y, double U)> ExecutePhotoGetSinglePoint(ProcedureModel procedure, Dictionary<string, string> InputTerminal, double[] robotCoord, CancellationToken cancellationToken, int? index, string remark)
|
|
|
{
|
|
|
DateTime nowtime = DateTime.Now;
|
|
|
await SetLightBeforePhoto(procedure);
|
|
|
@@ -1719,6 +1719,7 @@ namespace TeamAAS_VP.Services
|
|
|
{
|
|
|
return (false, 0, 0, 0);
|
|
|
}
|
|
|
+ await RecordPhotoCaptureAsync(procedure, robotCoord,true, new double[] { _pixel_x, _pixel_y, _pixel_u }, new double[] { calibResult.X, calibResult.Y, calibResult.U }, string.Empty, string.Empty);
|
|
|
return (true, calibResult.X, calibResult.Y, calibResult.U);
|
|
|
}
|
|
|
SendTaskMessage(Lang.多次拍照失败, MessageLevel.Alarm);
|
|
|
@@ -1736,6 +1737,77 @@ namespace TeamAAS_VP.Services
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 记录拍照结果数据至数据库
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="procedure"></param>
|
|
|
+ /// <param name="robotCoord"></param>
|
|
|
+ /// <param name="isSuccess"></param>
|
|
|
+ /// <param name="pixelPosition"></param>
|
|
|
+ /// <param name="absolutePosition"></param>
|
|
|
+ /// <param name="imagePath"></param>
|
|
|
+ /// <param name="emarks"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ private async Task RecordPhotoCaptureAsync(ProcedureModel procedure, double[] robotCoord, bool isSuccess, double[] pixelPosition, double[] absolutePosition, string imagePath, string emarks)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ //当前的产品配方名
|
|
|
+ string formulaName = _productService.GetCurrentProduct().Name;
|
|
|
+ //如果当前产品名称存在非法字符,则替换为下划线
|
|
|
+ foreach (char c in System.IO.Path.GetInvalidFileNameChars())
|
|
|
+ {
|
|
|
+ formulaName = formulaName.Replace(c, '_');
|
|
|
+ }
|
|
|
+ //获取当前的产品SN
|
|
|
+ string productSN = _productService.CurrentProductCode;
|
|
|
+ //如果产品SN存在非法字符,则替换为下划线
|
|
|
+ foreach (char c in System.IO.Path.GetInvalidFileNameChars())
|
|
|
+ {
|
|
|
+ productSN = productSN.Replace(c, '_');
|
|
|
+ }
|
|
|
+ //当前用户
|
|
|
+ string currentUser = _systemDatabaseService.GetCurrentUser()?.UserName;
|
|
|
+
|
|
|
+ //相机名称
|
|
|
+ string cameraName = procedure.CameraName;
|
|
|
+ //视觉流程名称
|
|
|
+ string procedureName = procedure.Name;
|
|
|
+ //如果机器人坐标为空,则获取当前机器人坐标
|
|
|
+ if (robotCoord == null)
|
|
|
+ {
|
|
|
+ var robot = _robotService.GetAllRobots().FirstOrDefault();
|
|
|
+ if (robot != null)
|
|
|
+ {
|
|
|
+ var pos = await robot.GetRobotPosAsync();
|
|
|
+ robotCoord = new double[] { pos.X, pos.Y, pos.Z };
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ robotCoord = new double[] { 0, 0, 0 };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ PhotoCaptureRecord photoCaptureRecord = new PhotoCaptureRecord();
|
|
|
+ photoCaptureRecord.RecipeName = formulaName;
|
|
|
+ photoCaptureRecord.ProductSN = productSN;
|
|
|
+ photoCaptureRecord.CameraName = cameraName;
|
|
|
+ photoCaptureRecord.ProcessName = procedureName;
|
|
|
+ photoCaptureRecord.RobotPosition=string.Join(",", robotCoord);
|
|
|
+ photoCaptureRecord.IsSuccess = isSuccess;
|
|
|
+ photoCaptureRecord.PixelPosition = string.Join(",", pixelPosition);
|
|
|
+ photoCaptureRecord.AbsolutePosition = string.Join(",", absolutePosition);
|
|
|
+ photoCaptureRecord.ImagePath = imagePath;
|
|
|
+ photoCaptureRecord.Remarks = emarks;
|
|
|
+ photoCaptureRecord.OperatorName = currentUser;
|
|
|
+
|
|
|
+ await _systemDatabaseService.RecordPhotoCaptureAsync(photoCaptureRecord);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ LogHelper.WriteLogError("记录拍照结果数据至数据库时出错", ex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 执行相机拍照获取单个点位结果,并且返回图像和图形
|
|
|
/// </summary>
|
|
|
@@ -1748,8 +1820,8 @@ namespace TeamAAS_VP.Services
|
|
|
{
|
|
|
DateTime nowtime = DateTime.Now;
|
|
|
await SetLightBeforePhoto(procedure);
|
|
|
- ICogImage outImage=null;
|
|
|
- CogGraphicCollection outGraphicCollection=null;
|
|
|
+ ICogImage outImage = null;
|
|
|
+ CogGraphicCollection outGraphicCollection = null;
|
|
|
try
|
|
|
{
|
|
|
//拍照失败时,需要多次拍照
|
|
|
@@ -2243,7 +2315,7 @@ namespace TeamAAS_VP.Services
|
|
|
if (!isSucceed)
|
|
|
{
|
|
|
LogHelper.WriteLogInfo(string.Format(Lang.设置光源通道0打开失败, lightChannel.GlobalIndex));
|
|
|
- //"设置光源通道{lightChannel.GlobalIndex}打开失败!");
|
|
|
+ //"设置光源通道{lightChannel.GlobalIndex}打开失败!");
|
|
|
}
|
|
|
isSucceed = await _lightManagerService.SetGlobalChannelBrightnessAsync(lightChannel.GlobalIndex, lightChannel.DefaultBrightness);
|
|
|
if (!isSucceed)
|