Перейти к основному содержимому

RI_SDK_exec_RServoDrive_GetState

Информация

RI_SDK - библиотека Robo Intellect Software Development Kit
exec - название группы устройств исполнителей
RServoDrive - название устройства сервопривода вращения
GetState - название метода чтения состояния сервопривода

Сигнатура функции

RI_SDK_exec_RServoDrive_GetState(descriptor, state, errorText):errorCode

Описание метода

Чтение состояния сервопривода.

Получает значение константы состояния сервопривода с дескриптором descriptor и записывает его в state.

Коды состояния:

0 - Сервопривод ожидает вызова действий. Сервопривод ничего не делает и готов к работе.
1 - Компонент выполняет действие. Сервопривод в данный момент осуществляет движение.

Параметры и возвращаемые значения

ПараметрТип для Shared objectТип для Golang gRPCОписание
descriptorint (тип C)int64Дескриптор компонента сервопривода
state*int (тип C)int64Указатель код состояния сервопривода
errorTextchar[1000] (тип C)stringТекст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCodeint (тип C)int64Код ошибки

Примеры

Пример №1 - Получение состояния сервопривода вращения

В данном примере в переменную state записывается состояние компонента сервопривода с дескриптором, записанным в переменную d_mg996r, и последующий вывод значения переменной state.

# Получение состояния сервопривода вращения
errCode = lib.RI_SDK_exec_RServoDrive_GetState(d_mg996r, state, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("state: ", state.value)

Полный текст примера

from ctypes.util import find_library
import platform
import sys
import time
from ctypes import *

# Подключаем внешнюю библиотеку для работы с SDK
platform = platform.system()
if platform == "Windows":
libName = "librisdk.dll"
if platform == "Linux":
libName = "librisdk.so"

pathLib = find_library(libName)
lib = cdll.LoadLibrary(pathLib)


# Указываем типы аргументов для функций библиотеки RI_SDK
lib.RI_SDK_InitSDK.argtypes = [c_int, c_char_p]
lib.RI_SDK_CreateModelComponent.argtypes = [c_char_p, c_char_p, c_char_p, POINTER(c_int), c_char_p]
lib.RI_SDK_LinkPWMToController.argtypes = [c_int, c_int, c_uint8, c_char_p]
lib.RI_SDK_LinkRServodriveToController.argtypes = [c_int, c_int, c_int, c_char_p]
lib.RI_SDK_DestroySDK.argtypes = [c_bool, c_char_p]
lib.RI_SDK_exec_RServoDrive_RotateWithRelativeSpeedOverTime.argtypes = [c_int, c_int, c_int, c_int, c_bool, c_char_p]
lib.RI_SDK_exec_RServoDrive_GetState.argtypes = [c_int, POINTER(c_int), c_char_p]
lib.RI_SDK_exec_RServoDrive_Stop.argtypes = [c_int, c_char_p]

def main():
errTextC = create_string_buffer(1000) # Текст ошибки. C type: char*
i2c = c_int()
pwm = c_int()
d_mg996r = c_int()
state = c_int()

# Инициализация библиотеки RI SDK с уровнем логирования 3
errCode = lib.RI_SDK_InitSDK(3, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

# Создание компонента i2c адаптера модели ch341
errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "i2c_adapter".encode(), "ch341".encode(), i2c, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("i2c: ", i2c.value)

# Создание компонента ШИМ модели pca9685
errCode = lib.RI_SDK_CreateModelComponent("connector".encode(), "pwm".encode(), "pca9685".encode(), pwm, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("pwm: ", pwm.value)

# Создание компонента сервопривода вращения модели mg996r
errCode = lib.RI_SDK_CreateModelComponent("executor".encode(), "servodrive_rotate".encode(), "mg996r".encode(), d_mg996r, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("servodrive rotate: ", d_mg996r.value)

# Связывание i2c с ШИМ
errCode = lib.RI_SDK_LinkPWMToController(pwm, i2c, 0x40, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

# Связывание ШИМ с сервоприводом
errCode = lib.RI_SDK_LinkRServodriveToController(d_mg996r, pwm, 0, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

# Получение начального состояния сервопривода вращения
errCode = lib.RI_SDK_exec_RServoDrive_GetState(d_mg996r, state, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("state before work: ", state.value)

# Вращение сервопривода по часовой стрелке
# Скорость движения - 100 градусов в секунду
errCode = lib.RI_SDK_exec_RServoDrive_RotateWithRelativeSpeedOverTime(d_mg996r, 0, 50, 2000, True, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

time.sleep(0.1)
# Получение состояния сервопривода вращения во время работы
errCode = lib.RI_SDK_exec_RServoDrive_GetState(d_mg996r, state, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("work state: ", state.value)

time.sleep(1)

# Остановка работы сервопривода вращения
errCode = lib.RI_SDK_exec_RServoDrive_Stop(d_mg996r, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

time.sleep(0.1)
# Получение состояния сервопривода вращения
errCode = lib.RI_SDK_exec_RServoDrive_GetState(d_mg996r, state, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("await state: ", state.value)

# Удаление библиотеки со всеми компонентами
errCode = lib.RI_SDK_DestroySDK(True, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("Success")

main()