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

RI_SDK_exec_RServoDrive_CustomDeviceInit

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

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

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

RServoDrive - название устройства сервопривода вращения

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

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

  • Shared object
RI_SDK_exec_RServoDrive_CustomDeviceInit(descriptor, minPulseClockwise, maxPulseClockwise, minPulseCounterClockwise, maxPulseCounterClockwise, errorText):errorCode
  • Golang gRPC
RI_SDK_Exec_RServoDrive_CustomDeviceInit(descriptor, minPulseClockwise, maxPulseClockwise, minPulseCounterClockwise, maxPulseCounterClockwise int64) (errorText string, errorCode int64, err error)

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

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

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

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

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

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

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

Примеры

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

В данном примере осуществляется инициализация собственного компонента сервопривода. Устанавливаются следующие значения:
Минимальное значение импульса для поворота по часовой - 400 микросекунд Максимальное значение импульса для поворота по часовой - 1420 микросекунд Минимальное значение импульса для поворота против часовой - 1540 микросекунд Максимальное значение импульса для поворота против часовой - 2560 микросекунд

  • Python
# Инициализация собственной модели сервопривод вращения
# Минимальное значение импульса для поворота по часовой - 400 микросекунд
# Максимальное значение импульса для поворота по часовой - 1420 микросекунд
# Минимальное значение импульса для поворота против часовой - 1540 микросекунд
# Максимальное значение импульса для поворота против часовой - 2560 микросекунд
errCode = lib.RI_SDK_exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560, errTextC)
if errCode != 0:
    print(errCode, errTextC.raw.decode())
    sys.exit(2)
  • C
// Инициализация собственной модели сервопривод вращения
// Минимальное значение импульса для поворота по часовой - 400 микросекунд
// Максимальное значение импульса для поворота по часовой - 1420 микросекунд
// Минимальное значение импульса для поворота против часовой - 1540 микросекунд
// Максимальное значение импульса для поворота против часовой - 2560 микросекунд
errCode = RI_SDK_exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560, errorText);
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
}
  • C++
// Инициализация собственной модели сервопривод вращения
// Минимальное значение импульса для поворота по часовой - 400 микросекунд
// Максимальное значение импульса для поворота по часовой - 1420 микросекунд
// Минимальное значение импульса для поворота против часовой - 1540 микросекунд
// Максимальное значение импульса для поворота против часовой - 2560 микросекунд
errCode = RI_SDK_exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560, errorText);
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
} 
  • Golang
// Инициализация собственной модели сервопривод вращения
// Минимальное значение импульса для поворота по часовой - 400 микросекунд
// Максимальное значение импульса для поворота по часовой - 1420 микросекунд
// Минимальное значение импульса для поворота против часовой - 1540 микросекунд
// Максимальное значение импульса для поворота против часовой - 2560 микросекунд
errCode = C.RI_SDK_exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560, &errorTextC[0])
if errCode != 0 {
    fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
    return
}
  • Golang gRPC
// Инициализация собственной модели сервопривод вращения
// Минимальное значение импульса для поворота по часовой - 400 микросекунд
// Максимальное значение импульса для поворота по часовой - 1420 микросекунд
// Минимальное значение импульса для поворота против часовой - 1540 микросекунд
// Максимальное значение импульса для поворота против часовой - 2560 микросекунд
errorText, errCode, err = client.RoboSdkApi.RI_SDK_Exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560)
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 микросекунд
# Минимальное значение импульса для поворота против часовой - 1540 микросекунд
# Максимальное значение импульса для поворота против часовой - 2560 микросекунд
$errCode = $ffi->RI_SDK_exec_RServoDrive_CustomDeviceInit($rservo->cdata, 400, 1420, 1540, 2560, $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_RServoDrive_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*
    rservo = 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_rotate".encode(),  rservo, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    print("rservo: ", rservo.value)

    # Инициализация собственной модели сервопривод вращения
    # Минимальное значение импульса для поворота по часовой - 400 микросекунд
    # Максимальное значение импульса для поворота по часовой - 1420 микросекунд
    # Минимальное значение импульса для поворота против часовой - 1540 микросекунд
    # Максимальное значение импульса для поворота против часовой - 2560 микросекунд
    errCode = lib.RI_SDK_exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560, 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 rservo;

    // Инициализация библиотеки 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_rotate", &rservo, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

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

    // Инициализация собственной модели сервопривод вращения
    // Минимальное значение импульса для поворота по часовой - 400 микросекунд
    // Максимальное значение импульса для поворота по часовой - 1420 микросекунд
    // Минимальное значение импульса для поворота против часовой - 1540 микросекунд
    // Максимальное значение импульса для поворота против часовой - 2560 микросекунд
    errCode = RI_SDK_exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560, 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 rservo;

    // Инициализация библиотеки 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_rotate";
    errCode = RI_SDK_CreateDeviceComponent(servoGroup, servoDevice, &rservo, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

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

    // Инициализация собственной модели сервопривод вращения
    // Минимальное значение импульса для поворота по часовой - 400 микросекунд
    // Максимальное значение импульса для поворота по часовой - 1420 микросекунд
    // Минимальное значение импульса для поворота против часовой - 1540 микросекунд
    // Максимальное значение импульса для поворота против часовой - 2560 микросекунд
    errCode = RI_SDK_exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560, 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
    rservo     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_rotate"), &rservo, &errorTextC[0])
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
        return
    }

    fmt.Println("rservo: ", rservo)

    // Инициализация собственной модели сервопривод вращения
    // Минимальное значение импульса для поворота по часовой - 400 микросекунд
    // Максимальное значение импульса для поворота по часовой - 1420 микросекунд
    // Минимальное значение импульса для поворота против часовой - 1540 микросекунд
    // Максимальное значение импульса для поворота против часовой - 2560 микросекунд
    errCode = C.RI_SDK_exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560, &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
    rservo    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
    }

    // Создание компонента сервопривода вращения
    rservo, errorText, errCode, err = client.RoboSdkApi.RI_SDK_CreateDeviceComponent("executor", "servodrive_rotate")
    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("rservo: ", rservo)

    // Инициализация собственной модели сервопривод вращения
    // Минимальное значение импульса для поворота по часовой - 400 микросекунд
    // Максимальное значение импульса для поворота по часовой - 1420 микросекунд
    // Минимальное значение импульса для поворота против часовой - 1540 микросекунд
    // Максимальное значение импульса для поворота против часовой - 2560 микросекунд
    errorText, errCode, err = client.RoboSdkApi.RI_SDK_Exec_RServoDrive_CustomDeviceInit(rservo, 400, 1420, 1540, 2560)
    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); // Текст ошибки. Передается как входной параметр,при возникновении ошибки в эту переменную будет записан текст ошибки
$rservo = $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_rotate", FFI::addr($rservo), $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

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

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

print("Success \n");
?>

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

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

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

Навигация

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