Программирование на Blockly
Документация по RoboIntellect SDK (RI SDK)
Функциональный RI SDK API исполнительных устройств

RI_SDK_exec_ServoDrive_CustomDeviceInit

!!! ИНФОРМАЦИЯ

RI_SDK - библиотека Robo Intellect Software Development Kit

exec - название группы устройств исполнителей

ServoDrive - название устройства сервопривод

CustomDeviceInit - название метода инициализации собственного компонента сервопривода

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

  • Shared object
RI_SDK_exec_ServoDrive_CustomDeviceInit(descriptor, maxImpulse, minImpulse, maxSpeed,  rangeAngle, errorText):errorCode
  • Golang gRPC
RI_SDK_Exec_ServoDrive_CustomDeviceInit(descriptor, maxImpulse, minImpulse, maxSpeed, rangeAngle int64) (errorText string, errorCode int64, err error)

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

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

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

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

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

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

Параметр Тип для Shared object Тип для Golang gRPC Описание
descriptor int (тип C) int64 Дескриптор компонента сервопривода, который будет инициализирован
maxImpulse int (тип C) int64 Максимальное значение импульса (микросекунды)
minImpulse int (тип C) int64 Минимальное значение импульса (микросекунды)
maxSpeed int (тип C) int64 Максимальная угловая скорость (градус / секунда)
rangeAngle int (тип C) int64 Диапазон вращения сервопривода (микросекунды)
errorText char[1000] (тип C) string Текст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCode int (тип C) int64 Код ошибки

Примеры

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

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

  • Python
# Инициализация собственной модели сервопривода
# Максимальное значение управляющего импульсом - 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)
  • C
// Инициализация собственной модели сервопривода
// Максимальное значение управляющего импульсом - 2500 микросекунд
// Минимальное значение управляющего импульсом - 500 микросекунд
// Максимальная скорость поворота - 100 градусов в секунду
// Размер рабочего диапазона - 2000 микросекунд
errCode = RI_SDK_exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000, errorText);
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
}
  • C++
// Инициализация собственной модели сервопривода
// Максимальное значение управляющего импульсом - 2500 микросекунд
// Минимальное значение управляющего импульсом - 500 микросекунд
// Максимальная скорость поворота - 100 градусов в секунду
// Размер рабочего диапазона - 2000 микросекунд
errCode = RI_SDK_exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000, errorText);
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
} 
  • Golang
// Инициализация собственной модели сервопривода
// Максимальное значение управляющего импульсом - 2500 микросекунд
// Минимальное значение управляющего импульсом - 500 микросекунд
// Максимальная скорость поворота - 100 градусов в секунду
// Размер рабочего диапазона - 2000 микросекунд
errCode = C.RI_SDK_exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000, &errorTextC[0])
if errCode != 0 {
    fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
    return
}
  • Golang gRPC
// Инициализация собственной модели сервопривода
// Максимальное значение управляющего импульсом - 2500 микросекунд
// Минимальное значение управляющего импульсом - 500 микросекунд
// Максимальная скорость поворота - 100 градусов в секунду
// Размер рабочего диапазона - 2000 микросекунд
errorText, errCode, err = client.RoboSdkApi.RI_SDK_Exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000)
if err != nil {
    fmt.Printf("gRPC Error: %v\n", err)
    return
}
if errCode != 0 {
    fmt.Printf("errorCode:%d - errorText:%s\n", errCode, errorText)
    return
}
  • PHP
// Инициализация собственной модели сервопривода
// Максимальное значение управляющего импульса - 2500 микросекунд
// Минимальное значение управляющего импульса - 500 микросекунд
// Максимальная скорость поворота - 100 градусов в секунду
// Размер рабочего диапазона - 2000 микросекунд
$errCode = $ffi->RI_SDK_exec_ServoDrive_CustomDeviceInit($servo->cdata, 2500, 500, 100, 2000, $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}
Полный текст примера
  • Python
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()

 
  • C
#include "./librisdk.h" // Подключение библиотеки

