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で登録されたシンボル名、またはデバイスアドレスを直接記述します。

シンボルで指定する場合、各関数で指定できるデータタイプは次のとおりです。

Function

シンボルのデータタイプ

Bit

16Bit

32Bit

Float

Double

String

符号付き / 符号なし / 16進

BCD

符号付き / 符号なし / 16進

BCD

XXXDeviceBit

Ο

-

-

-

-

-

-

-

XXXDevice16

-

Ο

-

-

-

-

-

-

XXXDevice32

-

-

-

Ο

-

-

-

-

XXXDeviceBCD16

-

-

Ο

-

-

-

-

-

XXXDeviceBCD32

-

-

-

-

Ο

-

-

-

XXXDeviceFloat

-

-

-

-

-

Ο

-

-

XXXDeviceDouble

-

-

-

-

-

-

Ο

-

XXXDeviceStr

-

-

-

-

-

-

-

Ο

XXXDevice

Ο

Ο

Ο

Ο

Ο

Ο

Ο

Ο

値の読み込み先または書き込み先となるデータへのポインタを指定します。各関数に応じたデータ型のポインタを指定してください。

アクセスするデータの種類

引数のタイプ

ビットデータ

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関数の場合、文字列データのデータ数は1バイト単位です。シンボルが16ビット幅のデバイスの場合は2文字、32ビット幅のデバイスの場合は4文字単位で指定してください。
読み書きできる最大リード数/ライト数は下表のとおりです。

アクセスするデータの種類

リード時/ライト時

ビットデータ

255

16ビットデータ

1020

32ビットデータ

510

16ビットBCDデータ

1020

32ビットBCDデータ

510

単精度浮動小数点データ

510

倍精度浮動小数点データ

255

文字列データ

1020文字(半角)

データタイプ値の指定方法は値を直接指定する方法と、定義名で指定する方法があります。詳細は以下を参照してください。
38.9.5.1 データ型

戻り値

正常終了: 0

異常終了 : エラーコード

補足

pwDataには、wCount数分だけD0ビットから詰めて格納します。
例: 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/WriteDeviceBitよりRead/WriteDevice16やRead/WriteDevice32で16/32ビット単位のRead/Writeの方が効率的です。
*」には不定な値が入ります。アプリケーションプログラムでマスクしてください。

接続機器内部で、データをBCDとして扱っている場合は、これらの関数を使用します。ただし、この関数と受け渡しするデータ(pxxDataの内容)は、BCDではなくバイナリデータとなります。
(「WinGP SDK」内部でBCD変換を行っています。)負の数は扱えません。

関数名

10 進表現

16 進表現

Read/WriteDeviceBCD16

0 ~ 9999

0000 ~ 270F

Read/WriteDeviceBCD32

0 ~ 99999999

00000000 ~ 05F5E0FF

文字列データを受け取る変数は、受け取れるだけの十分なデータ領域を確保してください。