Description
Reads the positions from 1st axis to the specified axis number.
In case that "*data_num" is bigger than the current controlled axis number, this function sets the actual read axis number (the current controlled axis number) to "*data_num" variable after execution. And in case that "*data_num" is smaller than the current controlled axis number, this function reads data for the specified axis number which is specified by "*data_num".
Universal Fanuc Driver
Fanuc Focas Library CD
Declaration
Arguments
Specify the library handle. See "Library handle" for details.
Specify the data type.
0 | : | absolute position |
1 | : | machine position |
2 | : | relative position |
3 | : | distance to go |
-1 | : | all type |
Specify the pointer to the number of data to be read. This function returns the number of data which was read actually.
Specify the pointer to the array of ODBPOS structure to store the positions. The number of array must be equal to "*data_num". The ODBPOS structure is as follows.
typedef struct odbpos {
POSELM abs; /* absolute position */
POSELM mach; /* machine position */
POSELM rel; /* relative position */
POSELM dist; /* distance to go */
} ODBPOS ;
- abs
- The POSELM structure for absolute position
- mach
- The POSELM structure for machine position
- rel
- The POSELM structure for relative position
- dist
- The POSELM structure for distance to go
And the POSELM structure is as follows.
typedef struct poselm {
long data; /* position data */
short dec; /* place of decimal point of position
data */
short unit; /* unit of position data */
short disp; /* status of display */
char name; /* axis name */
char suff; /* subscript of axis name */
} POSELM;
- data
- Position data
- dec
- Place of decimal point
- unit
- Unit
0 : mm 1 : inch 2 : degree - disp
- Status of display
0 : not display in the CNC screen 1 : display in the CNC screen - name
- Axis name (ASCII)
- suff
- Subscript of axis name (ASCII)
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) |
The axis number (*data_num) is 0 or less. |
(4) |
Type of position (type) is wrong. |
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 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.
Example(C Language)
The following program reads the absolute position data of all axis,
and displays them.
#include "fwlib32.h"
void example( void )
{
ODBPOS pos[MAX_AXIS];
short num = MAX_AXIS;
short ret = cnc_rdposition(h, 0, &num, pos);
if(!ret) {
int i;
for(i = 0 ; i < num ; i++) {
printf("%c = %d\n", pos[i].abs.name, pos[i].abs.data);
}
}
}
Example(C#)
The following program reads the absolute position data of all axis,
and displays them.
class example
{
public void sample()
{
Focas1.POSELMALL pos = new Focas1.POSELMALL();
short num = Focas1.MAX_AXIS;
byte[] bytes = new byte[Marshal.SizeOf(pos) * Focas1.MAX_AXIS];
IntPtr ptrWork = Marshal.AllocCoTaskMem(Marshal.SizeOf(pos));
short ret = Focas1.cnc_rdposition(h, 0, ref num, bytes);
if (ret == Focas1.EW_OK)
{
int i;
for (i = 0; i < num; i++)
{
Marshal.Copy(bytes, i * Marshal.SizeOf(pos), ptrWork, Marshal.SizeOf(pos));
Marshal.PtrToStructure(ptrWork, pos);
Console.WriteLine("{0} = {1}", pos.abs.name, pos.abs.data);
}
}
Marshal.FreeCoTaskMem(ptrWork);
}
}