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

RI_SDK_sensor_VoltageSensor_CustomDeviceInit

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

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

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

Voltage - название устройства датчика тока, напряжения и мощности

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

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

  • Shared object
RI_SDK_sensor_VoltageSensor_CustomDeviceInit(descriptor, lsbBus, lsbShunt, shuntResist, regVoltageShunt, regVoltageBus, errorText):errorCode
  • Golang gRPC
RI_SDK_sensor_VoltageSensor_CustomDeviceInit(descriptor int64, lsbBus, lsbShunt, shuntResist float64, regVoltageShunt, regVoltageBus byte) (descriptor int64, errorText string, errorCode int64, err error)

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

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

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

Устанавливает значение младшего бита напряжения на шине(Вольт), значение младшего бита напряжения на шунте(Вольт) и сопротивление шунта(Ом). Эти значение устанавливаются для датчика тока, напряжения и мощности с дескриптором descriptor. Также задаются номера регистров для чтения значения напряжения на шунте (regVoltageShunt) и напряжения на шине (regVoltageBus).

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

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

Параметр Тип для Shared object Тип для Golang gRPC Описание
descriptor int (тип C) int64 Дескриптор компонента датчика тока, напряжения и мощности
lsbBus float (тип C) float32 Значение младшего бита напряжения на шине (Вольт)
lsbShunt float (тип C) float32 Значение младшего бита напряжения на шунте (Вольт)
shuntResist float (тип C) float32 Сопротивление шунта (Ом)
regVoltageShunt uint8_t (тип C) byte Номер регистра для чтения напряжения на шунте
regVoltageBus uint8_t (тип C) byte Номер регистра для чтения напряжения на шине
errorText char[1000] (тип C) string Текст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCode int (тип C) int64 Код ошибки

Примеры

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

В данном примере осуществляется инициализация собственного компонента датчика тока, напряжения и мощности с дескриптором, записанным в переменную voltageSensor. Устанавливаются следующие значения:
Значение младшего бита напряжения на шине - 0.01 Вольт
Значение младшего бита напряжения на шунте - 0.0001 Вольт
Сопротивление шунта - 0.2 Ом

  • Python
