!!! ИНФОРМАЦИЯ
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;
}