关于后处理方面的问题

更新时间:2024-04-03 07:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

关于后处理方面的问题(一)

提问: 程序里的刀具号可以去掉吗?(zihai2005)

回答:OUTPUT $ \将这个屏蔽,就不会显示刀具号(星球大战) 提问: ciamtron version 12 menu是什么东东啊(午时午刻)

回答:是cimatron 安装后的控制面板,直接在开始菜单里可以打开(haitianyis) 提问: 每次换刀都回机械原点,如何设定。 (午时午刻) 回答:(1) TOOL CHANGE: (sjhxs) TOOL CHANGE: LAST:

OUTPUT $ \主轴停止

OUTPUT $ \返回机械参考点 OUTPUT $ \换刀 OUTPUT $ \程序头内容\ .... ..... ....

(2)高速主轴自动暖机(星球大战)

你是用高速主轴吗?开始加工前,主轴暖机吗(换刀后从低速到高速,而不是直接到高速)?你想让你的主轴寿命更长、精度更高吗?如果是,请按照以下方法定制你的后处理: fanuc系统

*-----主轴暖机程式

if_set (SPIN_SPEED _ge_ 7000) 转速设定在7000-10000时,换刀后主轴以5000的速度运转1 if_set (SPIN_SPEED _le_ 10000) 分钟; OUTPUT $ \ OUTPUT $ \ OUTPUT $ \ end_if ; end_if ;

if_set (SPIN_SPEED _gt_ 10000) 转速设定在10000-15000时,换刀后主轴以5000的速度运转 if_set (SPIN_SPEED _le_ 15000) 1分钟,10000转运行2分钟; OUTPUT $ \ OUTPUT $ \ OUTPUT $ \

OUTPUT $ \ OUTPUT $ \ OUTPUT $ \ end_if ; end_if ;

if_set (SPIN_SPEED _gt_ 15000) 转速设定超过15000时,换刀后主轴以5000的速度运转 OUTPUT $ \分钟,10000转运行2分钟,15000转运转3分钟; OUTPUT $ \ OUTPUT $ \

OUTPUT $ \ OUTPUT $ \

OUTPUT $ \ OUTPUT $ \ OUTPUT $ \ end_if ;

时间和转速可以根据自己机台实际情况设定; 如果是hiden系统,要将x改为f

(3)输出行号时,经常会出现行号大于十万造成机床报警,可以将输出行号部分改为: (eexit)

NEW_LINE_IS $ ;

IF_SET (FlagSeq _EQ_ NO) OUTPUT \\J ; ELSE

IF_SET (FlagSub _EQ_ NO) OUTPUT \\J \Seq = Seq + SeqIncr ;

IF_SET (Seq _EQ_ 10000 ) Seq = 1; END_IF; ELSE

OUTPUT \\J \SubSeq = SubSeq + SeqIncr ; IF_SET (SubSeq _EQ_ 10000 ) SubSeq = 1; END_IF ; END_IF ;

这样行号只会要到9999后,就会又从1开始.

参考材料:给大家上传个 群处理---之报表头 不知大家有没有(zihai2005) 资料为压缩文件:20067141303335840.rar 例题: 整园等分四段输出的方法 (sjhxs)

先提示一下供大家参考.相信当你熟悉了该算法后,可举一反三,不管是G91还是G90输出方式,均可方便实现,先来看看与园相关的变量,见图8:

我们先来计算各等分点相对于园心的坐标,即相对坐标,见上图: 起点X4=Xold-X_CENTER,Y4=Yold-Y_CENTER;

根据分析,不考虑正负时的相对值X4=Y1=X2=Y3,Y4=X1=Y2=X3;(初中的知识,请不要问我原因哦!) 而且我们知道I=园心X坐标-起点X坐标,J=园心Y坐标-起点Y坐标; 居此可推导出各点的X,Y绝对值以及I,J的坐标公式; X4=Xold; Y4=Yold;(此处Xold=X_ENDPT,Yold=Y_ENDPT)

X1=X_CENTER-Yold+Y_CENTER; Y1=Y_CENTER+Xold-X_CENTER;I2=X_CENTER-X4; J2=Y_CENTER-Y4;

X2=2*X_CENTER-Xold; Y2=2*Y_CENTER-Yold; I3=X_CENTER-X1; J3=Y_CENTER-Y1;

X3=X_CENTER+Yold-Y_CENTER ; Y3=Y_CENTER-Xold+X_CENTER ;I4=X_CENTER-X2;J4=Y_CENTER-Y2; I1=X_CENTER-X3;J1=Y_CENTER-Y3;

当ARC_ANG _EQ_ 360.0时输出(即逆时针G03时): OUTPUT $ ;

IF_SET (CIRC_MOV) OUTPUT \OUTPUT \.... ...... ..... ......

OUTPUT $ \

当ARC_ANG _EQ_ -360.0时输出(即顺时针G02时): OUTPUT $ ;

IF_SET (CIRC_MOV) OUTPUT \OUTPUT \.... ...... ..... ......

OUTPUT $ \

现在可以把楼上的这些内容写入EXF文件中了,试一下吧!偶的测试结果见下图9: 提问: 坐标系有G54G55时,后置处理怎样编辑(午时午刻)

回答:G54 G55在里面是坐标的意思,他是根据你机床的参数来定的,如果在后处理 后输出是G54那么数据到了机床就是以你机床里的G54坐标为标准,比如你工件分中的数据都输到了G54,那么你在后处理出来的文件里就要改成G54!(ggggbgss)

提问: 我用的是Cimatron E6.0

机器工作不到5分钟,就停下来了.打开G代码文件一看,原来在程序的中间部份有M30 的子命在.但在程序的最后也M30的子命在.请问怎样去掉,程序中多的M30子命.在后处理中.

