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)); }
/// <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); }
/// <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); }
/// <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); }