Перейти к основному содержимому

RI_SDK_sensor_VoltageSensor_Sense

Информация

RI_SDK - библиотека Robo Intellect Software Development Kit
sensor - название группы устройств датчиков
VoltageSensor - название устройства датчика тока, напряжения и мощности
Sense - название метода получения значений силы тока, напряжения в цепи, напряжения на шунте и мощности

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

RI_SDK_sensor_VoltageSensor_Sense(descriptor,  voltage, voltageShunt, current, power, errorText):errorCode

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

Получение значений силы тока, напряжения в цепи, напряжения на шунте и мощности.

Дает команду датчику тока, напряжения и мощности с дескриптором descriptor измерить силу тока, напряжение в цепи, напряжение на шунте и мощность. Записывает полученные значения в переменные voltage, voltageShunt, current и power

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

ПараметрТип для Shared objectТип для Golang gRPCОписание
descriptorint (тип C)int64Дескриптор компонента датчика тока, напряжения и мощности
voltage*float (тип C)float32Указатель на значение напряжения в цепи (Вольт)
voltageShunt*float (тип C)float32Указатель на значение напряжения на шунте (Вольт)
current*float (тип C)float32Указатель на значение силы тока (Ампер)
power*float (тип C)float32Указатель на значение мощности (Ватт)
errorTextchar[1000] (тип C)stringТекст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCodeint (тип C)int64Код ошибки

Примеры

Пример №1 - Измерение силы тока, напряжения в цепи, напряжения на шунте и мощности

В данном примере производится измерение силы тока, напряжения в цепи, напряжения на шунте и мощности, с помощью датчика с дескриптором voltageSensor. Полученные значения записываются в переменные voltage, voltageShunt, current и power, значения которых выводятся в конце.

# Получение значений напряжения в цепи, напряжения на шунте, силы тока и мощности
errCode = lib.RI_SDK_sensor_VoltageSensor_Sense(voltageSensor, voltage, voltageShunt, current, power, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("voltage: ", voltage.value)
print("voltage_shunt: ", voltageShunt.value)
print("current: ", current.value)
print("power: ", power.value)

Полный текст примера


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_LinkVoltageSensorToController.argtypes = [c_int, c_int, c_uint8, c_char_p]
lib.RI_SDK_DestroySDK.argtypes = [c_bool, c_char_p]
lib.RI_SDK_sensor_VoltageSensor_Sense.argtypes = [c_int, POINTER(c_float), POINTER(c_float), POINTER(c_float), POINTER(c_float), c_char_p]

def main():
errTextC = create_string_buffer(1000) # Текст ошибки. C type: char*
i2c = c_int()
voltageSensor = c_int()
voltage = c_float()
voltageShunt = c_float()
power = c_float()
current = c_float()

# Инициализация библиотеки 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)

# Создание компонента датчика тока, напряжения и мощности модели ina219
errCode = lib.RI_SDK_CreateModelComponent("sensor".encode(), "voltage_sensor".encode(), "ina219".encode(), voltageSensor, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("voltage_sensor: ", voltageSensor.value)

# Связывание i2c с датчиком тока, напряжения и мощности
errCode = lib.RI_SDK_LinkVoltageSensorToController(voltageSensor, i2c, 0x41, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)


# Получение значений напряжения в цепи, напряжения на шунте, силы тока и мощности
errCode = lib.RI_SDK_sensor_VoltageSensor_Sense(voltageSensor, voltage, voltageShunt, current, power, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("voltage: ", voltage.value)
print("voltage_shunt: ", voltageShunt.value)
print("current: ", current.value)
print("power: ", power.value)

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

print("Success")

main()