584,837 active members*
5,516 visitors online*
Register for free
Login
IndustryArena Forum > MetalWorking Machines > Okuma > Twin-Turret LU-300 with OSP-P200L macros and TLM
Results 1 to 7 of 7
  1. #1
    Join Date
    Jul 2020
    Posts
    3

    Twin-Turret LU-300 with OSP-P200L macros and TLM

    Hi all. I have been searching the internet for old posts and threads that might address my questions. I have not been able to find satisfactory examples or answers- at least not ones I'm happy with.

    I am making a single program with multiple sub-programs on my twin turret LU-300 with OSP-P200L. There need to be lots of controls in place to eliminate chances for operator mistakes. I want to write...
    1.)tool geometry in X and Z
    2.)tool nose radius in X and Z
    3.)tool nose radius quadrant for cutter comp (saw some reports that writing this P value is not possible)

    4.)limit wear offset to an absolute value of .015"
    5.)max tool life management (TLM) numbers in cycles

    Writing all this means if anyone ever tries changing a number in one of the appropriate tables it is over-written in the next part cycle. I have tried setting up TLM on Okumas before, and I find it extremely convoluted. I've never been successful with getting it to work. I do not want redundant tooling at this point! That will come after I can get the basics working. I want to set the TLM max counts in a sub, jump back to the main, and count the tool usage in another cycle. The TLM table gets read and finds the expired tool at the start of the next cycle. How do I do this on my okuma? How do I differentiate between T1 on turret A and T1 on turret B? I was wondering if running a unique sub-routine after each G13 and G14 the controller realizes the tools in those subs are for each specific turret. Here's the geometry check sub-routine I want to add the TLM write values in to that would occur after a G14 in the main program. This program attempts to write tool geometry, so if people enter offset data in the geometry table it's immediately overwritten. The program attempts to write tool nose radius (TNR) data. I'd like to write what quadrant/P-value too. I'd like to write the max TLM count here. Will I have to do a messy count with if statements and jumps?

    07500
    (G14 B lower turret)
    (T1 RH DNMG)
    VTOFX [1]=1.584
    VTOFZ [1]=-1.2550
    VDNRX [0101]=.047
    VDNRZ [0101]=.047
    VTLCN [1]=__________ (write max # of cylces to TLM table)
    (T2 WNMG)
    VTOFX [2]=0.210
    VTOFZ [2]=0.138
    VDNRX [0202]=.047
    VDNRZ [0202]=.047
    VTLCN [2]=__________ (write max # of cylces to TLM table)
    (T4 WNMG)
    VTOFX [4]=0.323
    VTOFZ [4]=0.065
    VDNRX [0404]=.047
    VDNRZ [0404]=.047
    VTLCN [4]=__________ (write max # of cylces to TLM table)
    (T5 DNMG)
    VTOFX [5]=1.562
    VTOFZ [5]=0.130
    VDNRX [0505]=.047
    VDNRZ [0505]=.047
    VTLCN [5]=__________ (write max # of cylces to TLM table)
    (T6 Boring Bar)
    VTOFX [6]=-1.805
    VTOFZ [6]=2.646
    VDNRX [0606]=.0156
    VDNRZ [0606]=.0156
    VTLCN [6]=__________ (write max # of cylces to TLM table)
    (T7 RH DNMG)
    VTOFX [7]=.871
    VTOFZ [7]=0.0
    VDNRX [0707]=.047
    VDNRZ [0707]=.047
    VTLCN [7]=__________ (write max # of cylces to TLM table)
    (T8 Boring Bar)
    VTOFX [8]=-.838
    VTOFZ [8]=2.052
    VDNRX [0808]=.0156
    VDNRZ [0808]=.0156
    VTLCN [8]=__________ (write max # of cylces to TLM table)

    TOOL=0
    NLOOP TOOL=TOOL+1
    IF [ABS[VDTWX[TOOL] GT .015]] NALM1
    IF [ABS[VDTWZ[TOOL] GT .015]] NALM1
    IF [TOOL LT 9] NLOOP

    GOTO NEND

    NALM1 VUACM [1]='BTOOL OFST >.015'

    NEND RTS

  2. #2
    Join Date
    Jun 2015
    Posts
    4131

    Re: Twin-Turret LU-300 with OSP-P200L macros and TLM

    hy these work on osp300, for tool register #1 :
    ... main offset - vtofx[1] vtofz[1]
    ... wear - vtwox[1] vtwoz[1]
    ... rad - vnsrx[1] vnsrz[1]
    ... p - vnrpn[1]

    i have checked, and it seems that those vdnr* variables are for multi-edge tools ... do you have turret posts with more than 1 tool mounted ?

    i don't have exp with a 2T lathe osp200, but for now, just test them, so to see if they work

    your idea is good, and there is room for improvement

    i started using such ' safeties ' a few years ago ( in order to protect against wrong inputs caused by newbies or by tired operators ), and i have also other tricks that deals with factors that are not related to operators, which involves:
    ... lowering admisible servo torque ( cnc reaction in case of colision will be faster )
    ... complementary axis monitoring ( which deals with linear axis rapids, rotary axis acceleratios, keeping the monitor function always active )
    ... skip functions ( verifing, for example if part was cut properly, avoiding extra force caused by barr pullers or during part transfer, checking for bar sliding inside the chuck during heavy cutting, etc )
    ... increasing monitoring resolution and reaction time, etc

    if you wish, i may help you to implement all those
    / kindly
    Ladyhawke - My Delirium, https://www.youtube.com/watch?v=X_bFO1SNRZg

  3. #3
    Join Date
    Jul 2020
    Posts
    3

    Re: Twin-Turret LU-300 with OSP-P200L macros and TLM

    Quote Originally Posted by deadlykitten View Post
    hy these work on osp300, for tool register #1 :
    ... main offset - vtofx[1] vtofz[1]
    ... wear - vtwox[1] vtwoz[1]
    ... rad - vnsrx[1] vnsrz[1]
    ... p - vnrpn[1]

    i have checked, and it seems that those vdnr* variables are for multi-edge tools ... do you have turret posts with more than 1 tool mounted ?

    i don't have exp with a 2T lathe osp200, but for now, just test them, so to see if they work

    your idea is good, and there is room for improvement

    i started using such ' safeties ' a few years ago ( in order to protect against wrong inputs caused by newbies or by tired operators ), and i have also other tricks that deals with factors that are not related to operators, which involves:
    ... lowering admisible servo torque ( cnc reaction in case of colision will be faster )
    ... complementary axis monitoring ( which deals with linear axis rapids, rotary axis acceleratios, keeping the monitor function always active )
    ... skip functions ( verifing, for example if part was cut properly, avoiding extra force caused by barr pullers or during part transfer, checking for bar sliding inside the chuck during heavy cutting, etc )
    ... increasing monitoring resolution and reaction time, etc

    if you wish, i may help you to implement all those
    / kindly
    DK, thanks for the reply. I am very interested in the constant load monitoring through rapid as this is where 90%+ of our wrecks occur- and we all know a rapid wreck is usually the most devastating wreck. First I want to get these limits working since they're already on a learning curve for me. I'm much more familiar with fanuc and Mori MAPPS controllers.

    Yes, I did see that the VDNR variables are for multi-edged tools, but I left out a 2-digit qualifier in the [] that I think account for not have a Y-axis or multiple-edged tools in a single turret pocket. See the attached picture. I have left off the ## qualifier in the [].

    Also, do you have any insight as to how I determine which turret these checks apply to? Is it simply that if the sub-program is in the G13 portion of the main program than that sub- let's say O7000- will apply its checks to turret A, and if the subprogram- let's say O7500- is after the G14 in the main program that sub's checks will apply to turret B?
    Attached Thumbnails Attached Thumbnails Okuma CC criteria.jpg  

  4. #4
    Join Date
    Jun 2015
    Posts
    4131

    Re: Twin-Turret LU-300 with OSP-P200L macros and TLM

    do you have any insight as to how I determine which turret these checks apply to?
    hy, i don't have acces to a lathe similar to yours, so i can't be specific

    let's hope that someone will post something about those

    otherwise, i need to run some trials, i need to see the machine interface, how the program is built, the T syntax, the link with tool register, etc ... i can't continue without feedback from you / your machine

    Yes, I did see that the VDNR variables are for multi-edged tools
    is ok if you could shorten the argument, means that you know what you do

    i didn't look into vdnr* very much, because i believe that is possible to use the vnsr* ... i use it a lot, and i hope i can make it work for you

    See the attached picture
    there is nothing attached ... you may need to post a few more replies until your attachements will show up

    rapid as this is where 90%+ of our wrecks occur
    yup, that's true ... if there are similar cases that leads to crash during rapids, is possible to avoid those by re-writing the code ... thus if you have a list with 'what-happened', then it may be possible to observe a pattern, or a frequent cause

    if you wish, we will discuss this later

    First I want to get these limits working
    ok, to do this, i need data from your machine / kindly
    Ladyhawke - My Delirium, https://www.youtube.com/watch?v=X_bFO1SNRZg

  5. #5
    Join Date
    Jul 2020
    Posts
    3

    Re: Twin-Turret LU-300 with OSP-P200L macros and TLM

    I can see the attachment, so you must be right. I must need more posts to be able to share attachments. Does anyone have any information on writing the max tool life amount and how to handle the count and alarming out? does this have to be done with IF statements, jumps, and VUACM alarms?

  6. #6
    Join Date
    Apr 2009
    Posts
    1262

    Re: Twin-Turret LU-300 with OSP-P200L macros and TLM

    OK, lets give you a few pointers:

    1. DK is right on the system variables except they must bee all CAPS. the P value can be set using VNRPN.
    2. The System Variables are active depending on which turret they are run from, so if VTOFX[1] is called under G13 it will be for the A-Turret (upper). If called under G14 it will be for the B-turret.
    Sub programs are different in that the same sub can be called from either turret, but as the program is called up, the program is sorted into A and B code, so the sub will "show up" on both sides. So it is better to have independent code in many cases rather than shared.
    3. The system variable you want for Changing the SET value for tool life is VTLSN not VTLCN which is the COUNT number.
    4. One line of code can handle all of the setting data for the tool that you should need. This will save a lot of single blocking.
    EX:
    NTA1 VTOFX[1]=1.2345 VTOFZ[1]=1.2345 VNSRX[1]=.047 VNSRZ[1]=.047 VNRPN[1]=3 VTLSN[1]=150
    NTA2 VTOFX[2]=1.2345 VTOFZ[2]=1.2345 VNSRX[2]=.0315 VNSRZ[2]=.0315 VNRPN[2]=3 VTLSN[2]=200

    Here's some sample code for "custom tool life":

    IF[VORD[0016]EQ 1]NPASS (IF MACHINE LOCK ON)
    VTLCN[1]=VTLCN[1]+1 (ADD IN A COUNT FOR EACH TOOL USED IN PROGRAM)
    VTLCN[2]=VTLCN[2]+1
    VTLCN[3]=VTLCN[3]+1
    VTLCN[4]=VTLCN[4]+1
    VTLCN[7]=VTLCN[7]+1
    VTLCN[8]=VTLCN[8]+1
    VTLCN[9]=VTLCN[9]+1
    VTLCN[10]=VTLCN[10]+1
    VTLCN[11]=VTLCN[11]+1
    VTLCN[12]=VTLCN[12]+1
    ATLF=1 (ACTIVE TOOL LIFE COUNTER)
    NINC IF[[VTLCN[ATLF]]LT[VTLSN[ATLF]]]NTLC (IF COUNT NUMBER IS LESS THAN SET NUMBER, CONTINUE ELSE ALARM)
    VUACM[1]='A TOOL LIFE EXP' (MESSAGE)
    VDOUT[991]=ATLF (ACTIVATE ALARM C)
    NTLC ATLF=ATLF+1
    IF[ATLF LE 12]NINC

    Normally this is all accomplished using the TLID command in the program at either the end or the beginning, but sometimes it may cause havoc with attached devices so this makes sure the are all check exactly when you want and generates the desired alarm at the end of the program.

    5. Limiting your wear is done in your parameters. Just set the desired limit value to the OPLW 43 and 44 or OTHER FUNCTION 3 Min value of tool wear offset and Max value of tool wear offset. (yes they can be different) If you wnat the limits different on each tool, then you will need to write your own SUB like you did in your example.

    One more goody:

    Since there are a lot of switches, knobs, overrides on this machine, I suggest using a "Check Program" to make sure all of the settings are correct before running the cycle. It can check all of them in about 1/2 second, but will save your butt and lost time many times over when used. Here's the sample code:

    G13 (WRITTEN FOR LT200MY WITH P200 CONTROL)
    G140
    (TURN FEED TO 0 AND SINGLE BLOCK ON FOR RESTART.)
    ( SWITCHES CAN BE ADJUSTED AFTER CHECK HAS OCCURED.
    INDIVIDUAL MODE CAN ONLY BE USED DURING RESTART.)
    G50S500
    CALL OCHKA (OR OCHK1 FOR NO BARFEED)
    G14
    G141
    G50S500
    CALL OCHKB
    M2
    OCHKA
    IF[VORD[0016]EQ 1]NRTS (IF MACHINE LOCK ON)
    (IF[VTOFZ[2]EQ 0]NCK0
    VUACM[1]='T-A2 NOT AT Z0.0'
    VDOUT[992]=1)
    NCK0 IF[VORD[0015]EQ 0]NCK1
    VUACM[1]='DRY RUN ON'
    VDOUT[992]=1
    NCK1(IF[VORD[0014]EQ 0]NCK2
    VUACM[1]='BLOCK DELETE ON'
    VDOUT[992]=1)
    NCK2 IF[VORD[0022]EQ 1]NCK4
    VUACM[1]='SPINDLE OVERIDE'
    VDOUT[992]=1
    NCK4 IF[VORD[0031]EQ 1]NCK5
    VUACM[1]='COOLANT OFF'
    VDOUT[992]=1
    NCK5 IF[VORD[011A]EQ 1]NCK6
    VUACM[1]='R-SPNDL OVERRIDE'
    VDOUT[992]=1
    NCK6 IF[VRSTT NE 0]NCK7 (IF RESTART)
    NCK IF[VORD[0011]EQ 0]NCK7
    VUACM[1]='A INDIVIDUAL ON'
    VDOUT[992]=1
    NCK7 IF[VORD[001C]EQ 1]NCK8
    VUACM[1]='LOAD MONITOR OFF'
    VDOUT[992]=1
    NCK8 IF[VORD[0110]EQ 1]NCK9
    VUACM[1]='MA OVERRIDE'
    VDOUT[992]=1
    NCK9 IF[VORD[0106]EQ 1]NCK10
    VUACM[1]='MB OVERRIDE'
    VDOUT[992]=1
    NCK10 IF[VORD[0143]EQ 0]NCK11
    VUACM[1]='SYSTEM LINK ON'
    VDOUT[992]=1
    NCK11 IF[VRSTT NE 0]NCK12 (IF RESTART JUMP)
    IF[VORD[0013]EQ 1]NCK12 (SINGLE BLOCK)
    IF[VORD[0023]EQ 1]NCK12
    VUACM[1]='FEEDRATE NOT 100'
    VDOUT[992]=1
    NCK12 IF[VRSTT EQ 0]NRTS (IF NOT RESTART JUMP)
    NCKR1 IF[[VIRD[0030]+VIRD[0031]+VIRD[0032]]EQ 0]NCKR2
    VUACM[1]='FEEDRATE TOO HI'
    VDOUT[992]=1
    NCKR2 IF[VORD[0013]EQ 1]NRTS
    VUACM[1]='SINGLE BLK OFF'
    VDOUT[992]=1
    NRTS RTS
    OCHKB
    IF[VORD[0016]EQ 1]NRTS
    (IF[VTOFZ[2]EQ 0]NCK1
    VUACM[1]='T-B2 NOT AT Z0.0'
    VDOUT[992]=1)
    NCK1 IF[VRSTT NE 0]NRTS (IF RESTART)
    NCK13 IF[VORD[0012]EQ 0]NRTS
    VUACM[1]='B INDIVIDUAL ON'
    VDOUT[992]=1
    NRTS RTS
    OCHK1 (WITHOUT BARFEEDER)
    IF[VORD[0016]EQ 1]NRTS (IF MACHINE LOCK ON)
    IF[VORD[0015]EQ 0]NCK0
    VUACM[1]='DRY RUN ON'
    VDOUT[992]=1
    NCK0(IF[VORD[0014]EQ 0]NCK2
    VUACM[1]='BLOCK DELETE ON'
    VDOUT[992]=1)
    NCK2 IF[VRSTT NE 0]NCK3 (IF RESTART)
    NCK00 IF[[VIRD[0030]+VIRD[0031]+VIRD[0032]]EQ 0]NCK3
    NCK IF[VORD[0023]EQ 1]NCK3
    VUACM[1]='FEEDRATE NOT 100'
    VDOUT[992]=1
    NCK3 IF[VORD[0022]EQ 1]NCK4
    VUACM[1]='SPINDLE OVERIDE'
    VDOUT[992]=1
    NCK4 IF[VORD[0031]EQ 1]NCK5
    VUACM[1]='COOLANT OFF'
    VDOUT[992]=1
    NCK5 IF[VORD[011A]EQ 1]NCK6
    VUACM[1]='R-SPNDL OVERRIDE'
    VDOUT[992]=1
    NCK6 IF[VRSTT NE 0]NCK7 (IF RESTART)
    NCK IF[VORD[0011]EQ 0]NCK7
    VUACM[1]='A INDIVIDUAL ON'
    VDOUT[992]=1
    NCK7 IF[VORD[001C]EQ 1]NCK8
    VUACM[1]='LOAD MONITOR OFF'
    VDOUT[992]=1
    NCK8 IF[VORD[0110]EQ 1]NCK9
    VUACM[1]='MA OVERRIDE'
    VDOUT[992]=1
    NCK9 IF[VORD[0106]EQ 1]NCK11
    VUACM[1]='MB OVERRIDE'
    VDOUT[992]=1
    NCK10 IF[VORD[0143]EQ 0]NCK11
    VUACM[1]='SYSTEM LINK ON'
    VDOUT[992]=1
    NCK11 IF[VRSTT EQ 0]NRTS (IF RESTART)
    NCKR1 IF[[VIRD[0030]+VIRD[0031]+VIRD[0032]]EQ 0]NCKR2
    VUACM[1]='FEEDRATE TOO HI'
    VDOUT[992]=1
    NCKR2 IF[VORD[0013]EQ 1]NRTS
    VUACM[1]='SINGLE BLK OFF'
    VDOUT[992]=1
    NRTS RTS


    Insert this as a SSB file and it will be readily available for ALL your programs by using CALL OCHKA (OR OCHK1 FOR NO BARFEED) and CALL OCHKB (B-turret)

    Bonus!

    Once you venture into Load Monitoring, you will find that getting the AUTO-SET to work correctly is problematic since they do it based on % rather than a Base + fixed value. This program will "fix" that by changing ALL you load monitoring values to Base + after running auto set function:

    G13
    G140
    (THIS PROGRAM CHANGES LOAD MONITOR VALUES TO BASE+ FIXED VALUES
    RATHER THAN BASE * PERCENT VALUE
    USE AMT1 AND AMT2 FOR 1ST AND 2ND LEVEL SETTINGS OVER BASE LOAD
    TLN = STARTING VLMON# ETLN= ENDING VLMON#)
    (********)
    TLN=0 AMT1=7 AMT2=14 ETLN=64 (PARAMETER SETUP FOR A TURRET)
    (********)
    NSTRT TLN=TLN+1
    NETLN IF [TLN GT ETLN] NEND
    NCKAL TOTB=VLMSB[TLN]+VLMWB[TLN]+VLMXB[TLN](+VLMYB[TLN]) +VLMZB[TLN]+VLMMB[TLN]+VLMCB[TLN]+VLMBB[TLN]
    TOT1=VLMS1[TLN]+VLMW1[TLN]+VLMX1[TLN](+VLMY1[TLN]) +VLMZ1[TLN]+VLMM1[TLN]+VLMC1[TLN]+VLMB1[TLN]
    IF[[TOTB+TOT1]EQ 0]NSTRT
    NMSB IF [VLMSB[TLN]EQ 0]NZS ( SPINDLE )
    VLMS1[TLN]=VLMSB[TLN]+AMT1 VLMS2[TLN]=VLMSB[TLN]+AMT2
    GOTO NMWB
    NZS VLMS1[TLN]=0 VLMS2[TLN]=0
    NMWB IF[VLMWB[TLN]EQ 0]NZW ( W-AXIS )
    VLMW1[TLN]=VLMWB[TLN]+AMT1 VLMW2[TLN]=VLMWB[TLN]+AMT2
    GOTO NMXB
    NZW VLMW1[TLN]=0 VLMW2[TLN]=0
    NMXB IF[VLMXB[TLN]EQ 0]NZX ( X-AXIS )
    VLMX1[TLN]=VLMXB[TLN]+AMT1 VLMX2[TLN]=VLMXB[TLN]+AMT2
    GOTO NMYB
    NZX VLMX1[TLN]=0 VLMX2[TLN]=0
    NMYB(IF[VLMYB[TLN]EQ 0]NZY)( Y-AXIS )
    (VLMY1[TLN]=VLMYB[TLN]+AMT1 VLMY2[TLN]=VLMYB[TLN]+AMT2)
    GOTO NMZB
    NZY VLMY1[TLN]=0 VLMY2[TLN]=0
    NMZB IF[VLMZB[TLN]EQ 0]NZZ ( Z-AXIS )
    VLMZ1[TLN]=VLMZB[TLN]+AMT1 VLMZ2[TLN]=VLMZB[TLN]+AMT2
    GOTO NMMB
    NZZ VLMZ1[TLN]=0 VLMZ2[TLN]=0
    NMMB IF[VLMMB[TLN]EQ 0]NZM ( M-AXIS )
    VLMM1[TLN]=VLMMB[TLN]+AMT1 VLMM2[TLN]=VLMMB[TLN]+AMT2
    GOTO NMCB
    NZM VLMM1[TLN]=0 VLMM2[TLN]=0
    NMCB IF[VLMCB[TLN]EQ 0]NZC ( C-AXIS )
    VLMC1[TLN]=VLMCB[TLN]+AMT1 VLMC2[TLN]=VLMCB[TLN]+AMT2
    GOTO NMBB
    NZC VLMC1[TLN]=0 VLMC2[TLN]=0
    NMBB IF[VLMBB[TLN]EQ 0]NZB ( SPINDLE 2 )
    VLMB1[TLN]=VLMBB[TLN]+AMT1 VLMB2[TLN]=VLMBB[TLN]+AMT2
    GOTO NLOOP
    NZB VLMB1[TLN]=0 VLMB2[TLN]=0
    NLOOP GOTO NSTRT
    G14
    G141
    (THIS PROGRAM CHANGES LOAD MONITOR VALUES TO BASE+ FIXED VALUES
    RATHER THAN BASE * PERCENT VALUE
    USE BMT1 AND BMT2 FOR 1ST AND 2ND LEVEL SETTINGS OVER BASE LOAD
    TLNB = STARTING VLMON# ETNB= ENDING VLMON#)
    (********)
    TLNB=0 BMT1=7 BMT2=14 ETNB=64 (PARAMETER SETUP FOR B TURRET)
    (********)
    NSTRT TLNB=TLNB+1
    NETLN IF [TLNB GT ETNB] NEND
    NCKAL TOBB=VLMSB[TLNB]+VLMWB[TLNB]+VLMXB[TLNB](+VLMYB[TLNB]) +VLMZB[TLNB]+VLMMB[TLNB]+VLMCB[TLNB]+VLMBB[TLNB]
    TOB1=VLMS1[TLNB]+VLMW1[TLNB]+VLMX1[TLNB](+VLMY1[TLNB]) +VLMZ1[TLNB]+VLMM1[TLNB]+VLMC1[TLNB]+VLMB1[TLNB]
    IF[[TOBB+TOB1]EQ 0]NSTRT
    NMSB IF [VLMSB[TLNB]EQ 0]NZS ( SPINDLE )
    VLMS1[TLNB]=VLMSB[TLNB]+BMT1 VLMS2[TLNB]=VLMSB[TLNB]+BMT2
    GOTO NMWB
    NZS VLMS1[TLNB]=0 VLMS2[TLNB]=0
    NMWB IF[VLMWB[TLNB]EQ 0]NZW ( W-AXIS )
    VLMW1[TLNB]=VLMWB[TLNB]+BMT1 VLMW2[TLNB]=VLMWB[TLNB]+BMT2
    GOTO NMXB
    NZW VLMW1[TLNB]=0 VLMW2[TLNB]=0
    NMXB IF[VLMXB[TLNB]EQ 0]NZX ( X-AXIS )
    VLMX1[TLNB]=VLMXB[TLNB]+BMT1 VLMX2[TLNB]=VLMXB[TLNB]+BMT2
    GOTO NMYB
    NZX VLMX1[TLNB]=0 VLMX2[TLNB]=0
    NMYB(IF[VLMYB[TLNB]EQ 0]NZY)( Y-AXIS )
    (VLMY1[TLNB]=VLMYB[TLNB]+BMT1 VLMY2[TLNB]=VLMYB[TLNB]+BMT2)
    GOTO NMZB
    NZY VLMY1[TLNB]=0 VLMY2[TLNB]=0
    NMZB IF[VLMZB[TLNB]EQ 0]NZZ ( Z-AXIS )
    VLMZ1[TLNB]=VLMZB[TLNB]+BMT1 VLMZ2[TLNB]=VLMZB[TLNB]+BMT2
    GOTO NMMB
    NZZ VLMZ1[TLNB]=0 VLMZ2[TLNB]=0
    NMMB IF[VLMMB[TLNB]EQ 0]NZM ( M-AXIS )
    VLMM1[TLNB]=VLMMB[TLNB]+BMT1 VLMM2[TLNB]=VLMMB[TLNB]+BMT2
    GOTO NMCB
    NZM VLMM1[TLNB]=0 VLMM2[TLNB]=0
    NMCB IF[VLMCB[TLNB]EQ 0]NZC ( C-AXIS )
    VLMC1[TLNB]=VLMCB[TLNB]+BMT1 VLMC2[TLNB]=VLMCB[TLNB]+BMT2
    GOTO NMBB
    NZC VLMC1[TLNB]=0 VLMC2[TLNB]=0
    NMBB IF[VLMBB[TLNB]EQ 0]NZB ( SPINDLE 2 )
    VLMB1[TLNB]=VLMBB[TLNB]+BMT1 VLMB2[TLNB]=VLMBB[TLNB]+BMT2
    GOTO NLOOP
    NZB VLMB1[TLNB]=0 VLMB2[TLNB]=0
    NLOOP GOTO NSTRT
    NEND M2

    To use this just run your main program with fresh inserts and Auto-Set ON (proven program of course). Then call up this program and cycle start it. It will adjust every load value so that you have about a 95% chance of success rather than 95% chance of failure. Then make sure Monitoring is ON (auto set off) and you will will be ready for production. The only trouble I've seen is if your base value is way too high since it can't adjust them over 200%. This is usually a problem with what you are monitoring such as G96 while monitoring spindle load and Facing off a part. Not a good idea.

    Best regards - remember you asked for it! ;-) (well some of it anyway)


    PS files attached for your convenience.
    Experience is what you get just after you needed it.

  7. #7
    Join Date
    Jun 2015
    Posts
    4131

    Re: Twin-Turret LU-300 with OSP-P200L macros and TLM

    Does anyone have any information on writing the max tool life amount and how to handle the count and alarming out ?
    hy Schroeder, i was going to tell you that i can help you also with those, by using custom code and variables, but meanwhile mr wizard replied about those vtl** variables ... his method for dealing with tool life, is the okuma way, so i warmly advice you to follow his guidance

    if you will wish for a custom tool life g-code ... i am here

    i just wonder : if a roughing operation takes 60 minutes, and tool life is 15minutes, is it possible to implement a tool-life timer, so to make the machine stop during the roughing cycle ?

    limit wear offset to an absolute value of .015"
    okey, i understood that you wish to write the main_offset from code, and block the wear to ±0.015

    you can set the limits for wear by changing some parameters inside the machine ( like mr wizard described at point 5 )

    but, there is a but ...

    ... like this, what you do, is 'force' the operator to always use the " wear " field, and avoid " main offset " field; what happens if an operator will add a small corection inside the "main offset", and let the machine run, and discover after a few hours that the machine did not took the corection ?

    my dear Schroeder , there are operators that work :
    ... only with wear
    ... only with main offset
    ... with both of them
    * and they may have done this for a life time, having a concrete behaviour, hard to change ... yes, they understand that a machine works different, but may forget because of a long life habit

    there are machines with :
    ... 1 level of corection : main_offset
    ... 2 levels of corections : main_offset + wear
    ... 4 levels of corection : main_offset + offset_calibration + offset_shift_to_reach_minimal_tolerance_value + value that works like a real dimension, for example, if the required dimension is N+0.5+0.6, then that field will only take values between 0.5 and 0.6, for example from an outside measuring equipemnt ( not an okuma machine, but this is less important )

    all these have to be
    tackled ...

    at this moment, how fast can you implement your protections ? how fast can you write data in O7500 ?

    i don't use a wear tolerance of
    ±0.015 ... i don't even care about the wear tolerance, and i can implement offset protection with 1 single click : create a snaphsot, then reference that snapshot at each cycle run, or tool change ...

    it is fast ... and this is how it begins :

    I want to write...
    - tool geometry in X and Z
    - tool nose radius in X and Z
    - tool nose radius quadrant
    i will try to keep it clear :

    there are 2 main tables :
    ... [ O ] : each line represents a set of " main offset ( x & z )" , " wear ( x & z ) "
    ... [ R ] : each line represents a set of " tool radius ( x & z ) " , " p quadrant "
    * you surely know those tables, is where you input tool corections all day looooooooooong

    each table line is linked to the T syntax, like this : T [ R ] [ turret_post ] [ O ]

    so, when you use T##$$** :
    ... ## does not represent tool nose radius, but a link to a group of 3 values, or a line from table [ R ] : Xrad , Zrad , P
    ... ** does not represent offset, but a link to a group of 4 values, thus a line from table [ O ]: Xoffset + Xwear , Zoffset+Zwear

    check this codes :
    Code:
    
    T020202 = T [ link to vnsrx [ 2 ] , vnsrz [ 2 ] , vnrpn [ 2 ] ] [ turret post 2 ] [ link to vtofx [ 2 ] + vtwox [ 2 ] , vtofz [ 2 ] + vtwoz [ 2 ] ]
    
    
      because vtof* + vtwo* = vetf*, you may consider also this :
    
    
    T020202 = T [ link to vnsrx [ 2 ] , vnsrz [ 2 ] , vnrpn [ 2 ] ] [ turret post 2 ] [ link to      vetfx                ,      vetfx                ]
    
    
      vtof* and vtwo* always require an argument :
        - V1 = VTOFX [ 1 ] will return X_offset_1
        - V1 = VTWOZ [ 7 ] will return Z_wear_1
        - V1 = VTOFX       will raise an error, because there is no argument
    
    
      vetf* does not require an argument :
        - reset machine, MDI,          V1 = VETFX V2 = VETFZ will both return 0
        - reset machine, MDI, T020202, V1 = VETFX V2 = VETFZ will      return V1 = X_offset02 + X_wear02 and V2 = Z_offset02 + Z_wear02
        - reset machine, MDI, T000702, V1 = VETFX V2 = VETFZ will      return same results as above
        - reset machine, MDI, T020215, V1 = VETFX V2 = VETFZ will      return V1 = X_offset15 + X_wear15 and V2 = Z_offset15 + Z_wear15
        - reset machine, MDI,          V1 = VETFX [ 2 ] should raise an error, because there is an argument
    
    
      this is bonus : - T020202 = T20202 = T + 2 * 10101 
                      - is possible to use T111220, thus ## <> $$ <> ** ( T##$$** )
    
    
    i hope that, so far, is clear that vtef* = vtof* [ argument ] + vtwo* [ argument], where argument = 1 , 2 , ... max line number of table [ O ]

    at least that's the math ... based on it, is possible to develop the g-code if you wish, i will develop futher more; please, do you have questions ?

    if you wish, i can also avoid all these explanations, and give you the code, but it is for osp300, and yours is 200, and there are a few problems with file-operations, that will need to be adjusted; unfortunately, i don't acces to a p200, so i can't check the code before sending it to you ... again, i will need feedback from the machine / kindly
    Ladyhawke - My Delirium, https://www.youtube.com/watch?v=X_bFO1SNRZg

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •