バイナリ関数

バイナリ関数は、TCPDevice 関数で使用するためにバイナリデータパケットをフォーマットします。これらの関数を使用して、Modbus TCP パケットを Modbus TCP サーバデバイスに送信できます。これらの関数を使用して Modbus パケットを送信している場合は、TCPDevice 関数の [パケットタイプ] パラメータを Modbus に設定する必要があります。

関数 説明
BGetDouble(Binary, Offset, [Byte/Word Order])

バイナリ 構造体中の倍精度浮動小数点の値を単精度の結果として返します。

Binary

BStringf 関数、TCPDevice 関数または QueryDevice 関数によって (それぞれ) 返される、バイナリ構造体、デバイス構造体、または Query 構造体を参照します。

Offset

バイト単位でオフセットを指定します。

Byte/Word Order

関数によって読み込まれるワードおよびバイトのバイト順序を指定します。

0 = ビッグエンディアン (デフォルト)

1 = リトルエンディアン

2 = ビッグエンディアン (16 ビットワード変換使用)

3 = リトルエンディアン (16 ビットワード変換使用)

BGetFloat(Binary, Offset,  [Byte/Word Order])

バイナリ構造体中の浮動小数点の値を返します。

Binary

BStringf 関数、TCPDevice 関数または QueryDevice 関数によって (それぞれ) 返される、バイナリ、デバイスまたは Query 構造体を参照します。

Offset

バイト単位でオフセットを指定します。

Byte/Word Order

関数によって読み込まれるワードおよびバイトのバイト順序を指定します。

0 = ビッグエンディアン (デフォルト)

1 = リトルエンディアン

2 = ビッグエンディアン (16 ビットワード変換使用)

3 = リトルエンディアン (16 ビットワード変換使用)

BGetInt(Binary, Offset, Bytes, [Sign], [Byte/Word Order])

バイナリ構造体中の整数値を返します。

Binary

BStringf 関数、TCPDevice 関数または QueryDevice 関数によって (それぞれ) 返される、バイナリ、デバイスまたは Query 構造体を参照します。

Offset

バイト単位でオフセットを指定します。

Bytes

1、2、または 4

Sign

0 = 符号付き (デフォルト)

1 = 符号なし

Byte/Word Order

関数によって読み込まれるワードおよびバイトのバイト順序を指定します。

0 = ビッグエンディアン (デフォルト)

1 = リトルエンディアン

2 = ビッグエンディアン (16 ビットワード変換使用)

3 = リトルエンディアン (16 ビットワード変換使用)

BGetString(Binary, Offset, Bytes, [Byte Swap])

バイナリ構造体中の文字列を返します。

Binary

BStringf 関数、TCPDevice 関数または QueryDevice 関数によって (それぞれ) 返される、バイナリ、デバイスまたは Query 構造体を参照します。

Offset

バイト単位でオフセットを指定します。

Bytes

抽出される長さ

Byte Swap

関数によって書き込まれるバイト順序を指定します。Modbus 実装のため、Modbus を介して PLC に読み取りまたは書き込みをする場合、文字列の隣り合うバイトを交換する必要があります。

:  この関数で使用するバイト交換は、ビッグエンディアンまたはリトルエンディアンのバイト交換とは関連しません。例えば、有効になっている場合は、[バイナリ] パラメータからの入力文字列が「BADC\0」(「0」は Null 値を終了する文字列) のとき、出力結果は「ABCD\0」となります。

0 = 文字列のバイトを交換しない (デフォルト)

1 = 文字列のバイトを交換

BLen(Binary)

 

バイナリ構造体の長さを返します。バイナリは、TCPDevice 関数または QueryDevice 関数によって (それぞれ) 返される、デバイス構造体または Query 構造体を参照する必要があります。
BStringf(Byte/Word Order, Format-String, Value1, [Value2, ...])

指定したフォーマットを使用して作成されたバイナリ文字列を含むバイナリ構造体を返します。

Byte/Word Order

関数によって書き込まれるワードおよびバイトのバイト順序を指定します。

:  [バイト/ワードオーダ] パラメータは数字タイプのみに適用され、バイナリ構造体または文字列タイプのエンコーディングには影響しません。

0 = ビッグエンディアン (デフォルト)

1 = リトルエンディアン

2 = ビッグエンディアン (16 ビットワード変換使用)

3 = リトルエンディアン (16 ビットワード変換使用)

Format-String

 

使用できる書式文字列パラメータは次のとおりです。

パラメータ

説明

%c

1 バイト

%h

2 バイト

%d

4 バイト

%f

4 バイト浮動小数点数

%e 8 バイト浮動小数点数
%b

バイナリ構造体

%s 文字列
%~s 文字列はバイト変換される
:  
  • フォーマット文字列のパラメータには大文字と小文字の区別があります。
  • フォーマット文字列は引用符 (") で囲む必要があります。

Value

バイナリとしてエンコードする値の可変長リストを指定します (値 1, 値 2, ...)。値は、フォーマット文字列パラメータによって指定されたタイプに変換されます。

バイナリ関数

この例では、SYSTEM0SYSTEM1 と命名された 2 つの In-Sight システムを使用します。SYSTEM0 は Modbus クライアントで、SYSTEM1 は Modbus サーバです。

 

SYSTEM0 のスプレッドシートには次の関数が含まれています。

A2=TCPDevice("SYSTEM1",502,0,4,1000)

B2=QueryDevice($A$0,A2,0,0,0,0,0,6,0,3,20,4,0,1)

A3=BLen(B2)

A4=BGetInt(B2,9,2)

A5=BGetString(B2,10,1)

 

SYSTEM1 には次の値が含まれています。

F4=65

 

SYSTEM0 のスプレッドシートが実行されるときに、セル A2 の TCPDevice 関数は、SYSTEM1 と TCP/IP Modbus 接続を確立します。セル B2 の QueryDevice 関数は、SYSTEM1 に Modbus Read Multiple Registers コマンドを送り、セル F4 に含まれているデータが SYSTEM0 によって (バイナリフォーマットで) インポートされることを指定します。SYSTEM0 のスプレッドシートに返す結果は、次のようになります。

A3=11 (SYSTEM1 の Modbus サーバからインポートされたバイナリデータのパケット長)。

A4=65 (SYSTEM1 のセル F4 に含まれた整数値)。

A5="A" (文字列として変換されたセル F4 の整数値)。

:  この例では、TCPDevice 関数は、Modbus サーバである SYSTEM1 には使用しません。これは、In-Sight が Modbus コマンドを受信すると自動的に応答するためです。

前述の例で、SYSTEM0 によって送受信された実際のデータパケットは次のようになります。

コマンドパケット

 

応答パケット

00

 

 

00

 

00

 

 

00

 

00

 

 

00

 

00

 

 

00

 

00

 

 

00

 

06

長さ (6 バイト)

 

05

長さ (5 バイト)

00

 

 

00

 

03

関数 (Read Multiple Registers)

 

03

関数 (Read Multiple Registers)

20

04

Ref# (セルアドレス = F4)

 

02

バイト数 (2 バイト)

00

01

ワード数 (0001)

 

00

65

結果値 (00 65 十進法。Modbus にはビッグエンディアンを使用)