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

📄 grinder8a_g.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

read(X,Y,U,V)

U_G0_P=Q121
V_G0_P=Q122

COMMAND"&2B101R"

rapid
X(Q124)Y(Q125)

While ((MOTOR3_STATUS_M&$1) = 0)
  dwell20
EndWhile

While ((MOTOR4_STATUS_M&$1) = 0)
  dwell20
EndWhile

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(X)
/*If (Q100&$800 > 0)
While (Q112 > 0.5)
  DWELL(8000000)
  Q112 = Q112 - 1.0
EndWhile
EndIf*/
If (Q100&$800000 > 0)
  If (@ON(CS_STATUS3_M,CS_FEED_HOLD))
    STOP
  EndIf
  DWELL(Q124 * 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 )
  
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 + -