在LinuxCNC中,control.c源代码中使用了多个EMCMOT_MOTION_*状态,它们定义了运动控制的不同模式。这些模式用于控制运动组件的行为。以下是每个模式的详细解释:
1. EMCMOT_MOTION_FREE
EMCMOT_MOTION_FREE 表示自由运动模式。在这个模式下,每个关节都是分离的,允许关节自由移动。
代码示例
case EMCMOT_MOTION_FREE:
// 所有关节运动,采用simple_tp轨迹规划
for (joint_num = 0; joint_num < ALL_JOINTS; joint_num++) {
// 规划位置
simple_tp_update(&(joint->free_tp), servo_period );
}
// 将关节位置转换为笛卡尔坐标系位置
kinematicsForward(positions, &emcmotStatus->carte_pos_cmd, &fflags, &iflags);
break;
2. EMCMOT_MOTION_COORD
EMCMOT_MOTION_COORD 表示协调运动模式。在这个模式下,运动轴按照G代码指令协调运动。这是标准的运动控制模式,用于执行复杂的多轴运动,例如铣削或车削操作。
代码示例
case EMCMOT_MOTION_COORD:
// 按照G代码指令协调运动
while (cubicNeedNextPoint(&(joints[0].cubic))) {
/* run coordinated trajectory planning cycle */
tpRunCycle(&emcmotInternal->coord_tp, period);
/* get new commanded traj pos */
tpGetPos(&emcmotInternal->coord_tp, &emcmotStatus->carte_pos_cmd);
/* OUTPUT KINEMATICS - convert to joints in local array */
result = kinematicsInverse(&emcmotStatus->carte_pos_cmd, positions,
&iflags, &fflags);
}
break;
3. EMCMOT_MOTION_TELEOP
EMCMOT_MOTION_TELEOP 表示遥控模式。在这个模式下,运动轴由手动控制设备(如手持控制器或操作面板)直接控制。这通常用于手动操作或调试机器。
代码示例
case EMCMOT_MOTION_TELEOP:
// 从手动控制设备获取指令
for (int i = 0; i < num_axes; i++) {
// 读取手动控制输入
axis_sync_carte_pos_to_teleop_tp(+1, pcmd_p); // teleop
/* OUTPUT KINEMATICS - convert to joints in local array */
result = kinematicsInverse(&emcmotStatus->carte_pos_cmd, positions, &iflags, &fflags);
}
break;
4. EMCMOT_MOTION_DISABLED
EMCMOT_MOTION_DISABLED 表示禁用运动模式。在这个模式下,所有运动功能被禁用,运动轴处于锁定状态。通常用于安全原因或系统初始化阶段。
代码示例
case EMCMOT_MOTION_DISABLED:
/* set position commands to match feedbacks, this avoids
disturbances and/or following errors when enabling */
emcmotStatus->carte_pos_cmd = emcmotStatus->carte_pos_fb;
for (joint_num = 0; joint_num < ALL_JOINTS; joint_num++) {
/* point to joint struct */
joint = &joints[joint_num];
/* save old command */
joint->pos_cmd = joint->pos_fb;
/* set joint velocity and acceleration to zero */
joint->vel_cmd = 0.0;
joint->acc_cmd = 0.0;
}
break;
总结
在LinuxCNC的control.c源代码中,这些EMCMOT_MOTION_*状态用于控制运动组件的行为:
EMCMOT_MOTION_FREE:自由运动模式,单独控制每个关节的运动。EMCMOT_MOTION_COORD:协调运动模式,按照G代码指令进行多轴协调运动。EMCMOT_MOTION_TELEOP:遥控模式,由手动控制设备直接控制运动轴。EMCMOT_MOTION_DISABLED:禁用运动模式,所有运动功能被禁用。
每个模式都有其特定的用途和行为,确保系统在不同的操作条件下能够正确控制运动轴。

被折叠的 条评论
为什么被折叠?



