XScript マニュアル · Chapter 3

title: "制御フロー — if / for / while" chapter: 3 images:

  • xscript-control-flow.png

制御フロー

XScript は ifforwhile の 3 つの基本制御構文をサポートします。文法は C# と同じで、 装置制御ロジックはほぼこの 3 つでカバーできます。

if

if (IO[START] == ON) {
    Log.Add("start pressed");
}
else if (IO[RESET] == ON) {
    Log.Add("reset pressed");
}
else {
    // 待機
}

よくあるパターン

  • センサチェックif (Cylinder[LOADER].ReadSensorA() == true)
  • エラーガードif (Motor[X].GetEndStatus() != 0) ShowError("E100");
  • フラグ判定if (initOk == false) return false;

for

繰り返し回数が既知のとき。

for (int i = 0; i < 10; i++) {
    Motor[X].MoveAbs(i * 10.0, true);
    Sleep(100);
}

while

条件が満たされるまで繰り返します。装置の待機ループで頻出。

int timeout = 0;
while (IO[READY] == OFF) {
    Sleep(50);
    timeout += 50;
    if (timeout > 5000) {
        ShowError("E_TIMEOUT");
        return false;
    }
}

注意: while(true) で無限ループを作るとスレッドが返らず、システムが停止する場合があります。 タイムアウトや中断条件を必ず入れてください。単純待機は Wait() API を優先。

ヒント

  • 本体は必ず { } で囲む — 後から行を足しやすい
  • ShowError() の直後は return false — 上位 Step がエラーを検知できるように
  • 長い条件は複数行に分けてコメントを添える