数控系统仿真软件,从linuxcnc移植过来的。主要程序的功能,必须直接来源于linuxcnc的源程序。不要自己编写。这是一条铁的纪律。持续推进
结论:已在 TP native probe 中新增直接调用 LinuxCNC tpAddCircle/tpRunCycle 的圆弧运动验证,并通过 native probes 全量验证。
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
|
||||
#include "emc/motion/motion.h"
|
||||
@@ -122,6 +123,79 @@ void run_linear_probe()
|
||||
<< final_pos.tran.z << "\n";
|
||||
}
|
||||
|
||||
void run_arc_probe()
|
||||
{
|
||||
init_motion_state();
|
||||
|
||||
TP_STRUCT tp{};
|
||||
EmcPose start{};
|
||||
EmcPose end{};
|
||||
PmCartesian center{};
|
||||
PmCartesian normal{};
|
||||
struct state_tag_t tag {};
|
||||
|
||||
start.tran.x = 1.0;
|
||||
end.tran.y = 1.0;
|
||||
normal.z = 1.0;
|
||||
|
||||
const int create_rc = tpCreate(&tp, TP_DEFAULT_QUEUE_SIZE, 2);
|
||||
const int set_cycle_rc = tpSetCycleTime(&tp, 0.001);
|
||||
const int set_pos_rc = tpSetPos(&tp, &start);
|
||||
const int set_vmax_rc = tpSetVmax(&tp, 1.0, 1.0);
|
||||
const int set_vlimit_rc = tpSetVlimit(&tp, 1.0);
|
||||
const int set_amax_rc = tpSetAmax(&tp, 10.0);
|
||||
const int set_term_rc = tpSetTermCond(&tp, TC_TERM_COND_STOP, 0.0);
|
||||
const int add_circle_rc = tpAddCircle(
|
||||
&tp,
|
||||
end,
|
||||
center,
|
||||
normal,
|
||||
0,
|
||||
EMC_MOTION_TYPE_ARC,
|
||||
1.0,
|
||||
1.0,
|
||||
10.0,
|
||||
100.0,
|
||||
status.enables_new,
|
||||
0,
|
||||
tag);
|
||||
|
||||
int cycle_rc = 0;
|
||||
int cycles = 0;
|
||||
for (; cycles < 10000 && !tpIsDone(&tp); ++cycles) {
|
||||
cycle_rc = tpRunCycle(&tp, 1000000);
|
||||
if (cycle_rc < 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
EmcPose final_pos{};
|
||||
const int get_pos_rc = tpGetPos(&tp, &final_pos);
|
||||
const int near_end =
|
||||
std::fabs(final_pos.tran.x - end.tran.x) < 1e-9 &&
|
||||
std::fabs(final_pos.tran.y - end.tran.y) < 1e-9 &&
|
||||
std::fabs(final_pos.tran.z - end.tran.z) < 1e-9;
|
||||
|
||||
std::cout << "tp_arc_create=" << create_rc << "\n";
|
||||
std::cout << "tp_arc_set_cycle_time=" << set_cycle_rc << "\n";
|
||||
std::cout << "tp_arc_set_pos=" << set_pos_rc << "\n";
|
||||
std::cout << "tp_arc_set_vmax=" << set_vmax_rc << "\n";
|
||||
std::cout << "tp_arc_set_vlimit=" << set_vlimit_rc << "\n";
|
||||
std::cout << "tp_arc_set_amax=" << set_amax_rc << "\n";
|
||||
std::cout << "tp_arc_set_term_cond=" << set_term_rc << "\n";
|
||||
std::cout << "tp_add_circle=" << add_circle_rc << "\n";
|
||||
std::cout << "tp_arc_cycle_rc=" << cycle_rc << "\n";
|
||||
std::cout << "tp_arc_cycles=" << cycles << "\n";
|
||||
std::cout << "tp_arc_get_pos=" << get_pos_rc << "\n";
|
||||
std::cout << "tp_done_after_arc=" << tpIsDone(&tp) << "\n";
|
||||
std::cout << "tp_arc_queue_depth=" << tpQueueDepth(&tp) << "\n";
|
||||
std::cout << "tp_arc_final_pos_near_end=" << near_end << "\n";
|
||||
std::cout << "tp_arc_final_pos="
|
||||
<< final_pos.tran.x << ","
|
||||
<< final_pos.tran.y << ","
|
||||
<< final_pos.tran.z << "\n";
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
@@ -142,5 +216,6 @@ int main()
|
||||
std::cout << "tc_circular=" << TC_CIRCULAR << "\n";
|
||||
std::cout << "pose_xyz=" << pose.tran.x << "," << pose.tran.y << "," << pose.tran.z << "\n";
|
||||
run_linear_probe();
|
||||
run_arc_probe();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -95,6 +95,9 @@ grep -Fq "tp_set_cycle_time=0" "$TP_API_STDOUT"
|
||||
grep -Fq "tp_add_line=0" "$TP_API_STDOUT"
|
||||
grep -Fq "tp_done_after_line=1" "$TP_API_STDOUT"
|
||||
grep -Fq "tp_final_pos=1,0,0" "$TP_API_STDOUT"
|
||||
grep -Fq "tp_add_circle=0" "$TP_API_STDOUT"
|
||||
grep -Fq "tp_done_after_arc=1" "$TP_API_STDOUT"
|
||||
grep -Fq "tp_arc_final_pos_near_end=1" "$TP_API_STDOUT"
|
||||
|
||||
check_fixture_output() {
|
||||
local fixture="$1"
|
||||
|
||||
Reference in New Issue
Block a user