/// <summary> /// Calculate 2 sensor axis z /// </summary> /// <param name="sensor1"></param> /// <param name="sensor2"></param> /// <param name="inpData"></param> /// <returns></returns> private TranslateData CalcTwoSensorAxisZ(SensorPosition sensor1, SensorPosition sensor2, double[] inpData) { try { TranslateData trandata = new TranslateData(); WayType waytype1 = sensor1.Way; WayType waytype2 = sensor2.Way; if (waytype1 == WayType.LEFT || waytype1 == WayType.RIGHT || waytype1 == WayType.INVALID) { waytype1 = WayType.UP; } if (waytype2 == WayType.LEFT || waytype2 == WayType.RIGHT || waytype2 == WayType.INVALID) { waytype2 = WayType.UP; } int datapos1 = sensor1.ChNo; int datapos2 = sensor2.ChNo; double datavalue1 = DataToRealAxisPlot("Z", inpData[datapos1], waytype1, sensor1.ChNo - 1, sensor1.Target); double datavalue2 = DataToRealAxisPlot("Z", inpData[datapos2], waytype2, sensor2.ChNo - 1, sensor2.Target); Vector3D vectorbase = new Vector3D(datavalue2 - datavalue1, sensor1.BaseVector.Y, sensor1.BaseVector.Z); double anglez = CalcAngleFromAxis("X", vectorbase); //trandata.OffsetZ = Math.Max(datavalue1, datavalue2); if (sensor1.Way == WayType.LEFT) trandata.OffsetZ = datavalue1; else if (sensor2.Way == WayType.LEFT) trandata.OffsetZ = datavalue2; else trandata.OffsetZ = (datavalue1 + datavalue2) / 2; trandata.RotationY = anglez - 90; return trandata; } catch (Exception ex) { throw ex; } }
/// <summary> /// Calculate two sensor axis Y /// </summary> /// <param name="sensor1"></param> /// <param name="sensor2"></param> /// <param name="inpData"></param> /// <returns></returns> private TranslateData CalcTwoSensorAxisY(SensorPosition sensor1, SensorPosition sensor2, double[] inpData) { try { TranslateData trandata = new TranslateData(); int datapos1 = sensor1.ChNo; int datapos2 = sensor2.ChNo; double datavalue1 = DataToRealAxisPlot("Y", inpData[datapos1], WayType.INVALID, sensor1.ChNo - 1, sensor1.Target); double datavalue2 = DataToRealAxisPlot("Y", inpData[datapos2], WayType.INVALID, sensor2.ChNo - 1, sensor2.Target); Vector3D vectorbase = new Vector3D(sensor1.BaseVector.X, datavalue2 - datavalue1, sensor1.BaseVector.Z); Vector3D vectorpos = Vector3D.CrossProduct(vectorbase, sensor1.RotationAxis); double anglex = CalcAngleFromAxis("X", vectorpos); double anglez = CalcAngleFromAxis("Z", vectorpos); trandata.OffsetY = Math.Max(datavalue1, datavalue2); trandata.RotationX = anglez - 90; trandata.RotationZ = anglex - 90; return trandata; } catch (Exception ex) { throw ex; } }
/// <summary> /// Create TranslateData Y /// </summary> /// <param name="target"></param> /// <param name="inpData"></param> /// <returns></returns> private TranslateData CreateTranslateDataY(TargetType target, double[] inpData) { try { TranslateData trandata = new TranslateData(); trandata.DataX = inpData[0]; bool chkfalse = false; if (target == TargetType.STRIPPER) { if (_SensorInfoY[(int)target] != null) { //Case 1 sensor if (_SensorInfoY[(int)target].Count == 1) { int datapos = _SensorInfoY[(int)target][0].ChNo; trandata.OffsetY = CalcTranslatePlotY(inpData[datapos], datapos - 1, target); } //Case 2 sensor else if (_SensorInfoY[(int)target].Count == 2) { int datapos1 = _SensorInfoY[(int)target][0].ChNo; int datapos2 = _SensorInfoY[(int)target][1].ChNo; double data = 0; int sensorindex = 0; if (inpData[datapos1] > inpData[datapos2]) { sensorindex = _SensorInfoY[(int)target][0].ChNo - 1; data = inpData[datapos1]; } else { sensorindex = _SensorInfoY[(int)target][1].ChNo - 1; data = inpData[datapos2]; } trandata.OffsetY = CalcTranslatePlotY(data, sensorindex, target); //trandata = CalcTwoSensorAxisY(_SensorInfoY[(int)target][0], _SensorInfoY[(int)target][1], inpData); //trandata.DataX = inpData[0]; } } } else if (target == TargetType.UPPER_PRESS) { //Case 1 or 2 sensor if (_SensorInfoY[(int)target] != null) if (_SensorInfoY[(int)target].Count == 1 || _SensorInfoY[(int)target].Count == 2) { List<SensorPosition> listsensor = new List<SensorPosition>(); listsensor.AddRange(_SensorInfoY[(int)target]); if (_SensorInfoY[(int)TargetType.STRIPPER] != null) listsensor.AddRange(_SensorInfoY[(int)TargetType.STRIPPER]); //check stripper Y number if (listsensor.Count >= 1) { SensorPosition[] sensors; bool check = CheckThreeSensorArea(listsensor, out sensors); if (check) { trandata = CalcThreeSensorAxisY(sensors, inpData, target); trandata.DataX = inpData[0]; chkfalse = true; } } } } else if (target == TargetType.UPPER) { //Case 1 or 2 sensor if (_SensorInfoY[(int)target] != null) if (_SensorInfoY[(int)target].Count == 1 || _SensorInfoY[(int)target].Count == 2) { List<SensorPosition> listsensor = new List<SensorPosition>(); listsensor.AddRange(_SensorInfoY[(int)target]); //check UPPER_PRESS Y number if (_SensorInfoY[(int)TargetType.UPPER_PRESS] != null) listsensor.AddRange(_SensorInfoY[(int)TargetType.UPPER_PRESS]); //check stripper Y number if (_SensorInfoY[(int)TargetType.STRIPPER] != null) listsensor.AddRange(_SensorInfoY[(int)TargetType.STRIPPER]); if (listsensor.Count >= 1) { SensorPosition[] sensors; bool check = CheckThreeSensorArea(listsensor, out sensors); if (check) { trandata = CalcThreeSensorAxisY(sensors, inpData, target); trandata.DataX = inpData[0]; chkfalse = true; } } } } else if (target == TargetType.RAM) { //Case 1 or 2 sensor if (_SensorInfoY[(int)target] != null) if (_SensorInfoY[(int)target].Count == 1 || _SensorInfoY[(int)target].Count == 2) { List<SensorPosition> listsensor = new List<SensorPosition>(); listsensor.AddRange(_SensorInfoY[(int)target]); //check UPPER Y number if (_SensorInfoY[(int)TargetType.UPPER] != null) listsensor.AddRange(_SensorInfoY[(int)TargetType.UPPER]); //check UPPER_PRESS Y number if (_SensorInfoY[(int)TargetType.UPPER_PRESS] != null) listsensor.AddRange(_SensorInfoY[(int)TargetType.UPPER_PRESS]); //check stripper Y number if (_SensorInfoY[(int)TargetType.STRIPPER] != null) listsensor.AddRange(_SensorInfoY[(int)TargetType.STRIPPER]); //check stripper Y number if (listsensor.Count > 1) { SensorPosition[] sensors; bool check = CheckThreeSensorArea(listsensor, out sensors); if (check) { trandata = CalcThreeSensorAxisY(sensors, inpData, target); trandata.DataX = inpData[0]; chkfalse = true; } } } } if (!chkfalse && target != TargetType.STRIPPER) { int datapos1 = 0; int datapos2 = 0; double data = 0; int sensorindex = 0; if (_SensorInfoY[(int)target] != null) { if (_SensorInfoY[(int)target].Count == 1) { datapos1 = _SensorInfoY[(int)target][0].ChNo; data = inpData[datapos1]; } else if (_SensorInfoY[(int)target].Count == 2) { datapos1 = _SensorInfoY[(int)target][0].ChNo; datapos2 = _SensorInfoY[(int)target][1].ChNo; if (inpData[datapos1] > inpData[datapos2]) { sensorindex = _SensorInfoY[(int)target][0].ChNo - 1; data = inpData[datapos1]; } else { sensorindex = _SensorInfoY[(int)target][1].ChNo - 1; data = inpData[datapos2]; } } trandata.OffsetY = CalcTranslatePlotY(data, sensorindex, target); } } //Case 3 sensor if (_SensorInfoY[(int)target] != null) if (_SensorInfoY[(int)target].Count >= 3) { SensorPosition[] sensors; bool check = CheckThreeSensorArea(_SensorInfoY[(int)target], out sensors); if (!check) { int datapos = _SensorInfoY[(int)target][0].ChNo; trandata.OffsetY = CalcTranslatePlotY(inpData[datapos], datapos - 1, target); } else { trandata = CalcThreeSensorAxisY(sensors, inpData, target); trandata.DataX = inpData[0]; } } return trandata; } catch (Exception ex) { throw ex; } }
/// <summary> /// Calculate 3 sensor axis Y /// </summary> /// <param name="sensors"></param> /// <param name="inpData"></param> /// <param name="target"></param> /// <returns></returns> private TranslateData CalcThreeSensorAxisY(SensorPosition[] sensors, double[] inpData, TargetType target) { try { TranslateData trandata = new TranslateData(); int datapos1 = sensors[0].ChNo; int datapos2 = sensors[1].ChNo; int datapos3 = sensors[2].ChNo; double[] datavalues = new double[3]; datavalues[0] = DataToRealAxisPlot("Y", inpData[datapos1], WayType.INVALID, sensors[0].ChNo - 1, sensors[0].Target); datavalues[1] = DataToRealAxisPlot("Y", inpData[datapos2], WayType.INVALID, sensors[1].ChNo - 1, sensors[1].Target); datavalues[2] = DataToRealAxisPlot("Y", inpData[datapos3], WayType.INVALID, sensors[2].ChNo - 1, sensors[2].Target); double datascale = _DataScaleforEachObject[(int)target]; Point3D p1 = new Point3D(sensors[0].X * datascale, datavalues[0], sensors[0].Z * datascale); Point3D p2 = new Point3D(sensors[1].X * datascale, datavalues[1], sensors[1].Z * datascale); Point3D p3 = new Point3D(sensors[2].X * datascale, datavalues[2], sensors[2].Z * datascale); Vector3D v1 = new Vector3D(p2.X - p1.X, p2.Y - p1.Y, p2.Z - p1.Z); Vector3D v2 = new Vector3D(p3.X - p1.X, p3.Y - p1.Y, p3.Z - p1.Z); Vector3D crosssum = Vector3D.CrossProduct(v1, v2); double anglex = CalcAngleFromAxis("X", crosssum); double anglez = CalcAngleFromAxis("Z", crosssum); //trandata.OffsetY = Math.Max(Math.Max(datavalues[0], datavalues[1]), datavalues[2]); trandata.OffsetY = Math.Min(Math.Min(datavalues[0], datavalues[1]), datavalues[2]); trandata.RotationX = anglez - 90; trandata.RotationZ = anglex - 90; return trandata; } catch (Exception ex) { throw ex; } }
/// <summary> /// Create Translate Data /// </summary> /// <param name="inpData"></param> private void CreateTranslateData(double[] inpData) { try { TranslateData trandata = new TranslateData(); trandata.DataX = inpData[0]; for (int i = 0; i < 6; i++) { trandata = CreateTranslateDataY((TargetType)i, inpData); if (_SensorInfoX[i] != null) { int datapos = _SensorInfoX[i][0].ChNo; //Case 1 sensor if (_SensorInfoX[i].Count == 1) { trandata.OffsetX = CalcTranslatePlotX(_SensorInfoX[i][0], inpData[datapos], 1, datapos - 1); } //Case 2 sensor else if (_SensorInfoX[i].Count == 2) { TranslateData trantmp = CalcTwoSensorAxisX(_SensorInfoX[i][0], _SensorInfoX[i][1], inpData); trandata.OffsetX = trantmp.OffsetX; trandata.RotationY = trantmp.RotationY; } //Case 3 sensor else if (_SensorInfoX[i].Count == 3) { TranslateData trantmp = CalcTwoSensorAxisX(_SensorInfoX[i][0], _SensorInfoX[i][2], inpData); trandata.OffsetX = trantmp.OffsetX; trandata.RotationY = trantmp.RotationY; } if (_SensorXOppositeArrays[i] != null) { trandata.ScaleX = CalcOppositeSensorScaleXZ(_SensorXOppositeArrays[i], inpData, "X"); if (trandata.ScaleX == 0) trandata.ScaleZ = 0; else trandata.ScaleZ = 1; //trandata.OffsetX = trandata.OffsetX / trandata.ScaleX; } } if (_SensorInfoZ[i] != null) { int datapos = _SensorInfoZ[i][0].ChNo; //Case 1 sensor if (_SensorInfoZ[i].Count == 1) { trandata.OffsetZ = CalcTranslatePlotZ(_SensorInfoZ[i][0], inpData[datapos], 1, datapos - 1); } //Case 2 sensor else if (_SensorInfoZ[i].Count == 2) { TranslateData trantmp = CalcTwoSensorAxisZ(_SensorInfoZ[i][0], _SensorInfoZ[i][1], inpData); trandata.OffsetZ = trantmp.OffsetZ; trandata.RotationY = trantmp.RotationY; } //Case 3 sensor else if (_SensorInfoZ[i].Count == 3) { TranslateData trantmp = CalcTwoSensorAxisZ(_SensorInfoZ[i][0], _SensorInfoZ[i][2], inpData); trandata.OffsetZ = trantmp.OffsetZ; trandata.RotationY = trantmp.RotationY; } if (_SensorZOppositeArrays[i] != null) { trandata.ScaleZ = CalcOppositeSensorScaleXZ(_SensorZOppositeArrays[i], inpData, "Z"); //trandata.OffsetZ = trandata.OffsetZ / trandata.ScaleZ; if (trandata.ScaleZ == 0) trandata.ScaleX = 0; else trandata.ScaleX = 1; } } _TranslateData[i].Add(trandata); } } catch (Exception ex) { throw ex; } }