我每次都要打G代码文件来,手工删除多的M30子命,太不方便了.哪位大侠能帮小弟一下,谢谢!(skywei) 回答:删除也可以,在前面加*号也可以,但是*号前面不能有空格,然后重新编译;

修改后处理,把除了程式尾的M30留着,其他的都删除,然后保存,重新编译;(星球大战) 提问: 这个后处理走圆弧是用I J格式的,机床不接受I J格式.只能用后处理走圆弧用半径R格式的.那位大侠有这种格式的后处理.麻烦版主帮忙改一下。(uqca)

回答:偶提供的只要按图操作即可选择园弧输出方式X、Y、I、J或X、Y、R图10(sjhxs) 提问: 后处理参数改不了!程式名也不能自己命名的!请问要怎样改?多谢了!(uqca)

回答: 本后处理由于已经启动了自动命名及文件组装机制,即后处理的生成位置名称已固定为\\NC\\工件名\\数字&路径.NC,所以参数不能改,否则将丢失程序头及注释内容.你所能决定的只能是文件生成的分区!如果你非要修改,只要按主菜单-NC-DFPOST-后处理名-OUTPUT FILES-RUN SCRIPT FILE AFTER POST-YES改NO即可.但绝对不适合本后处理!(sjhxs)

提问: 如何解决机床最大行号大于99999以后行号又从新开始的问题多谢了(ww7525) 回答:NEW_LINE_IS $ ;

IF_SET (FlagSeq _EQ_ NO) OUTPUT \\J ; ELSE

IF_SET (FlagSub _EQ_ NO) OUTPUT \\J \ Seq = Seq + SeqIncr ;

IF_SET (Seq _EQ_ 99999) Seq = SeqStart ; END_IF ; ELSE

OUTPUT \\J \ SubSeq = SubSeq + SeqIncr ; END_IF ; END_IF ; (sjhxs)

提问: 版大能不能教我怎么把圆弧输出的 I.J改成R格式的,真的很需要谢谢(zhanyongeyo) 回答:将原:

IF_SET (DXcenter _NE_ 0.0) OUTPUT \ IF_SET (DYcenter _NE_ 0.0) OUTPUT \改为:

IF_SET (ARC_ANG _LT_ 0.0) ARC_ANG = 0.0 - ARC_ANG ; END_IF ; IF_SET (ARC_ANG _EQ_ 360.0) ARC_ANG = 0.0 ; END_IF ; IF_SET (ARC_ANG _LE_ 180.0) OUTPUT \ ELSE

OUTPUT \ END_IF ; (sjhxs)

提问: 感谢sjhxs老大,你真的是太牛了,小弟还有一点不明白OUTPUT \是输出负R的意思吗,不是有G2G3吗,程序处理出来也没有负R,不知道是不是那个意思,还请老大指点(zhanyongeyo)

回答:无论是G02还是G03,因为 通过2点及半径可以绘制出两个园,所以必须通过输出R与负R来区别,即当弧度张角小于等于180度时输出正R,而大于180度时输出负R。否则...有一天,你就准备抹眼泪吧........... 如图12所示:R与负R输出的轨迹区别(sjhxs)

关于后处理方面的问题(二)

提问: sjhxs老大 程序头这样的应该 怎么 改后 处理 是 SM802D的系统

%_N_H_MPF H 代表 名字 随便什么 字母 都 可以 G54 G64 G90 G17 (jzx88在)

回答:建议先翻前面的帖子查看。 你的程序头可写在下面区块下

BEGINNING OF TAPE: (纸带开头) 或

TOOL CHANGE: FIRST:(第一次换刀)

OUTPUT J \ OUTPUT J \ OUTPUT J \(sjhxs)

后处理修改详解 (星球大战)

〖第一课〗了解GPP后处理必须的过程 GPP后处理,必须的过程莫过编译了。 后处理修改的过程如下:

一、有记事本或专用的后处理修改器来修改EXF文件,EXF文件又称源代码。 二、编译,利用修改好的EXF文件,生成可用的DEX文件。 三、测试,看看您修改的后处理是否合乎您的需要。

另外,有些修改内容是不在EXF中,而是属于DEF的内容,这时候不需要修改EXF文件,只需要用另外的工具来修改就可以了。

下面会给出图片来解释。

打开DEMO.EXF,开头的内容就是关于自定义的变量类型了 ******************************************************** * define private variables:

FORMAT (SEQUENCING) Seq SubSeq ; --行号类型有关的变量

FORMAT (TOOL) CutterComp FirstTool LastTool ; --刀具类型有关的变量

FORMAT (COORDINATES) Xold Yold Zold DXcenter DYcenter DZcenter ; --坐标类型有关的变量 FORMAT (COORDINATES) Zinit Clear Depth ;

FORMAT (COORDINATES) Xhome Yhome Zhome ;

FORMAT (COORDINATES) XfirstOrigin YfirstOrigin ZfirstOrigin ; FORMAT (USER_1) CurrSubNum ;

FORMAT (coordinates) ORIGOLDI ORIGOLDJ ORIGOLDK ; * define private flags:

FORMAT (USER_2) FlagSub FlagSeq FlagSpin; --与用户2定义的类型有关的变量

FORMAT (USER_2) FirstOriginChange FlagError Flagrotmac ; * define private constants:

FORMAT (USER_2) YES NO ;

* change the format of existing variables: FORMAT (USER_1) SUB_NUMBER ;

