XScript 매뉴얼 · 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로 통일.
SYS 전체 함수 레퍼런스 (XUtilSystem)
C# 소스 기준 — XUtilSystem 본체 + _LinearConverter / _LoadCell / _ThreadSync partial 의 합집합.
시간 · 시각 (프로퍼티 / 함수)
| 항목 | 의미 |
|---|---|
SYS.TickCount / SYS.SecondCount | 시작 후 경과 ms / 초 |
SYS.GetTickCount() / SYS.GetTime() | 현재 tick / 시각 |
SYS.GetElasped(startTick) | 경과 ms |
SYS.DateString / SYS.TimeString / SYS.DateTimeString / SYS.DateTimeMsecString / SYS.DateTimeFilename | 자주 쓰는 포맷 |
SYS.CurrentDateTimeInISO | ISO-8601 |
SYS.GetDateTimeStringFormat(format) | 사용자 포맷 |
SYS.GetAdjustedDate(dateString, offset) | 일자 오프셋 |
SYS.ConvertSecondsToTimeString(sec) | 초 → HH:mm:ss |
SYS.Year / SYS.Month / SYS.Day / SYS.Hour | 분리된 값 |
SYS.RunTimeString / SYS.StopTimeString / SYS.IdleTimeString / SYS.ErrorTimeString | 누적 시간 (시스템 통계) |
시스템 / 모듈 제어
| 함수 | 의미 |
|---|---|
SYS.IsRunning (속성) | 시스템 가동 여부 |
SYS.Start() / SYS.StartStepRun() / SYS.Stop() / SYS.Exit() / SYS.ExitMonitorModule() | 전체 제어 |
SYS.SetError(module="") / SYS.ResetError() | 시스템 에러 상태 토글 |
SYS.LastErrorCode / SYS.LastErrorMsg / SYS.LastErrorModuleName (속성) | 마지막 에러 |
SYS.StartModule(module) / StopModule(module) / StartModuleStepRun(module) / ExitModule(module) | 단일 모듈 제어 |
SYS.SetModuleError(module) / ResetModuleError(module) | 모듈 에러 |
SYS.SetModuleBackground(module, value) | 백그라운드 동작 토글 |
SYS.SequenceModuleCountOnWaiting / SequenceModuleCountOnRunning (속성) | 시퀀스 카운트 |
SYS.StopManualThread() | 매뉴얼 스레드 종료 |
SYS.ManualThreadExitSignal (속성) | 매뉴얼 스레드 종료 신호 |
SYS.GetThreadCount(threadName) / (moduleName, seqOrFuncName) | 스레드 개수 |
시스템 정보 · 라이선스 · 진단
| 항목 | 의미 |
|---|---|
SYS.QMSVersion / SYS.ProjectVersion | 버전 정보 |
SYS.GetExeFileVersion() / GetExeAssemblyVersion() | 실행파일 버전 |
SYS.IsProjectOpen / ProjectBaseDirectory | 프로젝트 상태 |
SYS.LicenseKeyCount / LicenseMotorCount / LicensePermitRemainDays / TrialLicenseEnabled / HaveProjectCodeLicense / HaveLicense | 라이선스 |
SYS.GetAvailableRamSize() / GetProcessMemorySize() / GetManagedMemorySize() / GetTotalMemorySize() | 메모리 |
SYS.AddThreadIdLog(prefix, log) / AddMemoryLog() / LogSystemInfo() / LogVersionInfo() | 진단 로그 |
SYS.IsVisualStudioRunning(update=false) | 디버거 부착 여부 |
가동률 (UPH)
| 함수 | 의미 |
|---|---|
SYS.ClearUphData() / AddUphData(uph) / GetAverageUph() | UPH 통계 |
SYS.SetBoost() / ResetBoost() | 부스트 모드 |
파일 / 디렉터리
| 함수 | 의미 |
|---|---|
SYS.MakeFullPath(pathname) / IsFullPath(path) | 경로 변환 |
SYS.GetCurrentDirectory() | 현재 디렉토리 |
SYS.GetFileName(path) / GetFileNameWithoutExtension(path) / GetDirectoryName(path) | 분해 |
SYS.ChangeFileExt(filepath, ext) | 확장자 교체 |
SYS.GetUpdateFileName(filename) | 업데이트 파일명 생성 |
SYS.GetValidFileName(fileName) | 안전한 파일명 |
SYS.GetRelativePath(baseFolder, path) / GetAbsolutePath(baseFolder, path) | 절대/상대 변환 |
SYS.Combine(p1, p2, p3="", p4="") | 경로 결합 |
SYS.ExistsFile(path) / ExistsDirectory(path) | 존재 확인 |
SYS.CreateFile(path) / DeleteFile(file) / CopyFile(src, dst, overwrite) / CopyFiles(srcDir, pattern, dstDir, overwrite) | 파일 |
SYS.MoveFile(src, dst, overwrite=true) / RenameFile(src, dst, overwrite=true) | 이동/리네임 |
SYS.SetFileHidden(path, setHidden=true) | 숨김 속성 |
SYS.CreateDirectory(path) / DeleteDirectory(path, recursive) / ForceDeleteDirectory(path, recursive) / MoveDirectory(src, dst) | 디렉터리 |
SYS.CopyDirectory(src, dst, overwrite=true) | 디렉터리 복사 |
SYS.GetFiles(path) / (path, pattern) / (path, pattern, subDirectory) | 파일 목록 |
SYS.GetDirectories(path) / (path, pattern) / (path, pattern, subDirectory) | 디렉토리 목록 |
SYS.DeleteFiles(dir, remainCount) | 오래된 파일 정리 |
SYS.OpenExplorer(path) | 탐색기 열기 |
SYS.Execute(file, param) | 외부 실행 |
텍스트 파일 입출력
| 함수 | 의미 |
|---|---|
SYS.ReadAllLines(path) / ReadAllText(path) | 읽기 |
SYS.WriteAllLines(path, data) / WriteAllText(path, data) | 쓰기 |
SYS.AppendAllLines(path, data) / AppendAllText(path, data) / AppendLine(path, data) | 추가 |
SYS.IsJsonFile(filepath) | JSON 파일 여부 |
파라미터 (XParam)
| 함수 | 의미 |
|---|---|
SYS.SaveParam(managerKey) / LoadParam(managerKey) | 임의 키 |
SYS.SaveJobFileParam() / LoadJobFileParam() | JobFile 파라미터 |
SYS.SaveSetupParam() / LoadSetupParam() | Setup |
SYS.SaveMasterParam() / LoadMasterParam() | Master |
SYS.SaveRunParam() / LoadRunParam() | Run |
SYS.GetParamValueObjectRef(dataName, remainLog=true) | XParamValue 객체 |
SYS.SetParamValue(dataName) / (dataName, string/int/double/bool) | 값 설정 |
SYS.GetParamValue(dataName, ref string/int/double/bool) | 값 읽기 |
SYS.SaveSysVisionInfo() / SaveJobVisionInfo() | Vision 정보 저장 |
SYS.SaveGlobalData() / LoadGlobalData() | 전역 데이터 |
모듈 간 통신
| 함수 | 의미 |
|---|---|
SYS.SetModuleVar(name, string/int/double/bool) | 모듈 변수 쓰기 |
SYS.GetModuleVar(name, ref string/int/long/double/bool) | 모듈 변수 읽기 |
SYS.GetModuleVarXData(dataName) | XData 반환 |
SYS.RunScriptFunction(module, function) / (module, function, string/int/long/double/bool) | 다른 모듈 함수 호출 |
HTTP
| 함수 | 의미 |
|---|---|
SYS.SendHttpGet(url, token="") | GET |
SYS.SendHttpPost(url, data, token="", type="") | POST |
SYS.SendHttpPatch(url, data, token="", type="application/json") | PATCH |
SYS.SendHttpDelete(url, token="") | DELETE |
SYS.HTTP_ERROR_STR (속성) | 에러 prefix ("[HTTP-ERROR]") — 반환값 비교용 |
SYS.LastHttpError (속성) | 마지막 에러 메시지 |
사운드
| 함수 | 의미 |
|---|---|
SYS.PlaySound(fileName) / PlaySoundLoop(fileName) / StopSound() | wav 재생 |
모터 / IO 일괄 제어
| 함수 | 의미 |
|---|---|
SYS.SetSpeedAll(speed) / (speed, percent) | 모든 모터 속도 |
SYS.ServoOnAll(on) (SetServoOnAll) | 서보 일괄 On/Off |
SYS.ResetMotorHomeDoneAll() | Home Done 리셋 |
SYS.StopMotorAll() / StopMotorEmgAll() | 일괄 정지 |
SYS.ClearAlarmAll() / GetAlarmCount() | 알람 |
SYS.GetMotorNames() / GetIoNames() | 이름 목록 |
SYS.CheckIOName(name) / CheckMotorName(name) / CheckCylinderName(name) / CheckIntefaceName(name) / CheckDeviceContainerName(name) | 이름 유효성 |
메시지 / 에러
| 함수 | 의미 |
|---|---|
SYS.ShowError(buttonType, code, module, format, args...) | 에러 다이얼로그 (전역 ShowError 와 같이 사용) |
기타 (난수 · 해시 · CRC)
| 함수 | 의미 |
|---|---|
SYS.GetRandom() / (min, max) / GetRandomDouble() | 난수 |
SYS.GetSha256Hash(input) | SHA-256 |
SYS.CalcCRC16(data, length) | Modbus CRC-16 |
SYS.UpdateCustomData(command, index) | 커스텀 데이터 갱신 |
Linear Converter / LoadCell / Thread Sync
XUtilSystem_LinearConverter.cs / _LoadCell.cs / _ThreadSync.cs 의 함수들도 같은 SYS.* 이름공간에서 호출됩니다 — 양산 환경에서만 사용되므로 별도 챕터(또는 LCVT 는 MATH 의 LCVT_* 와 함께) 에서 다룹니다.