
Programmable Block を試す
プログラマブルブロックを使う練習として、3 つのローターを持つアームを作って実験をしました。ボタンパネルの各ボタンから、制御するローターの名前と回転速度をコンマで区切った文字列をコマンドライン引数としてプログラムを呼びます。ソースコードは次の通りです。

public void Main(string argument, UpdateType updateSource)
{
var args = argument.Split(',');
var target = GridTerminalSystem.GetBlockWithName(args[0]) as IMyMotorStator;
float v = float.Parse(args[1]);
if (target != null) {
if (target.GetValueFloat("Velocity") == 0){
target.SetValueFloat("Velocity", v);
}
else {
target.SetValueFloat("Velocity", 0);
}
}
}
まず、argument からコンマをセパレータに指定して args に文字列を切り出します。操作対象のローター名は args[0] として得られ、args[1] として得られた文字列を float 型に変換して回転速度とします。また、切り出したローター名 args[0] を使って、GetBlockWithName メソッドで操作対象のローターを取得します。
var args = argument.Split(',');
var target = GridTerminalSystem.GetBlockWithName(args[0]) as IMyMotorStator;
float v = float.Parse(args[1]);
ローターブロックの取得に成功したら、ローターの回転を制御します。GetValueFloat("Velocity") でローターの現在の回転速度を調べることで、回転しているか停止しているかを判定しています。停止していればコマンドライン引数で指定された速度をローターの Velocity プロパティーに設定し、すでに回転していたらローターの回転を停止します。
if (target != null) {
if (target.GetValueFloat("Velocity") == 0){
target.SetValueFloat("Velocity", v);
}
else {
target.SetValueFloat("Velocity", 0);
}
}