Skip to content

4.6 C99 BasScript Builder

개요

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 슬레이브 ID
address : 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 슬레이브 ID
address : 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 슬레이브 ID
address : 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에서 옵니다
ArmBasRegisterTypeR / SR / MH / MI
ArmBasIOTypeDI / DO / AI / AO / RI / RO / UI / UO / GI / GO / TAI / TAO / TDI / TDO
ArmBasIOStatusON / OFF / PULSE / 상승 에지 / 하강 에지
ArmBasBooleanOperatorAND / OR / EQ / NE / GT / GE / LT / LE
ArmBasAssignTypeASSIGN 왼쪽 대상 또는 오른쪽 소스
ArmBasOtherType리터럴, 문자열, IO 상태, 현재 자세
ArmBasCurrentPose현재 관절 또는 직교 좌표 자세
ArmBasLoadTypeLOAD / UNLOAD / EXEC의 프로그램 식별자 소스
ArmBasStrTypeSocket 문자열 또는 SR
ArmBasValueType직접 값 또는 R 레지스터
ArmBasParamTypeTF, UF, OVC, OAC, 페이로드 번호
ArmBasMathOperator사칙 연산용 예약 열거형
ArmBasValueTagArmBasValue 의 현재 필드 의미를 나타냅니다

핵심 의미

범주설명
운동 속도MoveJoint 에서 직접 속도 값을 사용할 때 범위는 0~100 입니다. MoveLine , MoveCircle 에서 직접 속도 값을 사용할 때 범위는 0~5000 입니다.
Jump 포인트MoveJump3MoveJump3cpposeIndexList 는 반드시 PR 포인트 인덱스 3 개를 포함해야 합니다.
조건문IF, ELSE IF, WHILE, WAIT, SKIP CONDITION 동일한 조건 파라미터 기준을 사용하며 레지스터, IO, 리터럴, 문자열, IO 상태를 지원합니다.
SELECT 문장Arm_BasScript_Logical_Switch() 는 SELECT를 출력하고, Arm_BasScript_Logical_EndSwitch() 는 ENDSELECT를 출력합니다.
닫힘 검증IF / SELECT / WHILE은 반드시 닫아야 합니다. 스크립트 텍스트를 내보내거나 실행하기 전에 해당 종료 문장을 보완해야 합니다.
SocketARM_BAS_STR_STRING 은 문자열 값을 사용하고, ARM_BAS_STR_SR 은 SR 번호를 사용합니다.
ModbusReadMH / ReadMI 는 결과를 R 레지스터에 씁니다. WriteMH 는 직접 값 또는 R 레지스터 값을 쓸 수 있습니다.
추가 가속도Arm_BasExtraParam_Acceleration() 의 유효 범위는 1~120 입니다. 범위를 벗어나면 100.0 으로 출력합니다.
TB 추가 파라미터TB 파라미터는 " name 이 있는 RUN" 또는 " index + status 가 있는 ASSIGN" 중 하나를 만족해야 합니다.
ApproachArm_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)  // 예제 프로그램 진입점
{  // 예제 main 함수 시작
    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;  // 예제를 정상 종료합니다.
}  // 예제 main 함수 종료

시나리오 예제

운동 문장 및 추가 파라미터

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);  // 스크립트 생성기를 폐기합니다.

예제 코드

c99/bas_script_execution/src/main.cpp
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;
}