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

RI_SDK_sigmod_PWM_GetPortFreq

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

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

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

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

GetPortFreq - название метода чтения частоты ШИМ на указанном порту

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

  • Shared object
RI_SDK_sigmod_PWM_GetPortFreq(descriptor, port, freq, errorTex):errorCode
  • Golang gRPC
RI_SDK_Sigmod_PWM_GetPortFreq(descriptor int64, port int64) (freq int64, errorText string, errorCode int64, err error)

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

Чтение частоты порта.

Записывает в параметр freq значение частоты на порту port для ШИМ модулятора с дескриптором descriptor

*Не поддерживается для модели pca9685

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

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

Примеры

Пример №1 - Чтение частоты ШИМ с указанного порта

В данном примере осуществляется чтение частоты на потру port у устройства ШИМ с дескриптором, записанным в переменную descriptor. Значение частоты сохраняется в переменную freq и выводится в конце.

  • Python
# Получение частоты ШИМ на порту 0
# !!! Не поддерживается для модели pca9685 !!!
errCode = lib.RI_SDK_sigmod_PWM_GetPortFreq(pwm, 0, freq, errTextC)
if errCode != 0:
    print(errCode, errTextC.raw.decode())
    sys.exit(2)  

print("freq byte: ", freq.value)
    
  • C
// Получение частоты ШИМ на порту 0
// !!! Не поддерживается для модели pca9685 !!!
errCode = RI_SDK_sigmod_PWM_GetPortFreq(pwm, 0, &freq, errorText );
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
}

printf("freq byte: %d\n", freq);
  • C++
// Получение частоты ШИМ на порту 0
// !!! Не поддерживается для модели pca9685 !!!
errCode = RI_SDK_sigmod_PWM_GetPortFreq(pwm, 0, &freq, errorText );
if (errCode != 0) {
    printf("errorText:%s\n", errorText);
    return errCode;
}

printf("freq byte: %d\n", freq);
  • Golang
// Получение частоты ШИМ на порту 0
// !!! Не поддерживается для модели pca9685 !!!
errCode = C.RI_SDK_sigmod_PWM_GetPortFreq(pwm, 0, &freq, &errorTextC[0])
if errCode != 0 {
    fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
    return
}

fmt.Println("freq byte: ", freq)
  • Golang gRPC
// Получение частоты ШИМ на порту 0
// !!! Не поддерживается для модели pca9685 !!!
freq, errorText, errCode, err = client.RoboSdkApi.RI_SDK_Sigmod_PWM_GetPortFreq(pwm, 0)
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("freq byte: ", freq)
  • PHP
// Получение частоты ШИМ на порту 0
// !!! Не поддерживается для модели pca9685 !!!
$errCode = $ffi->RI_SDK_sigmod_PWM_GetPortFreq($pwm->cdata, 0, FFI::addr($freq), $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

print("freq byte: " . $freq->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_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_GetPortFreq.argtypes = [c_int, c_int, POINTER(c_int), c_char_p]

def main():
    errTextC = create_string_buffer(1000)  # Текст ошибки. C type: char*
    i2c = c_int()
    pwm = c_int()
    freq = 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
    # !!! Не поддерживается для модели pca9685 !!!
    errCode = lib.RI_SDK_sigmod_PWM_GetPortFreq(pwm, 0, freq, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)  

    print("freq byte: ", freq.value)

    # Удаление библиотеки со всеми компонентами
    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;
    int freq;

    // Инициализация библиотеки 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
    // !!! Не поддерживается для модели pca9685 !!!
    errCode = RI_SDK_sigmod_PWM_GetPortFreq(pwm, 0, &freq, errorText );
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    printf("freq byte: %d\n", freq);

    // Удаление библиотеки со всеми компонентами
    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;
    int freq;

    // Инициализация библиотеки 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
    // !!! Не поддерживается для модели pca9685 !!!
    errCode = RI_SDK_sigmod_PWM_GetPortFreq(pwm, 0, &freq, errorText );
    if (errCode != 0) {
        printf("errorText:%s\n", errorText);
        return errCode;
    }

    printf("freq byte: %d\n", freq);

    // Удаление библиотеки со всеми компонентами
    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
    freq       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
    // !!! Не поддерживается для модели pca9685 !!!
    errCode = C.RI_SDK_sigmod_PWM_GetPortFreq(pwm, 0, &freq, &errorTextC[0])
    if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorTextC[0]))
        return
    }

    fmt.Println("freq byte: ", freq)

    // Удаление библиотеки со всеми компонентами
    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
    freq      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
    // !!! Не поддерживается для модели pca9685 !!!
    freq, errorText, errCode, err = client.RoboSdkApi.RI_SDK_Sigmod_PWM_GetPortFreq(pwm, 0)
    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("freq byte: ", freq)

    // Удаление библиотеки со всеми компонентами
    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);
$freq = $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
// !!! Не поддерживается для модели pca9685 !!!
$errCode = $ffi->RI_SDK_sigmod_PWM_GetPortFreq($pwm->cdata, 0, FFI::addr($freq), $errorText);
if ($errCode) {
    print("errorText:" . FFI::string($errorText). " errCode: " . $errCode . " \n");
    return $errCode;
}

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

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

print("Success \n");
?>

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

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

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

Навигация

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