<h3>特定情况下立式双转台机床输出坐标点错误的解决办法</h3><h3>近日发现在构建立式双转台(海德汉系统)后处理时会出现某些错误。在这里先和大家分享一个关于使用同一把刀具两次操作,先加工双角度倾斜面后加工XY平面时坐标值错误的解决办法。</h3><h3>当我们同时后处理同一刀具的两个定轴操作时,如果前一个操作所加工的平面是双角度(第四第五轴同时参与转角,只在这个特定的情况下会产生错误)会得到下图所示结果。</h3> <h3>我们可以看到操作4是在XY平面上产生的直径为56mm的刀轨,并且刀轨的起点在X轴的正方向,但是所生成的程序有着明显的错误,在56行我们可以看到快速定位在B0 C-45的位置而不是我们想要的B0 C0。并且后续输出刀轨的坐标点也随着前面角度定位而做了余弦运算,在第60行的程序圆弧的起点本应该是X28 Y0,结果输出的是X19.799 Y19.799,显然不是我们想要的结果。遇到这种情况大致有三种解决方法:</h3><h3>1. 将加工XY平面的所有程序放在最前端,123做XY平面,456做其他摆角定轴。</h3><h3>2. 将加工XY平面的程序单独放在子坐标系下,或者单独生成该程序。</h3><h3>3. 修改后置处理。</h3><h3> </h3><h3>前两种方法可以很容易的避免上面的错误发生,但是需要每次遇到这种情况都需要我们处理,万一疏忽就会犯错。下面我和大家分享一下通过修改后置处理的方法来修正这个问题。</h3><h3>首先用后处理构造器打开我们要修改的PUI文件;</h3><h3>程序和刀轨制定命令创建;新建一条名为PB_CMD_custom_command_2的命令</h3><h3>在右侧添加如下命令,(图片不太清晰,我在下面用文本方式将代码写下来)</h3> <h3>代码:</h3><h3> global mom_kin_machine_type</h3><h3> global save_mom_kin_machine_type</h3><h3> global mom_pos mom_mcs_goto</h3><h3> global mom_cycle_spindle_axis</h3><h3> global dpp_ge</h3><h3> global seq</h3><h3> global mom_out_angle_pos mom_prev_out_angle_pos</h3><h3> global coord_rot_angle</h3><h3> global dpp_TNC_plane_change_in_rapid</h3><h3> global mom_result</h3><h3> global mom_tool_axis</h3><h3> </h3><h3> if { ![string match "*5_axis*" $mom_kin_machine_type] } {</h3><h3>return</h3><h3> }</h3><h3> </h3><h3> if { $dpp_ge(toolpath_axis_num)=="5" } {</h3><h3>return</h3><h3> }</h3><h3> </h3><h3> if {[info exists dpp_ge(ncm_work_plane_change_mode)] && </h3><h3> ($dpp_ge(ncm_work_plane_change_mode) != "None" && $dpp_ge(ncm_work_plane_change_mode) != "direct_change")} {</h3><h3>return</h3><h3> }</h3><h3> </h3><h3> set dpp_ge(coord_rot) [DPP_GE_COOR_ROT "ZYX" coord_rot_angle coord_offset pos]</h3><h3> </h3><h3> if { $dpp_ge(coord_rot) == "NONE" } {</h3><h3> if {![info exists mom_prev_out_angle_pos(0)] || ![info exists mom_prev_out_angle_pos(1)]} {</h3><h3>return</h3><h3> }</h3><h3> </h3><h3> if {![EQ_is_equal $mom_out_angle_pos(0) $mom_prev_out_angle_pos(0)] || ![EQ_is_equal $mom_out_angle_pos(1) $mom_prev_out_angle_pos(1)]} {</h3><h3> MOM_output_literal "PLANE RESET STAY"</h3><h3> </h3><h3> DPP_GE_RESTORE_KINEMATICS</h3><h3> </h3><h3> if {"1" == [MOM_convert_point mom_mcs_goto mom_tool_axis]} {</h3><h3> set i 0</h3><h3> foreach value $mom_result {</h3><h3> set mom_pos($i) $value</h3><h3> incr i</h3><h3> }</h3><h3> }</h3><h3> set mom_pos(0) $mom_mcs_goto(0)</h3><h3> set mom_pos(1) $mom_mcs_goto(1)</h3><h3> set mom_pos(2) $mom_mcs_goto(2)</h3><h3> set mom_out_angle_pos(0) $coord_rot_angle(0)</h3><h3> set mom_out_angle_pos(1) $coord_rot_angle(1)</h3><h3> set mom_out_angle_pos(2) $coord_rot_angle(2)</h3><h3> }</h3><h3>return</h3><h3> }</h3> <h3>建立好命令后,我们在程序和刀轨程序运动线性移动/圆周移动/快速移动这三项中分别添加我们刚才制订的命令。</h3> <h3>修改完成保存文件。</h3><h3>接下来用我们修改过的后置文件生成一下刚才的刀路。</h3> <h3>OK,目的达到,朋友们也可以自定义输出条件,只在特定的情况下重置地址</h3><h3><br /></h3><h3><br /></h3> <h3>此贴为新手技术分享贴,意在同大家共同学习,高手绕行</h3><h3><br /></h3><h3>明威科技--陈乃新</h3>