Recently had a machine crash due to the dry-run function being left active. Is there a way to verify that the dry-run function is active/disabled in a program using system variables or perhaps interrogating a parameter value?
Recently had a machine crash due to the dry-run function being left active. Is there a way to verify that the dry-run function is active/disabled in a program using system variables or perhaps interrogating a parameter value?
What type of machine and control?
Obviously, dry run was used to prove-out a program
Single step used as well ??
As newer controls usually have only 1 knob, and it only controls feedrate and rapid rate seperately while in single step.
If single block is OFF then the override only controls feedrates NOT rapids.
Get the operators into a habit of using single step and turning the feedrate override to ZERO after each block of code
1. knob to ZERO
2. single block ON
3, Dry run ON
4....prove the program #1. at each block
5. Dry run OFF
6. ..#1.
Leaving the machine-- #1. again
Turning OFF at the end of day --- guess what ---#1.
As for interrogating the parameter, not sure of the actual address
but the code should be written something like this ( in red = a guess )
Code:...( Header info ) ...( Safety code ) IF [VNDRYR = 0] GOTO NEND (if dry run is OFF- jump over the warning) VNCOM[1]=1 (turns message screen on ) MSG ( <<<< WARNING >>>> DRY RUN IS *** ON ***) M00 ( cycle start to continue WITH dry run ) NEND ....(Your Prog ) M30 %
There are all kinds of system variables available for your use. With a little creativity, you can make an LT machine safer than a cadet. Here's a program for an LT200-MY with a P200 control. It checks all of your switches and knobs to make sure you aren't forgetting anything. Being human, it's easy to do. This program also checks to make sure the feed rate is at 0 and single block is on when doing a restart. You can put parentheses around areas you don't need on your machine. It takes about 1/2 a second for the machine to check everything, so it's well worth it.
If you need something else, let me know. I have programs for the other controls too. They are different on these controls since Okuma uses different I/O methods and addressing on them.
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
Save this program in memory as something like LT200MY-P200.SSB, that way it will load on control boot and be available to all programs. Then all you need to do is write the CALL OCHKA into the A-side program and CALL OCHKB into the B-side.
Good luck!
Okuma wiz I need assistance with this concept.
We have three controls, a 7000m, u100m and p300m I think. We use a similar concept ie a standard macro for safety, but I have only just learned of this I/O reading capability and want to incorporate it.
The 7000m seems straightforward enough as it has a page with 4letter codes for each switch that can be referenced with VORD.
I cannot find same page on 100m so I hope it's not an option that needs purchasing?
The p300 seems to use VORD but does not like the 4letter codes although they appear on I/O screen. Numbers seem to work, so I need to figure out where the number comes from. Manuals are no help. Any advice is appreciated, before I start stabbing wildly in the dark.
Cheers!
DP
A couple of years ago I remember asking an Okuma Applications Engineer about this exactly.... at first he quoted from the manual, which I think used VIRD (which doesn't work on the 7000 even though it is in the manual). Then he said he checked it on the control and VORD works.
The syntax he gave me was something like....
IF [VORD 'NAME' EQ 1] GOTO Nxxx
The ' is the right quote (it only works with this according to him), not the left quote.
NAME being the code from the I/O status screens
however this syntax above doesn't work on the 7000 either.
Some additional info...
The control needs to check the logical address information and not the physical address.
The logical address of the signal is address xxx (000-fff) bit y (0-7).
The address is in hexadecimal. Translating into a VORD command.....
IF [VORD[xxxy] EQ1] GOTO Nxxxx
The address and bit come from the I/O pages.
For Coolant OFF check it would be IF [VORD[0031] EQ1] GOTO Nxxxx
which means address 003 bit 1
It's been a while since I used this, I'll try this tomorrow and see if it works on my 7000L
Cheers for that fordav11! The logical address can be viewed in hexadecimal on the P300 so that sounds promising.
On the 7000 the format VORD[ABCD] works fine, but although the P300 uses the same four letter labels It won't accept them.
So the only thing I am still wondering about is the 100m control. Should there be a page showing I/O address codes for the panel under 'check data'? If it has one it isn't obvious. It is an extremely similar control to the 7000, so my fear is that different options are installed.
DP
All 3 can do it, but io mapping is different. Pneumonic labels went away after the 7000, but VIRD VORD still remain. Io address is used but you may need to subtract 512 from address to properly access it.
If you have any questions or need more information please contact me.
Best regards,
Cheers again for the info lads, have now successfully deciphered the P300. I did require both replies to solve the puzzle.
The key to cracking the enigma that is the u100m still eludes me though, so I offer myself up to the OkuMasters once again.
So, have located the I/O pages, tried using VORD along with text label, no joy.
The screens display two sets of 16 bits of data, arranged as 4 columns with input on the left and output on the right. Corresponding text labels are highlighted when panel switch is pressed, and the value for each set is displayed at bottom of each column. The arrived at value appears to be the hexadecimal equivalent of each 4 bits of data ie 10011111 equates to 9F (or F9 can't remember which way round it goes) accompanied by a H. See below
...........[input]................... [output]............
Bit..label...bit..label....Bit..label...bit..label
0...ABCD..8..ABCD...0...ABCD..8..ABCD
1...ABCD..9..ABCD...1...ABCD..9..ABCD
2...ABCD..a..ABCD...2...ABCD..a..ABCD
3...ABCD..b..ABCD...3...ABCD..b..ABCD
4...ABCD..c..ABCD...4...ABCD..c..ABCD
5...ABCD..d..ABCD...5...ABCD..d..ABCD
6...ABCD..e..ABCD...6...ABCD..e..ABCD
7...ABCD..f...ABCD...7...ABCD..f...ABCD
.nnH.........nnH............nnH..........nnH...... .
There is also a mysterious SSnn number at the top right of the screen. As you page through there are two check number pages for each SSnumber, which correspond as follows
I/O check number 0 and 1 to SS01
I/O check number 2 and 3 to SS02
I/O check number 4 and 5 to SS03
I/O check number 6 and 7 to SS04
I/O check number 20 and 21 to SS11
I/O check number 22 and 23 to SS12
I/O check number 24 and 25 to SS13
I/O check number 26 and 27 to SS14
How do these page numbers relate to the actual logical addresses on this control? Do you think that I can still use the VORD command in a similar way to the other controls, or do I have to use the more arcane VDIN/OUT with some logic statement. I appreciate that a picture of the screen in question may help, will try to get one.
DP
its very similar to the 7000. including the SSxx (no idea what thats for either ;-)
so does this work?
IF [VORD[ABCD] EQ 1] GOTO Nxxxx
what alarm do you get if this doesn't work?
note, I played with this on my 7000. the above does work but there must be a space between EQ and 1 or you get crazy alarms in Jinglish that don't make sense.
Try this
OINCK
IF[VORD[0005]EQ 1]NALRM(mirror x axis)
IF[VORD[0006]EQ 1]NALRM(mirror y axis)
IF[VORD[0007]EQ 1]NALRM(mirror z axis)
IF[VORD[001E]EQ 1]NALRM(dry run on)
GOTO NILED
NALRM
VUACM[1]='ILLEGAL FUNCTION'
VDOUT[993]=1
NILED
RTS
On P controls:
VIRD/VORD: input/output: ipABCD opEFGH or whatever corresponds to the address you're after; in the labels, PB= push button, PL= panel light (if I remember right on PL)
Therefore you'll see your ipXYZW for, say, dry run light up when you press dry run, and you'll see the opGHJK turn on showing the output to turn the light on indicating dry run is on.
your ip values will be the number exactly, I usually use 5 numbers. so for address 0 bit 5, of the inputs, i'll write VIRD[00005].
Your op values will be the address minus 512. so for address 518 bit 7, say, it will be VORD[00067].
I always assume my panel checks will not work from one machine to the next and use the I/O Monitor to find what i'm after.
I will toggle what i'm after and page down until I see it sometimes if I don't feel like reading.
Most addresses seem to be the same, but i'd hate to find the 2 that are different because someone rapided into the chuck of a brand new/used machine.
Generally, I write my panel checks using the same sub program name, and leaving the sub in each machine individually. That way, programs transfer, and all the proper panel checks are done.
FYI, regarding the "GOTO" in: IF[abcd eq 1]GOTO Nxxxx, GOTO is unnecessary. If character space becomes an issue sometimes it is imperative to eliminate all extra characters possible. Getting rid of "GOTO_" is 5 characters.