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 · 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로 하드웨어 디바운스 시간 확보.