# ドライバー

> ドライバーとは何か、ドライバーがどこに並び、どうやってステーションに追加するか、機器に固定されるドライバー、この製品が知っているすべてのドライバーの表、各ドライバーのページが説明する内容、そしてパッケージが持たないドライバーについての注意。

**ドライバー**は、ステーションがある種類の設備と話すときに使うプロトコルです。TCP 越しの Modbus レジスター、OPC UA サーバー、Siemens の PLC などです。Connector のページのすべての機器は、ちょうど 1 つのドライバーに属し、そのドライバーが、機器がどの接続の項目を見せるか、タグのアドレスをどう書くか、どのデータ型を持てるか、書き込めるかどうか、ドライバーが設備を探せるかどうか、そしてステーションが読みに行くのか設備が送ってくるのかを決めます。このグループにはドライバーごとに 1 ページずつあり、このページはそれらに共通するものです。

## ドライバーの一覧 {#the-registry}

ドライバーの顔ぶれは決まっています。アプリケーションに同梱されており、ページから増やすことはできません。「通信」欄のツリーのいちばん上にある**ドライバー**のフォルダーが、この導入が持つもののカタログを、説明、機器の台数、稼働状態、そして**ドライバーを追加**（追加したあとは**開く**と**ドライバーを削除**）とともに開きます。カタログとその規則は[ドライバーの一覧とドライバーのページ](connector-drivers)にあります。

パッケージに入っているドライバーはどれもすぐに使え、オンやオフにするスイッチはありません。ステーションは使うものを追加します。ドライバーのフォルダーの下には、下に何があってもなくても、追加したドライバーが並ぶので、欄にはステーションが読む準備のできたものが並びます。ドライバーは、カタログのその行か欄の新規…メニューの**ドライバーを追加**で追加し、カタログのその行、そのドライバーのバー、または右クリックメニューの**ドライバーを削除**で削除します。この削除は何も消しません。ドライバーが機器、シリアル回線、ブローカー、フォルダーのいずれかを持つあいだは拒否され、そのいずれかを持つドライバーは常に追加済みです。新しいステーションにはドライバーが 1 つも追加されておらず、以前のバージョンから更新したステーションでは、すでに使っているドライバーが追加済みの状態で始まります。

## 機器のドライバーは固定です {#the-driver-of-a-device-is-fixed}

ドライバーは、機器を作るときに選びます。欄の新規…のメニューでは、そのドライバー自身の項目から機器を作りますし、ドライバーのページの機器を追加は、そのドライバーの下に作ります。そのあとは、「機器」のカードがドライバーを読み取り専用の文字として見せます。機器を別のプロトコルに移すには、もう一方のドライバーの下に新しい機器を作り、古いほうを削除してください。アドレスが変わるので、参照は各タグの「使っている場所」のカードから新しいタグへ向け直す必要があります。

## すべてのドライバー {#every-driver}

ドライバーは、つなぐ機器の種類ごとにまとめています。グループとその順番は、**ドライバー**のカタログ、そして欄の新規…メニューの**ドライバーを追加**と同じです。

### PLC {#plcs}

| ドライバー | 話す相手 |
| --- | --- |
| [Beckhoff ADS](driver-beckhoff-ads) | ADS/AMS 越しの Beckhoff TwinCAT の PLC。 |
| [Mitsubishi MC](driver-mitsubishi) | MELSEC MC のドライバー越しの Mitsubishi の PLC。 |
| [Omron](driver-omron) | Omron の PLC です。CJ、CS、CP は FINS（UDP、TCP、またはシリアル回線上の Host Link）でメモリアドレスを、NJ、NX、NY は EtherNet/IP で変数名を指して読みます。 |
| [Rockwell EtherNet/IP](driver-rockwell) | EtherNet/IP（CIP）越しの Allen-Bradley / Rockwell の PLC。 |
| [Siemens S7](driver-siemens-s7) | S7comm のドライバー越しの Siemens S7 の PLC。 |

### 産業用プロトコル {#industrial-protocols}

