Esempio n. 1
0
        /// <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;
            }
        }
Esempio n. 2
0
        /// <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;
            }
        }
Esempio n. 3
0
        /// <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;
            }
        }
Esempio n. 4
0
        /// <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;
            }
        }
Esempio n. 5
0
        /// <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;
            }
        }