(57)【特許請求の範囲】
【請求項１】
ユーザプログラムを格納する記憶手段と、
その記憶手段に格納されたユーザプログラムを実行する演算手段として、予め決められた命令を高速に実行するＡＳＩＣと、そのＡＳＩＣが実行できない命令を実行するＭＰＵと、
を備えた産業用コントローラであって、
前記ユーザプログラムを構成する各命令のオブジェクトコードは、ＭＰＵからの停止依頼を無視するか否かを特定するＡＳＩＣ停止無視ビットを有し、
前記ＭＰＵは、割り込みプログラムを実行するに際し、前記ＡＳＩＣに対して停止依頼を発行し、ＡＳＩＣが停止したのを確認したことを条件に前記割り込みプログラムを演算実行し、その演算実行が終了した場合に前記ＡＳＩＣに対して実行依頼を通知する機能を備え、
前記ＡＳＩＣは、前記ＭＰＵからの停止依頼を受信すると、処理対象の命令のオブジェクトコードの前記ＡＳＩＣ停止無視ビットを確認し、そのＡＳＩＣ停止無視ビットがＯＮの場合には当該命令を実行し、そのＡＳＩＣ停止無視ビットがＯＦＦの場合には停止する機能を備え、
前記記憶手段に格納されたＡＳＩＣが実行可能な命令のうち、実行順番が連続した複数の命令の前記ＡＳＩＣ停止無視ビットがＯＮに設定されるように構成したことを特徴とする産業用コントローラ。
【請求項２】
ＡＳＩＣが実行可能な命令を複数組み合わせることによって、１つの命令が構成される場合において、
前記記憶手段に格納された当該１つの命令を構成するためのＡＳＩＣが実行可能な複数の命令の先頭から、最終までに記述された各命令のＡＳＩＣ停止無視ビットは、全てがＯＮに設定されていることを特徴とする請求項１に記載の産業用コントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＭＰＵとＡＳＩＣとによりユーザプログラムを演算実行する産業用コントローラに関するもので、より具体的には、ＭＰＵからの割り込みを禁止する機能の改良に関する。
【背景技術】
【０００２】
ＦＡ（Ｆａｃｔｏｒｙ  Ａｕｔｏｍａｔｉｏｎ）におけるネットワークシステムは、生産設備内の入力機器及び出力機器の制御を司る１または複数のＰＬＣ（Programmable Logic Controller）と、そのＰＬＣにより動作が制御される機器とが、制御系のネットワークに接続される。それらＰＬＣと機器は、その制御系のネットワークを介してサイクリックに通信を行なうことで、ＩＮデータ及びＯＵＴデータ（以下Ｉ／Ｏデータという）の送受を行ない、生産設備を制御する。
【０００３】
ＰＬＣは、制御プログラムに基づいて演算実行するＣＰＵユニット、センサやスイッチなどの入力機器を接続してそれらのオン・オフ信号を入力信号として取り込む入力ユニット、アクチュエータやリレーなどの出力機器を接続してそれらに対して出力信号を送り出す出力ユニット、ネットワークに接続された他の装置とデータの送受を行なう通信ユニット、マスタスレーブ通信をするためのマスタユニット、各ユニットに電源を供給する電源ユニット、などの複数のユニットを組み合わせることにより構成されている。これらのユニットは、内部バスにより電気的に接続され、その内部バスを介して所定のユニット間でデータの送受を行なう。
【０００４】
このＣＰＵユニットは例えば、ＩＮデータである入力機器のＯＮ信号またはＯＦＦ信号を入力し、入力したＯＮ／ＯＦＦ情報をユーザプログラムによって論理演算し、演算結果であるＯＵＴデータを出力機器へ出力する。その出力が出力機器に対する動作指示となって出力機器が動作するといった処理をサイクリックに繰り返し実行することにより、生産設備を制御する。
【０００５】
ところで、この種のＰＬＣの場合、上述したサイクリックに繰り返し実行する処理に加えて、優先度の高い割り込みプログラムを実行する機能を備えている。すなわち、たとえば、ＰＬＣのＣＰＵユニットは、“共通処理”→“ユーザプログラムの演算実行処理”→“Ｉ／Ｏリフレッシュ”→“周辺処理”を繰り返し実行するが、このいずれかの処理の実行中に割り込みが発生すると、その処理中の動作を一時停止し、割り込みタスクが実行される。そして、その割り込みタスクの実行が完了すると、一時停止していた処理を再開し、サイクリックな処理を継続する。
【０００６】
図１は、ユーザプログラムの演算実行処理中に割り込みが発生した場合を示している。図１（ａ）に示すように、たとえば演算実行処理は、複数のサイクル実行タスクを１番から順番に実行する。サイクル実行タスクは、常時実行されるプログラムである。サイクル実行タスクｎの処理中に、定時割込み用のタイマのアップや、電断割込み発生の原因となる外部電源の不良等の所定の割り込み要因ｍが発生した場合、図１（ｂ）に示すように、サイクル実行タスクｎは一時停止し、優先度の高いプログラムである割り込みタスクｍが実行される。その割り込みタスクｍが終了すると、割り込みにより停止していたサイクル実行タスクｎの実行が再開される。このようにＰＬＣにおいて割り込み命令を実行することについては、例えば特許文献１等に開示されている。
【０００７】
ＰＬＣの制御プログラムを記述する場合、ひとつのブロックデータを複数の命令で読み書きするケースがある。図２（ａ）は、サイクル実行タスクｎのプログラムの一例を示している。図２（ａ）に示すように、ＭＯＶ命令を順次実行することにより、ＩＯメモリ中の“ＤＭ１０００”，“ＤＭ１００１”，“ＤＭ１００２”のアドレスに対応する領域に“００００”が書き込まれる。これにより、このプログラムの実行前のＩＯメモリに格納された値が図２（ｂ）に示すようになっていた場合、プログラム実行後は図２（ｃ）のようになり、ゼロクリアされる。
【０００８】
図３に示すように、ＤＭ１０００に対するＭＯＶ命令を実行後、ＤＭ１００１に対するＭＯＶ命令の実行前に割り込みが発生し、割り込み実行タスクｍが実行されたとする。すると、一時停止された状態では、ＤＭ１０００には“００００”が書き込まれてゼロクリアされるものの、ＤＭ１００１，ＤＭ１００２については、“００００”が書き込まれる前の状態となる。つまり、本来は、“ＤＭ１０００”，“ＤＭ１００１”，“ＤＭ１００２”の３つの領域が同時にゼロクリアされるべきところ、その一部のみが先行してゼロクリアされた状態で一時停止されてしまう（図４（ａ）参照）。
【０００９】
このとき、図３に示すように、優先度の高いプログラムである割り込み実行タスクｍが、一時停止されたサイクル実行タスクの書き込み対象のブロックデータと同じブロックデータ（図示の例では、“ＤＭ１０００”，“ＤＭ１００１”）を読み出すようになっていると、ブロックデータの同一性が取れないという問題を生じる。すなわち、図４（ｂ）に示すように、割り込み実行タスクｍ中の“ＭＯＶ，ＤＭ１０００，ＤＭ２０００”を実行すると、ＤＭ１０００はすでにゼロクリアされているので、ＤＭ２０００には“００００”が書き込まれる。次いで、割り込み実行タスクｍ中の“ＭＯＶ，ＤＭ１００１，ＤＭ２００１”を実行すると、“ＤＭ１００１”はゼロクリアされていないので、“ＤＭ１００１”のゼロクリアされる前の値（例えば“５６７８”）が書き込まれる。つまり、割り込み実行タスクｍを終了した状態では、その割り込み実行タスクｍにより書き込まれるＤＭ２０００，ＤＭ２００１には、ともに、サイクル実行タスクｎにてゼロクリアされた値か、ゼロクリアされる前の値で統一されているという同一性を満たす必要があるが、上記のケースでは、同一性が得られない。なお、上記の割り込み実行タスクｍの終了後は、一次停止していたサイクル実行タスクｎの２つのＭＯＶ命令を順次実行する（図４（ａ）参照）。その結果、サイクル実行タスクｎの実行前後で、ＩＯメモリに格納されたデータは、例えば、図４（ｂ）に示すようになる。上述したように、本来であれば、実行後のＤＭ２０００とＤＭ２００１の値は、ともに“００００”となっているか、ＤＭ１０００，ＤＭ１００１のゼロクリア前の値（ＤＭ２０００＝“１２３４”，ＤＭ２００１＝“５６７８”）が格納されて同一性が保持される必要があるが、そのようになっていない。
【００１０】
このような現象の発生を防止するため、従来は、図５（ａ）に示すように、ブロックデータを操作する命令郡を“割込み禁止命令”と“禁止解除命令”で囲む必要があった。この割り込み禁止命令から禁止解除命令の間は、外部から割り込み命令があっても割り込み実行タスクを実行せず、禁止解除命令の後で、該当する割り込み実行タスクｍを実行するように動作する（図６参照）。
【特許文献１】特開２００１−９２５０５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上述した“割込み禁止命令／禁止解除命令”を用いることで、図３，図４に示す問題は解消される。しかし、この方法では、以下に示す問題がある。すなわち、ＣＰＵユニットは、ＭＰＵとＡＳＩＣの２種類の演算実行部を備え、プログラムを構成する命令の種類に応じてＭＰＵとＡＳＩＣを使い分けている。ＡＳＩＣで処理する命令は、一般的に単純な処理が多いが、高速に処理することができるという特徴がある。一方、ＭＰＵで処理する命令は、複雑な処理ができるが、低速になるという特徴がある。通常、ユーザプログラムのうち、９５%以上はＡＳＩＣで処理する命令で組まれており、これにより、ＰＬＣは高速な処理を行うことができるようになっている。
【００１２】
係るＭＰＵとＡＳＩＣの２種類の演算実行部によるプログラムの処理は、以下のようになっている。図７に示すように、（１）まず、ＭＰＵは、ＡＳＩＣに対して命令実行を指令する。これを受けて、ＡＳＩＣは、プログラムを構成する命令を、先頭から順次実行する。
【００１３】
（２）ＡＳＩＣは、自身が知らない命令（処理できない命令＝ＭＰＵで処理すべき命令）を発見すると停止し、ＭＰＵに実行権を渡す。換言すると、ＡＳＩＣは、自身が知っている（実行可能な）命令が継続している限り、当該命令を順次実行する。そして、ＡＳＩＣは、処理できない命令になると、停止する。
【００１４】
（３）ＭＰＵは、ＡＳＩＣの動作状況を監視しており、ＡＳＩＣが停止すると、ＭＰＵはその原因を検出し、ＡＳＩＣが処理できない（ＭＰＵが処理する）命令のために停止していることがわかると、ＭＰＵ自身でその命令を実行する。図７に示す場合、ＭＰＵは、割り込み禁止命令を実行する。つまり、自己に割り込みマスクを設定し、外部から割り込み命令を受信しても、ＭＰＵは当該割り込み命令を検知しないようになる。なお、係る割り込み命令自体は待機状態でＣＰＵユニットに保持されているので、割り込みマスクが解除された場合には、ＭＰＵはその割り込みを検知することができる。
【００１５】
（４）ＭＰＵは、自己が行なうべき命令を実行したならば、再びＡＳＩＣに命令実行を依頼する。これを受けて、ＡＳＩＣは、自己が処理可能な命令を順次実行する。従って、図７に示す例では、ＡＳＩＣは、“ＭＯＶ，＃００００，ＤＭ１００２”までの命令を一気に処理する。
【００１６】
（５），（６）処理対象の命令が、“割り込み禁止解除命令”になると、ＡＳＩＣは処理できない命令であるので、停止する。それを受けてＭＰＵは、割り込み禁止解除命令を実行し、自己に設定した割り込みマスクを解除する。よって、これ以降、ＭＰＵは、割り込みを検知することができる。従って、ＭＰＵは、係る割り込みを検知した場合、対応する割り込みタスクの命令を実行する。
【００１７】
（７）ＭＰＵは、自己が行なうべき命令（割り込み禁止解除命令）を実行したならば、再びＡＳＩＣに命令実行を依頼する。これを受けて、ＡＳＩＣは、自己が処理可能な命令を順次実行する。
【００１８】
一方、ＭＰＵとＡＳＩＣの２種類の演算実行部による割り込みプログラムの実行処理は、以下のようになっている。図８（ａ）に示すように、ＡＳＩＣが、サイクル実行タスクの命令を逐次実行しているとする。また、上述したように、ＭＰＵは、割り込み禁止命令を処理して割り込みマスクを自己に設定するので、ＭＰＵは、割り込みマスクを設定している間は割り込みがあったことを検知できない。そこで、（１１）ＭＰＵは、図９の処理ステップＳ１からＳ３を適宜実行することで、割り込みマスクが解除された状態で割り込みを検知する。
【００１９】
（１２）割り込みを検知したＭＰＵは、ＡＳＩＣに対して命令実行の停止を依頼する（Ｓ４）。（１３）ＡＳＩＣは、停止依頼を受けると、通常、遅滞なく命令実行を中断し、停止する。そこで、ＡＳＩＣの動作を監視しているＭＰＵは、ＡＳＩＣが停止したかを確認する（Ｓ４）。
【００２０】
（１４）ＡＳＩＣが停止したことを確認したＭＰＵは、取得した割り込み通知に対応する割り込みプログラム（割り込みタスク）の命令を順次実行する（Ｓ６）。（１５）そして、ＭＰＵは、割り込みプログラムを最後まで実行したならば、ＡＳＩＣに対して命令実行を依頼する（Ｓ７）。（１６）この依頼を受けたＡＳＩＣは、停止していた箇所から命令を再開する（Ｓ８）。
【００２１】
なお、割り込みマスクがセットされている場合、処理ステップＳ１の分岐判断はＮｏとなるので、ＭＰＵは割り込みを検知できない。その結果、図７（ｂ）に示すようにＭＰＵからＡＳＩＣに対して停止依頼が発行されず、ＡＳＩＣは命令を継続して実行する。よって、仮に、図５（ａ）に示すＭＯＶ命令を実行中にＣＰＵユニットが割り込みを受信したとしても、ＭＰＵはそれを知ることが無く、割り込み依頼が発行されないので、ＡＳＩＣは、３つのＭＯＶ命令を連続して実行することができる。
【００２２】
図５（ａ）に示すプログラムの場合、各命令を実行する演算処理部（ＭＰＵ／ＡＳＩＣ）は、図５（ｂ）に示すようになる。このように、通常、多くの命令が、ＡＳＩＣで実行される。但し、上述したように、ＭＰＵが実行をする場合には、一旦ＡＳＩＣが停止し、その停止をＭＰＵが検出し、ＡＳＩＣが実行できない命令（ＭＰＵが実行すべき命令）であることを認識すると、ＭＰＵが当該命令を実行し、その後ＡＳＩＣに対して再び命令実行を依頼する処理を行なう。従って、ユーザプログラム中にこれらのＭＰＵが実行すべき命令が存在すると、高速処理ができないＭＰＵ処理が発生するため、ＰＬＣの性能低下を招く。しかも、単に処理速度の遅いＭＰＵで処理することでの演算処理の遅れにとどまらず、上記のように、ＭＰＵへの切り替え並びにＡＳＩＣの再実行のためには、ＭＰＵで実行するＭＰＵとＡＳＩＣとの間での命令のやり取りや、ＭＰＵにおけるＡＳＩＣの停止原因の確認処理などの付随する処理が必要となり、その点でも速度の低下を招く要因となる。
【００２３】
さらには、従来の割り込み禁止をするための仕組みは、割込み禁止命令と割込み禁止解除命令をプログラム中に書く必要があったため、オブジェクト容量を占有していた。そのため、割り込み禁止する必要がある命令群が多くなるにつれて、当該割り込み禁止命令と割り込み禁止解除命令も増加し、オブジェクト容量の占有が無視できなくなる。
【００２４】
本発明は、割り込み禁止命令や割り込み禁止解除命令のようにＭＰＵが処理する命令を用いることなく、ＡＳＩＣ側で現在割り込み中か否かを判断し、割り込み禁止処理を実行することができる産業用コントローラを提供することにある。
【課題を解決するための手段】
【００２５】
上記の目的を達成するため、本発明に係る産業用コントローラは、（１）ユーザプログラムを格納する記憶手段と、その記憶手段に格納されたユーザプログラムを実行する演算手段として、予め決められた命令を高速に実行するＡＳＩＣと、そのＡＳＩＣが実行できない命令を実行するＭＰＵと、を備えた産業用コントローラであって、ユーザプログラムを構成する各命令のオブジェクトコードは、ＭＰＵからの停止依頼を無視するか否かを特定するＡＳＩＣ停止無視ビットを有し、ＭＰＵは、割り込みプログラムを実行するに際し、ＡＳＩＣに対して停止依頼を発行し、ＡＳＩＣが停止したのを確認したことを条件に割り込みプログラムを演算実行し、その演算実行が終了した場合にＡＳＩＣに対して実行依頼を通知する機能を備え、ＡＳＩＣは、ＭＰＵからの停止依頼を受信すると、処理対象の命令のオブジェクトコードのＡＳＩＣ停止無視ビットを確認し、そのＡＳＩＣ停止無視ビットがＯＮの場合には当該命令を実行し、そのＡＳＩＣ停止無視ビットがＯＦＦの場合には停止する機能を備え、前記記憶手段に格納されたＡＳＩＣが実行可能な命令のうち、実行順番が連続した複数の命令の前記ＡＳＩＣ停止無視ビットがＯＮに設定されるように構成した。ＡＳＩＣが備えた機能は、実施形態では、図１２に示すフローチャートを実行する機能により実現されている。記憶手段は、実施形態では、ユーザメモリ１２ｃに対応する。
【００２６】
この発明によれば、ＡＳＩＣは、ＭＰＵから命令実行を停止する停止依頼を受けたとしても、処理対象の命令のＡＳＩＣ停止無視ビットがＯＮであれば停止することなく当該命令を実行する。よって、その命令は、割り込みプログラムよりも先に実行されることになり、その間、割り込みが禁止される。そして、停止依頼を受けた後、最初にＡＳＩＣ停止無視ビットがＯＦＦになる命令が処理対象になったときに、ＡＳＩＣは停止し、それを検知したＭＰＵは、割り込みプログラムを実行する。よって、記憶手段に格納されたＡＩＳＣが実行する命令を実行順に配置した場合において、ＡＳＩＣ停止無視ビットがＯＦＦからＯＮに変わる箇所が、従来でいう割り込み禁止命令を挿入する箇所となり、ＡＳＩＣ停止無視ビットがＯＮからＯＦＦに変わる箇所が従来でいう割り込み禁止解除命令を挿入する箇所となる。そして、ＡＳＩＣの命令実行を停止するか否か（割り込みを受けるか禁止するか）の判断は、ＡＳＩＣ停止無視ビットを見たＡＳＩＣが行なう。このように、ＡＳＩＣ停止無視ビットを利用することで、ＡＳＩＣ側で割り込み禁止／割り込み禁止解除の判断が行なえ、高速な処理が実行できる。
【００２７】
さらに、記憶手段に格納されたＡＳＩＣが実行可能な命令のうち、実行順番が連続した複数の命令のＡＳＩＣ停止無視ビットがＯＮに設定されるように構成したので、実施形態で示すように、複数の領域を一括してゼロクリアするなどの割り込みを入れたくない処理部分の連続した複数の命令のＡＳＩＣ停止無視ビットをＯＮにすることで、ＡＳＩＣによる高速処理を行ないつつ、データの同時性等を確保できる。
【００２８】
（２）ＡＳＩＣが実行可能な命令を複数組み合わせることによって、１つの命令が構成される場合において、記憶手段に格納された当該１つの命令を構成するためのＡＳＩＣが実行可能な複数の命令の先頭から、最終までに記述された各命令のＡＳＩＣ停止無視ビットは、全てがＯＮに設定されているように構成できる。この発明は、実施形態では、例えば図１５を用いて説明したＳＵＭ値を求めるプログラムに対応する。
【００２９】
ここで、「ＡＳＩＣが実行可能な命令を複数組み合わせることによって、１つの命令が構成される」の「１つの命令」とは、ＡＳＩＣが実行可能な命令を複数組み合わせることによって構成されるひとつの処理という意味である。例えば、この「１つの命令」は、いわゆる関数のようなものでも良い。ＡＳＩＣ停止無視ビットを利用することで、従来は実質的にＭＰＵでの処理しかできなかったプログラムをＡＳＩＣによる高速処理により実現できるようになる。よって、産業用コントローラは、ユーザプログラムのさらなる高速処理が可能となる。
【発明の効果】
【００３０】
本発明では、ＡＳＩＣ側で現在割り込み中か否かを判断し、割り込み禁止処理を実行する。その結果、割り込み禁止命令や割り込み禁止解除命令のようにＭＰＵが処理する命令を用いる必要が無く、高速実行が可能であるとともに、オブジェクト容量が不用意に多くなるのを防止できる。
【発明を実施するための最良の形態】
【００３１】
図１０は、本発明に係る産業用コントローラの好適な一実施形態を示している。本実施形態のＰＬＣ１０は、複数のユニットを連結して構成されるビルディングブロックタイプである。ＰＬＣ１０は、電源供給源の電源ユニット１１，ＰＬＣ全体の制御を統率するＣＰＵユニット１２，ＦＡの生産装置や設備装置の適所に取り付けたスイッチやセンサの信号を入力する入力ユニット１３，アクチュエータなどに制御出力を出す出力ユニット１４，通信ネットワークに接続するための通信ユニット１５などの各種のユニットを適宜組み合わせて構成される。ＰＬＣ１０を構成する各ユニットは、上記のものに限ることはなく、適宜増減することができる。
【００３２】
また、図示の例では、通信ユニット１５に接続された通信ネットワーク１経由でプログラム開発支援装置２と接続される。プログラム開発支援２との接続形態は、図示のものに限ることはなく、プログラム開発支援２とＣＰＵユニット１２を直接通信用ケーブルで接続する場合もある。
【００３３】
ＣＰＵユニット１２は、例えば、電源ユニット１１へ電源供給する外部電源が不良となった（電圧が所定値を下回った）場合に電源ユニット１１から割込み通知を受けたりする（電断割込み）。また、ＣＰＵユニット１２が備えているにタイマにより一定時間ごとに割込み通知が発生する場合もある（定時割込み）。
【００３４】
図１０（ｂ）は、ＣＰＵユニット１２の内部構造の一例を示している。ＣＰＵユニット１２は、ＭＰＵ１２ａと、ＡＳＩＣ１２ｂと、ユーザプログラムを格納するユーザメモリ１２ｃと、Ｉ／Ｏデータとパラメータを格納するＩ／Ｏメモリ１２ｄと、ＭＰＵ１２ａが演算実行する際に使用するワークメモリ１２ｅと、システムソフトウェアを格納するフラッシュメモリ１２ｆと、ユーザプログラムをバックアップするためのバックアップメモリ１２ｇと、を備える。バックアップメモリ１２ｇは、フラッシュメモリで構成されるため、電源ＯＦＦ時もその内容を保持する。ユーザメモリ１２ｃは、ＳＲＡＭで構成され、電源ＯＦＦ時は内容を保持することができないので、電源ＯＮ時にバックアップメモリ１２ｇからデータが転送されることでユーザプログラムを記憶保持する。Ｉ／Ｏメモリ１２ｄは、ＳＲＡＭで構成されるが、電源ＯＦＦ時はバッテリにより内容が保持される。
【００３５】
ＭＰＵ１２ａとＡＳＩＣ１２ｂは、ユーザプログラムをサイクリックに演算実行し、ネットワークシステムを構成する各機器の制御等を司る。また、ＭＰＵ１２ａは、ネットワークに接続された他の装置・機器に対してメッセージを送り、当該装置・機器に記憶保持された情報を収集したり、制御プログラム開発装置２からの要求（割り込み通知）に従い、Ｉ／Ｏメモリ１２ｄ等に対して読み書きしたりする。ＡＳＩＣ１２ｂは、ユーザプログラムを実行するためのハードウェアであり、ユーザメモリ１２ｃに記載されているデータ（命令オブジェクトコード）を解析し、実行するものである。すなわち、ユーザプログラムの命令は、オブジェクトコードと呼ばれるビットパターンに展開され、ＡＳＩＣはオブジェクトコードを解釈して命令実行を行う。図７等を用いて説明したとおり、ＡＳＩＣ１２ｂは、ユーザメモリ１２ｃに格納された命令を順次実行していき、自己が処理できない命令に至ると、停止する。そして、ＭＰＵ１２ａは、ＡＳＩＣ１２ｂの停止を検出し、その原因が、ＡＳＩＣ１２ｂの実行できない命令であることを認識すると、ＭＰＵ１２ａは当該命令を実行する。
【００３６】
ここで、本実施形態では、命令のオブジェクトコード内にＡＳＩＣ停止無視ビットを設ける。このＡＳＩＣ停止無視ビットがＯＮになっている命令に関しては、ＭＰＵからの停止依頼をＡＳＩＣ１２ｂは無視し、命令実行を続けることができるようにしている。
【００３７】
そこで、図１１に示すように、オブジェクトコード中の１９番目のエリアにＡＳＩＣ停止無視ビットを設定し、このＡＳＩＣ停止無視ビットが“１”（ＯＮ）に設定されている命令の場合、ＡＳＩＣは、ＭＰＵ１２ａからの命令実行停止依頼を無視する。また、ＡＳＩＣ停止無視ビットが“０”（ＯＦＦ）に設定されている命令の場合、ＭＰＵ１２ａからの命令実行停止依頼を受けると、ＡＳＩＣはその命令を実行することなく停止する。このようにＡＳＩＣ１２ｂが停止すると、ＭＰＵ１２ａは割込みプログラムを実行することができる。このような仕組みによって、割込みを入れたくない区間では、ＡＳＩＣ停止無視ビットを“１”にすることで割込みプログラムを実行させないことができる。
【００３８】
そして、命令のオブジェクトコード中にＡＳＩＣ停止無視ビットを設けたことに伴い、ＭＰＵ１２ａから停止依頼を受けた場合のＡＳＩＣ１２ｂの機能として、図１２に示すフローチャートを実行する機能を付加した。すなわち、ＡＳＩＣは、ＭＰＵから停止依頼を受け付けると、処理対象の命令のオブジェクトコード中の該当領域を確認し、ＡＳＩＣ停止無視ビットがＯＮ（“１”）か否かを判断する（Ｓ１１）。
【００３９】
ＡＳＩＣ停止無視ビットがＯＮの場合、ＡＳＩＣは、受け取った停止依頼を無視し、当該命令を実行する（Ｓ１２）。次いで、ＡＳＩＣは、次の命令のＡＳＩＣ停止無視ビットを確認する（Ｓ１３）。確認したＡＳＩＣ停止無視ビットがＯＦＦ（“０”）の場合には、ＡＳＩＣは、その命令の実行をせずに命令実行を停止する（Ｓ１４）。よって、連続する複数の命令に対してＡＳＩＣ停止無視ビットをＯＮにしておくことで、停止依頼の有無にかかわらず、ＡＳＩＣは、係る複数の命令を連続して実行することができる。
【００４０】
これにより、本実施形態におけるＭＰＵ１２ａとＡＳＩＣ１２ｂの２種類の演算実行部による割り込みプログラムの実行処理は、以下のようになる。図１３に示すように、ＡＳＩＣが、サイクル実行タスクの命令を逐次実行しているとする。本実施形態では、ＭＰＵは、従来のように割り込みマスクを設定することはない。（１１），（１２）ＭＰＵは、割り込みを検知したならば、ＡＳＩＣに対して命令実行の停止を依頼する。（１３）ＡＳＩＣは、停止依頼を受けると、上記の図１２に示すフローチャートに従い、ＡＳＩＣ停止無視ビットがＯＮの命令が続く限り、当該命令を実行し、ＡＳＩＣ停止無視ビットがＯＦＦの命令に至るとＡＳＩＣが停止する。ＡＳＩＣの動作を監視しているＭＰＵは、ＡＳＩＣが停止したかを確認する。
【００４１】
（１４）ＡＳＩＣが停止したことを確認したＭＰＵは、取得した割り込み通知に対応する割り込みプログラム（割り込みタスク）の命令を順次実行する。（１５）そして、割り込みプログラムを最後まで実行したならば、ＭＰＵは、ＡＳＩＣに対して命令実行を依頼する。（１６）この依頼を受けたＡＳＩＣは、停止していた箇所から命令を再開する。
【００４２】
図１４は、図５等に示したサイクル実行タスクｎのプログラムを本実施形態に適用した例を示している。図１４に示すように、割り込みを入れたくない処理である３つのＭＯＶ命令について、ＡＳＩＣ停止無視ビットをＯＮにし、その他の割り込みの影響を受けない処理である命令については、ＡＳＩＣ停止無視ビットをＯＦＦにする。これにより、ＡＳＩＣは、仮にＭＯＶ命令実行中にＭＰＵから停止依頼を受けたとしても、停止することなく３つのＭＯＶ命令を最後まで実行する。その結果、ＡＳＩＣは、３つのアドレス領域を全てゼロクリアできる。もちろん、ＬＤ命令や、ＯＵＴ命令のように割り込みの影響を受けない命令のＡＳＩＣ停止無視ビットはＯＦＦになっているので、それらの命令の実行時にＭＰＵから停止依頼を受けた場合には、ＡＳＩＣは、従来と同様に即座に命令実行を停止する。
【００４３】
図１４に示すプログラムの場合、割り込みの影響を受けない処理と、割り込みを入れたくない処理のいずれもが、主としてＡＳＩＣで実行され、しかも、従来（図５（ｂ）等参照）のように、それら各処理の間に“割り込み禁止処理”や“割り込み禁止解除処理”のようにＭＰＵの処理が入らない。つまり、本実施形態では、ＡＳＩＣ自身が“停止する／停止しない”を判定するため、割り込み禁止処理をするためにＭＰＵ処理は介在しないので、ＰＬＣの実行性能を劣化させない。更に、従来のように、“割り込み禁止処理”や“割り込み禁止解除処理”のためのプログラム（命令）が不要であるので、オブジェクトコードのサイズが変わらないで済む。また、ＡＳＩＣ停止無視ビットも、オブジェクトコード中に存在する領域を利用するため、その点でも容量が増えることもない。
【００４４】
更に、本実施形態によれば、高速なＡＳＩＣ命令だけで割込み禁止／禁止解除ができるため、複数のＡＳＩＣ命令を組み合わせによって１つの命令を高速に実現させることができる。例えば、サム値を求める命令は、足し算命令など複数命令の組み合わせで実現することができる。すなわち、図１５（ａ）に示すような“ＳＵＭ  ｉｘｙ”という命令は、変数ｘからｉ個分のデータのサム値を求め、変数ｙに出力するという命令である。係る命令を実行する場合、例えば、ｘからｉ個分のデータを順次加算する処理を実行することになる（図１５（ｂ）参照）。この一連の処理の実行途中で割込みが発生し、割り込みタスクを実行すると、テンポラリ変数ｔｍｐを破壊する可能性がある。
【００４５】
そのため、従来方法を用いて“ＳＵＭ  ｉｘｙ”命令をＡＳＩＣで実行するためには、割込み禁止命令と禁止解除命令とで囲み、割り込みを禁止する必要がある。しかし、割り込み禁止命令や禁止解除命令を実行すると、ＭＰＵによる処理が入るので、せっかくＡＳＩＣで高速な処理を実行しようとしても、ＭＰＵの実行で低速な処理となり、ＡＳＩＣ命令の組み合わせによる高速化効果が発揮されず、全体の処理時間は高速化されない。その結果、従来では、係る“ＳＵＭ  ｉｘｙ”命令のようなプログラムは、その全てをＭＰＵで実行するようにしている。
【００４６】
これに対し、本実施形態のように割り込み禁止処理をＡＳＩＣ側の処理のみで実行できるようになると、図１５（ｃ）に示すように、各命令のＡＳＩＣ停止無視ビットをＯＮにすると、たとえ、この間に割込みが発生してもＡＳＩＣは停止せずに所定の命令郡をやりきることできる。よって、“ＳＵＭ  ｉｘｙ”命令をＡＳＩＣで実行することが可能となる。このように、従来ではＡＳＩＣでの演算処理ができなかった（速度の面からＡＳＩＣに実行させる価値がない）命令をＡＳＩＣで実行させることができるようになるので、さらなる高速処理が可能となる。
【００４７】
また、上記のように、ＡＳＩＣ停止無視ビットを備えたオブジェクトコードを作成するには、例えば、図１６（ａ）に示すように、ユーザは、ユーザプログラムを作成するに際し、従来と同様に割り込み禁止命令や割り込み禁止解除命令を記述する。プログラミングツール装置が、このユーザプログラムをコンパイルして「オブジェクトコード」を生成する際に、対となる割り込み禁止命令と割り込み禁止解除命令を検出し、その間に存在する全ての命令について、停止無視ビットをＯＮにするような処理を行なうことで作成できる。
【００４８】
なお、本実施形態のように、オブジェクトコード中にＡＳＩＣ停止無視ビットを設けた命令における割込み区間の明示方法としては、例えば、表示する際には、ＡＳＩＣ停止無視ビットがＯＮになっている命令群の前後に、従来どおりの命令を付記して囲む方式や、プログラム開発支援装置の表示画面に命令を表示するに際し、当該ＡＳＩＣ停止無視ビットがＯＮの該当する命令部分のフォントの色を変えたり、色を重ねて表示したりするなどにより禁止区間を明示したりすることができる。
【図面の簡単な説明】
【００４９】
【図１】割り込みタスクの実行を説明する図である。
【図２】ＣＰＵユニットで実行されるプログラムの一例を示す図である。
【図３】ＣＰＵユニットで実行されるプログラムの一例を示す図である。
【図４】割り込みタスク実行による弊害を説明する図である。
【図５】割り込みタスク実行による弊害を受けないための従来の回避策を説明する図である。
【図６】割り込みタスク実行による弊害を受けないための従来の回避策を説明する図である。
【図７】割り込みタスク実行による弊害を受けないための従来の回避策における問題を説明する図である。
【図８】割り込みタスク実行による弊害を受けないための従来の回避策における問題を説明する図である。
【図９】割り込みタスク実行による弊害を受けないための従来の回避策における問題を説明する図である。
【図１０】（ａ）は本発明に係るＰＬＣの一例を示す図である。（ｂ）はＣＰＵユニットの内部構成の一例を示す図である。
【図１１】オブジェクトコードの一例を示す図である。
【図１２】ＡＳＩＣの機能を説明するフローチャートである。
【図１３】本実施形態の割り込みプログラムの実行を説明する図である。
【図１４】本実施形態が実行するプログラムの一例を示す図である。
【図１５】本実施形態が実行するプログラムの一例を示す図である。
【図１６】オブジェクトコードを作成するためのコンパイル処理の一例を説明する図である。
【符号の説明】
【００５０】
１０  ＰＬＣ
１２  ＣＰＵユニット
１２ａ  ＭＰＵ
１２ｂ  ＡＳＩＣ
【図１】
0005136770.tif 000002
【図２】
0005136770.tif 000003
【図３】
0005136770.tif 000004
【図４】
0005136770.tif 000005
【図５】
0005136770.tif 000006
【図６】
0005136770.tif 000007
【図７】
0005136770.tif 000008
【図８】
0005136770.tif 000009
【図９】
0005136770.tif 000010
【図１０】
0005136770.tif 000011
【図１１】
0005136770.tif 000012
【図１２】
0005136770.tif 000013
【図１３】
0005136770.tif 000014
【図１４】
0005136770.tif 000015
【図１５】
0005136770.tif 000016
【図１６】
0005136770.tif 000017