XScript 매뉴얼 · Chapter 50

title: "SYS — 시스템 글로벌 · 유틸리티" chapter: 50

SYS — 시스템 글로벌 객체

SYS 는 시간·파일·HTTP·모듈 실행 등 시스템 레벨 유틸리티 를 모아둔 글로벌 객체입니다. 프로젝트 전반에서 가장 자주 사용되며, 스크립트에서 운영 정보와 OS 자원을 통일된 방식으로 접근할 수 있게 합니다.

시간 · 틱

프로퍼티 / 메서드반환설명
SYS.TickCountint시스템 시작 이후 경과 ms
SYS.GetTickCount()int동일 (함수 형태)
SYS.GetElasped(int startTick)intTickCount - startTick
SYS.SecondCountint초 단위 카운터
SYS.Year / SYS.Month / SYS.Day / SYS.Hourint현재 날짜 · 시각
SYS.DateStringstringYYYYMMDD
SYS.TimeStringstringHHMMSS
SYS.DateTimeStringstringYYYYMMDD_HHMMSS
SYS.DateTimeFilenamestring파일명용 안전 형식
SYS.DateTimeMsecStringstring밀리초 포함
SYS.CurrentDateTimeInISO8601stringISO 8601
SYS.GetDateTimeStringFormat(string format)stringC# 포맷 문자열 적용
int start = SYS.TickCount;
DoSomething();
int elapsed = SYS.GetElasped(start);
Log($"Elapsed: {elapsed} ms");

파일 · 경로

메서드설명
bool ExistsFile(string path)파일 존재
string ReadAllText(string path)전체 읽기
bool WriteAllText(string path, string data)전체 쓰기
array ReadAllLines(string path)줄 배열로
bool WriteAllLines(string path, array lines)줄 배열로 쓰기
bool AppendLine(string path, string data)줄 추가
bool CreateDirectory(string path)디렉토리 생성
bool DeleteFile(string path)삭제
bool CopyFile(string src, string dest, bool overwrite)복사
string Combine(string path1, string path2)경로 결합
string GetFileName(string path)파일명만
string GetFileNameWithoutExtension(string path)확장자 제외
string GetValidFileName(string name)파일명으로 쓸 수 없는 문자 치환
string ProjectBaseDirectory프로젝트 루트
string DownloadsFolderPath다운로드 폴더
string file = SYS.Combine(SYS.ProjectBaseDirectory, "JSON\\cube_machine.json");
if (SYS.ExistsFile(file) == false)
{
    LogError($"Not found: {file}");
    return false;
}
string text = SYS.ReadAllText(file);

HTTP

메서드설명
string SendHttpGet(string url) / SendHttpGet(string url, string token)GET
string SendHttpPost(string url, string data) / SendHttpPost(string url, string data, string token)POST
string SendHttpDelete(string url, string token)DELETE
string SendHttpPatch(string url, string data, string token)PATCH
SYS.HTTP_ERROR_STR에러 반환 시 비교값
SYS.LastHttpError마지막 에러 메시지
string url = SS.MachineApiServer + "/machine-status";
string result = SYS.SendHttpPost(url, data, SS.HttpToken);
if (result == SYS.HTTP_ERROR_STR)
{
    LogError($"ERROR: {SYS.LastHttpError}");
    return false;
}

파라미터 · 모듈 실행

메서드설명
bool SaveSetupParam(void)셋업 파라미터 저장
bool LoadJobFileParam(void)잡 파일 로드
bool GetParamValue(string name, ref string value)파라미터 조회
bool SetModuleVar(string name, value) / bool GetModuleVar(string name, ref value)타 모듈 변수 접근
bool RunScriptFunction(string module, string func, args...)타 모듈 함수 실행
bool StartModule(string module)모듈 재시작
void StopMotorAll(void)전 축 정지
bool CheckMotorName(string name)축 존재 확인
if (SYS.RunScriptFunction(moduleName, "ParseJsonToModuleData", data) == false)
{
    ShowError(EB_Ok, 107, moduleName);
    return false;
}

시스템 상태 · 에러

프로퍼티타입설명
SYS.IsRunningbool자동 운전 중
SYS.ManualThreadExitSignalbool수동 스레드 종료 신호
SYS.LastErrorCodeint마지막 에러 코드
SYS.LastErrorMsgstring마지막 에러 메시지
SYS.LastErrorModuleNamestring에러 발생 모듈
SYS.ProjectVersion / SYS.QMSVersionstring버전
if (SYS.IsRunning == false)
{
    return true;
}
 
SYS.LastErrorCode = 0;
SYS.LastErrorMsg = "";
SYS.ResetError();

실전 예제 — HTTP + 타임아웃 + 로깅

FUNCTION GetServerOrderCount()
{
    string url = $"{SS.HttpOrderAddr}/order-queue/machines/{SS.MachineId}/status";
    int s = SYS.TickCount;
    string data = SYS.SendHttpGet(url, SS.HttpToken);
 
    if (data == SYS.HTTP_ERROR_STR)
    {
        if (SS.OrderMode == 1)
        {
            LogError($"GetServerOrderCount Error :[{SYS.TickCount-s}ms] {SYS.LastHttpError}");
        }
        return -1;
    }
 
    int count = Order::GetOrderCount(data);
    return count;
}

  • 장기 대기에는 SYS.GetElasped(startTick) 로 경과 관리 — Sleep 중에도 ManualThreadExitSignal 체크.
  • 파일 IO 는 반드시 ExistsFile 선행 확인. 쓰기 전에는 CreateDirectory 로 부모 디렉토리 보장.
  • HTTP 호출은 SYS.HTTP_ERROR_STR 비교로 성공/실패 구분 (예외 throw 아님).
  • 모듈 간 변수·함수 호출은 SetModuleVar / GetModuleVar / RunScriptFunction 로 통일.