Description
Reads the custom macro variable specified by "datano_s", "datano_e". The data is stored in "IODBMR" with signed binary format.
The kinds of custom macro variable are as follows.
- Local variable (#1,..,#33) The local variables which belong to the macro program just being executed when the application program calls this function are read.
- Common variable (#100,..,#999) See the description of cnc_rdmacroinfo function about the available range of common variables.
It is possible to exchange the type of macro variable by cnc_setmactype function.
- decimal form floating-point type (data format=M*10**(-E))
- binary form floating-point type (data format=M*2**(-E))
mcr_val | : | value of variable (=M) 4-byte binary data with sign (available range:999999999,..,-999999999) |
dec_val | : | number of places of decimals (=E) 2-byte binary data with sign (available range:-128,..,127) |
mcr_val always returns by nine digits and adjusts the amount with the value of dec_val.
Example: When the variable value is 12.345, mcr_val and dec_val are read as follows.
mcr_val = 123450000
dec_val = 7
mcr_val | : | numerical part of variable (=M) 4-byte binary data with sign (available range:No limitation) |
dec_val | : | exponent part of variable (=E) 2-byte binary data with sign (available range:-128,..,127) |
The value of an undefined variable is called "vacant", and it is expressed as follows both at decimal form floating-point type and at binary form floating-point type.
mcr_val = 0
dec_val = -1
See "OPERATOR'S MANUAL" of CNC for details of the custom macro variable.
Universal Fanuc Driver
Fanuc Focas Library CD
Declaration
Arguments
Specify the library handle. See "Library handle" for details.
Specify the start custom macro variable number.
Specify the end custom macro variable number.
Specify the data block length (size of IODBMR structure).
8+8*(Number of custom macro variable)
IODBMR
N : Number of custom macro variable
Pointer to the IODBMR structure including the custom macro variable. The IODBMR structure is as follows.
typedef struct iodbmr {
short datano_s; /* start custom macro variable number*/
short dummy; /* (not used) */
short datano_e; /* end custom macro variable number */
struct {
long mcr_val; /* value of custom macro var. */
short dec_val; /* number of places of decimals*/
} data[N]; /* N : number of variable */
} IODBMR;
- datano_s
- The custom macro variable number which was read first is returned.
- datano_e
- The custom macro variable number which was read last is returned.
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 IODBMR structure(length) is wrong. |
(3) |
Custom macro variable number(s_number, e_number) is wrong. |
(6) |
This function needs the custom macro option. |
As for the other return codes or the details, see "Return status of Data window function"
CNC option
This function need the following CNC option.
- Series 15/15i, 30i/31i/32i, 0i-D, PMi-A Custom macro
- Series 16/18/21, 16i/18i/21i, 0i-A.B.C, Power Mate i Custom macro B
And this function is related to the following CNC option.
- Series 15 Custom macro common variable 200 sets
- Series 15i Custom macro common variable 900 sets
- Series 16/18/21, 16i/18i/21i, 0i-A/B/C, Power Mate i, PMi-A Custom macro common variable extension
- Series 0i-F Embedded macro
- Series 30i/31i/32i, 0i-D Custom macro common variable extension
Custom macro common variable 300 sets
Custom macro common variable 600 sets
Embedded macro
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.
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_rdmacro cnc_wrmacro cnc_wrmacror cnc_rdmacror2 cnc_wrmacror2 cnc_rdmacroinfo cnc_getmactype cnc_setmactype
Example(C Language)
The following program reads the custom macro variables within the specified
range and displays them.
#include "fwlib32.h"
/* start/end are start/end variable number to be read. */
short example( short start, short end )
{
IODBMR *macror ;
char strbuf[12] ;
short ret, idx ;
macror = (IODBMR *)malloc( 1000 ) ;
ret = cnc_rdmacror( h, start, end, 1000, macror ) ;
if ( !ret )
for ( idx = 0 ; idx <= end-start ; idx++ ) {
sprintf( &strbuf[0], " %09ld",
abs(macror->data[idx].mcr_val) );
strncpy( &strbuf[1], &strbuf[2],
10 - macror->data[idx].dec_val ) ;
strbuf[10-macror->data[idx].dec_val] = '.' ;
if(macror->data[idx].dec_val <= 0)
strbuf[strlen(strbuf)-1] = '\0';
if(macror->data[idx].mcr_val < 0) strbuf[0] = '-';
printf( "#%04ld %s\n", start+idx, strbuf ) ;
}
else
printf( "ERROR!(%d)\n", ret ) ;
free( macror ) ;
return ( ret ) ;
}
Example(C#)
The following program reads the custom macro variables within the specified
range and displays them.
class example
{
/* start/end are start/end variable number to be read. */
public short sample(short start, short end)
{
Focas1.IODBMR_data mcrData = new Focas1.IODBMR_data();
string strVal;
short ret, idx;
byte[] bytes = new byte[1000];
IntPtr ptrData = Marshal.AllocCoTaskMem(Marshal.SizeOf(mcrData));
ret = Focas1.cnc_rdmacror(h, start, end, 1000, bytes);
if (ret == Focas1.EW_OK)
{
for (idx = 0; idx <= end - start; idx++)
{
int pos = 8 + idx * Marshal.SizeOf(mcrData);
Marshal.Copy(bytes, pos, ptrData, Marshal.SizeOf(mcrData));
Marshal.PtrToStructure(ptrData, mcrData);
strVal = string.Format("{0:d9}", Math.Abs(mcrData.mcr_val));
if (0 < mcrData.dec_val) strVal = strVal.Insert(9 - mcrData.dec_val, ".");
if (mcrData.mcr_val < 0) strVal = "-" + strVal;
Console.WriteLine("#{0:d4} {1}", start + idx, strVal);
}
}
else
{
Console.WriteLine("ERROR!({0})", ret);
}
Marshal.FreeCoTaskMem(ptrData);
return (ret);
}
}