(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022183940
(43)【公開日】2022-12-13
(54)【発明の名称】情報処理装置、制御システム、および制御プログラムを開発するプログラム
(51)【国際特許分類】
G05B 19/042 20060101AFI20221206BHJP
G06F 8/30 20180101ALI20221206BHJP
【FI】
G05B19/042
G06F8/30
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2021091494
(22)【出願日】2021-05-31
(71)【出願人】
【識別番号】000002945
【氏名又は名称】オムロン株式会社
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】田村 嘉英
(72)【発明者】
【氏名】▲濱▼崎 治
(72)【発明者】
【氏名】見置 孝昌
(72)【発明者】
【氏名】片岡 仁之
【テーマコード(参考)】
5B376
5H220
【Fターム(参考)】
5B376BC07
5B376BC12
5B376BC13
5B376BC51
5H220AA04
5H220BB09
5H220CC07
5H220CX01
5H220JJ12
5H220JJ22
5H220JJ26
5H220JJ51
5H220JJ53
5H220JJ55
5H220JJ57
5H220JJ59
5H220KK01
(57)【要約】
【課題】制御対象を制御するための制御プログラムに含まれる構造体への変数の追加による制御対象の生産性の低下および安全性の低下を抑制する。
【解決手段】プログラム開発手段81は、第1制御プログラムPu1に含まれる構造体Ssに予約領域Raを追加する。プログラム開発手段81は、予約領域Raの一部に変数を割り当てて第1制御プログラムPu1から第2制御プログラムPu11を作成する。プログラム開発手段81は、運転モードの制御装置100に第1制御プログラムPu1から第2制御プログラムPu11への更新指令Cmuを送信する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
制御装置が制御対象を制御する運転モードにおいて実行する第1制御プログラムを、ユーザの入力に応じて開発するプログラム開発手段と、
前記第1制御プログラムが保存された記憶手段とを備え、
前記プログラム開発手段は、
前記第1制御プログラムに含まれる構造体に予約領域を追加し、
前記第1制御プログラムが前記予約領域を含む場合、前記予約領域の一部に変数を割り当てて前記第1制御プログラムから第2制御プログラムを作成し、前記運転モードにおいて動作している前記制御装置に、前記第1制御プログラムから前記第2制御プログラムへの更新指令を送信する、情報処理装置。
【請求項2】
前記プログラム開発手段は、前記変数のサイズだけ前記予約領域のサイズを減らす、請求項1に記載の情報処理装置。
【請求項3】
前記プログラム開発手段は、前記ユーザの選択に応じて、前記変数の初期値を、前記ユーザによって指定された値、または前記ユーザによって指定された前記構造体に含まれる他の変数の、前記制御装置において前記第1制御プログラムが前記第2制御プログラムに更新されるタイミングにおける値に設定する、請求項1または2に記載の情報処理装置。
【請求項4】
第1制御プログラムに基づいて制御対象を制御するための運転モードを動作モードとして有する制御システムであって、
前記第1制御プログラムを、ユーザの入力に応じて開発するプログラム開発手段と、
前記第1制御プログラムが保存された記憶手段と、
前記記憶手段に保存された前記第1制御プログラムに基づいて前記制御対象を制御する制御手段と、
前記プログラム開発手段からの更新指令に応じて、前記記憶手段に保存された前記第1制御プログラムを更新する更新手段とを備え、
前記プログラム開発手段は、
前記第1制御プログラムに含まれる構造体に予約領域を追加し、
前記第1制御プログラムが前記予約領域を含む場合、前記予約領域の一部に変数を割り当てて前記第1制御プログラムから第2制御プログラムを作成し、前記第1制御プログラムから前記第2制御プログラムへの前記更新指令を前記運転モードにおいて前記更新手段に送信する、制御システム。
【請求項5】
制御装置が制御対象を制御する運転モードにおいて実行する第1制御プログラムを、ユーザの入力に応じて開発するためのプログラムであって、
前記プログラムは、プロセッサによって実行されることによって、
前記第1制御プログラムに含まれる構造体に予約領域を追加し、
前記予約領域の一部に変数を割り当てて前記第1制御プログラムから第2制御プログラムを作成し、
前記運転モードにおいて動作している前記制御装置に、前記第1制御プログラムから前記第2制御プログラムへの更新指令を送信する、プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、制御対象を制御する制御プログラムを開発する情報処理装置、および当該制御プログラムに基づいて制御対象を制御する制御システム、および当該制御プログラムを開発するプログラムに関する。
【背景技術】
【0002】
従来、制御対象を制御する制御プログラムを開発する情報処理装置が知られている。たとえば、特開2012-194682号公報(特許文献1)には、制御装置によって制御される制御対象機器を制御するためのユーザプログラムを作成・編集するツール装置が開示されている。当該制御装置は、実行される複数のタスクが同期する際に、ユーザプログラムが実行される運転モードとユーザプログラムが実行されないプログラムモードとの間で動作モードを切り替える。利用者は、プログラムモードにおいてツール装置を用いてユーザプログラムを編集することができる。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
ユーザプログラムに含まれる構造体の定義に対して変数を追加することにより、当該ユーザプログラムに基づく制御において処理されるデータを増やすことができる。その結果、制御対象の制御をより高精度に行うことができるとともに、当該制御の範囲を拡げることができる。
【0005】
しかし、特許文献1のプログラムモードにおいてユーザプログラムに含まれる構造体に変数を追加する場合、当該制御が停止している間の制御対象の作業時間の逸失、および制御対象による作業において使用される予定であった材料の使用可能期間の経過等が生じ得るため、制御対象の生産性が低下し得る。
【0006】
また、特許文献1の運転モードにおいて構造体に変数を追加する場合、構造体のサイズおよび構造体に含まれる既存の変数のオフセットの各々が変化し得る。その結果、更新後のユーザプログラムの実行時にアクセスが禁止されているメモリ領域へのアクセス(セグメンテーションフォルト)等が生じ得る。制御対象の動作が不定となり得るため、制御対象の安全性も低下し得る。
【0007】
本開示は上記のような課題を解決するためになされたものであり、その目的は、制御対象を制御するための制御プログラムに含まれる構造体への変数の追加による制御対象の生産性の低下および安全性の低下を抑制することである。
【課題を解決するための手段】
【0008】
本開示の一局面に係る情報処理装置は、プログラム開発手段と、記憶手段とを備える。プログラム開発手段は、制御装置が制御対象を制御する運転モードにおいて実行する第1制御プログラムを、ユーザの入力に応じて開発する。記憶手段は、第1制御プログラムが保存されている。プログラム開発手段は、第1制御プログラムに含まれる構造体に予約領域を追加する。プログラム開発手段は、第1制御プログラムが予約領域を含む場合、予約領域の一部に変数を割り当てて第1制御プログラムから第2制御プログラムを作成する。プログラム開発手段は、運転モードにおいて動作している制御装置に、第1制御プログラムから第2制御プログラムへの更新指令を送信する。
【0009】
この開示によれば、第1制御プログラムに含まれる構造体のうち、変数の追加が想定される構造体に変数追加用の予約領域を予め追加する。当該予約領域の一部に新たな変数を割り当てることにより、構造体のサイズおよび構造体に含まれる既存の変数のオフセットの各々を維持することができる。その結果、制御対象の動作が不定となることを防止することができるため、制御対象の安全性の低下を抑制することができる。また、第1制御プログラムの実行を継続しながら第1制御プログラムを第2制御プログラムに更新することが可能であるため、制御対象の生産性の低下も抑制することができる。
【0010】
上記の開示において、プログラム開発手段は、変数のサイズだけ予約領域のサイズを減らしてもよい。
【0011】
この開示によれば、構造体のサイズが変数の追加によって元のサイズを超過することを防止することができる。
【0012】
上記の開示において、プログラム開発手段は、ユーザの選択に応じて、予約領域に割り当てられた変数の初期値を、ユーザによって指定された値、またはユーザによって指定された構造体に含まれる他の変数の、制御装置において第1制御プログラムが第2制御プログラムに更新されるタイミングにおける値に設定してもよい。
【0013】
この開示によれば、更新されたユーザプログラムに基づく制御対象に対する制御の柔軟性を高めることができる。
【0014】
本開示の他の局面に係る制御システムは、第1制御プログラムに基づいて制御対象を制御するための運転モードを動作モードとして有する。制御システムは、プログラム開発手段と、記憶手段と、制御手段と、更新手段とを備える。プログラム開発手段は、制御対象を制御するための第1制御プログラムを、ユーザの入力に応じて開発する。記憶手段には、第1制御プログラムが保存されている。制御手段は、記憶手段に保存された第1制御プログラムに基づいて制御対象を制御する。更新手段は、プログラム開発手段からの更新指令に応じて、記憶手段に保存された第1制御プログラムを更新する。プログラム開発手段は、第1制御プログラムに含まれる構造体に予約領域を追加する。プログラム開発手段は、第1制御プログラムが予約領域を含む場合、予約領域の一部に変数を割り当てて第1制御プログラムから第2制御プログラムを作成する。プログラム開発手段は、第1制御プログラムから第2制御プログラムへの更新指令を運転モードにおいて更新手段に送信する。
【0015】
この開示によれば、第1制御プログラムに含まれる構造体のうち、変数の追加が想定される構造体に変数追加用の予約領域を予め追加する。当該予約領域の一部に新たな変数を割り当てることにより、構造体のサイズおよび構造体に含まれる既存の変数のオフセットの各々を維持することができる。その結果、制御対象の動作が不定となることを防止することができるため、制御対象の安全性の低下を抑制することができる。また、第1制御プログラムの実行を継続しながら第1制御プログラムを第2制御プログラムに更新することが可能であるため、制御対象の生産性の低下も抑制することができる。
【0016】
本開示の他の局面に係るプログラムは、制御装置が制御対象を制御する運転モードにおいて実行する第1制御プログラムを、ユーザの入力に応じて開発するためのプログラムである。当該プログラムは、プロセッサによって実行されることによって、第1制御プログラムに含まれる構造体に予約領域を追加し、予約領域の一部に変数を割り当てて第1制御プログラムから第2制御プログラムを作成し、運転モードにおいて動作している制御装置に、第1制御プログラムから第2制御プログラムへの更新指令を送信する。
【0017】
この開示によれば、第1制御プログラムに含まれる構造体のうち、変数の追加が想定される構造体に変数追加用の予約領域を予め追加する。当該予約領域の一部に新たな変数を割り当てることにより、構造体のサイズおよび構造体に含まれる既存の変数のオフセットの各々を維持することができる。その結果、制御対象の動作が不定となることを防止することができるため、制御対象の安全性の低下を抑制することができる。また、第1制御プログラムの実行を継続しながら第1制御プログラムを第2制御プログラムに更新することが可能であるため、制御対象の生産性の低下も抑制することができる。
【発明の効果】
【0018】
本開示に係る制御装置、制御システム、およびプログラムによれば、制御対象を制御するための制御プログラムに含まれる構造体への変数の追加による制御対象の生産性の低下および安全性の低下を抑制することができる。
【図面の簡単な説明】
【0019】
【
図1】実施の形態に係る制御システムの機能構成を示すブロック図である。
【
図2】
図1の制御システムのネットワーク構成例を示す模式図である。
【
図3】
図2の制御装置のハードウェア構成例を示すブロック図である。
【
図4】
図2のサポート装置のハードウェア構成例を示す模式図である。
【
図6】ユーザがサポート装置によって編集したユーザプログラムをプログラムモードにおいて制御装置に転送する場合の制御装置およびサポート装置の各々のタイムチャートを併せて示す図である。
【
図7】
図6の運転モードおよびプログラムモードの各々で行われている具体的な処理のタイムチャートである。
【
図8】ユーザがサポート装置によって編集したユーザプログラムを運転モードにおいて制御装置に転送する場合の制御装置およびサポート装置の各々のタイムチャートを併せて示す図である。
【
図9】
図8の運転モードで行われる具体的な処理のタイムチャートである。
【
図10】
図4のサポート装置において表示される構造体を編集するためのダイアログを示す図である。
【
図11】
図10の予約領域追加ボタンがユーザによって押下された後のダイアログを示す図である。
【
図12】
図11の構造体に変数が追加された場合のダイアログを示す図である。
【
図13】
図12においてユーザによってOKボタンが押下された場合に表示される、追加された変数の初期値を設定するためのダイアログを示す図である。
【
図14】サポート装置において行われる、運転モードにおける構造体への変数追加に関連する処理の流れを示すフローチャートである。
【発明を実施するための形態】
【0020】
以下、実施の形態について図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付してその説明は原則として繰り返さない。
【0021】
<適用例>
図1は、実施の形態に係る制御システム1の機能構成を示すブロック図である。
図1に示されるように、制御システム1は、制御装置100と、サポート装置400(情報処理装置)とを備える。
【0022】
制御装置100は、動作モードとして、運転モードおよびプログラムモードを有する。運転モードとは、ユーザプログラムを実行することにより、フィールドデバイス200を実際に制御するためのモードである。プログラムモードとは、ユーザプログラムを実行することなく、フィールドデバイス200に対する制御を停止して、ユーザがサポート装置400を用いてユーザプログラムを編集するためのモードである。
【0023】
制御装置100は、記憶手段90と、制御手段91と、更新手段92とを備える。記憶手段90には、フィールドデバイス200(制御対象)を制御するためのユーザプログラムPu1(第1制御プログラム)が保存されている。制御手段91は、ユーザプログラムPu1を実行して、フィールドデバイス200を制御する。更新手段92は、サポート装置400からの更新指令Cmuに応じて記憶手段90に保存されたユーザプログラムPu1を更新する。
【0024】
サポート装置400は、ユーザプログラムPu1が保存された記憶手段80と、プログラム開発手段81とを備える。プログラム開発手段81は、ユーザUsの入力に応じて、ユーザプログラムPu1を開発する。プログラム開発手段81は、ユーザUsの入力に応じて、ユーザプログラムPu1に含まれる構造体Ssに予約領域Raを追加する。プログラム開発手段81は、ユーザプログラムPu1が予約領域Raを含む場合、ユーザUsの入力に応じて、構造体Ssの予約領域Raの一部に新たな変数を割り当ててユーザプログラムPu1からユーザプログラムPu11(第2制御プログラム)を作成する。プログラム開発手段81は、ユーザプログラムPu1からPu11への更新指令Cmuを運転モードにおいて更新手段92に送信する。
【0025】
<制御システムのネットワーク構成例>
図2は、
図1の制御システム1のネットワーク構成例を示す模式図である。
図2に示されるように、制御システム1は、複数のデバイスが互いに通信可能に構成されたデバイス群を含む。典型的には、デバイスは、ユーザプログラムを実行する処理主体である制御装置100と、制御装置100に接続される周辺装置とを含み得る。
【0026】
制御装置100は、各種の設備または装置などの制御対象を制御する産業用コントローラに相当する。制御装置100は、制御演算を実行する一種のコンピュータであり、典型的には、PLC(Programmable Logic Controller)を含む。制御装置100は、フィールドネットワーク20を介してフィールドデバイス200に接続されている。制御装置100は、フィールドネットワーク20を介して、少なくとも1つのフィールドデバイス200との間でデータを遣り取りする。
【0027】
制御装置100において実行される制御演算は、フィールドデバイス200において収集または生成されたデータを収集する処理、フィールドデバイス200に対する指令値などのデータを生成する処理、および生成した出力データを対象のフィールドデバイス200へ送信する処理などを含む。
【0028】
フィールドネットワーク20は、定周期通信を行うバスまたはネットワークを採用することが好ましい。このような定周期通信を行うバスまたはネットワークとしては、EtherCAT(登録商標)、EtherNet/IP(登録商標)、DeviceNet(登録商標)、またはCompoNet(登録商標)などが知られている。データの到達時間が保証される点において、EtherCAT(登録商標)が好ましい。
【0029】
フィールドネットワーク20には、任意のフィールドデバイス200を接続することができる。フィールドデバイス200は、フィールド側にあるロボットまたはコンベアなどに対して何らかの物理的な作用を与えるアクチュエータ、および、フィールドとの間で情報を遣り取りする入出力装置などを含む。
【0030】
制御システム1においてフィールドデバイス200は、複数のサーボドライバ220_1,220_2と、複数のサーボドライバ220_1,220_2にそれぞれ接続された複数のサーボモータ222_1,222_2とを含む。フィールドデバイス200は、「制御対象」の一例である。
【0031】
サーボドライバ220_1,220_2は、制御装置100からの指令値(たとえば、位置指令値または速度指令値など)に従って、サーボモータ222_1および222_2のうちの対応するサーボモータを駆動する。このようにして、制御装置100は、フィールドデバイス200を制御することができる。
【0032】
制御装置100は、上位ネットワーク12を介して、他の装置にも接続されている。上位ネットワーク12は、ゲートウェイ700を介して、外部ネットワークであるインターネット900に接続されている。上位ネットワーク12には、一般的なネットワークプロトコルであるイーサネット(登録商標)、あるいはEtherNet/IP(登録商標)が採用されてもよい。より具体的には、上位ネットワーク12には、少なくとも1つのサーバ装置600および少なくとも1つの表示装置500が接続されてもよい。
【0033】
サーバ装置600としては、データベースシステム、または製造実行システム(MES:Manufacturing Execution System)などが想定される。製造実行システムは、制御対象の製造装置または設備からの情報を取得して、生産全体を監視および管理するものであり、オーダ情報、品質情報、あるいは出荷情報などを扱うこともできる。これらに限らず、情報系サービスを提供する装置を上位ネットワーク12に接続するようにしてもよい。情報系サービスとしては、制御対象の製造装置または設備からの情報を取得して、マクロ的またはミクロ的な分析などを行う処理が想定される。たとえば、情報系サービスとしては、制御対象の製造装置または設備からの情報に含まれる何らかの特徴的な傾向を抽出するデータマイニング、あるいは制御対象の設備または機械からの情報に基づく機械学習を行うための機械学習ツールなどが想定される。
【0034】
表示装置500は、ユーザからの操作を受けて、制御装置100に対してユーザ操作に応じたコマンドなどを出力するとともに、制御装置100での演算結果などをグラフィカルに表示する。
【0035】
制御装置100には、サポート装置400が接続可能になっている。サポート装置400は、上位ネットワーク12またはインターネット900を介して制御装置100に接続されてもよい。サポート装置400は、制御装置100が制御対象を制御するために必要な準備を支援する装置である。具体的には、サポート装置400は、制御装置100で実行されるプログラムの開発環境(プログラム作成編集ツール、パーサ、およびコンパイラなど)、制御装置100および制御装置100に接続される各種デバイスの構成情報(コンフィギュレーション)を設定するための設定環境、生成したプログラムを制御装置100へ出力する機能、および制御装置100上で実行されるプログラムなどをオンラインで修正および変更を行う機能などを提供する。
【0036】
サポート装置400は、動作モードの切替指令を制御装置100に送信する。制御装置100は、サポート装置400からの動作モードの切替指令に応じて、動作モードを、運転モードおよびプログラムモードの間で選択的に切り替える。
【0037】
制御システム1においては、制御装置100、サポート装置400、および表示装置500がそれぞれ別体として構成されているが、これらの機能の全部または一部を単一の装置に集約するような構成が採用されてもよい。
【0038】
制御装置100は、一の生産現場のみで使用される場合に限らず、他の生産現場においても使用される。また、一の生産現場内においても複数の異なるラインで使用される場合もある。
【0039】
<制御装置のハードウェア構成例>
図3は、
図2の制御装置100のハードウェア構成例を示すブロック図である。
図3に示されるように、制御装置100は、プロセッサ102と、メインメモリ104と、ストレージ160と、メモリカードインターフェイス112と、上位ネットワークコントローラ106と、フィールドネットワークコントローラ108と、ローカルバスコントローラ116と、LED(Light Emitting Diode)117(発光部)と、USB(Universal Serial Bus)インターフェイスを提供するUSBコントローラ170とを含む。これらのコンポーネントは、プロセッサバス118を介して接続されている。
【0040】
プロセッサ102は、制御演算を実行する演算処理部に相当し、CPU(Central Processing Unit)および/またはGPU(Graphics Processing Unit)などで構成される。具体的には、プロセッサ102は、ストレージ160(記憶手段)に格納されたプログラムを読み出して、メインメモリ104に展開して実行することで、制御対象に対する制御演算を実現する。プロセッサ102は、デュアルコアであり、マルチタスク処理により複数のタスクを並行して実行する。当該マルチタスク処理においては、予め設定された制御周期(たとえば、1ms)の制御サイクルが処理全体の共通サイクルとして採用されている。すなわち、プロセッサ102は、複数のタスクの各々を周期的に実行する。なお、プロセッサ102は、シングルコアであり、時分割により複数のタスクを並行して実行してもよい。また、プロセッサ102のコア数は、3以上であってもよい。プロセッサ102は、制御装置100の動作モードを、運転モードおよびプログラムモードの間で選択的に切り替える。
【0041】
メインメモリ104は、DRAM(Dynamic Random Access Memory)および/またはSRAM(Static Random Access Memory)などの揮発性記憶装置などで構成される。ストレージ160は、たとえば、SSD(Solid State Drive)および/またはHDD(Hard Disk Drive)などの不揮発性記憶装置などで構成される。
【0042】
LED117は、ユーザプログラムPu1が更新される場合に点灯される。
ストレージ160には、システムプログラムPscと、ユーザプログラムPu1,Pu2,Pu3と、タスク情報L1とが保存されている。システムプログラムPscは、制御装置100を統合的に制御して、制御装置100の各機能を実現するためのプログラムを含む。すなわち、システムプログラムPscを実行するプロセッサ102が、
図1の制御手段91、および更新手段92に対応する。ユーザプログラムPu1~Pu3は、たとえばラダー言語で記述されている。タスク情報L1には、複数のタスクの各々の名称と、当該タスクの優先度と、当該タスクが実行される周期と、当該タスクで実行されるユーザプログラムが含まれている。なお、優先度の値が相対的に小さいタスクが優先的に実行される。すなわち、優先度の値が小さいほど、当該優先度は高い。
【0043】
メモリカードインターフェイス112は、着脱可能な記憶媒体の一例であるメモリカード114を受け付ける。メモリカードインターフェイス112は、メモリカード114に対して任意のデータの読み書きが可能になっている。
【0044】
上位ネットワークコントローラ106は、上位ネットワーク12(たとえばローカルエリアネットワーク)を介して、上位ネットワーク12に接続された任意の情報処理装置との間でデータを遣り取りする。
【0045】
フィールドネットワークコントローラ108は、フィールドネットワーク20を介して、サーボモータ222_1,222_2等の任意のデバイスとの間でデータを遣り取りする。
【0046】
ローカルバスコントローラ116は、ローカルバス122を介して、制御装置100を構成する任意の機能ユニット180との間でデータを遣り取りする。機能ユニット180は、たとえば、アナログ信号の入力および/または出力を担当するアナログI/Oユニット、デジタル信号の入力および/または出力を担当するデジタルI/Oユニット、ならびにエンコーダなどからのパルスを受け付けるカウンタユニットなどからなる。
【0047】
USBコントローラ170は、USB接続を介して、任意の情報処理装置との間でデータを遣り取りする。USBコントローラ170には、たとえばサポート装置400が接続される。
【0048】
<サポート装置のハードウェア構成>
図4は、
図2のサポート装置400のハードウェア構成例を示す模式図である。サポート装置400は、一例として、汎用的なアーキテクチャに従うコンピュータがプログラムを実行することで実現される。
【0049】
図4に示されるように、サポート装置400は、プロセッサ402と、揮発性メモリ404と、不揮発性メモリ406と、ストレージ(Hard Disk Drive)408と、ディスプレイ450と、キーボード410と、マウス412と、メモリカードインターフェイス414と、外部装置インターフェイス418とを備える。これらのコンポーネントは、プロセッサバス420を介して相互に通信可能に接続されている。
【0050】
プロセッサ402は、CPUおよびGPUなどで構成され、不揮発性メモリ406およびストレージ408に格納されたプログラム(一例として、サポートプログラムPsp)を読み出して、揮発性メモリ404に展開して実行することで、各種処理を実現する。すなわち、サポートプログラムPspを実行するプロセッサ402が、
図1のプログラム開発手段81に対応する。ストレージ408は、たとえば、SSDおよび/またはHDDなどの不揮発性記憶装置などで構成される。
【0051】
サポート装置400においては、プロセッサ402が所定のプログラムを実行することで、サポート装置400として必要な機能が提供される。当該機能の一部または全部が、専用のハードウェア回路(たとえば、ASICまたはFPGAなど)を用いて実装されてもよい。
【0052】
揮発性メモリ404は、DRAMおよびSRAMなど、各種の揮発性記憶装置によって構成される。不揮発性メモリ406は、SSDなど、各種の不揮発性記憶装置によって構成される。
【0053】
不揮発性メモリ406およびストレージ408には、基本的な機能を実現するためのOS(Operating System)に加えて、サポート装置400としての機能を提供するためのサポートプログラムPspが格納されている。なお、サポート装置400においては、ストレージ408にサポートプログラムPspが格納されている。サポートプログラムPspには、コンピュータをサポート装置400として機能させるための命令が規定されている。
【0054】
ディスプレイ450は、プロセッサ402からの処理結果などを出力する。キーボード410およびマウス412は、ユーザプログラムなどの各種のプログラムを作成したり、制御対象に応じた設定値などをユーザが入力したりするときに、ユーザ操作を受け付ける。
【0055】
メモリカードインターフェイス414は、メモリカード115が着脱可能に構成されており、メモリカード115に対して各種データ(ユーザプログラムなど)を書き込み、メモリカード115から各種データを読み出すことが可能になっている。
【0056】
外部装置インターフェイス418は、ネットワークを介して、制御装置100などの任意の外部装置などとの間でデータを遣り取りする。
【0057】
なお、図示は省略するが、サポート装置400は、光学ドライブを備えていてもよく、コンピュータが読み取り可能なプログラムを非一過的に格納するDVD(Digital Versatile Disc)などの光学記録媒体から、その中に格納されたプログラム(サポートプログラムなど)が読み取られて不揮発性メモリ406またはストレージ408などにインストールされる。
【0058】
サポート装置400において実行されるサポートプログラムPspなどは、コンピュータ読取可能なDVDを介してインストールされてもよいが、ネットワーク上のサーバ装置600などからダウンロードする形でインストールされるようにしてもよい。また、サポート装置400が提供する機能は、OSが提供するモジュールの一部を利用する形で実現される場合もある。
【0059】
図5は、
図3のタスク情報L1の一例を示す図である。
図5に示されるように、タスクAの優先度は1であり、タスクAの制御周期は1msであり、タスクAで実行されるユーザプログラムはPu1である。タスクBの優先度は2であり、タスクBの制御周期は2msであり、タスクBで実行されるユーザプログラムはPu2である。タスクCの優先度は3であり、タスクCの制御周期は4msであり、タスクCで実行されるユーザプログラムはPu3である。タスクAは、タスクB,Cよりも優先的に実行される。タスクBは、タスクCよりも優先的に実行される。タスクB,Cの各々の制御周期は、タスクAの制御周期の自然数倍に設定されている。
【0060】
図6は、ユーザUsがサポート装置400によって編集したユーザプログラムをプログラムモードにおいて制御装置100に転送する場合の制御装置100およびサポート装置400の各々のタイムチャートを併せて示す図である。
図6に示されるように、制御装置100は、時刻t0から運転モードを開始する。ユーザUsは、時刻t1(>t0)~t2(>t1)の間、サポート装置400に保存されたユーザプログラムをプログラム作成編集ツールを用いて編集する。ユーザUsは、時刻t3(>t2)においてプログラムモードへの切替指令をサポート装置400を介して制御装置100に送信する。全タスクの制御周期の開示時刻が合う時刻t4(>t3)において、制御装置100は、動作モードを運転モードからプログラムモードに切り替える。
【0061】
ユーザUsは、時刻t5(>t4)にユーザプログラムの更新指令を制御装置100に送信する。制御装置100は、制御装置100に保存されているユーザプログラムをサポート装置400によって編集されたユーザプログラムに更新する。制御装置100は、全タスクの制御周期の開始時刻が合う時刻t6に動作モードをプログラムモードから運転モードに切り替えて、更新されたユーザプログラムの実行を開始する。
【0062】
図7は、
図6の運転モードおよびプログラムモードの各々で行われている具体的な処理のタイムチャートである。以下で説明する処理は、
図3のシステムプログラムPscを実行するプロセッサ102によって実現される。後に説明する
図9に関しても同様である。
【0063】
図7に示されるように、運転モードにおいては、制御サイクルが開始される場合、全タスクA~Cの実行サイクルが同時に開始される。プロセッサ102はデュアルコアであるため、優先度が高い順にタスクA,Bの処理を同時に開始する。タスクCは、タスクA,Bよりも優先度が低いため、待機状態になる。
【0064】
タスクAにおいては、入出力更新処理IO1、ユーザプログラムPu1、およびユーザプログラムPu1以外のプログラムSPaが実行される。タスクBにおいては、入出力更新処理IO2、ユーザプログラムPu2、およびユーザプログラムPu2以外のプログラムSPbが実行される。なお、入出力更新処理IO1,IO2の各々における出力更新処理は、当該入出力更新処理に対応するユーザプログラムの実行により決定された出力値を、内部変数および/または制御対象に反映する処理を含む。特に、フィールドネットワーク20を介して接続されているフィールドデバイス200に対する出力値は、通信フレームに格納されてフィールドネットワーク20に送出される。入出力更新処理IO1,IO2の各々における入力更新処理は、当該入出力更新処理に対応するユーザプログラムの実行に必要な入力値(状態値)を、内部変数および/または制御対象から取得する処理を含む。特に、フィールドネットワーク20を介して接続されているフィールドデバイス200からの入力値は、フィールドネットワーク20上を伝搬する通信フレームから取得される。
【0065】
タスクAの処理が終了すると、プロセッサ102の2つのコアのうち1つが空くため、タスクCの処理が開始される。タスクCにおいては、ユーザプログラムPu3、およびユーザプログラムPu3以外のプログラムSPcが実行される。
【0066】
運転モードが開始されてから1ms(タスクAの制御周期)が経過した時刻において、タスクCより優先度が高いタスクBが実行中であり、かつタスクCの優先度よりもタスクAの優先度が高いため、タスクCの処理が中断されて、タスクAの処理が開始される。タスクBの処理が終了すると、タスクCの処理が再開される。
【0067】
運転モードが開始されてから2ms(タスクBの制御周期)が経過した時刻において、タスクA,Bの処理が同時に開始される。当該時点においてタスクCは待機状態である。
【0068】
運転モードが開始されてから3msが経過した時刻において、タスクAの処理が開始される。当該時刻において、タスクBは実行中であり、タスクCは待機状態である。
【0069】
運転モードが開始されてから4msが経過した時刻t4において、タスクA~Cの制御周期の開始時刻が合うため、制御装置100の動作モードが運転モードからプログラムモードに切り替えられる。プログラムモードにおいては、タスクA~Cの各々のユーザプログラムは実行されないため、当該タスクの制御周期毎にユーザプログラム以外のプログラムが実行される。タスクA~Cの制御周期の開始時刻が合う時刻t6に、動作モードがプログラムモードから運転モードに切り替えられて、更新されたユーザプログラムの実行が開始される。
【0070】
ユーザプログラムに含まれる構造体の定義に対して変数を追加することにより、当該ユーザプログラムに基づく制御において処理されるデータを増やすことができる。その結果、フィールドデバイス200の制御をより高精度に行うことができるとともに、当該制御の範囲を拡げることができる。
【0071】
しかし、プログラムモードにおいてユーザプログラムに含まれる構造体に変数を追加する場合、当該制御が停止している間のフィールドデバイス200の作業時間の逸失、およびフィールドデバイス200による作業において使用される予定であった材料の使用可能期間の経過等が生じ得るため、フィールドデバイス200の生産性が低下し得る。
【0072】
また、運転モードにおいて通常の構造体に変数を追加する場合、構造体のサイズおよび構造体に含まれる既存の変数のオフセットの各々が変化し得る。その結果、更新後のユーザプログラムの実行時にアクセスが禁止されているメモリ領域へのアクセス(セグメンテーションフォルト)等が生じ得る。フィールドデバイス200の動作が不定となり得るため、フィールドデバイスの安全性も低下し得る。
【0073】
そこで、制御システム1においては、ユーザプログラムに含まれる構造体のうち、変数の追加が想定される構造体に変数追加用の予約領域を予め追加する。当該予約領域の一部に新たな変数を割り当てることにより、構造体のサイズおよび構造体に含まれる既存の変数のオフセットの各々を維持することができる。その結果、運転モードにおいて構造体に変数を追加しても、フィールドデバイス200の動作が不定となることを防止することができるため、フィールドデバイス200の安全性の低下を抑制することができる。また、制御システム1においては、ユーザプログラムの実行を継続しながらユーザプログラムの更新が可能であるため、フィールドデバイス200の生産性の低下も抑制することができる。制御システム1によれば、フィールドデバイス200を制御するためのユーザプログラムに含まれる構造体への変数の追加によるフィールドデバイス200の生産性の低下および安全性の低下を抑制することができる。
【0074】
図8は、ユーザUsがサポート装置400によって編集したユーザプログラムを運転モードにおいて制御装置100に転送する場合の制御装置100およびサポート装置400の各々のタイムチャートを併せて示す図である。
図8に示されるように、制御装置100は、時刻t10から運転モードを開始する。ユーザUsは、時刻t11(>t10)~t12(>t11)の間、サポート装置400に保存されたユーザプログラムをプログラム作成編集ツールを用いて編集する。ユーザUsは、時刻t13(>t12)においてユーザプログラムの更新指令を制御装置100に送信する。制御装置100は、制御装置100に保存されているユーザプログラムに基づく制御からサポート装置400によって編集されたユーザプログラムに基づく制御への移行が可能である場合にユーザプログラムを更新する。制御装置100は、全タスクの制御周期の開始時刻が合う時刻t14(>t13)に更新されたユーザプログラムの実行を開始する。
【0075】
図9は、
図8の運転モードで行われる具体的な処理のタイムチャートである。運転モードで行われる処理は、
図7の運転モードで行われる処理と同様であるため、同様の処理についての説明を繰り返さない。
図7および
図9を比較すると、
図9においてはユーザプログラムの更新にプログラムモードを介する必要がないため、タスクA~Cが停止されず、ユーザプログラムの更新をより早期に行うことができる。
【0076】
図10は、
図4のサポート装置400において表示される構造体を編集するためのダイアログDg1を示す図である。
図10においては、ユーザUsがサポート装置400においてユーザプログラムPu1を作成しているとともに、制御装置100はユーザプログラムPu1に基づいたフィールドデバイス200の制御を開始していないとする。
図11においても同様である。
【0077】
図10に示されるように、ダイアログDg1によって構造体structAが編集されている。ダイアログDg1は、変数テーブルVtbと、OKボタンBn1と、キャンセルボタンBn2と、変数追加ボタンBn3と、予約領域追加ボタンBn4とを含む。OKボタンBn1がユーザUsによって押下されることにより、ダイアログDg1による編集がユーザプログラムPu1に反映される。キャンセルボタンBn2がユーザUsによって押下されることによって、ダイアログDg1による編集がキャンセルされる。変数追加ボタンBn3がユーザUsによって押下されることによって、変数テーブルVtbに新たな変数のための行が追加される。ユーザUsは、当該行において新たな変数の名称、およびデータ型を入力する。構造体structAには、BOOL型の変数memberAと、INT型の変数memberBとが追加されている。予約領域追加ボタンBn4がユーザUsによって押下されることによって、変数テーブルVtbの現在の最終行の次に予約領域が追加されるとともに、当該予約領域の後に特別変数が追加される。
【0078】
図11は、
図10の予約領域追加ボタンBn4がユーザUsによって押下された後のダイアログDg1を示す図である。
図11に示されるように、
図10の変数テーブルVtbの最終行の次に、配列型の変数(配列変数)reserve(予約領域)が追加され、配列変数reserveの次にLREAL型の特別変数editableが追加されている。配列変数reserveの要素数は0~99までの100個である。配列変数reserveの各要素のサイズは1バイトであるため、配列変数reserveのサイズは100バイトである。ユーザUsは、配列変数reserveのデータ型の「99」を編集することにより、配列変数reserveのサイズを変更することができる。特別変数editableは、構造体が予約領域を有することを示す識別子である。すなわち、特別変数editableを含む構造体には、制御装置100の動作モードが運転モードである場合にも変数を追加することが可能である。配列変数reserveおよび特別変数editableの各々の名称は予め定められている。配列変数reserveおよび特別変数editableの各々の名称は、他の名称であってもよい。
【0079】
図11においてユーザUsは、OKボタンを押下した後、ユーザプログラムPu1をサポート装置400から制御装置100に転送したとする。以下で説明する
図12,
図13においては、ユーザプログラムPu1によるフィールドデバイス200の制御が制御装置100によって開始されているとともに、サポート装置400によってユーザプログラムPu1が編集されて、ユーザプログラムPu11が作成されているとする。
【0080】
図12は、
図11の構造体structAに変数memberCが追加された場合のダイアログDg1を示す図である。
図12に示されるように、配列変数reserveが含まれる場合にユーザUsによって変数追加ボタンBn3が押下されると、既存の変数のうち、最後の変数memberBと配列変数reserveとの間に新たな変数用の行が追加される。ユーザUsは、当該行に、新たな変数の名称(たとえばmemberC)、および当該変数のデータ型(たとえばBOOL)を記入する。変数memberCは、配列変数reserveの先頭から当該変数のサイズ分の領域に割り当てられる。BOOL型の変数memberCのサイズは2バイトであるため、変数memberCの追加が完了した後、配列変数reserveのサイズが100バイトから98バイトにプログラム開発手段81によって自動的に減らされる。すなわち、配列変数reserveの要素数が0~97にプログラム開発手段81によって自動的に減らされる。配列変数reserveのサイズが変数の追加に応じてプログラム開発手段81によって自動的に減らされることにより、当該構造体のサイズが変数の追加によって元のサイズを超過することを防止することができる。なお、複数の変数のサイズの合計が配列変数reserveのサイズ以下である限り、ダイアログDg1によって、当該複数の変数が追加されてもよい。
【0081】
図13は、
図12においてユーザUsによってOKボタンが押下された場合に表示される、追加された変数の初期値を設定するためのダイアログDg2を示す図である。制御装置100のユーザプログラムPu1からPu11に更新されて、ユーザプログラムPu11の実行が開始される場合の初期値が、ダイアログDg2によって設定される。ダイアログDg2は、
図12において追加された変数の数だけ表示される。
【0082】
図13に示されるように、ダイアログDg2は、文字列Str1と、ラジオボタンRb1,Rb2と、エディットボックスEb1,Eb2と、OKボタンBn5とを含む。文字列Str1は、初期値が設定される変数memberCの名称を表す。OKボタンBn5が押下された場合にラジオボタンRb1が選択されていると、エディットボックスEb1によって入力された値(たとえばTRUE)が変数memberCの初期値となる。OKボタンBn5が押下された場合にラジオボタンRb2が選択されていると、エディットボックスEb2に入力された既存の変数名(たとえばmemberA)の現在値(ユーザプログラムが更新されるタイミングにおける値)が変数memberCの初期値となる。なお、OKボタンBn5が押下された場合に、ラジオボタンRb1が選択され、かつエディットボックスEb1が空欄であるときには、変数memberCには予め定められた初期値(たとえばFALSE)が設定される。また、OKボタンBn5が押下された場合に、ラジオボタンRb2が選択され、かつエディットボックスEb2が空欄であるとき、またはラジオボタンRb2が選択され、かつエディットボックスEb2に入力された変数名を有する変数が構造体の既存の変数に含まれていないときにも、変数memberCには予め定められた初期値が設定される。構造体に追加された変数の初期値が設定可能であることにより、更新されたユーザプログラムに基づくフィールドデバイス200に対する制御の柔軟性を高めることができる。
【0083】
図14は、サポート装置400において行われる、運転モードにおける構造体への変数追加に関連する処理の流れを示すフローチャートである。
図14に示される各処理は、ユーザUsの入力に応じて、
図4のサポートプログラムPspを実行するプロセッサ402によって実行される。
【0084】
図11、
図12、および
図14を併せて参照して、プロセッサ402は、S101においてユーザプログラムPu1に含まれる構造体に配列変数を追加する(
図11参照)。S101の後、プロセッサ402は、S102において構造体の配列変数の一部に変数を割り当てる(
図12参照)。S102の後、プロセッサ402は、ユーザプログラムPu1からPu11への更新指令を運転モードにおいて動作している制御装置100に送信する。
【0085】
以上、実施の形態に係る制御装置、制御システム、およびプログラムによれば、制御対象を制御するための制御プログラムに含まれる構造体への変数の追加による制御対象の生産性の低下および安全性の低下を抑制することができる。
【0086】
<付記>
上記したような本実施の形態は、以下のような技術思想を含む。
【0087】
[構成1]
制御装置(100)が制御対象(200)を制御する運転モードにおいて実行する第1制御プログラム(Pu1)を、ユーザ(Us)の入力に応じて開発するプログラム開発手段(81)と、
前記第1制御プログラム(Pu1)が保存された記憶手段(80)とを備え、
前記プログラム開発手段(81)は、
前記第1制御プログラム(Pu1)に含まれる構造体(Ss)に予約領域(Ra)を追加し、
前記第1制御プログラム(Pu1)が前記予約領域(Ra)を含む場合、前記予約領域(Ra)の一部に変数を割り当てて前記第1制御プログラム(Pu1)から第2制御プログラム(Pu11)を作成し、前記運転モードにおいて動作している前記制御装置(100)に、前記第1制御プログラム(Pu1)から前記第2制御プログラム(Pu11)への更新指令(Cmu)を送信する、情報処理装置(400)。
【0088】
[構成2]
前記プログラム開発手段(81)は、前記変数のサイズだけ前記予約領域(Ra)のサイズを減らす、構成1に記載の情報処理装置(400)。
【0089】
[構成3]
前記プログラム開発手段(81)は、前記ユーザ(Us)の選択に応じて、前記変数の初期値を、前記ユーザ(Us)によって指定された値、または前記ユーザ(Us)によって指定された前記構造体(Ss)に含まれる他の変数の、前記制御装置(100)において前記第1制御プログラム(Pu1)が前記第2制御プログラム(Pu11)に更新されるタイミングにおける値に設定する、構成1または2に記載の情報処理装置(400)。
【0090】
[構成4]
第1制御プログラム(Pu1)に基づいて制御対象(200)を制御するための運転モードを動作モードとして有する制御システム(1)であって、
前記第1制御プログラム(Pu1)を、ユーザ(Us)の入力に応じて開発するプログラム開発手段(81)と、
前記第1制御プログラム(Pu1)が保存された記憶手段(90)と、
前記記憶手段(90)に保存された前記第1制御プログラム(Pu1)に基づいて前記制御対象(200)を制御する制御手段(91)と、
前記プログラム開発手段(81)からの更新指令(Cmu)に応じて、前記記憶手段(90)に保存された前記第1制御プログラム(Pu1)を更新する更新手段(92)とを備え、
前記プログラム開発手段(81)は、
前記第1制御プログラム(Pu1)に含まれる構造体(Ss)に予約領域(Ra)を追加し、
前記第1制御プログラム(Pu1)が前記予約領域(Ra)を含む場合、前記予約領域(Ra)の一部に変数を割り当てて前記第1制御プログラム(Pu1)から第2制御プログラム(Pu11)を作成し、前記第1制御プログラム(Pu1)から前記第2制御プログラム(Pu11)への前記更新指令(Cmu)を前記運転モードにおいて前記更新手段(92)に送信する、制御システム(1)。
【0091】
[構成5]
制御装置(100)が制御対象(200)を制御する運転モードにおいて実行する第1制御プログラム(Pu1)を、ユーザ(Us)の入力に応じて開発するためのプログラム(Psp)であって、
前記プログラム(Psp)は、プロセッサ(402)によって実行されることによって、
前記第1制御プログラム(Pu1)に含まれる構造体(Ss)に予約領域(Ra)を追加し、
前記予約領域(Ra)の一部に変数を割り当てて前記第1制御プログラム(Pu1)から第2制御プログラム(Pu11)を作成し、
前記運転モードにおいて動作している前記制御装置(100)に、前記第1制御プログラム(Pu1)から前記第2制御プログラム(Pu11)への更新指令(Cmu)を送信する、プログラム(Psp)。
【0092】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0093】
1 制御システム、12 上位ネットワーク、20 フィールドネットワーク、80,90 記憶手段、81 プログラム開発手段、91 制御手段、92 更新手段、100 制御装置、102,402 プロセッサ、104 メインメモリ、106 上位ネットワークコントローラ、108 フィールドネットワークコントローラ、112,414 メモリカードインターフェイス、114,115 メモリカード、116 ローカルバスコントローラ、117 LED、118,420 プロセッサバス、122 ローカルバス、160,408 ストレージ、170 コントローラ、180 機能ユニット、200 フィールドデバイス、220 サーボドライバ、222 サーボモータ、400 サポート装置、404 揮発性メモリ、406 不揮発性メモリ、410 キーボード、412 マウス、418 外部装置インターフェイス、450 ディスプレイ、500 表示装置、600 サーバ装置、700 ゲートウェイ、900 インターネット、Bn1,Bn5 OKボタン、Bn2 キャンセルボタン、Bn3 変数追加ボタン、Bn4 予約領域追加ボタン、Cmu 更新指令、Dg1,Dg2 ダイアログ、Eb1,Eb2 エディットボックス、Psc システムプログラム、Psp サポートプログラム、Pu1~Pu3,Pu11 ユーザプログラム、Ra 予約領域、Rb1,Rb2 ラジオボタン、SPa~SPc プログラム、Ss,structA 構造体、Str1 文字列、Us ユーザ、Vtb 変数テーブル、editable 特別変数、memberA,memberB,memberC 変数、reserve 配列変数。