JP2010157155A - プログラム作成支援方法、プログラム及びプログラム作成支援装置 - Google Patents

プログラム作成支援方法、プログラム及びプログラム作成支援装置 Download PDF

Info

Publication number
JP2010157155A
JP2010157155A JP2008335787A JP2008335787A JP2010157155A JP 2010157155 A JP2010157155 A JP 2010157155A JP 2008335787 A JP2008335787 A JP 2008335787A JP 2008335787 A JP2008335787 A JP 2008335787A JP 2010157155 A JP2010157155 A JP 2010157155A
Authority
JP
Japan
Prior art keywords
character string
program
block
instruction
creation support
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
Application number
JP2008335787A
Other languages
English (en)
Inventor
Hiroshi Arai
宏 荒井
Daisuke Igarashi
大輔 五十嵐
Ko Konrai
巧 紺頼
Kazuto Mikazuki
和人 三ヶ月
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2008335787A priority Critical patent/JP2010157155A/ja
Publication of JP2010157155A publication Critical patent/JP2010157155A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Numerical Control (AREA)

Abstract

【課題】プログラムを効率よく作成する。
【解決手段】プログラムを所定のブロックに分け、ブロック毎に命令文字列群であるブロック別文字列54と、所定の命令文字列である開始文字列と、終了文字列とを有するブロック別検索範囲53が記憶部50に格納されており、ロボット動作プログラム作成装置1が、処理の対象となっているブロック別文字列54において、ブロック別検索範囲の開始文字列と、終了文字列に挟まれた検索文字列を検出し、この検索文字列を強調表示して表示部14に表示させる。
【選択図】図1

Description

