⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grinder8a_g_mu.pmc

📁 基于PMAC运动控制卡的八轴数控磨床PLC运动控制程序
💻 PMC
字号:


/*This MOTION Program executes various G-codes commanded from either
a part program or via MDI mode.

File: mill.g - Standard G codes for MILL

This file provides real time buffering to the rotary buffer.
The buffer may be many lines long, and the time period from when
the code was entered into the buffer and when the code is actually
operated upon is unknown to the PC.

The PMAC's auto gosub functions for 'G' codes will cause these
functions to be operated upon at the time encountered in the rotary
buffer.

This file must match the current source parsing (*.src) file loaded
by NC.DLL.

********************************/


#include "address.h"
#include "oemm.h"
#include "oem.h"
#include "TSODICK3.H"
#include "TSODICK1.H"
#include "TSODICK2.H"

OPEN PROG 1000 CLEAR


//; G0 直线(或回转)快速定位Rapid Mode -----------------------------------------------------------
VS_GGROUP1_1_M == 0
//S_TIMEBASE_M == SEL_TIMEBASE_RAPID
//TIMEBASE_M == RAPID_TIMEBASE
//  I194=8000000// added by yao instead of I194=4250
//I194_M == 8000000     // Sep.22
rapid
//read(X,Y,U,V)
//X(Q124)Y(Q125)
//COMMAND"&2 #3->1000U"
//COMMAND"&2 #4->1000V"
//rapid
//U(Q121)V(Q122)
//&1
RETURN


// G1 直线(或回转)插补Linear Mode /////////////////////////////////////////////////////////
N1000
VS_GGROUP1_1_M == 1
//S_TIMEBASE_M == SEL_TIMEBASE_CUTTING	//to force hungup in lookahead,change this to blk2pmac,James99-6
//TIMEBASE_M == CUTTING_TIMEBASE
//I194=4250
LINEAR
RETURN


// G2 顺时钟圆弧插补Circular Mode CW ////////////////////////////////////////////////////
N2000
VS_GGROUP1_1_M == 2
//I194 = 4250 //to force hungup in lookahead,change this to blk2pmac,James99-6
//S_TIMEBASE_M == SEL_TIMEBASE_CUTTING
//TIMEBASE_M == CUTTING_TIMEBASE
CIR1
RETURN

// G3 逆时钟圆弧插补Circular Mode CCW ///////////////////////////////////////////////////
N3000
VS_GGROUP1_1_M == 3
//I194 = 4250
//S_TIMEBASE_M == SEL_TIMEBASE_CUTTING
//TIMEBASE_M == CUTTING_TIMEBASE
CIR2
RETURN

// G4 停顿Dwell ///////////////////////////////////////////////////////////////
N4000
VS_GGROUP0_1_M==4
//NO_CYCLE_START=1 // added by wxd 1999.1.7
;@SET_ON(CS_COMMAND7_M,CS_COMPLEX_MOTION)
READ(P,L)

If (Q100&$800 > 0)
  While (Q112 > 0.5)
    DWELL(8000000)
    Q112 = Q112 - 1.0
  EndWhile
