38.9.4.1 读/写函数

单句柄系统的直接读取API

INT WINAPI ReadDeviceBit(LPCSTR sNodeName,LPCSTR sDeviceName,WORD* owData,WORD wCount);

INT WINAPI ReadDevice16(LPCSTR sNodeName,LPCSTR sDeviceName,WORD* owData,WORD wCount);

INT WINAPI ReadDevice32(LPCSTR sNodeName,LPCSTR sDeviceName,DWORD* odwData,WORD wCount);

INT WINAPI ReadDeviceBCD16(LPCSTR sNodeName,LPCSTR sDeviceName,WORD* owData,WORD wCount);

INT WINAPI ReadDeviceBCD32(LPCSTR sNodeName,LPCSTR sDeviceName,DWORD* odwData,WORD wCount);

INT WINAPI ReadDeviceFloat(LPCSTR sNodeName,LPCSTR sDeviceName,FLOAT* oflData,WORD wCount);

INT WINAPI ReadDeviceDouble(LPCSTR sNodeName,LPCSTR sDeviceName,DOUBLE* odbData,WORD wCount);

INT WINAPI ReadDeviceStr(LPCSTR sNodeName,LPCSTR sDeviceName,LPSTR psData,WORD wCount);

INT WINAPI ReadDevice(LPCSTR sNodeName,LPCSTR sDeviceName,LPVOID pData,WORD wCount,WORD wAppKind);

INT WINAPI ReadDeviceVariant(LPCSTR sNodeName,LPCSTR sDeviceName,LPVARIANT pData,WORD wCount,WORD wAppKind);

单句柄系统API

INT WINAPI WriteDeviceBit(LPCSTR sNodeName,LPCSTR sDeviceName,WORD* pwData,WORD wCount);

INT WINAPI WriteDevice16(LPCSTR sNodeName,LPCSTR sDeviceName,WORD* pwData,WORD wCount);

INT WINAPI WriteDevice32(LPCSTR sNodeName,LPCSTR sDeviceName,DWORD* pdwData,WORD wCount);

INT WINAPI WriteDeviceBCD16(LPCSTR sNodeName,LPCSTR sDeviceName,WORD* pwData,WORD wCount);

INT WINAPI WriteDeviceBCD32(LPCSTR sNodeName,LPCSTR sDeviceName,DWORD* pdwData,WORD wCount);

INT WINAPI WriteDeviceFloat(LPCSTR sNodeName,LPCSTR sDeviceName,FLOAT* pflData,WORD wCount);

INT WINAPI WriteDeviceDouble(LPCSTR sNodeName,LPCSTR sDeviceName,DOUBLE* pdbData,WORD wCount);

INT WINAPI WriteDeviceStr(LPCSTR sNodeName,LPCSTR sDeviceName,LPCSTR psData,WORD wCount);

INT WINAPI WriteDevice(LPCSTR sNodeName,LPCSTR sDeviceName,LPVOID pData,WORD wCount,WORD wAppKind);

INT WINAPI WriteDeviceVariant(LPCSTR sNodeName,LPCSTR sDeviceName,LPVARIANT pData,WORD wCount,WORD wAppKind);

单句柄组符号读取API

INT WINAPI ReadSymbol(LPCSTR sNodeName,LPCSTR sSymbolName,LPVOID oReadBufferData);

INT WINAPI ReadSymbolVariant(LPCSTR sNodeName,LPCSTR sSymbolName,LPVARIANT pData);

单句柄组符号写入API

INT WINAPI WriteSymbol(LPCSTR sNodeName,LPCSTR sSymbolName,LPVOID pWriteBufferData);

INT WINAPI WriteSymbolVariant(LPCSTR sNodeName,LPCSTR sSymbolName,LPVARIANT pData);

参数

sDeviceName:直接描述GP-Pro EX中注册的符号名称和寄存器地址。

下表显示当在各种函数中使用符号时您可以指定的数据类型。

函数

符号数据类型

16位

32位

浮点

双精度

字符串

带符号/无符号/十六进制

BCD

带符号/无符号/十六进制

BCD

XXXDeviceBit

O

-

-

-

-

-

-

-

XXXDevice16

-

O

-

-

-

-

-

-

XXXDevice32

-

-

-

O

-

-

-

-

XXXDeviceBCD16

-

-

O

-

-

-

-

-

XXXDeviceBCD32

-

-

-

-

O

-

-

-

XXXDeviceFloat

-

-

-

-

-

O

-

-

XXXDeviceDouble

-

-

-

-

-

-

O

-

XXXDeviceStr

-

-

-

-

-

-

-

O

XXXDevice

O

O

O

O

O

O

O

O

为被读取或写入的值定义目标指针。对于各函数,请定义相应的数据格式指针。

访问的数据类型

参数类型

位数据

WORD * pwData

16位数据

WORD * pwData

32位数据

DWORD * pdwData

16位BCD数据

WORD * pwData

32位BCD数据

DWORD * pdwData

单精度浮点型数据

FLOAT * pflData

双精度浮点型数据

DOUBLE * pdbData

文本数据

LPTSTR psData

通用数据

LPVOID pData

通用数据(用于VB)

LPVARIANT pData

对于Read/WriteDeviceStr 函数,以单字节为单位表示文本数据量。如果符号指向16位寄存器,使用两个字符指定该数字。如果符号指向32位寄存器,则使用四个字符。
下表显示最大的读取/写入数据量。

访问的数据类型

读取/写入

位数据

255

16位数据

1020

32位数据

510

16位BCD数据

1020

32位BCD数据

510

单精度浮点型数据

510

双精度浮点型数据

255

文本数据

1020个单字节字符

要指定数据类型值,您可以直接指定值,也可以用常量名指定。更多信息,请参阅下面的内容。
38.9.5.1 数据类型

返回值(NULL)

正常结束: 0

异常结束:错误代码

补充

从D0位开始保存与wCount中的数据相同数量的数据。
例如,wCount = 20

 

F

E

D

C

B

A

9

8

7

6

5

4

3

2

1

0

PwData

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

PwData+1

20

19

18

17

使用Read/WriteDevice16和Read/WriteDevice32进行16/32位的操作比用Read/WriteDeviceBit效率更高。
*"包含未定义的值。请使用应用程序屏蔽该值。

使用这些函数在控制器/PLC内部处理BCD数据。注意,发送到/接收自该函数的数据(pxxData目录)是二进制数据,而不是BCD数据。
BCD转换在[WinGP SDK]中执行。不能处理负数。

函数名称

十进制符号

十六进制符号

Read/WriteDeviceBCD16

0 ~ 9999

0000~270F

Read/WriteDeviceBCD32

0 ~ 99999999

00000000~05F5E0FF

对于接收文本数据的变量,请留出足够的数据空间来接收数据。