XScript 매뉴얼 · Chapter 50
title: "SYS — 시스템 글로벌 · 유틸리티" chapter: 50
SYS — 시스템 글로벌 객체
SYS 는 시간·파일·HTTP·모듈 실행 등 시스템 레벨 유틸리티 를 모아둔
글로벌 객체입니다. 프로젝트 전반에서 가장 자주 사용되며, 스크립트에서
운영 정보와 OS 자원을 통일된 방식으로 접근할 수 있게 합니다.
시간 · 틱
| 프로퍼티 / 메서드 | 반환 | 설명 |
|---|---|---|
SYS.TickCount | int | 시스템 시작 이후 경과 ms |
SYS.GetTickCount() | int | 동일 (함수 형태) |
SYS.GetElasped(int startTick) | int | TickCount - startTick |
SYS.SecondCount | int | 초 단위 카운터 |
SYS.Year / SYS.Month / SYS.Day / SYS.Hour | int | 현재 날짜 · 시각 |
SYS.DateString | string | YYYYMMDD |
SYS.TimeString | string | HHMMSS |
SYS.DateTimeString | string | YYYYMMDD_HHMMSS |
SYS.DateTimeFilename | string | 파일명용 안전 형식 |
SYS.DateTimeMsecString | string | 밀리초 포함 |
SYS.CurrentDateTimeInISO8601 | string | ISO 8601 |
SYS.GetDateTimeStringFormat(string format) | string | C# 포맷 문자열 적용 |
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.IsRunning | bool | 자동 운전 중 |
SYS.ManualThreadExitSignal | bool | 수동 스레드 종료 신호 |
SYS.LastErrorCode | int | 마지막 에러 코드 |
SYS.LastErrorMsg | string | 마지막 에러 메시지 |
SYS.LastErrorModuleName | string | 에러 발생 모듈 |
SYS.ProjectVersion / SYS.QMSVersion | string | 버전 |
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로 통일.