Description
Reads various data which changes at CNC operation at a time.
This function is the improved version of the cnc_rddynamic function. Please use this function because the cnc_rddynamic function cannot read all alarm status of Series 15i. The data which can be read is as follows.
Data | Function used for reading individually |
---|---|
Alarm status | cnc_alarm2 |
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 ODBDY2.
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 ODBDY2.
The decimal point position of the various data concerning the axis can be acquired in the cnc_getfigure function.
Universal Fanuc Driver
Fanuc Focas Library CD
Declaration
Arguments
Specify the library handle. See "Library handle" for details.
Specify axis number to read.
ALL_AXES | : | 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 ODBDY2 structure)
ODBDY2
for each axis | for all axes |
---|---|
n = Maximum controlled axes (The data for current controlled axes are valid.)
Pointer to the ODBDY2 structure including various data. The ODBDY2 structure is as follows.
typedef struct odbdy2 {
short dummy ; /* not used */
short axis ; /* axis number */
long 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 ;
} ODBDY2 ; /* 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 15i
#00 : Background P/S #01 : Foreground P/S #02 : Overheat alarm #03 : Sub-CPU error #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 : (Not used) #16 : (Not used) #17 : (Not used) #18 : (Not used) #19 : Macro alarm #20 : System alarm #21,..,#31 : (Not used) - Series 16i/18i/21i, 0i-A/B/C, Power Mate i (Ethernet Only)
#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 : Rigid tap alarm #14 : (Not used) #15 : External alarm message #16,..,#31 : (Not used) - 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) #11 : Alarm concerning Malfunction prevent functions (IE) #12 : Background P/S (BG) #13 : Syncronized error (SN) #14 : (reserved) #15 : External alarm message (EX) #16 : (reserved) #17 : (reserved) #18 : (reserved) #19 : PMC error (PC) #20 to 31 : (Not used) - prgnum
- Program number under execution
(It is the selected program number while automatic operation stopping) - prgmnum
- Main program number
- seqnum
- Current sequence number
- actf
- Actual feed rate of the controlled axes
- acts
- Actual spindle speed data (It is invalid in 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
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,
For Ethernet connection,
The Ethernet function and the extended driver/library function are necessary. However, in case of Series 16i/18i/21i-B, 0i-B/C/D/F, Series 30i and PMi-A, the required CNC option is as follows. When Embedded Ethernet is used,above two optional functions are not required.
When Ethernet board is used,
- only Ethernet function is required.
CNC parameter
This function is related to the following CNC parameter.
See the manual of CNC parameter for details.
2202#2,#3,#4,#5,#6,#7 (influenced by setting)
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_rddynamic cnc_alarm2 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 )
{
ODBDY2 buf ;
unsigned int idx ;
cnc_rddynamic2( 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 = %ld\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.ODBDY2_1 buf = new Focas1.ODBDY2_1();
uint idx;
Focas1.cnc_rddynamic2(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]);
}
}
}