(57)【特許請求の範囲】
【請求項１】
アプリケーションプログラムのうちシーケンス命令を実行するシーケンス演算部と、複雑な応用命令を実行する汎用演算部とを備え、命令に応じて前記シーケンス演算部と汎用演算部を切り替えて実行するプログラマブルコントローラにおいて、
通常のシーケンス命令での、前記シーケンス演算部の１ステートの処理を実行するための準備を、前記汎用演算部からオペランドレジスタ（ＯＰＲ）、あるいはオペランドデータレジスタ（ＯＰＲＤＡＴＡ）からの読み出しなど、前記シーケンス演算部の内部レジスタへのアクセスをトリガーにして行い、
前記汎用演算部の命令に遭遇したとき、前記汎用演算部から前記シーケンス演算部の内部レジスタへのアクセスの際の、アドレスデコードに使用されていないアドレスビットを用い、そのＯＮ／ＯＦＦによって、更新レジスタの指定や、更新の有無のコントロールに使用することを特徴とするプログラマブルコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、アプリケーションプログラムを専用のシーケンス演算ＬＳＩ（または演算回路）と汎用マイクロプロセッサで演算するプログラマブルコントローラに係り、特にシーケンス演算ＬＳＩと汎用マイクロプロセッサ間のインタフェースに関する。
【０００２】
【従来の技術】
プログラマブルコントローラは、プログラムメモリ上に格納されたユーザプログラム命令の羅列を、順次読み出し、解析し、その結果に基づき演算実行する。プログラマブルコントローラの命令は、接点命令などのシーケンス命令と数値演算などの応用命令に大別される。ラダーシーケンスのプログラムでは、シーケンス命令の出現比率が高く、この演算を高速に処理することが、全体的な高速演算の実現につながる。
【０００３】
図１に一般的なプログラマブルコントローラの演算部の構成を示す。演算部は、複雑な応用命令処理には汎用マイクロプロセッサや汎用ＤＳＰ（以下、汎用ＣＰＵと称する）１を用い、シーケンス命令などの基本命令処理にはシーケンス演算専用ＬＳＩまたは専用回路（以下、シーケンスＣＰＵと称する）２を用いる。
【０００４】
これは先に述べたように、シーケンス命令は演算処理が単純であるが出現比率が高く、応用命令は演算処理が基本命令に比べ複雑であるが出現比率が低いため、コストパフォーマンスに優れるからである。基本命令と応用命令の分担は、製品の価格と密接で、シーケンスＣＰＵの集積度によって定められる。集積度のより高いシーケンス演算専用ＬＳＩを使用すれば、価格も上昇するが、多くの命令をシーケンスＣＰＵで処理でき、演算性能の高いものにできる。
【０００５】
シーケンスＣＰＵで実行する命令をブール演算命令（接点、コイル等）だけとするシーケンスＣＰＵの構成例を図２に示す。主な要素は、プログラムメモリ（ＰＭ）３やデータメモリ（ＤＭ）４に対するユーザプログラム命令の順次読み出しやオペランドのデータを読み出すメモリインタフェース部、ユーザ命令を解析するデコード部、そして演算部からなる。シーケンスＣＰＵは、汎用ＣＰＵからの起動指示により、プログラム命令を読み出し、デコードし、デコード内容によりオペランドのデータ読み出しと演算を行う。
【０００６】
図３は、ラダープログラムの例である。そのプログラムのプログラムメモリへの展開例を図４に示す。そして、図５にシーケンスＣＰＵの内部実行チャート、図６に汎用ＣＰＵの処理フローを示す。ここでは、加算命令（ＡＤＤ  Ｓ１  Ｓ２  Ｄ）を汎用ＣＰＵ命令として、シーケンスＣＰＵから汎用ＣＰＵへの切り替えでの実行の様子を示しており、以下の処理手順になる。
【０００７】
（１）汎用ＣＰＵ１がシーケンスＣＰＵ２に起動をかける。
【０００８】
（２）シーケンスＣＰＵ２が動作し、ＰＭ３からＬＯＡＤ命令をリードする。その間、汎用ＣＰＵ１はシーケンスＣＰＵ２の制御レジスタ（ＣＴＲＬ）５が出力している命令切替信号をポーリングする。
【０００９】
（３）シーケンスＣＰＵ２は、ＰＭ３からＡＮＤ命令をリードし、さらにＬＯＡＤ命令のオペランドのデータ（ｏｐｒ−ａ）をリードする。その間、汎用ＣＰＵ１は、シーケンスＣＰＵ２のＣＴＲＬ５が出力している命令切替信号をポーリングしている。
【００１０】
（４）シーケンスＣＰＵ２は、ＰＭ３からＡＤＤ命令をリードし、更にＡＮＤ命令のオペランドのデータ（ｏｐｒ−ｂ）をリードする。更に、論理演算ユニット（ＬＵ）６ではアキュムレータ（ＡＣＣ）７にｏｐｒ−ａのデータをロードされる。その間、汎用ＣＰＵ１は、シーケンスＣＰＵ２のＣＴＲＬ５が出力している命令切替信号をポーリングしている。
【００１１】
（５）シーケンスＣＰＵ２は、ＰＭ３からＡＤＤ命令の２ステップ目をリードし、更にＡＤＤ命令のオペランドのデータ（Ｓ１）をリードする。更に、ＬＵ６ではＡＣＣ７の値とｏｐｒ−ｂの値で演算が行われ、ＡＣＣ７に格納される。その間、汎用ＣＰＵ１は、シーケンスＣＰＵ２のＣＴＲＬ５が出力している命令切替信号をポーリングしている。
【００１２】
（６）シーケンスＣＰＵ２のＣＴＲＬ５が出力している命令切替信号が汎用ＣＰＵ命令であることを示す。
【００１３】
（７）汎用ＣＰＵ１は、インストラクション・ベクタ（ＩＶ）レジスタ８をリードし、その値を使ってＡＤＤ命令の処理へジャンプする。また、このときにはシーケンスＣＰＵ２の内部レジスタは更新され、ＡＤＤ命令のためのデータが揃えられている。
【００１４】
（８）汎用ＣＰＵ１は、ＡＤＤ命令を処理する。ここで、汎用ＣＰＵ１でＡＤＤ命令を実行するためには、ＰＭ３からソースアドレス（Ｓ１，Ｓ２）を読み出し、それをアドレスとしてＤＭ４からデータを読み出しと加算をし、さらにＰＭ３からデスティネーションアドレス（Ｄ）を読み出し、それをＤＭ４へのアドレスとして、加算結果を書込む。
【００１５】
ここで、ソースデータ（Ｓ１）に限り、汎用ＣＰＵ１は、シーケンスＣＰＵ２のレジスタ（ＯＰＲＤＡＴＡ）から直接読み出すことができる。しかし、ソースデータ（Ｓ２）、デスティネーションアドレス（Ｄ）は、実行中の命令をＰＣ９から算出し、ＰＭ３から読み出さなければならなくなる。
【００１６】
（９）汎用ＣＰＵ１は、次に実行すべきプログラムカウンタ（ＰＣ）９を更新し、シーケンスＣＰＵ２を再起動する。
【００１７】
以上が、汎用ＣＰＵとシーケンスＣＰＵの命令実行時の一般的ハンドリングである。この様子は図６に示す汎用プロセッサ処理フローになる。
【００１８】
【発明が解決しようとする課題】
図６において、汎用ＣＰＵ１が実行する演算命令に遭遇したとき（Ｓ３）、汎用ＣＰＵ１は、ＩＶレジスタ８をリードし（Ｓ４）、その処理に分岐する（Ｓ５）。ここで、汎用ＣＰＵ１は、命令を実行するために、オペランドやオペランドデータ（オペランドをアドレスとするデータメモリのデータ）が必要になる。
【００１９】
これが、前記の（８）の処理であり、汎用ＣＰＵ１で、シーケンスＣＰＵ２内部のプログラムカウンタ（ＰＣ）を読み出し、それらを得る処理は手間がかかり、実行速度を上げることができない。
【００２０】
本発明の目的は、上記の課題を解決したプログラマブルコントローラを提供することにある。
【００２１】
【課題を解決するための手段】
アプリケーションプログラムのうちシーケンス命令を実行するシーケンス演算部と、複雑な応用命令を実行する汎用演算部とを備え、命令に応じて前記シーケンス演算部と汎用演算部を切り替えて実行するプログラマブルコントローラにおいて、
通常のシーケンス命令での、前記シーケンス演算部の１ステートの処理を実行するための準備を、前記汎用演算部からオペランドレジスタ（ＯＰＲ）、あるいはオペランドデータレジスタ（ＯＰＲＤＡＴＡ）からの読み出しなど、前記シーケンス演算部の内部レジスタへのアクセスをトリガーにして行い、
前記汎用演算部の命令に遭遇したとき、前記汎用演算部から前記シーケンス演算部の内部レジスタへのアクセスの際の、アドレスデコードに使用されていないアドレスビットを用い、そのＯＮ／ＯＦＦによって、更新レジスタの指定や、更新の有無のコントロールに使用することを特徴とする。
【００２４】
【発明の実施の形態】
（実施形態１）
本実施形態は、汎用ＣＰＵ１が実行すべき命令に遭遇したとき、汎用ＣＰＵ１は、シーケンスＣＰＵ２の内部レジスタを利用してオペランドやオペランドデータを得る。
【００２５】
その方法として、図２のオペランドレジスタ（ＯＰＲ）１０か、オペランドデータレジスタ（ＯＰＲＤＡＴＡ）１１を汎用ＣＰＵ１が読んだとき、シーケンスＣＰＵ２は、シーケンスＣＰＵ命令を実行するときと同様に、インストラクションレジスタ（ＩＲ）１２のラッチデータ（すなわち、命令コードのオペランド）をアドレスとして、データメモリ４からデータをリードし、オペランドデータレジスタ（ＯＰＲＤＡＴＡ）１１にラッチする。同時に、インストラクションレジスタ（ＩＲ）１２のオペランド部をオペランドレジスタ（ＯＰＲ）１０にラッチする。
【００２６】
さらに、インストラクションレジスタ（ＩＲ）１２には、プログラムカウンタ（ＰＣ）９をアドレスとして、プログラムメモリ（ＰＭ）３から命令データを読み出し、インストラクションレジスタ（ＩＲ）１２にラッチさせ、プログラムカウンタ（ＰＣ）９をインクリメントする。
【００２７】
すなわち、通常のシーケンス命令でのシーケンスＣＰＵ２の１ステートの処理を、汎用ＣＰＵ１からのオペランドレジスタ（ＯＰＲ）１０、あるいはオペランドデータレジスタ（ＯＰＲＤＡＴＡ）１１から読み出しなど、シーケンスＣＰＵ２の内部レジスタへのアクセスをトリガーにして演算を実行する。
【００２８】
（実施形態２）
前記の実施形態１では、シーケンスＣＰＵ２の内部レジスタへのアクセスによって、シーケンスＣＰＵ２の内部レジスタを更新した。
【００２９】
本実施形態では、これをさらに汎用的に発展させ、汎用ＣＰＵ１からシーケンスＣＰＵ２の内部レジスタへのアクセスの際の、アドレスデコードに使用されていないアドレスビットを用い、そのＯＮ／ＯＦＦによって、更新レジスタの指定や更新の有無のコントロールに使用する。
【００３０】
（実施形態３）
図５のシーケンスＣＰＵの内部実行チャート（内部レジスタの遷移）で、汎用ＣＰＵ命令に切り替わった後、シーケンスＣＰＵ２の内部レジスタは、その命令の先頭のオペランド（ＯＰＲ）や、オペランドデータ（ＯＰＲＤＡＴＡ）がラッチされているに過ぎない。したがって、次の命令に移るためには、プログラムカウンタ（ＰＣ）９を次の命令にセットし、内部レジスタを更新して進めて、シーケンス実行処理を続ける必要がある。
【００３１】
そこで、本実施形態では、汎用ＣＰＵ命令に遭遇したとき、前記の実施形態を利用して、プログラムメモリ（ＰＭ）３に格納されているデータを内部レジスタに更新しながら取り込めば、汎用ＣＰＵ命令の処理を終えたとき、次の命令を実行するための状態にすることができる。
【００３２】
したがって、プログラムカウンタ（ＰＣ）９を更新して内部レジスタを埋めるまでのステートを省略することができる。
【００３３】
【発明の効果】
以上のとおり、本発明によれば、汎用ＣＰＵ命令に遭遇したとき、命令の実行に必要なデータをシーケンスＣＰＵの内部レジスタから次々に読み出しできるため、汎用ＣＰＵによるアドレス計算などが不要となり、命令自身を高速化できる（実施形態１）。
【００３４】
また、汎用ＣＰＵ命令に遭遇したとき、命令の実行に必要なデータの取得をきめ細かくコントロールでき、命令自身の高速化ができる（実施形態２）。
【００３５】
汎用ＣＰＵ命令に遭遇し、その処理を終えた後、次の命令に移る際のロスが減り、高速化できる（実施例３）。
【図面の簡単な説明】
【図１】プログラマブルコントローラの演算部の構成図。
【図２】シーケンスＣＰＵのブロック図例。
【図３】ラダープログラム例。
【図４】ラダープログラムのメモリ展開例。
【図５】シーケンスＣＰＵの内部実行チャート（内部レジスタの遷移）。
【図６】汎用プロセッサ処理フロー。
【符号の説明】
１…汎用ＣＰＵ
２…シーケンスＣＰＵ
３…プログラムメモリ
４…データメモリ
５…制御レジスタ
８…インストラクションベクタレジスタ
９…プログラムカウンタ
１０…オペランドレジスタ
１１…オペランドデータレジスタ
１２…インストラクションレジスタ
【図１】
0003948303.tif 000002
【図２】
0003948303.tif 000003
【図３】
0003948303.tif 000004
【図４】
0003948303.tif 000005
【図５】
0003948303.tif 000006
【図６】
0003948303.tif 000007