网通访问 |电信访问 | 网络测速 | 联系管理员 |安全退出论坛,保护账号安全!
发新话题
打印

[注意]后处理讨论专栏

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

心境 改变环境

TOP

INTERACTION (USER_1)       "MAIN-PROGRAM-NUMBER"     MainNum     = 100  ;
INTERACTION (TOOL)         "DIACOMP=TOOL+<xx>"       DiaComp     = 50   ;
INTERACTION (USER_1)       "TOOL-CHANGE-PROGRAM"     ChangeTool  = 8000 ;
INTERACTION (CHARACTER)    "SEQUENCING<Y/N>"         NumYN       = "N"  ;
INTERACTION (SEQUENCING)   "SEQUENC-START"           SeqStart    = 10   ;
INTERACTION (SEQUENCING)   "SEQUENC-INCR."           SeqIncr     = 10   ;
INTERACTION (CHARACTER)    "SUBROUTINES<Y/N>"        Sub         = "Y"  ;
INTERACTION (USER_1)       "SUB-PROGRAM-NUMBER"      StartSubNum = 1000 ;

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

心境 改变环境

TOP

这部分代码,每行有四个部分
INTERACTION (USER_1)       "MAIN-PROGRAM-NUMBER"     MainNum     = 100  ;
其中INTERACTION(USER_1),这一部分,指示这是一个USER_1格式的交互操作,其中USER_1的格式在def中定义,而该项的操作对象(变量)是MainNum
“MAIN-PROGRAM-NUMBER”
,这一部分,是指示的在Cimatron软件中显示的文字内容或提示,记住,如果你的系统不支持中文,请不要在这里写下中文字符,特别是ITE版支持中文的显示,没有问题。
MainNum
,被操作的变量,也就是这里输出的数值或文本,将在确定后,传送到对应的变量MainNum中,在处理过程中,该项的值就是您输出的数值。
=100
,默认值,该值在您输出后,会被改变。
最后不要忘记,一定要在行尾加上分号";"
所有字符,一定要输入半角英文,引号内的内容除外,切记!不过也有特殊的情况,象XYZ这一类的字符,是在引号内的,您也不可以输出全角字母,因为就算Cimatron编译通过了,机床也不会认XYZ(XYZ)这样的全角字符,和括号里的XYZ比较一下就知道有什么区别了。

下面,我们来做一些练习,学习交互区的操作。

心境 改变环境

TOP

练习一
汉化:
INTERACTION (USER_1)       "
主程序序号"     MainNum     = 100  ;
INTERACTION (TOOL)         "
刀具补偿"       DiaComp     = 50   ;
INTERACTION (USER_1)       "
换刀子程序"     ChangeTool  = 8000 ;
INTERACTION (CHARACTER)    "
是否输出行号<Y/N>"         NumYN       = "N"  ;
INTERACTION (SEQUENCING)   "
行号起始值"           SeqStart    = 10   ;
INTERACTION (SEQUENCING)   "
行号增量值"           SeqIncr     = 10   ;
INTERACTION (CHARACTER)    "
是否输出子程序"        Sub         = "Y"  ;
INTERACTION (USER_1)       "
子程序号"      StartSubNum = 1000 ;

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

心境 改变环境

TOP


心境 改变环境

TOP

练习二
增加一个操作项。
INTERACTION (CHARACTER)       "
编程员"      rogrammer = "" ;
然后在BEGINNING OF TAPE:段中加入相应的内容,例如加在%号前面
*-----output
OUTPUT $ "(
编程员:" Programmer ")" \J;

      IF_SET (FlagSeq _EQ_ YES )
         OUTPUT "%" \J "O" MainNum  ;
      ELSE
         OUTPUT " %" \J " O" MainNum  ;
      END_IF ;
在程序中,\J是指输出一个换行符,如果不加换行符,那么后面的内就会直接根上来,导致一行可能不被机床识别的代码。

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

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

心境 改变环境

TOP

NEW_LINE_IS $ ;
      IF_SET (FlagSeq _EQ_ NO)
         OUTPUT \J ;
      ELSE
         IF_SET (FlagSub _EQ_ NO)
            OUTPUT \J "N" Seq ;
            Seq = Seq + SeqIncr ;
         ELSE
            OUTPUT \J "N" SubSeq ;
            SubSeq = SubSeq + SeqIncr ;
         END_IF ;
      END_IF ;
这一节是输出子程序和程序号,一般没必要的话,不要去改动他,程序行号在后面还有部分代码的,在后面我们会分别讲述。
可能有的朋友想默认不输出子程序,把
INTERACTION (CHARACTER)    "
是否输出子程序"        Sub         = "Y"  ;
后的"Y"改成"N"就可以了。

心境 改变环境

TOP

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

Blocks and Their Variables
在这一节中,标明的是每个段及其能识别的变量,也就是说,这些段只能识别这些变量。例如:
END OF PROC:这一段中,能识别的变量就是  N_FED_TIMEN_FST_TIMEN_GEN_TIME这三个,这就是为什么有些朋友在输出加工时间时,为什么想在程序头中输出而进行不了的原因,可以在反过来看看Beggin of proc这一节,是不支持这几个变量的。

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

Executable Block Statements
这一节中是关于程序流程控制的部分,也是非常有用的,大家先看,后面会一一细讲。

心境 改变环境

TOP

星球大战辛苦啦!

有空也学习一哈子!

欢迎访问[中国铸造论坛]!http://www.foundrybbs.com

TOP

以下是引用星球大战在2006-5-16 19:37:00的发言:
 

