4.6 C99 BasScript 构造器
概述
C99 BasScript 使用 ArmBasScriptHandle* 和 ArmBasExtraParamHandle* 表示构造器句柄。它们是本地脚本文本构造对象,只有执行脚本时才需要传入 ArmHandle* 。
对应头文件:
include/c_arm_bas_script.h
基础接口
Arm_BasScript_Create
c
int Arm_BasScript_Create(ArmBasScriptHandle** outScript);| 项 | 说明 |
|---|---|
| 描述 | 创建空 BAS 脚本构造器。 |
| 请求参数 | outScript : ArmBasScriptHandle** ,输出脚本构造器句柄,成功时写入非空指针 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_CreateWithName
c
int Arm_BasScript_CreateWithName(const char* scriptName, ArmBasScriptHandle** outScript);| 项 | 说明 |
|---|---|
| 描述 | 创建带脚本名的 BAS 脚本构造器。 |
| 请求参数 | scriptName : const char* ,脚本名称字符串outScript : ArmBasScriptHandle** ,输出脚本构造器句柄,成功时写入非空指针 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Destroy
c
void Arm_BasScript_Destroy(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 销毁 BAS 脚本构造器。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | 无返回值 |
Arm_BasScript_Reset
c
int Arm_BasScript_Reset(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 重置 BAS 脚本构造器。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_SetName
c
int Arm_BasScript_SetName(ArmBasScriptHandle* script, const char* scriptName);| 项 | 说明 |
|---|---|
| 描述 | 设置 BAS 脚本名称。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄scriptName : const char* ,脚本名称字符串 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_GetName
c
int Arm_BasScript_GetName(ArmBasScriptHandle* script, char* outBuf, size_t bufSize);| 项 | 说明 |
|---|---|
| 描述 | 读取 BAS 脚本名称。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄outBuf : char* ,输出字符串缓冲区,由调用方分配bufSize : size_t ,输出缓冲区大小,包含结尾 \0 的空间 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
| 备注 | 字符串输出使用调用方提供的缓冲区,缓冲区不足时按状态码返回。 |
Arm_BasScript_AppendLine
c
int Arm_BasScript_AppendLine(ArmBasScriptHandle* script, const char* line);| 项 | 说明 |
|---|---|
| 描述 | 追加单行 BAS 脚本文本。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄line : const char* ,单行 BAS 脚本文本 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_AppendLines
c
int Arm_BasScript_AppendLines(ArmBasScriptHandle* script, const char* const* lines, size_t lineCount);| 项 | 说明 |
|---|---|
| 描述 | 追加多行 BAS 脚本文本。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄lines : const char* const* ,BAS 脚本文本行数组lineCount : size_t ,脚本文本行数量 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_GetText
c
int Arm_BasScript_GetText(ArmBasScriptHandle* script, char* outBuf, size_t bufSize);| 项 | 说明 |
|---|---|
| 描述 | 导出当前构造器生成的 BAS 脚本文本。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄outBuf : char* ,输出字符串缓冲区,由调用方分配bufSize : size_t ,输出缓冲区大小,包含结尾 \0 的空间 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
| 备注 | 字符串输出使用调用方提供的缓冲区,缓冲区不足时按状态码返回。 |
Arm_BasScript_GetLineCount
c
int Arm_BasScript_GetLineCount(ArmBasScriptHandle* script, size_t* outCount);| 项 | 说明 |
|---|---|
| 描述 | 读取当前脚本文本行数。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄outCount : size_t* ,输出数量指针,成功时写入实际数量 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Execute
c
int Arm_BasScript_Execute(ArmHandle* h, ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 执行当前构造器生成的 BAS 脚本。 |
| 请求参数 | h : ArmHandle* ,C99 会话句柄,通常来自 Arm_Create() ,业务接口需要先连接成功script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
值构造接口
Arm_BasValue_Int32
c
ArmBasValue Arm_BasValue_Int32(int32_t value);| 项 | 说明 |
|---|---|
| 描述 | 构造 int32_t 类型的 BAS 参数值。 |
| 请求参数 | value : int32_t ,整数字面量 |
| 返回值 | ArmBasValue ;返回可继续传给 BasScript 构造接口的值对象 |
Arm_BasValue_Float64
c
ArmBasValue Arm_BasValue_Float64(double value);| 项 | 说明 |
|---|---|
| 描述 | 构造 double 类型的 BAS 参数值。 |
| 请求参数 | value : double ,浮点字面量 |
| 返回值 | ArmBasValue ;返回可继续传给 BasScript 构造接口的值对象 |
Arm_BasValue_String
c
ArmBasValue Arm_BasValue_String(const char* value);| 项 | 说明 |
|---|---|
| 描述 | 构造字符串类型的 BAS 参数值。 |
| 请求参数 | value : const char* ,字符串字面量,不能为 NULL |
| 返回值 | ArmBasValue ;返回可继续传给 BasScript 构造接口的值对象 |
Arm_BasValue_TaggedInt
c
ArmBasValue Arm_BasValue_TaggedInt(int32_t tag, int32_t value);| 项 | 说明 |
|---|---|
| 描述 | 构造带标签的整型 BAS 参数值,用于枚举类参数。 |
| 请求参数 | tag : int32_t ,值标签,指明 ArmBasValue 当前字段含义value : int32_t ,与标签对应的枚举值或索引值 |
| 返回值 | ArmBasValue ;返回可继续传给 BasScript 构造接口的值对象 |
指令构造接口
Arm_BasScript_SetParam
c
int Arm_BasScript_SetParam(ArmBasScriptHandle* script, int32_t type, int32_t valueType, ArmBasValue value);| 项 | 说明 |
|---|---|
| 描述 | 生成设置脚本参数的 BAS 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄type : int32_t ,脚本参数类型,取值见 ArmBasParamType valueType : int32_t ,值来源类型,取值见 ArmBasValueType value : ArmBasValue ,当 valueType 为直接值时表示参数值;为 R 寄存器时表示 R 编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_AssignValue
c
int Arm_BasScript_AssignValue(ArmBasScriptHandle* script, int32_t param1, int32_t index, ArmBasValue param2, ArmBasValue value, int32_t optIndex, int32_t optValue);| 项 | 说明 |
|---|---|
| 描述 | 生成赋值 BAS 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄param1 : int32_t ,赋值左侧类型,取值见 ArmBasAssignType index : int32_t ,赋值左侧编号,例如 R、PR、SR 或 IO 编号param2 : ArmBasValue ,赋值右侧来源类型,可用寄存器、IO、字面量、字符串或当前位姿value : ArmBasValue ,赋值右侧值或来源编号optIndex : int32_t ,PR 元素、IO 组或附加索引optValue : int32_t ,PR 元素、IO 状态或附加值 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Motion_MoveJoint
c
int Arm_BasScript_Motion_MoveJoint(ArmBasScriptHandle* script, int32_t poseType, int32_t poseIndex, int32_t speedType, double speedValue, int32_t smoothType, double smoothDistance, const ArmBasExtraParamHandle* extraParam);| 项 | 说明 |
|---|---|
| 描述 | 执行或生成关节运动。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄poseType : int32_t ,位姿类型,关节或笛卡尔poseIndex : int32_t ,PR 点位索引speedType : int32_t ,速度类型,直接值或寄存器speedValue : double ,速度值或速度寄存器索引smoothType : int32_t ,平滑类型smoothDistance : double ,平滑距离extraParam : const ArmBasExtraParamHandle* ,BasScript 附加参数构造器句柄,可为 NULL 表示不追加附加参数 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Motion_MoveLine
c
int Arm_BasScript_Motion_MoveLine(ArmBasScriptHandle* script, int32_t poseType, int32_t poseIndex, int32_t speedType, double speedValue, int32_t smoothType, double smoothDistance, const ArmBasExtraParamHandle* extraParam);| 项 | 说明 |
|---|---|
| 描述 | 执行或生成直线运动。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄poseType : int32_t ,位姿类型,关节或笛卡尔poseIndex : int32_t ,PR 点位索引speedType : int32_t ,速度类型,直接值或寄存器speedValue : double ,速度值或速度寄存器索引smoothType : int32_t ,平滑类型smoothDistance : double ,平滑距离extraParam : const ArmBasExtraParamHandle* ,BasScript 附加参数构造器句柄,可为 NULL 表示不追加附加参数 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Motion_MoveCircle
c
int Arm_BasScript_Motion_MoveCircle(ArmBasScriptHandle* script, int32_t poseType1, int32_t poseIndex1, int32_t poseType2, int32_t poseIndex2, int32_t speedType, double speedValue, int32_t smoothType, double smoothDistance, const ArmBasExtraParamHandle* extraParam);| 项 | 说明 |
|---|---|
| 描述 | 执行或生成圆弧运动。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄poseType1 : int32_t ,途经点来源类型,当前公开取值为 ARM_BAS_MOVE_POSE_PR poseIndex1 : int32_t ,途经点 PR 索引poseType2 : int32_t ,终点来源类型,当前公开取值为 ARM_BAS_MOVE_POSE_PR poseIndex2 : int32_t ,终点 PR 索引speedType : int32_t ,速度类型,直接值或寄存器speedValue : double ,速度值或速度寄存器索引smoothType : int32_t ,平滑类型smoothDistance : double ,平滑距离extraParam : const ArmBasExtraParamHandle* ,BasScript 附加参数构造器句柄,可为 NULL 表示不追加附加参数 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Motion_MoveJump
c
int Arm_BasScript_Motion_MoveJump(ArmBasScriptHandle* script, int32_t poseType, int32_t poseIndex, double speedValue, double speedRatio, int32_t limZType, double limZValue, int32_t smoothType, double smoothDistance, const ArmBasExtraParamHandle* extraParam);| 项 | 说明 |
|---|---|
| 描述 | 执行 BasScript Motion MoveJump 对应的 C99 接口能力。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄poseType : int32_t ,位姿类型,关节或笛卡尔poseIndex : int32_t ,PR 点位索引speedValue : double ,速度值或速度寄存器索引speedRatio : double ,速度比例limZType : int32_t ,Jump 限高参数类型limZValue : double ,Jump 限高值smoothType : int32_t ,平滑类型smoothDistance : double ,平滑距离extraParam : const ArmBasExtraParamHandle* ,BasScript 附加参数构造器句柄,可为 NULL 表示不追加附加参数 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Motion_MoveJump3
c
int Arm_BasScript_Motion_MoveJump3(ArmBasScriptHandle* script, int32_t poseType, const int32_t* poseIndexList, size_t poseIndexCount, double speedValue, double speedRatio, int32_t smoothType, double smoothDistance, const ArmBasExtraParamHandle* extraParam);| 项 | 说明 |
|---|---|
| 描述 | 执行 BasScript Motion MoveJump3 对应的 C99 接口能力。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄poseType : int32_t ,位姿类型,关节或笛卡尔poseIndexList : const int32_t* ,PR 点位索引数组poseIndexCount : size_t ,PR 点位索引数量speedValue : double ,速度值或速度寄存器索引speedRatio : double ,速度比例smoothType : int32_t ,平滑类型smoothDistance : double ,平滑距离extraParam : const ArmBasExtraParamHandle* ,BasScript 附加参数构造器句柄,可为 NULL 表示不追加附加参数 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Motion_MoveJump3cp
c
int Arm_BasScript_Motion_MoveJump3cp(ArmBasScriptHandle* script, int32_t poseType, const int32_t* poseIndexList, size_t poseIndexCount, double speedValue, int32_t smoothType, double smoothDistance, const ArmBasExtraParamHandle* extraParam);| 项 | 说明 |
|---|---|
| 描述 | 执行 BasScript Motion MoveJump3cp 对应的 C99 接口能力。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄poseType : int32_t ,位姿类型,关节或笛卡尔poseIndexList : const int32_t* ,PR 点位索引数组poseIndexCount : size_t ,PR 点位索引数量speedValue : double ,速度值或速度寄存器索引smoothType : int32_t ,平滑类型smoothDistance : double ,平滑距离extraParam : const ArmBasExtraParamHandle* ,BasScript 附加参数构造器句柄,可为 NULL 表示不追加附加参数 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_If
c
int Arm_BasScript_Logical_If(ArmBasScriptHandle* script, ArmBasValue param1, int32_t index, ArmBasValue param2, ArmBasValue value, int32_t op);| 项 | 说明 |
|---|---|
| 描述 | 生成 IF 条件语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄param1 : ArmBasValue ,条件左侧来源类型,可用寄存器、IO、字面量或字符串index : int32_t ,条件左侧编号,例如 R、SR 或 IO 编号param2 : ArmBasValue ,条件右侧来源类型value : ArmBasValue ,条件右侧值或来源编号op : int32_t ,比较或逻辑操作符,取值见 ArmBasBooleanOperator |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_ElseIf
c
int Arm_BasScript_Logical_ElseIf(ArmBasScriptHandle* script, ArmBasValue param1, int32_t index, ArmBasValue param2, ArmBasValue value, int32_t op);| 项 | 说明 |
|---|---|
| 描述 | 生成 ELSE IF 条件语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄param1 : ArmBasValue ,条件左侧来源类型,可用寄存器、IO、字面量或字符串index : int32_t ,条件左侧编号,例如 R、SR 或 IO 编号param2 : ArmBasValue ,条件右侧来源类型value : ArmBasValue ,条件右侧值或来源编号op : int32_t ,比较或逻辑操作符,取值见 ArmBasBooleanOperator |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_Else
c
int Arm_BasScript_Logical_Else(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 生成 ELSE 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_EndIf
c
int Arm_BasScript_Logical_EndIf(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 生成 ENDIF 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_Switch
c
int Arm_BasScript_Logical_Switch(ArmBasScriptHandle* script, ArmBasValue param, int32_t index);| 项 | 说明 |
|---|---|
| 描述 | 生成 SWITCH / SELECT 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄param : ArmBasValue ,SELECT 表达式来源类型index : int32_t ,SELECT 表达式编号,例如 R、SR 或 IO 编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_Case
c
int Arm_BasScript_Logical_Case(ArmBasScriptHandle* script, ArmBasValue param, ArmBasValue value);| 项 | 说明 |
|---|---|
| 描述 | 生成 CASE 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄param : ArmBasValue ,CASE 值来源类型value : ArmBasValue ,CASE 匹配值或来源编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_Default
c
int Arm_BasScript_Logical_Default(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 生成 DEFAULT 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_EndSwitch
c
int Arm_BasScript_Logical_EndSwitch(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 生成 END SWITCH / ENDSELECT 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_While
c
int Arm_BasScript_Logical_While(ArmBasScriptHandle* script, ArmBasValue param1, int32_t index, ArmBasValue param2, ArmBasValue value, int32_t op);| 项 | 说明 |
|---|---|
| 描述 | 生成 WHILE 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄param1 : ArmBasValue ,条件左侧来源类型,可用寄存器、IO、字面量或字符串index : int32_t ,条件左侧编号,例如 R、SR 或 IO 编号param2 : ArmBasValue ,条件右侧来源类型value : ArmBasValue ,条件右侧值或来源编号op : int32_t ,比较或逻辑操作符,取值见 ArmBasBooleanOperator |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_EndWhile
c
int Arm_BasScript_Logical_EndWhile(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 生成 WHILE 结束语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_Goto
c
int Arm_BasScript_Logical_Goto(ArmBasScriptHandle* script, int32_t index);| 项 | 说明 |
|---|---|
| 描述 | 生成 GOTO 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,目标 LABEL 编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_Label
c
int Arm_BasScript_Logical_Label(ArmBasScriptHandle* script, int32_t index);| 项 | 说明 |
|---|---|
| 描述 | 生成 LABEL 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,当前 LABEL 编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_SkipCondition
c
int Arm_BasScript_Logical_SkipCondition(ArmBasScriptHandle* script, ArmBasValue param1, int32_t index, ArmBasValue param2, ArmBasValue value, int32_t op);| 项 | 说明 |
|---|---|
| 描述 | 生成 SKIP CONDITION 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄param1 : ArmBasValue ,条件左侧来源类型,可用寄存器、IO、字面量或字符串index : int32_t ,条件左侧编号,例如 R、SR 或 IO 编号param2 : ArmBasValue ,条件右侧来源类型value : ArmBasValue ,条件右侧值或来源编号op : int32_t ,比较或逻辑操作符,取值见 ArmBasBooleanOperator |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_Break
c
int Arm_BasScript_Logical_Break(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 生成 BREAK 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Logical_Continue
c
int Arm_BasScript_Logical_Continue(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 生成 CONTINUE 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Structure_Wait
c
int Arm_BasScript_Structure_Wait(ArmBasScriptHandle* script, ArmBasValue param1, int32_t index, ArmBasValue param2, ArmBasValue value, int32_t op);| 项 | 说明 |
|---|---|
| 描述 | 生成条件等待语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄param1 : ArmBasValue ,等待条件左侧来源类型index : int32_t ,等待条件左侧编号,例如 R、SR 或 IO 编号param2 : ArmBasValue ,等待条件右侧来源类型value : ArmBasValue ,等待条件右侧值或来源编号op : int32_t ,比较或逻辑操作符,取值见 ArmBasBooleanOperator |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Structure_WaitTime
c
int Arm_BasScript_Structure_WaitTime(ArmBasScriptHandle* script, int32_t valueType, ArmBasValue value);| 项 | 说明 |
|---|---|
| 描述 | 生成按时间等待语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄valueType : int32_t ,时间来源类型,取值见 ArmBasValueType value : ArmBasValue ,等待时间秒数或 R 寄存器编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Structure_Pause
c
int Arm_BasScript_Structure_Pause(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 生成暂停语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Structure_Abort
c
int Arm_BasScript_Structure_Abort(ArmBasScriptHandle* script);| 项 | 说明 |
|---|---|
| 描述 | 生成中止语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Structure_Call
c
int Arm_BasScript_Structure_Call(ArmBasScriptHandle* script, const char* name);| 项 | 说明 |
|---|---|
| 描述 | 生成同步调用脚本语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄name : const char* ,被同步调用的脚本名,不能为 NULL |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Structure_Run
c
int Arm_BasScript_Structure_Run(ArmBasScriptHandle* script, const char* name);| 项 | 说明 |
|---|---|
| 描述 | 生成异步运行脚本语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄name : const char* ,被异步运行的脚本名,不能为 NULL |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Structure_Load
c
int Arm_BasScript_Structure_Load(ArmBasScriptHandle* script, int32_t loadType, ArmBasValue value);| 项 | 说明 |
|---|---|
| 描述 | 生成 LOAD 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄loadType : int32_t ,程序标识来源,取值见 ArmBasLoadType value : ArmBasValue ,脚本名、R/SR 编号或直接值 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Structure_Unload
c
int Arm_BasScript_Structure_Unload(ArmBasScriptHandle* script, int32_t loadType, ArmBasValue value);| 项 | 说明 |
|---|---|
| 描述 | 生成 UNLOAD 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄loadType : int32_t ,程序标识来源,取值见 ArmBasLoadType value : ArmBasValue ,脚本名、R/SR 编号或直接值 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Structure_Exec
c
int Arm_BasScript_Structure_Exec(ArmBasScriptHandle* script, int32_t loadType, ArmBasValue value);| 项 | 说明 |
|---|---|
| 描述 | 生成 EXEC 语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄loadType : int32_t ,程序标识来源,取值见 ArmBasLoadType value : ArmBasValue ,脚本名、R/SR 编号或直接值 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Socket_Open
c
int Arm_BasScript_Socket_Open(ArmBasScriptHandle* script, int32_t index);| 项 | 说明 |
|---|---|
| 描述 | 生成 Socket 打开语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,Socket 通道编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Socket_Close
c
int Arm_BasScript_Socket_Close(ArmBasScriptHandle* script, int32_t index);| 项 | 说明 |
|---|---|
| 描述 | 生成 Socket 关闭语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,Socket 通道编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Socket_Connect
c
int Arm_BasScript_Socket_Connect(ArmBasScriptHandle* script, int32_t index);| 项 | 说明 |
|---|---|
| 描述 | 生成 Socket 建连语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,Socket 通道编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Socket_Send
c
int Arm_BasScript_Socket_Send(ArmBasScriptHandle* script, int32_t index, int32_t msgType, ArmBasValue value);| 项 | 说明 |
|---|---|
| 描述 | 生成 Socket 发送语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,Socket 通道编号msgType : int32_t ,Socket 消息类型,取值见 ArmBasStrType value : ArmBasValue , ARM_BAS_STR_STRING 时为字符串, ARM_BAS_STR_SR 时为 SR 编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Socket_Recv
c
int Arm_BasScript_Socket_Recv(ArmBasScriptHandle* script, int32_t index, int32_t msgLength, int32_t msgType, ArmBasValue value);| 项 | 说明 |
|---|---|
| 描述 | 生成 Socket 接收语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,Socket 通道编号msgLength : int32_t ,接收消息长度msgType : int32_t ,Socket 消息类型,取值见 ArmBasStrType value : ArmBasValue , ARM_BAS_STR_STRING 时为字符串变量名, ARM_BAS_STR_SR 时为 SR 编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Modbus_ReadMH
c
int Arm_BasScript_Modbus_ReadMH(ArmBasScriptHandle* script, int32_t index, int32_t id, int32_t address, int32_t length, int32_t rIndex);| 项 | 说明 |
|---|---|
| 描述 | 生成读取 MH 的 Modbus 脚本语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,Modbus 语句索引id : int32_t ,Modbus 从站 IDaddress : int32_t ,MH 起始地址length : int32_t ,读取长度rIndex : int32_t ,结果写入的 R 寄存器编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Modbus_ReadMI
c
int Arm_BasScript_Modbus_ReadMI(ArmBasScriptHandle* script, int32_t index, int32_t id, int32_t address, int32_t length, int32_t rIndex);| 项 | 说明 |
|---|---|
| 描述 | 生成读取 MI 的 Modbus 脚本语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,Modbus 语句索引id : int32_t ,Modbus 从站 IDaddress : int32_t ,MI 起始地址length : int32_t ,读取长度rIndex : int32_t ,结果写入的 R 寄存器编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Modbus_WriteMH
c
int Arm_BasScript_Modbus_WriteMH(ArmBasScriptHandle* script, int32_t index, int32_t id, int32_t address, int32_t length, int32_t valueType, int32_t value);| 项 | 说明 |
|---|---|
| 描述 | 生成写入 MH 的 Modbus 脚本语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄index : int32_t ,Modbus 语句索引id : int32_t ,Modbus 从站 IDaddress : int32_t ,MH 起始地址length : int32_t ,写入长度valueType : int32_t ,写入值来源,取值见 ArmBasValueType value : int32_t ,直接写入值或 R 寄存器编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Vision_Find
c
int Arm_BasScript_Vision_Find(ArmBasScriptHandle* script, const char* name);| 项 | 说明 |
|---|---|
| 描述 | 生成视觉查找语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄name : const char* ,视觉任务名称,不能为 NULL |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Vision_GetOffset
c
int Arm_BasScript_Vision_GetOffset(ArmBasScriptHandle* script, const char* name, int32_t index, int32_t labelIndex);| 项 | 说明 |
|---|---|
| 描述 | 生成获取视觉偏移语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄name : const char* ,视觉任务名称,不能为 NULL index : int32_t ,视觉偏移结果编号labelIndex : int32_t ,偏移失败时跳转的标签编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasScript_Vision_GetQuantity
c
int Arm_BasScript_Vision_GetQuantity(ArmBasScriptHandle* script, const char* name, int32_t index);| 项 | 说明 |
|---|---|
| 描述 | 生成获取视觉数量语句。 |
| 请求参数 | script : ArmBasScriptHandle* ,BasScript 脚本构造器句柄name : const char* ,视觉任务名称,不能为 NULL index : int32_t ,数量结果写入编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
附加参数接口
Arm_BasExtraParam_Create
c
int Arm_BasExtraParam_Create(ArmBasExtraParamHandle** outExtraParam);| 项 | 说明 |
|---|---|
| 描述 | 创建 BAS 附加参数构造器。 |
| 请求参数 | outExtraParam : ArmBasExtraParamHandle** ,输出附加参数构造器句柄,成功时写入非空指针 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasExtraParam_Destroy
c
void Arm_BasExtraParam_Destroy(ArmBasExtraParamHandle* extraParam);| 项 | 说明 |
|---|---|
| 描述 | 销毁 BAS 附加参数构造器。 |
| 请求参数 | extraParam : ArmBasExtraParamHandle* ,需要销毁的附加参数构造器;可为 NULL |
| 返回值 | 无返回值 |
Arm_BasExtraParam_Reset
c
int Arm_BasExtraParam_Reset(ArmBasExtraParamHandle* extraParam);| 项 | 说明 |
|---|---|
| 描述 | 重置 BAS 附加参数构造器。 |
| 请求参数 | extraParam : ArmBasExtraParamHandle* ,需要重置的附加参数构造器 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasExtraParam_GetText
c
int Arm_BasExtraParam_GetText(ArmBasExtraParamHandle* extraParam, char* outBuf, size_t bufSize);| 项 | 说明 |
|---|---|
| 描述 | 导出当前附加参数文本。 |
| 请求参数 | extraParam : ArmBasExtraParamHandle* ,附加参数构造器outBuf : char* ,输出字符串缓冲区,由调用方分配bufSize : size_t ,输出缓冲区大小,包含结尾 \0 的空间 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
| 备注 | 字符串输出使用调用方提供的缓冲区,缓冲区不足时按状态码返回。 |
Arm_BasExtraParam_Acceleration
c
int Arm_BasExtraParam_Acceleration(ArmBasExtraParamHandle* extraParam, double value);| 项 | 说明 |
|---|---|
| 描述 | 追加加速度附加参数。 |
| 请求参数 | extraParam : ArmBasExtraParamHandle* ,附加参数构造器value : double ,附加加速度,超出 1~120 时按 100.0 输出 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasExtraParam_Rctp
c
int Arm_BasExtraParam_Rctp(ArmBasExtraParamHandle* extraParam);| 项 | 说明 |
|---|---|
| 描述 | 追加 RTCP 附加参数。 |
| 请求参数 | extraParam : ArmBasExtraParamHandle* ,附加参数构造器 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasExtraParam_Offset
c
int Arm_BasExtraParam_Offset(ArmBasExtraParamHandle* extraParam, int32_t index);| 项 | 说明 |
|---|---|
| 描述 | 追加坐标偏移附加参数。 |
| 请求参数 | extraParam : ArmBasExtraParamHandle* ,附加参数构造器index : int32_t ,偏移使用的 PR 编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasExtraParam_Tb
c
int Arm_BasExtraParam_Tb(ArmBasExtraParamHandle* extraParam, double second, const char* type, const char* name, int32_t index, const char* status);| 项 | 说明 |
|---|---|
| 描述 | 追加 TB 附加参数。 |
| 请求参数 | extraParam : ArmBasExtraParamHandle* ,附加参数构造器second : double ,时间参数,单位秒type : const char* ,TB 类型,例如 RUN 或 ASSIGN name : const char* , RUN 类型使用的脚本名,可按 TB 类型传空index : int32_t , ASSIGN 类型使用的索引status : const char* , ASSIGN 类型使用的状态字符串 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasExtraParam_Skip
c
int Arm_BasExtraParam_Skip(ArmBasExtraParamHandle* extraParam, int32_t index);| 项 | 说明 |
|---|---|
| 描述 | 追加 Skip 附加参数。 |
| 请求参数 | extraParam : ArmBasExtraParamHandle* ,附加参数构造器index : int32_t ,跳转的 LABEL 编号 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
Arm_BasExtraParam_Approach
c
int Arm_BasExtraParam_Approach(ArmBasExtraParamHandle* extraParam, double departureDist, double approachingDist);| 项 | 说明 |
|---|---|
| 描述 | 追加 Jump 接近 / 离开距离参数。 |
| 请求参数 | extraParam : ArmBasExtraParamHandle* ,附加参数构造器departureDist : double ,Jump 离开距离approachingDist : double ,Jump 接近距离 |
| 返回值 | STATUS_CODE 整数值; 0 表示成功,其他值按状态码处理 |
枚举与值
| 枚举 | 说明 |
|---|---|
ArmBasMovePoseType | 运动点位来源,公开 ARM_BAS_MOVE_POSE_PR |
ArmBasSmoothType | 精确到点或按距离平滑 |
ArmBasSpeedType | 速度来自直接数值或 MR |
ArmBasRegisterType | R / SR / MH / MI |
ArmBasIOType | DI / DO / AI / AO / RI / RO / UI / UO / GI / GO / TAI / TAO / TDI / TDO |
ArmBasIOStatus | ON / OFF / PULSE / 上升沿 / 下降沿 |
ArmBasBooleanOperator | AND / OR / EQ / NE / GT / GE / LT / LE |
ArmBasAssignType | ASSIGN 左侧目标或右侧来源 |
ArmBasOtherType | 字面量、字符串、IO 状态、当前位姿 |
ArmBasCurrentPose | 当前关节或笛卡尔位姿 |
ArmBasLoadType | LOAD / UNLOAD / EXEC 的程序标识来源 |
ArmBasStrType | Socket 字符串或 SR |
ArmBasValueType | 直接值或 R 寄存器 |
ArmBasParamType | TF、UF、OVC、OAC、负载编号 |
ArmBasMathOperator | 预留四则运算枚举 |
ArmBasValueTag | 指明 ArmBasValue 当前字段含义 |
关键语义
| 类别 | 说明 |
|---|---|
| 运动速度 | MoveJoint 使用直接速度值时范围为 0~100 ; MoveLine 、 MoveCircle 使用直接速度值时范围为 0~5000 。 |
| Jump 点位 | MoveJump3 和 MoveJump3cp 的 poseIndexList 必须包含 3 个 PR 点位索引。 |
| 条件语句 | IF、ELSE IF、WHILE、WAIT、SKIP CONDITION 使用同一套条件参数口径,支持寄存器、IO、字面量、字符串和 IO 状态。 |
| SELECT 语句 | Arm_BasScript_Logical_Switch() 输出 SELECT; Arm_BasScript_Logical_EndSwitch() 输出 ENDSELECT。 |
| 闭合校验 | IF / SELECT / WHILE 必须闭合;导出或执行脚本文本前应补齐对应结束语句。 |
| Socket | ARM_BAS_STR_STRING 使用字符串值, ARM_BAS_STR_SR 使用 SR 编号。 |
| Modbus | ReadMH / ReadMI 将结果写入 R 寄存器; WriteMH 可写直接值或 R 寄存器值。 |
| 附加加速度 | Arm_BasExtraParam_Acceleration() 的有效范围为 1~120 ;超出范围时按 100.0 输出。 |
| TB 附加参数 | TB 参数需要满足 “带 name 的 RUN” 或 “带 index + status 的 ASSIGN” 二选一。 |
| Approach | Arm_BasExtraParam_Approach() 只作为 Jump 类指令的附加参数。 |
构造器规则
Arm_BasScript_Create()创建空构造器。Arm_BasScript_CreateWithName()创建带脚本名的构造器,并生成脚本头。Arm_BasScript_SetName()只修改名称,已有内容保持不变。Arm_BasScript_AppendLine()/Arm_BasScript_AppendLines()只追加脚本文本。Arm_BasScript_GetText()序列化当前内容;需要脚本头时使用Arm_BasScript_CreateWithName()。Arm_BasScript_Reset()回到创建时的模式。Arm_BasScript_Execute()通过ArmHandle*执行构造器生成的脚本。Arm_BasExtraParam_GetText()输出当前附加参数文本。
最小调用示例
c
#include <stdio.h> // 引入 printf,用于打印生成后的脚本文本
#include "c_arm_api.h" // 引入 C99 SDK 总头文件
int main(void) // 示例程序入口
{ // 进入示例主函数
ArmBasScriptHandle* script = NULL; // 准备脚本构造器句柄
char text[2048] = {0}; // 准备脚本文本输出缓冲区
int ret = Arm_BasScript_CreateWithName("demo.bas", &script); // 创建带名称的脚本构造器
if (ret != 0 || script == NULL) { // 判断构造器是否创建失败
return 1; // 创建失败时退出
} // 结束创建判断
Arm_BasScript_Structure_WaitTime(script, ARM_BAS_VALUE_TYPE_VALUE, Arm_BasValue_Float64(0.1)); // 追加等待语句
Arm_BasScript_GetText(script, text, sizeof(text)); // 导出脚本文本
printf("%s\n", text); // 打印脚本文本
Arm_BasScript_Destroy(script); // 销毁脚本构造器
return 0; // 示例成功结束
} // 结束示例主函数场景化示例
运动语句和附加参数
c
ArmBasScriptHandle* script = NULL; // 准备脚本构造器
ArmBasExtraParamHandle* extra = NULL; // 准备附加参数构造器
int createRet = Arm_BasScript_Create(&script); // 创建脚本构造器
int extraRet = Arm_BasExtraParam_Create(&extra); // 创建附加参数构造器
Arm_BasExtraParam_Acceleration(extra, 80.0); // 设置附加加速度
Arm_BasExtraParam_Rctp(extra); // 设置 RTCP 附加参数
Arm_BasExtraParam_Offset(extra, 1); // 设置 FRAME_OFFSET PR[1]
Arm_BasExtraParam_Skip(extra, 10); // 设置 SKIP GOTO LABEL10
Arm_BasExtraParam_Approach(extra, 20.0, 10.0); // 设置 Jump 接近 / 离开距离
Arm_BasScript_Motion_MoveJoint(script, ARM_BAS_MOVE_POSE_PR, 1, ARM_BAS_SPEED_VALUE, 30.0, ARM_BAS_SMOOTH_FINE, 0.0, extra); // 生成关节运动语句
Arm_BasScript_Motion_MoveLine(script, ARM_BAS_MOVE_POSE_PR, 2, ARM_BAS_SPEED_VALUE, 30.0, ARM_BAS_SMOOTH_DISTANCE, 5.0, extra); // 生成直线运动语句
Arm_BasScript_Motion_MoveCircle(script, ARM_BAS_MOVE_POSE_PR, 2, ARM_BAS_MOVE_POSE_PR, 3, ARM_BAS_SPEED_VALUE, 20.0, ARM_BAS_SMOOTH_FINE, 0.0, extra); // 生成圆弧运动语句
Arm_BasScript_Motion_MoveJump(script, ARM_BAS_MOVE_POSE_PR, 4, 40.0, 80.0, ARM_BAS_VALUE_TYPE_VALUE, 100.0, ARM_BAS_SMOOTH_FINE, 0.0, extra); // 生成 Jump 语句
(void)createRet; // 示例中保留创建状态码
(void)extraRet; // 示例中保留附加参数创建状态码
Arm_BasExtraParam_Destroy(extra); // 销毁附加参数构造器
Arm_BasScript_Destroy(script); // 销毁脚本构造器逻辑、流程、Socket、Modbus 和视觉
c
ArmBasScriptHandle* script = NULL; // 准备脚本构造器
Arm_BasScript_Create(&script); // 创建脚本构造器
Arm_BasScript_SetParam(script, ARM_BAS_PARAM_OVC, ARM_BAS_VALUE_TYPE_VALUE, Arm_BasValue_Float64(20.0)); // 设置 OVC
Arm_BasScript_AssignValue(script, ARM_BAS_ASSIGN_R, 1, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_VALUE), Arm_BasValue_Float64(1.0), 0, 0); // 生成赋值语句
Arm_BasScript_Logical_If(script, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_REGISTER_TYPE, ARM_BAS_REGISTER_R), 1, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_VALUE), Arm_BasValue_Float64(1.0), ARM_BAS_BOOLEAN_EQ); // 生成 IF
Arm_BasScript_Logical_Else(script); // 生成 ELSE
Arm_BasScript_Logical_EndIf(script); // 生成 ENDIF
Arm_BasScript_Logical_Switch(script, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_REGISTER_TYPE, ARM_BAS_REGISTER_R), 1); // 生成 SWITCH
Arm_BasScript_Logical_Case(script, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_VALUE), Arm_BasValue_Int32(1)); // 生成 CASE
Arm_BasScript_Logical_Default(script); // 生成 DEFAULT
Arm_BasScript_Logical_EndSwitch(script); // 生成 ENDSWITCH
Arm_BasScript_Logical_While(script, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_REGISTER_TYPE, ARM_BAS_REGISTER_R), 1, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_VALUE), Arm_BasValue_Float64(0.0), ARM_BAS_BOOLEAN_GT); // 生成 WHILE
Arm_BasScript_Logical_Break(script); // 生成 BREAK
Arm_BasScript_Logical_Continue(script); // 生成 CONTINUE
Arm_BasScript_Logical_EndWhile(script); // 生成 ENDWHILE
Arm_BasScript_Logical_Label(script, 10); // 生成 LABEL
Arm_BasScript_Logical_Goto(script, 10); // 生成 GOTO
Arm_BasScript_Logical_SkipCondition(script, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_IO_TYPE, ARM_BAS_IO_DI), 1, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_IO_STATUS), Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_IO_STATUS, ARM_BAS_IO_STATUS_ON), ARM_BAS_BOOLEAN_EQ); // 生成 SKIP 条件
Arm_BasScript_Structure_Wait(script, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_IO_TYPE, ARM_BAS_IO_DI), 1, Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_IO_STATUS), Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_IO_STATUS, ARM_BAS_IO_STATUS_ON), ARM_BAS_BOOLEAN_EQ); // 生成 WAIT 条件
Arm_BasScript_Structure_Pause(script); // 生成暂停语句
Arm_BasScript_Structure_Call(script, "sub.bas"); // 生成 CALL
Arm_BasScript_Structure_Run(script, "sub.bas"); // 生成 RUN
Arm_BasScript_Structure_Load(script, ARM_BAS_LOAD_STRING, Arm_BasValue_String("sub.bas")); // 生成 LOAD
Arm_BasScript_Structure_Unload(script, ARM_BAS_LOAD_STRING, Arm_BasValue_String("sub.bas")); // 生成 UNLOAD
Arm_BasScript_Structure_Exec(script, ARM_BAS_LOAD_STRING, Arm_BasValue_String("sub.bas")); // 生成 EXEC
Arm_BasScript_Socket_Open(script, 1); // 生成 Socket Open
Arm_BasScript_Socket_Connect(script, 1); // 生成 Socket Connect
Arm_BasScript_Socket_Send(script, 1, ARM_BAS_STR_STRING, Arm_BasValue_String("ping")); // 生成 Socket Send
Arm_BasScript_Socket_Recv(script, 1, 128, ARM_BAS_STR_SR, Arm_BasValue_Int32(1)); // 生成 Socket Recv
Arm_BasScript_Socket_Close(script, 1); // 生成 Socket Close
Arm_BasScript_Modbus_ReadMH(script, 1, 1, 0, 2, 1); // 生成读 MH
Arm_BasScript_Modbus_ReadMI(script, 1, 1, 0, 2, 1); // 生成读 MI
Arm_BasScript_Modbus_WriteMH(script, 1, 1, 0, 1, ARM_BAS_VALUE_TYPE_VALUE, 7); // 生成写 MH
Arm_BasScript_Vision_Find(script, "camera"); // 生成视觉查找
Arm_BasScript_Vision_GetOffset(script, "camera", 1, 10); // 生成视觉偏移
Arm_BasScript_Vision_GetQuantity(script, "camera", 1); // 生成视觉数量
Arm_BasScript_Structure_Abort(script); // 生成中止语句
Arm_BasScript_Destroy(script); // 销毁脚本构造器示例代码
cpp
#include <stdio.h>
#include "c_arm_api.h"
int main(void)
{
// [ZH] 本示例直接在源码中写死连接地址,不解析命令行参数。
// [EN] This example hard-codes the connection addresses in the source code.
const char* controller_ip = "10.27.1.2";
const char* teach_panel_ip = "10.27.1.102";
const int execute_generated_script = 0;
int overall_status = 0;
#define RECORD_STATUS(label, expr) \
do { \
int status = (expr); \
printf("[c99_bas_script] %s status: %d\n", (label), status); \
if (status != 0) { \
overall_status = status; \
} \
} while (0)
// [ZH] 创建并连接 SDK 句柄。构造脚本文本本身不需要连接,执行脚本才需要连接。
// [EN] Create and connect the SDK handle. Building text does not need a connection; executing does.
ArmHandle* handle = Arm_Create();
if (handle == NULL) {
printf("[c99_bas_script] 创建句柄失败 / Create handle failed\n");
return 1;
}
int connect_ret = Arm_Connect(handle, controller_ip, teach_panel_ip);
if (connect_ret != 0) {
printf("[c99_bas_script] 连接机器人失败 / Connect failed: %d\n", connect_ret);
Arm_Destroy(handle);
return 1;
}
printf("[c99_bas_script] 机器人连接成功 / Robot connected successfully\n");
// [ZH] 覆盖空构造器、命名、追加原始文本、行数、导出文本和 Reset。
// [EN] Cover empty creation, naming, raw append, line count, text export, and reset.
ArmBasScriptHandle* scratch_script = NULL;
RECORD_STATUS("Create", Arm_BasScript_Create(&scratch_script));
RECORD_STATUS("SetName", Arm_BasScript_SetName(scratch_script, "scratch.bas"));
RECORD_STATUS("AppendLine", Arm_BasScript_AppendLine(scratch_script, "WAIT TIME 0.1"));
const char* raw_lines[2] = {"R[1]=1", "R[2]=2"};
RECORD_STATUS("AppendLines", Arm_BasScript_AppendLines(scratch_script, raw_lines, 2U));
size_t scratch_line_count = 0U;
RECORD_STATUS("GetLineCount", Arm_BasScript_GetLineCount(scratch_script, &scratch_line_count));
char scratch_text[2048] = {0};
RECORD_STATUS("GetText(scratch)", Arm_BasScript_GetText(scratch_script, scratch_text, sizeof(scratch_text)));
RECORD_STATUS("Reset", Arm_BasScript_Reset(scratch_script));
printf("[c99_bas_script] scratch line count: %zu\n", scratch_line_count);
printf("[c99_bas_script] scratch text:\n%s\n", scratch_text);
Arm_BasScript_Destroy(scratch_script);
// [ZH] 创建主脚本和附加参数构造器。
// [EN] Create the main script and extra-parameter builder.
ArmBasScriptHandle* script = NULL;
ArmBasExtraParamHandle* extra = NULL;
RECORD_STATUS("CreateWithName", Arm_BasScript_CreateWithName("example_c99.bas", &script));
RECORD_STATUS("ExtraParam_Create", Arm_BasExtraParam_Create(&extra));
RECORD_STATUS("ExtraParam_Acceleration", Arm_BasExtraParam_Acceleration(extra, 80.0));
RECORD_STATUS("ExtraParam_Rctp", Arm_BasExtraParam_Rctp(extra));
RECORD_STATUS("ExtraParam_Offset", Arm_BasExtraParam_Offset(extra, 1));
RECORD_STATUS("ExtraParam_Tb", Arm_BasExtraParam_Tb(extra, 0.1, "RUN", "helper.bas", 0, ""));
RECORD_STATUS("ExtraParam_Skip", Arm_BasExtraParam_Skip(extra, 10));
RECORD_STATUS("ExtraParam_Approach", Arm_BasExtraParam_Approach(extra, 10.0, 5.0));
char extra_text[1024] = {0};
RECORD_STATUS("ExtraParam_GetText", Arm_BasExtraParam_GetText(extra, extra_text, sizeof(extra_text)));
printf("[c99_bas_script] extra text: %s\n", extra_text);
// [ZH] 覆盖基础参数与赋值接口。
// [EN] Cover parameter and assignment APIs.
RECORD_STATUS(
"SetParam",
Arm_BasScript_SetParam(
script,
ARM_BAS_PARAM_OVC,
ARM_BAS_VALUE_TYPE_VALUE,
Arm_BasValue_Float64(20.0)
)
);
RECORD_STATUS(
"AssignValue(value)",
Arm_BasScript_AssignValue(
script,
ARM_BAS_ASSIGN_R,
1,
Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_VALUE),
Arm_BasValue_Float64(3.14),
0,
0
)
);
RECORD_STATUS(
"AssignValue(string)",
Arm_BasScript_AssignValue(
script,
ARM_BAS_ASSIGN_SR,
1,
Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_STRING),
Arm_BasValue_String("hello"),
0,
0
)
);
// [ZH] 覆盖运动语句构造接口。
// [EN] Cover motion-statement construction APIs.
int32_t jump_points[3] = {1, 2, 3};
RECORD_STATUS(
"Motion_MoveJoint",
Arm_BasScript_Motion_MoveJoint(
script, ARM_BAS_MOVE_POSE_PR, 1, ARM_BAS_SPEED_VALUE, 20.0,
ARM_BAS_SMOOTH_FINE, 0.0, extra
)
);
RECORD_STATUS(
"Motion_MoveLine",
Arm_BasScript_Motion_MoveLine(
script, ARM_BAS_MOVE_POSE_PR, 2, ARM_BAS_SPEED_VALUE, 100.0,
ARM_BAS_SMOOTH_DISTANCE, 5.0, extra
)
);
RECORD_STATUS(
"Motion_MoveCircle",
Arm_BasScript_Motion_MoveCircle(
script, ARM_BAS_MOVE_POSE_PR, 2, ARM_BAS_MOVE_POSE_PR, 3,
ARM_BAS_SPEED_VALUE, 100.0, ARM_BAS_SMOOTH_FINE, 0.0, extra
)
);
RECORD_STATUS(
"Motion_MoveJump",
Arm_BasScript_Motion_MoveJump(
script, ARM_BAS_MOVE_POSE_PR, 4, 100.0, 50.0,
ARM_BAS_SPEED_VALUE, 20.0, ARM_BAS_SMOOTH_FINE, 0.0, extra
)
);
RECORD_STATUS(
"Motion_MoveJump3",
Arm_BasScript_Motion_MoveJump3(
script, ARM_BAS_MOVE_POSE_PR, jump_points, 3U, 100.0, 50.0,
ARM_BAS_SMOOTH_FINE, 0.0, extra
)
);
RECORD_STATUS(
"Motion_MoveJump3cp",
Arm_BasScript_Motion_MoveJump3cp(
script, ARM_BAS_MOVE_POSE_PR, jump_points, 3U, 100.0,
ARM_BAS_SMOOTH_FINE, 0.0, extra
)
);
// [ZH] 覆盖逻辑语句构造接口。
// [EN] Cover logical-statement construction APIs.
ArmBasValue reg_r = Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_REGISTER_TYPE, ARM_BAS_REGISTER_R);
ArmBasValue io_di = Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_IO_TYPE, ARM_BAS_IO_DI);
ArmBasValue other_value = Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_VALUE);
ArmBasValue other_status = Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_OTHER_TYPE, ARM_BAS_OTHER_IO_STATUS);
ArmBasValue status_on = Arm_BasValue_TaggedInt(ARM_BAS_VALUE_TAG_IO_STATUS, ARM_BAS_IO_STATUS_ON);
RECORD_STATUS("Logical_If", Arm_BasScript_Logical_If(script, reg_r, 1, other_value, Arm_BasValue_Int32(1), ARM_BAS_BOOLEAN_EQ));
RECORD_STATUS("Logical_ElseIf", Arm_BasScript_Logical_ElseIf(script, reg_r, 1, other_value, Arm_BasValue_Int32(2), ARM_BAS_BOOLEAN_EQ));
RECORD_STATUS("Logical_Else", Arm_BasScript_Logical_Else(script));
RECORD_STATUS("Logical_EndIf", Arm_BasScript_Logical_EndIf(script));
RECORD_STATUS("Logical_Switch", Arm_BasScript_Logical_Switch(script, reg_r, 1));
RECORD_STATUS("Logical_Case", Arm_BasScript_Logical_Case(script, other_value, Arm_BasValue_Int32(1)));
RECORD_STATUS("Logical_Default", Arm_BasScript_Logical_Default(script));
RECORD_STATUS("Logical_EndSwitch", Arm_BasScript_Logical_EndSwitch(script));
RECORD_STATUS("Logical_While", Arm_BasScript_Logical_While(script, reg_r, 1, other_value, Arm_BasValue_Int32(3), ARM_BAS_BOOLEAN_LT));
RECORD_STATUS("Logical_Continue", Arm_BasScript_Logical_Continue(script));
RECORD_STATUS("Logical_Break", Arm_BasScript_Logical_Break(script));
RECORD_STATUS("Logical_EndWhile", Arm_BasScript_Logical_EndWhile(script));
RECORD_STATUS("Logical_Label", Arm_BasScript_Logical_Label(script, 10));
RECORD_STATUS("Logical_Goto", Arm_BasScript_Logical_Goto(script, 10));
RECORD_STATUS("Logical_SkipCondition", Arm_BasScript_Logical_SkipCondition(script, io_di, 1, other_status, status_on, ARM_BAS_BOOLEAN_EQ));
// [ZH] 覆盖流程控制语句构造接口。
// [EN] Cover structural-control statement construction APIs.
RECORD_STATUS("Structure_Wait", Arm_BasScript_Structure_Wait(script, io_di, 1, other_status, status_on, ARM_BAS_BOOLEAN_EQ));
RECORD_STATUS("Structure_WaitTime", Arm_BasScript_Structure_WaitTime(script, ARM_BAS_VALUE_TYPE_VALUE, Arm_BasValue_Float64(0.1)));
RECORD_STATUS("Structure_Pause", Arm_BasScript_Structure_Pause(script));
RECORD_STATUS("Structure_Abort", Arm_BasScript_Structure_Abort(script));
RECORD_STATUS("Structure_Call", Arm_BasScript_Structure_Call(script, "helper.bas"));
RECORD_STATUS("Structure_Run", Arm_BasScript_Structure_Run(script, "helper.bas"));
RECORD_STATUS("Structure_Load", Arm_BasScript_Structure_Load(script, ARM_BAS_LOAD_STRING, Arm_BasValue_String("demo_program")));
RECORD_STATUS("Structure_Unload", Arm_BasScript_Structure_Unload(script, ARM_BAS_LOAD_STRING, Arm_BasValue_String("demo_program")));
RECORD_STATUS("Structure_Exec", Arm_BasScript_Structure_Exec(script, ARM_BAS_LOAD_STRING, Arm_BasValue_String("demo_program")));
// [ZH] 覆盖 Socket、Modbus 和视觉语句构造接口。
// [EN] Cover Socket, Modbus, and vision statement construction APIs.
RECORD_STATUS("Socket_Open", Arm_BasScript_Socket_Open(script, 1));
RECORD_STATUS("Socket_Connect", Arm_BasScript_Socket_Connect(script, 1));
RECORD_STATUS("Socket_Send", Arm_BasScript_Socket_Send(script, 1, ARM_BAS_STR_STRING, Arm_BasValue_String("ping")));
RECORD_STATUS("Socket_Recv", Arm_BasScript_Socket_Recv(script, 1, 32, ARM_BAS_STR_SR, Arm_BasValue_Int32(1)));
RECORD_STATUS("Socket_Close", Arm_BasScript_Socket_Close(script, 1));
RECORD_STATUS("Modbus_ReadMH", Arm_BasScript_Modbus_ReadMH(script, 1, 1, 0, 2, 1));
RECORD_STATUS("Modbus_ReadMI", Arm_BasScript_Modbus_ReadMI(script, 1, 1, 0, 2, 2));
RECORD_STATUS("Modbus_WriteMH", Arm_BasScript_Modbus_WriteMH(script, 1, 1, 0, 1, ARM_BAS_VALUE_TYPE_VALUE, 10));
RECORD_STATUS("Vision_Find", Arm_BasScript_Vision_Find(script, "camera"));
RECORD_STATUS("Vision_GetOffset", Arm_BasScript_Vision_GetOffset(script, "camera", 1, 10));
RECORD_STATUS("Vision_GetQuantity", Arm_BasScript_Vision_GetQuantity(script, "camera", 2));
// [ZH] 导出最终脚本文本。默认不执行,避免示例运行时直接下发复杂脚本。
// [EN] Export the final script text. Execution is disabled by default to avoid sending a complex script.
char script_name[128] = {0};
char script_text[8192] = {0};
RECORD_STATUS("GetName", Arm_BasScript_GetName(script, script_name, sizeof(script_name)));
RECORD_STATUS("GetText(final)", Arm_BasScript_GetText(script, script_text, sizeof(script_text)));
printf("[c99_bas_script] script name: %s\n", script_name);
printf("[c99_bas_script] script text:\n%s\n", script_text);
if (execute_generated_script != 0) {
RECORD_STATUS("Execute", Arm_BasScript_Execute(handle, script));
} else {
printf("[c99_bas_script] Execute skipped by default / 默认跳过 Execute\n");
}
RECORD_STATUS("ExtraParam_Reset", Arm_BasExtraParam_Reset(extra));
Arm_BasExtraParam_Destroy(extra);
Arm_BasScript_Destroy(script);
Arm_Disconnect(handle);
Arm_Destroy(handle);
printf("[c99_bas_script] 示例结束 / Example finished\n");
#undef RECORD_STATUS
return overall_status == 0 ? 0 : 1;
}