DLLStatusGetItem
函数 DLLStatusGetItem 读取单个状态项的当前值。(常用状态项代码定义在头文件中:位置反馈、指令位置、速度反馈、电流反馈、轴状态字等。)
C/C++
ErrorCode DLLStatusGetItem(INT_PTR hClientHandle, short axis, short itemCode, int extra, double* outValue);
C#
Controller.Commands[taskId].Status.AxisStatus(axis, AxisStatusSignal.XXX) — 读取轴状态信号;任务/系统状态用 TaskStatus / SystemStatus。
参数
hClientHandle (INT_PTR)
客户端会话句柄,由 DLLSysConnect 获取。
axis (short)
轴编号(0-indexed)。
itemCode (short)
状态项代码。常用代码(定义于 OneSysC.h): - ONE_STATUS_POSITION_FEEDBACK (0):位置反馈(单位取决于控制器配置) - ONE_STATUS_POSITION_COMMAND (1):指令位置 - ONE_STATUS_VELOCITY_FEEDBACK (3):速度反馈 - ONE_STATUS_CURRENT_FEEDBACK (7):电流反馈(单位 A) - ONE_STATUS_DRIVE_STATUS (47):驱动状态字 - ONE_STATUS_AXIS_STATUS (48):轴状态字(bit ONE_AXIS_STATUS_MOVE_DONE = 0x00400000 表示运动完成) - ONE_STATUS_AXIS_FAULT (49):轴故障字
extra (int)
额外参数。大多数状态项传入 0。具体含义参见固件文档。
outValue (double*)
输出。接收状态项的当前值。
返回值
返回 ErrorCode;NoError (0) 表示成功,正值为错误码,详见 SDK 发布头 ErrorCode.h。
说明
ONE_STATUS_AXIS_STATUS 值中的 ONE_AXIS_STATUS_MOVE_DONE 位(0x00400000)可判断轴是否完成当前运动。典型轮询方式: c double status = 0; DLLStatusGetItem(handle, axis, ONE_STATUS_AXIS_STATUS, 0, &status); if ((unsigned int)status & ONE_AXIS_STATUS_MOVE_DONE) { /* 运动完成 */ }
示例
/* 轮询运动完成(ONE_AXIS_STATUS_MOVE_DONE 位) */
double status = 0;
do {
DLLStatusGetItem(handle, 0, ONE_STATUS_AXIS_STATUS, 0, &status);
Sleep(20);
} while (((unsigned int)status & ONE_AXIS_STATUS_MOVE_DONE) == 0);