XScript マニュアル · Chapter 20

DIO — デジタル入出力

IO["名前"] でアクセスします。IO Editor で登録した名前で、個別ビット単位の入出力を 読み書きします。代入演算子(=)でも出力を書き込むことができ、bool コンテキストでは 自動的に現在値を返します。

基本例

xscript
// OUTPUT 制御
IO["O_Blow1"] = OFF;
IO["O_Blow2"] = ON;
IO["O_Blow2"].ToggleBit();
 
// INPUT チェック
if (IO["I_IFReadyPrev"] == false)
{
    return false;
}
 
// デジタル出力に対する条件文
if (IO["O_DigitalOutput"])
{
    // ON の場合
}
else
{
    // OFF の場合
}

実践例 — コンベアの器検知待ち

WaitConti でセンサーが 2 秒連続 ON になるまで待機し、制限時間内に検知できなければ(falseShowError でエラーダイアログを表示してステップを終了するパターンです。WaitConti(waitOn, timeOut, contiTime) は信号が対象状態を contiTime の間連続維持するまで最大 timeOut 待機し、途中で信号が途切れると継続時間を測り直します(瞬間的なチャタリングは無視)。

xscript
// センサーが 2 秒(2000ms)連続 ON になるまで最大 10 秒待機
if (IO[cnvSensorName].WaitConti(true, 10000, 2000) == false)
{
    // タイムアウト — 器を検知できず。エラーダイアログを表示してステップ終了
    ShowError(EB_Reset, 100, "conveyor bowl detect timeout");
    return false;
}
 
Log($"{cnvSensorName} : bowl detected");

待機せず「今 2 秒連続 ON か」だけを即座に確認するには CheckContiOn を使います。 ShowError(ボタンセット, コード, メッセージ) はエラーダイアログを表示します — SYS 参照。

イベント関数の連結

IO Editor で指定するか、スクリプト初期化時に EventFunctionName で連結します。

xscript
FUNCTION LinkCheckFunction()
{
    IO["I_U1CnvBowlDetect"].EventFunctionName = "IOEvent_CnvBowlSens";
    IO["I_U2CnvBowlDetect"].EventFunctionName = "IOEvent_CnvBowlSens";
}
 
FUNCTION IOEvent_CnvBowlSens(string name)
{
    if (IO[name] == ON)
    {
        // センサ ON 時の処理
    }
    return true;
}

メソッド

メソッド説明
bool ReadBit(void)現在のビット値を読み取り
bool WriteBit(bool SetOn)ビット出力
bool ToggleBit(void)現在値を反転
bool Wait(bool waitOn, int TimeOut)指定状態になるまで待機(ms)
bool WaitConti(bool waitOn, int TimeOut, int ContiTime)指定状態が ContiTime 以上継続するまで待機
bool CheckContiOn(int timeMsec)直近 timeMsec 間ずっと ON だったかを即座に確認(待機しない)
bool CheckContiOff(int timeMsec)直近 timeMsec 間ずっと OFF だったかを即座に確認(待機しない)
bool Contains(string keyword)名前にキーワードを含むか
bool InitBoard(void)ボード初期化
bool SetDelayedOn(int delay) / bool SetDelayedOff(int delay)ON/OFF 遅延設定(ms)
void RunEventFuncion(bool onoff)イベント関数の手動実行
void ClearLinkModule(void)連結されたイベント関数の解除

プロパティ

プロパティ説明
Name · ID · Descriptionstring識別
BoardType · Module · Indexstring/int物理位置
GroupNamestringグループ
Inversebool信号反転の有無
CheckFunctionName · EventFunctionNamestring連動関数名
MessagestringUI 表示メッセージ
SubModelstringモデル区分
InitOkbool初期化完了
Infostringデバッグ情報

ヒント

  • 直接の ReadBit() ループは避け Wait(true, timeout) を使用 → CPU 占有を低減。
  • 信号が安定するまで待つなら WaitConti、今安定しているかを即座に確認するなら CheckContiOn·CheckContiOff
  • Inverse = true に設定された信号は、スクリプトでは既に反転済みの値として扱われます。
  • 論理タイミングが重要な箇所は SetDelayedOn/Off でハードウェアのデバウンス時間を確保します。