EndIf
If (Q100&$8000 > 0)
  If (@ON(CS_STATUS3_M,CS_FEED_HOLD))
    STOP
  EndIf
    DWELL(Q116 * 1000.0)
  If (VS_GGROUP1_1_M = 0)
    RAPID
  EndIf
  If (VS_GGROUP1_1_M = 2)
    CIR1
  EndIf
  If (VS_GGROUP1_1_M = 3)
    CIR2
  EndIf
  EndIf
  VS_GGROUP0_1_M==0
  //	DWELL0
  //NO_CYCLE_START=0
  GOSUB 4
  
  RETURN
  
  //G06法向跟踪//
  ;法向控制:一)单独编写时:C轴直接定向,二)编写在某一程序段前:C轴沿着该线段逐步转角定向?????????
  N06000
  VS_GGROUP0_1_M = 6
  RETURN
  
  //G08圆弧与前一段路径相切;平面上起点至终点的弧线?????
  N08000
  RETURN
  
  //G09三点定义圆弧;平面上起点至终点的弧线?????
  N09000
  RETURN
  
  
  // G17 坐标平面——XY平面X-Y Plane Select //////////////////////////////////////////////////
  N17000
  NORMAL K-1
  VS_GGROUP2_1_M = 17
  RETURN
  
  // G20/G21:
  // "=" changed to "==" for synchronization.
  // G20 以英寸单位编程inch Mode On ///////////////////////////////////////////////////
  N20000
  VS_GGROUP6_1_M == 20
  //	 @SET_OFF(CS_STATUS6_M,CS_METRIC_DISPLAY)
  CS_STATUS6_M == CS_STATUS6_M & (CS_STATUS6_M ^ CS_METRIC_DISPLAY)
  RETURN
  
  // G21 以毫米单位编程Metric Mode ON ////////////////////////////////////////////////////
  N21000
  VS_GGROUP6_1_M == 21
  //    @SET_ON(CS_STATUS6_M,CS_METRIC_DISPLAY)
  CS_STATUS6_M == CS_STATUS6_M | CS_METRIC_DISPLAY
  RETURN
  
  
  // G20.1 度数输入 C ////////////////////////////////////////////////////
  N20100
  VS_GGROUP21_1_M == 1020
  RETURN
  
  // G21.1 弧度输入 C ////////////////////////////////////////////////////
  N21100
  VS_GGROUP21_1_M == 1021
  RETURN
  
  
  //G36自动圆弧角过度//??????????
  N36000
  RETURN
  
  
  //G39自动倒角过度?????????
  N39000
  RETURN
  
  
  // G40 - G42 Current Cutter Comp status ////////////////////////////////////
  N40000//取消刀具半径补偿
  VS_GGROUP7_1_M = 40
  //CC0
  //deleted by James2000-2-16 for BUG495 G40
  //	VS_COMP_OFFSET_M = 0
  //	CCR0.0
  RETURN
  
  
  N41000//刀具半径左补偿
  VS_GGROUP7_1_M = 41
  //CC1
  RETURN
  
  
  N42000//刀具半径右补偿
  VS_GGROUP7_1_M = 42
  //CC2
  RETURN
  
  
  // G50 撤消缩放Scaling Cancel CSN #1 //////////////////////////////////////////////
  N50000
  VS_GGROUP11_1_M = 50
  RETURN
  
  
  // G50.1撤消镜像 Mirror Cancel CSN #1 /////////////////////////////////////////////
  N01000
  //   MIRROR_FLAG = 0
  CS_COMMAND7_M == CS_COMMAND7_M & (CS_COMMAND7_M^CS_DISP_MIRROR_X)
  DWELL0
  CS_COMMAND7_M == CS_COMMAND7_M & (CS_COMMAND7_M^CS_DISP_MIRROR_Y)
  DWELL0
  VS_GGROUP18_1_M =  1050
  RETURN
  
  
  // G51.1 相对于X,Y轴镜像Scaling Set CSN #1 /////////////////////////////////////////////////
  N51100
  READ(A,B,C,X,Y,Z,U,V,W)
  //   MIRROR_FLAG = 1
  If (Q100&$800000 = $800000)
    CS_COMMAND7_M == CS_COMMAND7_M | CS_DISP_MIRROR_X
    DWELL0
  EndIf
  If (Q100&$2000000 = $2000000)
    CS_COMMAND7_M == CS_COMMAND7_M | CS_DISP_MIRROR_Y
    DWELL0
  EndIf
  VS_GGROUP18_1_M = 1051
  RETURN
  
  
  // G51 缩放因子Scaling Set CSN #1 /////////////////////////////////////////////////
  //缩放因子...合成缩放:整体缩放,单轴缩放:某一轴向缩放??????
  N51000
  READ(X,Y,Z,I,J,K,P)
  VS_GGROUP11_1_M =  51
  RETURN
  
  
  // G52 局部坐标系设定Local Coordinate System Setting CSN #1 /////////////////////////////
  N52000
  READ(X,Y,Z,U,V,W,A,B,C)
  VS_GGROUP0_1_M = 52
  VS_A_LOC_Q = 0
  VS_B_LOC_Q = 0
  VS_C_LOC_Q = 0
  VS_X_LOC_Q = 0
  VS_Y_LOC_Q = 0
  VS_Z_LOC_Q = 0
  VS_U_LOC_Q = 0
  VS_V_LOC_Q = 0
  VS_W_LOC_Q = 0
  If (Q100&$01 > 0)
    VS_A_LOC_Q = Q101
  EndIf
  If (Q100&$02 > 0)
    VS_B_LOC_Q = Q102
  EndIf
  If (Q100&$04 > 0)
    VS_C_LOC_Q = Q103
  EndIf
  If (Q100&$800000 > 0)
    VS_X_LOC_Q = Q124
  EndIf
  If (Q100&$1000000 > 0)
    VS_Y_LOC_Q = Q125
  EndIf
  If (Q100&$2000000 > 0)
    VS_Z_LOC_Q = Q126
  EndIf
  If (Q100&$100000 > 0)
    VS_U_LOC_Q = Q121
  EndIf
  If (Q100&$200000 > 0)
    VS_V_LOC_Q = Q122
  EndIf
  If (Q100&$400000 > 0)
    VS_W_LOC_Q = Q123
  EndIf
  VS_A_ABS_M = VS_A_WRK_Q + VS_A_LOC_Q + VS_A_TOOL_Q
  VS_B_ABS_M = VS_B_WRK_Q + VS_B_LOC_Q + VS_B_TOOL_Q
  VS_C_ABS_M = VS_C_WRK_Q + VS_C_LOC_Q + VS_C_TOOL_Q
  VS_X_ABS_M = VS_X_WRK_Q + VS_X_LOC_Q + VS_X_TOOL_Q
  VS_Y_ABS_M = VS_Y_WRK_Q + VS_Y_LOC_Q + VS_Y_TOOL_Q
  VS_Z_ABS_M = VS_Z_WRK_Q + VS_Z_LOC_Q + VS_Z_TOOL_Q
  VS_U_ABS_M = VS_U_WRK_Q + VS_U_LOC_Q + VS_U_TOOL_Q
  VS_V_ABS_M = VS_V_WRK_Q + VS_V_LOC_Q + VS_V_TOOL_Q
  VS_W_ABS_M = VS_W_WRK_Q + VS_W_LOC_Q + VS_W_TOOL_Q
  RETURN
  
  
  // G53 机械坐标系设定Machine Coordinate Select CSN #1 ///////////////////////////////////
  N53000
  VS_GGROUP0_1_M =  53
  RETURN
  
  
  
  // G54 - 59 Work Coordinate Select CSN #1 /////////////////////////////////
  // This is a temporary method to allow correct disply by PC
  // A-W = Axis coefficents
  // I     = Offset number
  N54000//坐标和零点偏置的设置
  READ(I,A,B,C,X,Y,Z,U,V,W)
  GOSUB 54
  VS_GGROUP14_1_M =  54
  RETURN
  
  
  N55000//坐标和零点偏置的设置
  READ(I,A,B,C,X,Y,Z,U,V,W)
  GOSUB 54
  VS_GGROUP14_1_M =  55
  RETURN
  
  
  N56000//坐标和零点偏置的设置
  READ(I,A,B,C,X,Y,Z,U,V,W)
  GOSUB 54
  VS_GGROUP14_1_M =  56
  RETURN
  
  
  N57000//坐标和零点偏置的设置
  READ(I,A,B,C,X,Y,Z,U,V,W)
  GOSUB 54
  VS_GGROUP14_1_M =  57
  RETURN
  
  
  N58000//坐标和零点偏置的设置
  READ(I,A,B,C,X,Y,Z,U,V,W)
  GOSUB 54
  VS_GGROUP14_1_M =  58
  RETURN
  
  
  N59000//坐标和零点偏置的设置
  READ(I,A,B,C,X,Y,Z,U,V,W)
  GOSUB 54
  VS_GGROUP14_1_M =  59
  RETURN
  
  
  //G68模式旋转----围绕坐标原点或编写的坐标位置重复某一工作程序?????????
  // G68 Work Rotation Select CSN #1 /////////////////////////////////
  // This is a temporary method to allow correct disply by PC
  N68000
  VS_GGROUP16_1_M = 68
  RETURN
  READ(X,Y,Z,U,V,W,r)
  // X = XY ROTATION IN RADIANS G17
  // Y = YZ ROTATION IN RADIANS G19
  // Z = ZX ROTATION IN RADIANS G18
  // UVW = CENTER OF ROTATION
  // XY Plane
  If (Q100&$800000 > 0)
    CS_STATUS6_M = CS_STATUS6_M | CS_ROTATION_ON
  EndIf
  // YZ Plane
  If (Q100&$1000000 > 0)
    CS_STATUS6_M = CS_STATUS6_M | CS_ROTATION_ON
  EndIf
  // ZX Plane
  If (Q100&$2000000 > 0)
    CS_STATUS6_M = CS_STATUS6_M | CS_ROTATION_ON
  EndIf
  RETURN
  
  
  // G69 取消模式旋转Work Rotation Cancel CSN #1 /////////////////////////////////
  // This is a temporary method to allow correct display by PC
  N69000
  VS_GGROUP16_1_M = 69
  RETURN
  CS_STATUS6_M = CS_STATUS6_M & (CS_STATUS6_M ^ CS_ROTATION_ON)
  RETURN
  
  
  //; G90 绝对坐标编程Absolute mode -------------------------------------------------------
  N90000
  ABS
  VS_GGROUP3_1_M = 90
  ABS_MODE = 1
  RETURN
  
  
  //; G91相对坐标编程 Incremental mode ----------------------------------------------------
  N91000
  //INC   ;UP process modified. 2000-11-14
  //INC   //临时修改
  VS_GGROUP3_1_M = 91
  ABS_MODE = 0  //临时修改
  RETURN
  
  
  //; G92 -坐标和零点偏置的设置Coordinate system set ----------------------------------------------
  N92000
  DWELL0
  READ(A,B,C,U,V,W,X,Y,Z,S)
  VS_GGROUP0_1_M = 92
  // See what letters were passed
  // Commanded position M-Variables are not already defined for A,B,C
  // or U,V,W If you are going to be using one of these axis with G92
  // they must be added
  /*
  If (Q100&$01 > 0)
    PSET A(Q101 + VS_A_WRK_Q)
  EndIf
  If (Q100&$02 > 0)
    PSET B(Q102 + VS_B_WRK_Q)
  EndIf
  If (Q100&$04 > 0)
    PSET C(Q103 + VS_C_WRK_Q)
  EndIf
  If (Q100&$800000 > 0)
    PSET X(Q124 + VS_X_WRK_Q)
  EndIf
  If (Q100&$1000000 > 0)
    PSET Y(Q125 + VS_Y_WRK_Q)
  EndIf
  If (Q100&$2000000 > 0)
    //  PSET Z(Q126 + VS_Z_WRK_Q + VS_Z_TOOL_Q)//add VS_Z_TOOL_Q to treat for G92.1 when Tool Length Compensation was ON,Billy99-4
    PSET Z(Q126 + VS_Z_WRK_Q )//add VS_Z_TOOL_Q to treat for G92.1 when Tool Length Compensation was ON,Billy99-4
    
  EndIf
  If (Q100&$100000 > 0)
    PSET U(Q121 + VS_U_WRK_Q)
  EndIf
  If (Q100&$200000 > 0)
    PSET V(Q122 + VS_V_WRK_Q )
  EndIf
  If (Q100&$400000 > 0)
    PSET W(Q123 + VS_W_WRK_Q)
  EndIf
  */
  /* If (Sispassedsetthemaximumspindlespeed*/
    /* If (Q100&$40000 > 0)
      VS_SPINDLE_MAX_RPM_M = Q119
    EndIf
    DWELL0
    */
    RETURN
    
    
    // G92.1取消工件坐标系的零点偏置
    //取消G92设置的工件坐标偏置
    //Machine Coordinate Select CSN #1 ///////////////////////////////////
    N92100
    VS_GGROUP0_1_M = 1092
    //DWELL0
    //PSET X(X_CMD_POS_M - POS_BIAS1_M/I108/32/PULSES_PER_UNIT_1 + AXIS_DEF_OFS1_M)
    //PSET Y(Y_CMD_POS_M - POS_BIAS2_M/I208/32/PULSES_PER_UNIT_2 + AXIS_DEF_OFS2_M)
    //PSET Z(Z_CMD_POS_M - POS_BIAS3_M/I308/32/PULSES_PER_UNIT_3 + AXIS_DEF_OFS3_M)
    //PSET A(A_CMD_POS_M - POS_BIAS7_M/I708/32/PULSES_PER_UNIT_7 + AXIS_DEF_OFS7_M)
    //PSET B(B_CMD_POS_M - POS_BIAS8_M/I808/32/PULSES_PER_UNIT_8 + AXIS_DEF_OFS8_M)
    //DWELL0
    RETURN
    
    
    
    //; G94 进给率F为:mm(inches)/min//Feed per minute -----------------------------------------------------
    N94000
    VS_GGROUP5_1_M = 94
    ;@SET_OFF(CS_STATUS3_M,CS_SPND_FEED)
    RETURN
    
    
    
    //; G97 恒刀心速度 -?????????----------------------------------------------------
    N97000
    ;@SET_OFF(CS_STATUS3_M,CS_SPND_CSS)
    VS_GGROUP13_1_M = 97
    RETURN
    
    
    //高次方程输入.....
    
    
    //**********************************************************************************
    //**********************************************************************************
    
    // resume status on Canned cycle end and Code with multimotion //////////////////
    N4
    //NO_CYCLE_START=0	//it is steaded by CS_COMPLEX_MOTION
    //after UI-P did R command,motion do STOP if SingleRun=ON,Billy99-11
    //@SET_OFF(CS_COMMAND7_M,CS_COMPLEX_MOTION)
    If (@ON(CS_COMMAND3_M,CS_SINGLE_BLOCK))
      STOP//after UI-P did R command
    EndIf
    RETURN
    
    
    // Set relative and absolute translation CSN #1 ////////////////////////////////
    N54
    VS_A_WRK_Q = 0
    VS_B_WRK_Q = 0
    VS_C_WRK_Q = 0
    VS_X_WRK_Q = 0
    VS_Y_WRK_Q = 0
    VS_Z_WRK_Q = 0
    VS_U_WRK_Q = 0
    VS_V_WRK_Q = 0
    VS_W_WRK_Q = 0
    If (Q100&$01 > 0)
      VS_A_WRK_Q = Q101
    EndIf
    If (Q100&$02 > 0)
      VS_B_WRK_Q = Q102
    EndIf
    If (Q100&$04 > 0)
      VS_C_WRK_Q = Q103
    EndIf
    If (Q100&$800000 > 0)
      VS_X_WRK_Q = Q124
    EndIf
    If (Q100&$1000000 > 0)
      VS_Y_WRK_Q = Q125
    EndIf
    If (Q100&$2000000 > 0)
      VS_Z_WRK_Q = Q126
    EndIf
    If (Q100&$100000 > 0)
      VS_U_WRK_Q = Q121
    EndIf
    If (Q100&$200000 > 0)
      VS_V_WRK_Q = Q122
    EndIf
    If (Q100&$400000 > 0)
      VS_W_WRK_Q = Q123
    EndIf
    VS_A_ABS_M = VS_A_WRK_Q + VS_A_LOC_Q + VS_A_TOOL_Q
    VS_B_ABS_M = VS_B_WRK_Q + VS_B_LOC_Q + VS_B_TOOL_Q
    VS_C_ABS_M = VS_C_WRK_Q + VS_C_LOC_Q + VS_C_TOOL_Q
    VS_X_ABS_M = VS_X_WRK_Q + VS_X_LOC_Q + VS_X_TOOL_Q
    VS_Y_ABS_M = VS_Y_WRK_Q + VS_Y_LOC_Q + VS_Y_TOOL_Q
    VS_Z_ABS_M = VS_Z_WRK_Q + VS_Z_LOC_Q + VS_Z_TOOL_Q
    VS_U_ABS_M = VS_U_WRK_Q + VS_U_LOC_Q + VS_U_TOOL_Q
    VS_V_ABS_M = VS_V_WRK_Q + VS_V_LOC_Q + VS_V_TOOL_Q
    VS_W_ABS_M = VS_W_WRK_Q + VS_W_LOC_Q + VS_W_TOOL_Q
    RETURN
    
CLOSE

























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -