modbus_write_registers


機能

 

ファンクションコード Write Multiple Registers (コード16)を用いてholding register領域へ複数レジスタ分書き込みます。

 

書式

 

ret =  modbus_write_registers( ctx , addr , nb , src )

 

引数

 

ctx [ VB.NET: IntPtr ] [ C, C++: modbus_t * ] [ C#: IntPtr ] [ Python: ctypes.c_int ]

libmodbus構造体へのポインタを指定下さい。

 

addr[ VB.NET: Integer ] [ C, C++: int ] [ C#: int ] [ Python: ctypes.c_int ]

writeする先頭アドレスを指定下さい。

 

nb[ VB.NET: Integer ] [ C, C++: int ] [ C#: int ] [ Python: ctypes.c_int ]

書き込みレジスタ数を指定下さい。

 

data[ VB.NET: Ushort() ] [ C, C++: uint16_t * ] [ C#: ushort[] ] [ Python: ctypes.POINTER(ctypes.c_uint16) ]

書き込むデータを格納した配列の先頭アドレスを指定下さい。

 

戻り値

 

ret [ VB.NET:Integer ] [ C, C++: int ] [ C#: int ] [ Python: ctypes.c_int ]

 

成功時には書き込みに成功したレジスタ点数が入ります。

失敗時には-1が入り、以下の errno が設定されます。

 

定義

意味

EMBMDATA

要求データ数が多すぎます。

 

説明

 

ファンクションコード Write Multiple Registers (コード16)を用いてholding register領域へ複数レジスタ分書き込みます。

 

使用例

 

アドレス0のレジスタから8ワード分に0x55を書き込みます。

 

VB.NET

Dim ret As Integer

Dim ctx As IntPtr

Dim data(8) As Ushort

Dim i As Short

For i = 0 To 7

     data(i) = &H55

Next

ret = modbus_write_registers(ctx, 0, 8, data)

 

C, C++

int ret;

modbus_t *ctx;

Uint16_t status[8];

for( i = 0 ; i < 8 ; i++ ){

     data[i] = 0x55;

}

ret = modbus_write_registers( ctx, 0, 8 , data );

 

C#
 

int ret;

IntPtr ctx;

ushort data = new ushort[8];

short i;

for( i = 0 ; i < 8 ; i++ ){

     data[i] = 0x55;

}

ret = modbus.WriteRegisters(ctx, 0, 8, data);

 

Python

ret = ctypes.c_int

ctx = ctypes.POINTER(modbus_t)

uint16_buff_type = ctypes.c_uint16 * 8

data = uint16_buff_type()

for i in range(8):

     data[i] = 0x55

ret = modbus.modbus_write_registers(ctx, 0, 8, data)