(57)【特許請求の範囲】
【請求項１】
他のプログラミング機器上にて完全ハッシュ関数生成系を用いて生成されたプログラムの実行コードとテーブルであって、内部に変数名そのものを持たず、関数の入力引数の文字列で与えられた変数名を特定の値にマッピングすることにより、変数名からハッシュ値を導き出す所定の関数プログラムの実行コードと、前記ハッシュ値からモニタ値の割付先アドレスを導き出すテーブルとが記憶部にダウンロードされており、
外部から入力された変数名に対して、前記関数プログラムによる評価結果と前記テーブルの参照により割付先アドレスを決定して対応するモニタ値を出力し、
前記テーブルに、誤り検出用のチェックサムのデータが付加されている
ことを特徴とするプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラマブルコントローラに関し、特に外部から入力された変数名に対して対応するモニタ値を出力するプログラマブルコントローラに関するものである。
【背景技術】
【０００２】
図４は従来のプログラマブルコントローラとその周辺機器の構成を示す模式図である。図４においてプログラマブルコントローラ（ＰＬＣ：Programmable Logic Controller）１３００は、図示しない記憶部にＰＬＣ実行コード１０２を記憶している。このＰＬＣ実行コード１０２は、プログラミング機器１１００にてコンパイルされて実行コード（ロードモジュール）とされプログラマブルコントローラ１３００にダウンロードされたものである。プログラマブルコントローラ１３００は、このＰＬＣ実行コード１０２を実行することにより、モニタ機器１２００から入力された変数名に対して対応するモニタ値をモニタ機器１２００に出力する。
【０００３】
プログラミング機器１１００には、国際規格ＩＣＥ６１１３１−３で定義されているストラクチャード・テキスト言語（ＳＴ言語）のような高級プログラミング言語にて記載されたＰＬＣソースコード１０１が記憶されており、このＰＬＣソースコード１０１をＰＬＣ実行コード生成系（コンパイラ）１１０を用いてコンパイルすることによりＰＬＣ実行コード１０２が生成される。なお、本明細書において、「コンパイルする」とは、人間がプログラミング言語を用いて作成したソフトウェアの設計図(ソースコード)を、コンピュータ上で実行可能な形式(実行コード)に変換することを言う。
【０００４】
ＰＬＣ実行コード生成系１１０は、ＰＬＣ実行コード１０２のコンパイルの過程で中間生成物である変数割付テーブル１３０を生成する。この変数割付テーブル１３０には、コンパイル中にＰＬＣソースコード１０１上にて見つかった変数名が逐次登録される。そしてさらに、登録された変数名に対してプログラマブルコントローラのデータメモリ上の空き領域から順次必要な領域が割り当てられ、そのメモリアドレスが記録される。従来、この変数割付テーブル１３０は、ファイル化されて、プログラマブルコントローラ１３００をモニタするモニタ機器１２００にコピーされ、モニタ機器１２００がモニタリング動作する際、変数名からモニタ値の割付先アドレスを導き出す対応表として用いられていた。
【０００５】
モニタ機器１２００の変数割付テーブル検索系１２２０は、この変数割付テーブル１３０を用いて、オペレータが入力したモニタ対象の変数名２０１からモニタ値の割付先アドレス１２０３を導き出す。そして、ＰＬＣ通信系２１０は、プログラマブルコントローラ１３００の周辺サービス処理系１３３０に、この割付先アドレス１２０３にてモニタ値の問い合わせをする。プログラマブルコントローラ１３００の周辺サービス処理系１３３０は、ＰＬＣ実行制御系３１０を介して割付先アドレス１２０３に格納されているモニタ値を獲得し、このモニタ値をモニタ機器１２００に向けて出力する。従来、このようにして、プログラマブルコントローラ１３００に対するモニタ機器１２００のモニタリング動作が行われていた。
【０００６】
ここで、パソコン等のコンピュータ汎用機器とプログラマブルコントローラとの違いに関して言及する。プログラマブルコントローラはファクトリーオートメーション（ＦＡ）分野を始めとして、幅広いアプリケーションに適用できる所謂シーケンス制御を行うプログラマブル論理制御装置のことを言い、例えば、ラダーダイアグラムまたは機能チャートに従って信号の論理的な相互接続を模擬する専用の装置のことを指し、パソコン等の汎用機器に較べて一般に入出力機能等が充実しているが記憶装置の容量等は小さい。
【０００７】
従来、記憶装置の記憶容量に関する課題は、長い間広い技術分野に渡って存在している。従来、記憶領域を縮小する目的で、また検索時間を縮小する目的でハッシュ関数を使用することが提案されている。例えば、ワードプロセッサ等における電子辞書の検索動作において、ハッシュ関数を用いてスペルチェックの所要時間を短縮することが提案されている（例えば、特許文献１参照）。
【０００８】
【特許文献１】特開昭６２−７４１５３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
図４に示した従来技術において、コンパイルの過程に中間生成物として生成された変数割付テーブル１３０は、内部に変数名そのものを有している。そのため、比較的長い変数名を数多く登録するプログラマブルコントローラの技術分野においては変数割付テーブル１３０により非常に大きな記憶領域を消費する。一方でプログラマブルコントローラ１３００の記憶部は、上述のようにパソコン等の汎用機器の記憶部に比べて記憶領域が小さい。そのため、変数割付テーブル１３０はプログラマブルコントローラ１３００の記憶部に格納することが容易ではなく、従来、この変数割付テーブル１３０は、図４に示すように、プログラマブルコントローラ１３００をモニタリング動作するモニタ機器１２００側に持たされていた。
【００１０】
そしてさらに、従来、モニタ機器１２００は変数割付テーブル検索系１２２０を持ち、この変数割付テーブル検索系１２２０にて、変数割付テーブル１３０を用いて変数名から割付先アドレスを検索しなければならず、モニタリング動作をスピーディーに行えないばかりか、モニタ機器１２００として、例えば大きな記憶領域と高度な性能を持つパソコンを使用する必要があり、コストが増加するといった課題があった。
【００１１】
一方、上記特許文献１に提案されている方法においては、単語郡をグループ分けして辞書に登録する際に、ハッシュ値のインデックスの桁数を増減することによってグループ当たりの単語の個数を調整して、インデックスの桁数を充分大きく設定することにより、頭文字及び文字数によるグループ分けの場合よりもグループ数を増やして、それだけグループ当たりの単語数を減少させ、これにより、スペルチェックの所要時間を短縮する。しかしながら、この技術は検索要素がグループ分けされる場合に有効であり、上記課題の変数割付テーブルは特に検索要素がグループ分けされてないので、有効に適用できるものではなかった。
【００１２】
この発明は上記の課題を解決するためになされたもので、プログラマブルコントローラ側に持たせる変数名から割付先アドレス導き出す変換手段を小さなものとすることができ、これにより、この変換手段をプログラマブルコントローラの記憶部に容易に記憶させることができ、一方でモニタ機器側に変数割付テーブル持たせる必要がなくなりモニタ機器を簡素なものとすることができ、さらにはモニタ機器の行うモニタリング動作を高速なものとすることができるプログラマブルコントローラを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、この発明に係るプログラマブルコントローラは、他のプログラミング機器上にてハッシュ関数生成系を用いて生成された実行コードとテーブルであって、変数名からハッシュ値を導き出す所定の関数プログラムの実行コード（変数名ハッシュ関数）と、ハッシュ値からモニタ値の割付先アドレスを導き出すテーブル（割付先アドレス配列）とが記憶部にダウンロードされており、外部から入力された変数名に対して、前記関数プログラムによる評価結果と前記テーブルの参照により割付先アドレスを決定して対応するモニタ値を外部に出力する。
【発明の効果】
【００１４】
従来のプログラマブルコントローラによれば、上述のように、変数割付テーブルが内部に変数名そのものを持っているため、名称の長い変数名が数多く登録される状況において非常に大きな記憶領域を消費することになり、プログラマブルコントローラの記憶部に容易に記憶させることができなかった。しかしながら、この発明に係るプログラマブルコントローラによれば、変数名からモニタ値の割付先アドレスを導き出す変換手段として、変数名からハッシュ値を導き出す関数プログラムの実行コード（変数名ハッシュ関数）と、ハッシュ値からモニタ値の割付先アドレスを導き出すテーブル（割付先アドレス配列）とが記憶部にダウンロードされている。そして、ハッシュ値を導き出すハッシュ関数は、内部に変数名そのものを持たず、関数の入力引数として与えられた文字列を特定の値にマッピングする演算プログラムにすぎないため、そのプログラムの実行コードは、コンパイルの過程に中間生成物として生成された変数割付テーブルと比較して非常に小さくすることができる。そのため、プログラマブルコントローラの記憶部に容易に記憶させることができる。
【００１５】
さらに、この発明に係るプログラマブルコントローラによれば、ハッシュ値を導き出すハッシュ関数は比較的単純な演算プログラムで構成されており、変数割付テーブルから目的の変数名を見つけ出す目的で従来使用されていた線形検索アルゴリズム、或いは二分木探索アルゴリズムを用いた検索プログラムと比較して、高速に実行することができる。これにより、モニタ機器の行うモニタリング動作を高速なものとすることができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明にかかるプログラマブルコントローラの実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１７】
実施の形態
図１はこの発明に係る実施の形態のプログラマブルコントローラとその周辺機器の構成を示す模式図である。図１において、プログラマブルコントローラ３００は、図示しない記憶部に、ＰＬＣ実行コード１０２と、請求項にて言う関数プログラムの実行コードである変数名ハッシュ関数１０３と、同じく請求項にて言うテーブルである割付先アドレス配列１０４とを記憶している。このＰＬＣ実行コード１０２、変数名ハッシュ関数１０３および割付先アドレス配列１０４は、例えばパソコン等の他のプログラミング機器１００にて生成されたものがプログラマブルコントローラ３００にダウンロードされたものである。プログラマブルコントローラ３００は、これらの実行コード（ロードモジュール）を実行することによりモニタ機器２００から入力された変数名に対して対応するモニタ値を出力する。
【００１８】
本実施の形態のプログラミング機器１００には、例えば国際規格ＩＣＥ６１１３１−３で定義されているストラクチャード・テキスト言語（ＳＴ言語）のような高級プログラミング言語にて記載されたＰＬＣソースコード１０１が記憶されている。そして、このＰＬＣソースコード１０１をＰＬＣ実行コード生成系（コンパイラ）１１０を用いてコンパイルすることによりＰＬＣ実行コード１０２が生成される。
【００１９】
変数割付テーブル１３０は、ＰＬＣソースコード１０１コンパイルの過程にて中間生成物としてコンパイラが生成するテーブルであり、コンパイル中にＰＬＣソースコード１０１上の変数名を拾いながら新規に見つかったものが逐次登録される。そして、登録された変数名に対してプログラマブルコントローラ３００のデータメモリ上の空き領域から順次必要な領域が割り当てられ、そのメモリアドレスが記録される。この変数割付テーブル１３０は、変数名からモニタ値の割付先アドレスを導き出す対応表となる。この変数割付テーブル１３０には、例えば、変数名と割付先アドレスとが以下のように記載されている。
【００２０】
変数名        割付先アドレス
VAR1              D0020
PUMP_STATUS       D1234
：                ：
【００２１】
最小完全ハッシュ関数生成系１２０は、変数割付テーブル１３０に登録された変数名を入力とする最小完全ハッシュ関数１０３（以下、変数名ハッシュ関数１０３と呼ぶ）を生成する。この変数名ハッシュ関数１０３は、総数Ｎ個の変数名のキーから衝突しない０〜Ｎ−１の値（ハッシュ値）を導き出す。本実施の形態においては、最小完全ハッシュ関数生成系１２０として、最小完全ハッシュ関数のテーブル生成ユーティリティである“ＧＮＵ  ｇｐｅｒｆ”を用いている。最小完全ハッシュ関数生成系１２０は、さらにまた、変数割付テーブル１３０と変数名ハッシュ関数１０３とから、割付先アドレス配列１０４も生成する。この割付先アドレス配列１０４は、変数名ハッシュ関数１０３のハッシュ値を配列インデックスとするモニタ値の割付先アドレス配列である。
【００２２】
プログラマブルコントローラ３００は、従来技術においても有していたＰＬＣ実行制御系３１０および周辺サービス処理系３３０のほかに、ハッシュ関数評価系３２０を有している。そして、プログラマブルコントローラ３００は、上述のように、プログラミング機器１００から、ＰＬＣ実行コード１０２、変数名ハッシュ関数１０３および割付先アドレス配列１０４を組にして図示しない記憶部にダウンロードされている。
【００２３】
プログラマブルコントローラ３００をモニタするモニタ機器２００は、例えばシリアル（RS232、RS422、USB）、もしくはイーサネット（登録商標）にてプログラマブルコントローラ３００と接続可能とされている。モニタ機器２００はＰＬＣ通信系２１０を有しており、このＰＬＣ通信系２１０は、オペレータが入力したモニタ対象の変数名２０１を取り込み、この変数名２０１をそのまま出力することで、プログラマブルコントローラ３００の周辺サービス処理系３３０にモニタ値の問い合わせをする。例えば、以下のように問い合わせをする。
【００２４】
“VAR1”？
“PUMP_STATUS”？
【００２５】
そして、プログラマブルコントローラ３００の周辺サービス処理系３３０から対応する変数モニタ値２０２を得る。一方、周辺サービス処理系３３０は、まず受け取った変数名をハッシュ関数評価系３２０に渡し、次にハッシュ関数評価系３２０は、変数名ハッシュ関数１０３を使って変数名からハッシュ値を導き出し、さらに割付先アドレス配列１０４を使ってハッシュ値からモニタ値の割付先アドレスを導き出す。そして、周辺サービス処理系３３０は、割付先アドレスに格納されているデータを読み出しモニタ機器２００に変数モニタ値として出力する。
【００２６】
図２はプログラミング機器１００の最小完全ハッシュ関数生成系１２０が行う変数名ハッシュ関数１０３及び割付先アドレス配列１０４の生成過程の動作を示すフローチャートである。図２に沿って変数名ハッシュ関数１０３と割付先アドレス配列１０４とが生成される過程を説明する。変数名ハッシュ関数１０３と割付先アドレス配列１０４の生成が開始されると、まず、変数割付テーブル１３０から変数名一覧が抽出され、これが最小完全ハッシュ関数生成系１２０に与えられて、変数名ハッシュ関数１０３が生成される（ステップＳ１）。
【００２７】
次に、変数名の個数と同じ要素数の割付先アドレス配列１０４が用意され（ステップＳ２）、次いで、この割付先アドレス配列１０４に、変数割付テーブル１３０から変数名とその割付先アドレスとが順次列挙される（ステップＳ３）。さらに、列挙された変数名が変数名ハッシュ関数１０３に与えられて評価（関数の実行）され、ハッシュ値が得られる（ステップＳ４）。そして、得られたハッシュ値を配列インデックス位置とする変数割付先アドレス配列の配列要素に割付先アドレスが格納される（ステップＳ５）。
【００２８】
次いで、変数割付テーブル１３０の全ての変数が列挙されたかが確認され（ステップＳ６）、未だ全ての変数が列挙されていなければ、ステップＳ３に戻り、一方、全ての変数が列挙されていれば、生成終了となる。
【００２９】
図３はプログラマブルコントローラ３００のハッシュ関数評価系３２０が中心となって行う変数名によるモニタ応答の動作を示すフローチャートである。図３に沿って変数名によるモニタ応答の動作を説明する。動作においては、まず、モニタ機器２００からのモニタ対象の変数名を周辺サービス処理系３３０が受信する（ステップＳ１１）。次いで、受信した変数名が、変数名ハッシュ関数に与えられて評価（関数の実行が行われ）され、ハッシュ値が得られる（ステップＳ１２）。そして、得られたハッシュ値を配列インデックス位置とする変数割付先アドレス配列の配列要素から割付先アドレスが取得される（ステップＳ１３）。
【００３０】
次いで、ＰＬＣ実行制御系３１０により、割付先アドレスに位置する値が参照され（ステップＳ１４）、得られた値がモニタ対象の変数値としてモニタ機器２００に応答送信され（ステップＳ１５）、動作終了となる。
【００３１】
このような構成のプログラマブルコントローラ３００においては、例えばパソコン等の他のプログラミング機器１００の環境にて、ハッシュ関数生成系１２０を用いて生成された実行コードとテーブルであって、変数名からハッシュ値を導き出す変数名ハッシュ関数１０３と、ハッシュ値からモニタ値の割付先アドレスを導き出す割付先アドレス配列１０４とが記憶部にダウンロードされており、外部から入力された変数名に対して、変数名ハッシュ関数１０３による評価結果と割付先アドレス配列１０４の参照により割付先アドレスを決定して対応するモニタ値を出力する。
【００３２】
そして、この実施の形態のプログラマブルコントローラ３００によれば、ハッシュ値を導き出すハッシュ関数は、内部に変数名そのものを持たず、関数の入力引数として与えられた文字列を特定の値にマッピングする演算プログラムにすぎないため、そのプログラムの実行コードは、従来の変数割付テーブルと比較して非常に小さくすることができ、プログラマブルコントローラ３００の記憶部に容易に記憶させることができる。
【００３３】
さらに、この実施の形態のプログラマブルコントローラ３００によれば、ハッシュ値を導き出すハッシュ関数は比較的単純な演算プログラムであり、変数割付テーブルから目的の変数名を見つけ出すために従来使用されていた線形検索アルゴリズム、二分木探索アルゴリズムを用いた検索プログラムよりも高速に実行することができ、モニタリング動作を高速なものとすることができる。
【００３４】
また、使用するハッシュ関数が、最小完全ハッシュ関数であるので、対応するハッシュ値が一意に決定されるとともに、変換テーブルを非常に縮小されたものとすることができる。
【００３５】
なお、本実施の形態においては、プログラミング言語として国際規格ＩＣＥ６１１３１−３で定義されているストラクチャード・テキスト言語（ＳＴ言語）のような高級プログラミング言語を用いているが、これに限らず他の言語であってもよい。また、本実施の形態においては、最小完全ハッシュ関数のテーブル生成ユーティリティとして“ＧＮＵ  ｇｐｅｒｆ”を用いているが、他のユーティリティを用いてもよい。
【００３６】
また、本実施の形態の割付先アドレス配列１０４に、誤り検出用のデータとして、例えばチェックサムを付加するようにしてもよい。これにより、容易な方法でデータ取得の信頼性を向上させることができる。
【産業上の利用可能性】
【００３７】
本願発明は、ファクトリーオートメーション（ＦＡ）分野にて用いられるプログラマブルコントローラに適用されて最適なものである。
【図面の簡単な説明】
【００３８】
【図１】この発明に係る実施の形態のプログラマブルコントローラとその周辺機器の構成を示す模式図である。
【図２】変数名ハッシュ関数と割付先アドレス配列との生成の過程を示すフローチャートである。
【図３】変数名によるモニタ応答の動作を示すフローチャートである。
【図４】従来のプログラマブルコントローラとその周辺機器の構成を示す模式図である。
【符号の説明】
【００３９】
１００  プログラミング機器
１０１  ＰＬＣソースコード
１０２  ＰＬＣ実行コード
１０３  変数名ハッシュ関数（関数プログラムの実行コード）
１０４  割付先アドレス配列（テーブル）
１１０  ＰＬＣ実行コード生成系（コンパイラ）
１２０  最小完全ハッシュ関数生成系（ハッシュ関数生成系）
１３０  変数割付テーブル
２００  モニタ機器
２０１  モニタ対象変数名
２０２  変数モニタ値
２１０  ＰＬＣ通信系
３００  プログラマブルコントローラ
３１０  ＰＬＣ実行制御系
３２０  ハッシュ関数評価系
３３０  周辺サービス処理系
【図１】
0004516046.tif 000002
【図２】
0004516046.tif 000003
【図３】
0004516046.tif 000004
【図４】
0004516046.tif 000005