デバイスの接続
ThingWorx Kepware Server は産業オートメーションと産業用 IoT の通信を可能にします。これは、多くの場合、石油およびガスの生産と流通、インテリジェントビル、エネルギーの生産と流通など、離散、プロセス、およびバッチ製造の生産システムで使用されます。
ThingWorx 9.4 以前のバージョンおよび Kepware 6.15 以前のバージョンで、Read from Edge としてマークされているリモートプロパティの品質が UNKNOWN となり、デバイスからの最新の値が反映されないシナリオがいくつか確認されました。以下のシナリオが確認されました。
シナリオ
説明
プラットフォームの再起動
プラットフォームが再起動したときに、Read from Edge としてマークされているリモートプロパティの開始値を Edge から読み取ることができません。これは、アクティブな Web ソケット接続がないことが理由です。
切断後に Edge/Kepware が再接続
接続が失われた後で Edge/Kepware が再接続する際に、バインドが試みられます。これはプラットフォームの再起動 (シナリオ 1) で説明したバインドのパターンに従います。これは、ワークフローで Edge のプロパティが読み取られないことが理由です。
RestartThing サービスまたは Composer からの保存
このユースケースでは、Thing は最初に中止としてマークされます。これにより、Edge のエンドポイントとのバインドが失われます。
RestartThing メソッド中に、ThingWorx Platform は最初に既存のエンドポイントにバインドし、notifyPropertyUpdate メソッドを呼び出します。この Edge は GetPropertySubscriptions を呼び出して、リモートプロパティとバインドに関する情報を取得します。Thing が開始されていないことがあるので、この呼び出しは成功しない可能性があります。readPropertyValueFromEdge を呼び出した結果として、いくつかのプロパティが更新されることがあります。
Kepware のコールドスタート
システムで Kepware を初めて起動したときには、プロパティのバインドに関する情報はありません。起動後、Kepware は ThingWorx Platform に接続し、RemoteThing にバインドします。Kepware は、ThingWorx Platform からフェッチされたプロパティの詳細に基づいて状態の同期化を試みます。同時に、Kepware は産業用デバイス/ハードウェア (PLC、SCADA、DCS システムなど) からデータを取得し始めます。その間に、Kepware がデバイスからその値をフェッチする前に ThingWorx Platform はプロパティの読み取りを試みます。この結果、データの品質が UNKNOWN になることがあります。
提供されている修正
このソリューションでは、リモートプロパティの最新の値を取得し、Thing が Running 状態の場合にのみ呼び出されるように内部サービス呼び出しを再編成するための新しい同期フェッチメカニズムが導入されました。
新しいサービス SynchronizeModelState が導入されました。このサービスは、プロパティ購読やイベント購読など、モデル情報の送信のために ThingWorx Platform によって使用されます。このサービスは、その代わりとして Edge から現在のプロパティ値を受け取ります。このサービスは、ThingWorx Platform の起動/再起動時または Remote Thing の再起動時に発生する可能性がある Thundering Herd の問題も解決します。
Edge が再接続すると、新しい WebSocket 接続が確立され、バインドリクエストを受信します。このソリューションでは、Edge はバインド応答がクライアントに送信されるのを待ってから、同期呼び出しを実行して現在のプロパティをフェッチし、非同期リクエストをトリガーします。バインドが完了するのを待つ理由は、循環呼び出しを防止し、バインドがブロックされないようにするためです。
ThingWorx Platform とエッジデバイスの間の同期状態を追跡するために、2 つの新しいプロパティが追加されました。これら 2 つのプロパティは、プラットフォームでエッジデバイスの状態が正常に同期化された後で設定されます。これらのプロパティは、Thing が開始または停止した場合や、エッジデバイスが切断された場合にはリセットされます。
IsInitialStateSynchronized (Boolean) - エッジデバイスが現在 ThingWorx Platform と同期しているかどうか。
lastInitialStateSynchronized (DateTime) - エッジデバイスの状態が ThingWorx Platform と同期化された最後の時刻。
これは役に立ちましたか?