本発明は、プログラム作成支援方法、プログラム及びプログラム作成支援装置の技術に関する。
産業用ロボットはプログラムによって動作し、このプログラムにおけるプログラム文(以下、プログラムと記載する)は、ロボットを使用して姿勢を順次入力していくティーチング、もしくは、コンピュータソフトウェアを使用して姿勢を順次入力していくオフラインティーチングで作成される。
オフラインティーチングに用いるコンピュータソフトウェアには、テキストエディタや、ロボットシミュレータなどがある。テキストエディタは、文字列の挿入、追加、削除、移動、検索などの操作を機能として持つ。ロボットシミュレータは、ロボットの三次元形状と動作を記述してロボットの動きをコンピュータの画面に表示してシミュレーションするとともにプログラムに記述されている命令や命令で使用する変数名および数値データを挿入、追加、削除、移動、検索することが可能である。
テキストエディタは、安価で容易に入手可能であり、安価で低性能なコンピュータで動作する。しかし、テキストエディタは、一般の文字列を対象にしているため、プログラムに記述されている命令や変数名、数値データの編集をおこなうには使いにくい。さらに、テキストエディタは、修正結果を確認するためにプログラムを、ロボットへ転送して動作確認するか、ロボットシミュレータで読み込んで動作確認する必要がある。
また、ロボットシミュレータは、プログラムに記述されている命令や変数名、数値データの編集と編集結果を確認できるといった利点を持つ。しかし、ロボットシミュレータは、三次元形状の動作をシミュレーションするために高度で複雑な処理が必要であり、複雑な処理を高速に行うための高性能で高価なコンピュータが必要である。
従来、テキストエディタはロボットが設置されている現場でのプログラム修正や、プログラムをメインプログラムとサブプログラムで構成したときにサブプログラムと比較して単純に定型的な編集が可能なメインプログラムの作成や修正で利用されている。一方、ロボットシミュレータはロボットが設置されていない事務所でのプログラム修正や、メインプログラムと比較して複雑なサブプログラムの作成、修正に利用されている。
本明細書では比較的利用者が多いテキストエディタによる作業を対象にする。
最初にテキストエディタが対象にする、プログラムの命令や変数名、数値データについて図32を参照しながら説明する。
図32は、テキストエディタにおけるロボットを動作させるメインプログラムの一例を示す図である。当該メインプログラムは、ヘッダ部、命令部、数値部で構成される。
ヘッダ部には、“/PROG”命令で記述するプログラムの名称、“/ATTR”命令後に“COMMENT”命令で記述するコメント、“PROG_SIZE”命令で記述するプログラムサイズ、“DEFAULT_GROUP”命令で記述するデフォルトのグループ、“CONTROL_CODE”命令で記述する制御コードなどに代表される管理情報が記述されている。
命令部については、図33で後記する。
数値部には、命令部における位置レジスタ1603(図33)に対応した、ユーザ座標系の番号、ツール座標系の番号、回転方向や回転限界、X座標、Y座標、Z座標、W角度、P角度、R角度、J1角度、J2角度などの数値データが記述されている。
図33は、命令部の一例を示す図である。
命令部は、“R[番号]”で記述するレジスタ1601、定数1602、“P[番号]”で記述する位置レジスタ1603、レジスタに定数を代入する代入式1610、現在の位置から数値部で定義した位置レジスタ“P[20]”(符号1603)までレジスタ“R[20]”で指定した速度で移動する直線命令1604、“LBL[番号]”で記述するラベル1605、レジスタ“R[30]”が“0”のときに指定したラベル“LBL[39]”へ移動する条件付分岐1606、サブプログラム呼び出し1607、レジスタの値を加減乗除する計算式1608、“JMP”とラベル1605で記述する無条件分岐1609などの命令を有する。
図32、図33に記述したようなプログラムをテキストエディタで作成・修正するプログラム作成装置が、特許文献1に開示されている。特許文献1に記載の技術では、テキストエディタによるプログラムの編集作業の課題として、テキストエディタが命令文字列を解釈できないことに起因する作業上の不具合、テキストエディタを複数表示しても複数の画面で検索が必要であることに起因する作業上の不具合を解決する手段を示している。
この不具合を解決するために、特許文献1に記載の技術は、プログラムにおける命令データを表示する命令ウィンドウ、位置データを表示する位置ウィンドウ、速度データを表示する速度ウィンドウ、数値データの範囲を指定する動作範囲ウィンドウ、三次元表示したロボットの形状を表示するモデルウィンドウ、出力信号を表示する出力信号ウィンドウ、任意の検索文字列を指定する任意指定ウィンドウ、複数の検索文字列を指定する複合ウィンドウの各種ウィンドウを設けている。これにより、特許文献1に記載の技術は、プログラム編集作業の効率向上を図ること、数値データの指定間違いを防ぐこと、数値データを容易に検証できるようにすること、を開示している。また、特許文献1に記載の技術は、少なくとも1つの命令ウィンドウの命令位置を強調表示して、命令位置をわかりやすくすることを開示している。
特許第3435954号公報(第1頁〜第3頁、図27、図29、図30)
一般的に、プログラムを効率良く作成するため、既存プログラムを流用することがおこなわれる。このような流用が繰り返されると、プログラム内で修正しない部分、修正する部分が明確になってくるため、プログラムにおける修正箇所が限定され、この限定箇所のみを修正する作業を繰り返すことになる。
しかしながら、特許文献1に記載される技術に代表される従来技術では、ユーザは、修正すべき限定箇所を手書きのメモなどの方法で記録しておく必要がある。ユーザは、各ウィンドウを開き、メモに従って修正箇所を指示し、数値を変えていくといった手順を繰り返さねばならない。そのため、メモのし忘れ、メモからの修正箇所指示洩れにより、修正誤りが発生しやすい。これを無くすために、ユーザが何度も確認をおこなわねばならないことから、ユーザの負担が増加するという問題がある。
また、命令文字列の検索時に、修正した文字列を再度修正する場合には、検索文字列を修正後の文字列に、いちいち変えねばならないという問題がある。
さらに、従来技術では、同種の命令を複数強調表示する場合には、命令の種別毎に新しいウィンドウを表示するよう作成し直す必要があるためソフトウェア開発費用が発生する。
また、確認できるデータは、数値データのみであり、図33に示した命令部における、直線命令1604や条件付分岐1606、計算式1608で参照するレジスタ1601や位置レジスタ1603への数値未設定、メインプログラムとサブプログラムでのレジスタ番号の重複によるレジスタ1601の値書き換え、ラベル1605における番号の重複や未参照、条件付分岐1606で参照するラベルの未定義、サブプログラム呼び出し1607で参照するサブプログラム名を持つサブプログラムの存在状況などといった文字列については確認されない。
そのため、レジスタ1601、位置レジスタ1603の未定義や未参照、値の代入などの誤りなどが生じやすくなる。
レジスタ1601、位置レジスタ1603の未定義や未参照、値書き換えは、ロボットが動作しない、もしくは誤動作につながる。特に、ロボットの誤動作は予期せぬ動きになることがあり、好ましくない。また、ロボットの代わりにロボットシミュレータで動作検証したとしても、予想しない動作であるために移動距離が多くなったり、速度変化が大きくなったりすることが予想され、そのために計算時間が多大になるなどの不具合が生じる。
このような背景に鑑みて本発明がなされたのであり、本発明は、プログラムを効率よく作成することを目的とする。
前記課題を解決するため、本発明は、パラメータを含む命令文字列を複数有する命令文字列群が記述されるブロックが複数組み合わさって構成されるプログラムの作成を支援するプログラム作成支援装置によるプログラム作成支援方法であって、前記ブロックごとに記述される命令文字列群であるブロック別文字列と、所定の命令文字列である、少なくとも1つの第1の命令文字列と、が記憶部に格納されており、前記プログラム作成支援装置が、前記記憶部から読み込まれた第1の命令文字列と一致する第2の命令文字列を、前記ブロック別文字列から抽出し、前記抽出した第2の命令文字列に関連する文字列を強調表示して表示部に表示させる、ことを特徴とする。
その他の手段については、実施形態中にて後記する。
本発明によれば、プログラムを効率よく作成することができる。
次に、本発明を実施するための最良の形態(“実施形態”という)について、適宜図面を参照しながら詳細に説明する。なお、各実施形態を説明するための全図において、同一構成要素は原則として同一の符号を付し、その重複する説明を省略する。
《構成》
図1は、本実施形態に係るロボット動作プログラム作成装置1の構成例を示すブロック図である。
ロボット動作プログラム作成装置1(プログラム作成支援装置)は、通信部12、入力部13、表示部14、データ管理部11、ブロック読込部15、ブロック編集部16、プログラム作成部17、プログラム展開部18、表示制御部20、文字列処理部19、文字列検索部21、文字列置換部22、プログラム確認部23、表示処理部24および記憶部50を有している。
データ管理部11は、入力部13から入力したデータもしくは各部15〜24からの指示に従って、記憶部50からデータを読み取ったり、データを格納したり、通信部12へデータを転送したり、通信部12からデータを受け取ったり、各部15〜24を起動したり、データを受け渡したりするための指示や、データ制御を行う機能を有する。
なお各部15〜24の機能は、図3〜図31を参照して後記する。
記憶部50は、設備名称51、ブロック別テンプレート52、ブロック別検索範囲53、ブロック別文字列54、サブプログラム55、メインプログラム56および展開プログラム57を格納している。
ここで、記憶部50には、少なくとも1つのブロック別テンプレート52(“ブロック別テンプレート1”〜“ブロック別テンプレートN”)、ブロック別検索範囲53(“ブロック別検索範囲1”〜“ブロック別検索範囲N”)、ブロック別文字列54(“ブロック別文字列1”〜“ブロック別文字列N”)、サブプログラム55(“サブプログラム1”〜“サブプログラムM”)が格納されている。
設備名称51は、作成するメインプログラム56が利用される設備の名称に関する情報が記憶されている。
ブロック別テンプレート52は、メインプログラム文(以下、メインプログラム56と記載)の一部を構成する文字列である。ここで、ブロックとは、メインプログラム56を所定の範囲で分けた単位である。ブロックの設定は、ユーザが自由に行うことができる。
ブロック別検索範囲53は、ブロック毎に複数の検索範囲情報を有している。検索範囲情報は、2つの文字列からなる。ブロック別検索範囲53については、後記して説明する。また、ブロック別検索範囲53は、複数設定することが可能で、2つ以上設定した場合は、文字列検索部21が、これらのブロック別検索範囲53に該当する検索文字列を順番に検索することとなる。
ブロック別文字列54は、メインプログラム56の一部を構成する文字列である。ここで、ブロック別テンプレート52と、ブロック別文字列54の違いを説明する。ロボット動作プログラム作成装置1は、メインプログラム56の新規作成時にすべてのブロック別テンプレート52をコピーして、ブロック別文字列54を生成する。そして、ロボット動作プログラム作成装置1は、必要なブロック別文字列54を連結してメインプログラム56を生成する。次に、このメインプログラム56を編集したとき、ロボット動作プログラム作成装置1は、ブロック別文字列54のみを更新し、ブロック別テンプレート52はそのままにしておく。
サブプログラム55は、メインプログラム56中で呼び出されるプログラム文である。
メインプログラム56は、ロボット動作プログラム作成装置1において作成されるプログラム文である。
展開プログラム57は、メインプログラム56で呼び出されるサブプログラム55を、メインプログラム56中に展開したプログラムである。
各データ51〜55は、ユーザが予め作成しておくデータである。また、ブロック別テンプレート52とブロック別検索範囲53とはペアとなっていることが多いが、例えば編集の必要がないブロックではテンプレートのみとなっていることがある。
そして、記憶部50における各データ51〜55は、同じブロックに関するデータ同士が識別番号でひも付けられている。例えば、同じブロックに関係する各データ51〜55は、同じ識別番号を有するなどである。また、同じブロックに関係する各データ51〜55が、同じフォルダにまとめられる形で記憶部50に格納されてもよい。
図2は、本実施形態に係るロボット動作プログラム作成装置1のハードウェア構成例を示す図である。
ロボット動作プログラム作成装置1は、図1の入力部13に該当するキーボードや、マウスなどの入力装置72、図1の表示部14に該当するディスプレイなどの表示装置73、図1の通信部12に該当するNIC(Network Interface Card)などの通信装置74、CPU(Central Processing Unit)などの中央処理装置71、RAM(Random Access Memory)などのメモリ75、HDD(Hard Disk Drive)や、ROM(Read Only Memory)や、フラッシュメモリなどの記憶装置76などを有している。図1の各部15〜24は、記憶装置76に格納されているプログラム作成支援プログラム(プログラム)が、メモリ75に展開され中央処理装置71によって実行されることにより具現化する。
《処理》
次に、図1を参照しつつ、図3〜図31に沿って本実施形態に係るロボット動作プログラム作成装置1の動作について説明する。また、本実施形態において“選択入力する”とは、“入力部を介して選択入力する”ことを意味するものとする。なお、図3〜図31の処理において、すべてのデータはデータ管理部を経由して各部12〜24および記憶部50に送られるが、ここでは、この記載を省略する。また、画面データは、表示制御部20に送られて、表示部14に表示されるが、この記載も省略する。
(初期画面)
まず、図3を参照して、初期画面の表示について説明する。
図3は、本実施形態に係る初期画面の例を示す図であり、図4は、機能指示画面の遷移を示す図である。
プログラム作成支援プログラムが起動すると、表示処理部24が作業ウィンドウデータを作成し、表示処理部24が、この作業ウィンドウデータに基づく作業ウィンドウを表示部14に表示する。
作業ウィンドウ100は、タイトル領域101、メニュー領域102、サブウィンドウ領域103を有してなる。タイトル領域101には、作成されるメインプログラム56の名称が表示される。メニュー領域102には、ロボットプログラム作成装置が実行する機能の名称が表示される。メニュー領域102に表示される機能は、入力部13を介して、ユーザが実行した機能を選択入力すると当該機能が起動される。サブウィンドウ領域103は、各種情報を表示する領域である。
図3に示すように、メニュー領域102に“ファイル”、“編集”と示す機能名が表示されている場合において、例えば、入力部13を介して“ファイル”を選択入力すると、表示処理部24が、図4に示すプルダウンメニュー201を表示部14に表示する。
入力部13を介して、プルダウンメニュー201の“新規作成”、“開く”、“最近使ったファイル”、“終了”なる機能を示す項目が選択入力されることで、データ管理部11は、これらの機能を起動する。
ここで、“新規作成”が選択入力されると、表示処理部24は、サブウィンドウ領域103にメインプログラム新規作成画面202を表示する。
また、プルダウンメニュー201で“開く”が選択入力されると、表示処理部24は、メインプログラム56が格納されているファイルを開くためのダイアログ画面210を別ウィンドウで表示する。ダイアログ画面210は、メインプログラムファイル(以下、ファイルと記載)が格納されているフォルダの情報を表示するフォルダ表示領域211、当該フォルダに存在するファイル名を表示するファイル名表示領域212、ファイル名表示領域212で選択したファイル名や、入力部13を介して入力されたファイル名を表示する選択ファイル名表示領域213を有してなる。さらに、ダイアログ画面210は、メインプログラム56か、サブプログラム55かなどのファイルの種類を表示するファイル種別表示領域214、ファイルを開くための開くボタン215、ファイル選択操作をキャンセルするためのキャンセルボタン216を有している。
ダイアログ画面210が表示された後、ユーザは、ファイル名表示領域212に表示されているファイル名を選択入力するか、ファイル名を選択ファイル名表示領域213に入力し、“開く”を選択入力する。
そして、表示処理部24は、選択入力もしくは入力されたファイル名が示すメインプログラム56を記憶部50から読み込み、サブウィンドウ領域103に読み込んだメインプログラム56を表示するプログラム編集領域231を表示する。
なお、“最近使ったファイル”が選択入力されると、表示処理部24は、最近作成または更新したメインプログラム56が格納されているファイル名をファイル名表示領域212に表示する。このとき、ファイル名表示領域212に表示されるファイル名は、ファイルに付加されている更新日時情報をなどを基に、現在日時から所定の日数以内に更新されたファイルを表示する。以降は、“開く”が選択入力された場合と同様であるので説明を省略する。このように、ダイアログ画面210に最近使ったファイルのファイル名を表示指示することにより、以前に作成したメインプログラム56を呼び出して編集することができる。
(新規作成処理)
次に、ユーザが図4におけるプルダウンメニュー201で“新規作成”を選択入力した後の処理について図5〜図7を参照して説明する。
図4におけるプルダウンメニュー201において、“新規作成”が選択入力されると、表示処理部24が、メインプログラム新規作成領域202を表示する。次に図5に示すようにユーザが、メインプログラム新規作成領域202上でマウス(入力部13)の右ボタンを押下すると、表示処理部24は、プルダウンメニュー301を表示する。
プルダウンメニュー301には、メインプログラム56を作成するために必要な機能が表示されている。図5では、その機能の一例として、“設備選択”、“ワーク指定”、“デフォルト”、“編集”、“サブプログラム確認”、“レジスタ確認”、“ラベル確認”が表示されている。
入力部13を介して、プルダウンメニュー301の“設備選択”が選択入力されると、表示処理部24は、設備名称の一覧が記述されているプルダウンメニュー302を表示する。ユーザは、プルダウンメニュー302に表示されている設備名称一覧の中から、これから作成されるメインプログラム56が利用される設備を選択入力する。
ここで、設備とは、ロボット、溶射装置、製品を載置するテーブルからなる装置であり、ロボット、溶射装置、テーブルが変化するとメインプログラム56の命令文字列を変更する必要があるため、本実施形態では、記憶部50に設備毎のブロック別テンプレート52、ブロック別検索範囲53を予め記憶しておき、プルダウンメニュー302で選択入力した設備名称に該当するブロック別テンプレート52、ブロック別検索範囲53から読み出す構成としている。つまり、本実施形態におけるブロック別テンプレート52や、ブロック別検索範囲53などには、予め設備の情報が付されているものとする。
次に、プルダウンメニュー301の“ワーク指定”が選択入力されると、表示処理部24は、ワーク名称の一覧が表示されたプルダウンメニュー303を表示する。ユーザは、プルダウンメニュー303に表示されたワーク一覧の中から、これから作成されるメインプログラム56が利用されるワーク名称を選択入力する。ワークとは、例えば、設備にセットする溶射対象物で、ワークが変化するとメインプログラム56の命令文字列が変化するため、記憶部50にワーク毎のブロック別テンプレート52、ブロック別検索範囲53を記憶しておき、プルダウンメニュー303で選択入力したワーク名称に該当するブロック別テンプレート52、ブロック別検索範囲53を読み出す構成としている。つまり、本実施形態におけるブロック別テンプレート52や、ブロック別検索範囲53などには、予めワークの情報が付されているものとする。
本実施形態では、ブロック別テンプレート52およびブロック別検索範囲53は、設備・ワーク毎に予め用意しておくこととする。つまり、図5では、設備A用・ワークA用のブロック別テンプレート311(“ブロック別テンプレート1”〜“ブロック別テンプレートN”)、設備B用・ワークA用のブロック別テンプレート312(“ブロック別テンプレート1”〜“ブロック別テンプレートN”)、設備C用・ワークA用のブロック別テンプレート313(“ブロック別テンプレート1”〜“ブロック別テンプレートN”)が記載されているが、さらに、設備A用・ワークB用、設備B用・ワークB用のブロック別テンプレートなどが記憶部50に格納されていてもよい。
同様に、図5では、設備A用・ワークA用のブロック別検索範囲321(“ブロック別検索範囲1”〜“ブロック別検索範囲N”)、設備B用・ワークA用のブロック別検索範囲322(“ブロック別検索範囲1”〜“ブロック別検索範囲N”)、設備C用・ワークA用のブロック別検索範囲323(“ブロック別検索範囲1”〜“ブロック別検索範囲N”)が記載されているが、さらに、設備A用・ワークB用、設備B用・ワークB用のブロック別検索範囲などが記憶部50に格納されていてもよい。
例えば、ユーザがプルダウンメニュー302で“設備A”を選択入力し、プルダウンメニュー303で“ワークA”を選択入力すると、プログラム作成部17は、ブロック別テンプレート52から、設備A用で、かつ、ワークA用のブロック別テンプレート311を取得できる構成としている。同様に、ユーザがプルダウンメニュー302で“設備A”を選択入力し、プルダウンメニュー303で“ワークA”を選択入力すると、文字列検索部21などは、ブロック別検索範囲53から、設備A用で、かつ、ワークA用のブロック検索範囲321を取得できる構成としている。
なお、設備選択およびワーク指定で選択された設備名およびワーク名は、表示処理部24によって記憶部50に記憶される。
図5における設備選択およびワーク選択の終了後、ユーザが、マウス(入力部13)の右ボタンを押下すると、表示処理部24は、メインプログラム新規作成領域202上で、再度プルダウンメニュー301を表示する。
次に、ユーザが、当該プルダウンメニュー301の項目から“デフォルト”を選択入力すると、プログラム作成部17はメインプログラム作成処理を行う。
メインプログラム作成処理を、図5、図6の画面例および図7のフローチャートを参照して説明する。
プルダウンメニュー301の項目から“デフォルト”が選択入力されると、プログラム作成部17は、設備選択およびワーク指定時に記憶部50に記憶しておいた設備名、ワーク名を読みこむ(S101)。本実施形態では、説明を具体的にするため、選択した設備名を“設備A”、選択したワーク名を“ワークA”とした例で説明する。
次に、プログラム作成部17は、図5に示すように、設備A用で、かつ、ワークA用の対応するブロック別文字列331を、設備A用で、かつ、ワークA用のテンプレート情報311をコピーすることによって生成する(S102)。
なお、設備選択およびワーク選択がなされていないときに、“デフォルト”が選択入力された場合、プログラム作成部17は、予め設定しておいた設備名、ワーク名を使用する。
次に、プログラム作成部17は、図6に示すように、読み出したブロック別文字列331(“ブロック別文字列1”〜“ブロック別文字列N”)を連結して(S103)メインプログラム56を作成する。表示処理部24は、作成したメインプログラム56をメインプログラム新規作成領域202に表示する(S104)。
このように、あらかじめ設定したブロック別テンプレート52から生成したブロック別文字列54を読み出して、これを連結してメインプログラム56を作成することから、メインプログラム56の命令を間違えて記載することを防止することができる。
(プログラム編集方法)
次に、メインプログラム編集処理について、図8〜図31を参照して説明する。なお、以下の処理において選択されている設備は“設備A”であり、ワークは“ワークA”であるとする。なお、以降の処理において用いられるブロック別文字列54、ブロック別検索範囲53は、設備A用・ワークA用のブロック別文字列331、ブロック別検索範囲321であるとする。
まず、図8および図9を参照して、編集に用いるプルダウンメニュー501の表示に関する処理を説明する。
図4で説明したファイルを開く処理や、メインプログラム56の新規作成処理の後などで、メインプログラム編集領域231にメインプログラム56が表示されている状態で、ユーザが、マウス(入力部13)の右ボタンを押下する(S201)と、表示処理部24は、プルダウンメニュー301を表示する(S202)。ここで、ユーザがプルダウンメニュー301における“編集”を選択入力する(S203)と、表示処理部24は、メインプログラム56を構成しているブロックを示すプルダウンメニュー501を表示する(S204)。
次に、図8と図10を参照して、編集画面510の表示に関する処理を説明する。
プルダウンメニュー501は、ブロック毎のメインプログラム56の編集で使用するブロックの選択をおこなうために用意している。ブロック別に編集をおこなうと、編集するプログラムが短くなるので間違いに気づきやすくなるとともに、当該ブロック以外は検索しないので修正位置がわかりやすくなるためである。
プルダウンメニュー501が表示された状態で、ユーザがプルダウンメニュー501から、所定のブロック(ここでは、“ブロック001”)を選択入力すると、文字列検索部21が、該当するブロック別文字列331から“ブロック001”に該当する”ブロック別文字列1”を記憶部50から読み込む(S301)。続いて、文字列検索部21は、ブロック別検索範囲321から“ブロック001”に該当する“ブロック別検索範囲1”を読み込み(S302)、表示処理部24が、“ブロック001”の編集画面510を表示する(S303)。
“ブロック001”の編集画面510は、メインプログラム56における“ブロック001”の文字列を表示する文字列表示領域511、編集箇所選択ボタン、編集完了を指示するためのOKボタン、編集をキャンセルするためのキャンセルボタンを有している。なお、文字列表示領域511に表示される文字列は、ブロック001対応領域521に表示されている文字列と一致しているものとする。
メインプログラム編集領域231が表示されると、表示処理部24は、メインプログラム56を構成する文字列の内、“ブロック001”に該当する文字列を強調表示する(S304:図8の符号521)。強調表示は、編集中のメインプログラム56の位置をわかりやすくするためにおこなうもので、色替え、太文字、背景色変更などの方法が考えられる。なお、強調表示の具体的な手順は以下の通りである。メインプログラム56を作成したときに、構成しているブロックと、その範囲に関する情報が属性としてメインプログラム56のファイルに付加される。表示処理部24は、この属性情報を読み込んで強調表示を行う。
次に、ブロックにおける文字列の編集処理を、図11、図12を参照して説明する。
“ブロック001”の編集画面510が表示された後、ユーザが、編集箇所選択ボタンを選択入力する(S401)と、文字列検索部21は“ブロック別文字列1”中において、検索範囲情報601に記述されている開始文字列、終了文字列を取得する(S402)。ここで、ブロック別検索範囲53の構成を説明すると、各ブロック別検索範囲53(例えば、“ブロック別検索範囲1”)には、少なくとも1つの検索範囲情報601,602が格納されている。各検索範囲情報は、開始文字列(開始:***で表現)、終了文字列(終了:***)がペアとなって格納されている。ステップS402において、文字列検索部21は、最初に検索範囲情報601に記載されている開始文字列(“UFRAME_NUM=”)と、終了文字列(“;”)を取得する。
つまり、“ブロック別文字列1”の文字列が文字列表示領域511に表示された後、文字列検索部21が、文字列表示領域511に表示されている検索範囲情報601の開始文字列と、終了文字列を検索する(S403)。その結果が、図11右側の符号611と符号612である。
そして、文字列検索部21は、抽出した開始文字列と終了文字列に挟まれる検索文字列を取得する(S404)。表示処理部24は、検索文字列を強調表示(S405)する。この結果が、図11右側の符号613である。
ステップS404の終了後、キーボードなどの入力部13から、検索文字列を置換するための新しい文字列が入力されると、文字列置換部22は、強調表示している検索文字列を入力された文字列で置換し(S406)、表示処理部24は、置換した文字列を強調表示する(S407)。そして、文字列置換部22は、該当するブロック別文字列54(ここでは、“ブロック別文字列1”)における検索文字列に該当する文字列を入力文字列で置換して、ブロック別文字列54を更新する(S408)。
なお、ステップS404の終了後、入力部13から新しい文字列が入力されない場合、他の入力がなされるまで、表示処理部24は、文字列613が強調表示された状態のままとする。
検索範囲情報601を使用した文字列検索、または置換が終了した状態で、編集箇所選択ボタンを再度選択入力すると、文字列検索部21は、検索範囲情報602を用いたステップS401〜S408の処理を“ブロック別文字列1”に対して行う。この結果、検索された開始文字列と終了文字列が、図11右側の符号621と符号622であり、開始文字列と、終了文字列とで挟まれ、強調表示された検索文字列が符号623である。
さらに、この状態で、編集箇所選択ボタンを再々度選択入力されると、文字列検索部21は、検索範囲情報601を用いたステップS401〜S408の処理を“ブロック別文字列1”に対して行う。
このように、編集箇所選択ボタンが選択入力される毎に、検索範囲情報601→検索範囲情報602→検索範囲情報601→検索範囲情報602→・・・のように、サイクリックに検索範囲情報が選択される。
なお、検索範囲情報が3つ以上の場合でも、検索範囲情報601→検索範囲情報602→・・・→検索範囲情報601→検索範囲情報602→・・・のように、サイクリックに検索範囲情報が選択される。
このとき、“ブロック別文字列1”の文字列が新しい文字列で置換されていても、検索範囲601,602に格納された文字列が変化しないので、文字列の置換後においても、同じ命令文に関連する文字列を容易に検索することができる。
また、1回目の検索、2回目の検索、1回目の検索、・・・を繰り返すので、あらかじめ設定した検索範囲のみを修正することが可能となり、編集箇所を間違えることがない。
図12の処理が終了した状態で、編集画面510のOKボタンが選択入力されると、文字列置換部22がメインプログラム56における“ブロック別文字列1”における文字列を、置換した文字列で置き換え、表示処理部24が、編集画面510を閉じる。
また、編集画面510のキャンセルボタンが選択入力された場合、文字列置換部22がメインプログラム56における文字列を変更することなく、表示処理部24は編集画面510を閉じる。
次に図13と図16を参照して、“ブロック002”の編集手順を説明する。
プルダウンメニュー501が表示された状態で、このプルダウンメニュー501から“ブロック002”が選択入力されると、文字列検索部21は、ブロック別文字列331から“ブロック002”に該当する“ブロック別文字列2”を読み込み(S501)、さらに、文字列検索部21は、ブロック別検索範囲321から“ブロック002”に該当する“ブロック別検索範囲2”を読み込む(S502)。そして、表示処理部24が、“ブロック002”の編集画面700を表示部14に表示する(S503)。そして、表示処理部24は、メインプログラム編集領域231に表示されているメインプログラム56のうち、“ブロック002”に相当する部分(符号711)を強調表示する(S504)。
編集画面700は、“ブロック002”におけるメインプログラム56の文字列を表示する文字列表示領域721、レジスタ・CALL文ボタン、編集ボタン、CALL文を含む行ボタン、追加ボタン、削除ボタン、関連ブロック確認ボタン、編集完了を指示するためのOKボタン、編集をキャンセルするためのキャンセルボタンを有する。
編集画面700が表示されると、表示処理部24は、メインプログラム編集領域231中のメインプログラム56の文字列の内、“ブロック002”に該当する文字列を強調表示する(符号711:S504)。強調表示は、編集中のメインプログラム56の位置をわかりやすくするためにおこなうもので、色替えや、太文字や、背景色変更などの強調方法を用いてもよい。
ここで、図13に示す編集画面700と、図8に示す編集画面510の違いについて説明する。
編集画面510と、編集画面700とは、どちらもメインプログラム56におけるブロックの文字列を編集するための画面であるが、編集画面510は、ブロック中に同一の検索文字が1つしか検索されないときに表示される画面であり、編集画面700は、ブロック中に同一の検索文字が複数検出されるときに表示される画面である。編集画面510が表示されるか、編集画面700が表示されるかは、例えば、“ブロック001”では編集画面510を表示し、“ブロック002”では編集画面700を表示するなどのようにユーザによって予め設定されている。設定情報は、ブロック別テンプレート52に格納されていてもよいし、検索範囲情報に格納されていてもよい。また、文字列検索部21が、検索範囲情報の開始文字列と、終了文字列とを用いて検索文字列を抽出した際、検索文字列の個数によって表示処理部24が、編集画面510を表示するか、編集画面700を表示するかを決定してもよい。
次に図14、図15および図17を参照して、“ブロック002”の編集手順を説明する。
図14に示すように、“ブロック002”の編集画面700が表示された後、レジスタ・CALL文ボタンが選択入力される(S601)と、文字列検索部21は、図16のステップS501で取得した“ブロック別文字列2”を“ブロック別検索範囲2”に格納されている検索範囲情報811の文字列で検索し(S602)、文字列検索部21は、“ブロック別文字列2”における開始文字列,終了文字列の位置情報(位置)を取得する(S603)。次に、文字列検索部21は、開始文字列と終了文字列で挟まれている検索文字列を取得する(S604)。検索文字列の位置情報が取得された後、表示処理部24は、検索文字列を色変えなどで強調表示(S605)し、処理を終了する。
つまり、“ブロック別文字列2”の文字列が文字列表示領域721に表示された後、文字列検索部21が、文字列表示領域721に表示されている検索範囲情報811の開始文字列と、終了文字列を検索する。その結果が、図15(a)における符号901と符号902であり、ステップS605で強調表示される検索文字列が符号903である。
ステップS605が終了した状態で、編集画面700におけるレジスタ・CALL文ボタンが再度選択入力されると、文字列検索部21は、図14における検索範囲情報812を用いたステップS601〜S606の処理を“ブロック別文字列2”に対して行う。この結果が、図15(a)における符号911と符号912であり、これらの文字列に挟まれる検索文字列が、符号913である。
さらに、この状態で、レジスタ・CALL文ボタンが再度選択入力されると、文字列検索部21は、再び検索範囲情報811を用いたステップS601〜S606の処理を“ブロック別検索文字列2”に対して行う。
つまり、レジスタ・CALL文ボタンが選択入力される毎に、検索範囲情報811→検索範囲情報812→検索範囲情報811→検索範囲情報812→・・・のように、サイクリックに検索範囲情報が選択される。
なお、検索範囲情報が3つ以上の場合でも、検索範囲情報811→検索範囲情報812→・・・→検索範囲情報811→検索範囲情報812→・・・のように、サイクリックに検索範囲情報が選択される。このようにすることで、あらかじめ設定した検索範囲のみを修正することが可能となり、ユーザが、レジスタ・CALL文の編集箇所を間違えることを減らすことができる。
このとき、“ブロック別文字列2”の文字列が新しい文字列で置き換えられていても、検索範囲811,812に記述されている文字列が変化しないので、置換後においても、同じ命令文に関連する文字列を容易に検索することができる。
なお、図14の検索範囲情報813および図15(b)については後記して説明する。
(置換処理)
次に、“ブロック002”における置換処理を図18、図19A、図19Bを参照して説明する。
図17の処理がが終了し、図18の検索文字列1001が強調表示された状態で、編集ボタンが選択入力される(図19AのS701)と、表示処理部24は、図18に示す置換ダイアログ1010を表示する(S702)。
そして、表示処理部24は、編集画面700の文字列表示領域721において強調表示されている文字列1001を抽出して、この文字列を置換ダイアログ1010の検索文字列表示領域1015に表示する(S703)。
置換ダイアログ1010は、前記したようにブロック別文字列54の中に検索文字列が複数存在する場合に表示されるものであり、検索文字列表示領域1015、置換文字列表示領域1016、次を検索ボタン、置換して次にボタン、すべて置換ボタン、キャンセルボタンを有してなる。
次に、文字列置換部22が、キーボードなどの入力部13から置換文字列表示領域1016に文字列(置換文字)が入力されたか否かを判定する(S704)。
ステップS704の結果、入力されていない場合(S704→No)、ユーザは、置換文字列表示領域に文字列を入力し(S705)、ステップS704へ処理を戻す。
ステップS704の結果、入力されている場合(S704→Yes)、図19Bの説明に移り、置換処理部が次を検索ボタンが選択入力されたか否か(“次を選択”?)を判定する(S706)。
ステップS706の結果、次を検索ボタンが選択入力された場合(S706→Yes)、文字列置換部22は、ステップS709の処理へ進み、置換を行わずに、現在処理している文字列(図18の符号1001)に関して、次の検索を行い、この文字列を強調表示し、図19AのステップS704へ処理を戻す。
ステップS706で、次を検索ボタンが選択入力されていない場合(S706→No)、文字列置換部22は、置換ダイアログ1010の、置換して次にボタンが選択入力されたか否か(“置換して次に”?)を判定する(S707)。
ステップS707の結果、置換して次にボタンが選択入力された場合(S707→Yes)、文字列置換部22は、文字列表示領域721で強調表示されている文字列1001を置換文字表示領域1016に表示されている文字列で置換する(S708)。
そして、文字列置換部22は、処理対象のブロック別文字列54(“ブロック別文字列2”)中において、現在処理している文字列(図18の符号1001)に関する、次の検索を行い、表示処理部24が、この文字列を強調表示し(S709)、図19AのステップS704へ処理を戻す。
ステップS709において、次の検索文字が見つからないときは、そのままとするか、表示処理部24が、検索文字が無い旨のメッセージを表示してユーザに知らせる。
ステップS707で、置換して次にボタンが選択入力されていない場合(S707→No)、文字列置換部22は、すべて置換ボタンが選択入力されたか否か(“すべて置換”?)を判定する(S710)。
ステップS710の結果、すべて置換ボタンが選択入力された場合(S710→Yes)、文字列表示領域721で強調表示されている文字列1001を置換文字表示領域1016に表示されている文字列で置換する(S711)。
次に、文字列置換部22は、処理対象となっている文字列1001と同じ文字列が、現在処理中の行から下の行に存在するか否かを判定することによって、次の検索文字列があるか否かを判定する(S712)。
ステップS712の結果、次の検索文字列がない場合(S712→No)、文字列置換部22は、図19AのステップS704へ処理を戻し、次の検索範囲情報から検索される文字列1002を、置換ダイアログ1010aの検索文字列表示領域1015aに表示し、置換文字列表示領域1016aに入力部13から入力された文字列を表示している置換ダイアログ1010aを表示部14に表示し、ステップS704以降の処理を繰り返す。
ステップS712の結果、次の検索文字列がある場合(S712→Yes),文字列検索部21は、処理対象となっている文字列と同一の次の検索文字列を抽出し、強調表示し(S713)、ステップS711の処理へ戻って、抽出した文字列に対しステップS711,S712の処理を行う。
ステップS711〜S713を繰り返すことにより、“ブロック別検索文字列2”において検索文字1010に該当するすべての文字列を置換文字表示領域1016に表示されている文字で置換する。
ステップS710の結果、すべて置換ボタンが選択入力されていないとき、文字列置換部22は、キャンセルボタンが選択入力されたか否か(“キャンセル”?)を判定する(S714)。
ステップS714の結果、キャンセルボタンが選択入力されていない場合(S714→No)、文字列置換部22は、図19AのステップS704へ処理を戻す。
ステップS714の結果、キャンセルボタンが選択入力された場合(S714→Yes)、表示処理部24は、置換ダイアログ1010を閉じて処理を終了する。
なお、“ブロック002”の検索文字列の置換処理は、図18、図19A、図19Bに示したように、置換ダイアログ1010を使用することに限らず、“ブロック001”のように、直接、入力文字で置換していってもよい。
このような置換ダイアログは、オブジェクト指向のプログラミング言語で簡単に作成することができるが、検索文字表示領域1015に表示される検索文字列を利用者が設定しなければならなかったため、利用者が、この検索文字列を間違えることによる検索ミスが生じることがある。本実施形態では、図17の処理で検索した文字列を検索文字列として、自動で設定・表示するので、このような検索ミスが発生しない。
次に、編集画面700における、CALL文を含む行ボタンが選択入力されたときの処理を、図14、図15(b)および図21を参照して説明する。
図14に示すように、“ブロック002”の編集画面700が表示された状態で、CALL文を含む行ボタンが選択入力される(S801)と、文字列検索部21は、“ブロック別文字列2”を検索範囲情報813に記述されている開始文字列および終了文字列で検索し(S802)、この開始文字列、終了文字列の位置情報(位置)を取得する(S803)。なお、“CALL文を含む行ボタン”が選択入力されたときに参照される検索範囲情報813は、開始文字列(開始:***で示される文字列)が“;”で、終了文字列(終了:***で示される文字列)が“R[”となっている検索範囲情報である。このとき、検索される文字列は、図15(b)に示す符号921,922である。
なお、レジスタ、CALL文ボタンが選択入力されたときに使用される検索範囲情報であるか、“CALL文を含む行”ボタンが選択入力されたときに使用される検索範囲情報であるか、は予めユーザによって各検索範囲情報に設定されている情報である。
次に、文字列検索部21は、開始文字列と終了文字列に挟まれる検索文字列を取得する(S804)。そして、文字列検索部21は、ステップS804で取得した文字列の中に“CALL”の文字列が連続して出現するか否かを判定する。
判定の結果、出現しない場合、文字列検索部21は、処理を終了する。
判定の結果、出現する場合、表示処理部24は、ステップS804で取得した検索文字列を色替えなどで強調表示する(S805)。ステップS805の段階における表示状態が図15(b)における符号923である。
(CALL文を含む行の追加・削除)
次に、CALL文を含む行(CALL文含有行)の追加処理を、図20および図22を参照して説明する。
図21のステップS805が終了した状態で、図20に示すように編集画面700の追加ボタンが選択入力される(S901)と、文字列処理部19は、文字列表示領域721で強調表示している検索文字列1101の下の行の位置情報(位置)を取得する(S902)。次に、文字列処理部19は、位置情報に該当する行に強調表示した文字列1101を複写・挿入する(S903)。ステップS903の段階での表示状態が、図20右側の符号1102である。このように、CALL文を含む行(サブプログラム55の呼出行)の複写・追加が可能となる。
次に、CALL文を含む行(CALL文含有行)の削除処理を、図20および図23を参照して説明する。
図20に示す編集画面700における削除ボタンが選択入力された場合(S1001)、表示部14において強調表示された文字列1101が削除(S1002)され、1つ手前の文字列1103(文字列1101の上に表示されていた文字列)が強調表示される(S1003)。
このように、レジスタや、CALL文を検索したり、CALL文を含む行を検索するなど、検索文字列の範囲を変化させることで、定型的な行複写操作を効率良くおこなうことができる。
次に、他ブロックにおけるレジスタ修正処理の説明を図24を参照して説明する。
図24の処理は、レジスタはメインプログラム56、およびメインプログラム56で呼び出されるサブプログラム55において共通である必要があるため、前記した手順によってレジスタの検索・置換などの修正が行われた際に、メインプログラム56全体にわたってレジスタの値を修正するための処理である。
図11〜図19Bに示す処理で、レジスタの検索・置換が行われた際に、文字列処理部19は、レジスタの命令文字列と、置換前と置換後のレジスタの値を記憶部50に一時的に記憶させておく。
そして、図14に示す編集画面700における関連ブロック確認ボタンが選択入力されると、文字列処理部19は、他のブロック別文字列54を検索し(S1101)、当該他のブロック内に、記憶しておいたレジスタの命令文字列および置換前の値に一致する文字列があるか否かを判定する(S1102)。
ステップS1102の結果、一致する文字列がない場合(S1102→No)、文字列処理部19は、処理を終了する。
ステップS1102の結果、一致する文字列がある場合(S1102→Yes)、文字列処理部19は、当該他のブロックにおける編集画面を表示(S1103)する。ステップS1103で表示される編集画面は、図11の編集画面510や、図13の編集画面700などである。そして、文字列処理部19は、当該他のブロックのレジスタの値を、記憶しておいた置換後の値に変更することで、処理の対象となっている他のブロックのレジスタ修正(S1104)をおこなった後、処理を終了する。文字列検索部21は、ステップS1101〜S1104の処理をすべてのブロック別文字列54に対して行う。
図14に示す編集画面700におけるOKボタンが押下された場合、表示処理部24は、編集画面700を閉じて、“ブロック002”の編集操作を終了し、文字列置換部22が、メインプログラム編集領域231におけるメインプログラム56中の文字列を置換すると同時に、記憶部50におけるメインプログラム56の文字列も置換し、メインプログラム編集領域231に戻る。
編集画面700におけるキャンセルボタンが押下された場合、表示処理部24は編集画面700を閉じて、“ブロック002”の編集操作を終了し、メインプログラム編集領域231の文字列を置換せずに(つまり、メインプログラム56を変更せずに)、メインプログラム編集領域231に戻る。
なお、使用するブロックは、設備およびワーク毎に異なっていることが多い。本実施形態では、図25に示すように、編集ボタンを選択入力したときに表示するプルダウンメニュー303の項目が、図5で選択された“設備選択”および“ワーク選択”により変化する構成になっている。つまり、“設備選択”および“ワーク選択”で選択された設備およびワーク毎に異なるブロック構成が項目として表示される。例えば、“設備A”で“ワークA”であれば、“ブロック001”〜“ブロック010”が予め設定されて、表示される(符号1201)。また、“設備A”で“ワークB”であれば、“ブロック001”〜“ブロック004”、“ブロック006”〜“ブロック008”、“ブロック010” が予め設定され、表示される(符号1202)。これにより、メインプログラム56を作成する場合に、その都度、ブロックの構成を確認することなく、設備およびワーク毎に異なる命令を間違えて作成することがない。
(メインプログラム確認処理)
次に作成したメインプログラム56の確認処理を図26〜図31を用いて説明する。
(サブプログラム確認処理)
最初にサブプログラム確認処理について図25、図26、図27を用いて説明する。
メインプログラム編集領域231にメインプログラム56が表示された状態で、マウスの右ボタンが押下(S1201)されると、表示処理部24は、図5に示すようなプルダウンメニュー301を表示する(S1202)。プルダウンメニュー301に表示されている“サブプログラム確認”が選択入力される(S1203)と、文字列検索部21は、記憶部50に記憶されているメインプログラム56を読み込み(S1204)、読み込んだメインプログラム56から文字列“CALL”と文字“;”で挟まれているサブプログラム名を順番に抽出する(S1205)。
次に、プログラム展開部18は、抽出したサブプログラム名をキーとして、記憶部50において該当するサブプログラム55があるか否かを判定する(ステップS1206)。
判定の結果、サブプログラム55が記憶部50にない場合(ステップS1206→No)、プログラム展開部18は、記憶部50のメインプログラム56のCALL文の後ろに存在しない旨を判別するための文字列(“サブプログラム無し”)を挿入し(S1207)、ステップS1210へ処理を進める。
サブプログラム55がない場合、ユーザは、ロボットからローディングするか、サブプログラム55を作成したフォルダを探し、記憶部50に格納する。または、サブプログラム名が誤っているかを調べ、誤っている場合はサブプログラム名を修正する。サブプログラム55が未作成であれば、ロボットによるティーチングまたはロボットシミュレータによるオフラインティーチングで該当するサブプログラム55を作成する。
判定の結果、該当するサブプログラム55がある場合(S1206→Yes)、プログラム展開部18は、記憶部50から該当するサブプログラム55を、すべて読み込み(S1208)、記憶部50のメインプログラム56のCALL文の行に、該当するサブプログラム55を挿入する(S1209)ことで、展開プログラム57を作成し、作成した展開プログラム57を記憶部50に保存する。そして、表示処理部24は、作成した展開プログラム57をメインプログラム編集領域231に表示(S1210)し、サブプログラム確認を終了する。
図27は、ステップS1205の段階における表示画面例であり、メインプログラム編集領域231上のメインプログラム56のCALL文(サブプログラム55呼出文)1301,1302が強調表示されている。この後、この符号1301,1302がサブプログラム55の文で置き換わるか、“サブプログラム無し”の情報で置き換わるかする。
このように、サブプログラム55がない場合、その旨の表示を行うので、メインプログラム56で使用するサブプログラム名を確認することができるので、サブプログラム名の指定誤りをすることがない。また、ユーザは、展開プログラム57を確認することができ、処理の流れを確認することができる。
(レジスタ確認処理)
次に、レジスタ確認処理について図25、図28A、図28B、図29を用いて説明する。
メインプログラム編集領域231にメインプログラム56が表示された状態で、ユーザが、マウスの右ボタンを押下すると(図28AのS1301)、表示処理部24は、図25に示すようなプルダウンメニュー301を表示する(S1302)。プルダウンメニュー301の“レジスタ確認”が選択入力される(S1303)と、文字列検索部21が、記憶部50に記憶されている展開プログラム57を読み込み(S1304)、読み込んだ展開プログラム57において文字列“R[”と、文字列“]”とで挟まれているレジスタ名を示す文字列を上から順番に1つ抽出する(S1305)。なお、展開プログラム57がない場合、表示処理部24が展開プログラム57の作成を促す表示を行い、処理を終了する。
ここで、抽出したレジスタを“レジスタA”とすると、プログラム確認部23は、抽出した“レジスタA”が数値を代入するレジスタ(数値定義)であるか、別のレジスタを参照するレジスタ(参照)であるかを調べる(S1306)。数値定義のレジスタであるか、参照のレジスタであるかは、該当するレジスタの後ろが“=[数値]”となっているか否かで判定することができる。すなわち、レジスタの後ろに“=[数値]”があるときは数値定義のレジスタであり、ない場合は参照のレジスタである。そして、プログラム確認部23は、“レジスタA”が存在する行より前の行で“レジスタA”が出現するか判定する(図19BのS1307)。例えば、“R[112]”が図28AのステップS1305で抽出したレジスタ名である場合、展開プログラム57で現在“R[112]”がある行から前の行に“R[112]”が出現するか否かを判定する。
判定の結果、レジスタが出現しない場合(S1307→No)、この“レジスタA”が数値定義のレジスタ(A:数値定義)であるか否かを判定する(S1308)。数値定義のレジスタであるか否かは、前記した方法で判定される。
判定の結果、数値定義のレジスタではない場合(S1308→No)、このレジスタは参照されているが、数値定義がなされていないので、プログラム確認部23は、“レジスタA”が未定義である旨の情報をレジスタ確認結果として記憶部50に記憶し(A:未定義:S1309)、ステップS1316へ処理を進める。
判定の結果、数値定義のレジスタである場合(S1308→Yes)、このレジスタは、最初のレジスタであり、かつ数値定義がなされているので、プログラム確認部23は、“レジスタA”が正常である旨の情報をレジスタ確認結果として記憶部50に記憶し(A:正常:S1315)、プログラム確認部23は、ステップS1316へ処理を進める。
ステップS1307の結果、レジスタが出現する場合(S1307→Yes)、検出したレジスタを“レジスタB”とすると、プログラム確認部23は、この“レジスタB”が数値定義のレジスタ(数値定義)か、参照のレジスタ(参照)かを調べる(S1310)。
次に、プログラム確認部23は、“レジスタA”が数値定義のレジスタであり、かつ“レジスタB”が参照のレジスタであるか(A:数値定義,B:参照)を判定する(S1311)。
ステップS1311の結果、“レジスタA”が数値定義のレジスタであり、かつ“レジスタB”が参照のレジスタである場合(S1311→Yes)、レジスタが数値定義する前に参照されているので、プログラム確認部23は、“レジスタB”が未定義である旨の情報をレジスタ確認結果として記憶部50に記憶し(B:未定義:S1312)、プログラム確認部23は、ステップS1316へ処理を進める。
ステップS1311の結果、“レジスタA”が数値定義のレジスタでないか、“レジスタB”が参照のレジスタでない場合(S1311→No)、プログラム確認部23は、“レジスタA”が数値定義のレジスタであり、かつ“レジスタB”も数値定義のレジスタであるか(A:数値定義,B:数値定義)を判定する(S1313)。
ステップS1313の結果、“レジスタA”が数値定義のレジスタであり、かつ“レジスタB”も数値定義のレジスタである場合(S1313→Yes)、レジスタに対し二重に数値が代入されている(二重定義)ので、プログラム確認部23は、“レジスタA”が二重定義である旨の情報をレジスタ確認結果として記憶部50に記憶し(A:二重定義:S1314)、プログラム確認部23は、ステップS1316へ処理を進める。
ステップS1313の結果、“レジスタA”が数値定義のレジスタでないか、“レジスタB”が数値定義のレジスタでない場合(S1313→No)、レジスタが数値定義された後に参照されているので、プログラム確認部23は、“レジスタA”は正常である旨の情報をレジスタ確認結果として記憶部50に記憶し(A:正常:S1315)、プログラム確認部23は、ステップS1316へ処理を進める。
ステップS1309、ステップS1312、ステップS1314またはステップS1315の処理の終了後、プログラム確認部23は、記憶部50のメインプログラム56中の該当するレジスタ(“レジスタA”または“レジスタB”)行の後ろにレジスタ確認結果を書き込む。そして、表示処理部24が、書き込んだレジスタ確認結果をメインプログラム編集領域231に表示(S1316)した後、プログラム確認部23は、図28AのステップS1305へ処理を戻し、次のレジスタについてステップS1305〜S1316の処理を行う。すべてのレジスタについて処理が終了するまで、プログラム確認部23は、ステップS1305〜S1316の処理を繰り返す。なお、ステップS1316において、レジスタ確認結果を強調表示してもよい。
なお、プログラム確認部23は、“レジスタA”の後ろが、「“レジスタA”=“レジスタA”」の形式であれば“更新”であり、「“レジスタA”=他の数値命令」であれば“置換”としてレジスタ確認結果を記憶部50に格納してもよい。
図28A,図28Bの処理後のメインプログラム56表示画面が、図29に示す図である。図29の符号1401〜1407に示すように、レジスタが記載されている行の後ろに、該当するレジスタが定義であるか、参照であるか、未定義であるかなどのレジスタ確認結果が強調表示されている。このとき、レジスタ確認結果の種類毎に色を変えるなどしてもよい。
このような処理によって、ユーザはメインプログラム56で使用するレジスタの利用状況を確認することができ、レジスタ名の重複、未定義による誤りを行うことを防止することができる。
(ラベル確認処理)
次に、ラベル確認処理について図30A、図30B、図31を参照して説明する。
図25に示すように、メインプログラム編集領域にメインプログラム56が表示された状態で、ユーザがマウスの右ボタンを押下すると(S1401)、表示処理部24がプルダウンメニュー301を表示する(S1402)。次に、プルダウンメニュー301の“ラベル確認”が選択入力される(S1403)と、文字列検索部21が、記憶部50に記憶されているメインプログラム56を読み込み(S1404)、最初の文字列が“LBL[” 、最後の文字列が“]”となるラベル名を示す文字列を抽出する(S1405)。
抽出したラベルを“ラベルA”とすると、プログラム確認部23は、この“ラベルA”が行を識別するラベル(定義)、別のラベルを参照するラベル(参照)かを調べる(S1406)。このとき、プログラム確認部23は、該当するラベルが“JMP”や“IF”などの命令と共に現れていれば参照のラベルであると判定し、それ以外は定義のラベルであると判定する。
次に、プログラム確認部23は、当該“ラベルA”がある行を除く他の行で“ラベルA”と同じラベルが出現するか否かを判定する(図30BのS1407)。
ステップS1407の結果、出現しない場合(S1407→No)、プログラム確認部23は“ラベルA”が定義のラベルである(A:定義)か否かを判定する(S1408)。
ステップS1408の結果、定義のラベルでなければ(S1408→No)、ラベルは参照されているが、定義がなされていないので、プログラム確認部23は、“ラベルA”が未定義である旨の情報をラベル確認結果として記憶部50に格納し(A:未定義:S1409)、プログラム確認部23は、ステップS1416へ処理を進める。
ステップS1408の結果、定義のラベルであれば(S1408→Yes)、このラベルは1つだけ存在し、かつ定義であるので、プログラム確認部23は、“ラベルA”が正常である旨のラベル確認結果を記憶部50に記憶し(A:正常:S1415)、プログラム確認部23は、ステップS1416へ処理を進める。
ステップS1407の結果、ラベルが出現する場合(S1407→Yes)、出現したラベルを“ラベルB”とし、プログラム確認部23は、この“ラベルB”が定義のラベルか、参照のラベルかを調べる(S1410)。
そして、プログラム確認部23は、“ラベルA”が定義のラベルであり、かつ“ラベルB”が参照のラベルであるか否か(A:定義,B:参照)を判定する(S1411)。
ステップS1411の結果、“ラベルA”が定義のラベルであり、かつ“ラベルB”が参照のラベルである場合(S1411→Yes)、ラベルが定義され参照されているので、プログラム確認部23は、ラベルAが正常である旨の情報をラベル確認結果として記憶部50に格納し(A:正常:S1412)、プログラム確認部23は、ステップS1416へ処理を進める。
ステップS1411の結果、“ラベルA”が定義のラベルでないか、“ラベルB”が定義のラベルでない場合(S1411→No)、プログラム確認部23は、“ラベルA”が定義のラベルであり、かつ“ラベルB”も定義のラベルであるか否か(A:定義,B:定義)を判定する(S1413)。
ステップS1413の結果、“ラベルA”が定義のラベルであり、かつ“ラベルB”も定義のラベルである場合(S1413→Yes)、このラベルは二重に定義されているので、プログラム確認部23は、ラベルAが二重定義である旨の情報をラベル確認結果として記憶部50に記憶し(A:二重定義:S1414)、ステップS1416へ処理を進める。
ステップS1413の結果、“ラベルA”が定義のラベルでないか、“ラベルB”が定義のラベルでない場合(S1413→No)、ラベルは定義され、参照されているので、プログラム確認部23は、ラベルAが正常である旨の情報をラベル確認結果として記憶部50に記憶し(A:正常:S1415)、プログラム確認部23は、ステップS1416へ処理を進める。
ステップS1409、ステップS1412、ステップS1414またはステップS1415の処理の終了後、プログラム確認部23は、記憶部50のメインプログラム56中の該当するラベル(“ラベルA”)行の後ろにラベル確認結果を書き込む。そして、表示処理部24が、書き込んだラベル確認結果をメインプログラム編集領域231に表示(S1416)した後、プログラム確認部23は、図30AのステップS1405へ処理を戻し、次のラベルについてステップS1405〜S1416の処理を行う。すべてのラベルについて処理が終了するまで、プログラム確認部23は、ステップS1405〜S1416の処理を繰り返す。なお、ステップS1416において、ラベル確認結果を強調表示してもよい。
なお、本実施形態ではステップS1404においてメインプログラム56を読み込んだが、これに限らず、サブプログラム55を読み込んでもよい。そして、図30A、図30Bの処理をサブプログラム55に対して行ってもよい。
図30A、図30Bの処理後のメインプログラム編集領域231が、図31に示す図である。図31の符号1501〜1508に示すように、ラベルが記載されている行の後ろに、該当するラベルが正常(定義、参照で表記)であるかなどのラベル確認結果が強調表示されている。このとき、レジスタ確認結果の種類毎に色を変えるなどしてもよい。
本実施形態に係るロボット動作プログラム作成装置の構成例を示すブロック図である。 本実施形態に係るロボット動作プログラム作成装置のハードウェア構成例を示すブロック図である。 本実施形態に係る初期画面の例を示す図である。 本実施形態に係る初期操作における画面遷移を示す図である。 本実施形態に係るブロック別テンプレート、ブロック別検索範囲、ブロック別文字列の選択処理における画面遷移を示す図である。 本実施形態に係るメインプログラム作成処理における画面遷移を示す図である。 本実施形態に係るメインプログラム作成処理の手順を示すフローチャートである。 本実施形態に係る編集画面表示処理の画面遷移を示す図である(その1)。 本実施形態に係るメインプログラム編集画面表示処理の手順を示すフローチャートである。 本実施形態に係る“ブロック001”の選択処理の手順を示すフローチャートである。 本実施形態に係る検索文字列強調表示の画面遷移を示す図である(その1)。 本実施形態に係る“ブロック001”の文字列編集処理の手順を示すフローチャートである。 本実施形態に係る編集画面表示処理の画面遷移を示す図である(その2)。 本実施形態に係る検索文字列強調表示の画面遷移を示す図である(その1)。 本実施形態に係る検索文字列強調表示の画面遷移を示す図である(その2)。 本実施形態に係る“ブロック002”の選択処理の手順を示すフローチャートである。 本実施形態に係る“ブロック002”の文字列編集処理の手順を示すフローチャートである。 本実施形態に係る文字列置換処理の画面遷移を示す図である。 本実施形態に係る文字列置換処理の手順を示すフローチャートである(その1)。 本実施形態に係る文字列置換処理の手順を示すフローチャートである(その2)。 本実施形態に係るCALL分含有行選択、追加および削除処理の画面遷移を示す図である。 本実施形態に係るCALL文含有行選択処理の手順を示すフローチャートである。 本実施形態に係るCALL文含有行追加処理の手順を示すフローチャートである。 本実施形態に係るCALL文含有行削除処理の手順を示すフローチャートである。 本実施形態に係る他ブロックレジスタ修正処理の手順を示すフローチャートである。 本実施形態に係るワーク毎のブロック構成例を示す図である。 本実施形態に係るサブプログラム確認処理の手順を示すフローチャートである。 本実施形態に係るサブプログラム呼出命令を強調している画面例を示す図である。 本実施形態に係るレジスタ確認処理の手順を示すフローチャートである(その1)。 本実施形態に係るレジスタ確認処理の手順を示すフローチャートである(その2)。 本実施形態に係るレジスタ確認結果の画面例を示す図である。 本実施形態に係るラベル確認処理の手順を示すフローチャートである(その1)。 本実施形態に係るラベル確認処理の手順を示すフローチャートである(その2)。 本実施形態に係るラベル確認結果の画面例を示す図である。 テキストエディタにおけるロボットを動作せるメインプログラムの一例を示す図である。 命令部の一例を示す図である。
符号の説明
1 ロボット動作プログラム作成装置(プログラム作成支援装置)
17 プログラム作成部
18 プログラム展開部
19 文字列処理部
21 文字列検索部
22 文字列置換部
23 プログラム確認部
24 表示処理部
50 記憶部
52 ブロック別テンプレート
53 ブロック別検索範囲
54 ブロック別文字列
55 サブプログラム
56 メインプログラム
57 展開プログラム

Claims (16)

  1. パラメータを含む命令文字列を複数有する命令文字列群が記述されるブロックが複数組み合わさって構成されるプログラムの作成を支援するプログラム作成支援装置によるプログラム作成支援方法であって、
    前記ブロックごとに記述される命令文字列群であるブロック別文字列と、
    所定の命令文字列である、少なくとも1つの第1の命令文字列と、
    が記憶部に格納されており、
    前記プログラム作成支援装置が、
    前記記憶部から読み込まれた第1の命令文字列と一致する第2の命令文字列を、前記ブロック別文字列から抽出し、
    前記抽出した第2の命令文字列に関連する文字列を強調表示して表示部に表示させる、
    ことを特徴とするプログラム作成支援方法。
  2. 前記プログラム作成支援装置が、
    前記強調した文字列を編集する
    ことを特徴とする請求項1に記載のプログラム作成支援方法。
  3. 前記文字列の編集とは、置換、削除、コピーのいずれかである
    ことを特徴とする請求項2に記載のプログラム作成支援方法。
  4. パラメータを含む命令文字列を複数有する命令文字列群が記述されるブロックが複数組み合わさって構成されるプログラムの作成を支援するプログラム作成支援装置によるプログラム作成支援方法であって、
    前記プログラムは、メインプログラムおよびサブプログラムを有しており、
    前記ブロックごとに記述される命令文字列群であるブロック別文字列と、
    前記サブプログラムを呼び出すためのサブプログラム呼出命令に関する文字列である、少なくとも1つの第1の命令文字列と、
    前記サブプログラムと、
    が記憶部に格納されており、
    前記プログラム作成支援装置が、
    前記記憶部から読み込まれた第1の命令文字列と一致する第2の命令文字列を、前記ブロック別文字列から抽出し、
    前記第2の命令文字列に関連する文字列を基に、前記サブプログラムを前記記憶部から読み込み、
    前記第2の命令文字列に関連する文字列を、前記読み込んだサブプログラムで置換した展開プログラムを生成し、
    前記生成した展開プログラムを、前記表示部に表示させる
    ことを特徴とするプログラム作成支援方法。
  5. 前記第2の命令文字列に関連する文字列を基に、前記サブプログラムを記憶部から読み込むときに、該当するサブプログラムが前記記憶部にない場合、
    前記第2の命令文字列に関連する文字列を、前記サブプログラムが前記記憶部にない旨の情報に置換する
    ことを特徴とする請求項4に記載のプログラム作成支援方法。
  6. パラメータを含む命令文字列を複数有する命令文字列群が記述されるブロックが複数組み合わさって構成されるプログラムの作成を支援するプログラム作成支援装置によるプログラム作成支援方法であって、
    前記ブロックごとに記述される命令文字列群であるブロック別文字列と、
    所定の命令文字列である、少なくとも1つの第1の命令文字列と、
    が記憶部に格納されており、
    前記プログラム作成支援装置が、
    前記記憶部から読み込まれた第1の命令文字列と一致する第2の命令文字列を、前記ブロック別文字列から抽出し、
    前記第2の命令文字列の種別を判別し、
    前記判別した種別に関する情報を、前記第2の命令文字列に関連する文字列に関連付けて表示部に表示させる
    ことを特徴とするプログラム作成支援方法。
  7. 前記第1の命令文字列とは、レジスタ命令に関する文字列である
    ことを特徴とする請求項6に記載のプログラム作成支援方法。
  8. 前記第1の命令文字列とは、ラベル命令に関する文字列である
    ことを特徴とする請求項6に記載のプログラム作成支援方法。
  9. 前記第1の命令文字列は、開始文字列および終了文字列であり、
    前記第2の命令文字列に関連する文字列は、前記開始文字列および前記終了文字列で挟まれる文字列である
    ことを特徴とする請求項1、請求項4または請求項6に記載のプログラム作成支援方法。
  10. 前記記憶部における、複数の前記ブロック別文字列を、所定の順番で連結して前記プログラムを生成する
    ことを特徴とする請求項1、請求項4または請求項6に記載のプログラム作成支援方法。
  11. 前記プログラムの内、メインプログラムは、テキストエディタで作成され、ロボットに用いるプログラムである
    ことを特徴とする請求項1、請求項4または請求項6に記載のプログラム作成支援方法。
  12. 請求項1から請求項11のいずれか一項に記載のプログラム作成支援方法を、コンピュータに実行させることを特徴とするプログラム。
  13. パラメータを含む命令文字列を複数有する命令文字列群が記述されるブロックが複数組み合わさって構成されるプログラムの作成を支援するプログラム作成支援装置であって、
    前記ブロックごとに記述される命令文字列群であるブロック別文字列と、
    所定の命令文字列である、少なくとも1つの第1の命令文字列と、
    を格納している記憶部と、
    前記記憶部から読み込まれた第1の命令文字列と一致する第2の命令文字列を、前記ブロック別文字列から抽出する文字列検索部と、
    前記抽出した第2の命令文字列に関連する文字列を強調表示して表示部に表示させる表示処理部と、、
    を有することを特徴とするプログラム作成支援装置。
  14. パラメータを含む命令文字列を複数有する命令文字列群が記述されるブロックが複数組み合わさって構成されるプログラムの作成を支援するプログラム作成支援装置であって、
    前記プログラムは、メインプログラムおよびサブプログラムを有しており、
    前記ブロックごとに記述される命令文字列群であるブロック別文字列と、
    前記サブプログラムを呼び出すためのサブプログラム呼出命令に関する文字列である、少なくとも1つの第1の命令文字列と、
    前記サブプログラムと、
    を格納している記憶部と、
    前記記憶部から読み込まれた第1の命令文字列と一致する第2の命令文字列を、前記ブロック別文字列から抽出する文字列検索部と、
    前記第2の命令文字列に関連する文字列を基に、前記サブプログラムを記憶部から読み込み、前記第2の命令文字列に関連する文字列を、前記読み込んだサブプログラムで置換した展開プログラムを生成するプログラム展開部と、
    前記生成した展開プログラムを、前記表示部に表示させる表示処理部と、
    を有することを特徴とするプログラム作成支援装置。
  15. パラメータを含む命令文字列を複数有する命令文字列群が記述されるブロックが複数組み合わさって構成されるプログラムの作成を支援するプログラム作成支援装置であって、
    前記ブロックごとに記述される命令文字列群であるブロック別文字列と、
    所定の命令文字列である、少なくとも1つの第1の命令文字列と、
    を格納している記憶部と
    前記記憶部から読み込まれた第1の命令文字列と一致する第2の命令文字列を、前記ブロック別文字列から抽出する文字列検索部と、
    前記第2の命令文字列の種別を判別するプログラム確認部と、
    前記判別した種別に関する情報を、前記第2の命令文字列に関連する文字列に関連付けて表示部に表示させる表示処理部と、
    を有することを特徴とするプログラム作成支援装置。
  16. 前記第1の命令文字列は、開始文字列および終了文字列であり、
    前記第2の命令文字列に関連する文字列は、前記開始文字列および前記終了文字列で挟まれる文字列である
    ことを特徴とする請求項13、請求項14または請求項15に記載のプログラム作成支援装置。
JP2008335787A 2008-12-29 2008-12-29 プログラム作成支援方法、プログラム及びプログラム作成支援装置 Pending JP2010157155A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008335787A JP2010157155A (ja) 2008-12-29 2008-12-29 プログラム作成支援方法、プログラム及びプログラム作成支援装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008335787A JP2010157155A (ja) 2008-12-29 2008-12-29 プログラム作成支援方法、プログラム及びプログラム作成支援装置

Publications (1)

Publication Number Publication Date
JP2010157155A true JP2010157155A (ja) 2010-07-15

Family

ID=42575030

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008335787A Pending JP2010157155A (ja) 2008-12-29 2008-12-29 プログラム作成支援方法、プログラム及びプログラム作成支援装置

Country Status (1)

Country Link
JP (1) JP2010157155A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020199631A (ja) * 2020-08-28 2020-12-17 株式会社Fuji ジョブ作成装置
US11975454B2 (en) 2021-11-30 2024-05-07 Seiko Epson Corporation Program generation device and non-transitory computer-readable storage medium storing program

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020199631A (ja) * 2020-08-28 2020-12-17 株式会社Fuji ジョブ作成装置
JP7105281B2 (ja) 2020-08-28 2022-07-22 株式会社Fuji 作業システム
US11975454B2 (en) 2021-11-30 2024-05-07 Seiko Epson Corporation Program generation device and non-transitory computer-readable storage medium storing program

Similar Documents

Publication Publication Date Title
CN107544437B (zh) 加工程序编辑装置、方法以及存储介质
JP2006119884A (ja) シーケンスプログラムの編集装置
JP2010157155A (ja) プログラム作成支援方法、プログラム及びプログラム作成支援装置
JP3933892B2 (ja) 仕様書作成プログラム及び仕様書作成プログラムを格納したコンピュータ可読媒体
JPS63109578A (ja) 論理図概要表示処理方式
JP2659092B2 (ja) 論理図作成処理装置におけるカーソル表示制御方式
JPH0784778A (ja) ソースプログラムの試験項目編集・管理装置
JPH08212361A (ja) 図形編集装置および図形編集方法
JP4127318B2 (ja) プログラム生成方法および装置
JP7128408B2 (ja) 情報処理装置、その制御方法、及びプログラム、並びに、情報処理システム
JP7447574B2 (ja) サポート装置、サポートプログラムおよびサポート方法
JPH0954688A (ja) Gui設計支援方法
JP2575665B2 (ja) 論理図概要記述変換処理方式
JP2002366880A (ja) フォーム編集装置及び方法及びコンピュータ読取り可能なプログラムが格納された記憶媒体
JP3966355B2 (ja) プログラム生成方法および装置
JP2004326161A (ja) シーケンスプログラム編集装置
JP2572441B2 (ja) 帳票固有図形作成装置
CN104903802A (zh) 作图编辑装置,以及程序
JP2005259169A (ja) プログラム作成方法
JP2024011850A (ja) 制御プログラム編集装置、編集方法、およびプログラム
JP2010049549A (ja) チュートリアル作成装置及びチュートリアル作成方法
JP5581894B2 (ja) データ処理プログラム自動生成システム
KR100817364B1 (ko) 프로그래머블 로직 컨트롤러의 주변 장치 및 그 프로그램작성 방법
JPS6152778A (ja) 画像編集装置
JPS63101925A (ja) 論理図制御レベル印刷制御方式