# Инициализация собственной модели датчика тока, напряжения и мощности 
# Значение младшего бита напряжения на шине - 0.01 Вольт  
# Значение младшего бита напряжения на шунте - 0.0001 Вольт  
# Сопротивление шунта - 0.2 Ом 
# Номер регистра для чтения напряжения на шунте - 0x1 
# Номер регистра для чтения напряжения на шине - 0x2 
errCode = lib.RI_SDK_sensor_VoltageSensor_CustomDeviceInit(voltageSensor, 0.01, 0.0001, 0.2, 0x1, 0x2, errTextC)
if errCode != 0:
    print(errCode, errTextC.raw.decode())
    sys.exit(2)
    
  • C
      // Инициализация собственной модели датчика тока, напряжения и мощности
      // Значение младшего бита напряжения на шине - 0.01 Вольт
      // Значение младшего бита напряжения на шунте - 0.0001 Вольт
      // Сопротивление шунта - 0.2 Ом
      // Номер регистра для чтения напряжения на шунте - 0x1
      // Номер регистра для чтения напряжения на шине - 0x2
      errCode = RI_SDK_sensor_VoltageSensor_CustomDeviceInit(sensorDescriptor, 0.01, 0.0001, 0.2, errorText, 0x1, 0x2);
      if (errCode) {
      printf("errorText:%s\n", errorText);
      return errCode;
  }
  • C++
      // Инициализация собственной модели датчика тока, напряжения и мощности
      // Значение младшего бита напряжения на шине - 0.01 Вольт
      // Значение младшего бита напряжения на шунте - 0.0001 Вольт
      // Сопротивление шунта - 0.2 Ом
      // Номер регистра для чтения напряжения на шунте - 0x1
      // Номер регистра для чтения напряжения на шине - 0x2
      errCode = RI_SDK_sensor_VoltageSensor_CustomDeviceInit(sensorDescriptor, 0.01, 0.0001, 0.2, errorText, 0x1, 0x2);
      if (errCode) {
      printf("errorText:%s\n", errorText);
      return errCode;
  }
  • Golang
        // Инициализация собственной модели датчика тока, напряжения и мощности
        // Значение младшего бита напряжения на шине - 0.01 Вольт
        // Значение младшего бита напряжения на шунте - 0.0001 Вольт
        // Сопротивление шунта - 0.2 Ом
        // Номер регистра для чтения напряжения на шунте - 0x1
        // Номер регистра для чтения напряжения на шине - 0x2
        errCode = C.sensor_VoltageSensor_CustomDeviceInit(sensorDescriptor, 0.01, 0.0001, 0.2, &errorText[0], 0x1, 0x2)
        if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorText[0]))
        return
    }
  • Golang gRPC
      // Инициализация собственной модели датчика тока, напряжения и мощности
      // Значение младшего бита напряжения на шине - 0.01 Вольт
      // Значение младшего бита напряжения на шунте - 0.0001 Вольт
      // Сопротивление шунта - 0.2 Ом
      // Номер регистра для чтения напряжения на шунте - 0x1
      // Номер регистра для чтения напряжения на шине - 0x2
      errText, errCode, err = client.RoboSdkApi.RI_SDK_Sensor_VoltageSensor_CustomDeviceInit(sensorDescriptor, 0.01, 0.0001, 0.2, 0x1, 0x2)
      if errText != "" || errCode != 0 || err != nil {
      fmt.Printf("errText: %s; errCode:%d; err: %s", errText, errCode, err)
      return
  }
  • PHP
        // Инициализация собственной модели датчика тока, напряжения и мощности
        // Значение младшего бита напряжения на шине - 0.01 Вольт
        // Значение младшего бита напряжения на шунте - 0.0001 Вольт
        // Сопротивление шунта - 0.2 Ом
        // Номер регистра для чтения напряжения на шунте - 0x1
        // Номер регистра для чтения напряжения на шине - 0x2
        $errCode = $ffi->RI_SDK_sensor_VoltageSensor_CustomDeviceInit($sensorDescriptor->cdata, 0.01, 0.0001, 0.2, $errorText, 0x1, 0x2);
        if ($errCode) {
        print("errorText:" . FFI::string($errorText) . " errCode: " . $errCode . " \n");
        return;
    }
Полный текст примера
  • 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_sensor_VoltageSensor_CustomDeviceInit.argtypes = [c_int, c_float, c_float, c_float, c_byte, c_byte, c_char_p]

