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 になるまで待機し、制限時間内に検知できなければ(false)ShowError でエラーダイアログを表示してステップを終了するパターンです。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 · Description | string | 識別 |
BoardType · Module · Index | string/int | 物理位置 |
GroupName | string | グループ |
Inverse | bool | 信号反転の有無 |
CheckFunctionName · EventFunctionName | string | 連動関数名 |
Message | string | UI 表示メッセージ |
SubModel | string | モデル区分 |
InitOk | bool | 初期化完了 |
Info | string | デバッグ情報 |
ヒント
- 直接の
ReadBit()ループは避けWait(true, timeout)を使用 → CPU 占有を低減。 - 信号が安定するまで待つなら
WaitConti、今安定しているかを即座に確認するならCheckContiOn·CheckContiOff。 Inverse = trueに設定された信号は、スクリプトでは既に反転済みの値として扱われます。- 論理タイミングが重要な箇所は
SetDelayedOn/Offでハードウェアのデバウンス時間を確保します。