[后处理下载][案例分析]按组批处理并生成主程序调用子程序
本帖最后由 destiny0515 于 2020-7-9 20:05 编辑上期分享了以工序为单位批处理的思路:
后处理中的实用技巧——以工序(OPERATION)为单位的批处理http://www.ugsnx.com/thread-288149-1-1.html(出处: UG爱好者)
只需简单几个步骤,实现主程序对子程序的调用,输出M98PXXXXhttp://www.ugsnx.com/thread-288190-1-1.html(出处: UG爱好者)
蜗牛很高兴,收到了很多的反馈,其中有非常多的声音在问能否按组输出——
当然是可以的
实际上构造器是包含这样的功能 不过也因种种原因,许多人不喜欢这种方式
本文以一个新的角度解析,如何以程序组为单位生成子程序,并通过主程序调用
思路分析既然要按组输出,那么有两个过程是要重点关注的——MOM_start_of_groupMOM_end_of_group见名知意,它们参与了组的开始与结束。这两个过程必须要经过一番修改才能符合题目的需求。不过问题来了,PB(PostBuilder)不直接提供它们的修改方式。怎么解决呢?不妨将思路展开一点途径一.可以直接改写后处理的tcl文件,缺点很明显,后期无法再用PB维护。途径二.改写ugpost_base.tcl文件,比第一种方法还要笨重。途径三.写外部脚本,覆盖原有的过程。经过对比发现,途径三虽然会多一个脚本文件,但是灵活性和稳定性是最高的。
动手实践PB中提供外部脚本的功能勾选选框需要手动建立脚本文件,输入代码proc MOM_start_of_group {} {
global mom_group_name group_level mom_sys_output_file_suffix
global mom_sequence_number mom_sequence_increment mom_sequence_frequency
global pb_start_of_program_flag ptp_file_name
global group_list mom_output_file_directory
if { ! } {
set group_level 0
MOM_close_output_file $ptp_file_name
return
}
if { } {
incr group_level
} else {
set group_level 1
}
if { $group_level > 1 } {
return
}
lappend group_list $mom_group_name
SEQNO_RESET ; #<4133654>
MOM_reset_sequence $mom_sequence_number $mom_sequence_increment $mom_sequence_frequency
MOM_start_of_program
MOM_remove_file $mom_output_file_directory$mom_group_name.$mom_sys_output_file_suffix
MOM_open_output_file $mom_group_name.$mom_sys_output_file_suffix
PB_start_of_program
set pb_start_of_program_flag 1
}
proc MOM_end_of_group {} {
global group_level mom_group_name mom_sys_output_file_suffix
global mom_current_oper_is_last_oper_in_program
if {} {
if {$group_level == 0} {
return
} else {
if {$group_level == 1} {
MOM_end_of_program
MOM_close_output_file $mom_group_name.$mom_sys_output_file_suffix
if {$mom_current_oper_is_last_oper_in_program == "YES"} {
global mom_operation_name group_list
global mom_sequence_number mom_sequence_increment mom_sequence_frequency
global ptp_file_name
SEQNO_RESET ; #<4133654>
MOM_reset_sequence $mom_sequence_number $mom_sequence_increment $mom_sequence_frequency
MOM_close_output_file $ptp_file_name
MOM_remove_file $ptp_file_name
MOM_open_output_file $ptp_file_name
MOM_output_literal "%"
MOM_set_seq_on
MOM_output_literal "O1234"
foreach i $group_list {
MOM_output_literal "M98 P$i"
}
MOM_output_literal "M30"
MOM_set_seq_off
MOM_output_literal "%"
MOM_close_output_file $ptp_file_name
}
}
incr group_level -1
}
} else {return}
}保存
结果展示
附后处理下载,仅供学习与交流
做一件对行业有贡献的事情。
Bridge_︻︻︻︻ 发表于 2020-7-22 07:45
谢谢,这个真好,但主程序能不能像如下方式实现,核心就是主程序光输出换刀指令+坐标系(G54)+子程序号,而 ...
你说的方式是能够实现的
需要在现有的框架下,做一些调整
我将会在新帖中分享这个思路,到时我们再做讨论 邵阳_新邵_一刀 发表于 2020-7-10 15:26
牛哥,空的程序组不知怎么判断不输出
下期分享就它了
关注蜗牛{:tongue:} destiny0515 发表于 2020-7-10 14:51
可以
有构思 能动手,就能实现很多目的
牛哥你这个按组程序后处理单条程序,怎么搞也可以包含总程序一样出来出来。不调用子程序直接总程序一个文件单个按组的程序按组单独生成出来。 牛哥,出手定江山啊。牛逼啊。。。。
一如既往的厉害!!! {:lol:}谢谢大师分享。。。。。。 师傅,收下我的膝盖{:titter:} 相互学习,共同进步! 致敬乐于分享奉献的楼主, 蜗牛哥哥真棒 谢谢牛哥,支持下。 第三种方法是不是还可以做那个刀具清单之类(牛逼)