(57)【特許請求の範囲】
【請求項１】
ＰＬＣを構成するユニットであって、
同一のユニット内に、
ユーザプログラムを記憶する第１の記憶手段と、
前記第１の記憶手段に格納された前記ユーザプログラムの少なくとも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、
前記第１の記憶手段に格納された前記ユーザプログラムを実行するユーザプログラム実行手段と、
前記第２の記憶手段に格納されたライブラリ化されたプログラムを実行するプログラム実行手段とを備え、
前記第２の記憶手段は、前記ユニット内に実装されるとともに、前記ユーザプログラムをアップロードするツールではアクセス不可としたことを特徴とするユニット。
【請求項２】
前記ライブラリ生成手段は、前記ユーザプログラムを実行オブジェクト化して前記第２の記憶手段に格納するようにしたことを特徴とする請求項１に記載のユニット。
【請求項３】
前記ライブラリ化されたプログラムは、サブルーチンライブラリであって、
前記プログラム実行手段は、前記第１の記憶手段に格納されたメインユーザプログラム中に前記サブルーチンライブラリ呼び出しの専用命令が存在する場合に、指定されたサブルーチンライブラリを実行するとともに、前記メインユーザプログラムに復帰する機能を備えたことを特徴とする請求項１または２に記載のユニット。
【請求項４】
前記ライブラリ化されたプログラムは、前記ユーザプログラムの全体であって、
前記プログラム実行手段は、システム稼動の際に、前記第２の記憶手段に格納されたライブラリ化されたプログラムを実行可能な状態にすることを特徴とする請求項１または２に記載のユニット。
【請求項５】
前記ライブラリ生成手段は、ライブラリ化するプログラムを特定するためのライブラリ名を関連付けて第２の記憶手段に格納する機能を持ち、
前記第２の記憶手段に格納された前記ライブラリ名を読み出すとともに前記第１の記憶手段に格納するライブラリ名読み出し手段を備えたことを特徴とする請求項１から４のいずれか１項に記載のユニット。
【請求項６】
前記ライブラリ生成手段は、前記第２の記憶手段に、前記ライブラリ化されたプログラムとともに、そのライブラリを特定するライブラリ識別情報を関連づけて格納する機能を持ち、
前記第２の記憶手段に格納した情報を外部記憶手段にバックアップするバックアップ手段を備え、
そのバックアップ手段は、入力されたライブラリ識別情報が、前記第２の記憶手段に予め格納された正規のものと一致するか否かを判断し、一致した場合に前記情報を前記外部記憶手段に格納するようにしたことを特徴とする請求項１から５のいずれか１項に記載のユニット。
【請求項７】
ユーザプログラムを記憶する第１の記憶手段と、
前記第１の記憶手段に格納された前記ユーザプログラムの少なくとも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、
前記第１の記憶手段に格納された前記ユーザプログラムを実行するユーザプログラム実行手段と、
前記第２の記憶手段に格納されたライブラリ化されたプログラムを実行するプログラム実行手段とを備え、
前記第２の記憶手段は、前記ユーザプログラムをアップロードするツールではアクセス不可としたことを特徴とするＰＬＣ。
【請求項８】
ユーザプログラムを格納する第１の記憶手段と、前記第１の記憶手段に格納された前記ユーザプログラムの少なくとも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、前記ユーザプログラムをアップロードするツールではアクセス不可となる第２の記憶手段を備えたＰＬＣを構成するユニットにおけるユーザプログラムの処理方法であって、
前記ライブラリ生成手段が、前記第１の記憶手段に格納された前記ユーザプログラムの少なくとも一部をライブラリ化して前記第２の記憶手段に格納して前記ライブラリ化した部分を保護し、
前記ユーザプログラムの実行時は、前記第２の記憶手段に格納されたライブラリ化されたプログラムを適宜実行させることを特徴とするユーザプログラムの処理方法。
【請求項９】
入力信号を受け取る入力回路と、その入力信号に基づいてユーザプログラムを実行するプログラム実行手段と、実行結果を出力する出力回路とを持つＰＬＣ用のユニットであって、
ダウンロードされたユーザプログラムの一部を部品ライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、
前記部品ライブラリ化したプログラムを格納してある第２の記憶手段と、
前記部品ライブラリ化したプログラムを呼び出して実行するための専用命令を挿入したユーザプログラムをツールで作成し、そのユーザプログラムを格納する第１の記憶手段とを備え、
前記プログラム実行手段は、前記第１の記憶手段に格納されたユーザプログラムをスキャン実行し、前記ユーザプログラム中の専用命令を実行することによって前記第２の記憶手段から前記部品ライブラリ化されたプログラムを呼び出して実行し、その呼出実行が終了すれば前記ユーザプログラムに復帰して実行するものであり、
前記第２の記憶手段を前記ツールからアクセス不可とすることで、前記部品ライブラリ化したプログラムを読み出しできないようにしたことを特徴とするユニット。
【請求項１０】
入力信号を受け取る入力回路と、その入力信号に基づいてユーザプログラムを実行するプログラム実行手段と、実行結果を出力する出力回路とをもつＰＬＣ用のユニットであって、
ダウンロードされたユーザプログラムの全部を全体ライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、
前記全体ライブラリ化したプログラムを格納してある第２の記憶手段と、
前記全体ライブラリ化したプログラムを呼び出して実行するための設定フラグを、ツールの操作によって格納する第１の記憶手段とを備え、
前記プログラム実行手段は、前記第１の記憶手段の設定フラグをきっかけに全体ライブラリ化されたプログラムを第２の記憶手段から呼び出して実行するものであり、
前記第２の記憶手段を前記ツールからアクセス不可とすることで、前記全体ライブラリ化したプログラムを読み出しできないようにしたことを特徴とするユニット。
【請求項１１】
ＰＬＣを構成するユニットであって、
ツールにて作成した、ライブラリ化してあるプログラムを呼び出して実行するための専用命令を有するユーザプログラムを格納する第１の記憶手段と、
ダウンロードされたユーザプログラムの少なくとも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、
前記ライブラリ化されたプログラムを格納しておく第２の記憶手段と、
前記ユーザプログラムをスキャン実行してゆき、前記ユーザプログラム中の専用命令の実行によって、前記第２の記憶手段から前記ライブラリ化プログラムを呼び出して実行するプログラム実行手段とを備え、
第２の記憶手段のライブラリ化プログラムは、前もって格納されていて、ユーザプログラムを作成するときに使用するツールからは、前記ライブラリ化プログラムを読み出しできないようにすることで、ライブラリ化プログラムの内容をプロテクトすることを特徴とするＰＬＣ用のユニット。
【請求項１２】
ＰＬＣを構成するユニットであって、
ツールにてライブラリ化してあるプログラムを呼び出して実行するための設定フラグを格納する第１の記憶手段と、
ダウンロードされたユーザプログラムの少なくも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、
前記ライブラリ化されたプログラムが格納しておく第２の記憶手段と、
ＲＵＮモードにて、前記第１の記憶手段の設定フラグを読み出して、実行する旨のフラグ設定がされている場合には、前記第２の記憶手段からライブラリ化プログラムを呼び出して実行するプログラム実行手段とを備え、
前記第２の記憶手段のライブラリ化プログラムは前もって格納されていて、設定フラグを設定するツールからはライブラリ化プログラムを読み出しできないようにすることで、ライブラリ化プログラムの内容をプロテクトすることを特徴とするＰＬＣ用のユニット。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ユニット及びＰＬＣ並びにユーザプログラムの処理方法に関するものである。
【０００２】
【発明の背景】
良く知られているように、ＦＡ（ファクトリオートメーション）で用いられるプログラマブルコントローラ（ＰＬＣ）は、入力機器（スイッチやセンサなど）のＯＮ／ＯＦＦ情報を入力し、ラダー言語などで書かれたシーケンスプログラム（ユーザプログラム）に沿って論理演算を実行して、その演算結果により、出力機器（リレーやバルブ、アクチュエータなど）にＯＮ／ＯＦＦ情報の信号を出力することで制御を行う。なお、ユーザプログラムを作成・編集する場合やユーザプログラムをＰＬＣの所定のメモリへ書き込み（ダウンロード）或いはＰＬＣの所定のメモリからユーザプログラムを読み出す（アップロード）場合は、専用の装置（ツール装置）を用いる。
【０００３】
そして、係るＰＬＣの一形態として、各機能ごとに作成されたユニットを複数用意し、電気，機械的に連結して構成するものがある。係るタイプを構成するためのユニットとしては、ＰＬＣを構成する各ユニットに電源を供給する電源ユニットや，ＩＮリフレッシュすることで入力した入力信号に基づき、プログラムメモリに記憶したユーザプログラムを実行するＣＰＵユニット，ＣＰＵユニットとバス通信可能で、入力機器または出力機器を接続するＩ／Ｏユニット等各種のものがある（特許文献１参照）。
【０００４】
また、最近では、Ｉ／ＯユニットにもＣＰＵ（ＭＰＵ）や、プログラムメモリを搭載するとともに、そのプログラムメモリに所望のユーザプログラムを格納し、そのＩ／Ｏユニット側でも上記ユーザプログラムの演算実行をして、所定の制御を行うようにしたものがある。
【０００５】
一方、ＰＬＣ（各ユニット単体を含む）の流通経路を鑑みると、一例としては、まずＰＬＣを製造するメーカが存在する。そして、自動包装機や射出成型機その他の産業機械を製造する会社は、係るメーカからＰＬＣを購入し、その産業機器の使用内容や制御動作に応じて必要なユーザプログラムをプログラム作成ツールで作成するとともに、そのユーザプログラムをＰＬＣにダウンロードし、係るＰＬＣで制御動作する産業機械を製造する。つまり、この産業機械を製造する会社は、ＰＬＣメーカにとってはユーザ（中間ユーザ）となる。そして、係る産業機械は、エンドユーザの会社の工場に設置され、生産設備のシステムに組み込まれ、各種の製品を製造するようになっている。
【０００６】
ところで、上記ユーザプログラムは、各中間ユーザのノウハウが入ったものであり、そのユーザの資産である。従って、競合他社などにそのユーザプログラムの内容が漏洩するのを可及的に抑制したいという要求がある。しかし、シーケンスプログラムを記述する言語として汎用言語であるラダー言語を用いてユーザプログラムを作成し、それをプログラムメモリに格納した場合、ツール装置で係るユーザプログラムを読み出し、解析することができる。従って、１つのエンドユーザに対して複数の中間ユーザが取り引きしていることは良くあり、この場合、各中間ユーザがエンドユーザの工場内に出入りすることがある。よって、ＰＬＣで制御される産業機械を設置した後で、その産業機械を生産・納入したユーザと異なる競合他社が係るエンドユーザの工場に行き、当該産業機械を制御するＰＬＣのユーザプログラムをアップロードして取得されてしまうおそれがある。
【０００７】
そこで、第三者への漏洩を防止するために、パスワードなどで読み出し禁止のプロテクトを図る方法もあるが、パスワードが漏れてしまったり、解析されてしまうと、ユーザプログラムが第三者に取得されてしまう。ところで、ユーザプログラムにパスワードで読み出し禁止のプロテクトをかける場合には、ユーザプログラム全体を読み出し禁止にする方法と、ユーザプログラムの一部を読み出し禁止にする（部分プロテクト）方法がある。上記の中間ユーザは、ユーザプログラム中のノウハウ部分のみを部分プロテクトをかけてエンドユーザに提供することでノウハウの漏洩を防止するとともに、ノウハウ以外の読み出し可能部分のエンドユーザでの変更（カスタマイズ）が可能な状態でユニットを提供できる。しかし、この方法は、部分プロテクトの対象が、１本のユーザプログラム中の部分的なプログラムであるためプロテクト外のプログラム編集の影響を受けやすいという問題がある。
【０００８】
一方、ノウハウ部分を含む制御（モーション制御等）機能部分を、専用のマイコンボードで実現するようにすると、第三者への漏洩の問題は一応抑制されるものの、マイコンボードのような専用品を用意する煩雑さの問題がある。また、マイコンボードは、ラダー言語やシーケンスプログラム言語に対応できないため、ＰＬＣで利用するラダーによるユーザプログラムの開発環境（ツール装置を含む）が使えず、マイコンボード上のプログラムを開発する専用の開発環境が必要となり、コストアップの問題もある。
【０００９】
また、ユーザに専用の開発環境や、ユーザ側で専用の開発環境を使ってマイコンボード上のプログラムを作成する開発者が用意できない場合、他のメーカ（ＰＬＣの製造メーカ等）の協力が必要となる。特に、ユーザがＰＬＣの製造メーカに対してユーザプログラムに相当するプログラムの作成を依頼する場合、ＰＬＣの製造メーカはユニットのシステムプログラム（ファームウェア）に組み込んで特定ユーザ向けの専用ユニットとして提供することも可能である。係る方式を採ると、漏洩防止の点では好ましいが、係るメーカに対してノウハウを開示する必要があるばかりでなく、仮にノウハウを開示したとしても、メーカ側ではユーザが持つノウハウ・知識を十分に把握することが困難であるので、ユーザが満足する制御，機能を実現できないおそれもある。そして、ユーザ側で簡単にプログラムを修正することができないなど、各種の問題がある。
【特許文献１】
特開平１０−３３３９００号公報
【００１０】
この発明は、プログラム開発環境として別途専用のものを用意することなく、ユーザが作成するプログラムの一部または全部に対するプロテクトを簡単かつ確実にかけることができるユニット及びＰＬＣ並びにユーザプログラムの処理方法を提供することを目的とする。
【００１１】
【課題を解決するための手段】
この発明によるユニットは、ＰＬＣを構成するユニットであって、同一のユニット内に、ユーザプログラムを記憶する第１の記憶手段と、前記第１の記憶手段に格納された前記ユーザプログラムの少なくとも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、前記第１の記憶手段に格納された前記ユーザプログラムを実行するユーザプログラム実行手段と、前記第２の記憶手段に格納されたライブラリ化されたプログラムを実行するプログラム実行手段とを備え、前記第２の記憶手段は、前記ユニット内に実装されるとともに、前記ユーザプログラムをアップロードするツールではアクセス不可に構成した。
【００１２】
ここで「ユニット」とは、ＰＬＣを構成するユニットであって、ユーザが作成したユーザプログラムをダウンロードしてユニット内部に記憶保存し、そのユーザプログラムを実行する機能を持つユニットを指す。具体的には、ＣＰＵユニットや実施の形態で述べたＩ／Ｏユニットも含む。他にも、ユーザプログラム実行機能を内蔵し、特殊な機能を実行処理する「特殊機能ユニット」がある。この特殊機能ユニットとして例えば、リモートＩＯ用マスタユニットなどがある。
【００１３】
「第１の記憶手段」は、実施の形態ではＲＡＭ１４に対応し、「第２の記憶手段」はフラッシュメモリ１５に対応する。本実施の形態では、第１の記憶手段と第２の記憶手段はＲＡＭとフラッシュメモリのように物理的にもメモリ種別的にも異なるメモリを用いて実現しているが、同一種別のメモリを２つ用いて、それぞれを第１，第２の記憶手段として実現してもよい。さらに、単一のメモリでエリア分割し、ツールからアクセス可能なエリアを第１の記憶手段とし、ツールからアクセス不可なエリアを第２の記憶手段とすることでもよい。さらにまた、２つのメモリの両方にツールからアクセス不可なエリアを設け、それら２つのエリアを合わせて第２の記憶手段として扱うこともできる。
【００１４】
「ライブラリ化」とは、ＭＰＵなどのプログラム実行手段にて呼出されて実行されるようなプログラム形態にしたうえで、所定のメモリに格納する手順のことである。ライブラリ化する例としては、実行したい処理全体の一部を所定処理の固まりとしての“サブルーチン形式のプログラム”とし、そのサブルーチンプログラムを全体処理のためのプログラムから呼び出して実行するような例がある。なおライブラリ化されたプログラムの実行の仕方の一例を説明すると、識別符号を付けて所定メモリ（第２の記憶手段：実施の形態ではフラッシュメモリ）にライブラリ化プログラムを予め記憶させ、識別符号と専用命令をメインプログラムに挿入する。そして、そのメインプログラムをスキャン実行することにより、専用命令も実行されて、識別符号によって識別されたライブラリ化プログラムを所定メモリから呼び出して実行するものがある。これは、実施の形態中の部品ライブラリの例に対応する。
【００１５】
また「ライブラリ生成手段」は、実施の形態では、図４のフローチャートを実施する機能部分に対応し、「プログラム実行手段」は、実施の形態では、図８から図１０のフローチャートを実施する機能に対応する。
【００１６】
「ツールからアクセス不可にする」とは、ツールから記憶手段の記憶内容が一切読み出せないような構成にすることである。「ツールから第２の記憶手段をアクセス不可にする」とは、ユニットがツールからユーザプログラムの読み出し要求やその他データ読み出し要求を受け付けた場合は、当該ユニットの処理部（実施の形態ではＭＰＵ）が第１の記憶手段の該当データのみを返送する処理しかできないようにすることで実現可能である。実際には、例えばＰＬＣ製造メーカにて、ツールと当該ユニットとのアクセスにおける規則を予め次のように決めておくことで実行できる。
【００１７】
つまり、ツールからの読み出し要求コマンドに対して応答できるメモリエリアを第１の記憶手段のみとし、第２の記憶手段にはツールから読み出しできないように決めることで実現する。さらに言うと、ツールから第１の記憶手段に対して読み書きする要求コマンドは規則化して用意しておくが、第２の記憶手段に対する読み出しコマンドまたは呼出しコマンドは最初から用意しないようにして実現する。このようにコマンドの工夫で実現できる。
【００１８】
また、他の工夫でも実現できる。すなわち、例えば、ユニットの第２の記憶手段へツールからアクセスしてきても、ユニットの内部システム処理として、第２の記憶手段からデータの読み出しを禁止するようにすることもできる。つまり、ユニット側の設定で、メモリの一部（第２の記憶手段）を読み出し禁止をするわけである。
【００１９】
そして、いずれの場合も、読み出されたくないプログラムは第１の記憶手段に残さずに、アクセス不可な第２の記憶手段だけに記憶させておく。要するに、ユニットのメモリの中に読み出し禁止エリアを設け、その読み出し禁止エリアだけに、読み出されたくないプログラムを格納するように構成すれば足りる。なお、実施の形態ではアクセス不可な領域を、フラッシュメモリ１５のライブラリ情報領域１５ｃとライブラリデータ１５ｂとしている。また、読み出されたくないプログラムは、実施の形態ではライブラリ化したプログラムが該当する。
【００２０】
この発明によれば、ツールからアクセス不可な第２の記憶手段に、ユーザプログラムの少なくとも一部がライブラリ化されて格納されるので、そのユーザプログラムはツールなどでライブラリ化されたプログラムにアクセスすることができなくなる。従って、ノウハウなど秘密にしたいライブラリ化プログラムを確実にプロテクトをかけることができる。なお、ライブラリ化の作業中は、ライブラリ化対象のプログラムは、第１の記憶手段に格納されたユーザプログラムの所定部分となっているので、ユーザ等は今までのユーザプログラムの開発環境（例えばラダー言語で作成するツール等）をそのまま用いてプログラムを作成することができる。つまり、ライブラリ化するための特別な開発環境は不要としつつ、ライブラリ化処理後は確実にプロテクトが可能である。
【００２１】
なお、第１の記憶手段に格納されたユーザプログラムをライブラリ化して第２の記憶手段に格納するが、本発明で言う「一部のプログラム」とは、ライブラリ化する際に第１の記憶手段に格納されているライブラリ化前のユーザプログラムの一部分の意味である。なお、ライブラリ化する部分とライブラリ化しない部分を何かしらの情報で区別する。また「ユーザプログラムの全部」とは、ライブラリ化する際に第１の記憶手段に格納されているユーザプログラムの全部という意味である。従って、実施の形態における全体ライブラリはもちろんのこと、部品ライブラリ化する場合でも、第１の記憶手段に部品ライブラリ化する対象となる１個または複数個のサブルーチンプログラムのみを格納し、それをライブラリ化して第２の記憶手段に格納する場合は、本発明でいうところの「第１の記憶手段に格納されたユーザプログラムの全部をライブラリ化する」ことに対応する。
【００２２】
そして、前記ライブラリ生成手段は、前記ユーザプログラムを実行オブジェクト化して前記第２の記憶手段に格納するようにすることができる。「実行オブジェクト化」とは、プログラム実行処理にて実行される処理言語に翻訳することで、具体的にはプログラムを機械語に翻訳することである。こうすることで、第２の記憶手段からプログラム情報が万一悪意に読み出されても、普通に理解できない言語となっているとともに、通常では逆コンパイルできなくすることにより、よりわかりにくくすることができる。その結果、プログラム中のノウハウなどが漏洩しないことになり、ユーザプログラム作成者は安心できる。もちろん、実行オブジェクト化する前のユーザプログラムのまま格納しても良い。
【００２３】
また、前記ライブラリ化されたプログラムは、サブルーチンライブラリであって、前記プログラム実行手段は、前記第１の記憶手段に格納されたメインユーザプログラム中に前記サブルーチンライブラリ呼び出しの専用命令が存在する場合に、指定されたサブルーチンライブラリ内のサブルーチンプログラムを実行するとともに、前記メインユーザプログラムに復帰する機能を備えることである。この構成は、ライブラリ化の処理をした後の状態において、ユニットにてライブラリ化プログラムを実行する際の構成を示すものである。ここでいう「復帰する機能」とは、指定されたサブルーチンプログラムの実行終了後に、メインユーザプログラムに戻って、前の続き、つまり、そのサブルーチンプログラムを呼び出した専用命令の次の命令から実行することである。このようにサブルーチン化することにより、プログラム部品とし、繰り返し利用したり、他のプログラム作成時に利用することができ、プログラム開発の簡略化並びに生産性向上を図ることができる。
【００２４】
また、前記ライブラリ化されたプログラムは、前記ユーザプログラムの全体であって、前記プログラム実行手段は、システム稼動の際に、前記第２の記憶手段に格納されたライブラリ化されたプログラムを実行可能な状態にすることもできる。これは、実施の形態で述べる全体ライブラリの利用に相当する。ここでいう実行可能な状態にするとは、実施の形態では、ライブラリ化して記憶手段に格納したライブラリ化プログラムがコンパイルされた後のものであれば、そのコンパイル対象を実行するようにフラグなどをセットすること、或いは、実際に第２の記憶手段に格納されたプログラムがコンパイルされる前のものであれば、それをコンパイルすること（コンパイル後は第１の記憶手段に展開してもよい）等に対応する。また、すべてのユーザプログラムに対してプロテクトすることができる。
【００２５】
一方、前記ライブラリ生成手段は、ライブラリ化するプログラムを特定するためのライブラリ名を関連付けて第２の記憶手段に格納する機能を持ち、前記第２の記憶手段に格納された前記ライブラリ名を読み出すとともに前記第１の記憶手段に格納するライブラリ名読み出し手段を備えるとよい。
【００２６】
ライブラリ名などを第２の記憶手段に格納すると、そのライブラリ名に基づいてライブラリ化されたプログラムを特定し、実行することができる。但し、第２の記憶手段に格納されているため、外部から参照することはできない。その結果、ライブラリ化したプログラムを別途管理しておかないと、後で確認することができなくなる。そこで、ライブラリ名読み出し手段を設けることにより、外部からアクセス可能な第１の記憶手段にライブラリ名を書き込み、ツールなどによってライブラリ名を読み出すことにより、ユーザ等に第２の記憶手段にどのようなライブラリ（プログラム）が格納されているかを知らせることができる。
【００２７】
さらにまた、前記ライブラリ生成手段は、前記第２の記憶手段に、前記ライブラリ化されたプログラムとともに、そのライブラリを特定するライブラリ識別情報を関連づけて格納する機能を持ち、前記第２の記憶手段に格納した情報を外部記憶手段にバックアップするバックアップ手段を備え、そのバックアップ手段は、入力されたライブラリ識別情報が、前記第２の記憶手段に予め格納された正規のものと一致するか否かを判断し、一致した場合に前記情報を前記外部記憶手段に格納するようにすると良い。
【００２８】
係る構成にすると、ライブラリ識別情報を知っている正規の人のみがライブラリ化されて第２の記憶手段に格納された情報を外部記憶手段にバックアップすることができる。すなわち、ライブラリ識別情報は、第２の記憶手段に格納されているので、ユニットにツールなどを用いてアクセスしても知ることはできないので、正規の人以外はバックアップできない。
【００２９】
ここで、ライブラリ識別情報は、実施の形態ではライブラリＩＤに対応する。また、外部記憶手段は、実施の形態ではメモリカードに対応する。外部記憶手段は、別のユニットに実装されるものでも良いし、自己のユニットに実装されるものでも良い。なお、外部記憶手段として好ましくは、持ち運び可能で、ユニットに取り付け取り外しできるメモリカードがよい。
【００３０】
また、ユニット単体に限るものでもなく、ＰＬＣにおいて上記した各種の機構を備えても良い。一例としては、ユーザプログラムを記憶する第１の記憶手段と、前記第１の記憶手段に格納された前記ユーザプログラムの少なくとも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、前記第２の記憶手段に格納されたライブラリ化されたプログラムを実行するプログラム実行手段と、前記第２の記憶手段を備え、前記第２の記憶手段は、前記ユーザプログラムをアップロードするツールではアクセス不可に構成することにより実現できる。もちろん、このＰＬＣの発明においても、上記した各ユニットの発明と同様の付帯的な機能を付加することができる。
【００３１】
また、本発明に係るユーザプロクラムの処理方法は、ユーザプログラムを格納する第１の記憶手段と、前記第１の記憶手段に格納された前記ユーザプログラムの少なくとも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、前記ユーザプログラムをアップロードするツールではアクセス不可となる第２の記憶手段を備えたＰＬＣを構成するユニットにおけるユーザプログラムの処理方法である。そして、前記第１の記憶手段に格納された前記ユーザプログラムの少なくとも一部をライブラリ化して前記第２の記憶手段に格納して前記ライブラリ化した部分を保護する。また、前記ユーザプログラムの実行時は、前記第２の記憶手段に格納されたライブラリ化されたプログラムを適宜実行させるようにした。
【００３２】
ここで言う「保護する」とは、ユーザプログラムをアップロードするツールでは読み出しが出来ないようにすることであり、いわゆるプロテクトをかける意味である。
【００３３】
また、本発明に係るユニットの別の解決手段としては、入力信号を受け取る入力回路と、その入力信号に基づいてユーザプログラムを実行するプログラム実行手段と、実行結果を出力する出力回路とをもつＰＬＣ用のユニットであって、ダウンロードされたユーザプログラムの一部を部品ライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、前記部品ライブラリ化したプログラムを格納してある第２の記憶手段と、前記部品ライブラリ化したプログラムを呼び出して実行するための専用命令を挿入したユーザプログラムをツールで作成し、そのユーザプログラムを格納する第１の記憶手段と、を備え、前記プログラム実行手段は、前記第１の記憶手段に格納されたユーザプログラムをスキャン実行し、前記ユーザプログラム中の専用命令を実行することによって前記第２の記憶手段から前記部品ライブラリ化されたプログラムを呼び出して実行し、その呼出実行が終了すれば前記ユーザプログラムに復帰して実行するものであり、前記第２の記憶手段を前記ツールからアクセス不可とすることで、前記部品ライブラリ化したプログラムを読み出しできないようにしたものである。ここで言う「入力回路」「出力回路」は入力機器または出力機器がつながる回路、あるいはユニット間結合バスでつながる他ユニットとのデータ通信をするインターフェース部も含んでいる。
【００３４】
また、本発明に係るユニットの別の解決手段としては、入力信号を受け取る入力回路と、その入力信号に基づいてユーザプログラムを実行するプログラム実行手段と、実行結果を出力する出力回路とをもつＰＬＣ用のユニットであって、ダウンロードされたユーザプログラムの全部を全体ライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、前記全体ライブラリ化したプログラムを格納してある第２の記憶手段と、前記全体ライブラリ化したプログラムを呼び出して実行するための設定フラグを、ツールの操作によって格納する第１の記憶手段とを備え、前記プログラム実行手段は、前記第１の記憶手段の設定フラグをきっかけに全体ライブラリ化されたプログラムを第２の記憶手段から呼び出して実行するものであり、前記第２の記憶手段を前記ツールからアクセス不可とすることで、前記全体ライブラリ化したプログラムを読み出しできないようにした。
【００３５】
また、本発明に係るユニットは、ＰＬＣを構成するユニットであって、ツールにて作成したユーザプログラム（このユーザプログラムはライブラリ化してあるプログラムを呼び出して実行するための専用命令を挿入したものである）を格納する第１の記憶手段と、ダウンロードされたユーザプログラムの少なくとも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、前記ライブラリ化されたプログラムを格納しておく第２の記憶手段と、前記ユーザプログラムをスキャン実行してゆき、前記ユーザプログラム中の専用命令の実行によって、前記第２の記憶手段から前記ライブラリ化プログラムを呼び出して実行するプログラム実行手段と、を備え、第２の記憶手段のライブラリ化プログラムは、前もって格納されていて、ユーザプログラムを作成するときに使用するツールからは、ライブラリ化プログラムを読み出しできないようにすることで、ライブラリ化プログラムの内容をプロテクトすることを特徴とするものである。
【００３６】
さらにまた、本発明に係るユニットは、ＰＬＣを構成するユニットであって、ツールにてライブラリ化してあるプログラムを呼び出して実行する定フラグを格納する第１の記憶手段と、ダウンロードされたユーザプログラムの少なくも一部をライブラリ化して第２の記憶手段に格納するライブラリ生成手段と、前記ライブラリ化されたプログラムが格納しておく第２の記憶手段と、ＲＵＮモードにて、前記第１の記憶手段の設定フラグを読み出して、実行する旨のフラグ設定がされている場合には、前記第２の記憶手段からライブラリ化プログラムを呼び出して実行するプログラム実行手段と、を備え、第２の記憶手段のライブラリ化プログラムは前もって格納されていて、設定フラグを設定するツールからはライブラリ化プログラムを読み出しできないようにすることで、ライブラリ化プログラムの内容をプロテクトすることを特徴とするものである。
【００３７】
【発明の実施の形態】
図１は、本発明の一実施の形態を示している。図に示すように、電源（ＰＳ）ユニット１，ＣＰＵユニット２，Ｉ／Ｏユニット３など各種のユニット間の結合バスなどにより電気・機械的に連結してＰＬＣを構成している。また、この例ではＣＰＵユニット２には、メモリカードスロット２ａを有しており、そのメモリカードスロット２ａにメモリカードを挿入することにより、その挿入したメモリカードにＣＰＵユニット２やＩ／Ｏユニット３などのメモリに格納された情報を記憶保持することができるようになっている。
【００３８】
さらに、本実施の形態では、後述するようにＣＰＵユニット２にＭＰＵとユーザプログラムメモリを実装し、Ｉ／Ｏユニット３にもマイクロプロセッサとしての処理部（ＭＰＵ）やユーザプログラムメモリを実装し、係るユーザプログラムメモリにツールで作成したユーザプログラムを格納することにより、ＣＰＵユニットおよびＩ／Ｏユニットにて所望のシーケンス制御を実行することができるようになっている。これにともない、それらＣＰＵユニット２とＩ／Ｏユニット３には、ツール５と通信するためのポートＰも備えており、ツール５で作成した所定のユーザプログラムを各ユニットのポートＰを介してユーザプログラムメモリへダウンロード可能としている。
【００３９】
なお、ここでいうＩ／Ｏユニット３は、ユーザがツールで作成したユーザプログラム（これは作成後に変更可能または編集可能であってもよい）をダウンロードして内部に記憶保存し、そのユーザプログラムを内部で実行する機能を持つとともに、当ユニットに接続された外部機器に対して入出力処理をするものを指す。
【００４０】
例えば、カウンタユニットやアナログ処理ユニット，位置制御ユニットなどがある。ここで、「カウンタユニット」は、エンコーダなどから入力したパルス入力を計数処理し、その計数結果に基づいてユーザプログラムを実行し、その実行結果に基づく出力信号をサーボドライバ部（これは、ユニット外部にあってもユニット内蔵でもよい）などに出力し、サーボモータを制御するために利用するユニットである。サーボモータへの出力信号の種類としては、速度制御をするモータのためのアナログ出力信号でも、パルスモータを制御するためのパルス信号でもどちらでもよい。なお、入力信号もパルス信号に代えて、変位センサなどからのアナログ信号でもよい。
【００４１】
また「アナログ処理ユニット」は、圧力センサや変位センサなどからアナログ信号を入力し、その信号をＡ／Ｄ変換したのち、その変換信号に基づいてユーザプログラム実行をし、その実行結果をアナログ信号として出力するものである。このようなカウンタユニット，アナログ処理ユニット，位置制御ユニットなどのある特定の機能を実行処理するユニットを「高機能ユニット」または「特殊機能ユニット」とも呼ばれることがある。この実施の形態ではこのように呼ばれる高機能ユニットや特殊機能ユニットにも適用が可能である。つまり、本発明で言うＰＬＣ用のユニットは、これらの高機能ユニットや特殊機能ユニットも含まれる。
【００４２】
Ｉ／Ｏユニット３の内部構造は、図２に示すようになっている。すなわち、Ｉ／Ｏユニット３は、センサその他の入力機器からの信号を受信する外部入力回路１１と、出力機器に所定の制御信号を出力する外部出力回路１２を備えている。Ｉ／Ｏユニット３は、これら外部入力回路１１に接続された入力機器（図示せず）から入力信号を入力するとともに，外部出力回路１２に接続された出力機器（図示せず）に対して出力信号を出力することによりＩ／Ｏ情報の送受を行う。さらに、記憶手段としてのＲＯＭ１３，ＲＡＭ１４並びにフラッシュメモリ１５と、その記憶手段に記憶されたプログラムを実行しＩ／Ｏユニット３自身の動作を制御するＭＰＵ１６を備えており、それらはＩ／Ｏユニット３内の内部バスを介して接続されている。
【００４３】
ＲＯＭ１３には、システムプログラムが格納される。システムプログラムとは、このＩ／Ｏユニット３内で実行されるシステム制御処理に関するプログラム情報であり、具体的には後述するユーザプログラム内のひとつひとつの命令自体の処理内容や、後述するライブラリ化を実行するために必要な制御処理内容などである。また、ＲＡＭ１４は、実行時にユーザプログラム等を格納するためのＰＲＧメモリ領域１４ａと、Ｉ／Ｏユニット３のシステム条件を設定するためのシステムメモリ領域１４ｂと、Ｉ／Ｏ情報を格納する変数メモリ領域（ワークエリア）１４ｃを備えている。Ｉ／Ｏ情報は、例えば外部入力回路１１から取り込んだ入力信号や、プログラム実行結果として外部出力回路１２へ出力する出力信号などがある。
【００４４】
さらに、フラッシュメモリ１５には、入力されたＲＡＭ１４上のユーザプログラムを電断時に保持するためのＰＲＧメモリバックアップ領域１５ａを備えている。また、フラッシュメモリ１５には、ライブラリ化したデータを記憶するライブラリデータ記憶領域１５ｂと、その記憶させたライブラリデータを読み出すための情報を格納するライブラリ情報記憶領域１５ｃを備えている。
【００４５】
そして、ＭＰＵ１６は、Ｉ／Ｏユニット３に接続された入力機器と通信し（入力処理）、入力信号に沿ってＲＡＭ１４上に展開されたユーザプログラムを適宜実行する。このユーザプログラムは、ＲＡＭ１４のＰＲＧメモリ１４ａにあるものか、フラッシュメモリ１５のライブラリ情報１５ｃからＲＡＭ１４のＰＲＧメモリ１４ａに展開したもののいずれかである（詳しくは後述する）。そして、ＭＰＵ１６は、そのユーザプログラム実行の各命令内容を、ＲＯＭ１３に格納されたシステムプログラムを参照しながら処理する（ユーザプログラム実行処理）。そして、実行結果に基づいてＩ／Ｏユニット３に接続された外部出力機器へ出力信号を送信する（出力処理）。そして、Ｉ／Ｏユニット３は、この入力処理，ユーザプログラム実行処理，出力処理の３つの処理をサイクリックに繰り返し実行するようになっている。
【００４６】
なお、出力処理のあとに周辺処理期間を設けて、４つの処理をサイクリック処理としてもよい。この場合に、周辺処理としては、ツールからの要求に対する処理，ＰＬＣの通信ユニットを経由して受けた要求処理，リモートＩＯ通信などの処理などがある。また、入力処理と出力処理とは分けずに一連の処理としてもよい。さらに、サイクリック処理の最初に前処理を設けて、前処理，ユーザプログラム実行処理，入出力処理，周辺処理の４つの処理を繰り返し実行するようにしてもよい。
【００４７】
なお、前処理は、例えばユニット自体の異常チェック処理などがある。また前処理に状態別処理も含ませることもできる。状態別処理とは、例えば後述するライブラリ実行フラグの有無やライブラリ読出し処理フラグの有無をチェックしたり、モード設定（プログラムモード／ＲＵＮモード）をチェックしたりする処理である。この前処理の状態別処理はフラグ状態またはモード状態でよって処理が分岐する。すなわち、前述のフラグが立っていなくてモードがＲＵＮモードであれば、ユーザプログラム実行処理に進む（さらにその後は入出力処理に進む）し、各フラグが立っている状態（つまりフラグ有）やプログラムモードであれば、ユーザプログラム実行処理をせずに、そのフラグに対応した処理（フラグ実行処理）またはプログラミングモードに対応した処理に分岐して進む。
【００４８】
このように、この状態別処理で処理フローが分岐するが、いずれにしても、その後には周辺処理で分岐解除になって、その後はまた前処理に戻る。結局は、前述のように４つの処理を繰り返し実行する。なお、後述する特殊リレーサービス処理は、サイクリック処理のなかの状態別処理およびフラグ実行処理で行われる。
【００４９】
なお、ＭＰＵ１６の処理として、このサイクリック処理とは非同期に、ＣＰＵユニット２などとユニット間結合バスを介して情報の送受を行うこともできるようにしている。それは、この情報の送信または受信として、ＣＰＵユニット２からのＩ／Ｏ情報読み出し要求を自ユニットが受け、対応するＩ／Ｏ情報を返信する処理である（これは送受信処理）。
【００５０】
ここで本発明では、ＲＡＭ１４に記憶されたユーザプログラム（ラダー言語などの汎用言語で作成されている）の一部又は全部をライブラリ化し、ツールからはアクセスできない記憶エリアとして本実施の形態ではフラッシュメモリ１５に格納するようにした。ここで言う「ツールからはアクセスできない記憶エリア」は、このＩ／Ｏユニット３のフラッシュメモリ１５に対しては、ツールからの読出コマンドを用意しないことで、ツールからアクセスできない記憶エリアを設けている。別方式として、ツールから読み出し要求があっても、Ｉ／Ｏユニット３側でその要求を処理しないようする方式がある。いずれにしても、Ｉ／Ｏユニット３のフラッシュメモリ１５を読み出し禁止とするような構成にすればよい。
【００５１】
これにより、ツールは、ＲＡＭ１４に格納されているデータ等を読み出しコマンドで読み出すことができるものの、フラッシュメモリ１５に格納されたデータは読み出すことができない。そこで、ノウハウを含むプログラム部分をライブラリ化してフラッシュメモリ１５のみに格納する（さらには、ノウハウを含むプログラム情報をＲＡＭ１４から消去する、あるいは残さないようにする）ことにより、ノウハウを含むプログラム情報を確実にプロテクトすることができる。さらに、フラッシュメモリ１５に格納する際には、ユーザが作成したラダー言語ではなく、実行オブジェクト化した状態で格納することにより、万一悪意にフラッシュメモリ１５を解析などしてその内容を読み出されても普通に理解できない言語となっているし、また通常では逆コンパイルできないので、ノウハウを含むプログラム情報について漏洩することがなく、より安全性が高まる。もちろん、上記したようにツール５ではフラッシュメモリ１５を読み出し参照することができないので、復元可能な状態のユーザプログラムのままで格納するようにしてもプロテクトとしては充分足りる。復元可能というのは、ラダー図状態まで復元することまたはニモニック状態まで復元することも含む。
【００５２】
なお、ここで言うユーザとは、発明の背景の欄で記載した中間ユーザはもちろんのこと、場合によっては、メーカ（ＰＬＣの製造メーカ）や、エンドユーザの場合も有りうる総称的なものである。つまり、ユーザプログラムを開発することができたり、そのユーザプログラムをユニットにダウンロードしたり、ライブラリ化したりすること等ができる正当行為者等を含むものである。このことは、以後の説明でも同様である。
【００５３】
上記した機能を実現するため、さらに、ＲＡＭ１４に格納したユーザプログラムをライブラリ化してフラッシュメモリ１５に記憶させるライブラリ生成機能を備えている（ＭＰＵ１６により実現）。ライブラリ生成機能は、図３，図４で詳述する。ここで、ライブラリ化には「部品ライブラリ」と「全体ライブラリ」との２種類を想定していることを説明する。
【００５４】
まず部品ライブラリについて説明する。この部品ライブラリは複数種類がある。一例としては、「メインプログラムから構成されるユーザプログラムの一部」を部品ライブラリ化する場合である。この場合は、その部品ライブラリ化の対象となるプログラムはサブルーチンプログラムとなる。つまりメインプログラムにはサブルーチンプログラムが含まれていて、そのサブルーチンプログラムを部品ライブラリとして扱えるようにする。ライブラリ化後のサブルーチンプログラムの実行は、メインプログラム実行時に専用命令によって部品ライブラリ化したサブルーチンプログラムを呼び出して実行することになる。
【００５５】
また他の例としては、「サブルーチンプログラムのみから構成されるユーザプログラムの全部」を部品ライブラリ化する場合である。この場合は、部品ライブラリ化対象となる一つまたは複数のサブルーチンプログラムが、それぞれが部品ライブラリとしてのサブルーチンプログラムとなる。
【００５６】
そして、ライブラリ化後のサブルーチンプログラムの実行は、のちに別途作成されるメインプログラムの実行時に専用命令によって、そのサブルーチンプログラムが呼び出して実行することになる。この２つの例のように、メインプログラムから呼び出されて実行される対象プログラムとしてライブラリ化したものを、部品ライブラリと呼ぶ。なお、この部品ライブラリに伴い、本実施の形態では、メインプログラムから希望の部品ライブラリを呼び出すための専用命令（詳細は後述する）を用意した。この部品プログラムをメモリに格納するのは、実施の形態では図４のＳＴ４〜ＳＴ７あたりで説明した。また実際のプログラム実行は、図１０のＳＴ３２，ＳＴ３６，ＳＴ３７で説明する。
【００５７】
なお、この部品ライブラリの便利な点は、ユーザが多用する処理プログラム部分を部品ライブラリとしてサブルーチン化し、それを別途作成するユーザプログラム（メインプログラム）中でその部品ライブラリを呼び出して実行するように、専用命令をユーザプログラムの必要な箇所に挿入することで簡単かつ効率的にプログラムが組める。つまり、一度部品プログラムにしておくことで、それをその後のメインプログラム作成時に１種の応用命令的に活用できるわけである。
【００５８】
また、このように部品ライブラリ化されたサブルーチンプログラムは、メインプログラムとは別々に存在しているので、メインプログラムの作成，編集の影響を受けることはない。また、ユニット提供者がアプリケーションのコアとなる処理部分だけを部品ライブラリ化して、この実施の形態のユニットをユーザに提供すれば、ユーザにてその部品ライブラリのプログラムを活用しながら自由にメインプログラムを作成することができ、システムに合った形で簡単にプログラムをカスタマイズすることができる。
【００５９】
次に全体ライブラリについて説明する。これは普通のユーザプログラム（つまり、サブルーチンプログラムのみから構成されるような特別なユーザプログラムでないものを想定した。）の全体をライブラリ化したい場合には、そのユーザプログラム全体が、全体ライブラリの対象となり、これを１つのライブラリとして扱うことになる。そしてそのユーザプログラム全体を全体ライブラリ化する。その全体ライブラリを使用する際には、一つのひとかたまりのメインプログラムとして実行することになる。なお、この全体ライブラリ化のメモリ格納は、実施の形態での図４のＳＴ４〜ＳＴ７あたりで説明した。また全体ライブラリの実行は、実施の形態の図１０のＳＴ３４，ＳＴ３５、ＳＴ３６，ＳＴ３７で説明した。このように、ひとつのメインプログラムと同等に扱うことから、前述の部品ライブラリに比して、全体ライブラリと呼ぶ。この全体ライブラリは、ユーザの制御プログラム全てをプロテクトしておきたい場合や、特定用途向けアプリケーションプログラムすべてをプリインストールした形でユニット提供者がユーザに「特殊用途向けの○○制御ユニット」という形式で提供することなどに利用できる。
【００６０】
次に、ライブラリ生成機能について説明する。まず、ライブラリ生成機能に関与するＲＡＭ１４とフラッシュメモリ１５の関係は、図３に示すようになっている。ＲＡＭ１４のＰＲＧメモリ領域１４ａは、ツールで作成したユーザプログラムを中間コード（中間言語）に変換してから格納する領域である。ＲＡＭ１４の変数メモリ１４ｃの変数メモリ領域に、中間言語で格納したプログラムがライブラリ化するプログラムであるか否のフラグをツールから設定する。またシステムメモリ領域１４ｂには、ライブラリ種別（全体ライブラリ／部品ライブラリ）等のライブラリ化する際の各種システム設定情報がツールから設定される（後述のＳＴ２で述べる）。これらの設定は、Ｉ／Ｏユニット３がプログラミングモードにて行われる。
【００６１】
そしてこの後、Ｉ／Ｏユニット３をいったんＲＵＮモードに切り替える。ＲＵＮモードにするのは、ＲＡＭ１４のＰＲＧメモリ領域１４ａに格納したユーザプログラムを、コンパイルするためである。ユーザプログラムを一度ＲＵＮさせて生成された実行オブジェクトのデータ（機械語に翻訳されたユーザプログラム）は、ＲＡＭ１４の変数メモリ１４ｃの実行オブジェクト領域に格納される（なお、後述するが、ここに格納した実行オブジェクトは、対象のユーザプログラムの種別が部品ライブラリである場合に、図４のＳＴ５で利用される。さらに、ユーザプログラムのコンパイル時に同時に生成されるサブルーチンテーブルなどのプログラム実行に必要な情報もシステムメモリ領域１４ｂに格納される）。
【００６２】
また、一度ＲＵＮモードにしたときには、ＭＰＵ１６の処理にて、ＲＡＭ１４のＰＲＧメモリ領域１４ａのユーザプログラムが、フラッシュメモリのＰＧＭメモリバックアップ領域１５ａに格納される。これはＲＡＭ１４のＰＲＧメモリのユーザプログラムを必要なときに再現するためのものである。例えば一例として、プログラムのライブラリ化をすべく、作成中のプログラムを編集しユニットにダウンロードしＲＵＮモードにすることを繰り返し行っている時などに、ユニットが電源オフしたことなどによって編集中のユーザプログラムがＲＡＭ１４から消去または不定状態に変化しても、ユーザが必要に応じて前回ダウンロードした編集プログラムを再現するのに再現利用できるように、バックアップをしておくものである。
【００６３】
なお、ライブラリ化の処理終了後には、このフラッシュメモリのバックアップエリアの内容を消去し、ＲＡＭ１４に再現展開して、ツールから読み出しできないようにしている。なお、内容消去の代わりに、実施の形態で説明したように、秘密のものでない別途のプログラム（ＥＮＤ命令だけのプログラムなど）に更新することでもよい。
【００６４】
さらに、このＲＡＭ１４の中身は、ユニットを電源オフすることですべて消去されるようになっている。そのため、いったんユーザプログラムがＲＡＭ１４に格納されても、ライブラリ化終了後にユニットの電源をオフすることでユーザプログラム（秘密にしたいプログラム部分を含むプログラム）は消去され、後からツールでＲＡＭ１４にアクセスしたとしても秘密にしたいプログラムが読み出されるおそれはない。また、フラッシュメモリ１５のほうは、ユニットが電源オフしても記憶内容は消去しないようになっている。
【００６５】
また、ＲＡＭ１４の変数メモリ領域１４ｃには、図４のＳＴ１等で説明するライブラリ化を実行するためのフラグ（ライブラリ化実行フラグ）が格納される。このフラグは、ユーザがツールでユーザプログラムを作成し、Ｉ／Ｏユニット３にダウンロードしたあとに、ライブラリ化を実行したいときに、ライブラリ化実行フラグをセットする。
【００６６】
係る状態において、ライブラリ生成機能は、図４に示すフローチャートをＭＰＵ１６が実行するようになっている。Ｉ／Ｏユニット３のモードを、ＲＵＮモードからプログラミングモードに戻すと、ＭＰＵ１６は、ツールで作成したユーザプログラムについて、ＲＡＭ１４の変数メモリ領域１４ｃのライブラリ化実行フラグを読み出す。ＭＰＵ１６は、読み出したフラグがＯＮの場合（ＳＴ１）に、ＲＡＭ１４のシステムメモリ領域１４ｂに格納された各種システム設定を読み出し（ＳＴ２）、読み出した設定内容からライブラリ種別が部品ライブラリか全体ライブラリかを判断する。実際にはライブラリ種別が、部品ライブラリの指定か否かを判断する（ＳＴ３）。
【００６７】
なお、部品ライブラリ化しようとしているプログラムは、ツールで作成することになるが、その作成後にライブラリ化処理する方法は、少なくとも２通りある。
【００６８】
第１の方法は、ツールで対象プログラムを特定してから、部品ライブラリ対象部分だけをＩ／Ｏユニット３にダウンロードする方法である。この場合は、前述したように、部品ライブラリ化する場合に当たり、ライブラリ化対象はＲＡＭに格納されたサブルーチンプログラムから構成されるユーザプログラム全体となる。
【００６９】
また、第２の方法は、ツールで作成したユーザプログラム（ライブラリ化する部分、市内部分を含んだプログラム）をすべてＩ／Ｏユニット３にダウンロードし、そのあとツールでライブラリ対象部分を特定する方法である。この場合は、ＲＡＭに格納された一部のライブラリ対象部分だけを部品ライブラリ化することになる。
【００７０】
部品ライブラリの指定の場合、つまりライブラリ対象が、ユーザプログラムの一部または全部を部品ライブラリ化する場合には、ステップ４に飛び、ＭＰＵ１６は、ＲＡＭ１４のＰＲＧメモリ領域１４ａに格納された対処のユーザプログラムをＭＰＵ１６が読み出すとともに、読み出したプログラムを中間言語の状態のままフラッシュメモリ１５のライブラリデータ記憶領域１５ｂに格納する（ＳＴ４）。このステップ４は、実行オブジェクト化される前のユーザプログラムをフラッシュメモリ１５上に格納するために行なわれる。この内容は逆コンパイル可能なので、必要に応じてラダー図状態まで復元することも、ニモニック状態で見ることもできる。
【００７１】
次いで、ＭＰＵ１６は、ＲＡＭ１４の変数メモリ領域１４ｃの実行オブジェクト用領域に格納されたそのユーザプログラムの実行オブジェクトを読み出すとともに、その実行オブジェクト（機械語に翻訳されたユーザプログラム）をフラッシュメモリ１５のライブラリデータ記憶領域１５ｂに格納する（ＳＴ５）。ここでは、前述したようにＩ／Ｏユニット３をＲＵＮモードに切り替え、ユーザプログラムを一度ＲＵＮして生成された実行オブジェクトを前もって、ＲＡＭ１４の変数メモリ領域１４ｃの実行オブジェクト用領域に格納するようにしたが、これに限らず、前もってコンパイルして格納せずに、このステップ５の中で、改めてＲＡＭ１４のユーザプログラムをコンパイルし、コンパイル後の実行オブジェクトをフラッシュメモリ１５のライブラリデータ記憶領域１５ｂに格納するようにしてもよい。この格納内容は、普通に理解できない言語となっているし、また逆コンパイルできないので、ラダー図状態またはニモニック状態まで復元することができない。
【００７２】
また、この例では、ＳＴ４とＳＴ５とで二重にユーザプログラムをライブラリデータ記憶領域１５ｂに格納、つまり、実行オブジェクト化される前のユーザプログラムと実行オブジェクト化された後のユーザプログラムとの２つをライブラリデータ記憶領域１５ｂに格納しているが、ＳＴ４またはＳＴ５の一方を省略することもできる。
【００７３】
さらに、ＭＰＵ１６は、対象となるユーザプログラムのコンパイル時に生成されたサブルーチンテーブルなどのプログラム実行に必要な情報をＲＡＭ１４のシステムメモリ領域１４ｂから読み出すとともに、フラッシュメモリ１５のライブラリ情報記憶領域１５ｃに格納する（ＳＴ６）。サブルーチンテーブルは、サブルーチンと、それぞれのサブルーチンに付けられた番号と、それぞれが格納されたフレッシュメモリのアドレス範囲などとの関連付け情報が含まれている。さらに、その他のライブラリ情報を生成し、フラッシュメモリ１５のライブラリ情報記憶領域１５ｃに格納する（ＳＴ７）。このライブラリ情報としては、例えば、ライブラリを認識するためのコードであるライブラリＩＤや、ユーザ等がわかりやすくするために、登録ライブラリに付加した固有の名称（ライブラリ名）や、ライブラリ内で特殊な命令を使用している場合の参照情報テーブル（ライブラリ命令テーブル）等各種の情報がある。このライブラリ情報は、後述するように正規のユーザがメモリカードにバックアップする場合やメモリカードからダウンロードする場合に利用される。また、ライブラリＩＤやライブラリ名についてはライブラリ化処理の際に、ユーザがツールで予め設定し、ＲＡＭ１４のシステムメモリ領域１４ｂに格納しておいたものを読み出すことにより生成される。ライブラリ命令テーブルは、ライブラリ化処理の際に行われるユニットシステム処理で作られる。さらに、上記した予め記憶・設定された情報以外にも、例えばユーザプログラムや実行オブジェクトを格納したライブラリデータ記憶領域内のアドレスやポインタなどのユーザプログラム等を読み出すための情報もライブラリ情報として格納される。
【００７４】
その後、ライブラリＩＤは読み出し可能なＲＡＭ１４に残ったままなので、正規のユーザ以外に利用されないようにライブラリＩＤを初期化後、ライブラリ化実行フラグをＯＦＦにして、ライブラリ化の全体処理を終了する（ＳＴ８）。なお、ライブラリＩＤを消去する旨を説明したが、ライブラリＩＤ以外のライブラリ情報も同じように初期化して消去してもよい。なお、ＲＡＭ１４に格納されたユーザプログラム等をライブラリ化（部品ライブラリ化）してフラッシュメモリ１５に格納する際の処理イメージの一例としては、例えば、図５に示すようなものとなる。
【００７５】
一方、ライブラリ種別が全体ライブラリの場合には、ＭＰＵ１６の処理としてはステップ３の分岐判断でＮＯとなるのでステップ９に飛び、ＭＰＵ１６がＲＡＭ１４のＰＲＧメモリ領域１４ａに格納されたユーザプログラムを読み出すとともに、読み出したユーザプログラムをフラッシュメモリ１５のライブラリデータ記憶領域１５ｂに格納する（ＳＴ９）。次いで、ＭＰＵ１６がＲＡＭ１４のシステムメモリ領域１４ｂに格納されている各種システム設定を読み出すとともに、フラッシュメモリ１５のライブラリ情報記憶領域１５ｃに格納する（ＳＴ１０）。さらに、ＭＰＵ１６によりその他のライブラリ情報を生成し、フラッシュメモリ１５のライブラリ情報記憶領域１５ｃに格納する（ＳＴ１１）。このライブラリ情報としては、例えば、ライブラリを認識するためのコードであるライブラリＩＤや、ユーザ等がわかりやすくするために、登録ライブラリに付加した固有の名称（ライブラリ名）や、ライブラリ内で特殊な命令を使用している場合の参照情報テーブル（ライブラリ命令テーブル）等各種の情報がある。このライブラリ情報の作成処理は部品ライブラリの場合と基本的に同様である。その後、ライブラリ化実行フラグをＯＦＦにして、ライブラリの全体処理を終了する（ＳＴ８）。なお、ＲＡＭ１４に格納されたユーザプログラム全体をライブラリ化（全体ライブラリ化）してフラッシュメモリ１５に格納する際の処理イメージの一例としては、例えば、図６に示すようなものとなる。
【００７６】
なお、このようにライブラリ化されてフラッシュメモリに格納されたライブラリプログラム（ＳＴ４，ＳＴ５，ＳＴ９で格納されたプログラム）は、図８，図９，図１０で説明する実行環境にて実行される。
【００７７】
最後に、ＲＡＭ１４の記憶内容とフラッシュメモリ１５のＰＲＧメモリバックアップ領域の記憶内容とを消去するが、この消去はさまざまな方法がある。一例を挙げると、ＳＴ８の後、ユーザは、ＥＮＤ命令だけのユーザプログラムをツールで作成し、それをＩ／Ｏユニット３にダウンロードする。すると、ＲＡＭ１４のＰＧＭメモリ１４ａにＥＮＤ命令だけのユーザプログラムが格納される。このときライブラリ化処理をしたときの前回のユーザプログラムはＥＮＤ命令の上書き格納によって消去され、新しくＥＮＤ命令だけのユーザプログラムが残ることになる。そして、Ｉ／Ｏユニット３をＲＵＮモードに切り替えることで、フラッシュメモリ１５のＰＲＧメモリバックアップ領域１５ａのほうにもＥＮＤ命令だけのユーザプログラムがバックアップとして上書き記憶される。このとき前回のライブラリ化対象のプログラムは消去される。この後Ｉ／Ｏユニット３の電源をオフすると、ＲＡＭ１４の記憶内容は消去する。このようにすることで、ライブラリ化対象のプログラムを読み出し可能なメモリエリアから消し去ることができる。
【００７８】
他の例としては、ＳＴ８のライブラリ化実行フラグをＯＦＦして、ライブラリ化全体処理の終了とともに、ＲＡＭ１４ａとフラッシュメモリのＰＲＧメモリバックアップ領域１５ａに残っているライブラリ化対象のユーザプログラムが、Ｉ／Ｏユニット３のシステム的な処理によって消去するようにしてもよい。また他の例としては、ＳＴ８の前か後のいずれかで、ツールから消去操作をすることでも実現できる。
【００７９】
次に、ＭＰＵ１６に設けられたライブラリ生成機能を稼動させ、上記した手順によりユーザプログラムをライブラリ化したＩ／Ｏユニット３を用い、実際に制御を行う場合のライブラリ化したプログラムの実行について説明する。
【００８０】
まず、ユーザ（前述のライブラリ化を施したユーザとは別のユーザを想定している）がツールにより、ユーザプログラムを新規で作成する。このときフラッシュメモリ１５に部品ライブラリが格納されていて、その部品ライブラリを利用したい場合、メインプログラム（ラダー言語で作成）に、サブルーチンの呼び出しのための専用命令を書く。ここでは、［ＬＩＢ  Ａ  Ｂ  Ｃ］という専用命令を用意した。つまり、「ＬＩＢ」がフラッシュメモリ１５に格納した部品ライブラリ（サブルーチンライブラリ）の呼び出し命令であり、「Ａ」がフラッシュメモリ１５内のライブラリサブルーチンを特定するライブラリサブルーチン番号であり、「Ｂ」がライブラリに入力する引数データのエリアを指定するための入力ＣＨ先頭番号であり、「Ｃ」がライブラリから出力される引数データを格納するエリアを指定するための出力ＣＨ先頭番号である。Ａのサブルーチン番号は、ライブラリ化を施したユーザが、Ｉ／Ｏユニットの操作マニュアルなどにサブルーチンプログラムの処理内容やそのサブルーチン番号などを解説しておき、それを参照することで知ることができる。また、引数データのエリアＢ，Ｃは、ユーザプログラムを作成しているユーザがＩ／Ｏユニット３内のデータメモリ（図２では図示せず）などに設定すればよい。なお、ユーザプログラムを作成したのち、ツールからＩ／Ｏユニット３に対してポートを介してダウンロードする。ダウンロードすると、ユーザプログラムはＲＡＭ１４に格納される。そしてＩ／Ｏユニット３をＲＵＮモードにすることで、ＲＡＭ１４に格納されたユーザプログラムは、バックアップのためにフラッシュメモリのＰＲＧバックアップエリアに格納されるとともに、コンパイルされ実行オブジェクトとして、ＲＡＭ１４の実行オブジェクト格納手段に格納する。なお、ＲＵＮモードのイニシャル処理については、図１０で詳述する。
【００８１】
次いで、ＲＵＮモードのＩ／Ｏユニット３は、ＭＰＵ１６によって、ＲＡＭ１４の変数メモリの実行オブジェクト領域に格納されたメインプログラムを実行する。実行中に上記専用命令が存在した場合、ＭＰＵ１６はそのサブルーチンプログラムのライブラリサブルーチン番号を認識し、そのサブルーチン番号に基づいてフラッシュメモリ１５内のライブラリ情報記憶領域１５ｃに格納したライブラリ情報中のサブルーチンテーブルを参照し、該当する部品ライブラリがフラッシュメモリにおける格納場所を認識し、当該部品ライブラリを起動する。このときプログラムカウンタは、ユーザプログラム（メインプログラム）のＲＡＭ１４のＰＧＭメモリ上のアドレスから、フラッシュメモ１５の部品ライブラリが格納されているライブラリデータ領域の特定のアドレスに切り替わる。この部品ライブラリの起動時は、ライブラリ用サブルーチンワークテーブルに戻りアドレス等の必要なデータがスタックされる。そして、ライブラリ内のサブルーチンからメインプログラム実行に復帰する場合に、スタックしていた戻りアドレスを、プログラマブルカウンタに入れることで、メインプログラムの続きから処理実行される。
【００８２】
上記した処理を実行する具体的な処理機能は、図８，図９に示すフローチャートのようになっている。まず、メインプログラムをＭＰＵ１６が実行している。メインプログラムの実行中に専用命令（ＬＩＢ）が出現すると、図８に示すライブラリサブルーチン実行処理がＭＰＵ１６にて起動する。そして、ＭＰＵ１６がまず指定ライブラリが指定されているか否かを判断し（ＳＴ２０）、指定されている場合には、サブルーチン実行後にメインプログラムに戻るための情報を残すべく、ライブラリ実行用ワークにメインプログラム実行状態（実行アドレス等）を退避（スタック）する（ＳＴ２１）。
【００８３】
次いで、ＭＰＵ１６にて、ＰＣ（プログラムカウンタ）をメインプログラム実行アドレス空間からライブラリ実行アドレス空間へ切り替え（ＳＴ２２）、ライブラリ化されたプログラムを実行する（ＳＴ２３）。つまり、ライブラリ情報に従い、指定された部品ライブラリをフラッシュメモリから読み出して、そのプログラムを実行する。一方、指定ライブラリがない場合には、ステップ２０の分岐判断でＮＯとなるので、ステップ２４に飛び、命令エラー処理を実行後、処理を終了する（ＳＴ２５）。
【００８４】
また、ステップ２３のライブラリ実行によるライブラリサブルーチンを完了し、元のメインプログラムへ復帰する場合は、ＭＰＵ１６は図９に示すフローチャートに従って処理される。なお、本実施の形態では、この復帰処理は通常のサブルーチンからの復帰処理と共用している。通常のサブルーチンプログラムとは、ＲＡＭ１４に格納するラダーメインプログラムの一部として作成されるもので、ライブラリ化してフラッシュメモリに格納されるサブルーチンプログラムではない。そのため、まず、現在のサブルーチン処理がライブラリ実行か否かを判断する（ＳＴ２６）。そして、ライブラリ実行の場合には、待避させていたライブラリ用ワークのメインプログラム実行状態（実行アドレス等）から復帰する（ＳＴ２７）。すなわち、ステップ２１で退避したデータ（メインプログラム実行状態）を取得する。そして、取得したデータに基づき、プログラムカウンタをメインプログラム実行アドレスへ切り替える（ＳＴ２８）。これにより、復帰処理が完了し、メインプログラムを順次実行するようになる。
【００８５】
なお、通常のサブルーチンからの復帰の場合には、ステップ２６の分岐判断でＮＯとなるので、ステップ２９に飛び、通常サブルーチンワークからデータ復帰（サブルーチン処理を実行する前に退避処理していたデータを取得）をし、復帰処理を完了することになる。
【００８６】
一方、全体ライブラリの実行は、ライブラリ化したプログラムそのものをメインプログラムとして実行するものである。これは前述の通常のユーザプログラムで部分ライブラリを実行する場合と、その方法が違う。つまり、通常のユーザプログラム実行は、ＲＡＭ１４のＰＲＧメモリ領域１４ａに格納されているため、その領域からメインプログラムとしてユーザプログラムを読み出し、コンパイルしてプログラム実行するが、この全体ライブラリを実行する場合には読み出し対象のユーザプログラムがＲＡＭ１４には存在せず、フラッシュメモリ１５にライブラリとして格納されているため、そのフラッシュメモリ１５に格納されたプログラムをコンパイル対象とし、コンパイル後プログラムを実行することになる。
【００８７】
なお、本実施の形態におけるＩ／Ｏユニット３は、部品ライブラリと全体ライブラリのプログラムの利用形態はもちろん、係るライブラリ化をしない通常のユーザプログラムの利用形態のいずれも実施可能にしている。そのため、起動後のＲＵＮイニシャル処理をする。ここでＲＵＮイニシャル処理について図１０に示すフローチャートを用いて説明する。
【００８８】
ユーザ（ライブラリ化を施したユーザとは別のユーザ）がツールにより、ユーザプログラムを作成してＩ／Ｏユニット３のＲＡＭ１４のＰＧＲメモリ領域１４ａにダウンロードして実行させる場合、作成したユーザプログラム中で部品ライブラリを呼び出して利用するなら、ＲＡＭ１４のシステムメモリ領域１４ｂのライブラリの指定情報を部品ライブラリに設定する。もしライブラリを利用せずに、通常のユーザプログラム（通常のサブルーチン処理をする場合も含む）だけを処理するのであれば、ＲＡＭ１４のシステムメモリ領域１４ｂのライブラリの指定情報を部品ライブラリでも全体ライブラリでもない通常のユーザプログラム実行に設定する。
【００８９】
そしてその後、Ｉ／Ｏユニット３はプログラムモードからＲＵＮモードに切り替わる。なお、前述のようにＲＵＮモードになると、ＭＰＵ１６は、フラッシュメモリ１５のバックアップ領域１５ａの方に、ＲＡＭ１４のＰＧＲメモリ領域１４ａにダウンロードされたユーザプログラムをバックアップ記憶させる。また、電源オン時など、フラッシュメモリ１５のバックアップ領域１５ａにユーザプログラムが格納されていて、ＲＡＭ１４のＰＧＲメモリ領域１４ａが空の場合には、ＭＰＵ１６は、フラッシュメモリ１５のバックアップ領域１５ａのユーザプログラムを、ＲＡＭ１４のＰＧＲメモリ領域１４ａに展開しておく。
【００９０】
ＲＵＮモードに切り替わると、まず、ＭＰＵ１６は、ＲＡＭ１４のシステムメモリ領域１４ｂに格納されたシステム設定を読み出し、ライブラリの指定があるか否かを判断する（ＳＴ３０，ＳＴ３１）。そして、ライブラリの指定がない場合には通常のユーザプログラムのみの実行であるので、ＲＡＭ１４のＰＧＲメモリ領域１４ａに格納されたプログラム（ユーザプログラム）をコンパイル対象にセットする（ＳＴ３２）。
【００９１】
また、ライブラリの指定があった場合（ステップ３１の分岐判断でＹＥＳ）でも部品ライブラリの設定の場合（ステップ３３の分岐判断でＮＯ）には、メインプログラムはＲＡＭ１４に格納されたユーザプログラムから実行するため、ステップ３２に飛び、上記した処理を実行する。なお、このとき、部品ライブラリプログラムをコンパイルしないのは、図４のＳＴ５の処理で、すでにコンパイルして実行オブジェクトの状態でフラッシュメモリに格納しているからである。図４の処理において、ＳＴ５をせずにＳＴ４のみしていた場合には、図１０では図示していないが、フラッシュメモリにＳＴ４で格納されたユーザプログラム（実行オブジェクト化する前のもの）を読み出してコンパイルし、フラッシュメモリに実行オブジェクトの状態で格納する処理を増やせばよい。
【００９２】
そして、ライブラリの指定があり（ステップ３１の分岐判断でＹＥＳ）、全体ライブラリの設定の場合（ステップ３３の分岐判断でＹＥＳ）には、フラッシュメモリ１５内のライブラリ情報記憶領域１５ｃに格納された命令テーブルシステム設定をセットする（ＳＴ３４）。これにより、コンパイル処理対象の全体ライブラリがフラッシュメモリ１５内のどこに格納されているか等がわかる。そして、フラッシュメモリ１５のライブラリデータ記憶領域１５ｂに格納されたプログラム（全体ライブラリ）をコンパイル対象にセットする（ＳＴ３５）。
【００９３】
上記したステップ３２或いはステップ３５を実行後、ＭＰＵ１６は、フラッシュメモリ１５のライブラリデータ記憶領域１５ｂに格納された対象ライブラリプログラムを読み出してコンパイルを実行し（ＳＴ３６）、実行オブジェクトの状態でＲＡＭ１４に格納する。その後は、通常のＲＵＮモードとしてのユーザプログラムの実行を行う。なお、上記したステップ３４，３５，３６が全体ライブラリの実行のための処理機能である。換言すると、全体ライブラリのみに対応しているＩ／Ｏユニットの場合には、ステップ３０から３３までの処理ステップが不要となる。
【００９４】
上記したようにして、部品ライブラリや全体ライブラリの生成／読み出し実行ができる。また、部品ライブラリの場合には、ライブラリ化するプログラムは図３のところで述べたように一旦ＲＡＭ１４に格納するが、ライブラリ化処理を完了した後は係るＲＡＭ１４に格納したプログラムは不要となり、消去される。そして、実質的なユーザプログラムは、ＲＡＭ１４に格納したメインプログラムとフラッシュメモリ１５に格納した部品ライブラリであるため、部品ライブラリ化したプログラム容量分だけ、ＲＡＭ１４の領域を使わなくて済む（その分はフラッシュメモリに格納される）ので、ＲＡＭ１４にとって使用できるプログラム容量を増やすことができる。つまり、部品ライブラリ化するプログラムと、ＲＡＭ１４に格納するユーザプログラムの配分を適宜に設定することにより、実質的にＲＡＭ１４のＰＧＲメモリ領域１４ａのメモリ容量以上のサイズのユーザプログラムを作成することができる。
【００９５】
ところで、いったんライブラリ化したプログラムは、アクセス不可なフラッシュメモリのほうにのみ記録され、その内容はツールなどから読み出しはできないため、どのプログラムをライブラリ化してフラッシュメモリ１５に登録したかわからなくなる。そこで本実施の形態では、ライブラリ名の読み出し機能を設けた。
【００９６】
すなわち、図１１に示すフローチャートを実施する機能をＭＰＵ１６に持たせている。はじめに、ユーザがライブラリ名を読み出したい場合、ツールを用いてＲＡＭ１４の変数メモリ１４ｃに存在するライブラリ名読み出しフラグを立てる。そして、Ｉ／Ｏユニット３は、サイクリック処理の中で特殊リレーサービス処理を実行する。その特殊リレーサービス処理内のひとつの処理として、まず、ライブラリ名読み出しフラグを読み出し（ＳＴ４１）、読み出し指定がある（フラグがＯＮ）場合（ステップ４２の分岐判断でＹＥＳ）には、ライブラリの有無をチェックする（ＳＴ４３）。そして、ライブラリが存在する場合（ステップ４３でＹＥＳ）には、フラッシュメモリ１５内のライブラリ名をＲＡＭ１４の変数メモリ領域１４ｃの予め決まった領域へセットする（ＳＴ４４）。これにより、ユーザはツールを用いてＲＡＭ１４の予め決まった領域を参照し、読み取りすることにより、ライブラリ名を取得することができ、ライブラリ化したプログラムの内容を判断することができる。
【００９７】
次に、上述したＩ／Ｏユニット３の各機能を応用した実施の形態を説明する。上述したＩ／Ｏユニット３のＲＡＭ１４やフラッシュメモリ１５に記憶された情報は、ユニット間結合バスを介して接続されているＣＰＵユニット２に装着したメモリカード（例えば、コンパクトフラッシュメモリ等）にバックアップすることができる。もちろん、メモリカードの装着はＣＰＵユニットに限ることは無く、当該Ｉ／Ｏユニットにメモリカード装着構造を加えてもよいし、その他メモリカードを装着し、Ｉ／ＯユニットのＲＡＭ１４やフラッシュメモリ１５に対してデータの読み書きを制御する機能を備えたユニットを別途新しく設けても良い。いずれかのユニットを利用して、Ｉ／Ｏユニット３のＲＡＭ１４やフラッシュメモリ１５に記憶されたプログラム情報のバックアップを採る（アップロードする）ことで、さまざまな応用ができる。また、メモリカードに格納した情報を、Ｉ／Ｏユニット３のＲＡＭ１４やフラッシュメモリ１５に格納する（ダウンロードする）ようにしてもさまざまな応用ができる。
【００９８】
そして、このバックアップ機能を利用することにより、フラッシュメモリ１５に格納したライブラリをメモリカードに格納することができ、そのメモリカードを他のＰＬＣに実装するとともに、ダウンロードすることにより、ライブラリ化したプログラムを係る他のＰＬＣに組み込むことができてしまう。
【００９９】
そこで、本実施の形態では、正規のユーザ以外の人が不正にバックアップをして係る他のＰＬＣに組み込むことができないように、アップロード時のプロテクト機能を設けた。これにより、ライブラリの不正使用を抑止（メモリカードへのバックアップ防止）することができる。そして、具体的な処理機能は以下の通りである。
【０１００】
まず、メモリカードへのアップロード（ユニット→メモリカード）操作は、ユーザがＲＡＭ１４のシステムメモリ領域１４ｂのシステム設定（図示せず）にツールを使ってライブラリＩＤを格納し、次にユニット割付リレーエリア（ＣＰＵユニットとＩ／Ｏユニット間でサイクリックにデータ交換するエリア）のフラグ操作により行うようにした。そして、図１２に示すように、バックアップファイル形式は、番号とファイル名を関連付けたものとし、フラグ操作はユニットデータアップロードとユニットデータダウンロードを用意し、いずれも「０→１」に変わった際に、メモリカードへの書き込み／読み出しを行うようになる。さらにステータス表示としては、メモリカード転送エラーと、転送Ｂｕｓｙが用意される。
【０１０１】
これらステータス表示は、その状態を表すデータとしてユニット内に格納される。この格納されたデータをもとにユニット外部へ報知（ＬＥＤ等の表示）したり、ツールで表示したりできる。なお、メモリカードへのアップロード操作やダウンロード操作（後述）に用いるフラグ操作対象のフラグはＩ／Ｏユニット３内の所定部分（例えば、変数メモリ１４ｃ）に設ける。このフラグ操作対象のフラグは、ＣＰＵユニットとＩ／Ｏユニットの間でサイクリックにデータ交換するエリアに設けると良い。このようにすれば、ＣＰＵユニットの所定エリア（上述のユニット割付リレーエリア相当）をフラグ操作することでアップロード／ダウンロード操作ができ、ＣＰＵユニットに接続されるツール以外の機器（例えば、プログラマブル表示器）からもアップロード／ダウンロード操作が可能となる。
【０１０２】
この状態におけるメモリカードへのアップロード機能は、以下のようにＭＰＵ１６にて実行（特殊リレーサービス処理のひとつとして）される。すなわち、メモリカードへデータを書き込む時、以下の情報▲１▼から▲３▼をライブラリ関連データとセットで書き込む。
【０１０３】
▲１▼ヘッダー情報
▲２▼バックアップデータ（ライブラリ関連データ）
▲３▼ＳＵＭ値
【０１０４】
そして、アップロード対象の保存データをメモリカードに書き込む前に、メモリカードに「ｕｎｉｔ＊＊．ｐｒｍ」（＊＊はユニット番号）という名称のファイルを生成し、ヘッダー情報を書き込む。ヘッダー情報は、図１３に示すように、ユニットタイプ情報を記入したユニット形式と、ユニットのソフトバージョン情報と、最大内部パラメータ長を備えてなる。なお、図１３において、バックアップデータは、アップロード対象のユーザプログラムやライブラリ等である。また、ライブラリＩＤもバックアップデータとしてメモリカードへ格納される。なお、前述のヘッダー情報及びバックアップデータのデータ構造は、ユーザプログラムを作成・編集するツールでは、解釈できない構造となっているため、該ツールを利用してラダー言語やその他の言語プログラムに復元することはできない。
【０１０５】
そして、Ｉ／Ｏユニット３のフラッシュメモリ１５内に保存されているライブラリＩＤとシステム設定に設けてあるライブラリＩＤ（アップロード操作としてユーザがツールを用いて入力したもの）の照合をかけて一致しているか否かを判断し、一致している場合のみメモリカードへの書き込みを許可し、処理を実行する。これにより、第三者により本ライブラリを搭載してあるユニットから別のメモリカードへ複写等されることを防止し、さらに、アップロードしたデータを再度別ユニットにダウンロードして使用することを防ぐ（コピープロテクト）ことができる。よって、本アップロード操作は、本ライブラリのライブラリＩＤを知っているユーザのみ操作が可能となる。
【０１０６】
すなわち、ライブラリＩＤは、フラッシュメモリ１５に格納されているため、Ｉ／Ｏユニット３にアクセスしても知得することはできない（ライブラリ化処理をする際には、ＲＡＭにライブラリＩＤ等が格納されるが、図４のステップ８の実行によりライブラリＩＤが初期化される）。よって正規のユーザ以外はライブラリＩＤを知らないので、当該ライブラリＩＤの入力した人は正規のユーザと判断し、メモリカードへのバックアップを許容する。そのため、正規のユーザ以外が、メモリカードにバックアップすることにより、ライブラリ化されたプログラム等を不正取得されることが防止できる。
【０１０７】
なお、上記したように、この正規のユーザのチェックのために、予めＲＡＭ１４にライブラリＩＤを登録するので、そのまま残しておくと、ライブラリＩＤを不正取得させるおそれがある。そこで、バックアップ処理完了後或いは正規のユーザであることを確認後などの所定のタイミングで、ＲＡＭ１４に格納したライブラリＩＤを消去する。
【０１０８】
一方、ダウンロード機能（メモリカード→ユニット）は、以下の通りである。ユニットへのダウンロード操作は、ユーザがユニット割付リレーエリアの所定フラグを操作することで実行される。具体的なダウンロード処理は、特殊リレーサービス処理のひとつとしてＭＰＵ１６にて実行される。すなわち、ダウンロード処理時に、Ｉ／Ｏユニット３は最初にメモリカードからヘッダー情報を読み込む。この時、メモリカード上に該当するファイル名のファイルが見つからない場合や、ヘッダー情報に格納されているユニット形式が自ユニットの形式と一致しない場合には、エラーが発生したと判断し、メモリカード転送エラーフラグをＯＮして終了する。
【０１０９】
このように、一旦メモリカードにアップロード（バックアップ）したライブラリを、所定の手順に従ってＩ／Ｏユニット３にダウンロードすることができる。そして、このダウンロードする際にＩ／Ｏユニット３は、アップロードした際のＩ／Ｏユニット３と同一でも良いし、他のＩ／Ｏユニット３でもよい。同一のＩ／Ｏユニット３の場合には、アップロードは、文字通りデータ（情報）のバックアップとなる。また、他のＩ／Ｏユニット３にダウンロードする場合には、既にユーザ等が作成しライブラリ化したプログラムをパッケージ化（部品化）することで、他のＩ／Ｏユニット３におけるプログラム開発，実装に利用できる。
【０１１０】
つまり、ＰＬＣや、ＰＬＣ用のユニットの製造メーカや、そのＰＬＣ，ユニットを購入し、産業機械に組み込むユーザなどにとっては、各取引先に対して、ユーザプログラム，ライブラリを組み込んだユニット等の提供をするのみならず、ライブラリ生成手段等を備えた本発明のユニット，ＰＬＣを既に持つ相手に対しては、上記バックアップしたメモリカードを提供するような事業形態をとることもできる。もちろん、同一ユーザ内での他のＩ／Ｏユニットにダウンロードすることもできる。
【０１１１】
その場合でも、メモリカードに格納されたライブラリＩＤを知らない人は、メモリカードを用いてフラッシュメモリ１５にライブラリをダウンロードされたＩ／Ｏユニットから、再度メモリカードにバックアップすることはできない。
【０１１２】
なお、上記した実施の形態では、Ｉ／Ｏユニットに適用した例を説明したが、本発明はこれに限ることは無く、ＣＰＵユニットやその他のユニットに適用することができるのはもちろんである。ＣＰＵユニットに適用した場合でも基本的な構成はほぼ同じであるが、ＩＯユニットで説明した外部入力／出力回路をＣＰＵユニットでは持たないことがあり、代わりにユニット間結合バスのインタフェース回路をもつ構成となる。
【０１１３】
また、「リモートＩＯ用マスタユニット」に適用した場合には、ＩＯユニットで説明した外部入力／出力回路が、リモートＩＯ用スレーブユニットとのインタフェース回路となる。適用可能なユニットしては、実施の形態の中で述べた「カウンタユニット」，「アナログユニット」，「位置制御ユニット」なども含まれる。位置制御ユニットへの適用は、実施の形態中の図２の外部入力回路１１から入力する信号が位置情報を示すアナログ信号またはパルス信号となり、プログラム実行される内容が位置決めに関する制御となり、外部出力回路１２から出力される信号が位置決めのための命令信号でパルス信号またはアナログ信号となる。さらには、それら各ユニットを含んで構成されるＰＬＣも本発明に含まれる。
【０１１４】
更にまた、本発明に係るＰＬＣは、上記のような複数のユニットを連結して形成されるＰＬＣに限られるものではなく、一体型のものでも、ユーザプログラムをライブラリ化する機能等を備えていれば本発明に含まれる。「一体型ＰＬＣ」とは、マイクロＰＬＣとも呼ばれるＰＬＣであり、実施の形態で説明した電源ユニットがもつ機能、ＣＰＵユニットの機能、Ｉ／Ｏユニットの機能それぞれがユニット毎に分離していなくて、一つのユニットケースに集約して内蔵されているＰＬＣのことである。
【０１１５】
【発明の効果】
以上のように、この発明では、ユーザが作成するプログラムの一部または全部をライブラリ化してツールでのアクセスができない第２の記憶手段に格納するようにしたため、プロテクトを簡単かつ確実にかけることができる。
【図面の簡単な説明】
【図１】システム全体の一例を示す図である。
【図２】Ｉ／Ｏユニットの内部構造の一例を示す図である。
【図３】ＲＡＭとフラッシュメモリのデータ構造を説明する図である。
【図４】ライブラリ生成機能の一例を説明する。
【図５】部品ライブラリ化の一例を示す図である。
【図６】全体ライブラリ化の一例を示す図である。
【図７】部品ライブラリのプログラム実行時の一例を示す図である。
【図８】部品ライブラリの読み出し機能を説明するフローチャートである。
【図９】復帰処理機能の部品ライブラリの読み出し機能を説明するフローチャートである。
【図１０】全体ライブラリの使用（実行）機能等を説明するフローチャートである。
【図１１】ライブラリ名読み出しプログラムを説明するフローチャートである。
【図１２】メモリカードへのバックアップ／アップロード機能を説明する図である。
【図１３】メモリカードへ格納するデータ構造の一例を示す図である。
【符号の説明】
１  電源ユニット
２  ＣＰＵユニット
２ａ  メモリカードスロット
３  Ｉ／Ｏユニット
５  ツール
１１  外部入力回路
１２  外部出力回路
１３  ＲＯＭ
１４  ＲＡＭ
１５  フラッシュメモリ
１６  ＭＰＵ
【図１】
0003548829.tif 000002
【図２】
0003548829.tif 000003
【図３】
0003548829.tif 000004
【図４】
0003548829.tif 000005
【図５】
0003548829.tif 000006
【図６】
0003548829.tif 000007
【図７】
0003548829.tif 000008
【図８】
0003548829.tif 000009
【図９】
0003548829.tif 000010
【図１０】
0003548829.tif 000011
【図１１】
0003548829.tif 000012
【図１２】
0003548829.tif 000013
【図１３】
0003548829.tif 000014