MQTT プラグイン
このプラグインを使用すると、MQTT Message Queuing Telemetry Transport (MQTT) とは、特に帯域幅が限られたデバイス通信用のネットワークプロトコルです。 を使用して MERLIC を MQTT クライアントとして製造マシンに統合し、プログラマブルロジックコントローラ (PLC) または SCADA Supervisory Control and Data Acquisition システムなど、別の MQTT クライアントとの TCP 経由での通信をセットアップすることができます。MQTT は、IoT デバイス間でのデータ交換用のオープンな OASIS Organization for the Advancement of Structured Information Standards 標準メッセージングプロトコルです。MQTT プラグインを使用して、プロセス統合システムの状態および結果を監視するだけでなく、制御することもできます。
動作の原理
トピックとメッセージ
MQTT を介した通信では、2 バイトから最大 256 メガバイトまでの長さのメッセージを使用できます。メッセージは階層的なトピックで構成され、接続の確立、データの公開、データ受信の確認など各種のメッセージタイプを持つことができます。メッセージの収集と配信は、MQTT メッセージブローカーによって管理されます。ブローカーは、すべてのクライアントからメッセージを収集し、それぞれのトピックをサブスクライブしているクライアントに送信します。1 つのトピックごとに 1 つのメッセージを、後日そのトピックをサブスクライブしているクライアントのために保持しておくことができます。
MQTT クライアント
MQTT クライアントは、MQTT ライブラリを実行していて MQTT メッセージブローカーと通信できるデバイスであれば、どのようなデバイスでもかまいません。MQTT プラグインを使用する場合、MERLIC 自体がMQTT クライアントとして機能し、MQTT ブローカーとメッセージを交換できます。
MQTT プラグインの機能をテストするには、マシンのビジョンシステムのセットアップで既存の MQTT クライアントデバイスを使用するか、ローカルシステムに MQTT クライアントソフトウェア、たとえば MQTT Explorer をインストールします。
MQTT メッセージブローカー
MQTT ブローカーは、クライアントからのメッセージをすべて受信し、サブスクリプションが設定されているメッセージを MQTT クライアントにルーティングするサーバーです。MQTT ブローカーは、Eclipse Mosquitto™ ブローカーなど、使用可能であればどれでもかまいません。mqtt://test.mosquitto.org:1883 ではパブリックインスタンスが使用可能です。
制限
- MQTT プラグインには現在、セキュリティ機能、具体的には証明書ベースの TLS/SSL 暗号化機能がありません。
- 他のプラグインは、プラグイン、たとえば MERLIC RTE Setup の「I/O」タブに統合されているシミュレーション PLC などの動作に干渉する可能性があります。
要件
MQTT ブローカー / クライアント
ネットワーク上で MQTT ブローカーしか利用できない場合は、ブローカーをインストールして実行する必要があります。また、少なくとも 1 つの MQTT クライアントを起動して接続する必要があります。
有効な構成
プロセス統合モードには、少なくとも 1 つのレシピを含む有効な構成を定義する必要があります。構成は MERLIC Runtime Environment Setup で設定できます。
MQTT プラグインによるプロセス統合モードの運用
MQTT プラグインでプロセス統合モード、つまり MERLIC RTE を運用するには、以下の手順が必要です。
- ローカルシステム上に、またはリモート接続を介して、MQTT メッセージブローカーを用意します。
- MQTT クライアントを用意して、トピック「merlic/action」のメッセージをブローカーに送信します。このメッセージは、プロセス統合モードで MERLIC を制御する際に使用できます。
- 有効なレシピを少なくとも 1 つ含む構成で MERLIC RTE を起動し、MERLIC RTE Setup で MQTT プラグインを構成します。詳細については、構成オプションセクションを参照してください。
- MQTT メッセージブローカーに接続した状態で MQTT プラグインを起動します。詳細については、MQTT プラグインの開始セクションを参照してください。
- オプション: MQTT クライアントを使用して、トピック「merlic/action」のブローカーにメッセージを送信し、MERLIC RTE を制御します。
- オプション: MQTT プラグインによって公開されたメッセージを表示して参照するために、MQTT クライアントを用意します。クライアントは、ステップ 2 と同じものでかまいません。
MQTT プラグインを起動すると、MERLIC ビジョンシステムの現在の状態に関する情報が自動的に収集されます。また、MERLIC RTE Setup の「MQTT Connection Details」セクションでプラグインインスタンスに定義されている MQTT ブローカーに自動的に接続します。MQTT プラグインは、MERLIC からの情報をメッセージで、指定された以下の MQTT トピックに公開します。
- merlic/mode
- merlic/preparedRecipeIds
- merlic/recipes
- merlic/runningJobId
- merlic/state
MERLIC は、初期状態である「Preoperational」から「Initialized」へ、またデフォルトレシピが構成されている場合は「Ready」へと遷移します。「Ready」の状態では、{"actionType": "StartSingleJob"} をトピック「merlic/action」に公開することによって、ビジョンシステムの 1 回の実行をトリガーすることができます。連続実行は、{"actionType": "StartContinuous"} を使用してトリガーされ、{"actionType": "Stop"} で停止することができます。
詳細については、着信メッセージセクションを参照してください。
プロセス統合モード、つまり MERLIC RTE アプリケーションの実行中に、MVApp からの結果は MQTT プラグインによって トピック「merlic/recipes/0/result」に公開されます。 MQTT プラグインによって自動的に情報が更新されて送信されます。
MQTT プラグインの開始
MQTT プラグインは、MERLIC RTE Setup を介して、またコマンドラインを使用して起動することができます。
MERLIC RTE Setup を通じて
まず MERLIC RTE が起動していることを確認します。起動していない場合は MERLIC RTE Setup から起動し、次のように進められます。
-
アイコンから MQTT プラグインインスタンスのメニューを開き、「
スタート」をクリックします。
- あるいは、左側の MQTT プラグインインスタンスを選択し、MERLIC RTE Setup の下部にある「
Start plug-in」ボタンをクリックします。
MQTT プラグインを開始する前に、MERLIC RTE が目的に合わせて構成されていることを確認してください。たとえば、MERLIC RTE Setup で MQTT プラグインのインスタンスを追加するときには、MERLIC RTE に定義したログレベルでプラグインインスタンスが追加されます。MQTT メッセージブローカーに公開されるメッセージをログに記録する場合は、MERLIC RTE を起動してプラグインインスタンスを追加する前に、MERLIC RTE のログレベルを「debug」に設定する必要があります。
レシピの読み込みと変更
デフォルトレシピが構成されている場合、MERLIC はそれを読み込み、初期状態「Preoperational」から「Initialized」へ、そして「Ready」へと遷移します。デフォルトレシピがない場合、MERLIC は起動直後から「Initialized」状態のままです。最初のレシピを読み込むことには、MQTT クライアントを使用して、以下の JSON メッセージをトピック「merlic/action」に公開します。MQTT プラグインは、このメッセージを自動的に受信します。
{
"actionType": "PrepareRecipe",
"recipeId": "0"
}
他のレシピは MERLIC が「Ready」状態のときにのみ読み込むことができます。
構成オプション
MQTT プラグインの構成を確認して編集するには、MERLIC RTE が実行されている必要がありますが、プラグインは停止している必要があります。設定の異なる複数の構成を扱うことができます。以下の項で説明する構成には、MERLIC RTE Setup のみを使用してください。ただし、ファイル「MQTT.json」が破損している場合など、手動で設定を確認して変更することは可能です。
Plug-in Parameters
このタイプのパラメーターは、通信プラグインの一般的なパラメーターを表しますが、「通信」タブの構成エリアでは調整することはできません。これらのパラメーターは、プラグインのバージョン番号、ログレベルの現在のパラメーター値、プラグインのアクセスレベルを表すこともあります。これらの値は、それぞれ異なる場所または異なる方法で設定する必要があります。
Version
このパラメーターでは、プラグインの実装時に定義されたバージョン番号が表示されます。これには、メジャー、マイナー、メンテナンスバージョンがあります。新しいプラグインインスタンスを追加したときにも表示されます。バージョンは任意です。したがって、実装時にバージョン番号の定義を省略することもできます。
Log level
このパラメーターは、プラグインインスタンスのログレベルを示します。デフォルトのログレベルは、MERLIC RTE Setup でプラグインインスタンスを追加するときのそれぞれの MERLIC RTE プロセスのログレベルに設定されています。
Access level
このパラメーターはプラグインに設定されているアクセスレベルを示します。MQTT プラグインの場合、アクセスレベルはデフォルトで「monitor and control」に設定されています。つまり、プラグインは「イベント」を受信して「アクション」を送信することができます。アクセスレベルは、プラグインの実装で定義されている機能と相関関係があります。アクセスレベルは MERLIC RTE Setup では調整できません。
Supports rapid validation
このパラメーターは、プラグインが現在のプラグイン構成の即時検証をサポートしているかどうかを示します。このプラグインでは、チェックボックスにチェックが入っていることで「高速検証」がサポートされていることが示されています。これは、MERLIC RTE Setup の「通信」タブで編集可能なパラメーターを変更するたびにプラグインの構成が検証されることを意味します。プラグインが高速検証をサポートしていない場合、プラグインの構成は構成を保存するときにのみ検証されます。
User Parameters
「User parameters」は、プラグインに構成可能なパラメーターを示します。パラメーターはカテゴリごとに表示され、展開したり閉じたりすることができます。
以下の項では、カテゴリごとのパラメーターについて説明します。
MQTT Connection Details
このカテゴリのパラメーターでは、MQTT ブローカーの接続設定を定義します。MQTT ブローカーがローカルシステム上で従来のポート 1883 で実行されている場合は、デフォルト構成をそのまま使用できます。現時点では、証明書ベースの SSL/TLS も、事前共有鍵ベースの TLS もサポートされていません。
以下の図は、MQTT 接続に使用できるパラメーターと、それぞれのデフォルト設定を示しています。パラメーターについては、図の後に詳細な説明があります。
Hostname
このパラメーターでは、MQTT ブローカーのホスト名または IP アドレスを定義します。パラメーターの設定値はデフォルトで「localhost」です。
Port
このパラメーターでは、MQTT ブローカーが動作するポートを定義します。デフォルトのパラメーター設定値は 1883 です。
Authentication
このカテゴリのパラメーターでは、パスワード認証を必要とする MQTT ブローカーに接続する場合に、ユーザー認証情報を定義できます。
以下の図は、認証に使用できるパラメーターを示しています。
Authenticate with username/password
このパラメーターでは、認証が使用されるかどうかを定義します。デフォルトでは選択されておらず、MQTT ブローカーへの接続時にユーザー認証情報は提供されません。
Username
このパラメーターでは、認証のためのユーザー名を定義します。パラメーター「Authenticate with username/password」が選択されている場合にのみ設定可能です。
Password
このパラメーターでは、認証のためのパスワードを定義します。パラメーター「Authenticate with username/password」が選択されている場合にのみ設定可能です。デフォルトでは、パスワードは表示されず、代わりに黒丸点で表示されます。パスワードをそのまま表示するには、アイコン をクリックします。
パスワードは平文で格納されます。現在、TLS 暗号化はサポートされていません。
Topics & Messages
このカテゴリのパラメーターでは、MERLIC RTE が MQTT プラグインを経由して送信するメッセージの設定を定義します。メッセージは JSON 形式で公開されます。
以下の図は、トピックおよびメッセージに使用できるパラメーターと、それぞれのデフォルト設定を示しています。パラメーターについては、図の後に詳細な説明があります。使用可能なトピックとそれぞれの JSON スキーマの詳細については、トピックの概要セクションを参照してください。
Topic prefix
このパラメーターでは、MERLIC RTE がメッセージを識別する際に使用するトピック接頭辞を定義します。デフォルトの接頭辞は「merlic」です。詳細については、送信メッセージセクションを参照してください。
Compact JSON
このパラメーターを設定すると、空白や改行のない JSON 形式で出力されます。デフォルトでは、このパラメーターはあらかじめ設定されています。
JSON indentation level
このパラメーターでは、JSON のインデントレベル、つまり JSON メッセージで使用される空白の数を定義します。このオプションは、パラメーター「Compact JSON」が設定されていない場合にのみ適用されます。通常、2 ~ 4 のインデントレベルが使用されます。デフォルトのパラメーター設定値は 2 です。
Publish errors
このパラメーターを設定すると、MERLIC RTE によって報告されるエラーは、トピック「merlic/error」とそのサブトピックに公開されます。エラーメッセージは保持されず、つまりエラー発生時点でのトピックのサブスクライバーにのみ配信されます。デフォルトでは、このパラメーターはあらかじめ設定されています。
Publish recipe data
このパラメーターを設定すると、レシピリストはトピック「merlic/recipes」に公開されます。また、各レシピについて Boolean が、「merlic/recipes/{id}/isPrepared」({id} は数値のレシピ ID) 形式のトピックに公開されます。Boolean の値は、そのレシピが現在準備中かどうか示します。プラグインがすでに実行されている間にこれらのトピックをサブスクライブしているクライアントが現在のレシピデータを受信するように、これらのメッセージが保持されます。デフォルトでは、このパラメーターはあらかじめ設定されています。
Publish result data
このパラメーターを設定すると、新しい結果は結果が生成されたレシピの数値レシピ ID を {id} が参照する「merlic/recipes/{id}/result」形式のトピックと、そのサブトピックに公開されます。結果メッセージは保持されず、つまり結果を受信した時点でのトピックのサブスクライバーにのみ配信されます。デフォルトでは、このパラメーターはあらかじめ設定されています。
Publish result images
このパラメーターは、MVApp の結果画像を定義します。これはレシピとして実行されて公開されます。このパラメーターは、パラメーター「Publish result data」が設定されている場合にのみ有効になります。
Publish result images が設定されている場合は、正常に取得された結果の画像のデータが「{prefix}/recipes/{id}/result/images/{dataIndex}/data」のトピックに公開されます。このトピックは、JSON メッセージを伝えない唯一のトピックです。
{dataIndex} は、MVApp の対応する画像の結果の数値 (0 ベース) インデックスを参照します。結果の画像を公開する場合、結果の画像の詳細設定、たとえばフィルターモードや、画像データのペイロードフォーマットなどを指定することができます。各パラメーターは結果の画像に対する他の構成オプションと一緒に「Image Results」というカテゴリにあります。
MERLIC に格納されていないため、あるいは目的のフォーマットへの変換に失敗したなどのために画像を取得できなかった場合は、「{prefix}/recipes/{id}/result/images/{dataIndex}/error」にエラーが公開されます。このトピックでは、トピック「{prefix}/error」がすでに使用しているのと同じ[error.json]スキーマが使用される。
デフォルトではこのパラメーターは設定されていないため、結果の画像は公開されません。
Image Results
このカテゴリのパラメーターは、結果の画像がどのように公開されるかを定義します。カテゴリ「Topics & Messages」のパラメーター「Publish result images」が設定されている場合にのみ有効になります。
Image result filter mode
このパラメーターを使用すると、どの画像の結果を取得するかを決定するフィルターを有効化できます。以下のオプションから選択できます。デフォルト設定値は「None」です。
|
モード |
説明 |
|---|---|
|
None |
フィルタリングは適用されず、すべての結果の画像が取得されます。 |
|
Regular expression |
パラメーター Result name filter regex で指定された正規表現に一致する名前の結果の画像のみが取得されます。 |
Result name filter regex
Payload format for image data
このパラメーターは、実際の画像データをどのように MQTT トピックに公開するかを定義します。パラメーターの設定値はデフォルトで「Data URI (base64)」です。
|
フォーマット |
説明 |
|---|---|
|
Binary |
画像データは RAW バイナリとして公開されます。これは最もシンプルで効率的なオプションですが、MQTT クライアントの多くはバイナリデータを処理または表示できません。 |
|
Base64‑encoded string |
画像データは base64 エンコードされた文字列として公開されます。データをテキストとしてきれいに表現するために base64 エンコードを使用します (サイズのオーバーヘッドは 33%)。 |
|
Data URI (base64) |
画像データは base64 エンコードされたデータ URI として公開されます。base64 エンコーディングも使用しますが、ペイロードの接頭辞として MIME タイプを含むデータ URI プロトコルスキーム、つまり HALCON Serialized Item の場合は「image/jpeg」、「image/png」、「application/octet-stream」を付加します。 |
Image format
|
フォーマット |
説明 |
|---|---|
|
PNG |
|
|
JPEG |
画像が JPEG 画像として公開されます。このフォーマットを選択する場合、次の追加パラメーターが有効になります: |
|
HALCON Serialized Item |
|
一般に的に「byte」、「int1」、「uint2」、「int2」、「int4」、「int8」、「real」タイプの画像はすべて、MVApp 結果 としてエクスポートでき、使用可能な画像フォーマットに変換できます。ただし、タイプ「real」の画像は「HALCON Serialized Item」フォーマットにしか変換できないため、例外です。画像フォーマットとそれぞれのピクセル変換の詳細については、通信プラグインの構成の画像の結果セクションを参照してください。
Use progressive JPEG
このパラメーターは、「Image format」が「JPEG」に設定されている場合にのみ使用可能です。
JPEG quality
このパラメーターは、「Image format」が「JPEG」に設定されている場合にのみ使用可能です。JPEG に圧縮する際の画質をパーセントで定義します。デフォルト設定値は 50% です。
PNG compression
このパラメーターは、「Image format」が「PNG」に設定されている場合にのみ使用可能です。PNG に圧縮する際のレベルで定義します。設定可能な値は 0~9 です。デフォルト設定値は 6 です。
Image zoom mode
このパラメータでは、結果の偽造のサイズを変更できます。利用可能なオプションは下の表のとおりです。選択したモードによっては、追加のパラメーターも構成可能になります。パラメーターの設定値はデフォルトで「None」です。
|
モード |
説明 |
|---|---|
|
None |
|
|
Fixed width and height |
画像は、パラメーター Image width および Image height で指定されたサイズに変更されます。 |
|
Zoom factor |
画像は、パラメーター Image zoom factor で係数に応じた縦横比でサイズが変更されます。 |
Image width
このパラメーターは、「Image zoom mode」が「Fixed width and height」に設定されている場合にのみ使用可能です。結果の画像の幅を定義します。
Image height
このパラメーターは、「Image zoom mode」が「Fixed width and height」に設定されている場合にのみ使用可能です。結果の画像の高さを定義します。
Image zoom factor
このパラメーターは、「Image zoom mode」が「Zoom factor」に設定されている場合にのみ使用可能です。縦横の比を維持して画像のサイズを変更する際に使用されるパーセンテージを定義します。100% 以上の値を指定できます。デフォルト設定値は 100% で、元の画像サイズが維持されます。
Quality of Service (QoS)
このカテゴリのパラメーターでは、データ転送エラーやネットワーク輻輳などが原因で転送中にパケットロスが発生した場合のブローカーの動作を定義します。
各パラメーターの値は 0、1、または 2 に設定できます。選択された値が青くハイライト表示されています。別の値を選択するには、それぞれの値をクリックします。以下の表に、使用可能なパラメーターとその意味、対応する値の範囲を示します。
|
QoS 値 |
説明 |
|---|---|
|
0 |
メッセージは確認応答の有無にかかわらず 1 度だけ配信されます (「発信して放置」)。 |
|
1 |
メッセージは、確認応答があるまで少なくとも 1 回は配信されます (「確認応答付き配信」) 。 |
| 2 |
メッセージは厳密に 1 度だけ配信されます(「確実な配信」)。 |
以下の図は、利用可能なパラメーターと、それぞれのデフォルト設定を示しています。パラメーターについては、図の後に詳細な説明があります。
QoS for status updates
このパラメーターでは、ステータス更新用の QoS を定義します。デフォルト設定値は 1 です。
QoS for errors
このパラメーターでは、エラーメッセージ用の QoS を定義します。デフォルト設定値は 2 です。パラメーター「Publish errors」が設定されている場合にのみ適用されます。
QoS for updates of the recipe list
このパラメーターでは、レシピリスト更新用の QoS を定義します。デフォルト設定値は 2 です。パラメーター「Publish recipe data」が設定されている場合にのみ適用されます。
QoS for the delivery of new results
このパラメーターでは、新しい結果の配信用の QoS を定義します。デフォルト設定値は 0 です。パラメーター「Publish result data」が設定されている場合にのみ適用されます。
MQTT トピックのサブスクライブ
着信メッセージ
MQTT プラグインは、自動的にトピック「merlic/action」をサブスクライブします。ただしアクセスレベル「monitor」で起動した場合、このトピックはサブスクライブされません。また、アクセスレベル「control」で起動した場合、このトピックにメッセージは公開されません。MQTT クライアントを使用する場合は、以下の「actionType」メッセージをトピック「merlic/action」に送信することで、MERLIC の実行を制御できます。
- SelectMode
- PrepareRecipe
- UnprepareRecipe
- StartSingleJob
- StartContinuous
- Halt
- Reset
- Stop
- Abort
例と詳細情報
実行の開始
レシピを使用して MVApp の連続実行を開始
{
"actionType": "StartContinuous",
"recipeId": "3"
}
1 回の実行を開始
{
"actionType": "StartSingleJob"
}
どちらの実行モードの場合も適用されるので、レシピ ID を指定する必要はありません。実行できるのは MVApp、つまり現在準備中のレシピファイルから参照されるもののみだからです。レシピ ID を指定する場合は、現在準備中のレシピの ID が指定されていることを確認する必要があります。そうでない場合はエラーになります。
パラメーター値を指定して実行を開始
以下の例に示すように、現在準備中のレシピで定義されているパラメーター値を上書きする場合、実行時のパラメーター値を指定することができます。
次のようにパラメーターを指定して連続実行を開始します。
{
"actionType": "StartContinuous",
"parameters": [42, 3.141, "mvapp-parameter"]
}
パラメーターを指定して 1 回の実行を開始
{
"actionType": "StartSingleJob",
"parameters": [42, 3.141, "mvapp-parameter"]
}
パラメーターを指定する際には、通信プラグイン開発マニュアルのトピック Available Actions にあるパラメーター「MV_PARAM_START_PARAMS」で説明されているのと同じルールが適用されます。
JSON 配列で指定するパラメーター値は、レシピファイルに定義されている値の数に対応する必要があり、そのデータタイプはレシピの各パラメーター値のデータタイプにロスレスで変換できるものでなければなりません。
現在、データタイプ REAL へのロスレス変換は不可能です。したがって、実行を開始するときにこれらのパラメーターもパラメーター化できるように、代わりに MVApp のそれぞれのパラメーター用のデータタイプ LREAL を使用することをお勧めします。
オプションメタデータを指定して実行を開始
ジョブの開始時に測定 ID またはパーツ ID を指定できます。
{
"actionType": "StartSingleJob",
"measId": "optional-measurement-id",
"partId": "S/N-123456789"
}
「measId」と「partId」はどちらもオプションであり、省略するかまたは明示的にヌルに設定できます。設定されるとこれらは、「merlic/recipes/{id}/result」に発行される、ジョブの実行中に生成された結果についてのメッセージ内で参照できるようになります。
送信メッセージ
MQTT プラグインは、MERLIC からの情報をメッセージで、指定された以下の MQTT トピックに自動的に公開します。
- merlic/mode
- merlic/preparedRecipeIds
- merlic/recipes
- merlic/runningJobId
- merlic/state
MQTT プラグイン によって公開されるメッセージは、どの MQTT クライアントでもサブスクライブできます。
各トピックは、プレースホルダー {prefix} で始まります。これを、トピックおよびメッセージの設定に従って、構成可能な接頭辞パスに置き換える必要があります。MQTT プラグインの場合、デフォルトは merlic であり、たとえば「merlic/state」となります。カスタム接頭辞を構成すると、ビジョンアプリケーションを既存のトピック階層に統合しやすくなり、同じ MQTT ブローカー上で複数種類のビジョンアプリケーションを同時に運用できるようになります。
情報レベルの構成方法については、トピックとメッセージセクションを参照してください。
トピック「merlic/recipes/0/result」へのメッセージ(「Compact JSON」が無効の場合):
{
"id": 111,
"recipeId": "0",
"jobId": 111,
"measId": "measurement-42",
"partId": null,
"timestamp": "2024-02-05T15:12:27.699Z",
"processingTimes": {
"executionStartTime": "2024-02-05T15:12:27.528Z",
"executionEndTime": "2024-02-05T15:12:27.698Z",
"acquisitionDurationMillis": 0.368,
"processingDurationMillis": 168.952
},
"resultState": "Completed",
"content": [
{
"name": "Match_Result",
"value": true
},
{
"name": "Match_Confidence",
"value": 0.99
},
{
"name": "Detected_Part_Number",
"value": "B21TA9322"
}
]
}
保持されるメッセージ
MQTT プラグインは、現在のステータスとレシピのリストをサブスクライバーに通知する目的で、いくつかのメッセージを自動的に保持対象としてマークします。クライアントは、たとえプラグインがサブスクライブの前にメッセージを公開した場合でも、トピックをサブスクライブするとすぐに保持される最新のメッセージを受信します。この動作が適用されるのは、状態的な情報のみです。エラーや新しい結果など、イベント的な情報は保持されません。
トピックの概要
以下の表は、使用可能なすべてのトピックとそれぞれの JSON スキーマのリストです。
|
トピック |
保持 |
例 |
JSON スキーマ |
|---|---|---|---|
|
{prefix}/action |
n/a |
|
|
|
{prefix}/error |
✘ |
|
|
|
{prefix}/error/brief |
✘ |
"brief error message" |
|
|
{prefix}/error/code |
✘ |
8565 |
|
|
{prefix}/error/message |
✘ |
"error message" |
|
|
{prefix}/mode |
✔ |
"Automatic", null |
|
|
{prefix}/preparedRecipeId |
✔ |
[], ["4"] |
|
|
{prefix}/recipes |
✔ |
|
|
|
{prefix}/recipes/{id}/isPrepared |
✔ |
false, true |
|
|
{prefix}/recipes/{id}/result |
✘ |
|
|
|
{prefix}/recipes/{id}/result/content/{idx}/value |
✘ |
5, 3.141592, "strings" |
|
|
{prefix}/recipes/{id}/result/images/{dataIndex}/data |
✘ |
"data:image/png;base64" |
「Binary」、「base64」、または「Data URI (base64)」 |
|
{prefix}/recipes/{id}/result/images/{dataIndex}/error |
✘ |
|
|
|
{prefix}/state |
✔ |
"SingleExecution" |
|
|
{prefix}/status/runningJobId |
✔ |
42, null |
JSON スキーマ
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"actionType": {
"enum": [
"SelectMode",
"PrepareRecipe",
"UnprepareRecipe",
"StartSingleJob",
"StartContinuous",
"Halt",
"Reset",
"Stop",
"Abort"
]
}
},
"required": [
"actionType"
],
"allOf": [
{
"if": {
"properties": {
"actionType": {
"const": "SelectMode"
}
}
},
"then": {
"properties": {
"mode": {
"enum": [
"Automatic",
"FrontendAccess"
]
}
},
"required": [
"mode"
]
}
},
{
"if": {
"properties": {
"actionType": {
"const": "PrepareRecipe"
}
}
},
"then": {
"properties": {
"recipeId": {
"type": "string"
}
},
"required": [
"recipeId"
]
}
},
{
"if": {
"properties": {
"actionType": {
"enum": [
"UnprepareRecipe",
"StartSingleJob",
"StartContinuous"
]
}
}
},
"then": {
"properties": {
"recipeId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
}
},
{
"if": {
"properties": {
"actionType": {
"enum": [
"StartSingleJob",
"StartContinuous"
]
}
}
},
"then": {
"properties": {
"measId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"partId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"parameters": {
"anyOf": [
{
"type": "array"
},
{
"type": "null"
}
]
}
}
}
}
]
}
{
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
"code": {
"type": "integer",
"minimum": 0,
"maximum": 65535
},
"severity": {
"enum": [
"Warning",
"Error",
"Critical"
]
},
"cause": {
"enum": [
null,
"SelectMode",
"PrepareRecipe",
"UnprepareRecipe",
"StartSingleJob",
"StartContinuous",
"Halt",
"Reset",
"Stop",
"Abort"
]
},
"brief": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"code",
"severity",
"cause",
"brief",
"message"
]
}
{
"$schema": "http://json-schema.org/schema#",
"type": "string"
}
{
"$schema": "http://json-schema.org/schema#",
"type": "integer",
"minimum": 0,
"maximum": 65535
}
{
"$schema": "http://json-schema.org/schema#",
"type": "string"
}
{
"$schema": "http://json-schema.org/schema#",
"enum": [
null,
"Automatic",
"FrontendAccess"
]
}
{
"$schema": "http://json-schema.org/schema#",
"type": "array",
"items": {
"type": "string"
}
}
{
"$schema": "http://json-schema.org/schema#",
"$defs": {
"recipe_parameters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"valueType": {
"enum": [
"Scalar",
"Array"
]
},
"dataType": {
"enum": [
"Bool",
"Int8",
"UInt8",
"Int16",
"UInt16",
"Int32",
"UInt32",
"Int64",
"UInt64",
"Float",
"Double",
"String",
"Variant"
]
}
}
}
},
"data_infos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
},
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"description": {
"type": "string"
},
"acquisitionSequence": {
"type": ["string", "null"]
},
"inputs": {
"$ref": "#/$defs/recipe_parameters"
},
"outputs": {
"$ref": "#/$defs/recipe_parameters"
},
"outputData": {
"$ref": "#/$defs/data_infos"
}
},
"required": [
"id",
"inputs",
"outputs",
"outputData"
]
}
}
{
"$schema": "http://json-schema.org/schema#",
"type": "boolean"
}
{
"$schema": "http://json-schema.org/schema#",
"$defs": {
"scalar": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "string"
}
]
},
"timestampRfc3339": {
"type": "string",
"pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-([0-2][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]{1,3})Z$"
}
},
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 0
},
"recipeId": {
"type": "string"
},
"jobId": {
"type": "integer",
"minimum": 1
},
"measId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"partId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timestamp": {
"$ref": "#/$defs/timestampRfc3339"
},
"processingTimes": {
"anyOf": [
{
"type": "object",
"properties": {
"executionStartTime": {
"$ref": "#/$defs/timestampRfc3339"
},
"executionEndTime": {
"$ref": "#/$defs/timestampRfc3339"
},
"acquisitionDurationMillis": {
"type": "number"
},
"processingDurationMillis": {
"type": "number"
}
}
},
{
"type": "null"
}
]
},
"resultState": {
"type": "string",
"enum": [
"Completed",
"Processing",
"Aborted",
"Failed"
]
},
"content": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value": {
"anyOf": [
{
"$ref": "#/$defs/scalar"
},
{
"type": "array",
"items": {
"$ref": "#/$defs/scalar"
}
}
]
}
},
"required": [
"name",
"value"
]
}
}
},
"required": [
"id",
"recipeId",
"jobId",
"timestamp",
"resultState",
"content"
]
}
{
"$schema": "http://json-schema.org/schema#",
"$defs": {
"scalar": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "string"
}
]
}
},
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 0
},
"recipeId": {
"type": "string"
},
"jobId": {
"type": "integer",
"minimum": 1
},
"timestamp": {
"type": "string",
"pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-([0-2][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]Z$"
},
"resultState": {
"type": "string",
"enum": [
"Completed",
"Processing",
"Aborted",
"Failed"
]
},
"content": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value": {
"anyOf": [
{
"$ref": "#/$defs/scalar"
},
{
"type": "array",
"items": {
"$ref": "#/$defs/scalar"
}
}
]
}
},
"required": [
"name",
"value"
]
}
}
},
"required": [
"id",
"recipeId",
"jobId",
"timestamp",
"resultState",
"content"
]
}
{
"$schema": "http://json-schema.org/schema#",
"$defs": {
"scalar": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "string"
}
]
}
},
"anyOf": [
{
"$ref": "#/$defs/scalar"
},
{
"type": "array",
"items": {
"$ref": "#/$defs/scalar"
}
}
]
}
{
"$schema": "http://json-schema.org/schema#",
"type": ["null", "integer"]
}
{
"$schema": "http://json-schema.org/schema#",
"enum": [
"Preoperational",
"Halted",
"Error",
"Initialized",
"Ready",
"SingleExecution",
"ContinuousExecution",
"FrontendAccess"
]
}