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

RI_SDK_CreateDeviceComponent

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

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

CreateDeviceComponent - название метода создания компонента уровня устройства

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

  • Shared object
RI_SDK_CreateDeviceComponent(group, deviceName, descriptor,  errorText):errorCode
  • Golang gRPC
RI_SDK_CreateDeviceComponent(group, device string) (descriptor int64, errorText string, errorCode int64, err error)

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

Создает и записывает в реестр библиотеки компонент уровня устройства. Это третий уровень абстракции. Такие компоненты реализуют методы управления своими устройствами. Компонент уровня устройства можно расширить до конкретной модели соответствующего устройства.

Без этого расширения, использование методов управления устройством невозможно, так как именно модель содержит значения параметров, необходимых для управления

Доступные устройства:

  1. i2c_adapter - i2c адаптер
  2. pwm - ШИМ модулятор
  3. servodrive - сервопривод
  4. servodrive_rotate - сервопривод вращения
  5. led - светодиод
  6. voltage_sensor - датчик тока, напряжения и мощности

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

Параметр Тип для Shared object Тип для Golang gRPC Описание
group char[] (тип C) string Тип компонента ("executor", "connector", "sensor")
deviceName char[] (тип C) string Устройство компонента ("i2c", "pwm", "servodrive", "led", "voltage_sensor", "servodrive_rotate")
descriptor *int (тип C) int64 Указатель на компонент, который будет создан
errorText char[1000] (тип C) string Текст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCode int (тип C) int64 Код ошибки

Примеры

Пример №1 - Создание компонента устройства i2c адаптера

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

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

print("descriptor: ", descriptor.value)
    
  • C
// Создание компонента i2c адаптера
errCode = RI_SDK_CreateDeviceComponent("connector", "i2c_adapter", &descriptor, errorText);
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
}

printf("descriptor: %d\n", descriptor);
    
  • C++
// Создание компонента i2c адаптера
char connector[] = "connector";
char i2c_adapter[] = "i2c_adapter";
errCode = RI_SDK_CreateDeviceComponent(connector, i2c_adapter, &descriptor, errorText);
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
}

printf("descriptor: %d\n", descriptor);
    
  • Golang
// Создание компонента i2c адаптера
errCode = C.RI_SDK_CreateDeviceComponent(C.CString("connector"), C.CString("i2c_adapter"), &descriptor, &errorTextC[0])
if errCode != 0 {
  fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
  return
}

fmt.Println("descriptor: ", descriptor)
  • Golang gRPC
// Создание компонента i2c адаптера
descriptor, errorText, errCode, err = client.RoboSdkApi.RI_SDK_CreateDeviceComponent("connector", "i2c_adapter")
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("descriptor: ", descriptor)
  • PHP
// Создание компонента i2c адаптера
$errCode = $ffi->RI_SDK_CreateDeviceComponent("connector", "i2c_adapter", FFI::addr($descriptor), $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

print("descriptor: " . $descriptor->cdata . "\n");
Полный текст примера
  • 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]

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

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

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

    print("descriptor: ", descriptor.value)

    print("Success")

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

int main(){

    char errorText[1000]; // текст ошибки. Передается как входной параметр,при возникновении ошибки в эту переменную будет записан текст ошибки
    int errCode; //код ошибки
    int descriptor; 
    
    // Инициализация библиотеки RI SDK с уровнем логирования 3
    errCode = RI_SDK_InitSDK(3, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

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

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

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

int main(){

    char errorText[1000]; // текст ошибки. Передается как входной параметр,при возникновении ошибки в эту переменную будет записан текст ошибки
    int errCode; //код ошибки
    int descriptor; 
    
    // Инициализация библиотеки RI SDK с уровнем логирования 3
    errCode = RI_SDK_InitSDK(3, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    // Создание компонента i2c адаптера
    char connector[] = "connector";
    char i2c_adapter[] = "i2c_adapter";
    errCode = RI_SDK_CreateDeviceComponent(connector, i2c_adapter, &descriptor, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

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

    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
    descriptor 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
    }

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

    fmt.Println("descriptor: ", descriptor)

    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
    descriptor 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
    }

    // Создание компонента i2c адаптера
    descriptor, errorText, errCode, err = client.RoboSdkApi.RI_SDK_CreateDeviceComponent("connector", "i2c_adapter")
    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("descriptor: ", descriptor)

    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); // Текст ошибки. Передается как входной параметр,при возникновении ошибки в эту переменную будет записан текст ошибки
$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;
}

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

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

print("Success \n");
?>

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

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

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

Навигация

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