Description
Read various data which changes at CNC operation at a time. The data which can be read is as follows.
Data | Function used for reading individually |
---|---|
Alarm status | cnc_alarm |
Program number in executing | cnc_rdprgnum |
Program number of the main program | cnc_rdprgnum |
Sequence number | cnc_rdseqnum |
Actual feed rate | cnc_actf |
Actual spindle speed | cnc_acts |
Absolute position data of controlled axis (2) | cnc_absolute2 |
Machine position data of controlled axis | cnc_machine |
Relative position data of controlled axis (2) | cnc_relative2 |
Amount of distance to go of controlled axis | cnc_distance |
The formats of each data are same as "Function used for reading individually". Refer to each function for details.
The data concerning the axis is read by specified with axis. Each data is stored in oaxis structure in ODBDY.All axes can be read at a time by specifying ALL_AXES for "axis". In that case, various data concerning the axis is stored in each array of faxis inside of ODBDY.
The decimal point position of the various data concerning the axis can be acquired in the cnc_getfigure function.
- This function cannot read all alarm status.
Please use cnc_rddynamic2 function in order to read all alarm status.
-
it is
necessary to switch API to the one for the program number 8 digits.
See "Program number 8 digits" for details.
- it is possible to use this function for
the program number 8 digits, however it is necessary to switch API to
the one for the program number 8 digits. See "Program number 8 digits" for details.
- the data corresponding to "Actual spindle
speed", "Amount of distance to go of controlled axis" cannot be got.
Universal Fanuc Driver
Fanuc Focas Library CD
Declaration
Arguments : HSSB
Specify the library handle. See "Library handle" for details.
Specify axis number to read.
ALL_AXES | : | for all axes(ALL_AXES : -1) |
1,..,m | : | for each axis(m : number of controlled axis) |
Specify the length of the data block(size of ODBDY structure)
ODBDY
for each axis | |
---|---|
for program number 4 digits | for program number 8 digits |
for all axes | |
for program number 4 digits | for program number 8 digits |
n = Maximum controlled axes (The data for current controlled axes are valid)
Pointer to the ODBDY structure including various data. The ODBDY structure is as follows.
For program number 4 digits
typedef struct odbdy {
short dummy ; /* not used */
short axis ; /* axis number */
short alarm ; /* alarm status */
short prgnum ; /* current program number */
short prgmnum ; /* main program number */
long seqnum ; /* current sequence number */
long actf ; /* actual feedrate */
long acts ; /* actual spindle speed */
union {
struct {
long absolute[MAX_AXIS] ; /* absolute */
long machine[MAX_AXIS] ; /* machine */
long relative[MAX_AXIS] ; /* relative */
long distance[MAX_AXIS] ; /* distance to go */
} faxis ; /* In case of all axes */
struct {
long absolute ; /* absolute */
long machine ; /* machine */
long relative ; /* relative */
long distance ; /* distance to go */
} oaxis ; /* In case of 1 axis */
} pos ;
} ODBDY ; /* MAX_AXIS is the maximum controlled axes. */
For program number 8 digits
typedef struct odbdy {
short dummy ; /* not used */
short axis ; /* axis number */
short alarm ; /* alarm status */
long prgnum ; /* current program number */
long prgmnum ; /* main program number */
long seqnum ; /* current sequence number */
long actf ; /* actual feedrate */
long acts ; /* actual spindle speed */
union {
struct {
long absolute[MAX_AXIS] ; /* absolute */
long machine[MAX_AXIS] ; /* machine */
long relative[MAX_AXIS] ; /* relative */
long distance[MAX_AXIS] ; /* distance to go */
} faxis ; /* In case of all axes */
struct {
long absolute ; /* absolute */
long machine ; /* machine */
long relative ; /* relative */
long distance ; /* distance to go */
} oaxis ; /* In case of 1 axis */
} pos ;
} ODBDY ; /* MAX_AXIS is the maximum controlled axes. */
- dummy
- Not used
- axis
- Axis number
The read axis number is returned. - alarm
- Alarm status
The meaning of each bit is as follows.- Series 15/15i
#00 : Background P/S #01 : Foreground P/S #02 : Overheat alarm (Only Series 15) #03 : Sub-CPU error (Only Series 15) #04 : Syncronized error #05 : Parameter switch on #06 : Overtravel,Ext. data #07 : PMC error #08 : External alarm message #09 : (Not used) #10 : Serious P/S #11 : (Not used) #12 : Servo alarm #13 : I/O error #14 : Power off parameter set #15 : System error
- Series 16/18/21, 16i/18i/21i, 0i-A/B/C, Power Mate i
#00 : P/S alarm 100 #01 : P/S alarm 000 #02 : P/S alarm 101 #03 : P/S alarm except above #04 : Overtravel alarm #05 : Overheat alarm #06 : Servo alarm #07 : System alarm #08 : APC alarm #09 : Spindle alarm #10 : P/S alarm 5000, Punch press alarm #11 : Laser alarm #12 : (Not used) #13 : (Not used) #14 : (Not used) #15 : External alarm message
- Series 16i/18i-W
#00 : P/S alarm #01 : Overtravel alarm #02 : Servo alarm #03 : (Not used) #04 : Overheat alarm #05 : Stroke limit - 1 #06 : Stroke limit - 2 #07 : Edit alarm #08 : APC alarm #09 : System alarm #10 : P/S 5000 ... alarm #11 : (Not used) #12 : (Not used) #13 : (Not used) #14 : External alarm #15 : Reverse control alarm
- Series 30i, 0i-D/F, PMi-A
#00 : Parameter switch on (SW) #01 : Power off parameter set (PW) #02 : I/O error (IO) #03 : Foreground P/S (PS) #04 : Overtravel,External data (OT) #05 : Overheat alarm (OH) #06 : Servo alarm (SV) #07 : Data I/O error (SR) #08 : Macro alarm (MC) #09 : Spindle alarm (SP) #10 : Other alarm(DS) (DS) #11 : Alarm concerning Malfunction prevent functions (IE) #12 : Background P/S (BG) #13 : Syncronized error (SN) #14 : (reserved) #15 : External alarm message (EX)
- prgnum
- Program number under execution
(It is the selected program number while automatic operation stopping) - prgmnum
- Main program number (It is invalid in Series 15)
- seqnum
- Current sequence number
- actf
- Actual feed rate of the controlled axes
- acts
- Actual spindle speed data(It is invalid in Series 16i/18i-W, Power Mate i-H)
- absolute
- Absolute position of the controlled axes
- machine
- Machine position of the controlled axes
- relative
- Relative position of the controlled axes
- distance
- Amount of distance to go of the controlled axes (It is invalid in Series 16i/18i-W)
Return
EW_OK is returned on successful completion, otherwise any value except EW_OK is returned.
The major error codes are as follows.
Return code | Meaning/Error handling |
---|---|
(2) |
Size of ODBDY structure(length) is illegal. |
(4) |
The specification of axis number (axis) is improper. |
As for the other return codes or the details, see "Return status of Data window function"
CNC option
For HSSB connection,
CNC parameter
This function is not related to CNC parameter.
CNC mode
This function can be used in any CNC mode.
Available CNC
0i-A | 0i-B/C(Note) | 0i-D | 0i-F | 15 | 15i | 16 | 18 | 21 | 16i-A | 18i-A | 21i-A | 16i-B | 18i-B | 21i-B | 30i-A | 30i-B | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
M (Machining) | |||||||||||||||||
T (Turning) | - | ||||||||||||||||
LC (Loader) | - | - | - | - | - | - | - | - |
0i-D | 0i-F | 16i | 18i | 30i-A | 30i-B | |
---|---|---|---|---|---|---|
P (Punch press) | - | |||||
L (Laser) | - | - | - | - | ||
W (Wire) | - | - |
Power Mate i-D | |
Power Mate i-H | |
Power Motion i-A | O |
"O" | : | Both Ethernet and HSSB | |
"E" | : | Ethernet | |
"H" | : | HSSB | |
"X" | : | Cannot be used | |
"-" | : | None |
Note) 0i-C does not support the HSSB function.
See Also
cnc_rddynamic2 cnc_alarm cnc_rdprgnum cnc_rdseqnum cnc_actf cnc_acts cnc_absolute cnc_machine cnc_relative cnc_distance
Example(C Language)
The following program reads the dynamic data of all axes (number of axes =
MAX_AXIS) and displays them on the screen.
#include "fwlib32.h"
void example( void )
{
ODBDY buf ;
unsigned int idx ;
cnc_rddynamic( h, -1, sizeof(buf), &buf ) ;
printf( "Current program = %d Main program = %d\n",
buf.prgnum, buf.prgmnum ) ;
printf( "Sequence number = %ld\n", buf.seqnum ) ;
printf( "actf = %ld acts = %ld\n", buf.actf, buf.acts ) ;
printf( "Alarm status = %d\n", buf.alarm ) ;
printf( "AXIS Absolute Relative Machine Distance\n" ) ;
printf( "----+---------+---------+---------+--------\n" ) ;
for ( idx = 0 ; idx < MAX_AXIS ; idx++ )
printf( " %u %8ld %8ld %8ld %8ld\n", idx,
buf.pos.faxis.absolute[idx],
buf.pos.faxis.relative[idx],
buf.pos.faxis.machine[idx],
buf.pos.faxis.distance[idx] ) ;
}
Example(C#)
The following program reads the dynamic data of all axes (number of axes =
MAX_AXIS) and displays them on the screen.
class example
{
public void sample()
{
Focas1.ODBDY_1 buf = new Focas1.ODBDY_1();
uint idx;
Focas1.cnc_rddynamic(h, -1, (short)Marshal.SizeOf(buf), buf);
Console.WriteLine("Current program = {0} Main program = {1}",
buf.prgnum, buf.prgmnum);
Console.WriteLine("Sequence number = {0}", buf.seqnum);
Console.WriteLine("actf = {0} acts = {1}", buf.actf, buf.acts);
Console.WriteLine("Alarm status = {0}", buf.alarm);
Console.WriteLine("AXIS Absolute Relative Machine Distance");
Console.WriteLine("----+---------+---------+---------+--------");
for (idx = 0; idx < Focas1.MAX_AXIS; idx++)
{
Console.WriteLine(" {0} {1,8} {2,8} {3,8} {4,8}", idx,
buf.pos.absolute[idx],
buf.pos.relative[idx],
buf.pos.machine[idx],
buf.pos.distance[idx]);
}
}
}