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

RI_SDK_exec_ServoDrive_CustomDeviceInit

Информация

RI_SDK - библиотека Robo Intellect Software Development Kit
exec - название группы устройств исполнителей
ServoDrive - название устройства сервопривод
CustomDeviceInit - название метода инициализации собственного компонента сервопривода

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

RI_SDK_exec_ServoDrive_CustomDeviceInit(descriptor, maxImpulse, minImpulse, maxSpeed,  rangeAngle, errorText):errorCode

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

Инициализация собственного компонента.

Инициализирует собственный компонент сервопривода. Альтернатива функции RI_SDK_exec_ServoDrive_ExtendToModel.

Устанавливает значения минимального и максимального импульса (мкс), максимальной скорости вращения (градусов в секунду), размера рабочего диапазона в мкс. Эти значение устанавливаются для сервопривода с дескриптором descriptor.

Данная функция используется для получения возможности работы с сервоприводом, модель которого не поддерживается библиотекой.

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

ПараметрТип для Shared objectТип для Golang gRPCОписание
descriptorint (тип C)int64Дескриптор компонента сервопривода, который будет инициализирован
maxImpulseint (тип C)int64Максимальное значение импульса (микросекунды)
minImpulseint (тип C)int64Минимальное значение импульса (микросекунды)
maxSpeedint (тип C)int64Максимальная угловая скорость (градус / секунда)
rangeAngleint (тип C)int64Диапазон вращения сервопривода (микросекунды)
errorTextchar[1000] (тип C)stringТекст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCodeint (тип C)int64Код ошибки

Примеры

Пример №1 - Инициализация собственного компонента сервопривода

В данном примере осуществляется инициализация собственного компонента сервопривода. Устанавливаются следующие значения:
Максимальное значение импульса - 2500 микросекунд
Максимальная угловая скорость - 100 градусов в секунду Диапазон вращения сервопривода - 2000 микросекунд

# Инициализация собственной модели сервопривода
# Максимальное значение управляющего импульсом - 2500 микросекунд
# Минимальное значение управляющего импульсом - 500 микросекунд
# Максимальная скорость поворота - 100 градусов в секунду
# Размер рабочего диапазона - 2000 микросекунд
errCode = lib.RI_SDK_exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)
Полный текст примера

from ctypes.util import find_library
import platform
import sys
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_CreateDeviceComponent.argtypes = [c_char_p, c_char_p, POINTER(c_int), c_char_p]
lib.RI_SDK_exec_ServoDrive_CustomDeviceInit.argtypes = [c_int, c_int, c_int, c_int, c_int, c_char_p]

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

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

# Создание компонента сервопривода
errCode = lib.RI_SDK_CreateDeviceComponent("executor".encode(), "servodrive".encode(), servo, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("servo: ", servo.value)

# Инициализация собственной модели сервопривода
# Максимальное значение управляющего импульсом - 2500 микросекунд
# Минимальное значение управляющего импульсом - 500 микросекунд
# Максимальная скорость поворота - 100 градусов в секунду
# Размер рабочего диапазона - 2000 микросекунд
errCode = lib.RI_SDK_exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("Success")

main()