XScript 手册 · Chapter 2
语言基础
XScript 程序由四种构成要素组成。
| 要素 | 说明 |
|---|---|
| Variable | 全局/局部变量。保存设备状态、计数、标志等 |
| Function | 可复用的逻辑单元 |
| Sequence | 状态迁移单元,由主时序依次执行 |
| Step | Sequence 内部的细分步骤 |
支持类型
| 类型 | 说明 |
|---|---|
int · uint | 整数 |
double | 浮点数 |
bool | true/false(或 ON/OFF) |
string | 字符串。支持插值 $"Hello {name}" |
array | 动态数组 |
变量
全局变量在 Variable 编辑器中声明,局部变量在函数内部声明。左大括号必须放在下一行。
int count = 0;
bool initOk = false;
double targetPos = 100.0;
string jobName = "default";
// 模块变量访问
MachineLoaded = false;
SS.UnitCount = 10; // 安装参数
SYS.DateString; // 系统值常量
常量在 DATA.Const 或 Constant Editor 中声明,在全局以只读方式引用。
// 例: MAX_NUM_UNIT, DEVICE_NAME, SUPPLY_STEP 等被注册为常量
int n = MAX_NUM_UNIT;
string name = DEVICE_NAME;函数
使用 FUNCTION 关键字声明。左大括号在下一行。
FUNCTION CheckLoad()
{
if (IO["LOAD_SENSOR"] == ON)
{
return true;
}
return false;
}
FUNCTION MoveToPos(double pos, bool wait)
{
MOTOR["M_X"].SetSpeed("RUN");
if (MOTOR["M_X"].MoveAbs(pos, wait) == false)
{
return false;
}
return true;
}- 返回类型可自动推导(惯例返回
bool)。 - 支持按名称传参:
MoveToPos(/*pos*/100.0, /*wait*/true)。
时序与步骤
Sequence 是主循环重复执行的块,Step 是其内部状态。
使用 goto "STEP_名称" 跳转到下一步。
////SEQUENCE,Seq
////STEP,STEP_Idle
UpdateData();
Sleep(100);
UnitData::UnitStatus[unitIndex] = "--";
if (unitIndex >= SS.UnitCount)
{
Sleep(2000);
return false;
}
if (unitIndex > 0)
{
goto "STEP_Get"; // 第二个及之后的单元直接进入接收
}
////STEP,STEP_WaitOrder
Sleep(200);
if (IO[cnvSensorName].CheckContiOn(2000) == false)
{
return false;
}
UnitData::UnitStatus[unitIndex] = "等待订单";
if (ProcessOrder() == false)
{
return false;
}
////STEP,STEP_Get
// ... 接收动作- 每个步骤都像独立函数一样执行,
return false结束当前循环。 goto "STEP_名称"跳转到下一步,下次循环从该步骤开始。- 模块变量(如
unitIndex)在步骤之间保留。
View 模块结构
画面(View)模块由 Design / Variable / Functions 三部分组成:
- Design — XAML 布局
- Variable — 画面绑定用变量
- Functions —
OnShow,OnHide,OnTimer,OnClickEvent等事件处理器
FUNCTION OnShow(string sender, int tag, array params)
{
UpdateOrderDisplay();
ViewSetup::UpdateUnitList();
}
FUNCTION OnTimer(string sender, int tag, array params)
{
UpdateOrderDisplay();
count++;
}