声明
#include “fwlib32.h” 或 “fwlib64.h”FWLIBAPI short WINAPI pmc_wrpmcrng(unsigned short FlibHndl, short length, IODBPMC *buf);
描述
写入指定 PMC 地址/范围的 PMC 数据。
此函数用于在应用程序之间交换数据 PMC上的MMC功能和LADDER软件。
指定库控点。 有关详细信息,请参阅“库句柄”。
data_type为 0(字节类型) | : | 长度 = 8 + N |
data_type为1(字型) | : | 长度 = 8 + N × 2 |
data_type为2(长型) | : | 长度 = 8 + N × 4 |
data_type为4(32位浮点型) | : | 长度 = 8 + N × 4 |
data_type为5(64位浮点型) | : | 长度 = 8 + N × 8 |
指向 IODBPMC 结构的指针。
0 | : | 字节类型 |
1 | : | 单词类型 |
2 | : | 长型 |
4 | : | 32位浮点型(仅限30i-B系列/0i-F/PMi-A) |
5 | : | 64位浮点型(仅限30i-B系列/0i-F/PMi-A) |
type_a
指定与 PMC 地址类型对应的标识代码。
type_d
指定 PMC 数据的类型。
它必须与PMC端的数据类型相同。
datano_s
指定起始 PMC 地址编号。
datano_e
指定结束 PMC 地址编号。
请参阅“读取PMC数据(指定区域)”的“PMC数据的可参考范围” (pmc_rdpmcrng)“关于那种 PMC 地址、起始地址和结束地址。
指定参数的示例
全部写入 R0200,..,R0209(假定为字节类型)
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] 0
... ...
buf.u.cdata[9] 9
返回值
成功完成后返回EW_OK,否则返回除EW_OK以外的任何值。
主要错误代码如下。
返回代码 | 含义/错误处理 |
---|---|
EW_NOPMC (1) | 没有 PMC。 |
EW_LENGTH (2) | 数据块长度错误 IODBPMC 结构的大小(长度)错误。 |
EW_RANGE (3) | 地址范围错误 地址范围错误 PMC 地址编号 (datano_s,datano_e) 错误。 |
EW_ATTRIB (4) | 数据属性错误 PMC 地址类型 (type_a) 或 PMC 数据类型 (type_d) 错误。 |
EW_PASSWD (17) | 指定范围的数据无法写入,因为数据受到保护。 (系列 16i/18i/21i, 0i-A/B/C) |
目前测试只能写5个地址
开始结束地址写0和7,也只能写值K0000到K0004,K0005到K0007值无变化
开始结束地址写0和15,也只能写值K0000到K0004,K0005到K0007值无变化,K0008到K0015值有,但不正常
Focas1.IODBPMC0 pmcdata1 = new Focas1.IODBPMC0(); // for 1 Byte
pmcdata1.type_a = 7; //K地址
pmcdata1.type_d = 0; //字节类型
//写多个K地址2
pmcdata1.datano_s = 0; //K地址开始地址
pmcdata1.datano_e = 15; //K地址结束地址,写K0000到K0004
//目前测试只能写5个地址
//开始结束地址写0和7,也只能写值K0000到K0004,K0005到K0007值无变化
//开始结束地址写0和15,也只能写值K0000到K0004,K0005到K0007值无变化,K0008到K0015值有,但不正常
ushort Length = (ushort)(8 + (pmcdata1.datano_e - pmcdata1.datano_s + 1));
pmcdata1.cdata = new byte[Length];
for (int i = 0; i < Length-8; i++)
{
pmcdata1.cdata[i] = Convert.ToByte(i + 1);
//pmcdata1.cdata[i] = Convert.ToByte(i);
}
short ret = Focas1.pmc_wrpmcrng(Fanuc.h, Convert.ToUInt16(Length), pmcdata1);// 8+Length: K data of Length Byte