龙兄,第一课的第一贴麻烦再转一次,昨天我有修改


已经处理完了

浮躁的人容易问:我到底该学什么_别问,学就对了;
浮躁的人容易问学proe有钱途吗_建议你去抢银行;
浮躁的人容易说:我要中文版!我英文不行_不行?学呀;
只观望而不学的人和只学而不坚持的人永远不是一个高手。

TOP

NC编程方面偶扔了很久了,正好可以拣起来,学习一下!
浮躁的人容易问:我到底该学什么_别问,学就对了;
浮躁的人容易问学proe有钱途吗_建议你去抢银行;
浮躁的人容易说:我要中文版!我英文不行_不行?学呀;
只观望而不学的人和只学而不坚持的人永远不是一个高手。

TOP

星球大战辛苦啦!

TOP

〖第五课〗几个BEGINNING

第一个段,BEGINNING OF TAPE:
DEMO中,是这样的内容。
      YES              = 1 ;
      NO               = 0 ;
      Seq              = SeqStart ;
YESNO是两个自定义的变量,先来个赋值。赋值就是一个流程控制,也是一个最基本的语法,例如,Time = 0.001Time=Time+N_GEN_TIME。第一个的意思是让Time的值为0.001,第二个的意思是指,把Time原有的值去加上N_GEN_TIME的值,然后把结果再赋给TIME。上面Seq=seqstart,其中SeqStart就是在交互区中曾经赋过值的。
      FlagSeq = NO ;
      FlagSub = NO ;
还是赋值,NO已经被赋值为0了,那么现在FlagSeqFlagSub都等于0
      IF_SET (NumYN _EQ_ "y") FlagSeq = YES ; END_IF ;
      IF_SET (NumYN _EQ_ "Y") FlagSeq = YES ; END_IF ;

心境 改变环境

TOP

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

      IF_SET (Sub   _EQ_ "y") Sub     = "Y" ; END_IF ;
      IF_SET (Sub   _EQ_ "Y")  
         SET_OFF NO_SUBROUT ;
      ELSE
         SET_ON  NO_SUBROUT ;
      END_IF ;
这里有一个SET_ON语句,看GPPSystem Flags一节。
*-----Unit matrix (MUST be input in this order !!!)
心境 改变环境

TOP

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 ;
以上内容,通通略过。

心境 改变环境

TOP

IF_SET (FlagSeq _EQ_ YES )
         OUTPUT "%" \J "O" MainNum  ;
      ELSE
         OUTPUT " %" \J " O" MainNum  ;
      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 "N" Seq ;
            Seq = Seq + SeqIncr ;
         ELSE
            OUTPUT \J "N" SubSeq ;
            SubSeq = SubSeq + SeqIncr ;
         END_IF ;
      END_IF ;
心境 改变环境

TOP

翻译如下:
新行属于字符串输出。
如果设定为不输出行号的话
      
在文件中输出一个换行符(\J
否则(就是指输出行号)
      
如果不输出子程序(又一个子判断语句,嵌套)
           
那么,先换行,输出一个N,再输出Seq的内容(就是行号)
           
Seq加上增量值,以便下一次调用。
      
否则
           
输出换行,输出N,输出SubSeq子程序号。
           SubSeq
加上增量值,以便下一次调用。
      
结束判断
结束判断
心境 改变环境

TOP

BEGINNING OF PROC:

KEEP   ROC_NAME ;
      SET_ON MCH_COOL ;
      FlagSub = NO ;
      SubSeq  = SeqStart ;

这一节显得简单得多。KEEP的作用是保持,但是保持了有什么用我也是不太清楚,所以呢,这一节原有内容大家不要动他好了。
下面会根据需要,再增加几项输出的。
输出的格式
Output
变量 常量;
Output
后面可以有任何有效的变量或常量,包括$\J,如果用Output $就可以不用\J了。
如:
Output $ "Masscam";
Output \J "Masscam";是等效的。
变量也变量之间,要用空格格开,常量与变量之间,可以不用格开。但是常量这里一般指的是“     ”方式的字符串,其它的输出内容,暂时还没有去研究他。
还可以这样写。
Output \J "(Proc_Name:"Proc_Name")"\J"(Tools:"Curr_Name")";
注意,这只是一个范例而已,并不表示他在这一节能生效。
心境 改变环境

TOP

 BEGINNING OF TOOLPATH

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

BEGINNING OF TOOLPATH:
OUTPUT \J "(Toolpath_Name:" TP_NAME ")";

 

Output后面可以有任何有效的变量或常量,包括$\J,如果用Output $就可以不用\J了。
如:
Output $ "Masscam";
Output \J "Masscam";是等效的

这话我补充一下
$
\J是有区别的
$
是一个段变量,它是NEW_LINE_IS段的简化替代,它可以代表一组指令,比如
NEW_LINE_IS $ ;
      IF_SET (FlagSeq _EQ_ NO)
         OUTPUT \J ;
      ELSE
         IF_SET (FlagSub _EQ_ NO)
            OUTPUT \J "N" Seq ;
            Seq = Seq + SeqIncr ;
         ELSE
            OUTPUT \J "N" SubSeq ;
            SubSeq = SubSeq + SeqIncr ;
         END_IF ;
      END_IF ;
$
就简化表示了 IF_SET END_IF之间的指令段
\J是代表G代码的行回车符,
只有当FlagSeqNO时(上面的指令段),$\J会等效,但它们是不等价的

心境 改变环境

TOP

多谢分享,鼓励大家多多参与讨论

TOP

发新话题