RS-485周辺機器を統合
ユースケース
このパターンは、RS-485に対応したWLTEデバイスが周辺機器と生バイトをやり取りする必要がある場合に使います。OpenAPIはデータの透過送信(パススルー)を提供しますが、完全なModbusプロトコルスタックを自動的に実装するわけではありません。
アプリケーションプロトコルのペイロード構築、必要に応じたCRC、レスポンスの解釈、デバイス固有のリトライルールの適用は、あなたのサービス側の責任です。
推奨フロー
- デバイス一覧の取得(英語)から対象デバイスの
deviceTypeを読み取ります。 - デバイスタイプ定義一覧の取得(英語)で対応するプロファイルを探します。
supportedOperationsにdevice.rs485.transceiveが含まれている場合のみパススルーを公開します。- ボーレート設定が必要な場合は、別途
device.rs485.baudRate.setを要求し、現在の値をデバイス設定の取得(英語)から読み取ります。 - 新しい
Idempotency-Keyとともに生のリクエストを送信し、返されたコマンドIDを保持します。 SUCCESSの後にのみcommand.result.responseHexを解析します。ステータスがSENTの場合は、コマンド結果を照会します。
段階的な実装
1. 機能と設定の検証
デバイス名や他の機種からRS-485対応を推測しないでください。supportedOperations を使ってください。ボーレートの変更には device:config、パススルーには device:control が必要です。
ボーレートエンドポイントは、RS485ボーレートの設定(英語)に記載されている範囲と単位を受け付けます。周辺機器とデバイスは同じ値を使う必要があります。
2. 生のリクエストを構築
RESTでは、requestHex をRS485透過送信コマンド(英語)に送信します。現在の契約では、スペース、0x プレフィックス、区切り文字を含まない、1〜30バイトの連続した16進数文字列を受け付けます。
周辺機器がModbus RTUを使用する場合、アドレス、ファンクション、データ、CRCバイトはあなたのアプリケーションが構築する必要があります。OpenAPIはバイトを転送し、生のレスポンスバイトを返しますが、Modbusのレジスタやファンクションのセマンティクスを検証するわけではありません。
3. コマンド結果の処理
SUCCESS: 周辺機器のプロトコルに従ってresult.responseHexを解析します。SENT: コマンド結果の取得(英語)で照会します。FAILED: 停止し、確認された失敗を表示します。TIMEOUT: 待機ウィンドウ内に対応するレスポンスが届きませんでした。周辺機器側の書き込みが失敗したと想定しないでください。
WebSocketを使用する場合、一致したデータは操作の返信に含まれます。遅延した、または要求していないRS-485データは、履歴の再生がないdevice.rs485.received(英語)経由で届く場合があります。
主なインターフェースとイベント
| 目的 | リファレンス |
|---|---|
| デバイスの機能を確認 | デバイスタイプ定義一覧の取得(英語) |
| RESTで生データを送信 | RS485透過送信コマンド(英語) |
| WebSocketで生データを送信 | RS485透過送信(英語) |
| ボーレートを設定 | RS485ボーレートの設定(英語) |
| 現在の設定を読み取る | デバイス設定の取得(英語) |
| 要求していないデータを受信 | RS485データイベント(英語) |
障害と復旧
- 元の冪等性キーを再利用するのは、不明なHTTP結果やレート制限の後に、同一の透過送信リクエストを再試行する場合のみにしてください。
TIMEOUTは元のコマンドにとって不確実な最終結果として扱ってください。そのキーを再利用してもデータは再送されません。周辺機器へのコマンドとして別の物理的な試行が安全な場合にのみ、新しいキーを生成してください。- データを適用する前に、自分のパーサーでレスポンス長、プロトコルのチェックサム、アドレス、ファンクションを検証してください。
- 失うことが許容できない場合は、要求していない、または遅延したデータを速やかに永続化してください。WebSocketイベントは再送されません。
- 同じデバイスに対して並行して透過送信リクエストを発行するのではなく、デバイス操作単位のレート制限を守ってください。
本番運用上の考慮事項
- 物理的なRS-485バスまたはデバイスごとに、1つの調整されたリクエストキューを維持してください。
- 生のバスデータに機密の値が含まれる可能性がある場合は、ペイロードをマスキングしてください。
- コマンドID、冪等性キー、リクエストとレスポンスの長さ、最終ステータス、
requestIdを記録してください。認証情報やアクセストークンはログに残さないでください。 - 自動リトライを有効にする前に、実際の周辺機器でタイムアウトと重複レスポンスの挙動をテストしてください。
次のステップ
- レート制限とリトライ(英語)
- コマンド結果の取得(英語)
- WebSocketのRS485データイベント(英語)
