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 인 경우
}

실전 예제 — 컨베이어 그릇 감지 대기

센서가 2초 연속 ON 될 때까지 WaitConti 로 대기하고, 제한 시간 안에 감지하지 못하면(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 · 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 로 하드웨어 디바운스 시간 확보.