(57)【要約】【課題】最小限の機能を持つ入力装置のみを用いてプログラミングできる環境を提供する。【解決手段】プログラムの表現形式としてデータフローグラフの図形式を採用し、各命令とオプションを閉領域で囲い、隣接した閉領域の間でデータの受け渡しを行う。図形式の入力と編集は、画面上の位置の指定と、シングルクリックとダブルクリックのような二種類の指示だけで行う。【選択図】図7
2020064353.tif 000002
【特許請求の範囲】
【請求項１】
データフローグラフの表現形式として、一つの実行命令、入力データの数と方向、出力データの方向の表現を含むタイル形式と、隣接するタイル間でのデータの交換を示す形式を採用し、利用者が前記形式の配置の図表現を直接作成編集し、前記直接編集された配置の図表現を実行する手段を具備するデータ処理装置。
【請求項２】
前記データフローグラフには名前が付けられ、当該データフローグラフを命令定義とし、つれられた名前を実行命令の一つとしてタイルの中で使用でき、実行時には、定義されたデータフローグラフの表現を実行することを特徴とする請求項1のデータ処理装置。
【請求項３】
データフローグラフによる前記実行命令定義には、複数の入出力端子に順序を持つ識別子を付与することが可能であり、定義時の入出力の方向と使用時の入出力の方向が異なっている場合、端子の識別子を合致させることを特徴とした請求項1または請求項2のデータ処理装置。
【請求項４】
所定の制御対象装置の各機能に対する制御指示を上記実行命令として設定可能である請求項1乃至請求項3の機器制御装置。
【請求項５】
図表現中の各タイルを複数の区画に分割し、各分割された区画に対するユーザー操作に対して、それぞれ異なった編集動作を実行する請求項1乃至請求項4のデータ処理装置及び機器制御装置
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラミング言語の入力と編集およびプログラムの実行方法とプログラムによる機器制御方法に関する。
【背景技術】
【０００２】
アルゴリズムの視覚的表現については、JIS規格などで規定されているフローチャート形式や、そのほか様々な記法が考案されているが、本発明ではデータフローグラフを採用している。また、記述されたプログラムの実行を行う機構もデータフロー計算機をシミュレートした機構を採用する。
【０００３】
特許文献1では、PLC回路のグラフィカルなプログラミングをラダー図によって行うことが示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−２２４５５９号公報
【非特許文献】
【０００５】
【非特許文献１】「データ駆動型並列計算機」ISBN4-274-07763-2
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、キーボード入力をあまり必要としないようなプログラム作成実行環境を提供することである。このために、プログラムの記述形式として、図式的表現形式(プログラミング「言語」)を導入する。このような図式的表現形式の代表としてフローチャート図が挙げられるが、フローチャート図の表現規則は計算機か解釈実行するのに必要なほど厳密ではなく、記述に相当の自由度とあいまいさが許容されているため、計算機への直接解釈実行指示としてはそのままでは適さない。フローチャート図を解釈実行するためにはかなりの記述の制約を課す必要がある。また、フローチャート図の例として図5を見ると、処理の記述に相当のテキスト表現が依然としてあるために、入力と編集を物理キーボードなしで行うのは容易ではない。このため、表現図式の採用には、記述の厳密さと、文字入力の少なさと、さらにロジックの可読性の高さが求められる。
【課題を解決するための手段】
【０００７】
本発明では、キーボードを装備しないデジタル機器、例えばタブレットやスマートフォンなどの上でのプログラミングを実現するために、通常のプログラミング言語のようなテキストベースではなく、記号や矢印を使用した視覚的な表現を使用する。
現在のほとんどのプログラミング言語の記述形式は文字テキストによる記述になっており、入力作成や変更編集にはフルキーボードデバイスを必要とする。このため、動作アルゴリズムを変更可能とする機能を組み込み機器に搭載しようとする場合、フルキーボードを搭載するか外付け可能う端子を用意し、外付けのキーボードを接続する必要がある。
【０００８】
例えばエアコンの運転開始タイマーの機能について、標準では「現時間からｔ時間後に運転開始」と指定する方式を標準で提供しており、この機能に関するAPI（Application Programming Interface）がユーザーに公開されていて、基本的な動作、「機器を運転させる」や、「内蔵時計の値を読み取る」などの、基本操作が公開され、さらにエアコン本体に搭載されているプログラミング言語処理機構によって駆動可能になっているとする。
【０００９】
このようなユーザープログラマブルなエアコンでユーザーがタイマーのロジックを変更して「現在時刻からt時間後に起動」ではなく、「指定時刻に起動」するように指定方法の変更を実現するプログラミングを行う場合を考える。すると、テキストベースのプログラミング言語の場合には、入力と編集に多量の文字入力を必要とし、107のタッチパネル上に表示されるような仮想キーボードでの作業は非常に困難である。代わりに、エアコンそのものにフルキーボードを装備させるのも機器全体のコストを上げることになる。また、USB端子を装備してキーボードを外付けする手段も考えられるが、キーボードをエアコン機器の付属品とすると、コストの問題が解決しない。この例ではエアコンという比較的高額な機器のケースを考えているが、目覚まし時計などへの適用を考えた場合、この問題は顕著となる。
【００１０】
このような問題を解決するために、本発明では、(1)プログラム表現図式としてデータフローグラフを採用する。(2)グラフの配置として、タイルと呼ぶ実行単位のマスを隣接してはいつされている「盤面」上で行う。(3)タイルの内容の入力は画面上の所定の位置でのボタン押下、タップ、ダブルタップ、ポップアップメニューからの項目選択、仮想キーボードからの数文字〜十数文字の入力のみで入力できるものとする。
【発明の効果】
【００１１】
上記の手段により、通常のプログラミング言語と同等の表現能力を持つ図式表現形式によるプログラミングをコストのかかる物理キーボードなしでタッチパネルのみで行うことができるようになり、低コストで、プログラマブルな機器を実現することができる。
【図面の簡単な説明】
【００１２】
【図１】想定される機器の構成概要
【図２】この発明の実施形態の一つの画面表示を示す図
【図３】タイルの表記法の例示
【図４】文字列印字プログラムのグラフチャート。
【図５】実行系の動作フローチャート
【図６】階乗を計算するプログラムのうちの、メインラインチャート
【図７】階乗を計算するタイル「n!」のプログラムチャート
【図８】階乗を計算するメインラインチャートの変形
【図９】出力渡しのフローチャート
【図１０】「左隣へ渡す」のフローチャート
【図１１】新規タイル作成ダイアログ
【図１２】拡大編集ダイアログ
【図１３】命令設定ダイアログ
【図１４】命令/名前一覧プルダウンメニュー
【図１５】タイル内のタップ位置を区別するゾーンの説明
【図１６】指定入出力に付される優先度の説明
【図１７】タイルがシングルタップされた時のイベントハンドラのフローチャート
【図１８】タイルがダブルタップされた時のイベントハンドラのフローチャート
【図１９】方向編集処理のフローチャート
【図２０】プログラム実行エンジンの内部
【図２１】主な定義済み命令の説明
【図２２】入出力指示の状態遷移の例
【符号の説明】
【００１３】
101    機器全体
102    制御される機器
103    起動停止スイッチ
104    タイマー
105    機器制御インターフェース部
106    ブログラム実行エンジン
107    タッチパネル
201    出力表示領域
202    プログラム実行開始ボタン
203    新規名前付き盤面の作成ボタン
204    名前付き盤面の削除ボタン
205    盤面編集操作ボタン
206    タイル定義外部保存読み込みボタン
207    表示対象盤面選択メニュー件表示領域
208    名前付き盤面表示領域
209    入力条件表示領域
210    出力方向表示領域
211    CONSTタイル
212    PRTタイル
213    ENDタイル
301    CONSTタイル
302    入力0の表示線
303    入力0の識別表示
304    タイルの命令表示
305    タイルのオプション表示
306    出力0の表示線
307    出力0の識別表示
308    SWITCHタイル
309    タイルの命令表示
310    入力1の識別表示
311    出力1の識別表示
401    名前付き盤面MainLineの全体表示
402    CONSTタイル
403    PRTタイル
404    タイルの命令表示
405    ENDタイル
406    タイルの命令表示
407    名前付き盤面の名称表示
408    名前付き盤面の入力条件表示
601    名前付き盤面の名称表示兼選択プルダウンメニュー
602    名前付き盤面の入力条件表示
603    INPUTタイル
604    階乗計算タイルn!
701    名前付き盤面n!の名称表示
702    n!の出力方向表示
703    n!の入力条件表示
704    COPY3タイル
705    PASSタイル
706    CONSTタイル
707    SWITCHタイル
708    GTタイル
709    COPY2タイル
710    n-1タイル
711    n!の再帰呼び出しタイル
712    A*Bタイル
713    PASSタイル
714    MRG2タイル
715    CONSTタイル
801    INPUTタイル命令の名称
802    右方向からの入力0
803    左方向への出力0
804    右方向からの入力0
805    n!タイルの再帰呼び出し
1101   新規名前付き盤面の初期設定ダイアログ
1102   新規名前付き盤面の名称入力項目
1103   新規名前付き盤面のサイズ選択メニュー
1104   新規名前付き盤面の入力条件設定入力項目
1105   新規名前付き盤面の出力方向設定入力項目
1201   選択タイル拡大表示編集ダイアログ
1202   選択されたタイルの拡大表示
1301   タイル命令設定ダイアログ
1302   命令選択メニュー
1303   命令オプション設定入力項目
1401   タイル命令選択メニュー展開表示
1402   タイルをリセットする選択項目
1501   タイル全体の領域
1502   中央付近のゾーン1
2001   プログラム実行エンジン
2002   UI操作処理部
2003   解釈実行部
2004   実行環境保持部
2005   定義済みタイル保持部
2006   作業領域
2201   入出力未設定初期状態
2202   入力0設定後の状態
2203   入力1設定後の状態
2204   出力0設定後の状態
2205   入力1設定キャンセル後の状態
2206   入力1再設定後の状態
2207   出力1設定後の状態
【発明を実施するための形態】
【００１４】
以下に本発明に関する代表的な実施形態を示す。この例は、汎用のプログラミング環境を機器制御に応用したものである。機器制御実行環境と汎用環境の相違は、機器制御のためのAPIを持つか否かにあるが、この実施例では、APIは後述の「作り付けのタイル」として定義されているかどうかに対応するので、この例示は、本発明の実行環境を機器制御への応用に限定するものではない。
【００１５】
図1は本実施例の概要図であり、本実施例のデータ処理装置が、組み込まれている機器を制御する構成の図である。一例として、組み込み機器がエアコンの場合で考えると、101がエアコン機器全体、102がエアコン機器本体、103が起動停止スイッチ、104が内蔵の時計、105が103や104を106によって制御させるためのインターフェース、106がこれらの機器を制御するプログラム実行エンジン、107がユーザーとの入出力を行うタッチパネルとみることができる。汎用のプログラミング環境についてはこの構成図から、102,103,104,105を取り除いて考えればよい。
【００１６】
図20は、図1のプログラム実行エンジン106の内部を表した例である。図20の2001が、図1の106に対応する。プログラム実行エンジン2001には、UI操作処理部2002があり、タッチパネル107上の操作、タップ、ダブルタップなどに反応して、実行するべき動作を定義済みタイル保持部2005と実行解釈部2003に対して指示を行う。
【００１７】
2003はプログラムの解釈実行部であり、UI操作処理部2002からプログラムの実行が指示された時に動作を開始し、プログラムに該当する定義済みタイルを保持する定義済みタイル保持部2005から実行するべき内容を取り出して、実行環境保持部2004と、作業領域2006に各種情報を書き込み/読み出しを繰り返して実行を行い、実行完了時にその旨をUI操作処理部2002に報告する。また、解釈実行部2003は、図1の106のインターフェースに対する処理の呼び出しを行い機器の状況読み込みと、操作を行う。
【００１８】
2004は、実行環境保持部であり、実行時の各種情報を保持する部分である。これらの情報には実行待ちのタイルの待ち合わせ場所、実行待ちのタイルに到達しているデータの情報などが含まれる。
【００１９】
2005は、定義済みタイルの保存部である。ここは、ユーザーによって作成と編集がなされる、「定義済みタイル」を格納している部分である。「定義済みタイル」は複数個のタイルを配置することにより構成されたデータフローグラフに対して名前を付けたものである。この2005の部分は、2003の解釈実行部からの要求に応じて、特定の名前の定義済みタイルの指定の位置にあるタイルの情報を提供する。また、UI処理操作部からの指示により、新規定義済みタイルの作成、削除、内容の変更を行う。
【００２０】
作業領域2006は、データフローグラフ内を流通する各種データの置き場所であり、文字列や構造体などの複合オブジェクトの実体が格納されている。
【００２１】
図2はこの実施例におけるユーザー画面への表示例である。この画面ではすでに実行を開始すれば、表示領域201に”HELLO WORLD”という文字列が表示されて実行が終了するようにプログラムされている状態が表示されている。このシステム例では、システムを起動した直後に、そのままシステムに対して実行指示を与えるようなユーザーを想定して、すでにこのようなプログラムがセットされている状態を初期状態として与えている。図2の完全な説明は[００２２]で行う。ここでは、基本的な構成要素についてのみ説明する。
【００２２】
211,212,213には、それぞれ実行命令とオペランドと呼ばれる実行オプション、入力データの入ってくる方向、出力データの排出方向を指示する図が描かれている。この矩形を以降「タイル」と呼ぶ。タイルに関する詳細は、図3で説明する。タイルについては、この実施例では、矩形となっているが、隣接できる閉領域であればどのような形でも良く、各タイルが同形である必要もない。
【００２３】
208はタイルが縦横に隣接して配置されている領域で、以降「盤面」と呼ぶ。盤面には識別のための「名前」が付けられている。208の盤面には「MainLine」という名前が付けられており、表示領域兼プルダウンメニュー207にその名前が表示されている。
【００２４】
このMainLine盤面で表現されている「プログラム」を簡単に説明する。211は、CONSTという命令を実行する。この命令はタイルの上方から入力データを受け取り、その入力データがどのようなものあっても、内容を無視して、オプションとして指定されている”HELLO WORLD”という文字列を出力データとして、このタイルの下方に隣接しているタイルに渡す。212は、PRTという命令を実行する。この命令は上方に隣接しているタイルからのデータを入力としてその内容を201の表示領域に印字する。さらに、入力データをそのまま下方に隣接するタイルに渡す。213は、ENDという命令を実行する。この命令は入力として上方に隣接しているタイルからのデータを受け取り、それを捨ててしまい、何も出力しない。このプログラムでは、213の実行によりデータが捨てられ、プログラム系全体を流通するデータがなくなることで系の実行が終了する。このプログラム中の矢印は、制御の流れではなく、データの流通経路を示しており、図式はデータフローグラフになっている。
【００２５】
２０２はプッシュボタンであり、押下するとセットされているプログラムの実行が開始される。実行ボタンを押下すると２０８で図示されているプログラムグラフの上辺中心のタイル２１１の上に、実行のきっかけとなるダミーデータNILが投下され、以降必要なデータが到着して実行可能になったタイルの実行が続く。最初に投下するデータは系全体の実行のきっかけになるものであり、NILでなくても0でも1でもよい。
【００２６】
２０３はプッシュボタンであり、押下すると新規に名前を付けた新規の盤面が作成できるようになる。詳細は後述する。盤面の名前は、タイル中の「命令」として利用可能であり、新たな名前付きの盤面を作成することで、その盤面のアルゴリズムをサブルーチンとして盤面中で使用できる。例えば、図7のように整数の階乗を計算するように編集された盤面「n!」は図6のように盤面のタイル中でCONSTやEND等と同等に使用することができる。
【００２７】
207は表示領域兼プルダウンメニューであり、選択候補としてMainLineとその時点までに作成されている名前付き盤面のすべてが選択候補としてリストされる。ユーザーはこのメニューから盤面名を選択すると、208の表示が選択された名前の盤面の内容に切り替わり編集が可能になる。207は、表示の切り替えと現在208に表示されている盤面の名前の表示を兼ねる。
【００２８】
この実施例では、盤面は、３×３、５×５、７×７など縦横とも奇数個のタイルになっている。これは、名前付き盤面の入出力方向である上下右左の位置を各辺の中心のタイルとするために奇数になっているが、各辺の入出力位置の指定が別法で可能であるならば奇数でなくてもよい。また、各タイルが隣接関係を保持できるのであれば、縦横が同じタイル数である必要もなく、タイルの形状も矩形でなくてもよい。例えば六角形のタイルであれば、一つのタイルに隣接するタイルの数が矩形の場合には4個であるところ6個にすることも考えられる。
【００２９】
209は、表示されているタイルが実行できる条件を表示する領域である。各タイルは、一つ以上のデータ入力を受けるが、どの方向からいくつデータが到着したら実行できるかを設定することができる。209はその表示領域である。この例では、T : Top すなわち上からデータが到着した時点でMainLineという盤面の実行を開始する可能であることを表している。一方各タイルは0個以上の出力があり、どの方向が出力になるのかを210の領域に表示する。この例では、MainLineは外に対して出力をしないので、210の欄は空白になっている。
【００３０】
図3は、各タイルの表示の詳細が示されている。301は、211で図示されたCONST命令タイルを再掲したものである。302は、矢印でない直線であり、外部からの入力がこの方向から、すなわち上から、入ってくることを表している。303は入力データに対する識別子である。これは入力が複数あるような命令タイルのうち、入力を区別しないと結果が変わるような命令、例えば引き算や割り算のような命令を想定して付与されるものである。本実施例では、識別子に数字を用いているが、順序が付けられる識別子であればアルファベットなどでもよい。
【００３１】
304は命令の名前表示である。ここでは定数を出力するCONST命令が書かれている。そのほか、プログラムの実行系があらかじめ用意している命令を設定することはもちろん、名前付き盤面の名称を設定することもできる。305は304の実行命令に対するオプションの表示である。CONSTは、命令だけでは、どのような定数を出力するかが決定しないので、定数をオプションとして指定する。オプションを必要としない命令もある。
【００３２】
306の外向きの矢印は、この方向、この例では下に隣接したタイルに対して、出力があることを表示している。入力と同様に出力にも識別子が付与され307のように矢印に沿って表示されている。
【００３３】
308は複数の入力と出力を持つ命令タイル、SWITCH命令タイルである。SWITCHタイルは、二つの入力と二つの出力を持つ命令であり、入力1がNILであれば、入力0として入ってきたデータを出力1へ出力し、そうでなければ入力0を出力0に排出する。この命令では、データは、出力0か出力1のいずれかに排出され、両方からデータが排出されることはない。SWITCH命令は、データNILを論理値の偽とみなして出力を切り替える条件分岐に該当するものである。308では、入力0が上に隣接したタイルから、入力1が左から進入し、出力0として下に、出力1として右に隣接したタイルにて渡される。310は、この方向、すなわち左からの入力が入力1であることを表示し、311は、右への出力が出力1であることを表示している。
【００３４】
308では、入力0、入力1、 出力0、出力 1をそれぞれ上、左、下、右と設定された表示になっているが、本実施例では、各命令タイルの入力方向と出力方向は自由に選択設定できる。方向が自由に設定できることから、混乱を避けるために入出力に識別子を付与する必要がある。
【００３５】
図4は、図2で表示されていたMainLine盤面の部分を抽出して変形したものである。END命令タイルの位置が図2と異なっているが、アルゴリズムの表現としては同等である。ここで、407は、現在の盤面の表示がMainLineであることを表示しており、408は、このMainLine盤面が実行を開始できる条件「T」が表示されている。T単独の場合、上からデータが進入すれば、盤面の実行可能になる。この例では、図2の202のRUNボタンを押すと、この盤面の401からデータNILが進入する。
【００３６】
投入されたデータNILは、タイル402が入力0として受け取る。タイル402は、このデータ受信により実行可能となり、即座に命令CONSTがオプション”HELLO WORLD”付きで実行される。実行の結果402の出力0として文字列”HELLO WORLD”が下に隣接するタイル403に渡される。タイル403は、上からのデータを入力0として受け取るように設定されており、受け取った結果、タイル403の命令404のPRTが実行可能となり、402の次に実行される。404の実行の結果、入力された文字列”HELLO WORLD”は、表示領域201に表示され、そののちそのまま出力0として右隣りのタイル405に渡される。タイル405は、命令406としてENDが設定されている。タイル405は左隣のタイル403から、文字列”HELLO WORLD”を入力0として受け取る。ENDは入力0にデータが到着した時点で実行可能となるため、タイル405は403の次に実行される。このENDの実行の結果、入力された文字列データ”HELLO WORLD”は廃棄される。この結果この系のいずれのタイルも実行可能ではないため、実行機構は処理を終了する。
【００３７】
408に表示される実行開始条件の式は次のような形式になっている。実行開始条件は、複数の入力が到着する、複数の入力の内いずれかが到着する、あるいはこれらの組み合わせで表現され、前記の場合は入力の方向記号同士を演算子＊で結び、後者の場合は演算子＋でつなぐ。優先度は、＊の方が＋より強い。また丸括弧（）も一般的に数式と同様に使えるものとする。
【００３８】
入力の方向記号としては、T、L、R、Bの各文字が使用でき、それぞれ上、左、右、下を表す。数式上、この記号の左からの出現順が、入力の識別子を指定することになる。例えば「T＊L」という入力条件式は、上からと左からの両方にデータが到着したときに実行可能となることを表し、さらに、Tが入力0、Lが入力1に対応することも表している。方向記号のいずれかが単独で指定された場合、その方向からのデータが到着した時点で直ちに指定された盤面チャートは実行可能となる。複雑な例「(T＊R)＋B」は、記号の出現順に入力0が上、入力1が右、入力2が下から入ってくることを表し、さらに、入力2が到着した時点で、ほかの入力の如何にかかわらず実行可能となる。また、入力2にデータが到着しなくても、入力0と入力1にデータが到着した時点で実行可能となる条件を表現した式である。
【００３９】
このような条件式の例をいくつか挙げる。まず「L 」は入力0が左から入力され、入力0が到着した時点で実行可能となる条件式である。また「R＊L」入力0が右から、入力1が左から入力され、入力0と入力1が両方到着するまで実行しない条件式である。さらに「T＋L」は入力0が上から、入力1が左から入力され、どちらかが到着すれば実行可能となる条件式である。そして「(T＊R)＋B」は入力0が上から、入力1が右から、入力2が下から入力され、入力2が到着するか。入力0と入力1が揃うかのどちらかが満たされると実行を開始する条件式である。
【００４０】
これらの式の解釈は、一般的な数式の字句解析のアルゴリズムで解釈可能である。またこの条件式の解釈処理を簡便にするために、式の記法を後置記法(逆ポーランド記法)とすることもできる。このような後置記法の場合、条件式「(T＊R)＋B」は「TR＊B＋」となる。
【００４１】
図5は、このプログラム言語の106の実行エンジンの中の図20の2003である解釈実行部の動作を表すフローチャートである。解釈系は、起動すると、最初に501にあるように実行に必要な各種記憶領域を完全にリセットする。これらの記憶領域には、実行可能なタイルが複数ある場合の待ち合いのための領域、実行可能ではないが一部のデータが到着しているタイルの待合のための領域、配列やリスト、構造体などの複合データ構造のためのヒープ領域などが含まれる。これらの領域は、図20の実行環境保持部2004、作業領域2006に対応する。
【００４２】
次に解釈系は、502にあるように名前付き盤面の登録領域である定義済みタイル保持部図20の2005から、「MainLine」という名前を持つチャートを呼び出し、この盤面チャートに対して上から起動のきっかけを与えるデータNILを投入する。このデータは起動のきっかけをつくるためのものであり、内容はなんでもよく、NILである必然はない。0でも1でもよい。
【００４３】
解釈系は、次の504において、盤面のタイルの内、実行可能になっているタイルを検索し、そのうちの一つを実行する。検索にあたっては、図20の実行環境保持部2004を参照する。実行可能であるタイルが複数あった場合には、ランダムに選択して実行してもよいし、時系列順に実行可能になってからの経過時間が最も長いものを選択して実行するようにしてもよい。
【００４４】
ステップ504におけるタイルの実行の結果、0個以上の出力が生成される。ステップ505では、これらの出力を隣接するタイルの入力として分配する処理がなされる。出力が0個の場合には、ステップ505では何も処理は行われない。出力が1乃至3個の場合には、それぞれの出力を各方向に隣接するタイルの入力として渡す処理が出力の数だけ行われる。
【００４５】
ステップ505の処理の結果いくつかのタイルにデータが渡されることがあり、その結果実行可能となるタイルがいくつかできることもある。それらのタイルも候補に含めてステップ503に戻り、実行可能なタイルがあるかどうかを判定し、あるならばステップ504で一つ実行する。この繰り返しを実行可能なタイルがなくなるまで行い、実行可能なタイルがなくなれば、解釈系は停止する。実行対象となっているブログラムチャートによっては、データが無限に回り続けるようなものもあり得るが、それに対して、割り込みによる中止や、繰り返しの中で、実行したタイルの数を計数しておき、あらかじめ規定した量を実行したら停止する、あるいは、ユーザーに続行を確認する機構を追加することも容易に可能である。
【００４６】
図6と図7では、さらに複雑なプログラムチャートが例示されている。この例では、ユーザーから入力された自然数値に対する階乗を計算して表示領域201に表示して停止するプログラムが実現されている。図6は、メインラインチャートであり、601にこの盤面チャートの名前が「MainLine」であること、602に、このチャートの実行可能条件が、上からのデータ到着であることが表示されている。
【００４７】
解釈系の初期化処理によって上からNILが投下されると最初にタイル603が実行可能になる。このタイルの命令はINPUTとなっている。INPUT命令は、ダイアログと仮想キーボードなどの手段により、ユーザーに一つの入力を要求し、そのデータを出力0に出すものである。この時、入力0に入ってきたデータは放棄される。入力されたデータは、タイル604に上から渡され、入力0として受け取る。
【００４８】
タイル604の命令には「n!」が指定されている。「n!」は図7で表示される盤面チャートに対してつけられた名前である。タイル604では、入力0の整数を図7の定義盤面チャートに対して投入し、その結果を出力0として下に隣接するタイルに入力として渡すことを指示している。その結果は下に隣接したPRTのタイルにわたされ、その後の実行は、図2の例と同様に推移する。
【００４９】
図7は階乗を計算するタイル「n!」の実装盤面チャートを表している。701では、このチャートにつけられている名前が「n!」であることが表示されている。703では、このチャートの実行開始条件が上からのデータ到着であって、入力0として受け取ったデータを上から進入させることを表示している。702ではこのチャートの実行結果として出力が下から一つ出て、それを出力0に対応させることが表示されている。これら名前、入力条件、出力設定などは、新規タイル定義を作成するためのボタン203を押下したときに表示される図11のダイアログ1101で設定することができる。
【００５０】
図7の盤面チャートでは、階乗を再帰的に計算するアルゴリズムがデータフローチャートで定義されている。「自然数nの階乗」は、「n=1ならばn!=1」そして「n>1ならば、n!=n×(n-1)!」と計算でき、図7ではその計算ステップが表示されている。
【００５１】
703の条件によって上から進入してくる入力0の自然数は、タイル704に入力0として受理される。
【００５２】
704には、命令の表示がない。これは、COPY3という命令の簡便な表示である。タイルに命令の表示がなく、入力が一つで出力が3つあるタイルは、COPY3命令のタイルであると判別される。COPY3は入力0のデータをさらに二つ複製し、都合3個の出力を一つずつ出力0,出力1,出力2に渡す命令である。704では、入力0の自然数を複製して左に隣接するタイル706、右に隣接するタイル705、下に隣接するタイル708に供給する。
【００５３】
タイル705にも命令名がない。ただし、タイル704と異なり、入力が一つと同じではあるが、出力が一つしかない。これは、PASSという命令の簡便な表示である。タイルに命令の表示がなく、入力と出力がそれぞれ一つしかないタイルはPASS命令のタイルであると判別される。PASS命令は、入力0として受け取ったデータに何ら加工を施すことなく、そのまま出力0として隣接するタイルに渡す命令である。705のタイルは、704から受けたデータを707に受け渡している。
【００５４】
タイル706は、CONSTタイルで、オプションに自然数1が指定されている。このタイルは、704からのデータ入力を受けて、自然数1を、その下に隣接するPASS命令にわたす。この結果、706の出力0は、PASS命令のタイルを介して708に供給される。
【００５５】
タイル708は、GTという比較操作を行う命令のタイルである。GT命令は、入力を二つとり、データが二つとも到着したら実行可能となる。実行動作は、入力0と入力1を比較し、入力0＞入力1ならば論理値真を表すデータを、そうでなければ論理値偽を表すデータNILを出力0に出す。708の入力0は、この盤面に渡された数、入力1は、自然数1となり、これらタイル704、706、708の組み合わせで、この盤面に上から供給された自然数が1より大きいかどうかの比較を行っている。
【００５６】
タイル707は、SWITCH命令という条件分岐操作を行う命令のタイルである。SWITCH命令は入力を二つとり、データが二つとも到着したら実行可能となる。実行動作は、入力1がNIL以外のデータの時に、入力0のデータを出力0に流し、入力1がNILの場合には、入力0のデータを出力1に流すものである。出力は、出力0に流れれば、出力1からは何も出ず、出力1から流れれば、出力0からは何も出てこない。両方の出力から全くデータがでないことは、エラーが発生しない限り発生せず、両方からデータが出てくることもない。
【００５７】
707のSWITCH命令は、入力0としてこの盤面に供給された自然数が、入力1としてタイル708の比較動作の結果を受ける。比較結果が真、すなわち1より大きければ、入力0はタイル709へ供給され、1以下であれば、入力0は出力1として右隣のPASS命令タイルを通り、タイル715へ供給される。
【００５８】
ここでデータフローグラフは、タイル709を起点とするn×(n-1)!を計算するグラフとタイル715を起点とする1を結果として出力するグラフに分岐する。
【００５９】
タイル709は、命令文字列の表示がなく、入力が一つで出力が二つある。このようなタイルはCOPY2命令タイルとして判別される。COPY2命令は、入力0にデータが来た時点で実行可能となる。実行動作は、入力0のデータを複製し、出力0と出力1に一つずつ流すものである。COPY2タイルの簡便な表示では、入力と出力の矢印線のみ表示され、命令文字列の表示は省略される。
【００６０】
タイル709は、前記比較分岐グラフの結果として入力データが1より大きいときに実行される。実行された時には、入力0のデータは複製され、タイル710とタイル712へデータを引き渡す。
【００６１】
タイル710は、入力データの内容から1を減じる「n-1」命令タイルである。この命令は、入力0にデータが到達したときに実行可能となる。実行動作は、入力0のデータから1を減じた値を出力0として流すものであるタイル710は、タイル709から供給されたデータから1を引いた値を出力0としてタイル711に渡している。
【００６２】
タイル711は、定義済み名前付き盤面「n!」の実行を指示するタイルである。「n!」はこの盤面で定義されており、この呼び出しは再帰的である。タイル711はタイル710によって1減じられた数字に対して「n!」を自分自身の定義をもとに計算し、その結果を出力0として、右に隣接するタイル712に渡す。
【００６３】
このような再帰的な盤面チャートの呼び出しは、呼び出しのタイミングでチャートそのものを複製して別体のグラフで実行する方式や、グラフを複製せず、呼び出し履歴を階層的に記憶するスタックなどの構造を利用して実現する方式で実現できる。
【００６４】
タイル712は、二つのデータの積を計算する命令「A*B」を実行するタイルである。「A*B」は入力0と入力1の両方にデータが到着したときに実行可能となる。実行動作は、入力0と入力1の掛け算を実行してその結果を出力0に流すものである。タイル712は、タイル709から渡された数字nとタイル711から渡されてくるn-1の階乗の計算結果の積を計算し、結果を出力0として下に隣接するタイル714に渡す。
【００６５】
タイル714は、命令文字列の表示がなく、入力が二つ、出力が一つある。このようなタイルは、MRG2命令タイルの簡便な表示として判別できる。MRG2命令は、入力を二つ取り、どちらかの入力にデータが到着ときに、実行可能となる。実行動作は、入力されてきた入力0または入力1のデータを何ら加工することなく出力0に流すものであり、二つのデータフローのパスを一つに合流させる用途を持っている。
【００６６】
タイル714は、入力1としてタイル712の演算結果、すなわちn×(n-1)!の結果と、入力0としてタイル715からの定数1を受け取り、どちらかにデータが到着すれば、そのデータを出力0として左に隣接するタイル713に供給する。タイル714は二つのデータフローグラフ、タイル709を起点とするグラフとタイル715と複数のPASS命令タイルからなるグラフからのデータの合流点になっており、これら二つのグラフへのデータは、タイル707のSWITCHで切り分けられているため、どちらか一方のグラフにしかデータは供給されないような盤面チャートの構造になっている。
【００６７】
このn!の定義では、出力0が702で表示されているように下から出ていくことになっている。ただし、本実施例では、各方向からの入出力は、各辺に隣接したタイルの内の中央のタイルからのみ行うように限定されている。すなわち5×5の定義盤面では、上からの入出力は上辺中央のタイル、図7では、タイル704のみ行うことができる。同様に左方向の入出力は左辺中央のタイル。右方向のタイルは右辺中央のタイル、下方向は下辺中央のタイル、図7ではタイル713で行うように限定されている。本実施例では、各辺のタイル数は奇数に限定しているので、各辺には中央のタイルが必ず存在する。入出力の位置については、このような各辺の中央に限定せず、タイルに色などの区別のできる印をつけて判別するような方式でもよい。
【００６８】
上記の規則設定のため、タイル714の出力0は、直接下辺に接触せず、タイル713を介して下辺に接している。この結果この部分のグラフは屈曲している。
【００６９】
本実施例では、このようなデータフローグラフの構成で、階乗計算のロジックが表現され、図5の処理の流れを実現した解釈系によって、コンパイルなどの翻訳処理をせずに、データフローグラフのまま実行することができる。また、データフローグラフを機械語などに翻訳して実行する方式で実現してもよい。
【００７０】
図8は、図7の定義による「n!」を呼び出すためのメインライングラフである図6を変形させたものである。この図6と比較してグラフが屈曲しているが、表現されているグラフのロジックは図6のグラフと全く同等である。
【００７１】
チャート中央のタイル805は、名前付き盤名定義タイル「n!」を実行させるタイルである。このタイル805は、右に隣接するタイルの出力0である801を右からの入力0として受け取る。また、出力0は左方向に流され、左に隣接するタイルの右からの入力0である804で受け取られる。本実施例の解釈系では、このような隣接するタイル間のデータの受け渡しに関する処理を装備している。
【００７２】
図9は、この受け渡しに関する解釈実行部2003の処理のフローチャートである。この「出力渡し」処理は、タイルの実行により出力が生じた際に実行されるもので、図5のステップ505の処理に該当する。この手続きは出力が複数ある場合には、各出力に対して一回ずつ実行される。
【００７３】
この処理は発生した出力の方向によってステップ901から下にある条件検査により四つの手続きに分岐される。出力が左方向である場合には、手続き「左隣へ渡す」、右方向への出力の場合には、「右隣へ渡す」、下方への出力の時には「下隣へ渡す」上への出力時には「上隣へ渡す」が実行される。
【００７４】
図10は、ステップ902で呼び出される「左隣へ渡す」の処理のフローチャートである。ステップ1001でこの手続きで参照している渡されるデータを取り出す。ステップ1002では、左隣のタイル右方向の入力の識別子を取り出す。図8のチャートでは、右方向への出力801で渡されるデータがD、左隣のタイル805の入力の識別子0がPに該当する。ステップ1003では、渡す対象のデータDを左隣のタイルの入力Pとして代入する。その結果左隣のタイルにデータが到着するので、その機会に左隣のタイルの実行可能性についての左隣のタイルの命令の実行可能条件式でチェックを行うのがステップ1004である。その結果実行可能であると判定された時には、左隣のタイルは、実行可能であると分類され、次のタイルの実行ステップ図5の504での実行候補となる。
【００７５】
そのほかの方向へのデータ渡しの処理は、図10の処理中記述の「左と右」を「右と左」、「上と下」、「下と上」の関係で読み替えることで実現することができる。
【００７６】
次に本実施例において、これらデータフローグラフの作成と編集がタッチパネルのような位置指定手段と、タップとダブルタップのような二つの指示手段と仮想キーボードで行えることを示す。
【００７７】
図11は、新規に名前付き盤面タイルを作成する際の入力画面である。図2のボタン203は、押下すると新規の名前付き盤面の作成処理を行う。この際に必要な諸情報の入力のために、ダイアログ1101がモーダルダイアログとして表示される。この段階では、盤面の名前、盤面のサイズ、実行可能判定式、出力数と方向の設定を行い、盤面の作成編集は、1101での設定後、盤面表示208上での画面のタップあるいはダブルタップで行う。
【００７８】
1102は、テキスト入力項目であり、ここに盤面の名前を仮想キーボードで入力する。1103は、この名前付き盤面のサイズを指定するプルダウンメニューとなっており、3、5、7などの奇数が選択できる。本実施例では、盤面は縦横同じサイズと規定しているため、入力する数値は一つとなっているが、そのほかの場合には適切な数の適切な値の入力を促すことになる。1104は、この名前付き盤面の実行可能条件式であり、[００３５]で説明した形式の条件式を仮想キーボードで入力する。この項目については、入力を支援するような補助ダイアログのようなUI機構があってもよい。この例では、実行開始条件式は、入力が二つあり、入力0は上から、入力1は左から入ってくることとし、入力0と入力1の両方のデータが揃ったときに実行可能になると設定されている。1105は出力の数と方向の設定を行うテキスト入力項目であり、この例では、出力が二つあり出力0が下方向へ、出力1が右方向へ出ていくことが設定されている。この項目についても入力支援ダイアログの導入で文字入力量をさらに低減させることもできる。
【００７９】
1101のダイアログにあるOKボタンは、設定内容を確定として登録しダイアログを閉じる。Cancelボタンを押下すると、新規名前付き盤面作成操作そのものを中止する。
【００８０】
OKボタンの押下によって、新規名前付き盤面が作成されると盤面のすべてのタイルが空白で初期化された盤面が作成され、207にその盤面名が表示されるとともに、208に現在のその盤面の内容、初期状態としてすべてのタイルが空白のものが表示される。盤面の作成編集は208の各タイルをタップやダブルタップなどの指示をすることで行う。
【００８１】
図12は、各タイルをダブルタップしたときの表示内容である。1201はモーダル表示されるダイアログであり、208で表示される領域とほぼ同じ大きさで表示される。1202は、ダブルタップされたタイルと同じ内容がダイアログいっぱいに拡大表示される。1202に対してはシングルタップによる内容の編集が可能である。1201のOKボタンは押下すると、上記編集の結果をダブルタップされたタイルに反映させて、ダイアログを閉じる。Cancelボタンは、編集の結果を放棄し、ダブルタップされたタイルの内容は不変のままダイアログを閉じる。
【００８２】
図13は、208の各タイルをダブルタップしたとき、あるいは拡大表示された1202の領域の中央付近をシングルタップしたときにモーダル表示されるダイアログである。ここでは、タイルの中心に表示されている、命令とオプションを編集することができる。1302は、プルダウンメニューであり、それには、システムで用意されている命令と現在編集中のものも含めたすべての名前付き盤面タイルの名前が一覧表示され、ユーザーはその中から一つを選択する。1303は、オプションを入力するテキスト入力項目であり、内容を仮想キーボードで入力することもでき、また、いくつかの定数NIL、0、1などはプルダウンメニューからの選択により設定することもできる。
【００８３】
ダイアログ1301にあるOKボタンは、押下すると、編集内容を該当するタイルに反映させて1301を閉じる。Cancelボタンは、編集内容を放棄して1301を閉じる。
【００８４】
図14は1302をタップしたときにポップアップするメニューの例である。
1401のメニューには、システムで定義済みの命令と作成済みの名前付きの盤面名のすべてが選択可能なように表示される。作成済み盤面には、現在208に表示されている編集中の盤面の名前も含まれる。この例では、現在設定されている命令についてハイライト表示されている。これらの表示の順番については、名前の辞書式順や使用頻度の高い順に並べるなども考えられる。1402は「--EMPTY--」という項目で、これを選択すると該当するタイルが空白に設定され、リセットされる。
【００８５】
図21は、システムで定義済みの命令の一例である。これらの中には、シンボルや数値、文字列を操作する命令のほか、複合データ構造として二進木リストを取り扱うための命令であるFRIST、REST、CONS、EQ、ATOM?なども含まれている。命令EQでは、入力が数値同士の場合の比較機能を含めてもよい。
【００８６】
さらに図21のシステム定義済み命令の中には、電源の状態を読み取るON?、電源の投入と切断を指示するPOWER、現在の時間を取得するNOW、タイマーに時間を設定するSTTMRなどの命令も含まれている。これは、制御対象のエアコン機器102に対する制御命令に対応する。この例にくわえて、エアコンの温度設定を読み取る、あるいは設定するなどの命令も追加してもよい。
【００８７】
208の各タイルの上、あるいはタイルの拡大表示1202をシングルタップしたときの動作は、本実施例では、タップされた場所によって編集対象を区別している。図15はタップの場所に関する領域の説明である。1501はタイル全体の正方形領域であり、その内部は9個の領域に分割されている。このうち、中央の領域1502を「ゾーン1」と呼ぶこととし、以下上辺沿いの領域を「ゾーン2」、左辺沿いを「ゾーン3」、右辺沿いを「ゾーン4」、下辺沿いを「ゾーン5」と呼ぶことにする。この例では四隅の領域には名称はなくこの領域をシングルタップしても何も処理しないものとする。例示では、ゾーン1が大きめに設定されているが、各ゾーンの大きさを均等にしてもよく、これらの領域の大きさの設定は、利用者の操作性をもとに決定される。
【００８８】
上記[００８０]において、「1202の領域の中央付近をシングルタップ」という記述は、拡大表示領域1202のゾーン1をシングルタップすることに該当する。
【００８９】
本実施例では、ゾーン1のシングルタップは命令とオプションの編集を行う。また、ゾーン2をシングルタップすると上方向の入出力の設定を行う。同様に、ゾーン3は左方向、ゾーン4は右方向、ゾーン5は下方向の入出力の編集を行う。
【００９０】
各ゾーンをシングルタップしたときには、専用のダイアログを表示させ、入力0、入力1、入力2、入力3、出力0、出力1、出力2のいずれか一つを選択設定させるようにしてもよいが、本実施例ではより操作性に優れた手段を例示する。
【００９１】
本実施例では、各ゾーンがシングルタップされた時の動作として、すでにそのゾーンに対応する方向に入出力が設定されていた場合には設定を削除し、設定されていない場合には、図16のように設定された優先度順に未設定の入出力を設定するという規則で設定動作を行う。
【００９２】
例えば、入力二個、出力二個の命令に対するシングルタップ動作例は図22のようになる。初期状態として、2入力2出力の命令であるSWITCH命令だけが設定されている2201の状態にあるとする。次に最初にゾーン2をタップすると、2002のように上方向に入力0が設定される。次にゾーン4をタップすると、2203のように未設定の右方向に入力1が設定される。次にゾーン3をタップすると、2204のように未設定の左方向に出力0が設定される。さらに、ここでゾーン4を再度タップすると、2205のように、右方向の入力1の設定が削除され、右方向は未設定になる。次に、ゾーン5をタップすると、2206未設定の下方向に、まだ選択されていない有効な方向の内、図16に照らして最も優先度の高い、入力1、すなわち直前のタップ操作で設定先のなくなっていた入力位置が、まだアサインされていない出力1に優先して設定される。というような動作である。もちろんこの後、ゾーン4をタップすると、2207のように唯一残っているアサインされていない出力1が右方向に設定されるという動作を行う。
【００９３】
図17はこのようなシングルタップの動作についてのUI操作処理部2002の処理のフローチャートである。処理は最初にタップされた領域の判別ステップ1701から始まり、タップされた領域がゾーン1かそうでないかによって処理を切り替える。ゾーン1がタップされた場合にはステップ1702でダイアログ1301をモーダルで表示して命令とオプションの設定編集を行う。それ以外の領域がタップされた場合にはステップ1703の「方向編集」手続きにより、各方向の入出力設定が行われる。
【００９４】
図18は、表示領域がダブルタップされた時の動作についてUI操作処理部2002のフローチャートである。ダブルタップは、タップされた領域に限らず以下の動作を行う。前述のように、タイル表示領域をダブルタップすると拡大ダイアログ1201が表示されるが、その中の拡大タイル表示1202でもダブルタップされることもありうる。その場合には、重ねて拡大ダイアログを表示する必要はないので、何もせずに終了する。ステップ1801はそのための判断ステップで、タップされた表示領域が1202であった場合には、何もせずに終了する。タップされた領域が208の表示の内の一つのタイルであった場合には、ステップ1802で、タップされたタイルの拡大編集ダイアログ1201を表示させ、ユーザーに編集操作をさせたのち、OKボタンによって閉じられるときには、編集内容をタイルに反映させて終了する。
【００９５】
図19は、図17のステップ1703の「方向編集」の処理を示すフローチャートである。ここでは、ゾーン1以外の領域がシングルタップされた時の処理を行う。最初にステップ1901でタップされた領域がゾーン2,3,4,5のいずれでもない四隅の領域ではないことを確認している。もし、四隅の領域であるならば、何もせずに終了する。ゾーン2,3,4,5のいずれかであった場合は、さらにステップ1902で、そのゾーンに対応する方向に入出力が設定されているかどうかを判定する。もしすでに入出力が設定されている場合には、ステップ1903で設定されている入出力を解除する。解除された入出力はステップ1904での再割り当て候補に含まれるように処理される。タップされたゾーンに、入出力の設定がない場合には、ステップ1904で設定処理が行われる。ステップ1904では、まだ設定されたことのない入出力や解除されたことのある入出力の内、図16の優先度に照らして最も優先度の高い入出力を設定する。
【００９６】
本実施例ではデータフローグラフの図形式の実行を直接解釈実行するインタプリタ実行系を例示したが、別方法としてデータフローグラフを、一旦、機械語を代表とする手続き的な表現形式に翻訳変換したのちに実行するコンパイル機構を持つものであってもよい。
【００９７】
ここまでのユーザー操作は、表示に対するタップとダブルタップ、ポインティングディバイスの場合には、クリックとダブルクリック、そして名前付き盤面の名前の文字入力とオプション文字列の入力のみである。文字入力は単語や数字の入力がほとんどであり、仮想キーボードで簡単に入力できる長さである。
【００９８】
以上のような図式表現のプログラミング言語とユーザーインターフェースを提供することにより、物理キーボードを必要としない表示とポインティングディバイス、あるいはタッチパネルのみでのプログラミング環境が実現される。本質的には、画面上の位置を指定する手段と、二つの区別された指示ができる入出力装置であればよく、例えば、ゲームコントローラの十字キーとA、Bボタンでもよい。
【産業上の利用可能性】
【００９９】
本発明は、タッチパネルのみでのプログラミングを可能にする。これにより、タッチパネルにする物理機構的変更で、表示装置を搭載しているあらゆる機器を元々の外形をほとんど変えずにプログラマブルにすることができる。特に、通常キーボードを持たない、スマートフォンやタブレット端末あるいはスマートスピーカーでのプログラミング手段として利用することができる。これにより、これらの機器にインストールされている複数のアプリケーションを制御し、組み合わせることで新たなアプリケーションの作成を容易にすることができる。さらに、入力装置が前記位置指定と二種類の指示機能のみを有すればよいので、手に障害がある人が容易にプログラミングできるような環境としても使用することができる。
【０１００】
また、プログラミングそのものにパズル的な要素がもともと含まれていることから、スマートフォンやタブレット端末上でのパズルゲームとしての応用も考えられる。
【図１】
2020064353.tif 000003
【図２】
2020064353.tif 000004
【図３】
2020064353.tif 000005
【図４】
2020064353.tif 000006
【図５】
2020064353.tif 000007
【図６】
2020064353.tif 000008
【図７】
2020064353.tif 000009
【図８】
2020064353.tif 000010
【図９】
2020064353.tif 000011
【図１０】
2020064353.tif 000012
【図１１】
2020064353.tif 000013
【図１２】
2020064353.tif 000014
【図１３】
2020064353.tif 000015
【図１４】
2020064353.tif 000016
【図１５】
2020064353.tif 000017
【図１６】
2020064353.tif 000018
【図１７】
2020064353.tif 000019
【図１８】
2020064353.tif 000020
【図１９】
2020064353.tif 000021
【図２０】
2020064353.tif 000022
【図２１】
2020064353.tif 000023
【図２２】
2020064353.tif 000024
【手続補正書】
【提出日】平成30年10月22日(2018.10.22)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2020064353.tif 000025
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図２０
【補正方法】変更
【補正の内容】
【図２０】
2020064353.tif 000026
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図２２
【補正方法】変更
【補正の内容】
【図２２】
2020064353.tif 000027