| ドライバー | 話す相手 |
| --- | --- |
| [BACnet](driver-bacnet) | BACnet/IP のビル自動化機器。 |
| [Generic serial and TCP](driver-generic-serial-tcp) | 計量指示計やバーコードリーダーのように独自のテキストやバイトのプロトコルを話す装置を、シリアル回線、TCP、UDP で扱います。 |
| [Modbus RTU](driver-modbus-rtu) | シリアル回線（RS-485/232）越しの Modbus レジスター。伝送モードは RTU か ASCII です。 |
| [Modbus TCP](driver-modbus-tcp) | TCP/IP 越しの Modbus レジスター。MBAP のフレーム、またはシリアル・イーサネット変換器向けの RTU のフレームで送ります。既定のポートは 502。 |
| [MQTT](driver-mqtt) | 外部の MQTT ブローカーを通じて、通常の MQTT か Sparkplug B で発行する機器。 |
| [OCPP](driver-ocpp) | OCPP 越しの EV の充電ポイント（充電ポイントの側からこのステーションに接続します）。 |
| [OPC DA](driver-opc-da) | COM/DCOM 越しの従来の OPC Data Access サーバー。専用の 32 ビットの補助プロセスを通して扱います。 |
| [OPC UA](driver-opc-ua) | opc.tcp 越しの OPC Unified Architecture のクライアント。 |
| [SNMP](driver-snmp) | SNMP v1、v2c、v3 に応答するネットワーク機器（UPS、PDU、スイッチ、機械室のセンサーなど）。サーバー向けの Redfish と合わせて、機械室全体をカバーします。 |

### 測定器とデータ収集 {#instruments-and-acquisition}

| ドライバー | 話す相手 |
| --- | --- |
| [Fluke NetDAQ](driver-fluke-netdaq) | Fluke NetDAQ（2640A、2645A）と 2680 Series（2680A、2686A）のデータ収集装置を、タグから構成し、32 ビットの補助プロセスで Fluke 自身のライブラリを使って読みます。 |
| [NI-DAQmx](driver-ni-daqmx) | National Instruments のデータ収集ハードウェア（cDAQ シャーシとそのモジュール、USB と PCI Express の機器）を、このコンピューターにインストールされた NI-DAQmx を通して、読み出しごとに 1 サンプル読みます。 |
| [SCPI instruments](driver-scpi) | マルチメーター、電源、電子負荷など、SCPI を話すベンチ測定器です。TCP、シリアル回線、または VISA 経由の USB と GPIB でつなぎます。 |

### 無線 {#wireless}

| ドライバー | 話す相手 |
| --- | --- |
| [LoRaWAN](driver-lorawan) | 内蔵の Basics Station のネットワークサーバー経由の LoRaWAN のセンサーと無線コンセントレーターです。 |
| [Matter](driver-matter) | Matter のスマートホーム機器（Bluetooth でのコミッショニング）。 |

### Web と API {#web-and-apis}

| ドライバー | 話す相手 |
| --- | --- |
| [AVEVA PI](driver-aveva-pi) | PI Web API 経由の AVEVA PI System の点。既定では HTTPS を使います。 |
| [HTTP](driver-http) | タグとして読みに行く、汎用の HTTP と HTTPS の endpoint です。資格情報は任意です。 |
| [Redfish](driver-redfish) | サーバーやデータセンターのハードウェア向けの Redfish REST API。 |

### ファイルとデータベース {#files-and-databases}

| ドライバー | 話す相手 |
| --- | --- |
| [Database](driver-database) | 工場のシステムのデータベースのテーブル（SQL Server、PostgreSQL、MySQL と MariaDB、SQLite、またはその ODBC ドライバーを通した任意のデータベース）。各タグはテーブル・列・行でセルを読むか、独自のクエリを実行します。タグが指示した場所では、セルまたはタグ独自のコマンドで書き込みます。 |
| [File](driver-file) | ほかのプログラムがローカルまたはネットワークのフォルダーに書くファイル（CSV と列形式のテキスト、自由形式のテキスト、JSON、XML）。1 つずつ、または受信フォルダーから読みます。機器が許可していれば、そのプログラムのために行やファイル全体を書きます。 |

### テスト {#test}

| ドライバー | 話す相手 |
| --- | --- |
| [Simulated](driver-simulated) | ハードウェアなしで試すための、アプリ内の合成信号。 |

[Modbus サーバー](connector-modbus-server)はこの表にありません。ドライバーではなく、ステーション自身が自分のタグと Logic の変数を Modbus TCP で PLC、HMI、ビル管理システムに提供するもので、サーバーのフォルダーの下にある自分の行から扱います。

## ドライバーに共通するもの、違うもの {#what-the-drivers-have-in-common-and-where-they-differ}

Connector はどのドライバーにも 1 つの編集画面を描き、どの部分を出すかはドライバーに決めさせます。この表は、ドライバーのページを開く前に何を予想すればよいかを伝えます。

