(57)【特許請求の範囲】
【請求項１】
ユーザプログラムを繰り返し実行するプログラマブル・ロジック・コントローラであって、
グラフィカルプログラミング言語で記述されたユーザプログラムである第１プログラムを実行する第１実行手段と、
高級プログラミング言語で記述された第２プログラムを実行する第２実行手段と、
前記第１プログラムから前記第２プログラムが呼び出されたかどうかを示す呼出情報を記憶する情報記憶手段と
を有し、
前記第１実行手段は、前記第１プログラムに含まれている命令語であって前記第２プログラムを呼び出す命令語を実行すると、前記第１プログラムから前記第２プログラムが呼び出されたことを示すように前記呼出情報を変更し、
前記第２実行手段は、前記呼出情報が前記第１プログラムから前記第２プログラムが呼び出されたことを示すようになると、前記第２プログラムを実行するように構成されており、
前記第１実行手段は、前記第１プログラムに設定されたブレークポイントに応じて前記第１プログラムをブレークし、
前記第２実行手段は、前記第１プログラムがブレークしていても継続して前記第２プログラムを実行するように構成されていることを特徴とするプログラマブル・ロジック・コントローラ。
【請求項２】
ユーザプログラムを繰り返し実行するプログラマブル・ロジック・コントローラであって、
グラフィカルプログラミング言語で記述されたユーザプログラムである第１プログラムを実行する第１実行手段と、
高級プログラミング言語で記述された第２プログラムを実行する第２実行手段と、
前記第１プログラムから前記第２プログラムが呼び出されたかどうかを示す呼出情報を記憶する情報記憶手段と
を有し、
前記第１実行手段は、前記第１プログラムに含まれている命令語であって前記第２プログラムを呼び出す命令語を実行すると、前記第１プログラムから前記第２プログラムが呼び出されたことを示すように前記呼出情報を変更し、
前記第２実行手段は、前記呼出情報が前記第１プログラムから前記第２プログラムが呼び出されたことを示すようになると、前記第２プログラムを実行するように構成されており、
前記第２実行手段は、前記第２プログラムに設定されたブレークポイントに応じて前記第２プログラムをブレークし、
前記第１実行手段は、前記第２プログラムがブレークしていても継続して前記第１プログラムを実行するように構成されていることを特徴とするプログラマブル・ロジック・コントローラ。
【請求項３】
前記プログラマブル・ロジック・コントローラは、基本ユニットと、当該基本ユニットの機能を拡張するための拡張ユニットとを備え、
前記基本ユニットは、前記第１実行手段および前記第２実行手段を備えることを特徴とする請求項１または２に記載のプログラマブル・ロジック・コントローラ。
【請求項４】
前記第１実行手段と前記第２実行手段は、前記基本ユニットの外部に設けられるユニット外部バスを介さずに、前記基本ユニットの内部に設けられるユニット内部バスを介して通信可能に構成されていることを特徴とする請求項３に記載のプログラマブル・ロジック・コントローラ。
【請求項５】
前記プログラマブル・ロジック・コントローラは、基本ユニットと、当該基本ユニットの機能を拡張するための拡張ユニットとを備え、
前記拡張ユニットは、前記第１実行手段および前記第２実行手段を備えることを特徴とする請求項１または２に記載のプログラマブル・ロジック・コントローラ。
【請求項６】
前記第１プログラムと、高級プログラミング言語で記述された複数の第２プログラムとを記憶するプログラム記憶手段をさらに有し、
前記情報記憶手段は、前記複数の第２プログラムに対して一対一で対応した複数の呼出情報を記憶しており、
前記第２実行手段は、前記複数の呼出情報のうちいずれかの呼出情報が第２プログラムの呼び出しを示すようになると、当該呼出情報に対応した第２プログラムを実行することを特徴とする請求項１ないし５のいずれか１項に記載のプログラマブル・ロジック・コントローラ。
【請求項７】
前記第１実行手段は、前記呼出情報を通じて前記第２プログラムの実行を前記第２実行手段に開始させると、前記第２プログラムの終了を待たずに前記第１プログラムを継続して実行することを特徴とする請求項１ないし６のいずれか１項に記載のプログラマブル・ロジック・コントローラ。
【請求項８】
前記第１実行手段と前記第２実行手段との双方からアクセス可能な記憶装置であるデバイスメモリをさらに有し、
前記第１実行手段と前記第２実行手段は引数を、前記デバイスメモリを通じて交換することを特徴とする請求項１ないし７のいずれか１項に記載のプログラマブル・ロジック・コントローラ。
【請求項９】
前記プログラマブル・ロジック・コントローラに接続されたデバッグ装置からの指示に応じて、前記第１プログラムに設定されたブレークポイントでブレークが発生するよう前記第１プログラムを書き換えるプログラム書き換え手段をさらに有することを特徴とする請求項１に記載のプログラマブル・ロジック・コントローラ。
【請求項１０】
前記プログラマブル・ロジック・コントローラに接続されたデバッグ装置からの指示に応じて、前記第２プログラムに設定されたブレークポイントでブレークが発生するよう前記第２プログラムを書き換えるプログラム書き換え手段をさらに有することを特徴とする請求項２に記載のプログラマブル・ロジック・コントローラ。
【請求項１１】
前記第１プログラムと前記第２プログラムは、前記プログラマブル・ロジック・コントローラに接続可能なプログラム作成支援装置において作成されて前記プログラマブル・ロジック・コントローラに転送されることを特徴とする請求項１ないし１０のいずれか１項に記載のプログラマブル・ロジック・コントローラ。
【請求項１２】
前記第２プログラムは、前記プログラム作成支援装置において、前記プログラマブル・ロジック・コントローラが備える機能を制御するためのインタフェースを定義したファイル群と前記高級プログラミング言語で記述されたソースプログラムとから実行形式のプログラムとして生成されることを特徴とする請求項１１に記載のプログラマブル・ロジック・コントローラ。
【請求項１３】
前記プログラマブル・ロジック・コントローラが備える機能は、前記プログラマブル・ロジック・コントローラの基本ユニットが備える機能または当該基本ユニットに接続された拡張ユニットが備える機能であることを特徴とする請求項１２に記載のプログラマブル・ロジック・コントローラ。
【請求項１４】
ユーザプログラムを繰り返し実行するプログラマブル・ロジック・コントローラの制御方法であって、
第１実行手段が、グラフィカルプログラミング言語で記述された第１プログラムを実行する工程と、
第２実行手段が、高級プログラミング言語で記述された第２プログラムを実行する工程と、
情報記憶手段が、前記第１プログラムから前記第２プログラムが呼び出されたかどうかを示す呼出情報を記憶する工程と、
前記第１実行手段が、前記第１プログラムに含まれている命令語であって前記第２プログラムを呼び出す命令語を実行すると、前記第１プログラムから前記第２プログラムが呼び出されたことを示すように前記呼出情報を変更する工程と、を有し、
前記第２プログラムを実行する工程は、前記第２実行手段が、前記呼出情報が前記第１プログラムから前記第２プログラムが呼び出されたことを示すようになると、前記第２プログラムを実行する工程を有し、
前記制御方法は、さらに、
前記第１実行手段が、前記第１プログラムに設定されたブレークポイントに応じて前記第１プログラムをブレークする工程と、
前記第２実行手段が、前記第１プログラムがブレークしていても継続して前記第２プログラムを実行する工程と
を有することを特徴とするプログラマブル・ロジック・コントローラの制御方法。
【請求項１５】
ユーザプログラムを繰り返し実行するプログラマブル・ロジック・コントローラの制御方法であって、
第１実行手段が、グラフィカルプログラミング言語で記述された第１プログラムを実行する工程と、
第２実行手段が、高級プログラミング言語で記述された第２プログラムを実行する工程と、
情報記憶手段が、前記第１プログラムから前記第２プログラムが呼び出されたかどうかを示す呼出情報を記憶する工程と、
前記第１実行手段が、前記第１プログラムに含まれている命令語であって前記第２プログラムを呼び出す命令語を実行すると、前記第１プログラムから前記第２プログラムが呼び出されたことを示すように前記呼出情報を変更する工程と、を有し、
前記第２プログラムを実行する工程は、前記第２実行手段が、前記呼出情報が前記第１プログラムから前記第２プログラムが呼び出されたことを示すようになると、前記第２プログラムを実行する工程を有し、
前記制御方法は、さらに、
前記第２実行手段が、前記第２プログラムに設定されたブレークポイントに応じて前記第２プログラムをブレークする工程と、
前記第１実行手段が、前記第２プログラムがブレークしていても継続して前記第１プログラムを実行する工程と
を有することを特徴とするプログラマブル・ロジック・コントローラの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブル・ロジック・コントローラおよびその制御方法に関する。
【背景技術】
【０００２】
特許文献１が示すようにプログラマブル・ロジック・コントローラ（ＰＬＣ）の基本ユニットは、ラダープログラムなどのユーザプログラムを繰り返し周期的に実行する。なお、ラダープログラムの繰り返し実行周期はスキャンタイムと呼ばれる。１回のスキャンタイム内ではラダープログラムが１回実行される。
【０００３】
特許文献２によればラダープログラムとＣ言語のプログラムとを実行するマイクロプロセッサを備えたモーションコントローラが提案されている。特許文献２のマイクロプロセッサは、ラダープログラムからＣ言語のプログラムをコールしてラダープログラムの処理を中断し、Ｃ言語のプログラムが終了するとラダープログラムの処理を再開する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−０５２６７２号公報
【特許文献２】特開２００６−１７８８１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献２によれば、モーションコントローラにおいてラダープログラムからＣ言語のプログラムをコールすることが可能となる。しかし、Ｃ言語のプログラムが実行されている間はラダープログラムの処理が中断されているため、Ｃ言語のプログラムの実行時間が長くなると、ラダープログラムの再開が遅れ、いわゆるスキャンタイムが延びてしまう。仮にラダープログラムとＣ言語のプログラムを並列に実行できれば、スキャンタイムの延びも抑制できるようになろう。
【０００６】
そこで、本発明は、ラダープログラムのようなグラフィカルプログラミング言語により記述されたプログラムとＣ言語のような高級プログラミング言語により記述されたプログラムとを並列に実行可能とすることを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、たとえば、
ユーザプログラムを繰り返し実行するプログラマブル・ロジック・コントローラであって、
グラフィカルプログラミング言語で記述されたユーザプログラムである第１プログラムを実行する第１実行手段と、
高級プログラミング言語で記述された第２プログラムを実行する第２実行手段と、
前記第１プログラムから前記第２プログラムが呼び出されたかどうかを示す呼出情報を記憶する情報記憶手段と
を有し、
前記第１実行手段は、前記第１プログラムに含まれている命令語であって前記第２プログラムを呼び出す命令語を実行すると、前記第１プログラムから前記第２プログラムが呼び出されたことを示すように前記呼出情報を変更し、
前記第２実行手段は、前記呼出情報が前記第１プログラムから前記第２プログラムが呼び出されたことを示すようになると、前記第２プログラムを実行するように構成されており、
本発明は、さらに、
前記第１実行手段は、前記第１プログラムに設定されたブレークポイントに応じて前記第１プログラムをブレークし、
前記第２実行手段は、前記第１プログラムがブレークしていても継続して前記第２プログラムを実行するように構成されていることを特徴とするプログラマブル・ロジック・コントローラを提供する。
ユーザプログラムを繰り返し実行するプログラマブル・ロジック・コントローラであって、
グラフィカルプログラミング言語で記述されたユーザプログラムである第１プログラムを実行する第１実行手段と、
高級プログラミング言語で記述された第２プログラムを実行する第２実行手段と、
前記第１プログラムから前記第２プログラムが呼び出されたかどうかを示す呼出情報を記憶する情報記憶手段と
を有し、
前記第１実行手段は、前記第１プログラムに含まれている命令語であって前記第２プログラムを呼び出す命令語を実行すると、前記第１プログラムから前記第２プログラムが呼び出されたことを示すように前記呼出情報を変更し、
前記第２実行手段は、前記呼出情報が前記第１プログラムから前記第２プログラムが呼び出されたことを示すようになると、前記第２プログラムを実行するように構成されており、
前記第２実行手段は、前記第２プログラムに設定されたブレークポイントに応じて前記第２プログラムをブレークし、
前記第１実行手段は、前記第２プログラムがブレークしていても継続して前記第１プログラムを実行するように構成されていることを特徴とするプログラマブル・ロジック・コントローラを提供する。
【発明の効果】
【０００８】
本発明によれば、グラフィカルプログラミング言語で記述されたユーザプログラムである第１プログラムを実行する第１実行手段と高級プログラミング言語で記述された第２プログラムを実行する第２実行手段とを備え、呼出情報を記憶する情報記憶手段を通じて呼び出しを可能とすることで、これらのプログラムを並列して実行できるようになる。
【図面の簡単な説明】
【０００９】
【図１】ＰＬＣシステムの一例を示す図
【図２】ユーザプログラムの一例を示す図
【図３】プログラム作成支援装置の一例を示す図
【図４】ＰＬＣの一例を示す図
【図５】スキャンタイムを説明するための図
【図６】ベースレス・ビルディングタイプのＰＬＣの一例を示す図
【図７】同期型のプログラ実行と非同期型のプログラム実行とを示す図
【図８】基本ユニットの機能を示す図
【図９】プログラム作成支援装置の機能示す図
【図１０】第１プログラムの実行処理を示すフローチャート
【図１１】第２プログラムの実行処理を示すフローチャート
【図１２】グラフィカルプログラミング言語で記述された第１プログラムの一例を示す図
【図１３】高級プログラミング言語で記述された第２プログラムの一例を示す図
【図１４】デバックの設定処理の一例を示すフローチャート
【図１５】グラフィカルプログラミング言語で記述された第１プログラムの一例を示す図
【図１６】高級プログラミング言語で記述された第２プログラムの一例を示す図
【図１７】ユーザプログラムの他の例を示す図
【発明を実施するための形態】
【００１０】
以下に本発明の一実施形態を示す。以下で説明される個別の実施形態は、本発明の上位概念、中位概念および下位概念など種々の概念を理解するために役立つであろう。また、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施形態によって限定されるわけではない。
【００１１】
はじめにプログラマブル・ロジック・コントローラ（ＰＬＣ、単にプログラマブルコントローラと呼ばれてもよい）を当業者にとってよりよく理解できるようにするために、一般的なＰＬＣの構成とその動作について説明する。
【００１２】
図１は、本発明の実施の形態によるプログラマブル・ロジック・コントローラシステムの一構成例を示す概念図である。図１に示すように、このシステムは、ラダープログラムなどのユーザプログラムの編集を行うためのプログラム作成支援装置１と、工場等に設置される各種制御装置を統括的に制御するためのＰＬＣ（プログラマブル・ロジック・コントローラ）２とを備えている。ＰＬＣ２は、ＣＰＵが内蔵された基本ユニット３と１つないし複数の拡張ユニット４を備えている。基本ユニット３に対して１つないし複数の拡張ユニット４が着脱可能となっている。基本ユニット３はＣＰＵユニットと呼ばれることもある。
【００１３】
基本ユニット３には、表示部５及び操作部６が備えられている。表示部５には、基本ユニット３に取り付けられている各拡張ユニット４の動作状況などを表示することができ、表示部５の表示内容は、操作部６を操作することにより切り替えることができる。表示部５には、通常、ＰＬＣ２内のデバイスの現在値（デバイス値）やＰＬＣ２内で生じたエラー情報などが表示される。なお、デバイスとは、デバイス値を格納するために設けられたメモリ上の領域を指す名称であり、デバイスメモリと呼ばれてもよい。デバイス値とは、入力機器からの入力状態、出力機器への出力状態およびユーザプログラム上で設定される内部リレー（補助リレー）、タイマー、カウンタ、データメモリ等の状態を示す情報である。
【００１４】
拡張ユニット４は、ＰＬＣ２の機能を拡張するために用意されており、基本ユニット３に対して側方から取り付けられる。１つ目の拡張ユニット４は、基本ユニット３に対して側方から直接的に取り付けられる。２つ目以降の拡張ユニット４は、既に取り付けられている拡張ユニット４に対して、側方から直列的に取り付けられる。たとえば、基本ユニット３の右側面と拡張ユニット４の左側面とが連結面になっている。同様に、１つ目の拡張ユニット４の右側面の形状等は基本ユニット３の右側面とほぼ同じであるため、１つ目の拡張ユニット４の右側面に２つ目の拡張ユニット４の左側面が連結される。このような連結方式は、数珠つなぎ方式とかデイジーチェーン方式と呼ばれてもよい。各連結面にはコネクタが設けられており、通信や電力供給を行うためのバスもコネクタを介して連結される。このようにして、基本ユニット３と複数の拡張ユニット４が直列的に取り付けられると、各拡張ユニット４内に備えられた配線（例：バス）を介して、各拡張ユニット４が基本ユニット３に対して通信可能に接続される。各拡張ユニット４には、その拡張ユニット４の機能に対応する被制御装置１６（図４）が接続され、これにより、各被制御装置１６が拡張ユニット４を介して基本ユニット３に接続される。被制御装置１６には、センサなどの入力装置や、アクチュエータなどの出力装置が含まれる。
【００１５】
プログラム作成支援装置１は、たとえば、携帯可能ないわゆるノートタイプやタブレットタイプのパーソナルコンピュータであって、表示部７及び操作部８を備えている。ＰＬＣ２を制御するためのユーザプログラムの一例であるラダープログラムは、プログラム作成支援装置１を用いて作成され、その作成されたラダープログラムは、プログラム作成支援装置１内でニモニックコードに変換される。そして、プログラム作成支援装置１を、ＵＳＢ(Universal Serial Bus)などの通信ケーブル９を介してＰＬＣ２の基本ユニット３に接続し、ニモニックコードに変換されたラダープログラムをプログラム作成支援装置１から基本ユニット３に送ると、そのラダープログラムが基本ユニット３内でマシンコードに変換され、基本ユニット３に備えられたメモリ内に記憶される。なお、ここではニモニックコードを基本ユニット３に送信するようにしているが、本発明はこれに限られず、例えばニモニックコードを更に中間コードに変換し、中間コードを基本ユニット３に送信するようにしてもよい。
【００１６】
なお、図１では示していないが、プログラム作成支援装置１の操作部８には、プログラム作成支援装置１に接続されたマウスなどのポインティングデバイスが含まれていてもよい。また、プログラム作成支援装置１は、ＵＳＢ以外の他の通信ケーブル９を介して、ＰＬＣ２の基本ユニット３に対して着脱可能に接続されるような構成であってもよい。
【００１７】
図２は、ラダープログラムの作成時にプログラム作成支援装置１の表示部７に表示されるラダー図１７の一例を示す図である。図２に示すように、ＰＬＣ２を制御するためのラダープログラムは、プログラム作成支援装置１の表示部７にマトリックス状に表示される複数のセル１８内に仮想デバイスのシンボル１９を適宜配置して、視覚的なリレー回路を表すラダー図１７を構築することにより作成される。
【００１８】
ラダー図１７には、たとえば、１０列×Ｎ行（Ｎは任意の自然数）のセル１８が配置されている。そして、各行のセル１８内に、図２に示す左側から右側に向かって、時系列的に仮想デバイスのシンボル１９を適宜配置することにより、視覚的なリレー回路を作成することができる。作成されるリレー回路は、１行で表される直列的なリレー回路であってもよいし、複数行に並列的に表されたリレー回路を互いに結合することにより作成された、並列的なリレー回路であってもよい。
【００１９】
図２に示すリレー回路は、入力装置からの入力信号に基づいてオン／オフされる３つの仮想デバイス（以下、「入力デバイス」と呼ぶ。）のシンボル１９ａ，１９ｂ，１９ｃと、出力装置の動作を制御するためにオン／オフされる仮想デバイス（以下、「出力デバイス」と呼ぶ。）のシンボル１９ｄとが適宜結合されることにより構成されている。
【００２０】
各入力デバイスのシンボル１９ａ，１９ｂ，１９ｃの上方に表示されている文字（「Ｒ０００１」、「Ｒ０００２」及び「Ｒ０００３」）は、その入力デバイスのデバイス名（アドレス名）２１を表している。各入力デバイスのシンボル１９ａ，１９ｂ，１９ｃの下方に表示されている文字（「フラグ１」、「フラグ２」及び「フラグ３」）は、その入力デバイスに対応付けられたデバイスコメント２２を表している。出力デバイスのシンボル１９ｄの上方に表示されている文字（「原点復帰」）は、その出力デバイスの機能を表す文字列からなるラベル２３である。
【００２１】
図２に示す例では、デバイス名「Ｒ０００１」及び「Ｒ０００２」にそれぞれ対応する２つの入力デバイスのシンボル１９ａ，１９ｂが直列的に結合されることにより、ＡＮＤ回路が構成されている。また、これらの２つの入力デバイスのシンボル１９ａ，１９ｂからなるＡＮＤ回路に対して、デバイス名「Ｒ０００３」に対応する入力デバイスのシンボル１９ｃが並列的に結合されることにより、ＯＲ回路が構成されている。すなわち、このリレー回路では、２つのシンボル１９ａ，１９ｂに対応する入力デバイスがいずれもオンした場合、又は、シンボル１９ｃに対応する入力デバイスがオンした場合にのみ、シンボル１９ｄに対応する出力デバイスがオンされるようになっている。
【００２２】
図３は、図１のプログラム作成支援装置１の電気的構成について説明するためのブロック図である。図３に示すように、プログラム作成支援装置１には、ＣＰＵ２４、表示部７、操作部８、記憶装置２５及び通信部２６が備えられている。表示部７、操作部８、記憶装置２５及び通信部２６は、それぞれＣＰＵ２４に対して電気的に接続されている。記憶装置２５は、少なくともＲＡＭを含む構成であり、ラダープログラム記憶部２５ａと、編集ソフト記憶部２５ｂとを備えている。
【００２３】
ユーザは、編集ソフト記憶部２５ｂに記憶されている編集ソフトをＣＰＵ２４に実行させて、操作部８を通じてラダープログラムを編集する。ここで、ラダープログラムの編集には、ラダープログラムの作成及び変更が含まれる。編集ソフトを用いて作成されたラダープログラムは、ラダープログラム記憶部２５ａに記憶される。また、ユーザは、必要に応じてラダープログラム記憶部２５ａに記憶されているラダープログラムを読み出し、そのラダープログラムを、編集ソフトを用いて変更することができる。通信部２６は、通信ケーブル９を介してプログラム作成支援装置１を基本ユニット３に通信可能に接続するためのものである。
【００２４】
図４は、ＰＬＣ２の電気的構成について説明するためのブロック図である。図４に示すように、基本ユニット３には、ＣＰＵ１０、表示部５、操作部６、記憶装置１２及び通信部１４が備えられている。表示部５、操作部６、記憶装置１２、及び通信部１４は、それぞれＣＰＵ１０に電気的に接続されている。記憶装置１２は、ＲＡＭやＲＯＭ、メモリカードなどを含んでもよく、ラダープログラムなどを記憶する。記憶装置１２には、プログラム作成支援装置１から入力されたラダープログラムやユーザデータが上書きして記憶される。また、記憶装置１２には基本ユニット用の制御プログラムも格納されている。図４が示すように基本ユニット３と拡張ユニット４とは拡張バスの一種であるユニット外部バス９０を介して接続されている。なお、ユニット外部バス９０に関する通信機能は通信部１４の一部として実装されてもよい。
【００２５】
図５は、本発明の実施の形態に係るプログラマブルコントローラの基本ユニット３でのスキャンタイムの構成を示す模式図である。図５が示すように１つのスキャンタイムＴは、入出力のリフレッシュを行うためのユニット間通信２０１、プログラム実行２０２、ＥＮＤ処理２０４により構成されている。ユニット間通信２０１で、基本ユニット３は、ラダープログラムを実行して得られた出力データを基本ユニット３内の記憶装置１２から外部機器などに送信するとともに、受信データを含めた入力データを基本ユニット３内の記憶装置１２に取り込む。たとえば、基本ユニット３のデバイスに記憶されているデバイス値はリフレッシュによって拡張ユニット４のデバイスに反映される。同様に、拡張ユニット４のデバイスに記憶されているデバイス値はリフレッシュによって基本ユニット３のデバイスに反映される。なお、リフレッシュ以外のタイミングでデバイス値をユニット間で更新する仕組みが採用されてもよい。ただし、基本ユニット３のデバイスは基本ユニット３が随時書き換えており、同様に、拡張ユニット４のデバイスは拡張ユニット４が随時書き換えている。つまり、基本ユニット３のデバイスは基本ユニット３の内部の装置によって随時アクセス可能であり、同様に、拡張ユニット４のデバイスは拡張ユニット４の内部の装置によって随時アクセス可能になっている。基本ユニット３と拡張ユニット４との間では基本的にリフレッシュのタイミングにおいて相互にデバイス値を更新して同期する。プログラム実行２０２で、基本ユニット３は、更新された入力データを用いてプログラムを実行（演算）する。基本ユニット３はプログラムの実行によりデータを演算処理する。なお、ＥＮＤ処理とは、プログラム作成支援装置１や基本ユニット３に接続された表示器（図示せず）等の外部機器とのデータ通信、システムのエラーチェック等の周辺サービスに関する処理全般を意味する。
【００２６】
このように、プログラム作成支援装置１はユーザの操作に応じたラダープログラムを作成し、作成したラダープログラムをＰＬＣ２に転送する。ＰＬＣ２は、入出力リフレッシュ、ラダープログラムの実行およびＥＮＤ処理を１サイクル（１スキャン）として、このサイクルを周期的、すなわちサイクリックに繰り返し実行する。これにより、各種入力機器（センサ等）からのタイミング信号に基づいて、各種出力機器（モータ等）を制御する。よって、ＰＬＣ２は汎用のパーソナルコンピュータ（ＰＣ）とは全く異なる動きをする。
【００２７】
＜連結構造＞
図６（Ａ）はＰＬＣ２を構成する基本ユニット３、拡張ユニット４およびエンドユニット１１が連結される前の状態を示している。この例では、基本ユニット３の右方向に１つ以上の拡張ユニット４が連結される。最も右に位置する拡張ユニット４にはエンドユニット１１が連結される。エンドユニット１１は、最も右に位置する拡張ユニット４の右側面を保護するものであり、バスの終端機能を備えていてもよい。なお、拡張ユニット４の前面にはダイレクトアクセススイッチ２７が設けられてもよい。ダイレクトアクセススイッチ２７が操作されると、操作されたことを示す信号が通信バスを介して拡張ユニット４から基本ユニット３に伝達される。基本ユニット３は、この信号を受信することで、拡張ユニット４のダイレクトアクセススイッチ２７が操作されたことを認識し、所定の処理（テスト結果の表示など）を実行する。
【００２８】
図６（Ｂ）はＰＬＣ２を構成する基本ユニット３、拡張ユニット４およびエンドユニット１１が連結された状態を示している。このＰＬＣ２はベースレスのビルディングタイプであるため、ベースを使用せずに、基本ユニット３、拡張ユニット４およびエンドユニット１１が連結される。工場において制御盤に設置しやすくするために、ＰＬＣ２の背面にはＤＩＮレールなどの基準レール１３が取り付けられるようになっている。なお、基本ユニット３および拡張ユニット４の連結状態を維持するためにロック機構が採用されてもよい。
【００２９】
＜グラフィカルプログラミング言語と高級プログラミング言語＞
ＰＬＣ２で実行されるユーザプログラムは伝統的にラダー言語やモーションフローなどのグラフィカルプログラミング言語でプログラミングされていた。しかし、取り外し可能なメモリカードの読み書き制御やローカルエリアネットワーク（ＬＡＮ）との通信制御、データの圧縮処理などは、ラダー言語で記述するよりもＣ言語などの高級プログラミング言語の方がユーザにとって容易に記述しやすい。もちろん、これらをラダー言語でも記述できるが、非常に複雑な記述を要するため、プログラミング作業が膨大となる。よって、高級プログラミング言語の方がプログラミングし易い処理については、今後、グラフィカルプログラミング言語よりも高級プログラミング言語が選択されるようになると予想される。
【００３０】
それでもＰＬＣ２で実行されるプログラムの主体はラダープログラムのままと考えられ、Ｃ言語プログラムはラダープログラムから呼び出されるであろう。なお、ラダープログラム以外にも、ラダープログラムと関連をもたない独立性の高いプログラムから呼び出される場合もあるであろう。一般に、ラダープログラムは上述したスキャンタイム内で実行され、Ｃ言語プログラムはラダープログラムから呼び出されて実行される。Ｃ言語プログラムの実行中はラダープログラムの実行が中断されており、Ｃ言語プログラムが終了すると、ラダープログラムの実行が再開される。よって、Ｃ言語プログラムの実行時間が長くなると、それだけラダープログラムの再開が遅れ、スキャンタイムが延びてしまう。このように従来はラダープログラムとＣ言語プログラムとが同期して実行されていたため、これらを並列実行することができなかった。そこで、本実施形態では、ラダープログラムとＣ言語プログラムとを非同期で実行できるようにすることで、これらを並列実行可能にする。
【００３１】
図７（Ａ）は、ラダープログラムとＣ言語プログラムとが同期して実行されることを示す概念図である。図７（Ａ）において環は１つのスキャンタイムを示している。環のうち白抜き部分はラダープログラムが実行されている期間を示し、斜線部はＣ言語プログラムが実行されている期間を示している。つまり、１つのスキャンタイムではラダープログラムが開始されると、途中でＣ言語プログラムが呼び出されてラダープログラムが中断し、Ｃ言語プログラムが終了するとラダープログラムが再開される。Ｃ言語プログラムの実行期間が延長されると、全体としてスキャンタイムも長くなってしまう。
【００３２】
図７（Ｂ）は、本実施形態の概念を示している。本実施形態では、ラダープログラムとＣ言語プログラムとが非同期で実行される。ラダープログラムとＣ言語プログラムとは基本的に並列に実行されるため、Ｃ言語プログラムの実行期間が延長されても、ラダープログラムのスキャンタイムが長くならない。ただし、Ｃ言語プログラムの実行状態（実行中／非実行中）やＣ言語プログラムが要求する引数などは、ＰＬＣ２のデバイス（基本ユニット３や拡張ユニット４などから参照可能なメモリの記憶領域）に記憶される。つまり、ラダープログラムとＣ言語プログラムはデバイスを介して引数などを伝達する。
【００３３】
＜ＰＬＣの機能＞
ここではＰＬＣ２に必要となる機能が基本ユニット３に実装されるものとして説明する。なお、ここで説明する機能は通信ユニットやモーションユニットなどの拡張ユニット４に実装されてもよい。
【００３４】
図８は基本ユニット３のＣＰＵ１０が制御プログラムを実行することで実現する機能を中心に示している。なお、ＣＰＵ１０は第１実行部７０と第２実行部７１に相当する演算部を異なる複数のＣＰＵコアとして備えていてもよいし、一方はＣＰＵ１０のＣＰＵコアが担当し、他方はＡＳＩＣなどで実装されてもよい。特に、第１実行部７０がラダープログラムを実行する際には高速処理が要求されるため、高速処理対応のＡＳＩＣで実装し、第２実行部７１が通信処理などを実行する際には高速処理は要求されないため、高機能ＣＰＵなどで実装してもよい。この場合、第１実行部７０と第２実行部７１はユニット内部バス９１によって接続され、通信する。なお、ユニット内部バス９１はユニット外部バス９０と比較して高速である。
【００３５】
記憶装置１２には、基本ユニット３のシステムプログラム（ファームウエア）である制御プログラム７５と、プログラム作成支援装置１から転送されてきたラダープログラム７６およびＣ言語プログラム７７などを記憶している。呼び出し管理デバイス７８は、Ｃ言語プログラム７７がラダープログラム７６から呼び出されているかどうかを示すデバイス値（フラグなど）を記憶する記憶領域である。引数デバイス７９は、たとえば、ラダープログラム７６からＣ言語プログラム７７に渡す引数をデバイス値として記憶する記憶領域である。なお、これらをデバイスとして説明するが、デバイスに代えてバッファが採用されてもよい。
【００３６】
ＣＰＵ１０において第１実行部７０は、グラフィカルプログラミング言語で記述されたユーザプログラムである第１プログラムを実行する演算ユニットである。第１プログラムの一例としてラダープログラム７６を採用するが、他のグラフィカルプログラミング言語で記述されたユーザプログラムであってもよい。第１実行部７０は、ラダープログラム７６を実行形式のコードに変換する機能を備えていてもよい。第１実行部７０の外部にこのような変換器が設けられていてもよい。第１実行部７０は、ラダープログラム７６に含まれている命令語であってＣ言語プログラム７７を呼び出す命令語を実行すると、ラダープログラム７６からＣ言語プログラム７７が呼び出されたことを示すように呼び出し管理デバイス７８のデバイス値（呼出情報）を変更する。このように呼び出し管理デバイス７８のデバイス値を変更することで、ラダープログラム７６からＣ言語プログラム７７が呼び出される。なお、第１実行部７０は、呼び出し管理デバイス７８のデバイス値を変更した後は、ラダープログラム７６における次の命令語をすぐに継続的に実行し、Ｃ言語プログラム７７が終了することを待たない。これによりスキャンタイムが延びてしまうことを抑制できる。
【００３７】
第２実行部７１は、高級プログラミング言語で記述された第２プログラムを実行する演算ユニットである。第２プログラムの一例としてＣ言語プログラム７７を採用するが、他の高級プログラミング言語で記述されたユーザプログラムであってもよい。第２実行部７１は、呼び出し管理デバイス７８のデバイス値がラダープログラム７６からＣ言語プログラム７７が呼び出されたことを示すように変更されると、Ｃ言語プログラム７７を実行する。なお、第２実行部７１は、Ｃ言語プログラム７７を実行する上で必要となる引数を、引数デバイス７９のデバイス値を参照することで、取得する。なお、第２実行部７１は、Ｃ言語プログラム７７の実行結果もデバイスを通じてラダープログラム７６に返してもよい。
【００３８】
なお、複数のＣ言語プログラム７７が存在する場合、呼び出し管理デバイス７８は、複数のＣ言語プログラム７７のそれぞれに設けられてもよい。たとえば、５つのＣ言語プログラム７７が存在すれば、５つの呼び出し管理デバイス７８が設けられる。第２実行部７１は、複数の呼び出し管理デバイス７８のうちどれがオフ（非実行／終了）からオン（実行／開始）に変ったかを監視しており、デバイス値がオンに変わった呼び出し管理デバイス７８に対応付けられているＣ言語プログラム７７を実行する。
【００３９】
プロジェクト管理部７２は、プログラム作成支援装置１からラダープログラム７６やＣ言語プログラム７７などをプロジェクトとして受信して、記憶装置１２に格納する。デバイス制御部７３は呼び出し管理デバイス７８や引数デバイス７９などへの書き込みと読み出しを管理する。なお、デバイス制御部７３はいずれかのデバイスが不用意に書き換えられないように排他制御を実行してもよい。デバッグ制御部７４は、ラダープログラム７６とＣ言語プログラム７７とをそれぞれ個別にデバッグするユニットである。デバッグ制御部７４は、プログラム作成支援装置１などの外部のデバッグ装置と協働してデバッグを実行してもよい。
【００４０】
専用機能管理部８０は、基本ユニット３や拡張ユニット４に備えられている専用機能（例：メモリカードの読み書き制御、イーサネット（登録商標）ソケットの制御など）を制御および管理するユニットである。専用機能管理部８０は、Ｃ言語プログラム７７を実行する第２実行部７１からの指示にしたがって、専用機能を制御し、制御結果を第２実行部７１に返す。指示や制御結果もデバイスを通じて伝達されてもよい。
【００４１】
＜プログラム作成支援装置１の機能＞
図９はプログラム作成支援装置１が編集ソフトウエア８８を実行することで実現するＣＰＵ２４の機能を中心に記載している。編集ソフトウエア８８は、記憶装置２５の編集ソフト記憶部２５ｂに記憶されている。ラダープログラム記憶部２５ａには、ラダープログラム７６、Ｃ言語プログラム７７、定義ファイル８５などがプロジェクトとして記憶されている。定義ファイル８５は、たとえば、基本ユニット３や拡張ユニット４が備える専用機能のインタフェースを定義しており、Ｃ言語プログラム７７によって参照されて取り込まれる。
【００４２】
ラダープログラム作成部８１は、たとえば、表示部７にラダープログラムの編集ウインドウを表示し、操作部８から入力された指示にしたがってラダープログラム７６を作成する。Ｃ言語プログラム作成部８２は、たとえば、表示部７にＣ言語プログラムの編集ウインドウを表示し、操作部８から入力された指示にしたがってＣ言語プログラム７７を作成する。Ｃ言語プログラム作成部８２は、ソースコードのエディタとコンパイラー（実行形式への変換器）を有しており、定義ファイル８５を参照しつつＣ言語プログラム７７のソースコードを変換して実行形式のＣ言語プログラム７７を作成する。プロジェクト転送部８３は、ラダープログラム作成部８１により作成されたラダープログラム７６と、Ｃ言語プログラム作成部８２により作成されたＣ言語プログラム７７をＰＬＣ２に転送する。
【００４３】
デバッグ部８４は、ラダープログラム７６にブレークポイントを設定してＰＬＣ２にラダープログラム７６のデバッグを指示したり、Ｃ言語プログラム７７にブレークポイントを設定して、ＰＬＣ２にＣ言語プログラム７７のデバッグを指示したりするデバッガである。
【００４４】
＜ＰＬＣ２におけるフロー＞
図１０は第１実行部７０が実行する処理を示すフローチャートである。Ｓ１で操作部６からラダープログラム７６の実行が指示されると、ＣＰＵ１０（第１実行部７０）は、ラダープログラム７６の実行を開始する。Ｓ２で第１実行部７０は、ラダープログラム７６から一つずつ順番に命令語を読み出す。Ｓ３で第１実行部７０は読み出した命令語がＣ言語プログラム７７を呼び出すための命令語であるかどうかを判定する。読み出した命令語がＣ言語プログラム７７を呼び出すための命令語でなければＳ４に進む。Ｓ４で第１実行部７０は読み出した命令語を実行してＳ２に戻り、次の命令語を読み出す。一方で、読み出した命令語がＣ言語プログラム７７を呼び出すための命令語であればＳ５に進む。Ｓ５で第１実行部７０は、呼び出し管理デバイス７８のデバイス値を、Ｃ言語プログラム７７の実行を意味する値に変更する。呼び出し管理デバイス７８がビットデバイスであれば、“１”はＣ言語プログラム７７の実行を意味し、“０”はＣ言語プログラム７７の非実行を意味する。Ｓ６で第１実行部７０はラダープログラム７６によって定義されている引数を引数デバイス７９に設定する（格納する）。Ｓ５とＳ６とはほぼ同時に実行されてもよいし、Ｓ６が先に実行されてもよい。その後、Ｓ２に戻り、第１実行部７０はラダープログラム７６を中断せずに継続して実行し、次の命令語を読み出す。
【００４５】
このように第１実行部７０は呼び出し管理デバイス７８を通じてラダープログラム７６からＣ言語プログラム７７を呼び出す（起動する）ことができる。また、第１実行部７０は引数も引数デバイス７９を通じてＣ言語プログラム７７に渡すことができるようになる。
【００４６】
図１１は第２実行部７１が実行する処理を示すフローチャートである。Ｓ１１で第２実行部７１は呼び出し管理デバイス７８のデバイス値を参照する。Ｓ１２で第２実行部７１は第１実行部７０（つまり、ラダープログラム７６）からＣ言語プログラム７７が呼び出されているかどうかを判定する。たとえば、第２実行部７１は呼び出し管理デバイス７８のデバイス値がＣ言語プログラム７７を実行することを意味するデバイス値になっているかどうかを判定する。Ｃ言語プログラム７７が呼び出されていれば、Ｓ１３に進む。Ｓ１３で第２実行部７１は引数デバイス７９を参照し、引数を示すデバイス値を取得する。Ｓ１４で第２実行部７１は引数にしたがってＣ言語プログラム７７を実行する。なお、引数デバイス７９がワードデバイスであれば、複雑なデータを引数として渡すことが可能となる。引数の数に応じて、複数の引数デバイス７９が用意されてもよい。
【００４７】
＜ラダープログラムの一例＞
図１２はラダープログラム７６のうちＣ言語プログラム７７を呼び出す命令語の一例を示す図である。この例ではデバイスの一つであるＤＭ１０００のデバイス値が１００になると、ＭＳＴＲＴという命令語が実行される。ＭＳＴＲＴはメモリカードの読み込み処理を実行するＣ言語プログラム７７（ＬＯＡＤＭＥＭＣＡＲＤ）を呼び出すため命令語である。ＭＳＴＲＴは、たとえば、５つの引数をＣ言語プログラム７７に渡すことができる。この例では完了フラグ、進捗状況、エラーフラグ、エラー番号および中断フラグがデバイスを通じてＣ言語プログラム７７に渡される。完了フラグはＭＲ０００というデバイスに割り付けられており、Ｃ言語プログラム７７が完了したかどうかを示す。進捗状況はＥＭ１００というデバイスに割り付けられており、メモリカードの読み込み処理が何％完了したかを示している。エラーフラグはＭＲ００１というデバイスに割り付けられており、メモリカードの読み込み処理中にエラーが発生したかどうかを示す。エラー番号はＥＭ１０１というデバイスに割り付けられており、メモリカードの読み込み処理中に発生したエラーの種類を示す。中断フラグはＭＲ００２というデバイスに割り付けられており、メモリカードの読み込み処理がユーザによって中断されたかどうかを示す。
【００４８】
図１２によれば、第１実行部７０は完了フラグＭＲ０００がオンとなったことを検知すると、Ｃ言語プログラム７７が完了したと認識し、エラーフラグＭＲ００１がオンかオフかに応じた処理を実行する。たとえば、エラーフラグＭＲ００１がオンであれば、第１実行部７０はＤＭ１０００に９９９を代入するとともに、エラー番号をＤＭ１００１に代入し、エラー番号を表示部５に表示する。また、完了フラグＭＲ０００がオフであれば、第１実行部７０は進捗状況ＥＭ１００のデバイス値をＤＭ１０に代入し、表示部５に進捗状況を表示する。
【００４９】
図１３はＣ言語プログラム７７の一例を示す図である。Ｐ１の部分では、上述した５つの引数が定義されている。OPE_CMP(0)は完了フラグである。OPE_PRG(1)は進捗状況を示す変数である。OPE_ERR_FLG(2)はエラーフラグである。OPE_ERR_NO(3)はエラー番号を示す変数である。OPE_CANCEL(4)は中断フラグである。
【００５０】
Ｐ２の部分にはメモリカードをオープンするためのコードが含まれている。該当する名称のファイルが存在しなければ、第２実行部７１は、エラー番号に−５を設定し、エラーフラグにはエラーの発生を意味する１を設定し、完了フラグにはＣ言語プログラム７７の完了を示す１を設定する。
【００５１】
Ｐ３にはファイルサイズが最大バッファサイズを超えないかどうかを判定するコートが記載されている。この例では、ファイルサイズが最大バッファサイズを超えていると、第２実行部７１はエラー番号に−６を設定し、エラーフラグを１に設定し、終了フラグを１に設定する。
【００５２】
Ｐ４には２５６バイトずつデータを読み込む処理が記載されている。この例では、ユーザまたはラダープログラムによって中断が指示されると、第２実行部７１はＣ言語プログラム７７を中断（例えばbreak）する。この例で、第２実行部７１は、読み出しの完了したデータサイズiCurPosとファイルの全体サイズiSizeとから進捗状況（％）を算出し、進捗状況を示すOPE_PRGに代入している。
【００５３】
Ｐ５ではメモリカードをクローズし、完了フラグに１を設定するコードが記述されている。
【００５４】
このようにＣ言語プログラム７７を実行する上で必要となる引数は引数デバイスを通じてラダープログラム７６（第１実行部７０）からＣ言語プログラム７７（第２実行部７１）に渡すことが可能となる。
【００５５】
＜デバッグ＞
図７（Ａ）に示したようなラダープログラムとＣ言語プログラムとが同期して実行されるシステムでは、一方のプログラムを停止させると、他方のプログラムも停止させることになる。つまり、ラダープログラムを停止させずに実行させておき、それと並行してＣ言語プログラムについてデバッグを実行したり、また、Ｃ言語プログラムを実行しながらラダープログラムをデバッグしたりすることができなかった。
【００５６】
一方、図７（Ｂ）に示したように本実施の形態ではラダープログラムとＣ言語プログラムとが非同期で実行される。つまり、一方を実行したまま並列に他方のデバッグを実行することが用意である。そこで、デバッグの機能について説明する。
【００５７】
図１４はデバッガ（デバッグ装置）の処理を示すフローチャートである。このではプログラム作成支援装置１がデバッグ装置として機能する。プログラム作成支援装置１とは別にデバッグ装置が実装されてもよい。
【００５８】
Ｓ１５でプログラム作成支援装置１のデバッグ部８４は、ラダープログラム７６またはＣ言語プログラム７７などのユーザプログラムを表示部７に表示する。Ｓ１６でデバッグ部８４は操作部８から入力された指示にしたがってユーザプログラムにブレークポイントを設定する。Ｓ１７でデバッグ部８４はブレークポイントを基本ユニット３のデバッグ制御部７４に通知する。
【００５９】
デバッグ制御部７４はデバッグ部８４から通知されたブレークポイントをユーザプログラムに設定する。たとえば、デバッグ制御部７４はユーザプログラムの一部を書き換えることでブレークポイントをユーザプログラムに設定する。デバッグ制御部７４は、デバッグ部８４からデバッグの開始を指示されると、書き換えたユーザプログラムであるラダープログラム７６またはＣ言語プログラム７７を第１実行部７０または第２実行部７１に実行させる。
【００６０】
第１実行部７０は第２実行部７１においてＣ言語プログラム７７のデバッグが実行されている間も、ラダープログラム７６を継続的に実行する。同様に、第２実行部７１は第１実行部７０においてラダープログラム７６のデバッグが実行されている間も、Ｃ言語プログラム７７を継続的に実行する。ブレークポイントに到達すると、ブレークイベントが発生する。
【００６１】
＜グラフィカルプログラミング言語で記述されたユーザプログラム＞
ここでは、グラフィカルプログラミング言語で記述されたユーザプログラムの他の例としてフロープログラムについて説明する。
【００６２】
図１５はフロープログラムの一例を示している。フロープログラムは、モーションフローなどのフロー言語で記述され、たとえばモーションユニットなどの拡張ユニット４で使用されることがある。モーションユニットは、主に製品や検査対象物の位置決めを実行するユニットである。この例では、モーションユニットが原点への復帰と位置決め制御を実行するのと並行し、サブルーチンとして高級言語で記述されたプログラム（例：Ｃ言語で記述されたPREPARENEXT）が呼び出されて実行される。PREPARENEXTは、たとえば、段取り替え準備処理を実行するためのプログラムである。段取り替えとは、ラインを搬送される製品が変更されたり、工程内容が変更されたりしたときに必要となる段取り作業のことである。第２実行部７１は、フロープログラムからサブルーチンとしてＣ言語プログラムを呼び出すが、Ｃ言語プログラムの終了を待たずにフロープログラムの次の命令語を実行する。
【００６３】
図１６はフロープログラムから呼び出されるＣ言語プログラムの一例を示す図である。この例ではＣ言語プログラムはメモリカードの読み込み処理を実行するためのプログラムである。Ｐ１０ではメモリカードを読み込むためのBOOL型の関数が定義されている。Ｐ１１はＣ言語プログラムの使用部分であり、メモリカードを読み込むための関数を実行するためのコードが含まれている。Ｐ１２では段取り替え処理のためのデータがモーションユニット内のバッファメモリに書き込まれている。たとえば、製造工程における製品がワークＡからワークＢに代えられると、モーションユニット内のバッファメモリには、メモリカードから読み出されたワークＢのデータが書き込まれる。
【００６４】
＜通信ユニットのプログラミング＞
図１７（Ａ）は通信ユニット用のグラフィカルプログラミング言語で記述されたユーザプログラムの一例である。図１７（Ｂ）は通信ユニット内で実行されるＣ言語プログラムの一例である。ここでは、Ｃ言語で記述された通信プログラムは通信データの圧縮処理を行うプログラムである。
【００６５】
図１７（Ａ）が示すようなＧＵＩを通じてプログラム作成支援装置１では、通信プログラムを設定するためのプログラミングが実行される。このグラフィカルプログラミング言語で記述されたユーザプログラムは、コマンドの名称（圧縮データ通信）、通信形態（例：イベント）、開始デバイス、完了デバイス、サイズ、データデバイスなどを設定する。つまり、第１実行部７０は、プログラム作成支援装置１から転送されてきたグラフィカルプログラミング言語で記述されたユーザプログラムを実行し、これらの設定データを第２実行部７１で実行される通信プログラムに設定する。第２実行部７１は、これらの特定のデバイスを監視し、設定データにしたがって通信プログラムを実行する。通信プログラム（第２実行部７１）は開始デバイスであるＵＧ１０００をポーリングで監視し、そのデバイス値が０でなければデータを送信する。送信されるデータは、データデバイスであるＵＧ１００４以降のデバイス値で設定される。送信対象となるデータを格納しているデバイスの数はサイズデバイスであるＵＧ１００２で指定される。ＵＧ１００１は送信対象のデータの送信が完了したかどうかを示している。
【００６６】
図１７（Ｂ）において、Ｐ１５は通信データを圧縮する圧縮アルゴリズムを呼び出すためのコード部分である。圧縮アルゴリズムはどのようなものが採用されてもよいため、記述していない。Ｐ１６にはメモリカードから読み出したデータを圧縮し、データを送信するためのコードが記載されている。Ｐ１７には開始デバイスであるＵＧ１０００が０でなければ、データの圧縮と送信を実行する、といったコードが記述されている。つまり、開始デバイスは上述した呼び出し管理デバイスとして機能している。
【００６７】
＜まとめ＞
以上説明したように、本実施形態は、ユーザプログラムを繰り返し実行するプログラマブル・ロジック・コントローラに適用可能である。たとえば、本実施形態は、ＰＬＣ２の基本ユニット３や拡張ユニット４（たとえば通信ユニットやモーションユニット）などに適用可能である。とりわけ、本実施形態では、グラフィカルプログラミング言語で記述されたユーザプログラムである第１プログラム（ここでは一例としてラダープログラム７６とした）を実行する第１実行部７０と、高級プログラミング言語で記述された第２プログラム（ここでは一例としてＣ言語プログラム７７とした）を実行する第２実行部７１とが設けられている。つまり、第１プログラムと第２プログラムとは並列に実行可能である。このように非同期で第１プログラムと第２プログラムとを実行する場合、どのように第１プログラムから第２プログラムを呼び出すかについて工夫が必要となる。本実施形態では、ラダープログラム７６からＣ言語プログラム７７が呼び出されたかどうかを示す呼出情報を情報記憶手段（例：呼び出し管理デバイス７８）が記憶する。さらに、第１実行部７０は、ラダープログラム７６に含まれている命令語であってＣ言語プログラム７７を呼び出す命令語（例：ＭＳＴＲＴ）を実行すると、ラダープログラム７６からＣ言語プログラム７７が呼び出されたことを示すように呼出情報（例：呼び出し管理デバイス７８に記憶されているデバイス値）を変更する。第２実行部７１は、呼び出し管理デバイス７８のデバイス値がラダープログラム７６からＣ言語プログラム７７が呼び出されたことを示すデバイス値へと変更されると、Ｃ言語プログラム７７を実行する。このように情報記憶手段である呼び出し管理デバイス７８は、第１実行部７０と第２実行部７１との双方からアクセス可能であるため、呼出情報を簡易な構成により伝達できるようになる。このように、本実施形態では、グラフィカルプログラミング言語で記述されたユーザプログラムである第１プログラムを実行する第１実行部７０と、高級プログラミング言語で記述された第２プログラムを実行する第２実行部７１とが設けられているため、第１プログラムと第２プログラムを並列に実行することが可能となり、スキャンタイムが延びにくくなる。
【００６８】
図８を用いて説明したように、記憶装置１２は、ラダープログラム７６と、高級プログラミング言語で記述された複数のＣ言語プログラム７７とを記憶するプログラム記憶手段として機能する。呼び出し管理デバイス７８は、複数のＣ言語プログラム７７に対して一対一で対応した複数の呼出情報を記憶してもよい。なお、複数の呼び出し管理デバイス７８が設けられてもよい。この場合、呼び出し管理デバイス７８とＣ言語プログラム７７とが一対一で関連付けられることになろう。第２実行部７１は、複数の呼出情報のうちいずれかの呼出情報がＣ言語プログラム７７の呼び出しを示すようになると、当該呼出情報に対応したＣ言語プログラム７７を実行する。このように高級プログラミング言語で記述された複数の第２プログラムが存在する場合であっても、それぞれの呼出情報を記憶することで、グラフィカルプログラミング言語で記述された第１プログラムは、複数の第２プログラムを区別して適切に呼び出すことが可能となる。
【００６９】
第１実行部７０は、呼出情報を通じてＣ言語プログラム７７の実行を第２実行部７１に開始させると、Ｃ言語プログラム７７の終了を待たずにラダープログラム７６を継続して実行する。このように第１プログラムと第２プログラムとを並列実行することに加え、第１プログラムが第２プログラムの終了を待たずに実行を継続することで、スキャンタイムの延びをさらに削減できるようになろう。
【００７０】
図８を用いて説明したように引数デバイス７９は第１実行部７０と第２実行部７１との双方からアクセス可能な記憶装置であるデバイスメモリの一例である。第１実行部７０と第２実行部７１は引数を、デバイスメモリを通じて交換する。このようにプログラマブル・ロジック・コントローラに特有の技術であるデバイスメモリを活用することで、第１プログラムと第２プログラムとの間で容易に引数を交換することが可能となる。
【００７１】
図１４を用いて説明したように、第１実行部７０は、ラダープログラム７６に設定されたブレークポイントに応じてラダープログラム７６をブレークする。第２実行部７１は、ラダープログラム７６がブレークしていても継続してＣ言語プログラム７７を実行する。本実施形態では、第１プログラムと第２プログラムとを並列かつ非同期で実行可能としているため、第１プログラムをブレークしても、第２プログラムの実行を継続できるようになる。
【００７２】
図８や図１４を用いて説明したように、デバッグ制御部７４は、ＰＬＣ２に接続されたプログラム作成支援装置１などのデバッグ装置からの指示に応じて、ラダープログラム７６に設定されたブレークポイントでブレークが発生するようラダープログラム７６を書き換えるプログラム書き換え手段として機能してもよい。これによりデバッグに必要な部分だけを書き換えればデバッグを実行できるようになるため、プログラム作成支援装置１からＰＬＣ２に対して第１プログラムの全体を転送する手間を省けるようになる。
【００７３】
第２実行部７１は、Ｃ言語プログラム７７に設定されたブレークポイントに応じてＣ言語プログラム７７をブレークしても、第１実行部７０は、継続してラダープログラム７６を実行してもよい。つまり、本実施形態では、第２プログラムをブレークしても、第１プログラムの実行を継続できるようになる。
【００７４】
図８や図１４を用いて説明したように、デバッグ制御部７４は、ＰＬＣ２に接続されたプログラム作成支援装置１などのデバッグ装置からの指示に応じて、Ｃ言語プログラム７７に設定されたブレークポイントでブレークが発生するようＣ言語プログラム７７を書き換えるプログラム書き換え手段として機能してもよい。これによりデバッグに必要な部分だけを書き換えればデバッグを実行できるようになるため、プログラム作成支援装置１からＰＬＣ２に対して第２プログラムの全体を転送する手間を省けるようになる。なお、デバッグ制御部７４やデバッグ部８４は、第１プログラムと第２プログラムとで別々に設けられてもよい。
【００７５】
図９などを用いて説明したように、ラダープログラム７６とＣ言語プログラム７７は、ＰＬＣ２に接続可能なプログラム作成支援装置１において作成されてＰＬＣ２に転送されてもよい。なお、ラダープログラム７６を作成するプログラム作成支援装置と、Ｃ言語プログラム７７を作成するプログラム作成支援装置とは同一の装置であってもよいし、別の装置であってもよい。
【００７６】
図９に関して説明したように、Ｃ言語プログラム７７などの第２プログラムは、プログラム作成支援装置１において、ＰＬＣ２が備える機能（例：メモリカードの読み込み機能、位置制御機能、通信機能など）を制御するためのインタフェースを定義したファイル群（例：定義ファイル８５）と高級プログラミング言語で記述されたソースプログラムとから実行形式のプログラムとして生成されてもよい。このように第２プログラムはプログラム作成支援装置１においてオブジェクトコードとして作成されてもよい。なお、基本ユニット３におけるメモリカードの読み込み機能やモーションユニットの位置制御機能、ネットワーク通信ユニットの通信機能についての制御プログラムは、グラフィカルプログラミング言語よりも高級プログラミング言語が向いている。つまり、高級プログラミング言語は、簡素で容易にこれらの制御プログラムを記述できるからである。
【００７７】
このように、プログラマブル・ロジック・コントローラが備える機能は、ＰＬＣ２の基本ユニット３が備える機能（例：メモリカードの読み込み機能）または当該基本ユニット３に接続された拡張ユニットが備える機能（例：位置制御機能、通信機能など）であってもよい。つまり、本実施形態に記載された技術的思想は、一般に、プログラマブル・ロジック・コントローラに適用可能であり、より具体的には、基本ユニット３や拡張ユニット４に適用可能である。
【００７８】
上述した実施形態では基本ユニット３に第１実行部７０と第２実行部７１とが実装されるものとして説明した。しかし、拡張ユニット４に第１実行部７０と第２実行部７１とが実装されてもよい。また、第１実行部７０と第２実行部７１とは基本ユニット３の外部に設けられるユニット外部バス９０を介さずに、基本ユニット３の内部に設けられるユニット内部バス９１を介して通信可能に構成されてもよい。なお、拡張ユニット４に第１実行部７０と第２実行部７１とが実装される場合も、第１実行部７０と第２実行部７１とは拡張ユニット４の内部に設けられたユニット内部バス９１を介して通信する。なお、第１実行部７０と第２実行部７１とがそれぞれ異なるユニットに存在すると、これらは外部バスを介して通信しなければならない。外部バスの通信状況によっては処理スピード遅延の虞もある。また、通信コマンドの生成や送信など処理の煩雑化を招くだろう。これはＰＬＣ２の全体として動作のボトルネックを招きかねない。よって、第１実行部７０と第２実行部７１とを同一の筐体内に設けることで、他の筐体への通信コマンドを生成する必要がなくなる。これは、通信処理を簡素化することになり、処理スピードが向上しよう。
【図１】
0006484015.tif 000002
【図２】
0006484015.tif 000003
【図３】
0006484015.tif 000004
【図４】
0006484015.tif 000005
【図５】
0006484015.tif 000006
【図６】
0006484015.tif 000007
【図７】
0006484015.tif 000008
【図８】
0006484015.tif 000009
【図９】
0006484015.tif 000010
【図１０】
0006484015.tif 000011
【図１１】
0006484015.tif 000012
【図１２】
0006484015.tif 000013
【図１３】
0006484015.tif 000014
【図１４】
0006484015.tif 000015
【図１５】
0006484015.tif 000016
【図１６】
0006484015.tif 000017
【図１７】
0006484015.tif 000018