int main(){
    char errorText[1000]; // текст ошибки. Передается как входной параметр,при возникновении ошибки в эту переменную будет записан текст ошибки
    int errCode; //код ошибки
    int servo;

    // Инициализация библиотеки RI SDK с уровнем логирования 3
    errCode = RI_SDK_InitSDK(3, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    // Создание компонента сервопривода
    errCode = RI_SDK_CreateDeviceComponent("executor", "servodrive", &servo, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    printf("servo: %d\n", servo);

    // Инициализация собственной модели сервопривода
    // Максимальное значение управляющего импульсом - 2500 микросекунд
    // Минимальное значение управляющего импульсом - 500 микросекунд
    // Максимальная скорость поворота - 100 градусов в секунду
    // Размер рабочего диапазона - 2000 микросекунд
    errCode = RI_SDK_exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    printf("Success");
    return 0;
}
  • C++
#include <stdbool.h>
#include "./librisdk.h" // Подключение библиотеки

int main(){
    char errorText[1000]; // текст ошибки. Передается как входной параметр,при возникновении ошибки в эту переменную будет записан текст ошибки
    int errCode; //код ошибки
    int servo;

    // Инициализация библиотеки RI SDK с уровнем логирования 3
    errCode = RI_SDK_InitSDK(3, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    // Создание компонента сервопривода
    char servoGroup[] = "executor";
    char servoDevice[] = "servodrive";
    errCode = RI_SDK_CreateDeviceComponent(servoGroup, servoDevice, &servo, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    printf("servo: %d\n", servo);

    // Инициализация собственной модели сервопривода
    // Максимальное значение управляющего импульсом - 2500 микросекунд
    // Минимальное значение управляющего импульсом - 500 микросекунд
    // Максимальная скорость поворота - 100 градусов в секунду
    // Размер рабочего диапазона - 2000 микросекунд
    errCode = RI_SDK_exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    printf("Success");
    return 0;
}
  • Golang
package main

/*
#cgo CFLAGS: -I.
#cgo LDFLAGS: -L. -lrisdk
#include <librisdk.h> // Подключаем внешнюю библиотеку для работы с SDK.
*/
import "C"
import "fmt"

var (
    errorTextC [1000]C.char // Текст ошибки. C type: char*
    errCode    C.int        // Код ошибки. C type: int
    servo      C.int
)

func main() {

    // Инициализация библиотеки RI SDK с уровнем логирования 3
    errCode = C.RI_SDK_InitSDK(3, &errorTextC[0])
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
        return
    }

    // Создание компонента сервопривода
    errCode = C.RI_SDK_CreateDeviceComponent(C.CString("executor"), C.CString("servodrive"), &servo, &errorTextC[0])
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
        return
    }

    fmt.Println("servo: ", servo)

    // Инициализация собственной модели сервопривода
    // Максимальное значение управляющего импульсом - 2500 микросекунд
    // Минимальное значение управляющего импульсом - 500 микросекунд
    // Максимальная скорость поворота - 100 градусов в секунду
    // Размер рабочего диапазона - 2000 микросекунд
    errCode = C.RI_SDK_exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000, &errorTextC[0])
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
        return
    }

    fmt.Println("Success")

}
  • Golang gRPC
package main

import (
    "fmt"

    "github.com/rbs-ri/go-risdk"
)

var (
    client    *risdk.ClientRPC // Объект взяимодействия с API SDK
    errorText string           // Текст ошибки
    errCode   int64            // Код ошибки
    err       error            // Ошибка gRPC
    servo     int64
)

func main() {

    // Открываем соединение для работы с API SDK по RPC
    client = risdk.GetClientRPC()

    // Закрываем соединение с RPC
    defer client.Client.Kill()

    // Инициализация библиотеки RI SDK с уровнем логирования 3
    errorText, errCode, err = client.RoboSdkApi.RI_SDK_InitSDK(3)
    if err != nil {
        fmt.Printf("gRPC Error: %v\n", err)
        return
    }
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, errorText)
        return
    }

    // Создание компонента сервопривода
    servo, errorText, errCode, err = client.RoboSdkApi.RI_SDK_CreateDeviceComponent("executor", "servodrive")
    if err != nil {
        fmt.Printf("gRPC Error: %v\n", err)
        return
    }
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, errorText)
        return
    }

    fmt.Println("servo: ", servo)

    // Инициализация собственной модели сервопривода
    // Максимальное значение управляющего импульсом - 2500 микросекунд
    // Минимальное значение управляющего импульсом - 500 микросекунд
    // Максимальная скорость поворота - 100 градусов в секунду
    // Размер рабочего диапазона - 2000 микросекунд
    errorText, errCode, err = client.RoboSdkApi.RI_SDK_Exec_ServoDrive_CustomDeviceInit(servo, 2500, 500, 100, 2000)
    if err != nil {
        fmt.Printf("gRPC Error: %v\n", err)
        return
    }
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, errorText)
        return
    }

    fmt.Println("Success")

}
  • PHP
<?php
// Подключаем внешнюю библиотеку для работы с SDK
$RELATIVE_PATH = '';
$headers = file_get_contents(__DIR__ . $RELATIVE_PATH . '/librisdk.h');
$headers = preg_replace(['/#ifdef __cplusplus\s*extern "C" {\s*#endif/i', '/#ifdef __cplusplus\s*}\s*#endif/i'], '', $headers);
$ffi = FFI::cdef($headers, __DIR__ . $RELATIVE_PATH . '/librisdk.dll');

$errorText = $ffi->new('char[1000]', 0); // Текст ошибки. Передается как входной параметр,при возникновении ошибки в эту переменную будет записан текст ошибки
$servo = $ffi->new('int', 0);
$descriptor = $ffi->new('int', 0);

// Инициализация библиотеки RI SDK с уровнем логирования 3
$errCode = $ffi->RI_SDK_InitSDK(3, $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText) . " errCode: " . $errCode . " \n");
    return $errCode;
}

// Создание компонента сервопривода
$errCode = $ffi->RI_SDK_CreateDeviceComponent("executor", "servodrive", FFI::addr($servo), $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

print("servo: " . $servo->cdata . "\n");

// Инициализация собственной модели сервопривода
// Максимальное значение управляющего импульса - 2500 микросекунд
// Минимальное значение управляющего импульса - 500 микросекунд
// Максимальная скорость поворота - 100 градусов в секунду
// Размер рабочего диапазона - 2000 микросекунд
$errCode = $ffi->RI_SDK_exec_ServoDrive_CustomDeviceInit($servo->cdata, 2500, 500, 100, 2000, $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

print("Success \n");
?>

43 просмотров0 комментариев

Комментарии (0)

Для участия в обсуждении вы должны быть авторизованным пользователем
Разделы
Программирование на Blockly
Документация по RoboIntellect SDK (RI SDK)
Функциональный RI SDK API исполнительных устройств

Навигация

ВойтиРегистрация