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

RI_SDK_sigmod_PWM_SetPortDutyCycle

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

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

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

PWM - название устройства ШИМ

SetPortDutyCycle - название метода установки скважности у ШИМ на указанном порту

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

  • Shared object
RI_SDK_sigmod_PWM_SetPortDutyCycle(descriptor, port, on, off, errorTex):errorCode
  • Golang gRPC
RI_SDK_Sigmod_PWM_SetPortDutyCycle(descriptor int64, port int64, on int64, off int64) (errorText string, errorCode int64, err error)

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

Установка скважности.

Устанавливает новое значение скважности на порту port для ШИМ модулятора с дескриптором descriptor. Скважность задается с помощью параметров on и off, в которых передаются соответственно количества тактов до перевода выхода в состояние логической «1» и логического «0».

Значение on и off зависит от спецификаций конкретного ШИМ контроллера, например для PCA9685 разрешение ШИМ: 12 бит = 4096 тактов (рабочий цикл от 0 до 100%). Этот параметр показывает, с какой точностью мы можем менять коэффициент заполнения. Чем больше разрешение,тем плавнее будет меняться мощность на управляемом устройстве.

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

Параметр Тип для Shared object Тип для Golang gRPC Описание
descriptor int (тип C) int64 Дескриптор компонента ШИМ
port int (тип C) int64 Порт, для которого читается частота
on int (тип C) int64 Количество тактов до перевода выхода в состояние логической «1»
off int (тип C) int64 Количество тактов до перевода выхода в состояние логического «0»
errorText char[1000] (тип C) string Текст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCode int (тип C) int64 Код ошибки

Примеры

Пример №1 - Установка скважности у ШИМ на порту с индексом 0.

В данном примере осуществляется установка скважности на потру 0 у устройства ШИМ с дескриптором, записанным в переменную pwm. Значения количества тактов до перевода выхода в состояние логической «1» - 0. Значения количества тактов до перевода выхода в состояние логической «0» - 500.

  • Python
# Установка скважности у ШИМ на порту 0
errCode = lib.RI_SDK_sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500, errTextC)
if errCode != 0:
    print(errCode, errTextC.raw.decode())
    sys.exit(2)
    
  • C
// Установка скважности у ШИМ на порту 0
errCode = RI_SDK_sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500, errorText );
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
}
  • C++
// Установка скважности у ШИМ на порту 0
errCode = RI_SDK_sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500, errorText );
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
}
    
  • Golang
// Установка скважности у ШИМ на порту 0
errCode = C.RI_SDK_sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500, &errorTextC[0])
if errCode != 0 {
    fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
    return
}
  • Golang gRPC
// Установка скважности у ШИМ на порту 0
errorText, errCode, err = client.RoboSdkApi.RI_SDK_Sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500)
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
// Установка скважности у ШИМ на порту 0
$errCode = $ffi->RI_SDK_sigmod_PWM_SetPortDutyCycle($pwm->cdata, 0, 0, 500, $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_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_DestroySDK.argtypes = [c_bool, c_char_p]
lib.RI_SDK_sigmod_PWM_SetPortDutyCycle.argtypes = [c_int, c_int, c_int, c_int, c_char_p]

def main():
    errTextC = create_string_buffer(1000)  # Текст ошибки. C type: char*
    i2c = c_int()
    pwm = 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)

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

    # Установка скважности у ШИМ на порту 0
    errCode = lib.RI_SDK_sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)  

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

    print("Success")

