| | |
| | | string _precision = "f3"; |
| | | double _allowedShift = 0; |
| | | |
| | | double _allowedShift2 = 0; |
| | | |
| | | public override void Open() |
| | | { |
| | | InitialSetting(); |
| | |
| | | DataUploadMethod = InitialMESWebServiceMethod(DataUploadMethodName, out DataUploadObj); |
| | | } |
| | | |
| | | PrepareDataShift(); |
| | | } |
| | | |
| | | private void PrepareDataShift() |
| | | { |
| | | var allowedShiftStr = ConfigurationManager.AppSettings["DataShift"]; |
| | | if (!double.TryParse(allowedShiftStr, out _allowedShift)) |
| | | { |
| | | _allowedShift = 0; |
| | | } |
| | | |
| | | string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "dataShift"); |
| | | if (!File.Exists(path)) |
| | | { |
| | | _allowedShift2 = 0; |
| | | } |
| | | else |
| | | { |
| | | using (StreamReader reader = new StreamReader(path, System.Text.Encoding.UTF8)) |
| | | { |
| | | string data = reader.ReadToEnd(); |
| | | |
| | | if (!string.IsNullOrWhiteSpace(data)) |
| | | { |
| | | if (double.TryParse(data, out double dataValue)) |
| | | { |
| | | _allowedShift2 = dataValue; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | _allowedShift += _allowedShift2; |
| | | } |
| | | |
| | | private void InitialMotionCardBaseAxisAlarm() |
| | |
| | | |
| | | return new ProcessResponse(true); |
| | | } |
| | | |
| | | [ProcessMethod("", "SortKeyUnits", "单键配置排序", InvokeType.TestInvoke)] |
| | | public ProcessResponse SortKeyUnits(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) |
| | | { |
| | | if (Config.KeyUnitCollection.Count > 0) |
| | | { |
| | | Config.KeyUnitCollection = Config.KeyUnitCollection.OrderBy(u => u.SnapshotPointId).ThenBy(u => u.ImageSeq).ToList(); |
| | | } |
| | | return new ProcessResponse(true); |
| | | } |
| | | #endregion |
| | | |
| | | #region 私有方法 |
| | |
| | | } |
| | | else |
| | | { |
| | | |
| | | _halconToolDict[toolKey].InputTupleDic["INPUT_Params"] = new HTuple(array); |
| | | if (!_halconToolDict[toolKey].RunProcedure(out string error)) |
| | | { |
| | |
| | | double actualValue = double.Parse(_halconToolDict[toolKey].GetResultTuple("OUTPUT_Result").D.ToString(_precision)); |
| | | m.Spec.ActualValue = actualValue; |
| | | |
| | | //M071要求超限数据在允许范围内压缩到合格范围内 |
| | | if (_allowedShift > 0 && m.Spec.MeasureResult != null && m.Spec.MeasureResult.Value == false) |
| | | if (m.MeasureType.ToLower() == "alignment" || m.MeasureType.ToLower() == "slant") |
| | | { |
| | | m.Spec.ActualValue = m.Spec.StandardValue + (actualValue - m.Spec.StandardValue) * (m.Spec.Tolrenance_Positive - m.Spec.StandardValue) / (m.Spec.Tolrenance_Positive - m.Spec.StandardValue + _allowedShift); |
| | | //M071要求超限数据在允许范围内压缩到合格范围内 |
| | | if (_allowedShift > 0 && m.Spec.MeasureResult != null && m.Spec.MeasureResult.Value == false) |
| | | { |
| | | m.Spec.ActualValue = m.Spec.StandardValue + (actualValue - m.Spec.StandardValue) * (m.Spec.Tolrenance_Positive - m.Spec.StandardValue) / (m.Spec.Tolrenance_Positive - m.Spec.StandardValue + _allowedShift); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (m.Spec?.ActualValue != null) |
| | | { |
| | | LogAsync(DateTime.Now, $"{m.Name}检测结果{m.Spec.ActualValue.Value.ToString(_precision)}", ""); |
| | | } |
| | | |
| | | KeyIndicator indicator = new KeyIndicator(m.Id, m.DisplayLocation); |
| | |
| | | } |
| | | else |
| | | { |
| | | var results = _halconToolDict[keyToolKey].GetResultTuple("OUTPUT_Results").DArr.ToList(); |
| | | var results = _halconToolDict[keyToolKey].GetResultTuple("OUTPUT_Results").HTupleToDouble(); |
| | | if (results.Count == 0 || results.Any(u => u < 0)) |
| | | { |
| | | LogAsync(DateTime.Now, $"{k.AliasName}原始数据异常", ""); |
| | | LogAsync(DateTime.Now, $"{k.AliasName}原始数据{string.Join(",", results)}异常", ""); |
| | | } |
| | | else |
| | | { |
| | | //LogAsync(DateTime.Now, $"{k.AliasName}原始数据", $"{string.Join(" ", results)}"); |
| | | |
| | | results = results.Select(u => u - Config.PlanCompensation).ToList(); |
| | | |
| | | string resultStr = ""; |
| | | resultDict = k.KeyResultList.ToDictionary(u => u, u => |
| | | { |
| | | int index = k.KeyResultList.IndexOf(u); |
| | | return results[index]; |
| | | |
| | | if (index < results.Count && index >= 0) |
| | | { |
| | | double origin = results[index]; |
| | | |
| | | var compensation = k.KeyCompensationCollection.FirstOrDefault(c => c.KeyResult == u); |
| | | if (compensation != null) |
| | | { |
| | | origin = origin + compensation.Compensation; |
| | | } |
| | | |
| | | resultStr += $"{u} {origin};"; |
| | | |
| | | return origin; |
| | | } |
| | | else |
| | | { |
| | | return -999.0; |
| | | } |
| | | }); |
| | | |
| | | LogAsync(DateTime.Now, $"{k.AliasName}结果:{resultStr}", ""); |
| | | } |
| | | } |
| | | } |