JP2002189507A - コントローラ - Google Patents
コントローラInfo
- Publication number
- JP2002189507A JP2002189507A JP2000385948A JP2000385948A JP2002189507A JP 2002189507 A JP2002189507 A JP 2002189507A JP 2000385948 A JP2000385948 A JP 2000385948A JP 2000385948 A JP2000385948 A JP 2000385948A JP 2002189507 A JP2002189507 A JP 2002189507A
- Authority
- JP
- Japan
- Prior art keywords
- language
- pou
- program
- function
- runtime
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Programmable Controllers (AREA)
Abstract
(57)【要約】
【課題】 汎用言語で作成されたプログラムとSLCラ
ンタイムを動的にリンクさせ、汎用言語で作成されたプ
ログラムを変更してもSLCランタイムの再コンパイル
が不要なコントローラを提供すること 【解決手段】 プロセス間通信を行うためのPOU拡張
メインモジュール11e′と、ユーザが作成したC言語
POUを管理し、SLCランタイムとの通信を実行する
POU拡張サブモジュール12a′と、C言語POUを
呼び出すためのファンクションブロック11e″と、ユ
ーザが作成したC言語POU12bを備えて構成した。
C言語POUとSLCランタイムが別プロセスとなって
いるので、C言語POUを変更してもSLCランタイム
を変更する必要はなく、再コンパイルが不要となる。
ンタイムを動的にリンクさせ、汎用言語で作成されたプ
ログラムを変更してもSLCランタイムの再コンパイル
が不要なコントローラを提供すること 【解決手段】 プロセス間通信を行うためのPOU拡張
メインモジュール11e′と、ユーザが作成したC言語
POUを管理し、SLCランタイムとの通信を実行する
POU拡張サブモジュール12a′と、C言語POUを
呼び出すためのファンクションブロック11e″と、ユ
ーザが作成したC言語POU12bを備えて構成した。
C言語POUとSLCランタイムが別プロセスとなって
いるので、C言語POUを変更してもSLCランタイム
を変更する必要はなく、再コンパイルが不要となる。
Description
【0001】
【発明の属する技術分野】この発明は、PLCプログラ
ミング言語と汎用言語とのインタフェースを持つコント
ローラに関するものである。
ミング言語と汎用言語とのインタフェースを持つコント
ローラに関するものである。
【0002】
【従来の技術】近年、PLC(プログラマブルコントロ
ーラ)市場では、シーケンス制御技術が成熟し、標準化
が進んでいる。また、PLCの機能をソフトウェアで実
現し、パソコンをベースとしたソフトウエアロジックコ
ントローラ(以降、SLC)も開発されている。このS
LCは、パソコンに対してはPLC実行部、つまりラン
タイムに相当する(以降、SLCランタイム)。なお、
SLCランタイムはパソコン上で動作するソフトウエア
プログラムでもある。もっと言うと、パソコンのハード
ウエアエンジンにてPLCとしてのシーケンス制御が行
えるようなプログラムであり、汎用言語で作られたソフ
トウエアプログラムである。
ーラ)市場では、シーケンス制御技術が成熟し、標準化
が進んでいる。また、PLCの機能をソフトウェアで実
現し、パソコンをベースとしたソフトウエアロジックコ
ントローラ(以降、SLC)も開発されている。このS
LCは、パソコンに対してはPLC実行部、つまりラン
タイムに相当する(以降、SLCランタイム)。なお、
SLCランタイムはパソコン上で動作するソフトウエア
プログラムでもある。もっと言うと、パソコンのハード
ウエアエンジンにてPLCとしてのシーケンス制御が行
えるようなプログラムであり、汎用言語で作られたソフ
トウエアプログラムである。
【0003】一方、ユーザのニーズとしては、プログラ
ミング開発環境、プログラミング言語などのオープン化
や標準化、またはデータ管理するパソコンなどの上位装
置を含む情報系との接続ニーズが強まってきている。そ
して、カスタマイズエンジニアが顧客に密着してカスタ
ム商品を開発するといったカスタマイズに対応しつつ、
コスト削減や開発期間短縮を行うために、プラットフォ
ーム化されている。
ミング開発環境、プログラミング言語などのオープン化
や標準化、またはデータ管理するパソコンなどの上位装
置を含む情報系との接続ニーズが強まってきている。そ
して、カスタマイズエンジニアが顧客に密着してカスタ
ム商品を開発するといったカスタマイズに対応しつつ、
コスト削減や開発期間短縮を行うために、プラットフォ
ーム化されている。
【0004】そして、ユーザが作成するプログラムは、
ラダー言語に代表されるようなPLCプログラミング言
語に加えて、部分的にC言語などの汎用言語を使用する
ことがある。ユーザプログラムが、ラダーなどのPLC
プログラミング言語で書かれた場合、その中にファンク
ションブロックを組み込み、このファンクションブロッ
クによりC言語プログラム部分を呼び出して実行してい
た(このような呼び出しを以降、インタフェースとい
う)。呼び出しとしてのインタフェースは、IEC61
131−3として例えばファンクションブロックダイヤ
グラム(FBD)を用いればよい。具体的には、ラダー
プログラム中にFBDで書かれたファームウェアファン
クション(FU)やファームウェアファンクションブロ
ック(FB)を組み込み、それらFUもしくはFBを介
して、C言語プログラムを呼び出すようにする。
ラダー言語に代表されるようなPLCプログラミング言
語に加えて、部分的にC言語などの汎用言語を使用する
ことがある。ユーザプログラムが、ラダーなどのPLC
プログラミング言語で書かれた場合、その中にファンク
ションブロックを組み込み、このファンクションブロッ
クによりC言語プログラム部分を呼び出して実行してい
た(このような呼び出しを以降、インタフェースとい
う)。呼び出しとしてのインタフェースは、IEC61
131−3として例えばファンクションブロックダイヤ
グラム(FBD)を用いればよい。具体的には、ラダー
プログラム中にFBDで書かれたファームウェアファン
クション(FU)やファームウェアファンクションブロ
ック(FB)を組み込み、それらFUもしくはFBを介
して、C言語プログラムを呼び出すようにする。
【0005】
【発明が解決しようとする課題】しかしながら、このよ
うなユーザが作成した、PLCプログラミング言語のプ
ログラムおよび汎用言語のプログラムとの両方をソフト
ウエアロジックコントローラで実行処理させるためのイ
ンタフェースを形成するには、汎用言語プログラムがS
LCランタイムプログラムとリンクさせた単一のプログ
ラムを生成しなければならなかった。すなわち、SLC
ランタイムソフトウエアプログラムとユーザで作った汎
用言語プログラムとの実行処理部分が分かれておらず、
単一のプログラムモジュール(つまり、同一プロセス)
であったことに起因する。
うなユーザが作成した、PLCプログラミング言語のプ
ログラムおよび汎用言語のプログラムとの両方をソフト
ウエアロジックコントローラで実行処理させるためのイ
ンタフェースを形成するには、汎用言語プログラムがS
LCランタイムプログラムとリンクさせた単一のプログ
ラムを生成しなければならなかった。すなわち、SLC
ランタイムソフトウエアプログラムとユーザで作った汎
用言語プログラムとの実行処理部分が分かれておらず、
単一のプログラムモジュール(つまり、同一プロセス)
であったことに起因する。
【0006】より具体的には、SLCランタイムプログ
ラムはバイナリデータからなるライブラリ提供部分(一
つのプログラムオブジェクト)からなり、またユーザ作
成汎用言語プログラムはソースコードからなっている。
そして、そのソースコードをコンパイルしてパソコン側
の処理エンジンで実行できるようにバイナリデータに
(一つのプログラムオブジェクトに)変換する必要があ
る。そのとき、単一のプログラムモジュールの形態とな
っているため、ユーザ作成汎用言語プログラムを作成・
変更・編集するたびに、そのバイナリデータとSLCラ
ンタイムプログラムのバイナリデータとをリンクし直し
てプログラムを形成していた。つまり、2つのプログラ
ムオブジェクトを結合して単一のプログラムモジュール
を作っていた。
ラムはバイナリデータからなるライブラリ提供部分(一
つのプログラムオブジェクト)からなり、またユーザ作
成汎用言語プログラムはソースコードからなっている。
そして、そのソースコードをコンパイルしてパソコン側
の処理エンジンで実行できるようにバイナリデータに
(一つのプログラムオブジェクトに)変換する必要があ
る。そのとき、単一のプログラムモジュールの形態とな
っているため、ユーザ作成汎用言語プログラムを作成・
変更・編集するたびに、そのバイナリデータとSLCラ
ンタイムプログラムのバイナリデータとをリンクし直し
てプログラムを形成していた。つまり、2つのプログラ
ムオブジェクトを結合して単一のプログラムモジュール
を作っていた。
【0007】上述の事情から、仮にユーザにて間違った
汎用言語プログラム(謝ったソースコード)により作成
されたプログラムオブジェクトを、 SLCランタイム
プログラムのプログラムオブジェクトとリンクした場
合、プログラムとしてのSLCランタイムが実行エンジ
ン上で動作しなくなるという問題が生じる。また、その
原因がユーザ作成汎用言語プログラム上にあることがユ
ーザ側で一意的に定められないという問題があった。
汎用言語プログラム(謝ったソースコード)により作成
されたプログラムオブジェクトを、 SLCランタイム
プログラムのプログラムオブジェクトとリンクした場
合、プログラムとしてのSLCランタイムが実行エンジ
ン上で動作しなくなるという問題が生じる。また、その
原因がユーザ作成汎用言語プログラム上にあることがユ
ーザ側で一意的に定められないという問題があった。
【0008】なお、リンクについてさらに詳しく説明す
ると、SLCランタイムプログラムがソースコード提供
部分とライブラリ提供部分とからなる場合においても、
つぎのような3つのリンクが必要となる。それは、SL
Cランタイムプログラムのソースコード提供部分をコン
パイルしたプログラムオブジェクトと、同じくライブラ
リ提供部分のプログラムオブジェクト、そしてユーザ作
成の汎用言語プログラムのソースコードをコンパイルし
たプログラムオブジェクトの3つのプログラムオブジェ
クトの結合である。
ると、SLCランタイムプログラムがソースコード提供
部分とライブラリ提供部分とからなる場合においても、
つぎのような3つのリンクが必要となる。それは、SL
Cランタイムプログラムのソースコード提供部分をコン
パイルしたプログラムオブジェクトと、同じくライブラ
リ提供部分のプログラムオブジェクト、そしてユーザ作
成の汎用言語プログラムのソースコードをコンパイルし
たプログラムオブジェクトの3つのプログラムオブジェ
クトの結合である。
【0009】このようなソフトウエアロジックコントロ
ーラでは、上述のリンクに間違いがあると、プログラム
としてのSLCランタイムが実行エンジン上で動作しな
くなるという問題があった。
ーラでは、上述のリンクに間違いがあると、プログラム
としてのSLCランタイムが実行エンジン上で動作しな
くなるという問題があった。
【0010】この発明は、ユーザ作成の汎用言語プログ
ラムとSLCランタイムプログラムを別々のプログラム
モジュール(別プロセス)で形成できるようにし、ユー
ザ作成の汎用言語プログラムを作成・変更・修正をして
も、そのソースコードだけをコンパイルすることで済ま
せられるようにするとともに、SLCランタイムプログ
ラムのほうは再コンパイルしなくても済むソフトウエア
ロジックコントローラを提供することを目的とする。
ラムとSLCランタイムプログラムを別々のプログラム
モジュール(別プロセス)で形成できるようにし、ユー
ザ作成の汎用言語プログラムを作成・変更・修正をして
も、そのソースコードだけをコンパイルすることで済ま
せられるようにするとともに、SLCランタイムプログ
ラムのほうは再コンパイルしなくても済むソフトウエア
ロジックコントローラを提供することを目的とする。
【0011】
【課題を解決するための手段】この発明によるコントロ
ーラは、PLCプログラミング言語と汎用言語とのイン
タフェースを持つコントローラを前提とする。そして、
PLCプログラミング言語で作成されたプログラムと、
汎用言語で作成された汎用言語プログラムを別プロセス
でそれぞれ記憶する記憶手段と、プロセス間通信を使っ
て汎用言語プログラムを呼び出して実行させ、実行結果
を前記プログラム側に取得する手段を備えて構成した。
ーラは、PLCプログラミング言語と汎用言語とのイン
タフェースを持つコントローラを前提とする。そして、
PLCプログラミング言語で作成されたプログラムと、
汎用言語で作成された汎用言語プログラムを別プロセス
でそれぞれ記憶する記憶手段と、プロセス間通信を使っ
て汎用言語プログラムを呼び出して実行させ、実行結果
を前記プログラム側に取得する手段を備えて構成した。
【0012】また、別の解決手段としては、PLCプロ
グラミング言語と汎用言語とのインタフェースを持つコ
ントローラにおいて、汎用言語で作成された汎用言語プ
ログラムを動的リンクライブラリとして記憶する記憶手
段を備え、前記汎用言語プログラムを持ち、前記動的リ
ンクライブラリを利用して前記汎用言語プログラムを呼
び出して実行させ、実行結果を前記プログラム側に取得
する手段を備えて構成することである。
グラミング言語と汎用言語とのインタフェースを持つコ
ントローラにおいて、汎用言語で作成された汎用言語プ
ログラムを動的リンクライブラリとして記憶する記憶手
段を備え、前記汎用言語プログラムを持ち、前記動的リ
ンクライブラリを利用して前記汎用言語プログラムを呼
び出して実行させ、実行結果を前記プログラム側に取得
する手段を備えて構成することである。
【0013】いずれの場合も、部分的に汎用言語プログ
ラムを扱えるため、ユーザはC言語などの汎用言語を用
いてプログラミングが組むことができる。よって制御プ
ログラムをPLCプログラミング言語で書くと複雑にな
る場合でも、比較的に作成・追加・編集が簡単に行え
る。そして、汎用言語プログラムをPLCプログラミン
グ言語で作成されたプログラムと別プロセスで記憶保持
しているため、汎用プログラムの追加・変更などがあっ
ても、SLCランタイムプログラムまで再コンパイルな
どする必要がなくなり、再コンパイル時に起因してSL
Cランタイムが動作できなくなるといったことがなくな
る。
ラムを扱えるため、ユーザはC言語などの汎用言語を用
いてプログラミングが組むことができる。よって制御プ
ログラムをPLCプログラミング言語で書くと複雑にな
る場合でも、比較的に作成・追加・編集が簡単に行え
る。そして、汎用言語プログラムをPLCプログラミン
グ言語で作成されたプログラムと別プロセスで記憶保持
しているため、汎用プログラムの追加・変更などがあっ
ても、SLCランタイムプログラムまで再コンパイルな
どする必要がなくなり、再コンパイル時に起因してSL
Cランタイムが動作できなくなるといったことがなくな
る。
【0014】そして、汎用言語プログラムを実行する場
合には、プロセス間通信や、動的リンクライブラリを用
いて汎用言語プログラムを呼び出し、その実行結果,デ
ータを受け取るようにすることにより、その結果をプロ
グラム実行に反映させることができる。 *用語の定義 「インタフェース」とは、PLCプログラミング言語
(IEC6113−3)で作成されたプログラムから、
汎用言語(C言語)で作成されたプログラム(POU:
プログラム・オーガナイゼーション・ユニット)を呼び
出すための規約をいう。実施の形態では、C言語POU
呼出しFBがこのインタフェースにあたる。
合には、プロセス間通信や、動的リンクライブラリを用
いて汎用言語プログラムを呼び出し、その実行結果,デ
ータを受け取るようにすることにより、その結果をプロ
グラム実行に反映させることができる。 *用語の定義 「インタフェース」とは、PLCプログラミング言語
(IEC6113−3)で作成されたプログラムから、
汎用言語(C言語)で作成されたプログラム(POU:
プログラム・オーガナイゼーション・ユニット)を呼び
出すための規約をいう。実施の形態では、C言語POU
呼出しFBがこのインタフェースにあたる。
【0015】「プロセス」とは、コンピュータシステム
上で実行する一連の処理のことをいう。プログラムモジ
ュールとも言える。そして、「別プロセス」とは、その
処理またはプログラムモジュールが独立した別のものに
なっていることを言う。ランタイムの実行処理部分とユ
ーザが作成した汎用言語のプログラムの実行処理部分を
分ける(別プロセスとする)ことで、ユーザが作成した汎
用言語のプログラムに変更を加える必要がある場合、ラ
ンタイムの実行処理部に手を加える必要が無くなる。つ
まり、ユーザ作成汎用言語のプログラムソースコードを
コンパイルしても、SLCランタイムのプログラムはコ
ンパイルされずに済む。
上で実行する一連の処理のことをいう。プログラムモジ
ュールとも言える。そして、「別プロセス」とは、その
処理またはプログラムモジュールが独立した別のものに
なっていることを言う。ランタイムの実行処理部分とユ
ーザが作成した汎用言語のプログラムの実行処理部分を
分ける(別プロセスとする)ことで、ユーザが作成した汎
用言語のプログラムに変更を加える必要がある場合、ラ
ンタイムの実行処理部に手を加える必要が無くなる。つ
まり、ユーザ作成汎用言語のプログラムソースコードを
コンパイルしても、SLCランタイムのプログラムはコ
ンパイルされずに済む。
【0016】「プロセス間通信」は、2つ以上のプログ
ラムの間でデータ交換を行なうことをいう。プログラム
間で送受信されるデータを「メッセージ」と呼ぶ。この
発明では、別プロセスである汎用言語プログラムモジュ
ールとSLCランタイムプログラムモジュールとの間で
実行結果またはデータを送受信することを指す。
ラムの間でデータ交換を行なうことをいう。プログラム
間で送受信されるデータを「メッセージ」と呼ぶ。この
発明では、別プロセスである汎用言語プログラムモジュ
ールとSLCランタイムプログラムモジュールとの間で
実行結果またはデータを送受信することを指す。
【0017】「動的リンクライブラリ」は、ライブラリ
(さまざまなアプリケーションが共通で使うプログラム
の部品の集まり)とプログラム本体との関係を表わす言
葉である。プログラムを開発するときのリンクの際、プ
ログラムとライブラリ関数をひとつのファイルにまとめ
ることを「静的リンク」という。それに対し、リンク時
にライブラリと結合するのではなく、プログラムが必要
に応じてライブラリを呼び出すのを「動的リンク」とい
う。静的リンクに比べ、ライブラリやプログラム本体の
修正が容易になる。
(さまざまなアプリケーションが共通で使うプログラム
の部品の集まり)とプログラム本体との関係を表わす言
葉である。プログラムを開発するときのリンクの際、プ
ログラムとライブラリ関数をひとつのファイルにまとめ
ることを「静的リンク」という。それに対し、リンク時
にライブラリと結合するのではなく、プログラムが必要
に応じてライブラリを呼び出すのを「動的リンク」とい
う。静的リンクに比べ、ライブラリやプログラム本体の
修正が容易になる。
【0018】
【発明の実施の形態】図1は、本発明に係るコントロー
ラが組み込まれたネットワークシステムの一例を示して
いる。同図に示すように、コントローラ1が、ネットワ
ーク2を介して上位のツール装置3に接続されている。
このツール装置3で作成されたラダーで作成されたPL
Cプログラムが、ネットワーク2を介してコントローラ
1にダウンロードされる。
ラが組み込まれたネットワークシステムの一例を示して
いる。同図に示すように、コントローラ1が、ネットワ
ーク2を介して上位のツール装置3に接続されている。
このツール装置3で作成されたラダーで作成されたPL
Cプログラムが、ネットワーク2を介してコントローラ
1にダウンロードされる。
【0019】コントローラ1には、各種のネットワーク
4を介して、各種センサ,モータ,バーコードリーダな
どの機器(入力機器,出力機器)5が接続され、それら
機器5との間でデータの送受信を行うことにより各種の
制御を実行する。
4を介して、各種センサ,モータ,バーコードリーダな
どの機器(入力機器,出力機器)5が接続され、それら
機器5との間でデータの送受信を行うことにより各種の
制御を実行する。
【0020】ツール装置3は、コントローラ1上で動作
するプログラム(IEC61131−3プログラム)を
作成・編集する機能,IEC61131−3プログラム
を中間コードにコンパイルする機能並びに係る中間コー
ドをコントローラ1に対してダウンロード/アップロー
ドする機能などを備えている。
するプログラム(IEC61131−3プログラム)を
作成・編集する機能,IEC61131−3プログラム
を中間コードにコンパイルする機能並びに係る中間コー
ドをコントローラ1に対してダウンロード/アップロー
ドする機能などを備えている。
【0021】コントローラ1は、いわゆるPLC(プロ
グラマブルコントローラ)に相当するもので、シーケン
ス制御を行う装置である。ここではパソコン上で動作す
るソフトウエアロジックコントローラを例に挙げて説明
する。このランタイムには、開発者が作成したI/Oド
ライバをコントローラ1上に実装するためのインタフェ
ース(I/Oインタフェース)と、開発者が作成した汎
用言語であるC言語で書かれたPOUをコントローラ1
上に実装するためのインタフェース(ファームウェアフ
ァンクション/ファームウェアファンクションブロック
インタフェース)が用意されている。このインタフェー
スにより、ユーザプログラムを汎用言語であるC言語で
作成することができる。
グラマブルコントローラ)に相当するもので、シーケン
ス制御を行う装置である。ここではパソコン上で動作す
るソフトウエアロジックコントローラを例に挙げて説明
する。このランタイムには、開発者が作成したI/Oド
ライバをコントローラ1上に実装するためのインタフェ
ース(I/Oインタフェース)と、開発者が作成した汎
用言語であるC言語で書かれたPOUをコントローラ1
上に実装するためのインタフェース(ファームウェアフ
ァンクション/ファームウェアファンクションブロック
インタフェース)が用意されている。このインタフェー
スにより、ユーザプログラムを汎用言語であるC言語で
作成することができる。
【0022】コントローラ1は、ツール装置3からダウ
ンロードされた中間コードをコントローラで実行できる
形式にコンパイルする機能,IEC61131−3プロ
グラムを実行する機能並びにツール装置3から送信され
るコントローラのコマンドを解釈し、コントローラの状
態を制御する機能などを備えている。
ンロードされた中間コードをコントローラで実行できる
形式にコンパイルする機能,IEC61131−3プロ
グラムを実行する機能並びにツール装置3から送信され
るコントローラのコマンドを解釈し、コントローラの状
態を制御する機能などを備えている。
【0023】そして、コントローラ1並びにツール装置
3の具体的な構成は、図2,図3に示すようになってい
る。つまり、ハードウェア構成としては、図2に示すよ
うに、入力部6は、ネットワーク4を介して送られてく
る外部の入力機器(例えばセンサ,バーコードリーダな
ど)5のON/OFF状況を読み取って演算制御部7に
結果を渡す。
3の具体的な構成は、図2,図3に示すようになってい
る。つまり、ハードウェア構成としては、図2に示すよ
うに、入力部6は、ネットワーク4を介して送られてく
る外部の入力機器(例えばセンサ,バーコードリーダな
ど)5のON/OFF状況を読み取って演算制御部7に
結果を渡す。
【0024】演算制御部7は、SLCランタイムが実行
される部分であり、入力部6から与えられる入力情報に
基づきPLCプログラムの手順に従って、演算を実行
し、その結果を出力部8に渡す機能を持っている。ま
た、汎用言語プログラムの実行も、この演算制御部7で
行われる。
される部分であり、入力部6から与えられる入力情報に
基づきPLCプログラムの手順に従って、演算を実行
し、その結果を出力部8に渡す機能を持っている。ま
た、汎用言語プログラムの実行も、この演算制御部7で
行われる。
【0025】さらに、出力部8は、演算制御部7の指示
を受けて外部の出力機器(例えばモータ)5のON/O
FFをネットワークを介して制御する。さらにまた、演
算制御部7で実行されるPLCプログラムは記憶部9に
格納されている。また、記憶部9は、演算実行時のデー
タメモリ領域として使用される。
を受けて外部の出力機器(例えばモータ)5のON/O
FFをネットワークを介して制御する。さらにまた、演
算制御部7で実行されるPLCプログラムは記憶部9に
格納されている。また、記憶部9は、演算実行時のデー
タメモリ領域として使用される。
【0026】また、操作部・表示部10は、パーソナル
コンピュータとのインタフェースおよび入出力の状態表
示などを行うもので、コントローラ1に実装されている
場合もあれば、外部機器として接続されている場合もあ
るし、さらには上記したツール装置3がこの機能を持つ
こともある。なお、この図2に示したハードウェア構成
としては、従来一般のコントローラと同様であるので、
その詳細な説明を省略する。
コンピュータとのインタフェースおよび入出力の状態表
示などを行うもので、コントローラ1に実装されている
場合もあれば、外部機器として接続されている場合もあ
るし、さらには上記したツール装置3がこの機能を持つ
こともある。なお、この図2に示したハードウェア構成
としては、従来一般のコントローラと同様であるので、
その詳細な説明を省略する。
【0027】また、ソフトウェア構成としては、ツール
装置3は、図3に示すように、ファームウェアライブラ
リファイル3a並びにC言語POU拡張用ファームライ
ブラリファイル3bをもち、開発環境3cでは、各ライ
ブラリファイルに登録されたライブラリを挿入すること
によりプログラミングするようになる。なお、ファーム
ウェアライブラリファイル3aを利用したプログラミン
グは従来公知の手法を用いることができるので、詳細な
説明を省略する。
装置3は、図3に示すように、ファームウェアライブラ
リファイル3a並びにC言語POU拡張用ファームライ
ブラリファイル3bをもち、開発環境3cでは、各ライ
ブラリファイルに登録されたライブラリを挿入すること
によりプログラミングするようになる。なお、ファーム
ウェアライブラリファイル3aを利用したプログラミン
グは従来公知の手法を用いることができるので、詳細な
説明を省略する。
【0028】ここで、本発明の要部となるC言語POU
拡張用ファームライブラリファイル3bについて説明す
る。まず、C言語POU拡張機能は、ファンクション
(function:FU)やファンクションブロック
(function block:FB)のカスタマイ
ズ機能であり、C言語により記述されたPOUをランタ
イムとは個別の実行モジュールとして実装し、IEC6
1131−3プログラムから必要なときに呼び出され、
実行する機能である。
拡張用ファームライブラリファイル3bについて説明す
る。まず、C言語POU拡張機能は、ファンクション
(function:FU)やファンクションブロック
(function block:FB)のカスタマイ
ズ機能であり、C言語により記述されたPOUをランタ
イムとは個別の実行モジュールとして実装し、IEC6
1131−3プログラムから必要なときに呼び出され、
実行する機能である。
【0029】このように、C言語で作成されたユーザプ
ログラムと(SLC)ランタイムを個別の実行モジュール
とし、(SLC)ランタイムとユーザプログラムの間で
データを送受信できる機構を設けたことにより、たとえ
ユーザがC言語で作成したプログラムが変更されたとし
ても(SLC)ランタイム側の再コンパイルは不要とな
る)。
ログラムと(SLC)ランタイムを個別の実行モジュール
とし、(SLC)ランタイムとユーザプログラムの間で
データを送受信できる機構を設けたことにより、たとえ
ユーザがC言語で作成したプログラムが変更されたとし
ても(SLC)ランタイム側の再コンパイルは不要とな
る)。
【0030】そこで、上記した機能を実現するため、I
EC61131−3プログラム上でC言語POUを呼び
出すためのファンクションブロックであるC言語POU
呼出しファンクションブロックを作成した。そして、C
言語POU拡張用ファームウェアライブラリファイル3
bには、ツール上でIEC61131−3プログラム上
にC言語POU呼出しファンクションブロックを記述す
るために必要な情報を格納するようにしている。
EC61131−3プログラム上でC言語POUを呼び
出すためのファンクションブロックであるC言語POU
呼出しファンクションブロックを作成した。そして、C
言語POU拡張用ファームウェアライブラリファイル3
bには、ツール上でIEC61131−3プログラム上
にC言語POU呼出しファンクションブロックを記述す
るために必要な情報を格納するようにしている。
【0031】一方、コントローラ(SLCランタイム)
1は、図4に示すように、SLCランタイムを実行する
処理部11と、ユーザ画作成したC言語のプログラムを
実行する補助処理部12を有している。さらに、ユーザ
がC言語で作成したI/Oドライバを実行するための補
助ドライバ実行部13を有している。これらの処理部1
1,補助処理部12並びに補助ドライバ実行部13は、
いずれも演算処理部7に組み込まれている。
1は、図4に示すように、SLCランタイムを実行する
処理部11と、ユーザ画作成したC言語のプログラムを
実行する補助処理部12を有している。さらに、ユーザ
がC言語で作成したI/Oドライバを実行するための補
助ドライバ実行部13を有している。これらの処理部1
1,補助処理部12並びに補助ドライバ実行部13は、
いずれも演算処理部7に組み込まれている。
【0032】処理部11は、ツール装置3と通信し、プ
ログラムのダウンロード等をする通信インタフェース1
1aと、IEC61131−3プログラムを実行する処
理部本体(SLCランタイム)11bと、機能拡張のた
めのインタフェースとしてのファームウェアファンクシ
ョンブロック/ファームウェアファンクションインタフ
ェース11c(C言語で書かれたPOUをコントローラ
上に実装するためのインタフェース)と、ファームウェ
アファンクションブロック/ファームウェアファンクシ
ョン11dを備えている。上記インタフェースにより、
処理部本体11bにてプログラムを実行中に必要に応じ
てファームウェアファンクションブロック/ファームウ
ェアファンクションが実行される。なお、係る構成は、
従来と同様であるため、その詳細な説明を省略する。
ログラムのダウンロード等をする通信インタフェース1
1aと、IEC61131−3プログラムを実行する処
理部本体(SLCランタイム)11bと、機能拡張のた
めのインタフェースとしてのファームウェアファンクシ
ョンブロック/ファームウェアファンクションインタフ
ェース11c(C言語で書かれたPOUをコントローラ
上に実装するためのインタフェース)と、ファームウェ
アファンクションブロック/ファームウェアファンクシ
ョン11dを備えている。上記インタフェースにより、
処理部本体11bにてプログラムを実行中に必要に応じ
てファームウェアファンクションブロック/ファームウ
ェアファンクションが実行される。なお、係る構成は、
従来と同様であるため、その詳細な説明を省略する。
【0033】ここで本発明では、C言語POU拡張機能
11eを設けている。このC言語拡張機能11eによ
り、補助処理部12に格納されたC言語POU拡張機能
12aとプロセス間通信を行い、補助処理部12に格納
されたユーザが作成したプログラム(ユーザ作成C言語
POU12b)を実行させ、実行結果を取得するように
している。
11eを設けている。このC言語拡張機能11eによ
り、補助処理部12に格納されたC言語POU拡張機能
12aとプロセス間通信を行い、補助処理部12に格納
されたユーザが作成したプログラム(ユーザ作成C言語
POU12b)を実行させ、実行結果を取得するように
している。
【0034】プロセス間通信において、送受信に必要な
データをそのままSLCランタイムとC言語POUの各
プロセスの間で受け渡す場合、データの長さに応じて、
通信にかかる時間が長くなる現象が発生する。通信にか
かる時間がデータ長に影響を受けないようにするため
に、本形態では、送受信データは全て共有メモリ15を
介して受け渡しを行うようにした。
データをそのままSLCランタイムとC言語POUの各
プロセスの間で受け渡す場合、データの長さに応じて、
通信にかかる時間が長くなる現象が発生する。通信にか
かる時間がデータ長に影響を受けないようにするため
に、本形態では、送受信データは全て共有メモリ15を
介して受け渡しを行うようにした。
【0035】SLCランタイム11bの動作は、図5に
示すに示すフローチャートのようになる。すなわち、ま
ず、電源投入に伴い、初期処理を実行する(ST1)。
具体的には、まず、メモリの初期化を実施する。図2の
記憶部9にはPLCのI/Oメモリと同じ作用をするエ
リアが予め与えられており、そのI/Oメモリエリアな
どを初期化する。そして、I/Oドライバの登録を実施
する。さらに、本発明との関係で言うと、POU拡張サ
ブモジュールの起動と呼出しファンクションブロックの
登録を実行する。
示すに示すフローチャートのようになる。すなわち、ま
ず、電源投入に伴い、初期処理を実行する(ST1)。
具体的には、まず、メモリの初期化を実施する。図2の
記憶部9にはPLCのI/Oメモリと同じ作用をするエ
リアが予め与えられており、そのI/Oメモリエリアな
どを初期化する。そして、I/Oドライバの登録を実施
する。さらに、本発明との関係で言うと、POU拡張サ
ブモジュールの起動と呼出しファンクションブロックの
登録を実行する。
【0036】次に、INリフレッシュ処理を実行する
(ST2)。すなわち、メモリのI/Oエリアから、入
力データを読み込む。次いで、受け取った入力データに
基づき、演算処理を実行する(ST3)。つまり、ツー
ル装置3で作成され、ダウンロード後コンパイルされた
IEC61131−3プログラムで書かれたユーザプロ
グラムを実行する。そして、ユーザプログラム実行中に
C言語呼出しファンクションブロックがあると、該当す
るC言語POUを呼び出し、実行させ、その実行結果を
取得することが可能となる。そして、演算処理終了後、
OUTリフレッシュ処理を実行する(ST4)。つま
り、メモリのI/Oエリアへ、出力データを書き込む。
そして、上記したステップ2〜4をサイクリックに繰り
返し実行する。
(ST2)。すなわち、メモリのI/Oエリアから、入
力データを読み込む。次いで、受け取った入力データに
基づき、演算処理を実行する(ST3)。つまり、ツー
ル装置3で作成され、ダウンロード後コンパイルされた
IEC61131−3プログラムで書かれたユーザプロ
グラムを実行する。そして、ユーザプログラム実行中に
C言語呼出しファンクションブロックがあると、該当す
るC言語POUを呼び出し、実行させ、その実行結果を
取得することが可能となる。そして、演算処理終了後、
OUTリフレッシュ処理を実行する(ST4)。つま
り、メモリのI/Oエリアへ、出力データを書き込む。
そして、上記したステップ2〜4をサイクリックに繰り
返し実行する。
【0037】そして、係るC言語POU拡張機能を実現
するための具体的な処理機能は、図6に示すようになっ
ている。すなわち、処理部11側のC言語POU拡張機
能11eは、POU拡張メインモジュール11e′とC
言語POU呼出しファンクションブロック11e″を備
えている。
するための具体的な処理機能は、図6に示すようになっ
ている。すなわち、処理部11側のC言語POU拡張機
能11eは、POU拡張メインモジュール11e′とC
言語POU呼出しファンクションブロック11e″を備
えている。
【0038】また、補助処理部12側のC言語POU拡
張機能12aは、POU拡張サブモジュール12a′と
関数テーブル12a″を備えている。また、図から明ら
かなように、ユーザ作成C言語POU12bは、複数存
在することもある。次に各構成要素について詳述する。
張機能12aは、POU拡張サブモジュール12a′と
関数テーブル12a″を備えている。また、図から明ら
かなように、ユーザ作成C言語POU12bは、複数存
在することもある。次に各構成要素について詳述する。
【0039】POU拡張メインモジュール11e′は、
SLCランタイム11bと別プロセスにしたC言語PO
Uとの通信を実行するモジュールである。コントローラ
1の起動時に補助処理部12のプロセスを実行し、コン
トローラの終了時にプロセスを終了する。また、データ
受け渡し共有メモリ15への読み/書き処理とPOU拡
張サブモジュール12a′とのプロセス間通信処理を実
行する。
SLCランタイム11bと別プロセスにしたC言語PO
Uとの通信を実行するモジュールである。コントローラ
1の起動時に補助処理部12のプロセスを実行し、コン
トローラの終了時にプロセスを終了する。また、データ
受け渡し共有メモリ15への読み/書き処理とPOU拡
張サブモジュール12a′とのプロセス間通信処理を実
行する。
【0040】また、C言語POU呼出しファームウェア
ファンクションブロックは、IEC61131−3プロ
グラムからC言語POU関数へ処理を渡すためのファン
クションブロックである。そして、ユーザ作成C言語P
OUの呼出し/応答処理を実行する。
ファンクションブロックは、IEC61131−3プロ
グラムからC言語POU関数へ処理を渡すためのファン
クションブロックである。そして、ユーザ作成C言語P
OUの呼出し/応答処理を実行する。
【0041】ツールで設定するC言語POU呼出しファ
ームウェアファンクションブロックは1種類とし、入力
に関数名を指定する構造とした。C言語POUに渡す引
数は、ツール上では、IEC61131−3プログラム
のユーザ作成データ構造体の各メンバを使って設定し、
コントローラではC言語POUヘッダファイルで定義し
た構造体で受け取るように実装した。具体的には、図7
に示すようなファンクションブロック図で表現され、入
力,出力は図8に示すように定義される。また、C言語
POUに渡す変数リストの一例を示すと、図9のように
なる。
ームウェアファンクションブロックは1種類とし、入力
に関数名を指定する構造とした。C言語POUに渡す引
数は、ツール上では、IEC61131−3プログラム
のユーザ作成データ構造体の各メンバを使って設定し、
コントローラではC言語POUヘッダファイルで定義し
た構造体で受け取るように実装した。具体的には、図7
に示すようなファンクションブロック図で表現され、入
力,出力は図8に示すように定義される。また、C言語
POUに渡す変数リストの一例を示すと、図9のように
なる。
【0042】POU拡張サブモジュール12a′は、ユ
ーザが作成したC言語POUを管理し、SLCランタイ
ムとの通信を実行するモジュールで、データの受け渡
し,共有メモリへの読み書き処理,POU拡張メインモ
ジュール11e′とのプロセス間通信処理並びに関数テ
ーブル12a″に対するユーザ作成C言語POU12b
の登録処理と参照処理を実行する。また、POU拡張サ
ブモジュールだけをオプション付きで起動することによ
り、ユーザ作成C言語POUの登録関数を一覧表示する
ことができる。
ーザが作成したC言語POUを管理し、SLCランタイ
ムとの通信を実行するモジュールで、データの受け渡
し,共有メモリへの読み書き処理,POU拡張メインモ
ジュール11e′とのプロセス間通信処理並びに関数テ
ーブル12a″に対するユーザ作成C言語POU12b
の登録処理と参照処理を実行する。また、POU拡張サ
ブモジュールだけをオプション付きで起動することによ
り、ユーザ作成C言語POUの登録関数を一覧表示する
ことができる。
【0043】関数テーブル12a″は、ユーザ作成C言
語POUについての関数名と関数の先頭アドレスを関連
づけたテーブルであり、そのデータ構造は、図10に示
すようになっている。ここで、「関数名のポインタ」に
は、ユーザ作成C言語POUの関数名が格納されている
メモリ領域の先頭アドレスが格納される。
語POUについての関数名と関数の先頭アドレスを関連
づけたテーブルであり、そのデータ構造は、図10に示
すようになっている。ここで、「関数名のポインタ」に
は、ユーザ作成C言語POUの関数名が格納されている
メモリ領域の先頭アドレスが格納される。
【0044】また、「関数エントリポイント」には、ユ
ーザ作成C言語POUの関数が格納されているメモリ領
域の先頭アドレスが格納される。さらに、「ユーザ定義
情報」には、ユーザが定義する文字情報が格納されてい
るメモリ領域の先頭アドレスが格納される。
ーザ作成C言語POUの関数が格納されているメモリ領
域の先頭アドレスが格納される。さらに、「ユーザ定義
情報」には、ユーザが定義する文字情報が格納されてい
るメモリ領域の先頭アドレスが格納される。
【0045】一方、ユーザ作成C言語POU12bは、
ユーザによって作成されるC言語で記述されたプログラ
ムである。ユーザ作成C言語POU12bは、変数設定
のヘッダファイル,制御プログラムを記述するソースフ
ァイル並びにC言語POU登録用ソースファイルによっ
て構成される。
ユーザによって作成されるC言語で記述されたプログラ
ムである。ユーザ作成C言語POU12bは、変数設定
のヘッダファイル,制御プログラムを記述するソースフ
ァイル並びにC言語POU登録用ソースファイルによっ
て構成される。
【0046】さらに、プロセス間通信で使用する共有メ
モリ15は、図11に示すデータ構造となっている。こ
こで、各領域に格納する情報は、以下のようになってい
る。「関数名」にはC言語POU呼出しファンクション
ブロックの入力引数NAMEの値を格納する。「エラー
コード」にはPOU拡張サブモジュールで発生したエラ
ー番号を格納する。正常終了の場合は、正常終了を示す
値が格納される。「EN」にはC言語POU呼出しファ
ンクションブロックの入力引数ENの値を格納する。
「ENO」にはC言語POU呼出しファンクションブロ
ックの出力引数ENOの値を格納する。「引数管理用デ
ータ」には、後述の「引数データ」を管理するために必
要なデータを格納する。例として、引数データのサイ
ズ、型、物理アドレスなどが挙げられる。「引数デー
タ」には、C言語POU呼出しファンクションブロック
の入出力引数ARGの値を格納する。
モリ15は、図11に示すデータ構造となっている。こ
こで、各領域に格納する情報は、以下のようになってい
る。「関数名」にはC言語POU呼出しファンクション
ブロックの入力引数NAMEの値を格納する。「エラー
コード」にはPOU拡張サブモジュールで発生したエラ
ー番号を格納する。正常終了の場合は、正常終了を示す
値が格納される。「EN」にはC言語POU呼出しファ
ンクションブロックの入力引数ENの値を格納する。
「ENO」にはC言語POU呼出しファンクションブロ
ックの出力引数ENOの値を格納する。「引数管理用デ
ータ」には、後述の「引数データ」を管理するために必
要なデータを格納する。例として、引数データのサイ
ズ、型、物理アドレスなどが挙げられる。「引数デー
タ」には、C言語POU呼出しファンクションブロック
の入出力引数ARGの値を格納する。
【0047】なお、ユーザプログラム上で複数のタスク
から単一のPOU拡張サブモジュールが呼び出されるた
め、同時にアクセスされないよう、セマフォを使った排
他制御を、POU拡張メインモジュールのプロセス間通
信処理の前後に実装した。
から単一のPOU拡張サブモジュールが呼び出されるた
め、同時にアクセスされないよう、セマフォを使った排
他制御を、POU拡張メインモジュールのプロセス間通
信処理の前後に実装した。
【0048】次に、上記した構成におけるSLCランタ
イム11b,C言語POU拡張メインモジュール11
e′と、C言語POU拡張サブモジュール12a′の機
能について説明する。SLCランタイム11bは、図1
2に示すように、まず初期化処理をする(ST11)。
そして、INリフレッシュ処理(ST12)→演算処理
(ST13)→OUTリフレッシュ処理(ST14)を
サイクリックに繰り返す。そして、終了命令を受ける
と、終了処理をする(ST15)。
イム11b,C言語POU拡張メインモジュール11
e′と、C言語POU拡張サブモジュール12a′の機
能について説明する。SLCランタイム11bは、図1
2に示すように、まず初期化処理をする(ST11)。
そして、INリフレッシュ処理(ST12)→演算処理
(ST13)→OUTリフレッシュ処理(ST14)を
サイクリックに繰り返す。そして、終了命令を受ける
と、終了処理をする(ST15)。
【0049】また、C言語POU拡張サブモジュール1
2a′の機能は、図13に示すようになっている。この
C言語POU拡張サブモジュール12a′は、親プロセ
スであるSLCランタイム11b側からの命令に従って
処理を実行するので、INリフレッシュやOUTリフレ
ッシュがない。つまり、図13に示すように、初期化処
理を実行(ST21)後、親プロセスから終了シグナル
を受信するまでの間、演算処理(ST22)を繰り返し
実行する。そして、係る終了シグナルを受信したなら
ば、終了処理を実行する(ST23)。
2a′の機能は、図13に示すようになっている。この
C言語POU拡張サブモジュール12a′は、親プロセ
スであるSLCランタイム11b側からの命令に従って
処理を実行するので、INリフレッシュやOUTリフレ
ッシュがない。つまり、図13に示すように、初期化処
理を実行(ST21)後、親プロセスから終了シグナル
を受信するまでの間、演算処理(ST22)を繰り返し
実行する。そして、係る終了シグナルを受信したなら
ば、終了処理を実行する(ST23)。
【0050】SLCランタイム11bの初期化処理に伴
い、C言語POU拡張メインモジュール1e′は図14
に示す初期化処理を実行する。つまり、まず共有メモリ
15をオープンし(ST31)、C言語POU拡張サブ
モジュールに対し起動命令を送る(ST32)。次い
で、C言語POU呼出しファンクションブロック11
e″の初期設定をし(ST33)、セマフォを初期化す
る(ST34)。
い、C言語POU拡張メインモジュール1e′は図14
に示す初期化処理を実行する。つまり、まず共有メモリ
15をオープンし(ST31)、C言語POU拡張サブ
モジュールに対し起動命令を送る(ST32)。次い
で、C言語POU呼出しファンクションブロック11
e″の初期設定をし(ST33)、セマフォを初期化す
る(ST34)。
【0051】一方、C言語POU拡張サブモジュール1
2a′の初期化処理(ST21)は、具体的には図15
に示す処理を実行することになる。すなわち、POU拡
張メインモジュール11e′からのプロセスの起動命令
(ステップ32の処理)を受けると、初期化処理を開始
する。つまり、まずPOU拡張サブモジュール12a′
側からも共有メモリ15をオープンする(ST35)。
次いで、関数テーブル12a″のメモリ領域を確保し
(ST36)、ユーザ作成C言語の関数名,関数アドレ
ス,ユーザ定義情報を関数テーブルに登録する(ST3
7)。これにより初期化処理が終了する。
2a′の初期化処理(ST21)は、具体的には図15
に示す処理を実行することになる。すなわち、POU拡
張メインモジュール11e′からのプロセスの起動命令
(ステップ32の処理)を受けると、初期化処理を開始
する。つまり、まずPOU拡張サブモジュール12a′
側からも共有メモリ15をオープンする(ST35)。
次いで、関数テーブル12a″のメモリ領域を確保し
(ST36)、ユーザ作成C言語の関数名,関数アドレ
ス,ユーザ定義情報を関数テーブルに登録する(ST3
7)。これにより初期化処理が終了する。
【0052】また、C言語POU拡張メインモジュール
11e′の演算処理は、図16に示すフローチャートの
ようになる。すなわち、SLCランタイム11bの演算
処理(ST13)の実行中に、呼出命令があると、この
フローチャートを実行する。具体的には、セマフォを待
ち、取得したならば引数データを共有メモリ15に書き
込む(ST42)。その後、引数データをC言語POU
拡張サブモジュール12a′に送信する(ST43)。
そして、POU拡張サブモジュール12a′からの引数
データの受信を待ち(ST44)、受信したならば共有
メモリ15にアクセスし、引数データ(C言語POU拡
張サブモジュール12a′が書き込んでいる)を読み込
む(ST45)。そして、次の処理に備え、セマフォを
インクリメントし(ST46)、処理を終了する。
11e′の演算処理は、図16に示すフローチャートの
ようになる。すなわち、SLCランタイム11bの演算
処理(ST13)の実行中に、呼出命令があると、この
フローチャートを実行する。具体的には、セマフォを待
ち、取得したならば引数データを共有メモリ15に書き
込む(ST42)。その後、引数データをC言語POU
拡張サブモジュール12a′に送信する(ST43)。
そして、POU拡張サブモジュール12a′からの引数
データの受信を待ち(ST44)、受信したならば共有
メモリ15にアクセスし、引数データ(C言語POU拡
張サブモジュール12a′が書き込んでいる)を読み込
む(ST45)。そして、次の処理に備え、セマフォを
インクリメントし(ST46)、処理を終了する。
【0053】一方、C言語POU拡張サブモジュール1
2a′の演算処理(ST22)は、図17,図18に示
すフローチャートのようになっている。すなわち、C言
語POU拡張メインモジュール11e′から送信されて
くる引数データの受信を待つ(ST51)。そして、受
信があると、共有メモリ15をアクセスし、引数データ
を読み込む(ST52)。次いで、取得した引数データ
に従い、関数テーブル12a″を参照し、関数名をキー
に該当するC言語POUが格納された関数アドレスを検
索する(ST53)。
2a′の演算処理(ST22)は、図17,図18に示
すフローチャートのようになっている。すなわち、C言
語POU拡張メインモジュール11e′から送信されて
くる引数データの受信を待つ(ST51)。そして、受
信があると、共有メモリ15をアクセスし、引数データ
を読み込む(ST52)。次いで、取得した引数データ
に従い、関数テーブル12a″を参照し、関数名をキー
に該当するC言語POUが格納された関数アドレスを検
索する(ST53)。
【0054】そして、検索した関数アドレスに従ってユ
ーザ作成C言語POU12bを呼び出す(ST54)。
この呼出し処理に伴い、図18に示すフローチャートを
実行する。すなわち、引数データを整形し、ユーザ作成
C言語プログラムを実行し、得られた引数データを整形
する(ST57〜ST59)。
ーザ作成C言語POU12bを呼び出す(ST54)。
この呼出し処理に伴い、図18に示すフローチャートを
実行する。すなわち、引数データを整形し、ユーザ作成
C言語プログラムを実行し、得られた引数データを整形
する(ST57〜ST59)。
【0055】このプログラム実行により求められた結果
(ステップ59で整形した引数データ)を引数データを
共有メモリに書き込む(ST55)。その書き込み後、
引数データをメインモジュールへ返信する(ST5
6)。この返信された引数データが、上記したステップ
44のメインモジュール側の受信になる。
(ステップ59で整形した引数データ)を引数データを
共有メモリに書き込む(ST55)。その書き込み後、
引数データをメインモジュールへ返信する(ST5
6)。この返信された引数データが、上記したステップ
44のメインモジュール側の受信になる。
【0056】さらに、C言語POU拡張メインモジュー
ル11e′における終了処理(ST15)は、図19に
示すフローチャートのようになり、C言語POU拡張サ
ブモジュール12a′における終了処理(ST23)
は、図20に示すフローチャートを実行するようにな
る。
ル11e′における終了処理(ST15)は、図19に
示すフローチャートのようになり、C言語POU拡張サ
ブモジュール12a′における終了処理(ST23)
は、図20に示すフローチャートを実行するようにな
る。
【0057】すなわち、メインモジュール側は、C言語
POU拡張サブモジュール12a′に対して終了命令を
送る(ST61)。この終了命令を受けたC言語POU
拡張サブモジュール12a′は、関数テーブル12a″
のメモリ領域を開放し(ST65)、その後、共有メモ
リをクローズする(ST66)。このクローズ後、C言
語POU拡張メインモジュール11e′側が、共有メモ
リ15をクローズし(ST62)、セマフォを破壊する
(ST63)。
POU拡張サブモジュール12a′に対して終了命令を
送る(ST61)。この終了命令を受けたC言語POU
拡張サブモジュール12a′は、関数テーブル12a″
のメモリ領域を開放し(ST65)、その後、共有メモ
リをクローズする(ST66)。このクローズ後、C言
語POU拡張メインモジュール11e′側が、共有メモ
リ15をクローズし(ST62)、セマフォを破壊する
(ST63)。
【0058】上記した実施の形態では、C言語POU拡
張機能を用いることにより、各種制御機能の追加,変更
や、機器の設定などを、C言語を用いてプログラミング
することができ、しかも、ユーザ作成C言語POU12
bを変更等しても、SLCランタイムの再コンパイルは
不要とすることができた。この技術思想をI/Oに転用
したのが、図4に示したI/O拡張機能である。
張機能を用いることにより、各種制御機能の追加,変更
や、機器の設定などを、C言語を用いてプログラミング
することができ、しかも、ユーザ作成C言語POU12
bを変更等しても、SLCランタイムの再コンパイルは
不要とすることができた。この技術思想をI/Oに転用
したのが、図4に示したI/O拡張機能である。
【0059】I/O拡張機能は、コントローラ1に接続
するI/Oデバイスドライバのカスタマイズ機能であ
り、C言語により記述されたI/Oドライバ(ユーザ作
成I/Oドライバ)を別プロセスとして補助ドライバ実
行部13に実装し、コントローラのI/Oリフレッシュ
時に呼び出され、実行するようになっている。係る構成
にすると、ユーザはSLCランタイムを再コンパイルす
ることなくI/Oドライバを追加または変更することが
可能となる。なお、I/O拡張機能は、基本的にC言語
POU拡張機能と同様に作成することができ、メインモ
ジュール側から呼び出して、ユーザ作成I/Oドライバ
を実行させ、その結果は共有メモリに対してオープン/
クローズと引数アクセスを適宜実行することにより、S
LCランタイム側に渡すことができる。
するI/Oデバイスドライバのカスタマイズ機能であ
り、C言語により記述されたI/Oドライバ(ユーザ作
成I/Oドライバ)を別プロセスとして補助ドライバ実
行部13に実装し、コントローラのI/Oリフレッシュ
時に呼び出され、実行するようになっている。係る構成
にすると、ユーザはSLCランタイムを再コンパイルす
ることなくI/Oドライバを追加または変更することが
可能となる。なお、I/O拡張機能は、基本的にC言語
POU拡張機能と同様に作成することができ、メインモ
ジュール側から呼び出して、ユーザ作成I/Oドライバ
を実行させ、その結果は共有メモリに対してオープン/
クローズと引数アクセスを適宜実行することにより、S
LCランタイム側に渡すことができる。
【0060】上記した実施の形態では、プロセス間通信
により、子プロセスのユーザ作成C言語POUを呼び出
して実施するようにしたが、本発明はこれに限ることは
なく、例えば図21に示すように直接呼び出すことがで
きる。つまり、POU拡張メインモジュール11e′
は、DLLを使用して直接ユーザ作成C言語POUを呼
び出し、実行結果を取得することができる。
により、子プロセスのユーザ作成C言語POUを呼び出
して実施するようにしたが、本発明はこれに限ることは
なく、例えば図21に示すように直接呼び出すことがで
きる。つまり、POU拡張メインモジュール11e′
は、DLLを使用して直接ユーザ作成C言語POUを呼
び出し、実行結果を取得することができる。
【0061】そして、このPOU拡張メインモジュール
11e′の具体的な処理機能は、図22〜図25示すフ
ローチャートを実施するようになる。すなわち、SLC
ランタイム11b(POU拡張メインモジュール11
e′)は、初期化処理を実行する(ST71)。この初
期化処理は、SLCランタイム11bの初期化処理とと
もに、図23に示すようなPOU拡張メインモジュール
11e′の初期化処理も実行させる。
11e′の具体的な処理機能は、図22〜図25示すフ
ローチャートを実施するようになる。すなわち、SLC
ランタイム11b(POU拡張メインモジュール11
e′)は、初期化処理を実行する(ST71)。この初
期化処理は、SLCランタイム11bの初期化処理とと
もに、図23に示すようなPOU拡張メインモジュール
11e′の初期化処理も実行させる。
【0062】すなわち、C言語POU拡張サブモジュー
ル12aをロードし、保有するユーザ作成C言語POU
の情報(関数名,関数アドレス)を収集する(ST8
1)。次いで、C言語POU呼出しファンクションブロ
ック11e″の初期設定を行う。
ル12aをロードし、保有するユーザ作成C言語POU
の情報(関数名,関数アドレス)を収集する(ST8
1)。次いで、C言語POU呼出しファンクションブロ
ック11e″の初期設定を行う。
【0063】また、PLCランタイムは、終了ボタンが
押下されるまでINリフレッシュ処理(ST72),演
算処理(ST73)並びにOUTリフレッシュ処理(S
T74)を繰り返し実行する。
押下されるまでINリフレッシュ処理(ST72),演
算処理(ST73)並びにOUTリフレッシュ処理(S
T74)を繰り返し実行する。
【0064】そして、ステップ73の演算処理を実行中
にC言語POU呼出しファンクションブロックがある
と、POU拡張メインモジュール11e′が図24に示
すフローチャートを実行する。すなわち、初期設定でロ
ードした情報に基づき、関数名をキーにしてロードされ
たモジュールから関数アドレスを取得し(ST83)、
その関数アドレスに従ってユーザ作成C言語POUを呼
び出す。この呼び出しに応じてユーザ作成C言語POU
が実行され、その結果(応答)を取得し、SLCランタ
イム11b側がその取得した結果を受けてステップ73
における通常の演算処理を続行する。
にC言語POU呼出しファンクションブロックがある
と、POU拡張メインモジュール11e′が図24に示
すフローチャートを実行する。すなわち、初期設定でロ
ードした情報に基づき、関数名をキーにしてロードされ
たモジュールから関数アドレスを取得し(ST83)、
その関数アドレスに従ってユーザ作成C言語POUを呼
び出す。この呼び出しに応じてユーザ作成C言語POU
が実行され、その結果(応答)を取得し、SLCランタ
イム11b側がその取得した結果を受けてステップ73
における通常の演算処理を続行する。
【0065】さらに、ステップ75の終了処理の際に
は、POU拡張メインモジュール11e′は、図25に
示す終了処理を実行する。つまり、C言語POU拡張サ
ブモジュールをアンロードする(ST85)。
は、POU拡張メインモジュール11e′は、図25に
示す終了処理を実行する。つまり、C言語POU拡張サ
ブモジュールをアンロードする(ST85)。
【0066】上記したように、各実施の形態では、別プ
ロセス或いは動的リンクライブラリとの通信を実行する
ためのPOU拡張メインモジュール11e′と、ユーザ
が作成したC言語POUを管理し、SLCランタイムと
の通信を実行するPOU拡張サブモジュール12a′
と、C言語POUを呼び出すためのファンクションブロ
ック11e″と、ユーザが作成したC言語POU12b
を備えて構成したので、ユーザが、汎用言語であるC言
語を用いてプログラミングしてC言語POUを作成する
ことにより、自由にかつ簡単にSLCランタイムの命令
を拡張できる。そして、C言語POUを別のものに交換
する場合でも、SLCプログラムの再コンパイルは不要
であるので、短時間で実施できる。さらに、ユーザが作
成したC言語POUに引数の受け渡しが可能であり、ユ
ーザが定義した型を引数として受け渡すことができる。
ロセス或いは動的リンクライブラリとの通信を実行する
ためのPOU拡張メインモジュール11e′と、ユーザ
が作成したC言語POUを管理し、SLCランタイムと
の通信を実行するPOU拡張サブモジュール12a′
と、C言語POUを呼び出すためのファンクションブロ
ック11e″と、ユーザが作成したC言語POU12b
を備えて構成したので、ユーザが、汎用言語であるC言
語を用いてプログラミングしてC言語POUを作成する
ことにより、自由にかつ簡単にSLCランタイムの命令
を拡張できる。そして、C言語POUを別のものに交換
する場合でも、SLCプログラムの再コンパイルは不要
であるので、短時間で実施できる。さらに、ユーザが作
成したC言語POUに引数の受け渡しが可能であり、ユ
ーザが定義した型を引数として受け渡すことができる。
【0067】
【発明の効果】以上のように、この発明では、汎用言語
で作成されたプログラムの変更が、SLCランタイムに
影響を与えることがなく、再コンパイルが不要となり、
SLCランタイムの動作が保証できるとともに、従来の
ようなユーザ作成汎用言語プログラムのソースコードに
間違いがあることが一意に定められない不都合が無くな
る。
で作成されたプログラムの変更が、SLCランタイムに
影響を与えることがなく、再コンパイルが不要となり、
SLCランタイムの動作が保証できるとともに、従来の
ようなユーザ作成汎用言語プログラムのソースコードに
間違いがあることが一意に定められない不都合が無くな
る。
【図1】本発明に係るコントローラが組み込まれたネッ
トワークシステムの一例を示す図である。
トワークシステムの一例を示す図である。
【図2】コントローラの一例を示すハードウェア構成図
である。
である。
【図3】ツール装置の一例を示すソフトウェア構成図で
ある。
ある。
【図4】コントローラの一例を示すソフトウェア構成図
である。
である。
【図5】SLCランタイムの機能を説明するフローチャ
ートである。
ートである。
【図6】本発明に係るコントローラの第1の実施の形態
の要部を示す機能ブロック図である。
の要部を示す機能ブロック図である。
【図7】POU呼出しファンクションブロックの一例を
示す図である。
示す図である。
【図8】POU呼出しファンクションブロックの機能の
説明をする図である。
説明をする図である。
【図9】C言語POUに渡す変数リストの一例を示す図
である。
である。
【図10】関数テーブルの内部構造を示す図である。
【図11】共有メモリのデータ構造を示す図である。
【図12】SLCランタイムの機能を示すフローチャー
トである。
トである。
【図13】C言語POU拡張サブモジュールの機能を示
すフローチャートである。
すフローチャートである。
【図14】C言語POU拡張メインモジュールの初期化
処理機能を示すフローチャートである。
処理機能を示すフローチャートである。
【図15】C言語POU拡張サブモジュールの初期化処
理機能を示すフローチャートである。
理機能を示すフローチャートである。
【図16】C言語POU拡張メインモジュールの演算処
理機能を示すフローチャートである。
理機能を示すフローチャートである。
【図17】C言語POU拡張サブモジュールの演算処理
機能を示すフローチャートである。
機能を示すフローチャートである。
【図18】C言語POU拡張サブモジュールのC言語P
OU呼出処理機能を示すフローチャートである。
OU呼出処理機能を示すフローチャートである。
【図19】C言語POU拡張メインモジュールの終了処
理機能を示すフローチャートである。
理機能を示すフローチャートである。
【図20】C言語POU拡張サブモジュールの終了処理
機能を示すフローチャートである。
機能を示すフローチャートである。
【図21】本発明に係るコントローラの第2の実施の形
態の要部を示す機能ブロック図である。
態の要部を示す機能ブロック図である。
【図22】SLCランタイムの機能を示すフローチャー
トである。
トである。
【図23】C言語POU拡張メインモジュールの初期化
処理機能を示すフローチャートである。
処理機能を示すフローチャートである。
【図24】C言語POU拡張メインモジュールの演算処
理機能を示すフローチャートである。
理機能を示すフローチャートである。
【図25】C言語POU拡張メインモジュールの終了機
能を示すフローチャートである。
能を示すフローチャートである。
1 コントローラ 2 ネットワーク 3 ツール装置 4 ネットワーク 5 機器 6 入力部 7 演算制御部 8 出力部 9 記憶部 10 操作部・表示部 11 処理部 11a 通信インタフェース 11b 処理部本体(SLCランタイム) 11c ファームウェアファンクションブロック/ファ
ームウェアファンクションインタフェース 11d ファームウェアファンクションブロック/ファ
ームウェアファンクション 11e C言語POU拡張機能 11e′ POU拡張メインモジュール 11e″ C言語POU呼出しファンクションブロック 12 補助処理部 12a C言語POU拡張機能 12a′ POU拡張サブモジュール 12a″ 関数テーブル 12b ユーザ作成C言語POU 13 補助ドライバ実行部 15 共有メモリ
ームウェアファンクションインタフェース 11d ファームウェアファンクションブロック/ファ
ームウェアファンクション 11e C言語POU拡張機能 11e′ POU拡張メインモジュール 11e″ C言語POU呼出しファンクションブロック 12 補助処理部 12a C言語POU拡張機能 12a′ POU拡張サブモジュール 12a″ 関数テーブル 12b ユーザ作成C言語POU 13 補助ドライバ実行部 15 共有メモリ
Claims (2)
- 【請求項1】 PLCプログラミング言語と汎用言語と
のインタフェースを持つコントローラにおいて、 PLCプログラミング言語で作成されたプログラムと、
汎用言語で作成された汎用言語プログラムを別プロセス
でそれぞれ記憶する記憶手段と、 プロセス間通信を使って汎用言語プログラムを呼び出し
て実行させ、実行結果を前記プログラム側に取得する手
段を備えたことを特長とするコントローラ。 - 【請求項2】 PLCプログラミング言語と汎用言語と
のインタフェースを持つコントローラにおいて、 汎用言語で作成された汎用言語プログラムを動的リンク
ライブラリとして記憶する記憶手段と、 前記動的リンクライブラリを利用して前記汎用言語プロ
グラムを呼び出して実行させ、実行結果を前記プログラ
ム側に取得する手段を備えたことを特長とするコントロ
ーラ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000385948A JP2002189507A (ja) | 2000-12-19 | 2000-12-19 | コントローラ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000385948A JP2002189507A (ja) | 2000-12-19 | 2000-12-19 | コントローラ |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2002189507A true JP2002189507A (ja) | 2002-07-05 |
Family
ID=18853128
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000385948A Pending JP2002189507A (ja) | 2000-12-19 | 2000-12-19 | コントローラ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2002189507A (ja) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007183785A (ja) * | 2006-01-06 | 2007-07-19 | Fuji Electric Holdings Co Ltd | プログラムツリー表示方法、プログラム生成装置、およびプログラム生成プログラム |
JP2007334469A (ja) * | 2006-06-13 | 2007-12-27 | Hitachi Industrial Equipment Systems Co Ltd | プログラマブルコントローラ及びこれを用いた機器制御方法 |
JP2009187177A (ja) * | 2008-02-05 | 2009-08-20 | Fuji Electric Systems Co Ltd | プログラマブル・ロジックコントローラ及びプログラマブル・ロジックコントローラのロジック更新支援ツール |
JP2009237947A (ja) * | 2008-03-27 | 2009-10-15 | Fuji Electric Systems Co Ltd | プログラマブルコントローラ、プログラマブルコントローラ支援装置、及びプログラマブルコントローラシステム |
JP2016224558A (ja) * | 2015-05-27 | 2016-12-28 | 株式会社キーエンス | プログラム作成支援装置、制御方法およびプログラム |
WO2020071436A1 (ja) * | 2018-10-05 | 2020-04-09 | オムロン株式会社 | 制御システム、制御方法、および制御プログラム |
WO2020166004A1 (ja) * | 2019-02-14 | 2020-08-20 | 三菱電機株式会社 | 制御システム、プログラマブルロジックコントローラ、方法、及びプログラム |
-
2000
- 2000-12-19 JP JP2000385948A patent/JP2002189507A/ja active Pending
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007183785A (ja) * | 2006-01-06 | 2007-07-19 | Fuji Electric Holdings Co Ltd | プログラムツリー表示方法、プログラム生成装置、およびプログラム生成プログラム |
JP2007334469A (ja) * | 2006-06-13 | 2007-12-27 | Hitachi Industrial Equipment Systems Co Ltd | プログラマブルコントローラ及びこれを用いた機器制御方法 |
JP4528284B2 (ja) * | 2006-06-13 | 2010-08-18 | 株式会社日立産機システム | プログラマブルコントローラ |
JP2009187177A (ja) * | 2008-02-05 | 2009-08-20 | Fuji Electric Systems Co Ltd | プログラマブル・ロジックコントローラ及びプログラマブル・ロジックコントローラのロジック更新支援ツール |
JP2009237947A (ja) * | 2008-03-27 | 2009-10-15 | Fuji Electric Systems Co Ltd | プログラマブルコントローラ、プログラマブルコントローラ支援装置、及びプログラマブルコントローラシステム |
JP2016224558A (ja) * | 2015-05-27 | 2016-12-28 | 株式会社キーエンス | プログラム作成支援装置、制御方法およびプログラム |
WO2020071436A1 (ja) * | 2018-10-05 | 2020-04-09 | オムロン株式会社 | 制御システム、制御方法、および制御プログラム |
JP2020060856A (ja) * | 2018-10-05 | 2020-04-16 | オムロン株式会社 | 制御システム、制御方法、および制御プログラム |
JP7091986B2 (ja) | 2018-10-05 | 2022-06-28 | オムロン株式会社 | 制御システム、制御方法、および開発支援プログラム |
US11579580B2 (en) | 2018-10-05 | 2023-02-14 | Omron Corporation | Control system, control method, and non-transitory computer readable medium |
WO2020166004A1 (ja) * | 2019-02-14 | 2020-08-20 | 三菱電機株式会社 | 制御システム、プログラマブルロジックコントローラ、方法、及びプログラム |
JPWO2020166004A1 (ja) * | 2019-02-14 | 2021-02-18 | 三菱電機株式会社 | 制御システム、プログラマブルロジックコントローラ、方法、及びプログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4050764B2 (ja) | コンパイルシステム | |
US5247678A (en) | Load time linker for software used with a multiprocessor system | |
CA2082409C (en) | Improved system and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment | |
US6173438B1 (en) | Embedded graphical programming system | |
US5269021A (en) | Multiprocessor software interface for a graphics processor subsystem employing partially linked dynamic load modules which are downloaded and fully linked at run time | |
US6918103B2 (en) | Integrated circuit configuration | |
KR100559251B1 (ko) | 개방형 인터넷망 기반의 로봇 개발을 위한 분산소프트웨어 통합서비스방법 | |
US5404519A (en) | System for extending software calls to functions on another processor by means of a communications buffer | |
JP2004503866A (ja) | モジュラーコンピュータシステムおよび関連方法 | |
US7469359B2 (en) | Method and apparatus for testing communication software | |
JP2002189507A (ja) | コントローラ | |
US20020174266A1 (en) | Parameterized application programming interface for reconfigurable computing systems | |
CN113448643A (zh) | 配置数据管理系统及方法 | |
KR20030000794A (ko) | 웹 기반 인서킷 에뮬레이터, 이를 이용한 타겟 임베디드시스템의 웹 기반 개발 시스템 및 방법 | |
US7519719B2 (en) | Automatic creation of protocol dependent control path for instrument application | |
KR20020032256A (ko) | 통합 임베디드 시스템 및 이의 구현 방법 | |
Navas et al. | Reconciling run-time evolution and resource-constrained embedded systems through a component-based development framework | |
Navas et al. | A component-based run-time evolution infrastructure for resource-constrained embedded systems | |
JP3659399B2 (ja) | プログラマブルロジックコントローラ | |
JP3779758B2 (ja) | 随時にホストコンピュータと接続してユーザプログラムを変更することができるシングルボードコンピュータ | |
De Pascale et al. | The haptik library: A component based architecture for haptic devices access | |
KR100860991B1 (ko) | 미디어 컴포넌트 빌드 방법 및 장치와 그에 사용되는컴퓨터 판독가능 저장매체 | |
JP2002541582A (ja) | エミュレータシステム内のユーザメモリを更新する方法およびシステム | |
KR100932546B1 (ko) | 로봇 제어로직 설계용 통합 소프트웨어 개발 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체 | |
CN116841644A (zh) | 二进制文件动态加载方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061205 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090430 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20090430 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100203 |