/// <summary> /// 回零 /// </summary> /// <param name="axisNo"></param> /// <param name="homeMode">回原点方式</param> /// <param name="DirMode">0:DIR_CW,1:DIR_CCW</param> public override void BackHome(short axisNo, short HomeMode, short Org, short Ez, short EZcount, short erc , VelocityCurve velocityCurveParams, double ORGOffset, uint DirMode) { //设置速度 SetAxisHomeVelocity(axisNo, velocityCurveParams); Motion.mAcm_AxHome(m_Axises[axisNo], (uint)HomeMode, DirMode); }
/// <summary> /// 单轴绝对运动 /// </summary> /// <param name="axisNo"></param> /// <param name="position"></param> /// <param name="velocityCurveParams"></param> public override void AbsoluteMove(short axisNo, double position, VelocityCurve velocityCurveParams) { //设置速度 SetAxisVelocity(axisNo, velocityCurveParams); //启动运动 Motion.mAcm_AxMoveAbs(m_Axises[axisNo], position); }
/// <summary> /// 设置轴速度 /// </summary> /// <param name="axisNo"></param> /// <param name="pulseNum"></param> /// <param name="velocityCurveParams"></param> public void SetAxisHomeVelocity(int axisNo, VelocityCurve velocityCurveParams) { var ret = Motion.mAcm_SetF64Property(m_Axises[axisNo], (uint)PropertyID.PAR_AxVelLow, velocityCurveParams.Strvel); if (ret != (uint)ErrorCode.SUCCESS) { return; } ret = Motion.mAcm_SetF64Property(m_Axises[axisNo], (uint)PropertyID.PAR_AxVelHigh, velocityCurveParams.Maxvel); if (ret != (uint)ErrorCode.SUCCESS) { return; } ret = Motion.mAcm_SetF64Property(m_Axises[axisNo], (uint)PropertyID.PAR_AxAcc, velocityCurveParams.Tacc); if (ret != (uint)ErrorCode.SUCCESS) { return; } ret = Motion.mAcm_SetF64Property(m_Axises[axisNo], (uint)PropertyID.PAR_AxDec, velocityCurveParams.Tdec); if (ret != (uint)ErrorCode.SUCCESS) { return; } ret = Motion.mAcm_SetF64Property(m_Axises[axisNo], (uint)PropertyID.PAR_AxJerk, (int)velocityCurveParams.VelocityCurveType); if (ret != (uint)ErrorCode.SUCCESS) { return; } }
/// <summary> /// 反向移动。 /// </summary> public override void Negative() { var velocityCurve = new VelocityCurve { Maxvel = (Speed ?? 0) * Transmission.EquivalentPulse }; ApsController.ContinuousMove(NoId, MoveDirection.Negative, velocityCurve); }
/// <summary> /// 单轴绝对运动 /// </summary> /// <param name="axisNo"></param> /// <param name="pulseNum"></param> /// <param name="velocityCurveParams"></param> public void MoveAbsPulse(int axisNo, int pulseNum, VelocityCurve velocityCurveParams) { //设置速度 SetAxisVelocity(axisNo, velocityCurveParams); //启动运动 APS168.APS_absolute_move(axisNo, pulseNum, (int)velocityCurveParams.Maxvel); }
/// <summary> /// 运动轴相对移动到指定位置。 /// </summary> /// <param name="value">要移动到的距离。</param> /// <param name="velocityCurve"></param> public override void MoveDelta(double value, VelocityCurve velocityCurve = null) { if (!isCondition) { return; } ApsController.RelativeMove(NoId, (int)value, velocityCurve); }
/// <summary> /// 单轴相对运动 /// </summary> /// <param name="axisNo"></param> /// <param name="pulseNum"></param> /// <param name="velocityCurveParams"></param> /// <returns></returns> public override void RelativeMove(short axisNo, double position, VelocityCurve velocityCurveParams) { //设置速度 SetAxisVelocity(axisNo, velocityCurveParams); //启动运动 APS168.APS_relative_move(axisNo, (int)position, (int)velocityCurveParams.Maxvel); }
/// <summary> /// 单轴绝对运动 /// </summary> /// <param name="axisNo"></param> /// <param name="pulseNum"></param> /// <param name="velocityCurveParams"></param> public override void AbsoluteMove(short axisNo, double pulseNum, VelocityCurve velocityCurveParams) { //设置速度 SetAxisVelocity(axisNo, velocityCurveParams); //启动运动 APS168.APS_absolute_move(axisNo, (int)pulseNum, (int)velocityCurveParams.Maxvel); }
/// <summary> /// 运动轴相对移动到指定位置。 /// </summary> /// <param name="value">要移动到的距离。</param> /// <param name="velocityCurve"></param> public override void MoveDelta(double value, VelocityCurve velocityCurve = null) { var Data = value * Transmission.EquivalentPulse; var velocity = velocityCurve; velocity.Maxvel = velocityCurve.Maxvel * Transmission.EquivalentPulse; ApsController.MoveRelPulse(NoId, (int)Data, velocity); velocity.Maxvel /= Transmission.EquivalentPulse; }
private void SetAxisVelocity(int axisNo, VelocityCurve velocityCurveParams) { //设置速度 //if (velocityCurveParams.Sfac != 0) //{ //SetAxisParam(axisNo, (int) APS_Define.PRA_SF, velocityCurveParams.Sfac); SetAxisParam(axisNo, (int)APS_Define.PRA_ACC, velocityCurveParams.Svacc); SetAxisParam(axisNo, (int)APS_Define.PRA_DEC, velocityCurveParams.Svdec); //} }
public override void BackHome(short axisNo, short HomeMode, short Org, short Ez, short EZcount, short erc , VelocityCurve velocityCurveParams, double ORGOffset, uint DirMode) { var ret = Motion._8164_set_home_config(axisNo, HomeMode, Org, Ez, EZcount, erc); ThrowIfResultError(ret); ret = Motion._8164_home_search(axisNo, velocityCurveParams.Strvel, velocityCurveParams.Maxvel, velocityCurveParams.Tacc, ORGOffset); ThrowIfResultError(ret); }
private void button1_Click(object sender, EventArgs e) { try { var velocityCurve = new VelocityCurve { Maxvel = m_Axis.Speed ?? 0 }; double Value = Convert.ToDouble(textBox1.Text); m_Axis.MoveTo(Value, velocityCurve); } catch { } }
private void btnZdec_Click(object sender, EventArgs e) { if (moveSelectHorizontal1.MoveMode.Continue || Global.IsLocating) { return; } var velocityCurve = new VelocityCurve { Maxvel = m_Zaxis.Speed ?? 0 }; m_Zaxis.MoveDelta(-1 * moveSelectHorizontal1.MoveMode.Distance, velocityCurve); }
/// <summary> /// 反向移动。 /// </summary> public override void Negative() { if (!isCondition) { return; } var velocityCurve = new VelocityCurve { Strvel = VelocityCurveRun.Strvel, Maxvel = (Speed ?? 0) * 10000, Tacc = VelocityCurveRun.Tacc }; ApsController.ContinuousMove(NoId, MoveDirection.Negative, velocityCurve); }
private void btnRYadd_Click(object sender, EventArgs e) { if (moveSelectHorizontal1.MoveMode.Continue || Global.IsLocating) { return; } var velocityCurve = new VelocityCurve { Maxvel = Station1.RYaxisServo.Speed ?? 0 }; Station1.RYaxisServo.MoveDelta(1 * moveSelectHorizontal1.MoveMode.Distance, velocityCurve); }
public static VelocityCurve Parse(string str) { string[] strValue = str.Split(','); var velocityCurve = new VelocityCurve(); velocityCurve.Strvel = double.Parse(strValue[0]); velocityCurve.Maxvel = double.Parse(strValue[1]); velocityCurve.Tacc = double.Parse(strValue[2]); velocityCurve.Tdec = double.Parse(strValue[3]); velocityCurve.Svacc = double.Parse(strValue[4]); velocityCurve.Svdec = double.Parse(strValue[5]); velocityCurve.Sfac = double.Parse(strValue[6]); velocityCurve.VelocityCurveType = (CurveTypes)(byte.Parse(strValue[7])); return(velocityCurve); }
public override void AbsoluteMove(short axisNo, double position, VelocityCurve velocityCurveParams) { bool sStart = CurveTypes.S == velocityCurveParams.VelocityCurveType; if (sStart) { var ret = Motion._8164_start_ta_move(axisNo, position, velocityCurveParams.Strvel, velocityCurveParams.Maxvel, velocityCurveParams.Tacc, velocityCurveParams.Tdec); ThrowIfResultError(ret); } else { var ret = Motion._8164_start_sa_move(axisNo, position, velocityCurveParams.Strvel, velocityCurveParams.Maxvel, velocityCurveParams.Tacc, velocityCurveParams.Tdec, velocityCurveParams.Svacc, velocityCurveParams.Svdec); ThrowIfResultError(ret); } }
/// <summary> /// 两轴做插补相对移动 /// </summary> /// <param name="axisNo1">轴1ID</param> /// <param name="axisNo2">轴2ID</param> /// <param name="pulseNum1">坐标1</param> /// <param name="pulseNum2">坐标2</param> /// <param name="velocityCurveParams">速度参数</param> public void MoveLine2Relative(int axisNo1, int axisNo2, int pulseNum1, int pulseNum2, VelocityCurve velocityCurveParams) { var axis = new int[2]; var pos = new int[2]; axis[0] = axisNo1; axis[1] = axisNo2; pos[0] = pulseNum1; pos[1] = pulseNum2; //设置速度 SetAxisVelocity(axisNo1, velocityCurveParams); //启动运动 APS168.APS_relative_linear_move(2, axis, pos, (int)velocityCurveParams.Maxvel); }
/* Returns the orbital velocity in degrees per year. * param rad Radius in parsec */ double GetOrbitalVelocity(double rad) { double vel_kms; // velocity in kilometer per seconds // with dark matter vel_kms = VelocityCurve.v(rad); // without dark matter: // vel_kms = VelocityCurve.vd(rad); // Calculate velocity in degree per year double u = 2 * Math.PI * rad * PC_TO_KM; double time = u / (vel_kms * SEC_PER_YEAR); return(360.0 / time); }
/// <summary> /// 两轴直线插补轨迹移动 /// </summary> /// <param name="axisNo1">轴1ID</param> /// <param name="axisNo2">轴2ID</param> /// <param name="pulseNum1">坐标1</param> /// <param name="pulseNum2">坐标2</param> /// <param name="velocityCurveParams">速度参数</param> /// <param name="Option">位集指定选项,该选项可以启用指定的参数和函数。</param> public void MoveLine2(int axisNo1, int axisNo2, double pulseNum1, double pulseNum2, VelocityCurve velocityCurveParams, int Option) { var axis = new int[2]; var pos = new double[2]; double TransPara = 0; ASYNCALL wait = new ASYNCALL(); //A waiting call axis[0] = axisNo1; axis[1] = axisNo2; pos[0] = pulseNum1; pos[1] = pulseNum2; //设置速度 SetAxisVelocity(axisNo1, velocityCurveParams); //启动运动 APS168.APS_line_all(2, axis, Option, pos, ref TransPara, velocityCurveParams.Strvel, velocityCurveParams.Maxvel, velocityCurveParams.Strvel, velocityCurveParams.Svacc, velocityCurveParams.Svdec, velocityCurveParams.Sfac, ref wait); }
private void btnJogAdd_Click(object sender, EventArgs e) { if (MoveMode.Continue) { return; } if (!m_Axis.IsDone) { return; } var Value = (double)(MoveMode.Distance); Value *= 1; var velocityCurve = new VelocityCurve { Maxvel = m_Axis.Speed * m_Axis.Transmission.EquivalentPulse ?? 0 }; m_Axis.MoveDelta(Value, velocityCurve); }
private void btnJogAdd_Click(object sender, EventArgs e) { if (MoveMode.Continue) { return; } if (!m_Axis.IsDone) { return; } var Value = MoveMode.Distance; Value *= 1; var velocityCurve = new VelocityCurve { Maxvel = m_Axis.Speed ?? 0 }; m_Axis.MoveDelta(Value, velocityCurve); }
public void Execute(Entity entity, int index, DynamicBuffer <VelocityCurveBuffer> velocityCurveBuffer, ref PhysicsVelocity physicsVelocity) { float3 newVelocity = new float3(0, 0, 0); for (int i = 0; i < velocityCurveBuffer.Length; i++) { VelocityCurveBuffer velocityCurveBufferElement = velocityCurveBuffer[i]; VelocityCurve velocityCurve = VelocityCurveGroup[velocityCurveBufferElement.VelocityCurveEntity]; newVelocity.x += velocityCurve.X.CurrentVelocity; newVelocity.y += velocityCurve.Y.CurrentVelocity; newVelocity.z += velocityCurve.Z.CurrentVelocity; } physicsVelocity.Linear = newVelocity; //Clear the buffer velocityCurveBuffer.Clear(); }
/// <summary> /// 运动轴轴移动到指定的位置。 /// </summary> /// <param name="value">将要移动到的位置。</param> /// <param name="velocityCurve">移动时的运行参数。</param> public override void MoveTo(double value, VelocityCurve velocityCurve = null) { if (!isCondition) { return; } var Data = value * Transmission.EquivalentPulse; var velocity = velocityCurve; velocity.Strvel = VelocityCurveRun.Strvel; if (VelocityCurveRun.Tacc >= 50000000) { velocity.Tacc = 50000000; velocity.Tdec = 50000000; } else { velocity.Tacc = VelocityCurveRun.Tacc; velocity.Tdec = VelocityCurveRun.Tacc; } velocity.Maxvel = velocityCurve.Maxvel * Transmission.EquivalentPulse; ApsController.AbsoluteMove(NoId, (int)Data, velocity); }
/// <summary> /// 线性差补方式运动。 /// </summary> /// <param name="axisNo1"></param> /// <param name="axisNo2"></param> /// <param name="pulseNum1"></param> /// <param name="pulseNum2"></param> /// <param name="velocityCurve"></param> public void MoveLine(int axisNo1, int axisNo2, int pulseNum1, int pulseNum2, VelocityCurve velocityCurve) { throw new NotImplementedException(); }
/// <summary> /// 直线插补/插补 /// </summary> public void Line2Interpolation(short CardNo, short axisNoX, double posX, double posY, VelocityCurve velocityCurveParams) { }
/// <summary> /// 两轴圆弧插补绝对移动(方向) /// </summary> /// <param name="axisNo">轴ID</param> /// <param name="CX">圆心坐标X</param> /// <param name="CY">圆心坐标Y</param> /// <param name="EX">终点坐标X</param> /// <param name="EY">终点坐标Y</param> /// <param name="Direction">0:DIR_CW,1:DIR_CCW</param> /// <param name="velocityCurveParams">速度参数</param> public void MoveArc2Absolute(int axisNo, double CX, double CY, double EX, double EY, short Direction, VelocityCurve velocityCurveParams) { var Cpos = new double[2]; var Epos = new double[2]; uint pArrayElements = 2; Cpos[0] = CX; Cpos[1] = CY; Epos[0] = EX; Epos[1] = EY; //设置速度 SetAxisVelocity(axisNo, velocityCurveParams); //启动运动 Motion.mAcm_GpMoveCircularAbs(m_Axises[axisNo], Cpos, Epos, ref pArrayElements, Direction); }
/// <summary> /// 两轴直线插补绝对移动 /// </summary> /// <param name="axisNo">轴ID</param> /// <param name="position1">坐标1</param> /// <param name="position2">坐标2</param> /// <param name="velocityCurveParams">速度参数</param> public void MoveLine2Absolute(int axisNo, double position1, double position2, VelocityCurve velocityCurveParams) { var pos = new double[2]; uint pArrayElements = 2; pos[0] = position1; pos[1] = position2; //设置速度 SetAxisVelocity(axisNo, velocityCurveParams); //启动运动 Motion.mAcm_GpMoveDirectAbs(m_Axises[axisNo], pos, ref pArrayElements); }
/// <summary> /// 连续运动 /// </summary> /// <param name="axisNo"></param> /// <param name="moveDirection"></param> /// <param name="velocityCurveParams"></param> /// <returns></returns> public override void ContinuousMove(short axisNo, MoveDirection moveDirection, VelocityCurve velocityCurveParams) { SetAxisVelocity(axisNo, velocityCurveParams); Motion.mAcm_AxMoveVel(m_Axises[axisNo], (ushort)moveDirection); }
/// <summary> /// 直线插补/插补 /// </summary> public void Line3Interpolation(short CardNo, double posX, double posY, double posZ, VelocityCurve velocityCurveParams) { }