| ドライバー | 機器のページの接続の項目 | タグのアドレス指定 | 読み出し周期 | タグの書き込み | 機器検出 |
| --- | --- | --- | --- | --- | --- |
| Simulated | なし | タグの名前と、信号の形 | あり | あり | あり（カタログ） |
| Modbus TCP | ホスト、ポート、ユニット ID、フレーム形式（MBAP か RTU）、通信の最小間隔 | 型付き：レジスターの種類と番号 | あり | あり | あり（ホストまたは CIDR のスキャン） |
| Modbus RTU | シリアル回線（固定。伝送モード RTU か ASCII は回線が決めます）、ユニット ID | 型付き：レジスターの種類と番号 | あり | あり | あり（回線上のユニット ID の探索） |
| OPC UA | ホスト、ポート、リソースのパス、ユーザー名、パスワード | 自由記述：ノード ID | あり | あり | あり（サーバーのアドレス） |
| OPC DA | ホスト、サーバー / キー | 自由記述：アイテム ID | あり | あり | あり（コンピューター上のサーバー） |
| Siemens S7 | ホスト、ラック / スロット | 型付き：エリア、DB、バイト、ビット | あり | あり | なし |
| Rockwell EtherNet/IP | ホスト、スロット | 自由記述：コントローラータグと、オフセット | あり | あり | あり（同報） |
| Beckhoff ADS | ホスト、ポート、ローカル IP（AMS） | 自由記述：シンボル | あり | あり | なし |
| Mitsubishi MC | ホスト、ポート | 自由記述：デバイスアドレス | 固定 1 秒 | あり | なし |
| BACnet | ホスト、ポート、機器 ID | 型付き：オブジェクトの型とインスタンス | 固定 1 秒 | あり | あり（Who-Is） |
| OCPP | 識別子 | 型付き：充電コネクターの番号。タグの名前は Meter、Status、Transaction のいずれかで終わります | 充電ポイントが送ってきます | なし（読み取り専用） | あり（接続中の充電ポイント） |
| Redfish | ホスト、ポート、ユーザー名、パスワード | 自由記述：リソースのパスと、JSON ポインター | あり | あり | あり（サービスのアドレス） |
| Matter | ノード ID（読み取り専用） | 型付き：出力、クラスター、属性。タグは機器から来ます | あり | あり（ドライバーが変え方を知っている値） | あり（参加処理済みのノードと、それぞれが公開する値） |
| LoRaWAN | 識別子（DevEUI）、サーバー / キー（アプリケーションキー） | 型付き：チャネルまたはオフセット、LPP の型 | センサーが送ってきます | なし（読み取り専用） | なし |
| AVEVA PI | ホスト、ポート、リソースのパス、通信方式、ユーザー名、パスワード、ベアラートークン | 自由記述：PI パス | あり | あり | あり（サービスのアドレスのあとの AF の要素） |
| HTTP | ホスト、ポート、リソースのパス | 自由記述：パス | あり | あり | なし |
| MQTT | ブローカー（固定。ホスト、ポート、通信方式、サインインはブローカーが持ちます）、プロトコル、Sparkplug B ではグループ、エッジノード、機器の ID | 自由記述：トピックと JSON のペイロード内の値のパス、または Sparkplug B のメトリック | ブローカーから届きます | あり（コマンドトピック、または Sparkplug B のコマンド） | あり（ブローカーでの受信） |
| Generic serial and TCP | 通信方式（TCP クライアントか UDP 受信）、ホスト、ポート、回線上の機器ではシリアル回線（固定）。そのうえでメッセージとチェックサムのカード | 型付き：取得方法、要求、メッセージのフィルター、メッセージ内の値の位置 | あり。受信待ちのタグは装置が送るものを保ちます | あり（書き込みメッセージ。UDP ではなし） | なし |
| Omron | ホスト、プロトコル（FINS か NJ/NX のタグ（名前で指定））。FINS ではポートと FINS のカード（トランスポート、ネットワーク、ノード、ユニット、応答のタイムアウト）。シリアル回線上ではシリアル回線（固定）、ユニット ID（Host Link のユニット番号）、応答のタイムアウト | 自由記述：メモリアドレス（FINS）か変数名（NJ/NX） | あり | あり | あり（1 台の PLC への FINS の問い合わせと、NJ/NX のコントローラーを探すブロードキャスト） |
| SCPI instruments | 通信方式（TCP（LXI ソケット）か VISA）、ホストとポートか VISA リソース、回線上の機器ではシリアル回線（固定）。そのうえで「測定器」のカード（終端文字、応答のタイムアウト、書き込みの確認、初期設定コマンド） | 自由記述：クエリ。加えてカンマ区切りの応答のどの値か、そして書き込みコマンド | あり | あり（書き込みコマンド。測定器のエラーキューで確認） | あり（VISA が一覧する測定器と、1 台のホストへの TCP の問い合わせ） |
| NI-DAQmx | なし：代わりに「NI-DAQmx の機器」のカード（機器の名前と、NI-DAQmx が読み取る製品） | 型付き：物理チャネルと測定、そして測定のレンジ、配線、熱電対、カウンターの設定 | あり | あり（デジタル出力ラインと電圧出力） | あり（NI MAX が知っているすべての機器とそのチャネル） |
| Fluke NetDAQ | ホスト、続いて「測定器」のカード（ベース チャネル、スキャン速度） | 型付き：ポイント（アナログ チャネルとその機能、デジタル ライン、リレー、またはトータライザー） | あり。装置は機器のタグの中で最も短い周期でスキャン | あり（デジタル ラインとリレー、トータライザーのゼロ戻し） | なし |
| SNMP | ホスト、ポート。その下に「SNMP エージェント」のカード（バージョン、community または SNMPv3 ユーザーとセキュリティ、応答のタイムアウト、再試行回数） | 自由記述：OID（数字または標準名） | あり | あり（エージェントが受け付ける SET。MIB が読み取り専用と宣言する標準オブジェクトは読み取り専用のまま） | あり（1 つのエージェントの標準サブツリーのたどり） |
| File | なし：代わりに「フォルダーとファイル」のカード（フォルダーのパス、ファイル名または受信フォルダーのパターン、読み取り元、ファイルの書式）、その後に「ファイルのテキスト」と「書き込み」のカード | 型付き：タグが読むもの（値、ファイル全体、ファイルの情報）と、値なら列と行（CSV）、行とその文字（自由形式のテキスト）、パス（JSON、XML） | あり | あり（書き込みを許可した機器で：行の追加、ファイル全体の置き換え、別のファイルの指定） | あり（1 つのファイル。機器のファイルか、入力したファイル） |
| Database | なし：代わりに「データベース」のカード（データベースの種類、次にサーバー、ポート、インスタンス名、データベース名、データベース ファイル、またはデータ ソースまたは接続文字列）、続いて「サインイン」のカード（ユーザー名とパスワード、SQL Server では Windows のサインインと暗号化） | 型付き：タグの読み方（テーブル、値の列、読み取る行で選ぶセル、または独自のクエリの本文） | あり | あり（読み取るセル、または独自の書き込みコマンド） | あり（機器のデータベースのテーブル） |

