Ejemplo n.º 1
0
        public static double GetNowLocation(VectorId axis, ParameterManager param)
        {
            int counter = new int();

            Apci59.DataFullRead(ApciM59.SlotNo, (short)axis, Apci59.EXTERNAL_COUNTER_READ, ref counter);
            counter = ((counter & 0x8000000) > 0 ? counter | 0xF000000 : counter);
            return(counter * param.EncoderResolution.Index(axis));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// モータの速度を設定します.
        /// </summary>
        /// <param name="speed">速度</param>
        /// <param name="axis">方向</param>
        /// <param name="param">ソフトウェア全体を通して用いるParameterManagerインスタンス</param>
        public static void SetMotorSpeed(double speed, VectorId axis, ParameterManager param)
        {
            double oSpddt = speed;
            double sSpddt;
            short  spdt;
            short  oSdt;
            double at;
            double dt;
            double resolution          = 0;
            double f                   = 0;
            double range               = 0;
            short  rangeDifferenceTime = 0;

            // Range Dataの設定
            resolution = param.MotorResolution.Index(axis);
            f          = oSpddt / resolution;
            range      = (4000000 / f) + 0.5;
            if (range > 8191)
            {
                rangeDifferenceTime = (short)range;
            }
            else if (range < 1)
            {
                rangeDifferenceTime = 1;
            }
            ApciM59.SetRange(axis, rangeDifferenceTime);

            // START_STOP_SPEED_DATAの作成
            sSpddt = param.MotorInitialVelocity.Index(axis);
            spdt   = (short)((int)(((sSpddt / resolution) / (500 / rangeDifferenceTime)) + 0.5) & 0x1FFF);
            ApciM59.SetStartStopSpeed(axis, spdt);

            // 速度を設定(ObjectSpeed)
            oSdt = (short)((int)(((oSpddt / resolution) / (500 / rangeDifferenceTime)) + 0.5) & 0x1FFF);
            ApciM59.SetObjectSpeed(axis, oSdt);

            // RATE1_DATAの作成
            if ((oSdt - spdt) > 1)
            {
                at = (oSpddt - sSpddt) / param.MotorAccelTime.Index(axis);
                dt = (2048000 / (oSdt - spdt)) * at;
                dt = (dt > 8191 ? 8191 : dt);
            }
            else
            {
                dt = 8191;
            }

            ApciM59.SetRate1(axis, (short)dt);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 取り出します.
        /// </summary>
        /// <param name="vectorId">方向</param>
        /// <returns>引数で与えられた方向の値</returns>
        public double Index(VectorId vectorId)
        {
            double val = 0;

            switch ((int)vectorId)
            {
            case (int)VectorId.X:
                val = X;
                break;

            case (int)VectorId.Y:
                val = Y;
                break;
            }

            return(val);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 特定方向の成分を取り出します.
        /// </summary>
        /// <param name="vectorId">方向</param>
        /// <returns>引数で与えられた方向の値</returns>
        public int Index(VectorId vectorId)
        {
            int val = 0;

            switch ((int)vectorId)
            {
            case (int)VectorId.X:
                val = X;
                break;

            case (int)VectorId.Y:
                val = Y;
                break;

            case (int)VectorId.Z:
                val = Z;
                break;
            }

            return(val);
        }