XScript マニュアル · 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# フォーマット文字列を適用
xscript
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ダウンロードフォルダ
xscript
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直近のエラーメッセージ
xscript
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)軸の存在確認
xscript
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バージョン
xscript
if (SYS.IsRunning == false)
{
    return true;
}
 
SYS.LastErrorCode = 0;
SYS.LastErrorMsg = "";
SYS.ResetError();

実践例 — HTTP + タイムアウト + ロギング

xscript
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 との比較で成功/失敗を区別(例外スローではない)。
  • モジュール間の変数 · 関数呼び出しは 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.CurrentDateTimeInISO8601ISO-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_* と共に)で扱います。