どのドライバーも、タグが出す**データ型**の一覧を、そのドライバーが実際に扱えるものに絞ります。正確な一覧はそれぞれのドライバーのページにあります。表が「固定 1 秒」と書いているところでは、ドライバーが設定した周期を無視するので、機器とタグのページは読み出し周期の項目を隠します。「読み取り専用」と書いているところでは、アクセスの項目が読み取りのみだけを出し、書き込みの入力欄は決して現れません。

## 各ドライバーのページが説明すること {#what-every-driver-page-documents}

どのドライバーのページも、同じ節を同じ順で歩きます。「機器」のカードが見せる接続の項目と、それが基準 URI をどう組み立てるか。タグのアドレスの書き方（型付きの項目か自由記述の字句と、パネルが見せる読み取り専用のバス上のアドレス）。出るデータ型。ドライバーが持つときは機器検出。書き込みを受けるときは書き込み。そしてそのドライバー独自の事情（資格情報、証明書、タイミング、ステーションが動かすネットワークサーバー、ペアリング）です。

## パッケージが持たないドライバー {#a-driver-the-package-does-not-carry}

Connector は、動いているパッケージが持たないドライバーを決して並べず、選択肢にも出しません。それでもそういう機器を連れて届いた構成（復元したバックアップ、別の機械から来た構成）は、その機器を保ちます。ドライバーは、その機器がある限り、カタログにもドライバーのフォルダーの下にも並んだままで、説明には「このパッケージに含まれていないドライバーです。」と出て、ドライバーのページとその下のすべての機器に、同じことを伝える通知バーが付きます。それらの機器はオフラインのままで設定を保ち、削除はできますが複製はできず、そのドライバーの下で新しい機器や機器検出のスキャンを始めることもできません。

パッケージがどのドライバーを持つかは、Connector のドライバーの一覧から読み取られ、その一覧は Connector が起動して初めて存在します。それまではすべてのドライバーが存在するものとして数えられるので、カタログは起動の数秒後に確定し、そのセッションのあいだはそのままです。Connector を止めてまた起動しても変わりません。

ドライバーのコードは、アプリケーションが動いているあいだ一度だけ読み込まれます。通信を止めて始め直すと、動いている機器とドライバーの一覧は、その同じ読み込みから組み立て直されます。これが、1 日じゅう再起動を繰り返してもステーションのメモリーが増えていかない理由です。その裏返しとして、ディスク上のドライバーのファイルそのものを入れ替えたときは、アプリケーション自体を再起動して初めて効きます。