main()

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

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

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

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

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

    // Создание компонента ШИМ модели pca9685
    errCode = RI_SDK_CreateModelComponent("connector", "pwm", "pca9685", &pwm, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

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

    // Связывание i2c с ШИМ
    errCode = RI_SDK_LinkPWMToController(pwm, i2c, 0x40, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    // Установка скважности у ШИМ на порту 0
    errCode = RI_SDK_sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500, errorText );
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    // Удаление библиотеки со всеми компонентами
    errCode = RI_SDK_DestroySDK(true, 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 i2c;
    int pwm;

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

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

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

    // Создание компонента ШИМ модели pca9685
    char pwmGroup[] = "connector";
    char pwmDevice[] = "pwm";
    char pwmModel[] = "pca9685";
    errCode = RI_SDK_CreateModelComponent(pwmGroup, pwmDevice, pwmModel, &pwm, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

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

    // Связывание i2c с ШИМ
    errCode = RI_SDK_LinkPWMToController(pwm, i2c, 0x40, errorText);
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    // Установка скважности у ШИМ на порту 0
    errCode = RI_SDK_sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500, errorText );
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    // Удаление библиотеки со всеми компонентами
    errCode = RI_SDK_DestroySDK(true, 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
    i2c        C.int
    pwm        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 адаптера модели ch341
    errCode = C.RI_SDK_CreateModelComponent(C.CString("connector"), C.CString("i2c_adapter"), C.CString("ch341"), &i2c, &errorTextC[0])
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
        return
    }

    fmt.Println("i2c: ", i2c)

    // Создание компонента ШИМ модели pca9685
    errCode = C.RI_SDK_CreateModelComponent(C.CString("connector"), C.CString("pwm"), C.CString("pca9685"), &pwm, &errorTextC[0])
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
        return
    }

    fmt.Println("pwm: ", pwm)

    // Связывание i2c с ШИМ
    errCode = C.RI_SDK_LinkPWMToController(pwm, i2c, 0x40, &errorTextC[0])
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
        return
    }

    // Установка скважности у ШИМ на порту 0
    errCode = C.RI_SDK_sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500, &errorTextC[0])
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
        return
    }

    // Удаление библиотеки со всеми компонентами
    errCode = C.RI_SDK_DestroySDK(true, &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
    i2c       int64
    pwm       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 адаптера модели ch341
    i2c, errorText, errCode, err = client.RoboSdkApi.RI_SDK_CreateModelComponent("connector", "i2c_adapter", "ch341")
    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("i2c: ", i2c)

    // Создание компонента ШИМ модели pca9685
    pwm, errorText, errCode, err = client.RoboSdkApi.RI_SDK_CreateModelComponent("connector", "pwm", "pca9685")
    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("pwm: ", pwm)

    // Связывание i2c с ШИМ
    errorText, errCode, err = client.RoboSdkApi.RI_SDK_LinkPWMToController(pwm, i2c, 0x40)
    if err != nil {
        fmt.Printf("gRPC Error: %v\n", err)
        return
    }
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, errorText)
        return
    }

    // Установка скважности у ШИМ на порту 0
    errorText, errCode, err = client.RoboSdkApi.RI_SDK_Sigmod_PWM_SetPortDutyCycle(pwm, 0, 0, 500)
    if err != nil {
        fmt.Printf("gRPC Error: %v\n", err)
        return
    }
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, errorText)
        return
    }

    // Удаление библиотеки со всеми компонентами
    errorText, errCode, err = client.RoboSdkApi.RI_SDK_DestroySDK(true)
    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); // Текст ошибки. Передается как входной параметр,при возникновении ошибки в эту переменную будет записан текст ошибки
$i2c = $ffi->new('int', 0);
$pwm = $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 адаптера модели ch341
$errCode = $ffi->RI_SDK_CreateModelComponent("connector", "i2c_adapter", "ch341", FFI::addr($i2c), $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

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

// Создание компонента ШИМ
$errCode = $ffi->RI_SDK_CreateModelComponent("connector", "pwm", "pca9685", FFI::addr($pwm), $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

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

// Связывание i2c с ШИМ
$errCode = $ffi->RI_SDK_LinkPWMToController($pwm->cdata, $i2c->cdata, 0x40, $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

// Установка скважности у ШИМ на порту 0
$errCode = $ffi->RI_SDK_sigmod_PWM_SetPortDutyCycle($pwm->cdata, 0, 0, 500, $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

// Удаление библиотеки со всеми компонентами
$errCode = $ffi->RI_SDK_DestroySDK(true, $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

print("Success \n");
?>

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

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

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

Навигация

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