def main():
    errTextC = create_string_buffer(1000)  # Текст ошибки. C type: char*
    voltageSensor = 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("sensor".encode(), "voltage_sensor".encode(),  voltageSensor, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    print("voltage_sensor: ", voltageSensor.value)

    # Инициализация собственной модели датчика тока, напряжения и мощности 
    # Значение младшего бита напряжения на шине - 0.01 Вольт  
    # Значение младшего бита напряжения на шунте - 0.0001 Вольт  
    # Сопротивление шунта - 0.2 Ом 
    # Номер регистра для чтения напряжения на шунте - 0x1 
    # Номер регистра для чтения напряжения на шине - 0x2 
    errCode = lib.RI_SDK_sensor_VoltageSensor_CustomDeviceInit(voltageSensor, 0.01, 0.0001, 0.2, 0x1, 0x2, errTextC)
    if errCode != 0:
        print(errCode, errTextC.raw.decode())
        sys.exit(2)

    print("Success")

main()

 

  • C
      #include <stdlib.h>
      #include <stdio.h>
      #include <string.h>
      #include <dlfcn.h>
      #include <stdint.h>

      int (*RI_SDK_InitSDK)(int logLevel, char *errorText);

      int (*RI_SDK_CreateDeviceComponent)(char *group, char *device, int *descriptor, char *errorTextC);

      int (*RI_SDK_sensor_VoltageSensor_CustomDeviceInit)(int descriptor, float lsbBus, float lsbShunt, float shuntResist,
      char *errorTextC, uint8_t regVoltageShunt, uint8_t regVoltageBus);


      int initLibrary() {
      void *handle;

      char *LIB_RISDK = getenv("LIB_RISDK");
      handle = dlopen(strcat(LIB_RISDK, "librisdk.so"), RTLD_NOW);
      if (!handle) {
      /* fail to load the library */
      fprintf(stderr, "Error: %s\n", dlerror());
      return -1;
  }

      *(void **) (&RI_SDK_InitSDK) = dlsym(handle, "RI_SDK_InitSDK");
      *(void **) (&RI_SDK_CreateDeviceComponent) = dlsym(handle, "RI_SDK_CreateDeviceComponent");
      *(void **) (&RI_SDK_sensor_VoltageSensor_CustomDeviceInit) = dlsym(handle,
      "RI_SDK_sensor_VoltageSensor_CustomDeviceInit");
      return 0;
  }

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

      int main() {
      int initErr;
      initErr = initLibrary();
      if (initErr != 0) {
      printf("fail to load init library");
      return initErr;
  }

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

      // Создание компонента датчика тока, напряжения и мощности
      errCode = RI_SDK_CreateDeviceComponent("sensor", "voltage_sensor", &sensorDeviceDescriptor, errorText);
      if (errCode) {
      printf("errorText:%s\n", errorText);
      return errCode;
  }

      // Инициализация собственной модели датчика тока, напряжения и мощности
      // Значение младшего бита напряжения на шине - 0.01 Вольт
      // Значение младшего бита напряжения на шунте - 0.0001 Вольт
      // Сопротивление шунта - 0.2 Ом
      // Номер регистра для чтения напряжения на шунте - 0x1
      // Номер регистра для чтения напряжения на шине - 0x2
      errCode = RI_SDK_sensor_VoltageSensor_CustomDeviceInit(sensorDescriptor, 0.01, 0.0001, 0.2, errorText, 0x1, 0x2);
      if (errCode) {
      printf("errorText:%s\n", errorText);
      return errCode;
  }

      printf("sensorDescriptor: %d", sensorDescriptor);
      return 0;
  }
  • C++
      #include <stdlib.h>
      #include <stdio.h>
      #include <string.h>
      #include <dlfcn.h>
      #include <stdint.h>

      int (*RI_SDK_InitSDK)(int logLevel, char *errorText);

      int (*RI_SDK_CreateDeviceComponent)(char *group, char *device, int *descriptor, char *errorTextC);

      int (*RI_SDK_sensor_VoltageSensor_CustomDeviceInit)(int descriptor, float lsbBus, float lsbShunt, float shuntResist,
      char *errorTextC, uint8_t regVoltageShunt, uint8_t regVoltageBus);


      int initLibrary() {
      void *handle;

      char *LIB_RISDK = getenv("LIB_RISDK");
      handle = dlopen(strcat(LIB_RISDK, "librisdk.so"), RTLD_NOW);
      if (!handle) {
      /* fail to load the library */
      fprintf(stderr, "Error: %s\n", dlerror());
      return -1;
  }

      *(void **) (&RI_SDK_InitSDK) = dlsym(handle, "RI_SDK_InitSDK");
      *(void **) (&RI_SDK_CreateDeviceComponent) = dlsym(handle, "RI_SDK_CreateDeviceComponent");
      *(void **) (&RI_SDK_sensor_VoltageSensor_CustomDeviceInit) = dlsym(handle,
      "RI_SDK_sensor_VoltageSensor_CustomDeviceInit");
      return 0;
  }

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

      int main() {
      int initErr;
      initErr = initLibrary();
      if (initErr != 0) {
      printf("fail to load init library");
      return initErr;
  }

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

      // Создание компонента датчика тока, напряжения и мощности
      char sensor[] = "sensor";
      char voltage_sensor[] = "voltage_sensor";
      errCode = RI_SDK_CreateDeviceComponent(sensor, voltage_sensor, &sensorDeviceDescriptor, errorText);
      if (errCode) {
      printf("errorText:%s\n", errorText);
      return errCode;
  }

      // Инициализация собственной модели датчика тока, напряжения и мощности
      // Значение младшего бита напряжения на шине - 0.01 Вольт
      // Значение младшего бита напряжения на шунте - 0.0001 Вольт
      // Сопротивление шунта - 0.2 Ом
      // Номер регистра для чтения напряжения на шунте - 0x1
      // Номер регистра для чтения напряжения на шине - 0x2
      errCode = RI_SDK_sensor_VoltageSensor_CustomDeviceInit(sensorDescriptor, 0.01, 0.0001, 0.2, errorText, 0x1, 0x2);
      if (errCode) {
      printf("errorText:%s\n", errorText);
      return errCode;
  }

      printf("sensorDescriptor: %d", sensorDescriptor);
      return 0;
  }
  • Golang
        package main

        /*
        #cgo LDFLAGS: -ldl
        #include <stdlib.h>
        #include <stdio.h>
        #include <string.h>
        #include <dlfcn.h>
        #include <stdint.h>

        int (*RI_SDK_InitSDK)(int logLevel, char *errorText);

        int (*RI_SDK_CreateDeviceComponent)(char *group, char *device, int *descriptor, char *errorTextC);

        int (*RI_SDK_sensor_VoltageSensor_CustomDeviceInit)(int descriptor, float lsbBus, float lsbShunt, float shuntResist,
        char *errorTextC, uint8_t regVoltageShunt, uint8_t regVoltageBus);

        int InitSDK(int logLevel, char *errorText){
        RI_SDK_InitSDK(logLevel,errorText);
    }

        int CreateDeviceComponent(char *group, char *device, int *descriptor, char *errorTextC){
        RI_SDK_CreateDeviceComponent(group,device,descriptor,errorTextC);
    }

        int sensor_VoltageSensor_CustomDeviceInit(int descriptor, float lsbBus, float lsbShunt, float shuntResist, char *errorTextC, uint8_t regVoltageShunt, uint8_t regVoltageBus){
        RI_SDK_sensor_VoltageSensor_CustomDeviceInit(descriptor,lsbBus,lsbShunt,shuntResist,errorTextC,regVoltageShunt,regVoltageBus);
    }

        int initLibrary() {
        void *handle;

        char *LIB_RISDK = getenv("LIB_RISDK");
        handle = dlopen(strcat(LIB_RISDK, "librisdk.so"), RTLD_NOW);
        if (!handle) {
        fprintf(stderr, "Error: %s\n", dlerror());
        return -1;
    }

        *(void **) (&RI_SDK_InitSDK) = dlsym(handle, "RI_SDK_InitSDK");
        *(void **) (&RI_SDK_CreateDeviceComponent) = dlsym(handle, "RI_SDK_CreateDeviceComponent");
        *(void **) (&RI_SDK_sensor_VoltageSensor_CustomDeviceInit) = dlsym(handle,
        "RI_SDK_sensor_VoltageSensor_CustomDeviceInit");
        return 0;
    }
        */
        import "C"
        import "fmt"

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

        initErr = C.initLibrary()
        if initErr != 0 {
        fmt.Printf("fail to load init library")
        return
    }

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

        // Создание компонента датчика тока, напряжения и мощности
        errCode = C.CreateDeviceComponent(C.CString("sensor"), C.CString("voltage_sensor"), &sensorDeviceDescriptor, &errorText[0])
        if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorText[0]))
        return
    }

        // Инициализация собственной модели датчика тока, напряжения и мощности
        // Значение младшего бита напряжения на шине - 0.01 Вольт
        // Значение младшего бита напряжения на шунте - 0.0001 Вольт
        // Сопротивление шунта - 0.2 Ом
        // Номер регистра для чтения напряжения на шунте - 0x1
        // Номер регистра для чтения напряжения на шине - 0x2
        errCode = C.sensor_VoltageSensor_CustomDeviceInit(sensorDescriptor, 0.01, 0.0001, 0.2, &errorText[0], 0x1, 0x2)
        if errCode != 0 {
        fmt.Printf("errorCode:%d - errorText:%s\n", errCode, C.GoString(&errorText[0]))
        return
    }

        fmt.Printf("sensorDescriptor: %d", sensorDescriptor)

    }
  • Golang gRPC
      package main

      import (
      "fmt"
      "github.com/rbs-ri/go-risdk"
      )

      func main() {
      //Открываем соединение для работы с API SDK по RPC
      client := risdk.GetClientRPC()
      //Закрываем соединение с RPC
      defer client.Client.Kill()

      // Создание компонента датчика тока, напряжения и мощности
      sensorDescriptor, errText, errCode, err := client.RoboSdkApi.RI_SDK_CreateDeviceComponent("sensor", "voltage_sensor")
      if errText != "" || errCode != 0 || err != nil {
      fmt.Printf("errText: %s; errCode:%d; err: %s", errText, errCode, err)
      return
  }

      // Инициализация собственной модели датчика тока, напряжения и мощности
      // Значение младшего бита напряжения на шине - 0.01 Вольт
      // Значение младшего бита напряжения на шунте - 0.0001 Вольт
      // Сопротивление шунта - 0.2 Ом
      // Номер регистра для чтения напряжения на шунте - 0x1
      // Номер регистра для чтения напряжения на шине - 0x2
      errText, errCode, err = client.RoboSdkApi.RI_SDK_Sensor_VoltageSensor_CustomDeviceInit(sensorDescriptor, 0.01, 0.0001, 0.2, 0x1, 0x2)
      if errText != "" || errCode != 0 || err != nil {
      fmt.Printf("errText: %s; errCode:%d; err: %s", errText, errCode, err)
      return
  }

      return
  }
  • PHP
        <?php
        // Подключаем внешнюю библиотеку для работы с SDK
        $LIB_RISDK_ENV = "LIB_RISDK";
        if (empty(getenv($LIB_RISDK_ENV))) {
        print("Не указана переменная среды LIB_RISDK - выполнение программы невозможно");
        return;
    }

        $libname = '';
        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
        $libname = '\librisdk.dll';
    } else {
        $libname = "librisdk.so";
    }

        $ffi = FFI::cdef("int RI_SDK_InitSDK(int level,char* errText);
        int RI_SDK_CreateDeviceComponent(char* group, char* device, int* descriptor, char* errorTextC);
        int RI_SDK_sensor_VoltageSensor_CustomDeviceInit(int descriptor, float lsbBus, float lsbShunt, float shuntResist, char* errorTextC, uint8_t regVoltageShunt, uint8_t regVoltageBus);"
        , getenv($LIB_RISDK_ENV) . $libname);

        $errorText = $ffi->new('char[1000]', 0); // Выделяем память на строку с ошибкой. Передается как входной параметр,при возникновении ошибки в эту переменную будет записан текст ошибки
        $sensorDescriptor = $ffi->new('int', 0);
        $logLevel = 3; // уровень логирования

        // Инициализируем SDK
        $errCode = $ffi->RI_SDK_InitSDK($logLevel, $errorText);
        if ($errCode) {
        print("errorText:" . FFI::string($errorText) . " errCode: " . $errCode . " \n");
        return;
    }

        // Создание компонента датчика тока, напряжения и мощности
        $errCode = $ffi->RI_SDK_CreateDeviceComponent("sensor", "voltage_sensor", FFI::addr($sensorDescriptor), $errorText);
        if ($errCode) {
        print("errorText:" . FFI::string($errorText) . " errCode: " . $errCode . " \n");
        return;
    }

        // Инициализация собственной модели датчика тока, напряжения и мощности
        // Значение младшего бита напряжения на шине - 0.01 Вольт
        // Значение младшего бита напряжения на шунте - 0.0001 Вольт
        // Сопротивление шунта - 0.2 Ом
        // Номер регистра для чтения напряжения на шунте - 0x1
        // Номер регистра для чтения напряжения на шине - 0x2
        $errCode = $ffi->RI_SDK_sensor_VoltageSensor_CustomDeviceInit($sensorDescriptor->cdata, 0.01, 0.0001, 0.2, $errorText, 0x1, 0x2);
        if ($errCode) {
        print("errorText:" . FFI::string($errorText) . " errCode: " . $errCode . " \n");
        return;
    }

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

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

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

Навигация

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