本帖最后由 destiny0515 于 2020-7-9 20:05 编辑
上期分享了以工序为单位批处理的思路:
后处理中的实用技巧——以工序(OPERATION)为单位的批处理 (出处: UG爱好者)
只需简单几个步骤,实现主程序对子程序的调用,输出M98PXXXX (出处: UG爱好者)
蜗牛很高兴,收到了很多的反馈,其中有非常多的声音在问能否按组输出——
当然是可以的
实际上构造器是包含这样的功能 不过也因种种原因,许多人不喜欢这种方式
本文以一个新的角度解析,如何以程序组为单位生成子程序,并通过主程序调用
思路分析 既然要按组输出,那么有两个过程是要重点关注的—— MOM_start_of_group MOM_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 { ![hiset group_level] } {
- set group_level 0
- MOM_close_output_file $ptp_file_name
- return
- }
- if { [hiset group_level] } {
- 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 {[hiset group_level]} {
- 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}
- }
复制代码保存
结果展示
附后处理下载,仅供学习与交流
做一件对行业有贡献的事情。
|