此处偶把其看作是\户籍登记处\用户自己定义的变量必须在此登记,否则将编译错误.一旦选定类型,其变量格式由*.DEF文件对应部分控制。(DEF文件对应位置操作:主菜单-NC-DFPOST-后处理名-FORMATS-选择相关类型[在此可修改如最大(小)整(小)数位,等等内容] 见图:

例如:你的行号最大只认是99999,则可以修改行号类型(左图第6行)中的最大整数位为5(右图第1行);又如:你要求程序输出保留小数3位,则修改坐标类型(左图第1行)中的最大小数位为3(右图第2行),等等 图1

控制菜单中的两个重要有关图标解释一下:

一,DFPOST,这个就是我在一楼中说的DEF修改器,里面有相关的G代码定义,如果你愿意,可以把直线插补定义成G08(随便举的例子),当然还有一个更重要的是,有些朋友不希望在程序中输出M09,也可以在这里改。 二,DFEXF,这个就是编译器,任何后处理源代码的修改,都必须要通过这个编译器编译成功后,才能生效。 在正式开课后,会针对这两个命令做进一步的解释。可以说,不会这两个功能,就相当于不会改后处理,不会改后处理,那就相当于不会用Cimatron。因为每一台机床的控制系统都可能会不一样,Cimatron并没有提供更多的后处理来供您使用,当您换一个环境,或是增加一台机床,都可能面临后处理的问题。可以说,修改后处理,比学习几个刀路会来得更实在一些。

第一课中,我们需要来给大家讲解一下编译的过程,希望大家不要嫌简单。 例一:

准备工作:找到POST文件夹,并找到DEMO.exf, Demo.def, Demo.dex这三个文件。

具体操作:不需要做任何修改。首先打开MainMenu或者是Cimatron E Control Panel(E的控制面板),找到dfexf这个项目,单击他,出现如下提示:

CIMATRON E external file definition program (version 7.0) ======================================= Enter file name without extension (.exf) 请直接输入demo,按下回车。 此时会提示

END OF COMPILATION : valid demo.dex created(有效的demo.dex文件已经创建了) Press to exit.(按回车退出) 再次按下回车,退出此界面。

作用:编译一个正确的EXF文件到DEX文件,以备Cimatron NC在POST时调用。 例二:

准备工作:打开Demo.exf文件,用记事本就可以打开了,在里面添加一行: output $ \

放在BEGINNING OF PROC:的上面,存盘退出。

具体操作:先按例一的操作,结束后,用E/IT打开一个图档,然后POST一条刀路,应该在前三行会出现(Test)字符,如下: % O0100 (Test) T01

G90 G80 G00 G17 G40 M23 G43 H01 Z100. S1000 M03 G00 X-3. Y0.0 Z100. M09

作用:正确地修改和编译。如果此项不成功,请检查步骤是否有错,并继续看例三。 与GPP修改有关地方 图2 图3

〖第二课〗DEF文件定制及相关项目解释

Def文件,可以算作是一个通用定义,比方说各代码的定义,输出格式等等,有的要4位小数,有的只要2位小数,都可以在这里定义。 例一:

目标:去掉程序中输出的M09。 具体操作:

打开控制面板,找到DFPost并单击他。 光标移到demo下面,并按下回车。 会出现下列的对话菜单: 1. TAPE INFORMATION

2. PROGRAMMING MODE AND UNIT 3. FORMATS

4. POSITIONING CODES ( Not in use ) 5. MESSAGES AND INSERTS 6. MACHINE PARAMETERS 7. LINEAR MOTION 8. CIRCULAR MOTION 9. NURBS MOTIONS 10. CANNED CYCLES 11. OUTPUT FILES

12. POSTPR/EXPST INTERFACE

光标移到第六项,按下回车,再移到第8项,这一项是指关闭冷却方式的代码,光标会停在M09的M上,按三次空格,再按下回车。修改结束。

如何让这次改动生效?不是按下ESC退出就可以了的,您必须有一个存盘退出的过程。

按下ESC,一共需要2次,这时对话框显得有些乱,多进入退出几次,可以改善这一状况,如图所示。 第一项,问您什么文件名,这个当然不用动了。

第二项,是否保存?当然是YES了,一般来说,这个也不用动他。 第三项,是否替换?这时候要按下键,把他切换为YES。 第四项,准备一个输出文件?这个不用理他。

准备好这四项的确定后,按下Ctrl + Z(先按住Ctrl键不放,然后再按下Z键,再一起放开),保存就生效了,再按下回车退出,关闭这个对话框。

现在打开Cimatron E/IT,准备两条刀路,前一条开油或开气,第二条什么都不开。按以前的方案来做的话,第二条会输出一个M09,但是现在POST就不出输出M09了,一般我以前做的时候,冷却是都不开的,但是有的朋友可能加工时需要自动开油或开气的,这样就有个好处,不需要每一个都调整冷却方式。也有一定的弊端,这个大家自已考虑。

作用:演示一下通用设定文件的修改和生效方式。

接下来,就为大家一个一个地演示各项的操作,不过有些项目我也不是太明白,就省略了,我想也是不常用的项目,大家只要了解一些必须的知识就行了,如果有些高级的内容(如多轴系统),还是由Cimatron公司来帮您定制来得更好。

打开DEMO.EXF文件,找到以下内容:

********************************************************

INTERACTION (USER_1) \主程序号 INTERACTION (TOOL) \刀补号

INTERACTION (USER_1) \换刀子程序号 INTERACTION (CHARACTER) \是否需要行号 INTERACTION (SEQUENCING) \起始行号 INTERACTION (SEQUENCING) \图4

10 ; 行号增量

INTERACTION (CHARACTER) \是否输出子程序 INTERACTION (USER_1) \子程序号 ******************************************************** 菜单说明:

INTERACTION 交互作用,是执行后处理时的一些交互的内容: (CHARACTER)字符类型,仅指定义的符号 (USER_1)格式类型,性质同变量格式,余同。 “XXXX.....XXXX”交互菜单显示内容

MainNum 定义符,其定义的值或者字符由编程者输入。

例:当主程序号输入5时,相应的输出部分内容“MainNum”则用5取代。 *-----output

IF_SET (FlagSeq _EQ_ YES )

OUTPUT \文件输出为%O5 ELSE

OUTPUT \文件输出为 % O5 END_IF ; 交互菜单界面 图5

如果需要添加新的交互内容,只需要添加一个交互行就可以了,当然需要注意被交互的内容格式是字符型还是实数型。

假如我要出两种不同程序头的后处理,可以在楼上的菜单中,增加一行:

INTERACTION (CHARACTER) \字符型的交互内容

关于后处理方面的问题(三)

在EXF文件程序头输出部分改成下面内容就可以了

IF_SET ( CONTTYPE _EQ_ \大小写设别 IF_SET ( CONTTYPE _EQ_ \如果CONTTYPE=Y OUTPUT \

OUTPUT \ ELSE 反之

OUTPUT \ END_IF ; 判断结束 图6

如果需要添加新的交互内容,只需要添加一个交互行就可以了,当然需要注意被交互的内容格式是字符型还是实数型。

假如我要出两种不同程序头的后处理,可以在楼上的菜单中,增加一行:

INTERACTION (CHARACTER) \字符型的交互内容 在EXF文件程序头输出部分改成下面内容就可以了

IF_SET ( CONTTYPE _EQ_ \大小写设别 IF_SET ( CONTTYPE _EQ_ \如果CONTTYPE=Y OUTPUT \

OUTPUT \ ELSE 反之

OUTPUT \ END_IF ; 判断结束

当编程者在交互区输入Y或非Y时,NC文件程序头分别为: %_N_DM_MPF

;$PATH=/_N_MPF_DIR_MPF G90 G00 G17 G64 G54 或: %

G90 G00 G17 G40 G54 ....

有不少人或许对上面的条件判断不大了解,可翻旧贴查看! 主要判断符号如下: 等于 _EQ_ 不等于 _NE_ 大于 _GT_ 小于 _LT_ 大于等于 _GE_ 小于等于 _LE_ 第三课 定义DEF文件 Tape Information

When the maximum number of blocks or tape length is reached during an execution, the tape will be cut automatically and a warning message will be issued. 1.Maximum no. of blocks in tape < >

2.Maximum tape length (in meters) <60.0> 3.Subroutines in separate files

第一项:纸带中最多的块数,所谓块数,指的是纸带中的任意一个指令的存在,比方说“G01”,就算一个BLOCK,“X100”,也算一个BLOCK。 第二项,纸带的最大长度。这个代表的是米数(是纸带长度还是刀路长度没有去具体了解,字面意思理解是纸带长度)。 第三项,是否在分开的文件中引用子程序。

这一段的设置,在我们大多数地CNC应用中,是很少接触到的,所以如果没有必要的话就不要去动他了,这个大家能够了解一下就可以了,留在脑中以防万一。 Programming Mode and Unit

Questions 1 through 4 are for informational purposes only. Every length unit (X, Y, Z, I, J, K) will be multiplied by the Factor for length units.

1.Programming mode 2.Code for absolute coordinates 3.Code for incremental coordinates

4.Length unit of measurement 5.Factor for length units <1.0>

6.Tool Start Point

7.Coordinate orientation

第一项:编程模式,分别为绝对值编程,相对值编程,混合编程。 第二项:使用绝对值坐标的命令(默认为G90) 第三项:使用相对值坐标的命令(默认为G91) 第四项:长度单位(公制,英制,混合)

第五项:比例因子(默认为1.0),这是一个非常有用的功能,许多人都问过,但我一般都没有去回答,因为涉及到前面的那些基本操作和理解,要一个一个地说清楚,是一件很郁闷的事。当你的工件忘记放收缩了,可以用这个让刀路放收缩,注意,这个是绝对的,也就是说,你的工件图形和目标工件,必须存在的是一个固定的比例关系,不可以是型腔要放收缩,而导柱孔不需要放收缩,要放就一起放,除非你深入地去理解他,操作他。如果零件的缩水是0.008,那么这里就输入1.008,图形中的100mm,加工后就变成了100.8mm,这个参数一定要小心修改! 第六项:刀具起始点,分别为路径起点,第一程序起点。

第七项:坐标原点,分别为机床原点,第一程序原点,当前程序原点。

上面这两项,没必要的话,不要去弄他,一~四项一般来说,也不要去动他。

Note:

6. Tool Start Point: If TP HOME is chosen, X_HOME, Y_HOME, and Z_HOME will be the coordinates of the toolpath start point. If 1ST PROC HOME is chosen, the coordinates will reflect the start point of the procedure.

7. Coordinate orientation: If 1ST PROC is chosen, the output orientation will be the same as that of the first output procedure. If CUR PROC is chosen, the output orientation will be the same as TP LIST.

Formats

There are eighteen format option questions for each of the following formats. They are listed below the formats. The default values for the formats each have a value with twelve positions. Each position represents an answer for one of the twelve format option questions.

If a question is to be answered YES or NO, 0 is NO and 1 is YES. The tilde ~ symbol represents any character but a blank. A blank space in the default position indicates that no character or space will be inserted in the specified position. Note:

For technical reasons the values representing the answers to Format Options 11 and 12 are reversed, i.e. the 11th position corresponds to Format Option 12 and the 12th position corresponds to Format Option 11.

Character is a format type which may be assigned in place of the format types listed. It is not defined with the DFPOST questions. It assigns a modal status, by default. Variables formatted as Character may contain up to 20 characters. User_1 to User_10 are user-defined format types and are explained in Section 3.2. Coordinates <430000~-.101> 坐标

Angles<430000~-.101> 角度

Feed<5 1001~~ 101> 进给(不可以有负值哦)

Spindle_speed<5 1001~~.101> 转速

Dwell<430000~~.101> 钻孔循环

Sequencing<5 1001~~ 101> 行号

Tool<4 0000~~.001> 刀具

User_1<430000~-.001> 自定义

User_2 <430000~-.001> 自定义

User_3<430000~-.101> 自定义

User_4 <430000~-.101> 自定义

User_5<430000~-.101> 自定义

User_6<430000~-.101> 自定义

User_7<430000~-.101> 自定义

User_8<430000~-.101> 自定义

User_9<430000~-.101> 自定义

User_10<430000~-.101> 自定义

Real<355511~-.100> 实数

上面的就是变量定义的,舜江候兄没有讲得太清楚,我补充上来。其中尖括号里的内容就是默认值,对应在下面的变量格式里。

如:<430000~-.101>

最大4位整数,3位小数,整数最小位数为0,小数最小位数为0,前导零不要,后导零不要,正号不输出,负号为“-”,小数点为“.\后面几位我也不是太清楚,所以就不说了。

有一种情况,不知道大家是否会遇到,你们可以立即测试一下。通过2点画一个R足够大的圆,比方说R40000,两点距离为200,然后沿线做一条刀路,看看POST出来的刀路是否也是R40000,如果不是,那就把第一项Coordinates的值改一下,这一项的用处大家应该知道了,后面就不多解释了。

我们在用EXF文件定义中,会用到这些变量格式,有一节变量定义中,大家可以看到各种值用的是什么格式,如果有必要的话,就修改他,或者用自定义的格式(User1~10)。

The values entered below are the default settings for Coordinates, 1. above. <430000^-.101> See Chapter 3 in this manual for a detailed explanation of modal variable values (Item 12). Format Options

Max. digits for integer part <4> 整数位数

Max. digits for fractional part <3> 小数位数

Min. digits for integer part <0> 整数最小位数

Min. digits for fractional part <0> 小数最小位数

Leading zeroes

前导零。就是说如果出现“0.02”这样的值,是否需要前导的零,如果选NO的话,输出就是“.02” Trailing zeroes

这个应该是后导的零吧,小数位数是3,如果有\这样的数,小数位数不足3,后面补零输出为\,这个我没有去测试。

Character for the + sign < >

正号,这个不需要,所以是空的。 Character for the - sign <-> 负号

Character for decimal point <.> 小数点

Use decimal pt. for whole numbers?. Representation of value 0 <0> 0的特殊表达

Modal value ? ???? Notes: 注意

Max. digits for integer part/Max. digits for fractional part <= 9

整数部分和小数部分最大位数是9,以后不要说Cimatron没精度了,Cimatron的精度绝对在浮点运算水平上。 For Real format, Max. digits for integer part and Max. digits for fractional part are internally set to 14 Real模式(实数)最大位数为14。

第四课 EXF的重要区段变量

许多段落在里的exf文件里,都可以看到。用法比较简单,只需要在段落开始的时候写上段名(后面要有一个冒号),就表示这一段开始。 例如:

BEGINNING OF PROC:

OUTPUT $ \

这就表示,在程序起始时,先输出程序名。直到该段代码运行完毕,遇到下一个段名(如“LINEAR MOTION:”),才会结束这一段。输出的内容,全部都在程序起始的部位。

除此以外,还有几个很重要的区域,掌握后,对定制EXF有很大的帮助。 从顶部看起:

* DEMO 3 axes Post Processor for FANUC * CIMATRON90 VER 9.0 * Last update : 23-FEB-1998

******************************************************** * define private variables: 私有变量

FORMAT (SEQUENCING) Seq SubSeq CNTRL_NUM NURBS_DEG count first deg ; FORMAT (TOOL) CutterComp FirstTool LastTool ;

FORMAT (COORDINATES) Xold Yold Zold DXcenter DYcenter DZcenter ;

FORMAT (COORDINATES) Zinit Clear Depth CNTRL_X CNTRL_Y CNTRL_Z KNOT_ ; FORMAT (COORDINATES) Xhome Yhome Zhome ;

FORMAT (COORDINATES) XfirstOrigin YfirstOrigin ZfirstOrigin ; FORMAT (USER_1) CurrSubNum ;

FORMAT (coordinates) ORIGOLDI ORIGOLDJ ORIGOLDK ; * define private flags: 私有标记

FORMAT (USER_2) FlagSub FlagSeq FlagSpin;

FORMAT (USER_2) FirstOriginChange FlagError Flagrotmac ; * define private constants: 私有常量 FORMAT (USER_2) YES NO ;

* change the format of existing variables: 变更已存在变量格式 FORMAT (USER_1) SUB_NUMBER ;

上面这个部分就是变量/常量定义,这些都属于自定义变量,所以要告诉系统,这些变量分别属于什么格式,格式指定正确,可以节省内存,加快程序运行效率,另外,也不会出错。说到这里,稍有编程基础的人就知道变量定义的重要性,例如一个数字2356,如果要用文本方式存储(无限制,一个数字一个字节),需要占用4个字节,而用短整数方式存储(最大65535),只需要占用2个字节,而用长整方式存储(最大4294967295),需要4个字节。 象还有些User_2的变量,就是我们在Def中讲到的,大家可以去看看这些变量的格式。 INTERACTION (USER_1) \INTERACTION (TOOL) \

INTERACTION (USER_1) \INTERACTION (CHARACTER) \INTERACTION (SEQUENCING) \INTERACTION (SEQUENCING) \INTERACTION (CHARACTER) \INTERACTION (USER_1) \

上面的部分内容,就是一个交互区,这些是在Post前,接受的一些自定义内容,有些高手,把其中某项输入加以判断,分别输出不同的代码(如同时支持Fanuc,三菱,Sim802s的后处理),这一点,舜江侯兄玩得很精,可机会的话,可以请他再给大家加以详细解释。 这部分代码,每行有四个部分

INTERACTION (USER_1) \

其中INTERACTION(USER_1),这一部分,指示这是一个USER_1格式的交互操作,其中USER_1的格式在def中定义,而该项的操作对象(变量)是MainNum。

“MAIN-PROGRAM-NUMBER”,这一部分,是指示的在Cimatron软件中显示的文字内容或提示,记住,如果你的系统不支持中文,请不要在这里写下中文字符,特别是IT。E版支持中文的显示,没有问题。

MainNum,被操作的变量,也就是这里输出的数值或文本,将在确定后,传送到对应的变量MainNum中,在处理过程中,该项的值就是您输出的数值。

=100,默认值,该值在您输出后,会被改变。 最后不要忘记,一定要在行尾加上分号\。

所有字符,一定要输入半角英文,引号内的内容除外,切记!不过也有特殊的情况,象X,Y,Z这一类的字符,是在引号内的,您也不可以输出全角字母,因为就算Cimatron编译通过了,机床也不会认XYZ(XYZ)这样的全角字符,和括号里的XYZ比较一下就知道有什么区别了。 下面,我们来做一些练习,学习交互区的操作。 练习一 汉化:

INTERACTION (USER_1) \主程序序号\INTERACTION (TOOL) \刀具补偿\INTERACTION (USER_1) \换刀子程序\

INTERACTION (CHARACTER) \是否输出行号\INTERACTION (SEQUENCING) \行号起始值\INTERACTION (SEQUENCING) \行号增量值\INTERACTION (CHARACTER) \是否输出子程序\INTERACTION (USER_1) \子程序号\

然后编译,执行POST,看看有什么变化没有。以上操作,请在Cimatron E版或Cimatron IT中文版下进行。 图7 练习二

增加一个操作项。

INTERACTION (CHARACTER) \编程员\张\

然后在BEGINNING OF TAPE:段中加入相应的内容,例如加在%号前面 *-----output

OUTPUT $ \编程员:\ IF_SET (FlagSeq _EQ_ YES )

OUTPUT \ ELSE

OUTPUT \ END_IF ;

在程序中,J是指输出一个换行符,如果不加换行符,那么后面的内就会直接根上来,导致一行可能不被机床识别的代码。

这只是举的一个例子,实际中,用这个输出编程员的名字是不可以的,因为他只能识别两个字节(2个英文字母,1个中文汉字)的内容,大家试一下把Programmer =“张”改成“张三”便知。

另外要注意的一点是,所以的交互区用到的变量都不需要预先定义,因为在交互的时候,也就定义了变量。 NEW_LINE_IS $ ;

IF_SET (FlagSeq _EQ_ NO) OUTPUT J ; ELSE

IF_SET (FlagSub _EQ_ NO) OUTPUT J \ Seq = Seq + SeqIncr ; ELSE

OUTPUT J \

SubSeq = SubSeq + SeqIncr ; END_IF ; END_IF ;

这一节是输出子程序和程序号,一般没必要的话,不要去改动他,程序行号在后面还有部分代码的,在后面我们会分别讲述。

可能有的朋友想默认不输出子程序,把

INTERACTION (CHARACTER) \是否输出子程序\后的\改成\就可以了。

在您的Program文件夹下,有一大堆chm文件,或者在Cimatron中按下F1也可以打开Help,IT是无效的哦! 因为是英文的,所以大家读起来可能会有一些困难,这时候要借助一些翻译软件来学习了,英文不好的朋友,不要气馁,慢慢地读。

关于后处理方面的问题(四)

Blocks and Their Variables

在这一节中,标明的是每个段及其能识别的变量,也就是说,这些段只能识别这些变量。例如:

在END OF PROC:这一段中,能识别的变量就是 N_FED_TIME、N_FST_TIME、N_GEN_TIME这三个,这就是为什么有些朋友在输出加工时间时,为什么想在程序头中输出而进行不了的原因,可以在反过来看看Beggin of proc这一节,是不支持这几个变量的。

在这一节下面,Formats for Variables也是非常有用的,这个列举出了所有的变量以及其使用的相关信息,大家以后在定制后处理的时候,要随时翻查这一内容。 Executable Block Statements

这一节中是关于程序流程控制的部分,也是非常有用的,大家先看,后面会一一细讲。 〖第五课〗几个BEGINNING段 第一个段,BEGINNING OF TAPE: 在DEMO中,是这样的内容。 YES = 1 ; NO = 0 ;

Seq = SeqStart ; YES,NO是两个自定义的变量,先来个赋值。赋值就是一个流程控制,也是一个最基本的语法,例如,Time = 0.001,Time=Time+N_GEN_TIME。第一个的意思是让Time的值为0.001,第二个的意思是指,把Time原有的值去加上N_GEN_TIME的值,然后把结果再赋给TIME。上面Seq=seqstart,其中SeqStart就是在交互区中曾经赋过值的。 FlagSeq = NO ; FlagSub = NO ;

还是赋值,NO已经被赋值为0了,那么现在FlagSeq和FlagSub都等于0。 IF_SET (NumYN _EQ_ \ IF_SET (NumYN _EQ_ \

开始判断,如果NumYN等于“Y”或\因为他区分大小写,所以要写两句 ),那么FlagSeq的值就变成1。注意后面还要有END_IF。这时候,大家要参考一下GPP里的帮助了。“_EQ_”就是一个逻辑判断,判断前后两项的内容是否相等。IF_SET最标准的写法就是: IF_SET (条件)

满足条件执行的语句; ELSE

不满足条件执行的语句; END_IF;

IF_SET (Sub _EQ_ \ IF_SET (Sub _EQ_ \ SET_OFF NO_SUBROUT ;

ELSE

SET_ON NO_SUBROUT ; END_IF ;

这里有一个SET_ON语句,看GPP中System Flags一节。 *-----Unit matrix (MUST be input in this order !!!)

OT_MAT1 = 1.0 ; ROT_MAT2 = 0.0 ; ROT_MAT3 = 0.0 ;

ROT_MAT4 = 0.0 ; ROT_MAT5 = 1.0 ; ROT_MAT6 = 0.0 ; ROT_MAT7 = 0.0 ; ROT_MAT8 = 0.0 ; ROT_MAT9 = 1.0 ; 这一节是轴相关操作的,不用改。

*-----shift all data according to the MCHINE ZERO indicated by the * user in the POSTPR interaction TRANS_MATX = 0 - X_MACH ; TRANS_MATY = 0 - Y_MACH ; TRANS_MATZ = 0 - Z_MACH ;

*-----shift the HOME according to the MCHINE ZERO indicated by the * user in the POSTPR interaction Xhome = X_HOME - X_MACH ; Yhome = Y_HOME - Y_MACH ; Zhome = Z_HOME - Z_MACH ; *-----tool location is HOME Xold = X_HOME ; Yold = Y_HOME ; Zold = Z_HOME ;

*-----For 1st ORIGIN CHANGE FirstOriginChange = YES ; MCH_FEED = 9999 ; 以上内容,通通略过。

IF_SET (FlagSeq _EQ_ YES )

OUTPUT \ ELSE

OUTPUT \ END_IF ;

如果FLAGSEQ这一项为1的话,输出%O100,否则输出% O100,%和O前面有空格的,下面还有一段解释是和这一节有点儿关系的,继续看。 *--For the first origin change

ORIGOLDI=0 ; ORIGOLDJ=0 ; ORIGOLDK=1 ; flagrotmac = no ;

========================================= 在BEGINNING OF TAPE: 前面,还有一段: NEW_LINE_IS $ ;

IF_SET (FlagSeq _EQ_ NO) OUTPUT J ; ELSE

IF_SET (FlagSub _EQ_ NO) OUTPUT J \ Seq = Seq + SeqIncr ; ELSE

OUTPUT J \ SubSeq = SubSeq + SeqIncr ;

END_IF ; END_IF ; 翻译如下:

新行属于字符串输出。

如果设定为不输出行号的话 在文件中输出一个换行符(J) 否则(就是指输出行号)

如果不输出子程序(又一个子判断语句,嵌套)

那么,先换行,输出一个N,再输出Seq的内容(就是行号) 把Seq加上增量值,以便下一次调用。 否则

输出换行,输出N,输出SubSeq子程序号。 SubSeq加上增量值,以便下一次调用。 结束判断 结束判断

BEGINNING OF PROC: KEEP PROC_NAME ; SET_ON MCH_COOL ; FlagSub = NO ; SubSeq = SeqStart ;

这一节显得简单得多。KEEP的作用是保持,但是保持了有什么用我也是不太清楚,所以呢,这一节原有内容大家不要动他好了。

下面会根据需要,再增加几项输出的。 输出的格式

Output 变量 常量;

Output后面可以有任何有效的变量或常量,包括$及J,如果用Output $就可以不用J了。 如:

Output $ \和Output J \是等效的。

变量也变量之间,要用空格格开,常量与变量之间,可以不用格开。但是常量这里一般指的是“ ”方式的字符串,其它的输出内容,暂时还没有去研究他。 还可以这样写。

Output J \注意,这只是一个范例而已,并不表示他在这一节能生效。 BEGINNING OF TOOLPATH

这一节DEMO中半没有用到,只有在一次POST多个PROC或多个TP的时候才有作用。 这里没必要就不再详述了,如果你需要输出TPNAME,可以这样写: BEGINNING OF TOOLPATH:

OUTPUT J \

Output后面可以有任何有效的变量或常量,包括$及J,如果用Output $就可以不用J了。 如:

Output $ \和Output J \是等效的 这话我补充一下 $和J是有区别的

$是一个段变量,它是NEW_LINE_IS段的简化替代,它可以代表一组指令,比如 NEW_LINE_IS $ ;

IF_SET (FlagSeq _EQ_ NO) OUTPUT J ; ELSE

IF_SET (FlagSub _EQ_ NO) OUTPUT J \ Seq = Seq + SeqIncr ; ELSE

OUTPUT J \ SubSeq = SubSeq + SeqIncr ; END_IF ; END_IF ;

$就简化表示了 IF_SET 到END_IF之间的指令段 而J是代表G代码的行回车符,

只有当FlagSeq为NO时(上面的指令段),$和J会等效,但它们是不等价的

我在搞一个多文件输出的后处理时发现,J不仅代表G代码的行回车符,还代表 G代码文件的结束符,比如DEMO中对G代码文件的结束表示如下 END OF FILE:

IF_SET (FlagSeq _EQ_ YES ) OUTPUT J \ ELSE

OUTPUT J \ END_IF ;

如果启动了分割文件机制,那么上面指令段中的%是不会出现在前一个文件的结尾,它会出现在后一个文件的开头,这会导致后一个文件的开头有两个 % 因此,为防止此BUG,代码改为如下 END OF FILE:

IF_SET (FlagSeq _EQ_ YES ) OUTPUT J \ ELSE

OUTPUT J \ END_IF ;

当开启行号时:OUTPUT J 不产生行号,而OUTPUT $ 则产生行号。 用CMD命令来拓展GPP后处理功能 (sjhxs)

敬告Cim爱好者:本文适合初步了解EXF文件中的各大区块功能,欲对后处理更进一步深入的朋友,如果你对GPP后处理还不知所以然,那就不要浪费你宝贵的时间了...当然对老鸟而言,这幼儿园的文章可能难入法眼,请你权当文字垃圾!!

所举方法经本人测试通过!!如果以前有同样的内容,纯属巧合!!! 基于反对挟技不露,吝啬保守及支持技术共享考虑,文章公开发表。转贴务请注明出处。 相信大家都知道,将后处理文件改名并存放在指定文件夹中是我们最常用的命令,实际就是将执行这一过程的DOS命令写入print0.txt中,然后通过CMD文件将print0.txt改成批处理文件并执行之。这里所产生的print0.txt文件名是内定的,其内定文件范围为print0--print10,只不过其他文件名与NC代码文件名一致,无非是把扩展名内定为P01--P10罢了,所以我们完全可以利用这些内定生成的文件达成不同的目的。 现试举几种方法,权作抛砖引玉! 砖头1:文件组装

由于NC文件顺序输出的关系,有的内容与你希望显示的位置不一致,这里可通过内定的文件来区隔,然后按需要重新组装产生新文件:如 将程序头写入print0,注释内容写入*.p01,命名及存放位置的批处理命令写入*.p02等等. 具体做法如下: EXF文件处理:

print0.txt及*.p01内容根据原来程序头或注释内容的位置书写,所不同的是把原来的CUTPUT改成print?而已.用print? J \形式。

*.P02的内容(供参考): print2 j \

print2 j \将print0.txt及*.p01内容依次显示到hu.txt) print2 j \将NC代码文件也显示到hu.txt) print2 j \无指定文件夹就建立之)

print2 j \移动hu.txt到指定文件夹并改名\路径程式名.NC\没有这一步,后续文件就可能重名)

print2 j \删除原始NC代码文件) CMD文件: 内容参考: @echo off

ren *.p02 print2.bat call print2

del print*.*&del *.p01 echo 程式处理完毕!

这样NC文件就按程序头-注释-NC代码排列了,当然也可以按注释-程序头-NC代码排列,改变一下*.P02文件中的位置即可! 图11

砖头2:数字顺序命名

为了区分加工程式先后次序问题,数字顺序命名也具有操作性,这可以用循环语句实现 EXF文件中print0.txt内容参考:

::注意!如果程式较多,可修改25值为更大。 print0 j \

print0 j \print0 j \

print0 \

print0 \print0 j \

print0 \

print0 \

条件1:如果指定的文件夹中有\数字-路径程式名.NC\的文件与新命名的文件名称相同,就覆盖之。

例:假定指定的文件夹中也有1-OK.NC,新命名的文件也为1-OK.NC,那么就覆盖。若新命名的结果可能是1-NO.NC,则转到条件2来判断!

条件2:如果指定的文件夹没有\数字*.NC\的文件,就移动NC文件并改名为\数字-路径程式名.NC\的文件。这里的\数字-路径程式名\是动态且同步判断的!

例:假定指定的文件夹中不存在1-*.NC,同时有需命名的NC文件,就命名为1-*.NC 如果存在,则继续判断有无2-*.NC、3-*.NC...没有则命名之.依次类推! CMD文件内容参考: @echo off

ren print0.txt print0.bat del print*.*

echo 程式处理完毕!

题外话:数字顺序批量改名文件就是根据上面原理制作:(以批量改名*.nc文件为例) @echo off

for /l %%a in (1,1,50) do (if not exist %%a.tmp if exist *.nc ren *.nc %%a.tmp) ren *.tmp *.nc

echo 改名结束! 砖头3: 文件分割

我们有时希望一次性能把程式中所有的后处理搞定,虽然用SET_ON CUT_FILE也可以替我们分割文件,但对在同路径下分离不同的刀具,就有点困难了,这里介绍一种用标记来分割文件的方式: 在EXF文件的后续换刀区块及文件尾写入: TOOL CHANGE: *--先写程序尾内容 output j \ output j \ output j \*--输出分割标记 output j \*--再写程序头内容 output j \

output j \ ... ... ....

TOOL CHANGE: LAST: 同上

END OF TAPE: ... ... ...

output j \

print0.txt中的内容参考(作用:改NC文件名为hu.txt,便于CMD文件处理) print0 j \

print0 j \

*.P01中的内容参考(作用:处理分离后的文件,重新整理并移动到指点文件夹) print1 j \

print1 j \

print1 j \print1 j \

CMD文件参考:关键在于文件处理与程序的分割命名,这里还要用到FOR语句... ::注意!如果程式较多,可修改25值为更大。 @echo off

ren print0.txt print0.bat&&ren *.p01 print1.bat call print0

for /f \ not exist %%b.tmp if exist hu.nc ren hu.nc %%b.tmp)) call print1

del print0.bat&del print00.txt&del print1.bat&del hu.txt echo 全部程式处理完毕! 改前两文件为批处理文件,呼print0改程式名为hu.txt,然后搜索hu.txt文件每行内容,如果不出现CUT标记,则将该内容定向到hu.nc文件中,一但出现,就将hu.nc改名为1-25中没有出现的\数字.tmp\文件!为避免无谓的空循环,后续循环语句中嵌套多重条件语句。处理完后呼叫print1进行改名并移动到指定文件夹。砖头4:提醒设置(这里需要启动信使服务) 1) 公差过大提醒(这种方法以前的文章有涉

及) BEGINNING OF PROC: IF_SET(PART_TOL _GT_ 0.05) PRINT? J \工件计算公差大于0.05 \刀具长度提示 实际需要计算程式的起始到最深点距离(具体方法以前的文章有涉及),然后与刀具长度比较,大于刀长则提醒之。这里的刀长也需要约定,偶一般用5倍的刀径作为判断标准!其过程就不再列举了.... 砖头5: 程序单与NC代码同步输出 有那么多的PRINT?文件够你折腾,如果你的系统够“牛”,你就继续玩下去吧.....偶就不再奉陪到底了!!

本文来源:https://www.bwwdw.com/article/gvfr.html

Top