(実施の形態1)
図1に、本実施の形態に係る制御システムのブロック図を示す。図1に示す制御システムでは、エンジニアリングツール10と、プログラマブルロジックコントローラ(PLC)20と、PLCを参照する外部機器30とを備える。
エンジニアリングツール10は、PLC20や外部機器30の通信条件等を設定するツールであり、設定時にPLC20や外部機器30に直接又はネットワーク配線を介して接続する。なお、図1に示すブロック図では、ネットワーク配線を介してエンジニアリングツール10を接続している場合を図示しているが、設定処理終了後は、エンジニアリングツール10を当該ネットワーク配線から切り離しても良い。
エンジニアリングツール10は、連想配列生成部19を備えている。当該連想配列生成部19は、論理名と物理アドレスとの対応情報14における論理名を、連想配列の値計算部13で数値に変換する。連想配列生成部19は、変換された数値と対応情報14とに基づき、論理名をツリー状に割り付けたテーブルである連想配列情報(論理名割付テーブルの連想配列情報)17、及び論理名と連想配列情報の線形リストにおける順番とのセット情報(論理名と線形リスト順番のセット情報)18を生成する。生成した連想配列情報17はPLC20に、生成したセット情報18は外部機器30にそれぞれ書き込まれる。
PLC20は、通信部20bと、制御部20aとを備える。通信部20bは、ネットワーク配線に接続され、外部機器30やエンジニアリングツール10と通信する機能を有している。さらに通信部20bには、所定の通信プロトコルによりデータの送受信を行う通信コントローラ20b2と、送受信するデータを記憶したり、プロトコル変換に利用したり、送受信先を特定する際の情報を記憶したりするRAM20b1とを有している。
制御部20aは、接続された機器を制御する制御プログラムや、ネットワークを介して接続された別の制御システムと協調動作する際の制御プログラムなどが格納されたROM20a1を備える。さらに、制御部20aは、ROM20a1に格納されたプログラムを実行するMPU20a2、及びMPU20a2にて各種処理を実行する際に必要となるデータを記憶するRAM20a3を備えている。
さらに、MPU20a2は、要求メッセージ解析部21と、テーブルID一致判定部22と、連想配列ポインタ移動部23と、物理アドレス値取得部24と、線形リスト順番取得部25と、応答メッセージ生成部26とを備えている。RAM20a3には、エンジニアリングツール10により書き込まれた論理名割付テーブルの連想配列情報17が記憶されている。
図1に示す要求メッセージ解析部21は、外部機器30からの要求メッセージを解析する機能部である。テーブルID一致判定部22は、要求メッセージに含まれるテーブルIDと、論理名割付テーブルの連想配列情報17が持つテーブルIDが一致するかどうかを判定する機能部である。連想配列ポインタ移動部23は、要求メッセージに含まれる情報から、論理名割付テーブルの連想配列情報17のアドレスをポインタで移動する機能部である。物理アドレス値取得部24は、連想配列ポインタ移動部23で移動したポインタの位置にある物理アドレスの値を取得する機能部である。線形リスト順番再取得部25は、要求メッセージに含まれる論理名が、論理名割付テーブルの連想配列情報17における線形リストの何番目と一致するかを判定する機能部である。応答メッセージ生成部26は、テーブルID一致判定部22、物理アドレス値取得部24、線形リスト順番取得部25から渡された情報から応答メッセージを生成する機能部である。
外部機器30は、PLC20を動作させたり、PLC20の状態をモニタしたりする機器であり、通信部30bと制御部30aとを備えている。
通信部30bは、通信部20bと同様、通信コントローラ30b2と、RAM30b1とを備えている。制御部30aは、制御部20aと同様、ROM30a1と、MPU30a2と、RAM30a3とを備えている。
MPU30a2は、応答メッセージ解析部31と、連想配列の値計算部33と、線形リスト順番取得部35と、要求メッセージ生成部36とを備えている。RAM30a3には、エンジニアリングツール10により書き込まれた論理名と線形リスト順番のセット情報18が記憶されている。
図1に示す応答メッセージ解析部31は、PLC20からの応答メッセージを解析する機能部である。連想配列の値計算部33は、論理名を数値へ変換する機能部である。線形リスト順番取得部35は、論理名と線形リスト順番のセット情報18から、論理名に対応する線形リスト順番を取得する機能部である。要求メッセージ生成部36は、連想配列の値計算部33、線形リスト順番取得部35から渡された情報から要求メッセージを生成する機能部である。
なお、外部機器30は、例えば表示器でも良いし、PLC20とは別のPLCでも良いし、エンジニアリングツール10でも良い。
次に、本実施の形態に係る制御システムの動作について説明する。まず、エンジニアリングツール10によるPLC20及び外部機器30の初期設定について説明する。
エンジニアリングツールは、図2に示す論理名と物理アドレスとの対応情報14を構成するが、検索の速度を早くするため、当該対応情報14を論理名割付テーブルの連想配列情報17及び論理名と線形リスト順番のセット情報18に変換する。論理名割付テーブルの連想配列情報17及び論理名と線形リスト順番のセット情報18は、エンジニアリングツール10の連想配列生成部19によって生成される。
具体的に、論理名割付テーブルの連想配列情報17及び論理名と線形リスト順番のセット情報18の生成を説明する。まず、連想配列生成部19に設けられた連想配列の値計算部13が、図2に示す論理名を所定の基準に基づき数値に変換する。任意の論理名を数値化する基準は、同じ論理名から必ず同じ数値が計算される基準であれば良い。例えば、各論理名の一文字目の文字コードでも良いし、論理名の各文字の文字コードの足し合わせでも良いし、それより複雑な計算を行っても良い。本実施の形態では、論理名の最後の文字をUTF−16でエンコードしたときの文字コードを5で割った余りを、論理名を変換した数値とする。
図2に示す論理名を具体的に数値に変換すると、論理名「異常信号」の最後の文字は「号」で、「号」をUTF−16でエンコードしたときの文字コードは0x53f7=21495であるので、21495を5で割った余りは0となる。論理名「停止信号」も同様に0となる。
論理名「ランプA」の最後の文字は「A」で、「A」をUTF−16でエンコードしたときの文字コードは0x41=65であるので、65を5で割った余りは0となる。論理名「ランプB」の最後の文字は「B」で、「B」をUTF−16でエンコードしたときの文字コードは0x42=66であるので、66を5で割った余りは1となる。論理名「ランプC」の最後の文字は「C」で、「C」をUTF−16でエンコードしたときの文字コードは0x43=67となるので、67を5で割った余りは2となる。
論理名「生産台数」の最後の文字は「数」で、「数」をUTF−16でエンコードしたときの文字コードは0x6570=25968となるので、25968を5で割った余りは3となる。論理名「出荷台数」も同様に3となる。
論理名「カウンタ値」の最後の文字は「値」で、「値」をUTF−16でエンコードしたときの文字コードは0x5024=20516となるので、20516を5で割った余りは1となる。論理名「現在時刻」の最後の文字は「刻」で、「刻」をUTF−16でエンコードしたときの文字コードは0x523B=21051となるので、21051を5で割った余りは1となる。
そのため、連想配列の値計算部13は、「異常信号」は0に、「停止信号」は0に、「ランプA」は0に、「ランプB」は1に、「ランプC」は2に、「生産台数」は3に、「出荷台数」は3に、「カウンタ値」は1に、「現在時刻」は1にそれぞれ変換する。
次に、連想配列生成部19は、連想配列の値計算部13で変換した数値に基づき連想配列を生成する。図3に、本実施の形態に係る連想配列生成部19が生成した連想配列(論理名割付テーブルの連想配列情報17)を示す。図2に示す連想配列(論理名割付テーブルの連想配列情報17)は、連想配列の値計算部13で変換された数値に基づいて行を決め、図2に示す上からの順番に基づいて論理名を線形リストに繋いで形成されている。つまり、違う論理名であっても連想配列の値計算部13により同じ数値となった場合は、図2に示す上からの順番(計算処理した順番)に基づき線形状となるように後ろ側(図中右側)に接続される。例えば、「ランプB」と「カウンタ値」と「現在時刻」を連想配列の値計算部13で数値に変換するといずれも1になる。そのため、図3に示す連想配列では、これらの論理名は1の行に配列されることになり、且つ計算処理した順番に基づき「ランプB」を1番目、「カウンタ値」を2番目、「現在時刻」を3番目となるように線形にリストする。
また、図3に示すように、論理名割付テーブルの連想配列情報17には、テーブルIDが付与されている。論理名割付テーブルの連想配列情報17は、線形リスト中の論理名の順番がどれか1つでも変更になった場合、テーブルIDが更新される。
エンジニアリングツール10は、図3のように作成した論理名割付テーブルの連想配列情報17をPLC20のRAM20a3に書き込む。また、エンジニアリングツールは、論理名と、対応する論理名の線形リストにおける順番とのセット情報18を外部機器30のRAM30a3に書き込む。図4に、外部機器30に書き込まれた論理名と線形リスト順番のセット情報18の例を示す。この論理名と線形リスト順番のセット情報18にも、論理名及び線形リスト順番の他に、図3に示す論理名割付テーブルの連想配列情報17のテーブルIDと同じテーブルIDが付与されている。なお、エンジニアリングツール10が作成した段階では、テーブルIDが全て同じになっている。以上の動作が、エンジニアリングツール10による初期設定である。
次に、外部機器30が、論理名に対応するPLC20の物理アドレスの値をモニタする方法を説明する。ここでは、論理名が「出荷台数」及び「現在時刻」の値をそれぞれモニタする例について説明する。
まず、外部機器30の連想配列の値計算部33が、取得したい論理名を数値に変換する。連想配列の値計算部33の動作は、エンジニアリングツール10の連想配列の値計算部13と同じ基準に基づいて全く同じ動作をする。ここでは、「出荷台数」を数値に変換すると3、「現在時刻」を数値に変換すると1になる。連想配列の値計算部33は、変換された数値を要求メッセージ生成部36へ渡す。
また、線形リスト順番取得部35は、論理名と線形リスト順番のセット情報18から、テーブルIDと、論理名に対応する線形リストにおける順番を取得する。図4に示す例では、テーブルIDは0001、「出荷台数」の線形リスト順番は2、「現在時刻」の線形リスト順番は3である。線形リスト順番取得部35は、取得したテーブルIDと線形リスト順番とを要求メッセージ生成部36へ渡す。
要求メッセージ生成部36は、連想配列の値計算部33から渡された情報と、線形リスト順番取得部35から渡された情報とに基づいて、PLC20に送信する要求メッセージを生成する。要求メッセージは、論理名による物理アドレスの値取得であるというメッセージの種別と、テーブルID「0001」、「出荷台数」の論理名を変換した数値「3」、「出荷台数」の線形リスト順番「2」、「現在時刻」の論理名が変換された数値「1」、「現在時刻」の線形リスト順番「3」を含んでいる。要求メッセージ生成部36は、生成した要求メッセージを通信部30bを介してネットワーク経由でPLC20へ送信する。
次に、外部機器30から要求メッセージを受け取るPLC20の動作を説明する。まず、要求メッセージ解析部21は、外部機器30からの要求メッセージを受信する。要求メッセージの種別が論理名による物理アドレスの値取得である場合、要求メッセージに含まれるメッセージの種別以外の情報をテーブルID一致判定部22へ渡す。
テーブルID一致判定部22は、要求メッセージに含まれるテーブルIDと、RAM20a3に記憶されている論理名割付テーブルの連想配列情報17が持つテーブルIDとを比較する。本実施の形態の例では、要求メッセージに含まれるテーブルIDが0001、論理名割付テーブルの連想配列情報17が持つテーブルIDが0001であるので両者が一致する。この場合、テーブルID一致判定部22は、要求メッセージに含まれるメッセージの種別とテーブルID以外の情報を連想配列ポインタ移動部23へ渡す。
連想配列ポインタ移動部23は、要求メッセージに含まれる、論理名を変換した数値と線形リスト順番の情報とから、論理名割付テーブルの連想配列情報17におけるポインタを移動させる。図3に示す論理名割付テーブルの連想配列情報17では行数や論理名の前にポインタの位置を示す空欄が模式的に図示されている。この欄を用いてポインタの移動を説明する。図5では、「出荷台数」に対応する物理アドレスを取得する方法を示している。まず、「出荷台数」が変換された数値は3であるから、連想配列ポインタ移動部23は、論理名割付テーブルの連想配列情報17の0行目から3行目の先頭にポインタを移動させ、図5に示すIの位置となる。次に、「出荷台数」の線形リスト順番が2であることから、連想配列ポインタ移動部23は、論理名割付テーブルの連想配列情報17の3行目の先頭から、右に2つポインタを移動させ、図5に示すIIの位置となる。
図5に示すIIの位置には、「出荷台数」の物理アドレスとしてD4という情報が格納されている。そして、連想配列ポインタ移動部23で移動させたポインタに対応する物理アドレスを物理アドレス値取得部24において取得する。これにより、本実施の形態に係る制御システムでは、文字列比較なしに「出荷台数」に対応する物理アドレスであるD4を取得できる。なお、「現在時刻」の物理アドレスについても同様に処理してD12の物理アドレスを取得できる。
物理アドレス値取得部24は、「出荷台数」に対応する物理アドレスD4、また「現在時刻」に対応するD12の値を取得し、応答メッセージ生成部26へ渡す。
応答メッセージ生成部26は、物理アドレス値取得部24から渡された情報から応答メッセージを生成する。応答メッセージは、論理名による物理アドレスの値取得であるというメッセージの種別と、「出荷台数」に対応する物理アドレスD4の値と、「現在時刻」に対応するD12の値とを含む。応答メッセージ生成部26は、生成した応答メッセージを通信部20bを介してネットワーク経由で外部機器30へ送信する。
外部機器30では、送信された応答メッセージを受信し、応答メッセージ解析部31で当該応答メッセージの解析を行う。応答メッセージ解析部31は、応答メッセージの種別が論理名による物理アドレスの値取得であり、且つエラーコードが含まれていないと判断した場合、要求メッセージで送信した論理名に対応する物理アドレスの値が応答メッセージに含まれているとして当該物理アドレスの値を取得する。
次に、エンジニアリングツール10において、論理名と物理アドレスとの対応情報14が変更された場合の制御システムの動作について説明する。まず、論理名と物理アドレスとの対応情報14において、論理名に対応する物理アドレスのみが変更された場合について説明する。
図6に示す論理名と物理アドレスとの対応情報14は、初期設定である図2に示す論理名と物理アドレスとの対応情報14から「現在時刻」に対応する物理アドレスがD12からD16に変更されている例を示している。しかし、この図6に示す論理名と物理アドレスとの対応情報14を連想配列生成部19で処理して論理名割付テーブルの連想配列情報17を再生成した場合でも、「現在時刻」に対応する線形リスト順番に変更が生じないので、テーブルIDは変更されない。従って、論理名による物理アドレス値の取得手順は、図2に示す論理名と物理アドレスとの対応情報14に対して行った上記の取得手順から全く変更はなく、「現在時刻」に対応する物理アドレスD16を取得できる。
次に、論理名と物理アドレスとの対応情報14において、新たに論理名が追加されたり、論理名を削除した場合について説明する。図7に示す論理名と物理アドレスとの対応情報14は、初期設定である図2に示す論理名と物理アドレスとの対応情報14から「カウンタ値」が削除され、「再開信号」が追加された例を示している。この図7に示す論理名と物理アドレスとの対応情報14を連想配列生成部19で処理すると、図8に示す論理名割付テーブルの連想配列情報17が再生成される。図8に示す論理名割付テーブルの連想配列情報17では、「現在時刻」に関しては線形リスト順番が2番目に変化しているので、テーブルIDを0002に変化させている。
PLC20の論理名割付テーブルの連想配列情報17のみテーブルIDを0002に更新された場合における、論理名による物理アドレス値の取得手順を説明する。なお、論理名による物理アドレスの値取得手順は、PLC20の要求メッセージ解析部21における処理までは上記と同じ取得手順である。
次に、テーブルID一致判定部22は、要求メッセージに含まれるテーブルIDと、論理名割付テーブルの連想配列情報17が持つテーブルIDとを比較する。図8に示す例では、要求メッセージに含まれるテーブルIDが0001で、論理名割付テーブルの連想配列情報17が持つテーブルIDが0002となるので両者が一致しない。そのため、テーブルID一致判定部22は、テーブルIDが一致しなかったという情報を直ちに応答メッセージ生成部26へ渡す。
応答メッセージ生成部26は、テーブルID一致判定部22から渡された情報に基づき応答メッセージを生成する。応答メッセージは、論理名による物理アドレスの値取得であるというメッセージの種別と、テーブルIDが一致しなかったことを示すエラーコードとが含まれている。応答メッセージ生成部26は、この応答メッセージを通信部20bを介してネットワーク経由で外部機器30へ送信する。
外部機器30の応答メッセージ解析部31は、PLC20からの応答メッセージを受信する。受信した応答メッセージに含まれるメッセージの種別が論理名による物理アドレスの値取得であり、且つテーブルIDが一致しなかったことを示すエラーコードを含む場合、テーブルIDが一致しなかったという情報が直ちに連想配列の値計算部33に渡される。
連想配列の値計算部33は、値を取得したい物理アドレスに対応する論理名を再び数値に変換する。ここで、過去に変換した論理名の数値を記憶しておいても良い。連想配列の値計算部33は、論理名と論理名を変換した数値とを要求メッセージ生成部36へ渡す。
要求メッセージ生成部36は、連想配列の値計算部33から渡された情報に基づき要求メッセージを作成する。生成する要求メッセージには、線形リスト順番の再取得であるというメッセージの種別と、論理名「出荷台数」と、「出荷台数」が変換された数値「3」と、論理名「現在時刻」と、「現在時刻」が変換された数値「1」とを含む。要求メッセージ生成部36は、当該要求メッセージを通信部30bを介してネットワーク経由でPLC20へ送信する。
要求メッセージ解析部21では、受信した外部機器30からの要求メッセージを解析し、メッセージの種別が線形リストの再取得である場合、要求メッセージに含まれるメッセージの種別以外の情報を線形リスト順番再取得部25へ渡す。
線形リスト順番再取得部25は、値を取得したい物理アドレスに対応する論理名が最新の連想配列の線形リストにおいて何番目なのかを、論理名割付テーブルの連想配列情報17を用いて取得する。図9に示す論理名割付テーブルの連想配列情報17を用いて、具体的に論理名「現在時刻」の線形リスト順番を再取得する方法を説明する。まず、「現在時刻」が変換された数値は1であるから、線形リスト順番再取得部25は、論理名割付テーブルの連想配列情報17の0行目から1行目の先頭にポインタを移動させ、図9に示すIの位置となる。次に、要求メッセージに含まれる論理名と、同じ行の線形リストに含まれる論理名とを順番に文字列比較する。図9にIIの位置では、要求メッセージに含まれる論理名が「現在時刻」で、線形リストに含まれる論理名が「ランプB」であるので、線形リストの1番目は論理名が一致しないと判断される。図9に示すIIIの位置では、要求メッセージに含まれる論理名が「現在時刻」で、線形リストの含まれる論理名も「現在時刻」であるので、線形リストの2番目は論理名が一致する。すなわち、「現在時刻」の線形リスト順番が2であることが判る。線形リスト順番再取得部25は、同様に「出荷台数」も処理する。
線形リスト順番再取得部25は、論理名割付テーブルの連想配列情報17が持つテーブルIDの0002と、「出荷台数」の線形リスト順番である2と、「現在時刻」の線形リスト順番である2とを応答メッセージ生成部26へ渡す。
応答メッセージ生成部26は、線形リスト順番再取得部25から渡された情報に基づき応答メッセージを作成する。生成した応答メッセージは、線形リストの再取得であるというメッセージの種別と、テーブルIDの0002と、「出荷台数」の線形リスト順番「2」と、「現在時刻」の線形リスト順番「2」とを含む。応答メッセージ生成部26は、当該応答メッセージを通信部20bを介して外部機器30へ送信する。
外部機器30の応答メッセージ解析部31は、受信した応答メッセージを解析する。受信した応答メッセージに含まれるメッセージの種別が線形リストの再取得である場合、応答メッセージ解析部31は、受信した応答メッセージに含まれるメッセージの種別以外の情報を、論理名と線形リスト順番のセット情報18へ反映させる。反映させる項目は、テーブルIDと、再取得した線形リスト順番である。図10に、受信した応答メッセージの内容を反映させた後の論理名と線形リスト順番のセット情報18を示す。ここで、図10に示す論理名と線形リスト順番のセット情報18では、線形リスト順番を再取得しなかった論理名に対しては、線形リスト順番の変更が未定のため、空欄にしている。以上の動作により、再び論理名による物理アドレスの値取得が可能となる。
また、外部機器30が、何らかの理由でエンジニアリングツール10と通信できず、論理名と線形リスト順番のセット情報18においてテーブルIDや線形リスト順番が初期段階で空欄であっても、線形リスト順番の再取得を実行することにより、論理名による物理アドレスの値の取得も可能となる。
以上説明した、実施の形態に係る制御システムの動作を図11のフローチャートに示す。図11に示すフローチャートでは、まずステップS1で論理名と線形リスト順番のセット情報18に、必要とする論理名の線形リスト順番が存在するかを判定する。ステップS1で線形リスト順番が存在すればステップS2に進み、存在しなければステップS3に進む。次に、ステップS2では、テーブルID一致判定部22で要求メッセージに含まれるテーブルIDと、論理名割付テーブルの連想配列情報17が持つテーブルIDとを比較する。
テーブルIDが一致すればステップS4に進み、存在しなければステップS3に進む。ステップS3では、上記で示した方法で線形リスト順番の再取得を行う。ステップS3で線形リスト順番の再取得した後は、ステップS5に進む。ステップS5では、論理名と線形リスト順番のセット情報18に対して再取得した線形リスト順番及びテーブルIDを更新する。ステップS5での更新後、ステップS2に戻る。ステップS4では、上記で示した方法で物理アドレスを取得し、処理が終了する。
以上のように、本実施の形態に係る制御システムは、要求メッセージに、論理名ではなく論理名を変換した数値と、連想配列の線形リストの順番を含ませることにより、通信のサイズを削減することができる。
また、論理名割付テーブルの連想配列情報17でのポインタ移動により、文字列比較なしに論理名に対応する物理アドレスを取得することができるので、論理名を数値に変換する時間を削減することができる。
また、テーブルID一致判定部22、線形リスト順番再取得部25を設けたことにより、ある論理名に対する連想配列の線形リストの順番に変化があった場合でも、それらを自動的に再取得できる。
(実施の形態2)
実施の形態1に係る制御システムでは、論理名割付テーブルの連想配列情報17全体を1つのテーブルIDで管理していた。しかし、論理名割付テーブルの連想配列情報17全体を1つとして管理するだけでなく、論理名と物理アドレスとの対応それぞれにバージョンをつけて管理しても良い。
図12に、本実施の形態に係る制御システムの構成を示すブロック図である。図12に示す制御システムの構成は、図1に示す構成に比べて、PLC20に論理名バージョン一致判定部29を追加した構成である。この論理名バージョン一致判定部29は、要求メッセージに含まれる論理名のバージョンと、対応する論理名割付テーブルの連想配列情報17に含まれるこの論理名のバージョンが一致するかどうかを判定する機能部である。
次に、本実施の形態に係る制御システムの動作について説明する。まず、エンジニアリングツール10によるPLC20と外部機器30への初期設定について説明する。論理名と物理アドレスとが対応する線形リストである連想配列(論理名割付テーブルの連想配列情報17)は、エンジニアリングツール10の連想配列生成部19によって作成される。まず、連想配列生成部19に含まれる連想配列の値計算部13は、図2の順番に論理名を数値に変換し、連想配列生成部19によって論理名割付テーブルの連想配列情報17が生成される。図13に、エンジニアリングツール10で作成した論理名割付テーブルの連想配列情報17の例を示す。
また、論理名割付テーブルの連想配列情報17にはテーブルIDが付与(図13の例では0001)されており、さらに、論理名と物理アドレスとの対応のそれぞれにはバージョンが付与されている。そして、本実施の形態に係る制御システムでは、論理名に対応する線形リスト順番が変更になった場合、変更があった論理名のバージョンを更新し、テーブルIDも更新する。
エンジニアリングツール10は、作成した論理名割付テーブルの連想配列情報17をPLC20に書き込む。書き込まれる論理名割付テーブルの連想配列情報17は、図13と同じである。
また、エンジニアリングツール10は、論理名と、その論理名が連想配列の線形リストにおいて何番目なのかと、バージョンと、そのバージョンが最新か否かの情報とを含む論理名と線形リスト順番のセット情報18として外部機器30に書き込む。図14に、外部機器30に書き込まれた論理名と線形リスト順番のセット情報18の例を示す。図14に示す論理名と線形リスト順番のセット情報18は、論理名、線形リスト順番、バージョン、バージョンが最新か否かのフラグ、及びテーブルIDで構成されている。初期設定の段階では、エンジニアリングツール10、PLC20、外部機器30がそれぞれ持つテーブルIDと、PLC20、外部機器30がそれぞれ持つ各論理名のバージョンは全て同じである。
次に、本実施の形態に係る外部機器30が、論理名に対応する物理アドレスの値を取得する方法を説明する。ここでは、「出荷台数」と「現在時刻」の値をそれぞれ取得する例を説明する。
外部装置30の連想配列の値計算部33までの動作は、実施の形態1と全く同様である。次に、線形リスト順番取得部35は、図14に示す論理名と線形リスト順番のセット情報18から、テーブルIDと、論理名に対応する連想配列の線形リストでの順番と、バージョンを取得する。具体的にテーブルIDは0001、「出荷台数」の線形リスト順番は2、「出荷台数」のバージョンは01、「現在時刻」の線形リスト順番は3、「現在時刻」のバージョンは01である。線形リスト順番取得部35は、取得したテーブルIDと線形リスト順番とバージョンを要求メッセージ生成部36へ渡す。
要求メッセージ生成部36は、連想配列の値計算部33から渡された情報と、線形リスト順番取得部35から渡された情報とから、要求メッセージを生成する。要求メッセージは、論理名による物理アドレスの値取得であるというメッセージの種別、テーブルID「0001」、「出荷台数」が変換された数値「3」、「出荷台数」の線形リスト順番「2」、「出荷台数」のバージョン「01」、「現在時刻」が変換された数値「1」、「現在時刻」の線形リスト順番「3」、「現在時刻」のバージョン「01」を含む。要求メッセージ生成部36は、生成した要求メッセージを通信部30bを介してネットワーク経由でPLC20へ送信する。
PLC20の要求メッセージ解析部21は、受信した外部機器30からの要求メッセージを解析する。要求メッセージの種別が論理名による物理アドレスの値取得である場合、要求メッセージ解析部21は、要求メッセージに含まれるメッセージの種別以外の情報をテーブルID一致判定部22へ渡す。
テーブルID一致判定部22は、要求メッセージに含まれるテーブルIDと、論理名割付テーブルの連想配列情報17が持つテーブルIDとを比較する。図13に示す例では、要求メッセージに含まれるテーブルIDが0001で、論理名割付テーブルの連想配列情報17が持つテーブルIDも0001であるので両者が一致している。この場合、要求メッセージに含まれるメッセージの種別、テーブルID及びバージョン以外の情報を連想配列ポインタ移動部23へ渡す。連想配列ポインタ移動部23以降の動作は、実施の形態1と全く同じである。
次に、エンジニアリングツール10によって論理名と物理アドレスとの対応情報14が変更された場合の動作について説明する。まず、論理名に対応する物理アドレスのみが変更された場合は、実施の形態1と同じである。次に、論理名そのものが追加されたり削除されたりした場合を説明する。図7に示す論理名と物理アドレスとの対応情報14は、初期設定の図2に示す論理名と物理アドレスとの対応情報14から「カウンタ値」が削除され、「再開信号」が追加された例を示している。図7に示す論理名と物理アドレスとの対応情報14に基づいて、連想配列生成部19が再生成された論理名割付テーブルの連想配列情報17を図15に示す。図15に示す論理名割付テーブルの連想配列情報17では、「現在時刻」に関しては線形リスト順番が2番目に変化しているのでバージョンを02にしている。そのため、テーブルIDも0002に変化している。
この論理名割付テーブルの連想配列情報17が、PLC20の論理名割付テーブルの連想配列情報17のみに反映された場合の、論理名による物理アドレス値の取得の手順を説明する。
「出荷台数」と「停止信号」との物理アドレスの値をモニタする場合を説明する。なお、要求メッセージ解析部21までの処理手順は、実施の形態1と同じ処理手順である。次に、テーブルID一致判定部22は、要求メッセージに含まれるテーブルIDと、論理名割付テーブルの連想配列情報17が持つテーブルIDとを比較する。図15に示す例では、要求メッセージに含まれるテーブルIDが0001、論理名割付テーブルの連想配列情報17が持つテーブルIDが0002となり、両者が一致しない。この場合、テーブルID一致判定部22は、要求メッセージからメッセージの種別とテーブルID以外の情報を論理名バージョン一致判定部29へ渡す。
論理名バージョン一致判定部29は、要求メッセージに含まれる論理名のバージョンと、論理名割付テーブルの連想配列情報17の論理名のバージョンとを順番に比較する。まず、要求メッセージに含まれる「出荷台数」のバージョンは01で、論理名割付テーブルの連想配列情報17の「出荷台数」のバージョンが01であるので、両者は一致する。次に、要求メッセージに含まれる「停止信号」のバージョンは01で、論理名割付テーブルの連想配列情報17に含まれる「停止信号」のバージョンが01であるので、両者は一致する。全ての論理名のバージョンが一致した場合、論理名バージョン一致判定部29は、要求メッセージに含まれるメッセージの種別、テーブルID、バージョンの情報以外を連想配列ポインタ移動部23へ渡す。
連想配列ポインタ移動部23及び物理アドレス値取得部24の動作は、実施の形態1と同じ処理手順である。
応答メッセージ生成部26は、物理アドレス値取得部24から渡された情報から応答メッセージを生成する。応答メッセージは、論理名による物理アドレスの値取得であるというメッセージの種別と、論理名のバージョンは全て一致したがテーブルIDは一致しなかったというエラーコードと、論理名割付テーブルの連想配列情報17が持つテーブルID0002、「出荷台数」に対応する物理アドレスD4の値と、「停止信号」に対応する物理アドレスM20の値とを含む。応答メッセージ生成部26は、生成した応答メッセージを通信部20bを介してネットワーク経由で外部機器30へ送信する。
外部機器30では、送信された応答メッセージを受信し、応答メッセージ解析部31で当該応答メッセージの解析を行う。応答メッセージ解析部31は、応答メッセージの種別が論理名による物理アドレスの値取得であり、且つ論理名のバージョンは全て一致したがテーブルIDは一致しかなったというエラーコードが含まれていると判断した場合、要求メッセージで送信した論理名に対応する物理アドレスの値が応答メッセージに含まれているとして当該物理アドレスの値を取得する。
また応答メッセージ解析部31は、応答メッセージに含まれるテーブルIDを論理名と線形リスト順番のセット情報18へ反映する。図16に、反映後の論理名と線形リスト順番のセット18を示す。ここで、新しいテーブルIDは0002となり、少なくとも「出荷台数」及び「停止信号」のバージョンが最新であることが保証されているため、バージョンが最新であるか否かのフラグが「出荷台数」及び「停止信号」に立てられている。他の論理名に対しては、バージョンそのものについてはそのまま残し、バージョンが最新であるというフラグを消している。以上の動作により、論理名による物理アドレスの値の再取得が実現できる。
次に、「出荷台数」と「現在時刻」との物理アドレスの値をモニタする場合を説明する。なお、連想配列ポインタ移動部23までの処理手順は、上記で説明した本実施の形態での処理手順と同じである。
論理名バージョン一致判定部29は、要求メッセージに含まれる論理名のバージョンと、図15に示す論理名割付テーブルの連想配列情報17の論理名のバージョンを順番に比較する。まず、要求メッセージに含まれる「出荷台数」のバージョンは01で、論理名割付テーブルの連想配列情報17の「出荷台数」のバージョンが01であるため、両者は一致する。次に、要求メッセージに含まれる「現在時刻」のバージョンは01で、論理名割付テーブルの連想配列情報17に含まれる「現在時刻」のバージョンが02であるので、両者は一致しない。バージョンの一致しない論理名があった場合、論理名バージョン一致判定部29は、要求メッセージに含まれるメッセージの種別、テーブルID、バージョンの情報以外を応答メッセージ生成部へ渡す。
応答メッセージ生成部26は、論理名バージョン一致判定部29から渡された情報に基づき応答メッセージを生成する。生成した応答メッセージは、論理名による物理アドレスの値取得であるというメッセージの種別と、一部の論理名のバージョンが一致しなかったことを示すエラーコードと、どの論理名のバージョンが一致しなかったかを示す情報を含む。応答メッセージ生成部26は、この応答メッセージを通信部20bを介してネットワーク経由で外部機器30へ送信する。
外部機器30の応答メッセージ解析部31は、受信した応答メッセージを解析する。応答メッセージ解析部31は、応答メッセージに含まれるメッセージの種別が論理名による物理アドレスの値取得であり、且つ一部の論理名のバージョンが一致しなかったことを示すエラーコードを含む場合、一部の論理名のバージョンが一致しなかったという情報と、バージョンが一致しなかった論理名の情報とを連想配列の値計算部33へ渡す。
連想配列の値計算部33は、バージョンが一致しなかった論理名を再び数値に変換する。上記の例で、バージョンが一致しなかった論理名は「現在時刻」である。ここで、過去に変換した論理名の数値を記憶しておいても良い。連想配列の値計算部33は、論理名そのものと論理名を変換した数値とを要求メッセージ生成部36へ渡す。
要求メッセージ生成部36は、連想配列の値計算部33から渡された情報に基づき要求メッセージを作成する。生成した要求メッセージは、線形リスト順番の再取得であるというメッセージの種別、「現在時刻」、「現在時刻」が変換された数値「1」を含む。要求メッセージ生成部36は、当該要求メッセージを通信部30bを介してネットワーク経由でPLC20へ送信する。
要求メッセージ解析部21は、外部機器30から受信した要求メッセージを解析する。要求メッセージに含まれるメッセージの種別が線形リストの再取得である場合、要求メッセージ解析部21は、要求メッセージに含まれるメッセージの種別以外の情報を線形リスト順番再取得部25へ渡す。
線形リスト順番再取得部25は、値を取得したい物理アドレスに対応する論理名が、最新の連想配列の線形リストにおいて何番目なのかを、論理名割付テーブルの連想配列情報17を用いて取得する。この処理手順は実施の形態1と同じであり、「現在時刻」の線形リスト順番が2と取得される。同時に、バージョンも02と取得される。線形リスト順番再取得部25は、論理名割付テーブルの連想配列情報17が持つテーブルID、「現在時刻」の線形リスト順番、「現在時刻」のバージョンを、応答メッセージ生成部26へ渡す。
応答メッセージ生成部26は、線形リスト順番再取得部25から渡された情報に基づき応答メッセージを作成する。生成した応答メッセージは、線形リストの再取得であるというメッセージの種別、テーブルIDである0002、「現在時刻」の線形リスト順番「2」、「現在時刻」のバージョン02を含む。応答メッセージ生成部26は、当該応答メッセージを、通信部20bを介してネットワーク経由で外部機器30へ送信する。
応答メッセージ解析部31は、受信した応答メッセージを解析する。応答メッセージに含まれるメッセージの種別が線形リストの再取得である場合、応答メッセージ解析部31は応答メッセージに含まれるメッセージの種別以外の情報を論理名と線形リスト順番のセット情報18へ反映する。論理名と線形リスト順番のセット情報18において反映させる項目は、テーブルIDと、再取得した線形リスト順番と、再取得したバージョンとである。図17に、反映後の論理名と線形リスト順番のセット18を示す。ここで、新しいテーブルIDは0002となり、少なくとも「出荷台数」及び「現在時刻」のバージョンが最新であることが保証されているため、バージョンが最新であるか否かのフラグが「出荷台数」及び「現在時刻」に立てられている。他の論理名に対しては、バージョンそのものについてはそのまま残し、バージョンが最新であるというフラグを消している。以上の動作により、論理名による物理アドレスの値の再取得が実現できる。
また、ここで「出荷台数」と「現在時刻」以外の論理名の物理アドレスをモニタしたい場合、テーブルIDが0002の論理名と線形リスト順番のセット18においては、バージョンが最新であるか否かについて保証されていない。例えば「ランプB」をモニタしたい場合、テーブルIDを0002にセットして今まで通り論理名による物理アドレス値の取得のメッセージを要求した場合、仮に「ランプB」に対する線形リスト順番が一致していなくても、テーブルIDのチェックでは一致しているので、正しくない物理アドレスを取得してしまう可能性があった。
そのため、このような場合、要求メッセージ生成部36は、バージョンが最新であることが保証されない論理名については、要求メッセージのテーブルIDを空欄にして、論理名による物理アドレス値取得の要求メッセージを生成すれば良い。これ以降の動作は、上記で説明した動作と同じになるが、要求メッセージのテーブルIDを空欄にしたことにより、テーブルID一致判定部22では必ず不一致の判定になり、論理名バージョン一致確認部29で必ずバージョンの確認が行われるからである。
つまり、論理名と線形リスト順番のセット情報18にて、バージョンが最新であるフラグの立てられた論理名と、バージョンが最新であるフラグの立てられていない論理名が混在した論理名による物理アドレス値の取得を行いたい場合は、バージョンが最新であるフラグの立てられていない論理名についてのみ、要求メッセージのテーブルIDを空にして、論理名による物理アドレス値の取得を行う。その後、物理アドレスを取得したい論理名に対してバージョンが最新であるフラグが立ってから、要求メッセージのテーブルIDを空にしない、通常の論理名による物理アドレス値の取得を行う。
以上説明した、実施の形態に係る制御システムの動作を図18のフローチャートに示す。図18に示すフローチャートでは、まずステップS10で論理名と線形リスト順番のセット情報18に、必要とする論理名の線形リスト順番が存在するかを判定する。ステップS10で線形リスト順番が存在すればステップS11に進み、存在しなければステップS12に進む。次に、ステップS11では、論理名と線形リスト順番のセット情報18において、必要とする論理名のバージョンが最新か否かを判断する。論理名のバージョンが最新であればステップS13に進み、最新でなければステップS14に進む。
ステップS14では、要求メッセージのテーブルIDを空欄にして、論理名による物理アドレス値取得の要求メッセージを生成する。ステップS13では、テーブルID一致判定部22で要求メッセージに含まれるテーブルIDと、論理名割付テーブルの連想配列情報17が持つテーブルIDとを比較する。テーブルIDが一致すればステップS15に進み、存在しなければステップS16に進む。ステップS15では、上記で示した方法で物理アドレスを取得し、処理が終了する。
一方、ステップS16では、論理名バージョン一致確認部29で要求メッセージに含まれる論理名のバージョンと、論理名割付テーブルの連想配列情報17の論理名のバージョンを順番に比較し、全てのバージョンが一致するか否かを確認する。確認できた場合は、ステップS17に進み、確認できない場合はステップS12に進む。ステップS17では、上記で示した方法で物理アドレスを取得し、その後ステップS18で論理名と線形リスト順番のセット情報18のテーブルIDを更新し、処理が終了する。
一方、ステップS12では、上記で示した方法で線形リスト順番の再取得を行う。ステップS12で線形リスト順番の再取得した後は、ステップS19に進む。ステップS19では、論理名と線形リスト順番のセット情報18に対して再取得した線形リスト順番、バージョン及びテーブルIDを更新する。ステップS19での更新後、ステップS13に戻る。
以上のように、本実施の形態に係る制御システムは、テーブルIDが一致しなくてもバージョンが一致すれば論理名による物理アドレス値取得を続行できるので、実施の形態1と同様の効果に加えて、線形リスト順番再取得の回数が減るという効果と、通信のサイズを削減できる効果がある。
(実施の形態3)
実施の形態1では、論理名割付テーブルの連想配列情報17にて論理名の削除があると、削除された論理名以降の配列された線形リスト順番を変更することになる。そのため、実施の形態1では、PLC20のテーブルIDを変更し、外部機器30のテーブルIDとの不一致を検知することにより、線形リスト順番の再取得を行っていた。しかし、論理名割付テーブルの連想配列情報17で論理名が削除されても、削除された論理名以降の配列された線形リスト順番を変更しない運用も可能であり、本実施の形態に係る制御システムでは、当該運用を採用している。
図19に、本実施の形態に係る制御システムの構成を示すブロック図である。図19に示す制御システムは、図1に示す制御システムと比較して、テーブルID一致判定部22、線形リスト順番再取得部25が除かれている。これは、PLC20のテーブルIDを変更し、外部機器30のテーブルIDとの不一致を検知することにより、線形リスト順番の再取得する処理が本実施の形態では必要がないためである。
図20に、本実施の形態に係るエンジニアリングツール10が初期に作成する論理名割付テーブルの連想配列情報17である。なお、エンジニアリングツール10での論理名割付テーブルの連想配列情報17の作成方法は、実施の形態1と同じである。次に、図20に示す論理名割付テーブルの連想配列情報17から「カウンタ値」が削除されている論理名割付テーブルの連想配列情報17の例を図21に示す。
図21に示す論理名割付テーブルの連想配列情報17では、エンジニアリングツール10では「カウンタ値」が削除されたという情報を残しておくために「カウンタ値」の論理名は残し、対応する物理アドレスだけを削除している。また、図21に示す論理名割付テーブルの連想配列情報17では、再度「カウンタ値」を追加する場合、残しておいた論理名に、対応する物理アドレスを追加するだけで良い。図21に示す論理名割付テーブルの連想配列情報17のように線形リストを処理した場合、線形リスト順番は変わらないため、テーブルIDが不要となる。
さらに、本実施の形態に係る制御システムでは、線形リスト順番の再取得する処理が不要であるため、図19に示すように線形リスト順番再取得部25を設ける必要がない。つまり、本実施の形態に係る制御システムでは、線形リスト順番再取得部25で論理名の文字列比較を行う必要がない。そのため、図20に示すエンジニアリングツール10の論理名割付テーブルの連想配列情報17から、物理アドレスのみの構成にした図22に示す論理名割付テーブルの連想配列情報27をPLC20のRAM20a3に書き込む。なお、図21に示す論理名割付テーブルの連想配列情報17に対応する論理名割付テーブルの連想配列情報27は図23に示されており、「カウンタ値」に対応する部分の物理アドレスがなく空欄となっている線形リストとなる。
さらに、本実施の形態に係る論理名と線形リスト順番のセット情報18は、図24に示す構成となり、テーブルIDが付与されない。なお、本実施の形態に係る制御システムによる論理名による物理アドレス取得の手順は、テーブルID一致判定部22の動作を除く点以外実施の形態1の動作と同じである。
以上のように、本実施の形態に係る制御システムは、実施の形態1と同様の効果に加えて、論理名割付テーブルの連想配列情報17のサイズを小さくするという効果を有している。
10 エンジニアリングツール、13 連想配列の値計算部、14 論理名と物理アドレスとの対応情報、17 論理名割付テーブルの連想配列情報、18 論理名と線形リスト順番のセット情報、19 連想配列生成部、20 PLC、20a,30a 制御部、20b,30b 通信部、21 要求メッセージ解析部、22 テーブルID一致判定部、23 連想配列ポインタ移動部、24 物理アドレス値取得部、25 線形リスト順番取得部、26 応答メッセージ生成部、30 外部機器、31 応答メッセージ解析部、33 連想配列の値計算部、35 線形リスト順番取得部、36 要求メッセージ生成部。