Description
Writes the PMC data of the specified PMC address/range.
This function is used to exchange the data between the application on
MMC function and LADDER software on PMC.
Universal Fanuc Driver
Fanuc Focas Library CD
Declaration
Arguments
Specify the library handle. See "Library handle" for details.
data_type is 0(byte type) | : | length = 8 + N |
data_type is 1(word type) | : | length = 8 + N × 2 |
data_type is 2(long type) | : | length = 8 + N × 4 |
data_type is 4(32-bit floating-point type) | : | length = 8 + N × 4 |
data_type is 5(64-bit floating-point type) | : | length = 8 + N × 8 |
Pointer to the IODBPMC structure.
The IODBPMC structure is as follows.
In case of using PMC memory D in Series 0i-F, 30i/31i/32i/35i-B, PMi-A, define character constant "PMCMEMD" at compiling by the '-D' option.
#if defined (PMCMEMD)
typedef struct iodbpmc {
short type_a ; /* Kind of PMC address */
short type_d ; /* Type of the PMC data */
unsigned short datano_s ; /* Start PMC address number */
unsigned short datano_e ; /* End PMC address number */
union {
char cdata[N] ;/* The PMC data(byte type) */
short idata[N] ;/* (word type) */
long ldata[N] ;/* (long type) */
float fdata[N] ; /* (32-bit floating-point type)*/
double dfdata[N]; /* (64-bit floating-point type)*/
} u ; /* N is the number of read data */
} IODBPMC ;
#else
typedef struct iodbpmc {
short type_a ; /* Kind of PMC address */
short type_d ; /* Type of the PMC data */
short datano_s ; /* Start PMC address number */
short datano_e ; /* End PMC address number */
union {
char cdata[N] ;/* The PMC data(byte type) */
short idata[N] ;/* (word type) */
long ldata[N] ;/* (long type) */
float fdata[N] ; /* (32-bit floating-point type)*/
double dfdata[N]; /* (64-bit floating-point type)*/
} u ; /* N is the number of written data */
} IODBPMC ;
#endif
- type_a
- Specify the identification code corresponding to the kind of the PMC address.
- type_d
- Specify the type of the PMC data.
It must be the same one as the type of data of the PMC side. - datano_s
- Specify the start PMC address number.
- datano_e
- Specify the end PMC address number.
0 | : | Byte type |
1 | : | Word type |
2 | : | Long type |
4 | : | 32-bit floating-point type(30i-B Series/0i-F/PMi-A only) |
5 | : | 64-bit floating-point type(30i-B Series/0i-F/PMi-A only) |
Example of specifying argument
- 250 is written in D0100(It is assumed the word type)
- 0 is written all of R0200,..,R0209(It is assumed byte type)
- 1.1 is written in D0100(It is assumed 32-bit floating-point type)
- -2.2 and 33.3 are written in R104, R112(It is assumed 64-bit floating-point type)
buf.type_a | 9 |
buf.type_d | 1 |
buf.datano_s | 100 |
buf.datano_e | 101 |
length | 8+2×1 (=10) |
buf.u.idata[0] | 250 |
buf.type_a | 5 |
buf.type_d | 0 |
buf.datano_s | 200 |
buf.datano_e | 209 |
length | 8+1×10 (=18) |
buf.u.cdata[0] ,..,buf.u.cdata[9] |
0 all |
buf.type_a | 9 |
buf.type_d | 4 |
buf.datano_s | 100 |
buf.datano_e | 103 |
length | 8+4×1 (=12) |
buf.u.idata[0] | 1.1 |
buf.type_a | 5 |
buf.type_d | 5 |
buf.datano_s | 104 |
buf.datano_e | 119 |
length | 8+8×2 (=24) |
buf.u.idata[0] | -2.2 |
buf.u.idata[1] | 33.3 |
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 |
---|---|
(1) |
|
(2) |
Size of IODBPMC structure(length) is wrong. |
(3) |
Address range error PMC address number(datano_s,datano_e) is wrong. |
(4) |
Kind of PMC address(type_a) or type of PMC data (type_d) is wrong. |
(17) |
(Series 16i/18i/21i, 0i-A/B/C) |
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.
See Also
Example(C Language)
The following program writes the PMC data within the specified
PMC address range.
#include "fwlib32.h"
/* start/end are start/end PMC address to be written. */
/* values is array of value to be written. */
short example( short start, short end, char* values )
{
IODBPMC *pmcrng;
short ret, idx;
unsigned short length;
length = 8 + (end - start + 1);
pmcrng = (IODBPMC *)malloc( length );
pmcrng->type_a = 0; // In case that kind of PMC address is G
pmcrng->type_d = 0; // In case that type of PMC data is Byte
pmcrng->datano_s = start;
pmcrng->datano_e = end;
for (idx = 0; idx < end - start + 1; idx++)
{
pmcrng->u.cdata[idx] = values[idx];
}
ret = pmc_wrpmcrng( h, length, pmcrng );
if ( ret )
{
printf( "ERROR!(%d)\n", ret );
}
free( pmcrng ) ;
return ( ret ) ;
}
Example(C#)
The following program writes the PMC data within the specified
PMC address range.
class example
{
/* start/end are start/end PMC address to be written. */
/* values is array of value to be written. */
public short sample(short start, short end, byte[] value)
{
Focas1.IODBPMC0 pmcHead = new Focas1.IODBPMC0();
short ret, idx;
ushort length;
length = (ushort)(8 + (end - start + 1));
byte[] bytes = new byte[length];
IntPtr ptrHead = Marshal.AllocCoTaskMem(Marshal.SizeOf(pmcHead));
pmcHead.type_a = 0; // In case that kind of PMC address is G
pmcHead.type_d = 0; // In case that type of PMC data is Byte
pmcHead.datano_s = start;
pmcHead.datano_e = end;
Marshal.StructureToPtr(pmcHead, ptrHead, false);
Marshal.Copy(ptrHead, bytes, 0, 8);
for (idx = 0; idx < end - start + 1; idx++)
{
bytes[8 + idx] = value[idx];
}
ret = Focas1.pmc_wrpmcrng(h, length, bytes);
if (ret != Focas1.EW_OK)
{
Console.WriteLine("ERROR!({0})", ret);
}
Marshal.FreeCoTaskMem(ptrHead);
return (ret);
}
}
}