private double? CalcOppositeSensorScaleXZ(SensorOpposite senserOpposite, double[] inputData, string axisName) { double? scalex = null; if (senserOpposite != null) { if (senserOpposite.SensorList0.Count == 1 && senserOpposite.SensorList1.Count == 1) { int index0 = senserOpposite.SensorList0[0].ChNo - 1; int index1 = senserOpposite.SensorList1[0].ChNo - 1; double data0 = inputData[index0 + 1]; double data1 = inputData[index1 + 1]; double datahigh0 = _SensorsHighValue[index0] - _SensorsLowValue[index0]; double datahigh1 = _SensorsHighValue[index1] - _SensorsLowValue[index1]; if (datahigh0 <= 0) datahigh0 = _DefaultDataHigh; if (datahigh1 <= 0) datahigh1 = _DefaultDataHigh; //double x0 = data0 - _SensorsLowValue[index0]; //double x1 = data1 - _SensorsLowValue[index1]; double x0 = (_MaxOffsetY / datahigh0) * (data0 - _SensorsLowValue[index0]); double x1 = (_MaxOffsetY / datahigh1) * (data1 - _SensorsLowValue[index1]); if (axisName == "X") { if (senserOpposite.SensorList0[0].Way == WayType.RIGHT) x0 *= -1; if (senserOpposite.SensorList1[0].Way == WayType.RIGHT) x1 *= -1; } else if (axisName == "Z") { if (senserOpposite.SensorList0[0].Way == WayType.DOWN) x0 *= -1; if (senserOpposite.SensorList1[0].Way == WayType.DOWN) x1 *= -1; } //double distance = senserOpposite.Distance + ((x1 - x0) / 1000); double distance = senserOpposite.Distance + (x1 - x0); if (distance < 0) distance = 0; scalex = Math.Abs(distance / senserOpposite.Distance); if (scalex > _MaxScaleXZ) scalex = _MaxScaleXZ; } } return scalex; }
private void OppositeSensorCalulation(List<SensorPosition>[] senPosList) { bool isx = false; for (int i = 0; i < senPosList.Length; i++) { List<SensorPosition> senposleft = new List<SensorPosition>(); List<SensorPosition> senposright = new List<SensorPosition>(); if (senPosList[i] != null) { if (senPosList[i].Count > 1) { foreach (SensorPosition senpos in senPosList[i]) { if (senpos.Way == WayType.LEFT) { senposleft.Add(senpos); isx = true; } else if (senpos.Way == WayType.RIGHT) { senposright.Add(senpos); isx = true; } else if (senpos.Way == WayType.UP) { senposright.Add(senpos); isx = false; } else if (senpos.Way == WayType.DOWN) { senposright.Add(senpos); isx = false; } } } if (senposleft.Count > 0 && senposright.Count > 0) { SensorOpposite[] senopposite = null; if (isx) senopposite = _SensorXOppositeArrays; else senopposite = _SensorZOppositeArrays; if (senopposite[i] == null) senopposite[i] = new SensorOpposite(); senopposite[i].SensorList0 = senposleft; senopposite[i].SensorList1 = senposright; //if (isx) // senopposite[i].Distance = senposright[0].X - senposleft[0].X; //else // senopposite[i].Distance = senposright[0].Z - senposleft[0].Z; Model3DGroup upgroup = _MachineModel.UpperPartModel3DGroup.Children[0] as Model3DGroup; Model3DGroup downgroup = _MachineModel.LowerPartModel3DGroup.Children[0] as Model3DGroup; TargetType target = senposright[0].Target; Model3D model = null; double objectwidth = 0; if (target == TargetType.STRIPPER) model = upgroup.Children[3]; else if (target == TargetType.UPPER_PRESS) model = upgroup.Children[2]; else if (target == TargetType.UPPER) model = upgroup.Children[1]; else if (target == TargetType.LOWER) model = downgroup.Children[1]; else if (target == TargetType.LOWER_PRESS) model = downgroup.Children[2]; if (isx) { objectwidth = model.Bounds.SizeX; } else { objectwidth = model.Bounds.SizeZ; } senopposite[i].Distance = objectwidth; } } } }