(57)【要約】【課題】手動による割り当て作業を必要とせず、開発効率を向上すること。【解決手段】制御プログラムが、制御プログラムの変数名を抽出してアドレスマップファイル及びヘッダファイルを作成する。作成されたヘッダファイルを使用して情報プログラムが作成される。情報プログラムは、共有アクセス部によりアドレスマップファイルを用いて共有記憶領域にアクセスし、共有変数を用いてデータにアクセスする。【選択図】図２
2018185772.tif 000002
【特許請求の範囲】
【請求項１】
制御対象機器のための制御プログラムと、所定の処理を実行する情報プログラムとが共有変数を用いて共有記憶領域でデータを共有する産業用コントローラであって、
前記制御プログラムに含まれる前記共有変数の変数情報を抽出し、前記共有記憶領域に関するマップファイルと、前記共有記憶領域へのアクセスの際に使用されるヘッダファイルとを作成するファイル作成部と、
前記ヘッダファイルを用いて前記情報プログラムを生成するプログラム作成部と、を備え、
前記情報プログラムは、
前記マップファイルを用いて前記共有記憶領域にアクセスする
ことを特徴とする産業用コントローラ。
【請求項２】
前記プログラム作成部は、
前記共有記憶領域にアクセスするための共有アクセス部を作成して前記情報プログラムを生成し、
前記情報プログラムは、
前記共有アクセス部を呼び出して前記共有記憶領域へのアクセスを行う
ことを特徴とする請求項１に記載の産業用コントローラ。
【請求項３】
前記ヘッダファイルは、
前記情報プログラムが前記共有記憶領域から読み込んだデータが格納される読み込み用変数宣言と、
前記情報プログラムが前記共有記憶領域に書き込むデータが格納される書き込み用変数宣言と、
前記情報プログラムが前記共有変数に対してアクセスするためのアクセス関数と、
を含むことを特徴とする請求項１に記載の産業用コントローラ。
【請求項４】
前記マップファイルは、
少なくとも１つの前記共有記憶領域を互いに識別するための共有記憶領域名と、
少なくとも１つの前記共有記憶領域のサイズと、
少なくとも１つの前記共有記憶領域の先頭アドレスと、前記共有アクセス部が読み込むためのデータが格納されている領域の先頭アドレスとの差である読み込みオフセットと、
少なくとも１つの前記共有記憶領域の先頭アドレスと、前記共有アクセス部がデータを書き込むための領域の先頭アドレスとの差である書き込みオフセットと、
前記共有変数のうち読み込み変数に関する読み込み変数情報と、
前記共有変数のうち書き込み変数に関する書き込み変数情報と、
を含むことを特徴とする請求項２に記載の産業用コントローラ。
【請求項５】
前記情報プログラムを開発可能な情報プログラム開発コンピュータと、
前記制御プログラムを開発可能な制御プログラム開発コンピュータと、
を備え、
前記制御プログラム開発コンピュータは、
前記共有変数に関する設定を受付可能な画面を表示することを特徴とする請求項１に記載の産業用コントローラ。
【請求項６】
前記情報プログラムと前記制御プログラムとを隔離するコンテナを備えることを特徴とする請求項１に記載の産業用コントローラ。
【請求項７】
制御対象機器のための制御プログラムと、所定の処理を実行する情報プログラムとが共有変数を用いて共有記憶領域でデータを共有する産業用コントローラにおけるデータ共有方法であって、
前記産業用コントローラが、前記制御プログラムに含まれる前記共有変数の変数情報を抽出し、前記共有記憶領域に関するマップファイルと、前記共有記憶領域へのアクセスの際に使用されるヘッダファイルとを作成するファイル作成ステップと、
前記産業用コントローラが前記ヘッダファイルを用いて前記情報プログラムを生成するプログラム作成ステップと、
前記情報プログラムが前記マップファイルを用いて前記共有記憶領域にアクセスするデータアクセスステップと、
を有することを特徴とする産業用コントローラにおけるデータ共有方法。
【請求項８】
前記プログラム作成ステップでは、
前記産業用コントローラが、前記共有記憶領域にアクセスするための共有アクセス部を作成して前記情報プログラムを生成し、
前記情報プログラムは、
前記共有アクセス部を呼び出して前記共有記憶領域へのアクセスを行う
ことを特徴とする請求項７に記載の産業用コントローラにおけるデータ共有方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、いわゆるプログラマブルロジックコントローラを組み込んだ機器としての産業用コントローラに関し、特に、共有記憶領域においてデータを共有する技術に関する産業用コントローラにおけるデータ共有方法に適用して好適なものである。
【背景技術】
【０００２】
一般的に、プログラマブルロジックコントローラにおいて高レベル言語プログラム（以下「情報プログラム」という）を実行しようとした場合、情報プログラムは、モータなどのデバイスのアドレスが不明であるため、このようなデバイスを認識することができない。そのため、従来は、手動でデバイスのアドレスを割り当てることにより、プログラマブルロジックコントローラのデバイスと周辺機器との間において通信を可能としている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許５０７９１６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、デバイスの数が膨大な場合、手動によるそのような割り当て作業自体がそもそも困難となる。
【０００５】
本発明は以上の点を考慮してなされたもので、手動による割り当て作業を必要とせず開発効率を向上することができる産業用コントローラ及び産業コントローラにおけるデータ共有方法を提案しようとするものである。
【課題を解決するための手段】
【０００６】
かかる課題を解決するため、本発明においては、制御対象機器のための制御プログラムと、所定の処理を実行する情報プログラムとが共有変数を用いて共有記憶領域でデータを共有する産業用コントローラであって、前記制御プログラムに含まれる前記共有変数の変数情報を抽出し、前記共有記憶領域に関するマップファイルと、前記共有記憶領域へのアクセスの際に使用されるヘッダファイルとを作成するファイル作成部と、前記ヘッダファイルを用いて前記情報プログラムを生成するプログラム作成部と、を備え、前記情報プログラムは、前記マップファイルを用いて前記共有記憶領域にアクセスすることを特徴とする。
【０００７】
また、本発明においては、制御対象機器のための制御プログラムと、所定の処理を実行する情報プログラムとが共有変数を用いて共有記憶領域でデータを共有する産業用コントローラにおけるデータ共有方法であって、前記産業用コントローラが、前記制御プログラムに含まれる前記共有変数の変数情報を抽出し、前記共有記憶領域に関するマップファイルと、前記共有記憶領域へのアクセスの際に使用されるヘッダファイルとを作成するファイル作成ステップと、前記産業用コントローラが前記ヘッダファイルを用いて前記情報プログラムを生成するプログラム作成ステップと、前記情報プログラムが前記マップファイルを用いて前記共有記憶領域にアクセスするデータアクセスステップと、を有することを特徴とする。
【発明の効果】
【０００８】
本発明によれば、手動による割り当て作業を必要とせず開発効率を向上することができる。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態による産業用コントローラ及びプログラム開発環境のハードウェア構成の一例を示す図である。
【図２】第１の実施の形態による産業用コントローラ及びプログラム開発環境のソフトウェア構成の一例を示す図である。
【図３】第１の実施の形態による共有変数の設定画面の一例を示す図である。
【図４】第１の実施の形態によるヘッダファイルの一例を示す図である。
【図５】第１の実施の形態によるマップファイルの一例を示す図である。
【図６】第１の実施の形態によるコンテナの一例を示すイメージ図である。
【図７】第１の実施の形態による制御プログラム関連の処理の一例を示すフローチャートである。
【図８】第１の実施の形態による情報プログラム関連の処理の一例を示すフローチャートである。
【図９】第２の実施の形態による制御プログラム関連の処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、図面について、本発明の一実施の形態について詳述する。
【００１１】
（１）第１の実施の形態
（１−１）ハードウェア構成
図１は、第１の実施の形態による産業用コントローラ（以下「コントローラ」とも呼ぶ）１０３及びプログラム開発環境のハードウェア構成の一例を示す。制御プログラム開発ＰＣ１０１、情報プログラム開発ＰＣ１０２、及び産業用コントローラ（以下単に「コントローラ」という）１０３は、基本的にほぼ同様のハードウェア構成を有し、後述するように目的に応じたソフトウェアが動作している。
【００１２】
ネットワーク１０５は、制御プログラム開発ＰＣ１０１、情報プログラム開発ＰＣ１０２及びコントローラ１０３を接続する。ネットワーク１０６は、コントローラ１０３及び制御対象機器１０４を接続する。
【００１３】
制御プログラム開発ＰＣ１０１は、制御プログラムを開発するためのコンピュータである。制御プログラム開発ＰＣ１０１は、ＥＰＲＯＭ１０７、ＣＰＵ１０８、メインメモリ１０９、周辺制御装置１１０、ネットワークＩ／Ｆ１１１、不揮発性記憶装置１１２及びユーザＩ／Ｆ装置１１３を備えている。
【００１４】
周辺制御装置１１０は、バス１１４を介して各種装置を相互に接続する。ネットワークＩ／Ｆ１１１は、ネットワーク１０５に接続するためのインターフェースである。不揮発性記憶装置１１２は、各種プログラムやファイルを格納する装置である。ユーザＩ／Ｆ装置１１３は、ユーザが必要なデータの入力等を行う装置である。
【００１５】
情報プログラム開発ＰＣ１０２は、情報プログラムを開発するためのコンピュータである。情報プログラム開発ＰＣ１０２は、ＥＰＲＯＭ１１５、ＣＰＵ１１６、メインメモリ１１７、周辺制御装置１１８、ネットワークＩ／Ｆ１１９、不揮発性記憶装置１２０及びユーザＩ／Ｆ装置１２１を備えている。
【００１６】
周辺制御装置１１８は、バス１３２を介して各種装置を相互に接続する。ネットワークＩ／Ｆ１１９は、ネットワーク１０５に接続するためのインターフェースである。不揮発性記憶装置１２０は、各種プログラムやファイルを格納する装置である。ユーザＩ／Ｆ装置１２１は、ユーザが必要なデータの入力等を行う装置である。
【００１７】
コントローラ１０３は、ＥＰＲＯＭ１２２、ＣＰＵ１２３、メインメモリ１２４、周辺制御装置１２６、ネットワークＩ／Ｆ１２５、ネットワークＩ／Ｆ１２７、不揮発性記憶装置１２８及びユーザＩ／Ｆ装置１２９を備えている。
【００１８】
周辺制御装置１２６は、バス１３３を介して各種装置を相互に接続する。ネットワークＩ／Ｆ１２５、１２７は、各々対応するネットワーク１０５、１０６に接続するためのインターフェースである。不揮発性記憶装置１２８は、各種プログラムやファイルを格納する装置である。ユーザＩ／Ｆ装置１２９は、ユーザが必要なデータの入力等を行う装置である。
【００１９】
コントローラ１０３では、ＥＰＲＯＭ１２２又は不揮発性記憶装置１２８に格納されているオペレーティングシステム（ＯＳ）、各種プログラム及び各種ファイルをメインメモリ１２４に展開することにより、ＣＰＵ１２３を用いて各種の演算等を実行する。
【００２０】
制御対象機器１０４は、センサ１３０及びアクチュエータ１３１を含んでいる。センサ１３０は、例えば、手動スイッチ、リレー、光電スイッチ、近接スイッチ、リミットスイッチ、重量計、温度センサ、圧力センサ、振動センサ、音波センサ、流量計、流速計、ガスセンサ、速度センサ、回転計、電流計、電圧計、電力計、水質センサ、色判別センサ、またはカメラのようなデバイスである。
【００２１】
一方、アクチュエータ１３１は、例えば、モータ、発電機、ヒーター、制御弁、シリンダ、ソレノイド、ランプ、表示器、ブザー、スピーカー、ポンプ、圧縮機、空調機、冷凍機、またはコンベアのようなデバイスである。
【００２２】
（１−２）ソフトウェア構成
図２は、第１の実施の形態によるコントローラ１０３及びプログラム開発環境のソフトウェア構成の一例を示す。なお、図示の例では、図１における制御対象機器１０４が省略されている。
【００２３】
本実施の形態では、制御プログラム２０７を実行するタスク処理の最後に共有アクセス部２０８が共有記憶領域２２４にアクセスする場合を例示している。なお、制御プログラムにグローバル変数が含まれる場合は、最高優先度のタスクがこのグローバル変数を共有記憶領域２２４に書き込む。
【００２４】
（１−２−１）制御プログラム開発ＰＣ
まず、制御プログラム開発ＰＣ１０１について説明する。ソースファイル２０１は、制御プログラム２０７のソースコードが記述されたファイルである。エディタ２０２は、ソースファイル２０１を作成するためのプログラムである。コンパイラ２０３は、ソースファイル２０１から中間言語ファイルを作成する。リンカ２０４は、中間言語ファイルとライブラリ２０５を結合して実行ファイルを生成する。ライブラリ２０５は、プログラムの関数を再利用するために予め準備されている中間言語ファイルである。
【００２５】
ＩＤＥ制御部２０６は、エディタ２０２、コンパイラ２０３及びリンカ２０４等を制御するプログラムである。なお、エディタ２０２、コンパイラ２０３、リンカ２０４、ライブラリ２０５及びＩＤＥ制御部２０６をまとめて、統合開発環境プログラム（ＩＤＥ：Integrated Development Environment）と呼ぶ。
【００２６】
さらに制御プログラム開発ＰＣ１０１は、共有アクセス部２０８、ヘッダファイル２０９、マップファイル２１０、共有領域アクセス部２１１及び連携ファイル生成部２１２を備えている。共有領域アクセス部２１１は、制御プログラム２０７が共有記憶領域２２４へアクセスするための共有アクセス部２０８のソースファイルである。連携ファイル生成部２１２は、ヘッダファイル２０９及びマップファイル２１０を生成する。
【００２７】
（１−２−２）情報プログラム開発コンピュータ
次に、情報プログラム開発ＰＣ１０２について説明する。ソースファイル２１３は、情報プログラム２１９のソースコードが記述されたファイルである。エディタ２１４は、ソースファイル２１３を作成するためのプログラムである。コンパイラ２１５は、ソースファイル２１３から中間言語ファイルを作成する。リンカ２１６は、中間言語ファイルとライブラリ２１７を結合して実行ファイルを生成する。ライブラリ２１７は、プログラムの関数を再利用するために予め準備されている中間言語ファイルである。
【００２８】
なお、上述したコントローラ１０３においては、複雑な算術演算、ＳＣＡＤＡ、ＭＥＳ、クラウドシステムとの情報の送受信のようなデータ処理が必要な場合がある。このようなデータ処理は、前述の制御装置特有の言語でプログラミングすることが困難な場合があり、Ｃ言語やＪａｖａ（登録商標）言語などの情報通信分野で使われるプログラミング言語を用いて記述する場合がある。このようなデータ処理を実行するプログラムを「情報プログラム」と呼ぶ。この情報プログラムは、例えば情報プログラム２１９に相当する。
【００２９】
ＩＤＥ制御部２１８は、エディタ２１４、コンパイラ２１５及びリンカ２１６等を制御するプログラムである。なお、エディタ２１４、コンパイラ２１５、リンカ２１６、ライブラリ２１７及びＩＤＥ制御部２１８をまとめて、統合開発環境プログラムと呼ぶ。
【００３０】
さらに情報プログラム開発ＰＣ１０２は、共有アクセス部２２０、ヘッダファイル２０９及び連携ファイルアクセス部２２２を備えている。共有アクセス部２２０は、情報プログラム２１９が共有記憶領域２２４へアクセスするためのプログラムである。連携ファイルアクセス部２２２は、ヘッダファイル２０９をコントローラ１０３から取得したり、情報プログラム２１９と共有アクセス部２２０をコントローラへ送信したりする。
【００３１】
（１−２−３）コントローラ
一方、コントローラ１０３は、シーケンス制御装置、モーション制御装置またはプログラマブル・ロジック・コントローラ（ＰＬＣ）とも呼ばれる。コントローラ１０３は、ラダー・ロジック（ＬＤ言語）、シーケンシャル・ファンクション・チャート（ＦＣ言語）、ファンクション・ブロック（ＦＢＤ言語）、ストラクチャード・テキスト（ＳＴ言語）、またはインストラクション・リスト（ＬＤ言語）のような制御装置特有のプログラミング言語で制御内容が記述されたプログラムを実行する。
【００３２】
このような制御内容が実行可能なプログラムを「制御プログラム」と呼ぶ。制御プログラム２０７においては一連の処理をタスクと呼び、タスクごとに繰り返し処理する周期を設定できる。制御プログラム２０７において使用する変数には、入力専用変数及び出力専用変数が存在する。コントローラ１０３は、このような制御プログラム２０７のみならず、情報プログラム２１９も実行する。
【００３３】
共有アクセス部２０８は、制御プログラム２０７が共有記憶領域２２４へアクセスするためのプログラムである。ライブラリ２２３は、制御プログラム２０７や共有アクセス部２０８が実行するために必要な共有関数の処理を実行する。ライブラリ２２６は、情報プログラム２１９が共有記憶領域２２４にアクセスするために、マップファイル２１０を参照してアクセス関数の処理を実行する。構成アクセス部２２９は、連携ファイルアクセス部２２２へヘッダファイル２０９を送信したり、連携ファイルアクセス部２２２から情報プログラム２１９と共有アクセス部２２０を受信したりする。タスクスケジューラ２２８は、タスクを実行する。タスクは、設定されている周期でそのタスクに登録されているプログラムを実行する。タスクに制御プログラム２０７と共有アクセス部２０８が登録されている場合、タスクは、実行周期に合わせて制御プログラム２０７と共有アクセス部２０８を実行する。共有記憶領域２２４は、制御プログラム２０７と情報プログラム２１９が共有する変数のデータを保存する。共有アクセス部２２０は、ライブラリ２２６を経由して共有記憶領域２２４にアクセスし、例えば、情報プログラム２１９の読み込み用構造体４０１にデータを読み込んだり、書き込み用構造体４０２のデータを共有記憶領域２２４の連続したアドレスの領域に書き込んだりする。
【００３４】
ヘッダファイル２０９は、連携ファイル生成部２１２が生成する情報プログラム２１９を作成する際に用いられるヘッダファイルである。マップファイル２１０は、連携ファイル生成部２１２が生成する情報プログラム２１９が共有記憶領域２２４へアクセスするために使用するファイルである。
【００３５】
コンテナ処理部２２７は、制御プログラム２０７と情報プログラム２１９とが互いに影響を及ぼさないようにするためのプログラムである。
【００３６】
（１−３）共有変数の設定画面
図３は、第１の実施の形態による共有変数の設定画面としての共有変数設定部３０１の一例を示す。なお、この共有変数設定部３０１は、制御プログラム開発ＰＣ１０１によって表示される、設定受け付け画面である。
【００３７】
共有変数設定部３０１は、情報プログラム２１９と共有する変数を設定するためのＧＵＩ（Graphic Use Interface）で、連携ファイル生成部２１２が生成する。共有チェック欄３０２は、チェックした場合には、変数名３０３に示す変数について情報プログラム２１９と変数を共有し、チェックしない場合にはそれについて情報プログラム２１９と変数共有しないことを表す。変数名３０３は、情報プログラムと共有する変数名である。型３０４は、変数の型である。周期３０５は、共有記憶領域２２４において共有される変数データを保存する周期を設定するための欄である。
【００３８】
キャンセルボタン３０６は、押下すると、共有変数設定部３０１での作業を破棄し終了する一方、ＯＫボタン３０７は、押下すると、設定された情報を基にヘッダファイル２０９及びマップファイル２１０を生成する。アクセス権限３０８は、情報プログラムに付与するアクセス権限を表している。情報プログラムは、このアクセス権限３０８が「Read」であれば、変数名３０３に対応する変数のデータを読み込むことができる一方、「Write」であればそれを書き込むこともできる。
【００３９】
（１−４）ヘッダファイル
図４は、情報プログラム２１９を作成するためのヘッダファイル２０９の一例を示す。読み込み用構造体４０１は、情報プログラム２１９が共有記憶領域２２４の読み込みオフセット値（読み込み領域）から読み込んだデータが格納される構造体である。書き込み用構造体４０２は、情報プログラム２１９が共有記憶領域２２４の書き込みオフセット値（書き込み領域）に書き込むデータが格納される構造体である。ヘッダファイルには、構造体に限らずプログラム言語で使用可能な変数の宣言を記載してもよい。共有すべき変数がない場合は、対象となるアクセス用変数の宣言は記載されない。
【００４０】
全体readアクセス関数４０３は、情報プログラム２１９がすべての読み込み用変数のデータを読み込むための関数である。関数の呼び出し時に共有記憶領域２２４の読み込み領域からprDataにデータを読み込む。全体writeアクセス関数４０４は、情報プログラム２１９がすべての書き込み用変数のデータを書き込むための関数である。関数の呼び出し時にpwDataから共有記憶領域２２４の書き込み領域にデータを書き込む。全体writeのreadアクセス関数４０５は、情報プログラム２１９がすべての書き込み用変数のデータを読み込むための関数である。readアクセス関数４０５は、関数の呼び出し時に共有記憶領域２２４の書き込み領域からpwDataにデータを読み込む。個別readアクセス関数４０６は、情報プログラム２１９が個々の読み込み用変数のデータを読み込むための関数である。個別writeアクセス関数４０７は、情報プログラム２１９が個々の書き込み用変数のデータを書き込み領域に書き込むための関数である。個別writeのreadアクセス関数４０８は、情報プログラム２１９が個々の書き込み用変数のデータを書き込み領域から読み込むための関数である。
【００４１】
（１−５）マップファイル
図５は、マップファイル２１０をCSV形式で生成した一例である。マップファイル２１０は、共有アクセス部２２０が共有記憶領域２２４にアクセスする際に使用される。
【００４２】
共有記憶領域名５０１は、共有記憶領域２２４を識別するための名称である。例えばOSがLinux（登録商標）であれば共有記憶領域としてファイルを作成するため、そのファイルの保存位置を表す絶対パスを共有記憶領域名５０１とする。
【００４３】
サイズ５０２は、共有記憶領域２２４で保存しているデータのサイズである。読み込みオフセット５０３は、共有記憶領域２２４の先頭アドレスと、共有アクセス部２２０が読み込むためのデータが格納されている領域の先頭アドレスとの差を表す。
【００４４】
書き込みオフセット５０４は、共有記憶領域２２４の先頭アドレスと、共有アクセス部２２０がデータを書き込むための領域の先頭アドレスとの差を表す。型５０５は、共有記憶領域２２４に書き込む制御プログラム２０７で使用しているデータの型である。
【００４５】
変数名５０６は、共有記憶領域２２４に書き込むデータが格納されている、制御プログラム２０７で使用している変数の名前である。変数オフセット５０７は、共有アクセス部２２０が読み込むためのデータが格納されている領域の先頭アドレスと、対象の変数のデータが格納されている領域の先頭アドレスとの差を表す。型５０８は、共有記憶領域２２４から読み込む制御プログラム２０７で使用しているデータの型である。
【００４６】
変数名５０９は、共有記憶領域２２４から読み込んだデータを格納する制御プログラム２０７で使用している変数の名称である。変数オフセット５１０は、共有アクセス部２２０が読み込むためのデータが格納されている領域の先頭アドレスと、対象の変数のデータが格納されている領域の先頭アドレスとの差を表す。型５０５から変数オフセット５１０の情報は、個別の変数のみにアクセスする場合や、必要に応じて構造体のアライメントの調整に使用する。例えば、複数の情報プログラム２１９がありプログラミング言語が異なる場合、構造体のメンバが保存される領域の構造がマップファイル２１０と異なる場合ある。その場合、対象言語用に作成されるライブラリ２２６は、対象言語の構造体のアライメントに合わせてオフセット値を算出し、共有記憶領域２２４にアクセスする。型のサイズは、ライブラリ２２６で型名とサイズの変換テーブルを保持していてもよいし、マップファイル２１０に記載しておいてもよい。
【００４７】
図６は、制御プログラム２０７用のコンテナ及び情報プログラム２１９用のコンテナのイメージ図である。図示の例では、図２の各構成と同一の符号が付してある構成は、ほぼ同様の機能を有しているため、以下では異なる点を中心として説明する。
【００４８】
コンテナ処理部２２７は、制御プログラム２０７と情報プログラム２１９とが互いに影響を及ぼさないようにするために、制御プログラム２０７及び情報プログラム２１９のためのコンテナを作成する。
【００４９】
具体的には、コンテナ処理部２２７は、制御プログラム２０７と情報プログラム２１９とがそれぞれ専用で使用するプロセス、ファイルシステム及びネットワークの名前空間と、ＣＰＵ１２３とメインメモリ１２４とのリソースを作成する。
【００５０】
本実施の形態では、制御プログラム２０７用のコンテナを「制御コンテナ」と呼ぶ一方、情報プログラム２１９用のコンテナを「情報コンテナ」と呼ぶことにする。コンテナの具体的な作成方法については後述する。
【００５１】
図７は、制御プログラム２０７に関連する処理の一例を示す。まず、ステップＳ６００では、コンテナ処理部２２７が、図６に示すように、制御プログラム２０７用の制御コンテナ及び情報プログラム２１９用の情報コンテナを作成する。
【００５２】
図６コンテナ処理部２２７は、共有記憶領域２２４が作成されるディレクトリを制御コンテナ及び情報コンテナのファイルシステムにマウント（図示の点線に相当）して共有ディレクトリを作成し、制御プログラム２０７と情報プログラム２１９からアクセスできるようにする。また、コンテナ処理部２２７は、ヘッダファイル２０９とマップファイル２１０を保存するための共有ディレクトリと、情報プログラム２１９及び共有アクセス部２２０を保存するための共有ディレクトリも作成する。その際、コンテナ処理部２２７は、後者の共有ディレクトリについては、情報コンテナのファイルシステムにのみマウントして共有する。制御プログラム２０７は制御コンテナ内で実行され、情報プログラム２１９は情報コンテナ内で実行される。
【００５３】
ステップＳ６０１では、ユーザが、制御プログラム開発ＰＣ１０１を用いて、既述のＩＤＥを使用してソースコードをまとめて管理するためのプロジェクトを作成し、制御プログラム２０７を作成する。ステップＳ６０２では、ユーザが、共有変数設定部３０１を起動するために、既述のＩＤＥの該当するメニューを選択する。選択されると、連携ファイル生成部２１２がソースファイル２０１から変数を抽出する。
【００５４】
ステップＳ６０３では、連携ファイル生成部２１２が、共有変数設定部３０１（図３参照）を生成して表示する。ユーザは、情報プログラム２１９と共有する変数の共有チェック欄３０２にチェックし、アクセス権限３０８及び周期３０５を設定する。設定が完了した後、ユーザがＯＫボタン３０７を押下すると、連携ファイル生成部２１２は、設定内容をメモリに保存する。
【００５５】
ステップＳ６０４では、連携ファイル生成部２１２が、設定された値をメモリから取得する。
【００５６】
ステップＳ６０５では、連携ファイル生成部２１２がヘッダファイル２０９及びマップファイル２１０を生成する。連携ファイル生成部２１２は、アクセス権限３０８が「Read」に設定された変数を読み込み用構造体４０１としてヘッダファイル２０９に定義する。次に連携ファイル生成部２１２は、アクセス権限３０８が「Write」に設定された変数を書き込み用構造体４０２としてヘッダファイル２０９に定義する。そして、連携ファイル生成部２１２は、全体readアクセス関数４０３、全体writeアクセス関数４０４、全体writeのreadアクセス関数４０５、個別readアクセス関数４０６、個別writeアクセス関数４０７および個別writeのreadアクセス関数４０８をヘッダファイル２０９に定義する。
【００５７】
次に連携ファイル生成部２１２は、情報プログラム２１９がヘッダファイル２０９に定義された構造体変数の構造で共有記憶領域２２４にアクセスできるようにマップファイル２１０を生成する。具体的には、連携ファイル生成部２１２は、共有記憶領域名５０１、共有記憶領域名で生成するファイルのサイズ５０２、読み込みオフセット５０３、及び書き込みオフセット５０４をマップファイル２１０に出力する。連携ファイル生成部２１２は、共有記憶領域２２４の先頭アドレスから順に「Read」に設定された変数を保存し、連続して「Write」に設定された変数を保存できるように共有記憶領域２２４にアクセスするためのマップファイル２１０を生成する。連携ファイル生成部２１２は、ヘッダファイル２０９で定義した構造体のサイズからサイズ５０２、読み込みオフセット５０３、書き込みオフセット５０４を算出する。次に連携ファイル生成部２１２は、読み込み用構造体４０１定義されている変数の型５０５、変数名５０６、変数オフセット５０７をマップファイル２１０に出力する。次に連携ファイル生成部２１２は、書き込み用構造体４０２定義されている変数の型５０８、変数名５０９、変数オフセット５１０をマップファイル２１０に出力する。連携ファイル生成部２１２は、変数オフセット（５０７と５１０）を変数の定義順序、変数のサイズ、および情報プログラム２１９の構造体のアライメントを考慮して算出して出力する。
【００５８】
ステップＳ６０６では、連携ファイル生成部２１２は、共有記憶領域２２４の名前を決定して共有記憶領域２２４を作成し、この共有記憶領域２２４で共有変数のデータを保存する領域にアクセスできるソースコード（共有領域アクセス部２１１）を生成する。具体的には、連携ファイル生成部２１２は、ヘッダファイル２０９に定義する構造体の変数の順番、マップファイル２１０に出力したオフセットを基にして、共有変数設定部３０１において、「Read」に設定された読み込み用変数のデータを共有記憶領域２２４に書き込むソースコードと、「Write」に設定された書き込み用変数のデータを共有記憶領域２２４から制御プログラム２０７の変数に読み込むソースコードを生成する。
【００５９】
連携ファイル生成部２１２は、制御プログラム２０７をタスクに登録し、タスクの実行周期として周期３０５を設定する。タスクの実行周期は、制御プログラム作成者等により手動で設定されてもよい。連携ファイル生成部２１２は、制御プログラム２０７の次に実行されるように共有記憶領域２２４にアクセスする共有アクセス部２０８を同じタスクに登録する。
【００６０】
ステップＳ６０７では、ユーザが既述のＩＤＥで実行メニューを選択すると、ＩＤＥ制御部２０６はソースコードをビルドし、制御プログラム２０７及び共有アクセス部２０８を生成する。
【００６１】
ステップＳ６０８では、制御プログラム開発ＰＣ１０１においてＩＤＥ制御部２０６が、制御プログラム２０７及び共有アクセス部２０８を既述の制御コンテナ内の共有ディレクトリ以外の場所に送信し、ヘッダファイル２０９及びマップファイル２１０を制御コンテナ内の共有ディレクトリに送信する。
【００６２】
ステップＳ６０９では、ＩＤＥ制御部２０６が、コントローラ１０３のタスクスケジューラ２２８を実行する。ステップＳ６１０では、タスクスケジューラ２２８がタスクを実行し、タスクは設定された実行周期で制御プログラム２０７を実行する。制御プログラム２０７は、制御処理を実行する。一度起動したタスクは、周期的に登録されたプログラムを実行するため再度タスクスケジューラからは実行されない。
【００６３】
ステップＳ６１１では、タスクが制御プログラム２０７の実行後に共有アクセス部２０８を実行する。ステップＳ６１２では、共有アクセス部２２０が、ライブラリ２２３の処理も活用しつつ共有記憶領域名５０１とサイズ５０２を指定して共有記憶領域２２４をオープン（アクセス可能な状態）し、マップファイル２１０に出力した情報を基にRead権限の変数のデータを書き込む一方、Write権限の変数のデータを読み込む。次にステップＳ６１０が実行される。
【００６４】
図８は、情報プログラム２１９の関連処理の一例を示す。ステップＳ７０１では、ユーザが既述のＩＤＥを使用してソースコードをまとめて管理するためのプロジェクトを作成するウィザードを実行する。
【００６５】
ステップＳ７０２では、ウィザードが実行されると、ＩＤＥ制御部２１８は、連携ファイルアクセス部２２２を実行してコントローラ１０３の構成アクセス部２２９と通信し、ヘッダファイル２０９を取得する。
【００６６】
ステップＳ７０３では、連携ファイルアクセス部２２２が、情報プログラム２１９のソースコードとなるファイルのヘッダファイル宣言部の位置にヘッダファイル２０９の宣言を入力してプロジェクトの作成が完了する。
【００６７】
ステップＳ７０４では、ユーザが、情報プログラム２１９と、共有記憶領域２２４へアクセスするための共有アクセス部２２０のソースコードとを作成する。ユーザは、ヘッダファイル２０９に定義された関数を基にして、共有アクセス部２２０のソースコードを作成する。
【００６８】
ステップＳ７０５では、ユーザが既述のＩＤＥで実行メニューを選択すると、ＩＤＥ制御部２１８はソースコードをビルドし、情報プログラム２１９及び共有アクセス部２２０を生成する。共有アクセス部２２０は、情報プログラム２１９に含まれていてもよい。
【００６９】
ステップＳ７０６では、連携ファイルアクセス部２２２が、情報プログラム２１９及び共有アクセス部２２０を構成アクセス部２２９に送信する。コンテナ処理部２２７は、構成アクセス部２２９が情報プログラム２１９及び共有アクセス部２２０を受信したときに、情報コンテナを作成してもよい。コンテナ処理部２２７は、情報プログラム２１９が終了したときに情報コンテナを削除してもよい。構成アクセス部２２９は、情報プログラム２１９及び共有アクセス部２２０を情報コンテナ内からアクセスできる共有ディレクトリに保存する。本実施の形態では、構成アクセス部２２９を介して情報コンテナ内に情報プログラム２１９と共有アクセス部２２０を保存したが、連携ファイルアクセス部２２２が情報コンテナ内のFTPサーバ等と通信して情報コンテナ内に情報プログラム２１９と共有アクセス部２２０を保存してもよい。ステップＳ７０７では、ＩＤＥ制御部２１８が、例えばSSH接続で情報コンテナ内にログインして情報プログラム２１９を実行する。
【００７０】
ステップＳ７０８では、情報プログラム２１９がデータ処理を実行する。ステップＳ７０９では、情報プログラム２１９が共有アクセス部２２０を実行する。ステップＳ７１０では、共有アクセス部２２０がアクセス関数を実行するために、ライブラリ２２６を呼び出す。ライブラリ２２６は、共有ディレクトリからマップファイル２１０を取得する。ライブラリ２２６は、あらかじめマップファイル２１０を取得するためのパス名を保持している。
【００７１】
ステップＳ７１１では、共有アクセス部２２０が、ライブラリ２２６経由で共有記憶領域２２４へのアクセスを実行する。
【００７２】
（１−６）アクセス方法  （１−６−１）全体readアクセス：
ライブラリ２２６は、関数の引数から読み込み用構造体４０１の先頭アドレスを取得する。ライブラリ２２６は、書き込みオフセット５０４と読み込みオフセット５０３の差から読み込むデータサイズを算出する。ライブラリ２２６は、共有記憶領域名５０１を指定して共有記憶領域２２４をオープンし、読み込みオフセット５０３の位置から算出したサイズ分のデータを読み込み、取得した読み込み用構造体４０１の先頭アドレスから順に読み込んだデータを書き込む。
【００７３】
（１−６−２）全体writeアクセス：
ライブラリ２２６は、関数の引数から書き込み用構造体４０２の先頭アドレスを取得する。ライブラリ２２６は、サイズ５０２と書き込みオフセット５０４の差から書き込むデータサイズを算出する。ライブラリ２２６は、共有記憶領域名５０１を指定して共有記憶領域２２４をオープンし、書き込み用構造体４０２の先頭アドレスの位置から算出したサイズ分のデータを読み込み、共有憶領域２２４の書き込みオフセット５０３の位置から読み込んだデータを順に書き込む。
【００７４】
（１−６−３）全体writeのreadアクセス：
ライブラリ２２６は、関数の引数から書き込み用構造体４０２の先頭アドレスを取得する。ライブラリ２２６は、サイズ５０２と書き込みオフセット５０４の差から読み込むデータサイズを算出する。ライブラリ２２６は、共有記憶領域名５０１を指定して共有記憶領域２２４をオープンし、書き込みオフセット５０３の位置から算出したサイズ分のデータを読み込み、取得した書き込み用構造体４０２の先頭アドレスから順に読み込んだデータを書き込む。
【００７５】
（１−６−４）個別readアクセス：
ライブラリ２２６は、関数の引数から読み込み用構造体４０１の先頭アドレスと個別変数の先頭アドレスを取得する。ライブラリ２２６は、取得したアドレスの差を計算して個別変数のオフセット値を算出する。ライブラリ２２６は、マップファイル２１０を参照し、一致する変数オフセット５０７の変数を特定する。ライブラリは、特定した変数の型５０５からサイズを特定する。ライブラリ２２６は、共有記憶領域名５０１を指定して共有記憶領域２２４をオープンし、読み込みオフセット５０３の位置から算出したオフセット分だけ離れた位置から特定したサイズ分のデータを読み込み、取得した個別変数の先頭アドレスから順に、読み込んだデータを書き込む。
【００７６】
（１−６−５）個別writeアクセス：
ライブラリ２２６は、関数の引数から書き込み用構造体４０２の先頭アドレスと個別変数の先頭アドレスを取得する。ライブラリ２２６は、取得したアドレスの差と書き込みオフセット５０４を足して個別変数のオフセット値を算出する。ライブラリ２２６は、マップファイル２１０を参照し、算出したオフセット値と一致する変数オフセット５１０の変数を特定する。ライブラリ２２６は、特定した変数の型５０８からサイズを特定する。ライブラリ２２６は、共有記憶領域名５０１を指定して共有記憶領域２２４をオープンし、個別変数の先頭アドレスから特定したサイズ分のデータを読み込み、共有記憶領域２２４の先頭アドレスから算出したオフセット分だけ離れた位置から、個別変数の先頭アドレスから読み込んだデータを書き込む。
【００７７】
（１−６−６）個別writeのreadアクセス：
ライブラリ２２６は、関数の引数から書き込み用構造体４０２の先頭アドレスと個別変数の先頭アドレスを取得する。ライブラリ２２６は、取得したアドレスの差に書き込みオフセット５０４を足して個別変数のオフセット値を算出する。ライブラリ２２６は、マップファイル２１０を参照し、変数オフセット５１０の差が一致する変数を特定する。ライブラリ２２６は、特定した変数の型５０８からサイズを特定する。ライブラリ２２６は、共有記憶領域名５０１を指定して共有記憶領域２２４をオープンし、算出したオフセット分だけ離れた位置から特定したサイズ分のデータを読み込み、取得した個別変数の先頭アドレスから順に、読み込んだデータを書き込む。
【００７８】
次にステップＳ７０８を実行する。共有アクセス部２０８とライブラリ２２６が共有記憶領域２２４に書き込む処理は、書き込み処理が中断されず連続した処理となるアトミック処理とする。
【００７９】
（１−７）本実施の形態の作用効果等
以上のような構成によれば、制御プログラム２０７に含まれる共有変数の変数情報が抽出され、共有記憶領域２２４に関するマップファイル２１０と、共有記憶領域２２４へのアクセスの際に使用されるヘッダファイル２０９とが作成される。また、ヘッダファイル２０９を用いて情報プログラム２１９が生成される。この情報プログラム２１９は、マップファイル２１０を用いて共有記憶領域２２４にアクセスする。このようにすると、制御プログラム２０７と情報プログラム２１９との間で同一の共有変数名が自動的に生成されることになり、管理者の手動による、制御プログラム２０９の制御対象機器であるデバイスのアドレスの割り当て作業を必要としなくなるため、開発効率を向上することができる。
【００８０】
（２）第２の実施の形態
第２の実施の形態では、第１の実施の形態と同様の構成及び動作については説明を省略し、異なる点を中心として説明する。第２の実施の形態では、第１の実施の形態とは異なり、制御プログラム２０７のタスクとは別のタスクとして共有アクセス部２０８が実行され、共有記憶領域２２４にアクセスする。
【００８１】
図９は、制御プログラム関連の処理の一例を示す。ステップＳ８０１では、連携ファイル生成部２１２が、共有記憶領域２２４の名前を決定し、共有記憶領域２２４を作成し、共有変数のデータを共有記憶領域２２４にアクセスできるソースコード（共有領域アクセス部２１１）を生成する。連携ファイル生成部２１２は、制御プログラム２０７のタスクとは別の共有アクセスタスクを作成し、実行する周期として共有変数設定部３０１から取得した周期を設定する。連携ファイル生成部２１２は、制御プログラム２０７を実行するタスクの優先度よりも共有アクセスタスクの実行優先度を低く設定する。
【００８２】
ステップＳ８０２では、タスクスケジューラ２２８が、タスクを実行し、タスクは設定された実行周期で登録されている制御プログラム２０７を実行する。制御プログラム２０７は、制御処理を実行する。次にステップＳ８０３が実行される。このタスクは、設定された実行周期で制御プログラム２０７を繰り返し実行する。ステップＳ８０３では、タスクスケジューラ２２８が共有アクセスタスクを実行し、共有アクセスタスクが登録されている共有アクセス部２０８を実行する。次にステップＳ６１２を実行する。この共有アクセスタスクは、設定された実行周期でステップ８０３とステップ６１２を繰り返し実行する。
【００８３】
以上のような構成によれば、制御プログラム２０７のタスクとは独立した共有アクセス部２０８が、制御プログラム２０７より実行優先度が低い状態で共有記憶領域２２４にアクセスするため、制御プログラム２０７の影響を受けにくくすることができる。
【００８４】
（３）その他の実施形態
上記実施形態は、本発明を説明するための例示であり、本発明をこれらの実施形態にのみ限定する趣旨ではない。本発明は、その趣旨を逸脱しない限り、様々な形態で実施することができる。例えば、上記実施形態では、各種プログラムの処理をシーケンシャルに説明したが、特にこれにこだわるものではない。従って、処理結果に矛盾が生じない限り、処理の順序を入れ替え又は並行動作するように構成しても良い。
【産業上の利用可能性】
【００８５】
本発明は、いわゆるプログラマブルロジックコントローラを組み込んだ機器としての産業用コントローラ及び産業用コントローラにおけるデータ共有方法に広く適用することができる。
【符号の説明】
【００８６】
１０１……制御プログラム開発ＰＣ、１０２……情報プログラム開発ＰＣ、１０３……コントローラ、１０４……制御対象機器、１３０……センサ、１３１……アクチュエータ。
【図１】
2018185772.tif 000003
【図２】
2018185772.tif 000004
【図３】
2018185772.tif 000005
【図４】
2018185772.tif 000006
【図５】
2018185772.tif 000007
【図６】
2018185772.tif 000008
【図７】
2018185772.tif 000009
【図８】
2018185772.tif 000010
【図９】
2018185772.tif 000011