(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-09-27
(45)【発行日】2022-10-05
(54)【発明の名称】SCADAウェブHMIシステムおよびHMIクライアント
(51)【国際特許分類】
H04L 67/02 20220101AFI20220928BHJP
【FI】
H04L67/02
(21)【出願番号】P 2021568823
(86)(22)【出願日】2020-06-01
(86)【国際出願番号】 JP2020021622
(87)【国際公開番号】W WO2021245752
(87)【国際公開日】2021-12-09
【審査請求日】2021-11-17
(73)【特許権者】
【識別番号】501137636
【氏名又は名称】東芝三菱電機産業システム株式会社
(74)【代理人】
【識別番号】110003199
【氏名又は名称】弁理士法人高田・高橋国際特許事務所
(72)【発明者】
【氏名】清水 亮
(72)【発明者】
【氏名】野島 章
(72)【発明者】
【氏名】清水 伸夫
【審査官】小林 義晴
(56)【参考文献】
【文献】特許第6552775(JP,B1)
【文献】特開2006-338418(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 67/02
(57)【特許請求の範囲】
【請求項1】
監視対象に関する表示パーツを特定する固有識別子と、前記監視対象に接続するプログラマブルロジックコントローラから受信した信号値と、を関連付けた信号データを送信するウェブHMIサーバと、
前記表示パーツが配置されたHMI画面をウェブブラウザに表示し、前記ウェブHMIサーバから前記信号データを受信し、当該受信した信号データに対応する前記表示パーツの表示内容を変更するHMIクライアントと、
を備えるSCADAウェブHMIシステムであって、
前記HMIクライアントは、
プログラムを記憶し、かつ、前記信号データをバッファ領域に一時記憶するメモリと、
前記プログラムを実行することにより、前記ウェブブラウザにおいて通信スレッドとDOM更新スレッドとを並列に動作させるように構成されたプロセッサと、
前記ウェブブラウザを表示するディスプレイと、
を備え、
前記通信スレッドは、
前記ウェブHMIサーバから前記信号データを周期的に受信する受信処理と、
前記受信した信号データに含まれた固有識別子と、前記バッファ領域に記憶されている信号データに含まれた固有識別子とが同じである場合に、前記バッファ領域に記憶されている当該信号データを前記受信した信号データで上書きするバッファ上書き処理と、
前記DOM更新スレッドから信号データ要求イベントを受信した場合に、前記バッファ領域に記憶されているすべての信号データを含むDOM更新要求イベントを、前記DOM更新スレッドへ送信するバッファ送信処理と、を実行し、
前記DOM更新スレッドは、
前記DOM更新要求イベントを受信した場合に、前記DOM更新要求イベントに含まれている前記すべての信号データについてDOMを更新するDOM更新処理と、
前記DOMを更新した後に、前記信号データ要求イベントを前記通信スレッドへ送信すると共に、前記更新されたDOMに応じて前記ウェブブラウザに表示された前記表示パーツの表示内容を更新するレンダリング処理と、を実行すること、
を特徴とするSCADAウェブHMIシステム。
【請求項2】
前記通信スレッドは、
前記DOM更新スレッドにおける処理が停止中である場合に、前記受信した信号データを含む前記DOM更新要求イベントを、前記DOM更新スレッドへ送信する送信処理と、
前記DOM更新スレッドにおける処理が実行中である場合に、前記受信した信号データを前記バッファ領域に記憶させるバッファ処理と、を実行し
前記バッファ上書き処理は、前記バッファ処理において実行されること、
を特徴とする請求項1記載のSCADAウェブHMIシステム。
【請求項3】
監視対象に関する表示パーツが配置されたHMI画面をウェブブラウザに表示し、前記表示パーツを特定する固有識別子と前記監視対象に関する信号値とを関連付けた信号データを受信し、当該受信した信号データに対応する前記表示パーツの表示内容を変更するHMIクライアントであって、
プログラムを記憶し、かつ、前記信号データをバッファ領域に一時記憶するメモリと、
前記プログラムを実行することにより、前記ウェブブラウザにおいて通信スレッドとDOM更新スレッドとを並列に動作させるように構成されたプロセッサと、
前記ウェブブラウザを表示するディスプレイと、
を備え、
前記通信スレッドは
、
ウェブHMIサーバから前記信号データを周期的に受信する受信処理と、
前記受信した信号データに含まれた固有識別子と、前記バッファ領域に記憶されている信号データに含まれた固有識別子とが同じである場合に、前記バッファ領域に記憶されている当該信号データを前記受信した信号データで上書きするバッファ上書き処理と、
前記DOM更新スレッドから信号データ要求イベントを受信した場合に、前記バッファ領域に記憶されているすべての信号データを含むDOM更新要求イベントを、前記DOM更新スレッドへ送信するバッファ送信処理と、を実行し、
前記DOM更新スレッドは、
前記DOM更新要求イベントを受信した場合に、前記DOM更新要求イベントに含まれている前記すべての信号データについてDOMを更新するDOM更新処理と、
前記DOMを更新した後に、前記信号データ要求イベントを前記通信スレッドへ送信すると共に、前記更新されたDOMに応じて前記ウェブブラウザに表示された前記表示パーツの表示内容を更新するレンダリング処理と、を実行すること、
を特徴とするHMIクライアント。
【請求項4】
前記通信スレッドは、
前記DOM更新スレッドにおける処理が停止中である場合に、前記受信した信号データを含む前記DOM更新要求イベントを、前記DOM更新スレッドへ送信する送信処理と、
前記DOM更新スレッドにおける処理が実行中である場合に、前記受信した信号データを前記バッファ領域に記憶させるバッファ処理と、を実行し、
前記バッファ上書き処理は、前記バッファ処理において実行されること、
を特徴とする請求項3記載のHMIクライアント。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、SCADAウェブHMIシステムおよびHMIクライアントに関する。
【背景技術】
【0002】
SCADA(Supervisory Control And Data Acquisition)は、社会インフラシステムを監視制御する仕組みとして知られている。社会インフラシステムは、鉄鋼圧延システム、電力送変電システム、上下水道処理システム、ビル管理システム、道路システムなどである。
【0003】
SCADAは、産業制御システムの一種であり、コンピュータによるシステム監視とプロセス制御を行う。SCADAでは、システムの処理性能に合わせた即応性(リアルタイム性)が必要である。
【0004】
SCADAは一般に次のようなサブシステムから構成される。
(1)HMI(Human Machine Interface)
HMIは、対象プロセス(監視対象装置)のデータをオペレータに提示し、オペレータがプロセスを監視し制御できるようにする機構である。例えば特許文献1には、SCADAクライアントで動作するHMI画面を備えるSCADA HMIが開示されている。
(2)監視制御システム
監視制御システムは、Programmable Logic Controller(PLC)などによって構成される。監視制御システムは、プロセス上のPLCデータを収集し、プロセスに対して制御コマンドを送る。
(3)遠方入出力装置(Remote Input Output:RIO)
遠方入出力装置は、プロセス内に設置されたセンサと接続し、センサの信号をデジタルのデータに変換し、そのデジタルデータを監視制御システムに送る。
(4)通信基盤
通信基盤は、監視制御システムと遠方入出力装置を接続する。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1におけるHMIサブシステムのクライアントプログラムは、マシン環境に依存したプログラムで構築されている。SCADA HMIサブシステムの低コスト化を実現するため、本願発明者は、マシン環境に依存しないブラウザベースのSCADA HMIサブシステムを開発するに至った。
【0007】
ウェブブラウザ上で動作するウェブアプリケーションを用いてSCADA HMIサブシステムを構築する場合、以下の利点がある。
(1)ウェブブラウザは、パーソナルコンピュータ(PC)、タブレットPCなどの多くの端末機器に搭載されているため、様々な端末機器をSCADA HMIサブシステムに利用可能である。
(2)ウェブブラウザは、高機能なレンダリング機能を有しており、アニメーションをはじめとする高度なGUIインタラクション機能を作り込み易い。
【0008】
ブラウザベースのSCADA HMIサブシステムは、ウェブHMIサーバとHMIクライアントとを備える。
【0009】
ウェブHMIサーバは、監視制御システムからPLCデータを受信する。PLCデータは、アラームデータとして利用されるデータと、信号データとして利用されるデータとに分類される。アラームデータは、監視対象装置の異常を示す、変化の頻度が低いデータであり、長周期で処理される。信号データは、監視対象装置の温度や速度など変化の頻度が高いデータであり、短周期で処理される。
【0010】
HMIクライアントは、ウェブブラウザを実行する。ウェブブラウザは、ウェブHMIサーバからアラームデータおよび信号データを受信し、これらのデータを含むウェブページを表示する。
【0011】
一般的に、ウェブブラウザ上で動作するウェブアプリケーションは、Document Object Model(DOM)と呼ばれるデータ構造を更新する。ウェブブラウザは、そのDOMの更新結果に基づいてレンダリング処理を実行する。そのため、ウェブブラウザのレンダリング処理は、オペレーティングシステムの表示インタフェースを直接使用して表示を行うネイティブの表示処理に比べて低速である。
【0012】
HTML5の機能を利用すれば、WebGLといったレンダリング方式を使用して高速に描画することも可能である。しかし、表示ロジックが複雑になるため、すべての表示をWebGLを用いて行うことは難しい。
【0013】
アラームデータは、長周期で処理され、データの送信間隔が長い。そのため、ウェブアプリケーションは、アラームデータについての描画処理を遅延なく実行できる(
図14)。一方、信号データは、短周期で処理され、データの送信間隔が短い。そのため、大量の信号データが送信された場合、ウェブアプリケーションは、これらの信号データについての描画処理を、送信間隔内で完了できない可能性がある。
【0014】
また、大量の信号データを処理するためにDOM更新処理が連続して実行された場合、ウェブブラウザによるレンダリング処理が実行されるタイミングがなくなる(
図15)。レンダリング処理が動作しないと信号データは、物理画面に反映されない。そのため、物理画面への信号データの表示が遅延する可能性がある。
【0015】
この発明は、上述の課題を解決するためになされた。この発明の目的は、HMIクライアントの表示性能を超える大量の信号データを受信した場合であっても、ウェブブラウザのデータ表示の遅延を抑制できるSCADAウェブHMIシステムおよびHMIクライアントを提供することである。
【課題を解決するための手段】
【0016】
上記目的の達成のため、本発明に係るSCADAウェブHMIシステムは以下のように構成される。
【0017】
SCADAウェブHMIシステムは、ウェブHMIサーバとHMIクライアントとを備える。前記ウェブHMIサーバは、監視対象に関する表示パーツを特定する固有識別子と、前記監視対象に接続するプログラマブルロジックコントローラから受信した信号値と、を関連付けた信号データを送信する。前記HMIクライアントは、前記表示パーツが配置されたHMI画面をウェブブラウザに表示する。前記HMIクライアントは、前記ウェブHMIサーバから前記信号データを受信する。前記HMIクライアントは、当該受信した信号データに対応する前記表示パーツの表示内容を変更する。
【0018】
前記HMIクライアントは、メモリとプロセッサとディスプレイとを備える。前記メモリは、プログラムを記憶し、かつ、前記信号データをバッファ領域に一時記憶する。前記プロセッサは、前記プログラムを実行することにより、前記ウェブブラウザにおいて通信スレッドとDOM更新スレッドとを並列に動作させるように構成される。前記ディスプレイは、前記ウェブブラウザを表示する。
【0019】
前記通信スレッドは、受信処理とバッファ上書き処理とバッファ送信処理とを実行する。受信処理は、前記ウェブHMIサーバから前記信号データを周期的に受信する。バッファ上書き処理は、前記受信した信号データに含まれた固有識別子と、前記バッファ領域に記憶されている信号データに含まれた固有識別子とが同じである場合に、前記バッファ領域に記憶されている当該信号データを前記受信した信号データで上書きする。バッファ送信処理は、前記DOM更新スレッドから信号データ要求イベントを受信した場合に、前記バッファ領域に記憶されているすべての信号データを含むDOM更新要求イベントを、前記DOM更新スレッドへ送信する。
【0020】
前記DOM更新スレッドは、DOM更新処理と、レンダリング処理とを実行する。DOM更新処理は、前記DOM更新要求イベントを受信した場合に、前記DOM更新要求イベントに含まれている前記すべての信号データについてDOMを更新する。前記DOM更新スレッドは、前記DOMを更新した後に、前記信号データ要求イベントを前記通信スレッドへ送信する。レンダリング処理は、前記更新されたDOMに応じて前記ウェブブラウザに表示された前記表示パーツの表示内容を更新する。
【0021】
好ましくは、前記通信スレッドは、さらに以下の送信処理とバッファ処理とを実行する。前記送信処理は、前記DOM更新スレッドにおける処理が停止中である場合に、前記受信した信号データを含む前記DOM更新要求イベントを、前記DOM更新スレッドへ送信する。バッファ処理は、前記DOM更新スレッドにおける処理が実行中である場合に、前記受信した信号データを前記バッファ領域に記憶させる。ここで、前記バッファ上書き処理は、前記バッファ処理において実行される。
【発明の効果】
【0022】
本発明によれば、ウェブブラウザは、通信スレッドとDOM更新スレッドとを並列に動作させる。そのため、データ受信処理と描画処理を非同期に実行できる。
【0023】
通信スレッドは、受信した信号データのバッファリングに際して、同一識別子の信号データを上書きするため、最新の信号データのみにデータを間引くことができる。そのため、バッファのオーバーフローを抑制できる。
【0024】
さらに、DOM更新スレッドは、DOM更新処理が完了した後に、信号データ要求イベントを通信スレッドへ送信し、通信スレッドは、この信号データ要求イベントを受信して、次の信号データをDOM更新スレッドへ送信する。これによれば、DOM更新スレッドでは、DOM更新処理が完了するまでは、次の信号データの取得が禁止される。そのため、DOM更新処理が連続して実行されることなく、DOM更新処理が完了するたびにレンダリング処理を実行することができる。
【0025】
このように、本発明によれば、信号データを間引く量を最小限に抑えながら、レンダリング処理を適切に実行することで、HMIクライアントの表示性能を最大限活かすことができる。そのため、本発明によれば、HMIクライアントの表示性能を超える大量の信号データを受信した場合であっても、ウェブブラウザのデータ表示の遅延を抑制できる。
【図面の簡単な説明】
【0026】
【
図1】本発明の実施の形態1におけるSCADAのシステム構成を説明するためのブロック図である。
【
図2】ウェブブラウザに表示される表示パーツと、信号データとの関係について説明するための図である。
【
図3】信号データのデータ構造の一例について説明するための図である。
【
図4】
図3に示すデータ構造をJSONで表現した例である。
【
図5】DOM更新スレッド停止中に、HMIクライアント4が信号データを受信した場合の処理について説明するための図である。
【
図6】DOM更新スレッド動作中に、HMIクライアント4が信号データを受信した場合の処理について説明するための図である。
【
図7】信号データ受信処理を表現したフローチャートである。
【
図8】通信処理部が実行する信号データバッファリング処理について説明するためのフローチャートである。
【
図9】シグナルバッファへのデータの格納例を示す図である。
【
図10】DOM更新スレッドが、シグナルバッファに一時記憶されている信号データを取得する処理について説明するための図である。
【
図11】DOM更新スレッドの処理を説明するためのフローチャートである。
【
図12】DOM更新スレッドが信号データを要求するタイミングと、レンダリング処理のタイミングについて説明するための図である。
【
図13】ウェブHMIサーバおよびHMIクライアントが有するハードウェア構成例を示すブロック図である。
【
図14】関連技術におけるアラームデータの処理例を示す図である。
【
図15】関連技術における信号データの処理例を示す図である。
【発明を実施するための形態】
【0027】
以下、図面を参照して本発明の実施の形態について詳細に説明する。但し、以下に示す実施の形態において各要素の個数、数量、量、範囲等の数に言及した場合、特に明示した場合または原理的に明らかにその数に特定される場合を除いて、その言及した数にこの発明が限定されるものではない。また、以下に示す実施の形態において説明する構造等は、特に明示した場合や明らかに原理的にそれに特定される場合を除いて、この発明に必ずしも必須のものではない。
【0028】
実施の形態1.
<全体構成>
図1は、本発明の実施の形態1に係るSCADAのシステム構成を説明するためのブロック図である。
【0029】
SCADAは、SCADAウェブHMIシステムとしてのヒューマンマシンインターフェース1(以下、HMI1)、監視制御システムとしてのプログラマブルロジックコントローラ2(以下、PLC2)、通信基盤(図示省略)、RIO(図示省略)をサブシステムとして備える。SCADAは、PLC2またはRIOを介して監視対象装置(図示省略)に接続する。
【0030】
PLC2、通信基盤、RIOに関する説明は、背景技術で述べた通りであるため省略する。監視対象装置は、プラントを構成する装置(センサ、アクチュエータを含む)である。
【0031】
HMI1は、SCADAウェブHMIサーバ装置3(以下、ウェブHMIサーバ3)と、少なくとも1つのHMIクライアント端末4(以下、HMIクライアント4)とを備える。
【0032】
ウェブHMIサーバ3は、PLC2とHMIクライアント4とに接続する。HMIクライアント4は、ウェブブラウザ5を実行する。ウェブブラウザ5は、HMI画面を表示する。HMI画面は、監視対象装置の状態を表示する表示パーツが配置された少なくとも1つの図面で構成される。
【0033】
<ウェブHMIサーバ>
ウェブHMIサーバ3は、後述する
図13に示すように、プロセッサ100aとメモリ100bとを備える。メモリ100bは、プロセッサ100aにより実行されることで、プロセッサ100aをウェブシステムとして機能させるためのプログラムを記憶する。ウェブシステムは、PLCデータ処理部31、アラームデータ生成部32、信号データ生成部33、通信処理部34を含む。
【0034】
PLCデータ処理部31は、PLC2からPLCデータを受信する。PLCデータは、監視対象装置が入出力する信号値を含む。PLCデータは、アラームデータとして利用されるデータと、信号データとして利用されるデータとに分類される。アラームデータとして利用されるPLCデータは、アラームデータ生成部32へ送られる。信号データとして利用されるPLCデータは、信号データ生成部33へ送られる。
【0035】
アラームデータ生成部32は、受信したPLCデータからアラームデータを生成する。具体的には、アラームデータ生成部32は、受信したPLCデータに、アラーム種別(重障害/中障害/軽障害)ごとにアラーム識別子を付与するとともに、アラームの状態(発生/復帰、未確認/確認)やアラーム発生時刻などのアラーム属性を付与してアラームデータを生成する。
【0036】
また、アラームデータ生成部32は、アラームグループごとにアラームを表示するHMIクライアント4を定めた定義情報(アラームリスト22、アラームグループリスト23)を読み込む。定義情報に基づいて、アラームデータには、アラームが表示されるべきHMIクライアント4の情報が付与される。
【0037】
アラームデータ生成部32は、生成したアラームデータを通信処理部34へ送信する。
【0038】
アラームデータは、一つの障害に関連して一度に大量に発生する可能性があるが、一定時間内に高頻度で変化することはない。したがって、アラームデータの生成は長周期で行われる。アラームデータ生成部32から通信処理部34へのデータ送信間隔は、例えば8秒程度である。
【0039】
信号データ生成部33は、受信したPLCデータから信号データを生成する。具体的には、まず、信号データ生成部33は、HMI画面に配置された表示パーツを特定する固有識別子と、PLCデータとを関連付けるための定義情報(デバイスリスト21)を読み込む。固有識別子は、グラフィックID(図面名)とパーツID(シンボル名)との組み合わせを含む、システム内でユニークな識別子である。
【0040】
信号データ生成部33は、HMI画面に配置された表示パーツを特定する固有識別子とPLCデータの信号値とを関連付けた信号データを生成する。信号データ生成部33は、生成した信号データを通信処理部34へ送信する。
【0041】
信号データは、監視対象装置の温度や速度など変化の頻度が高いデータであり、HMIクライアント4の画面にリアルタイムに表示されることが求められる。そのため、信号データはアラームデータに比して短周期で処理される。信号データ生成部33から通信処理部34へのデータ送信間隔は、PLC2からPLCデータ処理部31へのPLCデータの通信間隔と同程度である。例えば、50ms程度である。
【0042】
通信処理部34は、受信したアラームデータと信号データを、WebSocket通信を使って、各HMIクライアント4の通信処理部41へ送信する。通信処理部34は、フィルタリング処理35により、各HMIクライアント4に関連するデータだけを送信する。
【0043】
このように、ウェブHMIサーバ3は、監視対象装置に関する表示パーツを特定する固有識別子と、当該監視対象装置に接続するPLC2から受信した信号値と、を関連付けた信号データをHMIクライアント4へ送信する。
【0044】
<HMIクライアント>
HMIクライアント4は、後述する
図13に示すように、プロセッサ200aとメモリ200bとを備える。メモリ200bは、プロセッサ200aにより実行されることで、プロセッサ100aをウェブブラウザ5として機能させるためのプログラム、および、ウェブブラウザ5上で動作するウェブアプリケーションとして機能させるためのプログラムを記憶する。
【0045】
HMIクライアント4は、表示パーツが配置されたHMI画面をウェブブラウザ5に表示する。HMIクライアント4は、ウェブHMIサーバ3から信号データを受信する。HMIクライアント4は、受信した信号データの固有識別子に対応する表示パーツについて、当該表示パーツの表示内容を、受信した信号データの信号値に応じて変更する。
【0046】
HMIクライアント4は、ウェブブラウザ5において、イベント処理や描画処理を担うDOM更新スレッド6と、通信処理を担う通信スレッド7とを並列に動作させる。マルチスレッドはWeb Workerにより実現可能である。
【0047】
ウェブブラウザ5は、通信処理部41、アラームデータDOM更新処理部42、信号データDOM更新処理部43、レンダリング処理部44を実行可能である。
【0048】
通信処理部41、アラームデータDOM更新処理部42、信号データDOM更新処理部43は、ウェブブラウザ5上で動作するウェブアプリケーションにより実現される。このウェブアプリケーションはJavaScriptで記述される。
【0049】
レンダリング処理部44は、ウェブブラウザ5が予め備えるレンダラー(レンダリングエンジン)により実現される。
【0050】
通信スレッド7は、通信処理部41の処理を実行する。
【0051】
通信処理部41は、ウェブHMIサーバ3からアラームデータおよび信号データを周期的に受信する(受信処理)。信号データはアラームデータに比して短周期で受信される。通信処理部41は、ウェブHMIサーバ3から受信したアラームデータを、アラームデータDOM更新処理部42へ送信する。通信処理部41は、ウェブHMIサーバ3から受信した信号データを、信号データDOM更新処理部43へ送信する。
【0052】
DOM更新スレッド6は、アラームデータDOM更新処理部42、信号データDOM更新処理部43、レンダリング処理部44の処理を実行する。
【0053】
アラームデータDOM更新処理部42と信号データDOM更新処理部43は、それぞれ受信したデータをDOM上に反映する。レンダリング処理部44は、DOMに展開されたデータをHMI画面に表示する。
【0054】
次に、
図2乃至
図4を参照して、表示パーツおよび信号データについて補足説明する。
【0055】
図2は、ウェブブラウザ5に表示される表示パーツと、信号データとの関係について説明するための図である。
【0056】
ウェブブラウザ5にウェブページ(HMI画面)として表示される図面には、複数の表示パーツ(シンボル)が配置されている。表示パーツは、例えば、バーグラフ24、数値表示パーツ25、色ラベルパーツ26である。表示パーツには、信号データが関連付けられている。
【0057】
信号データのデータ型には、整数型、浮動小数点型、論理型などがある。バーグラフ24は、整数型の信号データが関連付けられたパーツである。バーグラフ24は、信号値に応じてバーの長さが変わる。数値表示パーツ25は、浮動小数点数型の信号データが関連付けられた用品である。数値表示パーツ25は、信号値に応じてテキストボックスの数値が変わる。色ラベルパーツ26は、論理型の信号データが関連付けられた用品である。色ラベルパーツ26は、信号値に応じて色が変わる。
【0058】
図3は、信号データのデータ構造の一例について説明するための図である。
【0059】
信号データは、各図面の表示パーツに割り当てられる。HMI画面を構成する各図面には、グラフィックIDがアサインされる。図面には複数の表示パーツが配置される。各表示パーツには、パーツIDがアサインされる。信号データは、グラフィックIDとパーツIDとを組み合わせた固有識別子と、PLCデータの信号値とを関連付けたデータである。
【0060】
図3に示すように、1つの信号値は、複数の表示パーツと関連付けることができる。信号データは、グラフィックIDとパーツIDとを組み合わせた固有識別子のリストを有する。このリストをパーツIDリストと称する。このデータ構造は、ウェブHMIサーバ3の信号データ生成部33で作られる。
【0061】
次に、
図4を参照して、信号データのデータ構造をデータ記述言語で表した例について説明する。データ記述言語の1つとしてJavaScript Object Notation(JSON)が知られている。
図4は、
図3に示すデータ構造をJSONで表現した例である。
【0062】
<HMIクライアントの特徴的構成>
次に、
図5~
図12を参照して、本実施形態に係るHMIクライアント4の特徴的構成について説明する。
【0063】
HMIクライアント4は、大量の信号データを受信した場合であっても、ウェブブラウザ5の信号データの表示に遅延を生じさせないために、通信スレッドおよびDOM更新スレッドが以下に説明する処理を行う。
【0064】
図1において説明したように、ウェブブラウザ5は、通信スレッド7とDOM更新スレッド6とを並列に動作させ、データの取得処理と描画処理とを非同期に実行する。
【0065】
図5は、DOM更新スレッド停止中に、HMIクライアント4が信号データを受信した場合の処理について説明するための図である。通信スレッド7は、DOM更新スレッド6における処理が停止中である場合に、受信した信号データを含むDOM更新要求イベントをDOM更新スレッド6へ送信する(送信処理)。
【0066】
図6は、DOM更新スレッド動作中に、HMIクライアント4が信号データを受信した場合の処理について説明するための図である。通信スレッド7は、DOM更新スレッド6における処理が実行中である場合に、受信した信号データを、HMIクライアント4のメモリ200b上に確保したバッファ領域(シグナルバッファ)に記憶させる(バッファ処理)。
【0067】
図7は、
図5および
図6で説明した信号データ受信処理を表現したフローチャートである。
【0068】
ステップS100において、通信処理部41は、ウェブHMIサーバ3から信号データを受信する。
【0069】
ステップS110において、通信処理部41は、DOM更新スレッド6が動作中であるかを判定する。通信処理部41は、DOM更新スレッド6が停止中である場合、ステップS120の処理を実行する。一方、通信処理部41は、DOM更新スレッド6が動作中である場合、ステップS130の処理を実行する。
【0070】
ステップS120において、通信処理部41は、受信した信号データをDOM更新スレッド6へ送信する(送信処理)。
【0071】
ステップS130において、通信処理部41は、サブルーチンである信号データバッファリング処理(
図8)を実行する(バッファ処理)。
【0072】
ステップS120またはS130の処理後、通信処理部41は、信号データ受信処理を終了する。
【0073】
図8は、
図7のステップS130において通信処理部41が実行する信号データバッファリング処理について説明するためのフローチャートである。
【0074】
ステップS200において、通信処理部41は信号データに関連付けられたパーツIDリストを取得する。
【0075】
ステップS210乃至S250において、通信処理部41は、ループAの処理を実行する。通信処理部41は、パーツIDリストの各要素について、ステップS220~ステップS240の処理を実行する。
【0076】
ステップS220において、通信処理部41は、受信した信号データと同じ固有識別子(グラフィックIDとパーツIDとの組み合わせ)を有する信号データが、すでにシグナルバッファ内に存在するかを判定する。
【0077】
ステップS220において判定条件が成立しない場合は、ステップS230の処理に進む。
【0078】
一方、ステップS220において判定条件が成立する場合は、ステップS240の処理に進む。
【0079】
ステップS230において、通信処理部41は、固有識別子(グラフィックIDとパーツIDとの組み合わせ)に対応するエントリをシグナルバッファ内に作成する。その後、ステップS240の処理に進む。
【0080】
ステップS240において、通信処理部41は、シグナルバッファ内の固有識別子に対応するエントリにデータ型と信号値を設定する。
【0081】
通信処理部41は、パーツIDリストのすべての要素についてステップS220~S240の処理を実行した後に信号データバッファリング処理を終了する。ループAによれば、ウェブHMIサーバ3から受信した信号データは、固有識別子毎に分解された信号データとして、シグナルバッファに記憶される。
【0082】
以上説明したように、
図8の処理によれば、通信スレッド7は、受信した信号データに含まれた固有識別子と、シグナルバッファに記憶されている信号データに含まれた固有識別子とが同じである場合に、シグナルバッファに記憶されている信号データを受信した信号データで上書きする(バッファ上書き処理)。
【0083】
次に、
図9を参照して、
図7および
図8の処理を繰り返して、複数の信号データがシグナルバッファに格納された例を説明する。
【0084】
図9は、シグナルバッファへのデータの格納例を示す図である。
図8に示す処理により、受信した信号データと同じ固有識別子を有する場合、シグナルバッファ上の信号データの信号値は上書きされる。上書きされる前の信号データは、HMI画面に表示されるデータとしては使用されず、間引きされることになる。
【0085】
上述した信号データバッファリング処理によってシグナルバッファに一時記憶された信号データは、DOM更新スレッド6からの要求に応じてDOM更新スレッド6へ送信される。
【0086】
図10は、DOM更新スレッド6が、シグナルバッファに一時記憶されている信号データを取得する処理について説明するための図である。
【0087】
DOM更新スレッド6は、現在の信号データについてのDOM更新処理を完了した後、通信スレッド7呼び出して、シグナルバッファに一時記憶されている信号データを送るように要求する。具体的には、信号データ要求イベントを通信スレッド7へ送信する。
【0088】
通信スレッド7は、DOM更新スレッド6から信号データ要求イベントを受信した場合に、シグナルバッファに記憶されているすべての信号データを含むDOM更新要求イベントを、DOM更新スレッド6へ送信する(バッファ送信処理)。送信後、通信スレッド7は、シグナルバッファに一時記憶されたデータを削除する。
【0089】
DOM更新スレッド6は、DOM更新要求イベントを受信した場合に、DOM更新要求イベントに含まれているすべての信号データについてDOMを更新する(DOM更新処理)。
【0090】
図11は、DOM更新スレッド6の処理を説明するためのフローチャートである。
【0091】
ステップS300において、信号データDOM更新処理部43は、通信スレッドからDOM更新要求イベントを受信する。
【0092】
ステップS310において、信号データDOM更新処理部43は、DOM更新要求イベントに含まれているすべての信号データについてDOMを更新する。
【0093】
ステップS320において、信号データDOM更新処理部43は、信号データ要求イベントを通信スレッド7へ送信する。
【0094】
図12は、DOM更新スレッド6が信号データを要求するタイミングと、レンダリング処理のタイミングについて説明するための図である。
【0095】
本システムで重要なのは、DOM更新スレッド6は、DOM更新を完了した後に、バッファリングされている次の信号データを要求するために通信スレッド7を呼び出す(信号データ要求イベント)ことである。
【0096】
信号データ要求イベントを送信するタイミングで、DOM更新スレッド6は、レンダリング処理を実行する。レンダリング処理は、DOMに展開されたデータを物理画面に反映させる処理である。レンダリング処理部44は、更新されたDOMに応じてウェブブラウザ5に表示された表示パーツの表示内容を更新する。
【0097】
以上説明したように、本実施形態に係るSCADAウェブHMIシステムによれば、通信スレッド7は、受信した信号データのバッファリングに際して、同一識別子の信号データを上書きするため、最新の信号データのみにデータを間引くことができる。そのため、バッファのオーバーフローを抑制できる。
【0098】
さらに、DOM更新スレッド6は、DOM更新処理が完了した後に、信号データ要求イベントを通信スレッド7へ送信し、通信スレッド7は、この信号データ要求イベントを受信して、次の信号データをDOM更新スレッド6へ送信する。これによれば、DOM更新スレッド6では、DOM更新処理が完了するまでは、次の信号データの取得が禁止される。そのため、DOM更新処理が連続して実行されることなく、DOM更新処理が完了するたびにレンダリング処理を実行することができる。
【0099】
このように、本実施形態によれば、信号データを間引く量を最小限に抑えながら、レンダリング処理を適切に実行することで、HMIクライアント4の表示性能を最大限活かすことができる。そのため、本発明によれば、HMIクライアント4の表示性能を超える大量の信号データを受信した場合であっても、ウェブブラウザ5のデータ表示の遅延を抑制できる。
【0100】
ところで、以上の説明では主に信号データについて説明したが、アラームデータについても同様に処理可能である。DOM更新スレッド6および通信スレッド7における信号データに対する処理をアラームデータにも適用する。信号データDOM更新処理部43と同様の処理をアラームデータDOM更新処理部42にも適用する。
【0101】
また、上述した実施の形態1において、メモリ200bは、メインメモリと、バッファ領域としてのバッファメモリとを備え、メインメモリにプログラムを記憶し、バッファメモリに信号データを記憶することとしてもよい。
【0102】
<ハードウェア構成例>
図13は、ウェブHMIサーバ3およびHMIクライアント4が有するハードウェア構成例を示すブロック図である。
【0103】
上述したウェブHMIサーバ3の各処理は、処理回路により実現される。処理回路は、少なくとも1つのプロセッサ100aと、少なくとも1つのメモリ100bと、ネットワークインタフェース100cと、入力インタフェース100dと、少なくとも1つのディスプレイ100eとが接続して構成されている。プロセッサ100aは、メモリ100bに記憶された各種プログラムを実行することにより、ウェブHMIサーバ3の各機能を実現する。メモリ100bは、ROM、RAM、HDD、SSDなどを含む。ネットワークインタフェース100cは、コンピュータネットワークを介してPLC2と接続しPLCデータを受信可能なデバイスである。ネットワークインタフェース100cは、HMIクライアント4と接続してアラームデータ、信号データを送信可能なデバイスである。入力インタフェース100dは、キーボード、マウス、タッチパネル等の入力デバイスである。
【0104】
上述したHMIクライアント4の各処理は、処理回路により実現される。処理回路は、少なくとも1つのプロセッサ200aと、少なくとも1つのメモリ200bと、ネットワークインタフェース200cと、入力インタフェース200dと、少なくとも1つのディスプレイ200eとが接続して構成されている。プロセッサ200aは、メモリ200bに記憶された各種プログラムを実行することにより、HMIクライアント4の各機能を実現する。メモリ200bは、ROM、RAM、HDD、SSDなどを含む。ネットワークインタフェース200cは、コンピュータネットワークを介してウェブHMIサーバ3と接続し、アラームデータ、信号データを受信可能なデバイスである。入力インタフェース200dは、キーボード、マウス、タッチパネル等の入力デバイスである。なお、HMIクライアント4は、タブレット等の携帯端末であってもよい。ディスプレイ200eは、ウェブブラウザ5を表示する。
【0105】
以上、本発明の実施の形態について説明したが、本発明は、上記の実施の形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
【符号の説明】
【0106】
1 ヒューマンマシンインターフェース(HMI)
2 プログラマブルロジックコントローラ(PLC)
3 SCADAウェブHMIサーバ装置(ウェブHMIサーバ)
4 HMIクライアント端末(HMIクライアント)
5 ウェブブラウザ
6 DOM更新スレッド
7 通信スレッド
21 デバイスリスト
22 アラームリスト
23 アラームグループリスト
24 バーグラフ
25 数値表示パーツ
26 色ラベルパーツ
31 PLCデータ処理部
32 アラームデータ生成部
33 信号データ生成部
34 通信処理部
35 フィルタリング処理
41 通信処理部
42 アラームデータDOM更新処理部
43 信号データDOM更新処理部
44 レンダリング処理部
100a プロセッサ
100b メモリ
100c ネットワークインタフェース
100d 入力インタフェース
100e ディスプレイ
200a プロセッサ
200b メモリ
200c ネットワークインタフェース
200d 入力インタフェース
200e ディスプレイ