用意するもの
- LCD Panel、Wide LCD Panel または Text Panelの何れか一つ
- Programmable Block を一つ
ターミナルを開き Programmable Block で Edit をクリック
下記のプログラムを記入します。
const string TEXT = "Hello, world!\r\n"; // Display Text
void Main(string argument) { IMyTextPanel tpTarget = GridTerminalSystem.GetBlockWithName(argument) as IMyTextPanel; if (tpTarget != null) { tpTarget.WritePublicText(TEXT, true); } }
続いて Argument(引数) の項目に、テキストを表示したいパネルの名前を入力します。
その後ターミナルを(LCD or Text)パネルに切り替えます。
まずはパネルの所有権(Owner)を me(自分自身) に切り替えます。
すると Show Text on Screen(スクリーンに何を表示するか?) の項目が選択可能になるので、Public(公開)を選択します。
上記の操作の後、パネルの所有権を Nobody(所有者なし) に設定しなおします。
Programmable BlockからRun(プログラムの実行)をクリックするたびに、パネルに「Hello, world!」の文字列が一行づつ追加されていきます。
プログラム概要
- 出力先のテキストブロック(IMyTextPanel が実装されているインスタンス)を取得する。
- 取得に成功しているかチェック(対象の名前のブロックがテキストパネルでない場合は null になるので if文下のブロックは実行されない)
- 対象のテキストパネルの公開文に文字列を追加する
- 対象のテキストパネルの公開文に文字列を追加する
- 出力先のパネルを引数として設定することで、パネルが複数存在する場合にどのパネルに表示するかをプログラムブロック側あるいはボタンやタイマーで指定できる
- 表示内容は定数としてハードコーディングしてある。柔軟性を持たせたい場合は、Storage変数やPrivate Textに文字列を記入しておき、状況に合わせて改行コードやタブ文字等で分割して表示させる等するとよい
- 上手くいかなかった場合の処理は記載していないので、使用者は上手くいかなかった場合にどこが問題なのか把握しづらい
コード解説
- 一行目 const string TEXT = "Hello, world!\r\n";
- const
- プログラム内で使用する定数を定義すること宣言
- string
- 定数は文字列である
- TEXT
- 定数の名前
- "Hello, world!\r\n"
- 定数の中身。ここでは二重引用符で囲まれた Hello, world! と改行を表すコード
- 三行目 void Main(string argument)
- void
- 返値を持たないメソッドであることを宣言
- Main
- メソッド名
- string argument
- 文字列型の引数として変数 argument を持つことを定義。このargumnetはProgrammable Blockの Argument の値が格納される。記入しない場合は空文字列
- 五行目 IMyTextPanel tpTarget = GridTerminalSystem.GetBlockWithName(argument) as IMyTextPanel;
- GridTerminalSystem.GetBlockWithName(argument)
- Programmable Blockが置いてあるグリッド(船あるいはステーション)から、対象の名前を持つブロックを取得する。
- as IMyTextPanel
- メソッドの実行結果の返値を IMyTextPanel インターフェイスを実装したクラスのインスタンスとして変換する。変換できない場合は null となる。
- 六行目 if (tpTarget != null)
- if (tpTarget != null)
- tpTargetの値がnullではないか確認する。
- 八行目 tpTarget.WritePublicText(TEXT, true);
- tpTarget.WritePublicText(TEXT, true);
- tpTarget変数に格納されたパネルのパブリックテキストに文字を書き込むように命令。書き込みは追加の形を取る。