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

RI_SDK_sensor_VoltageSensor_WriteRegBytes

Информация

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

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

RI_SDK_sensor_VoltageSensor_WriteRegBytes(descriptor, reg, buf, len, errorText):errorCode

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

Запись массива байт в регистр.

Производит запись len байт из массива buf по регистру reg для датчика тока, напряжения и мощности с дескриптором descriptor.

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

ПараметрТип для Shared objectТип для Golang gRPCОписание
descriptorint (тип C)int64Дескриптор компонента, в котором будет производиться запись
reguint8_t (тип C)uint8Регистр, по которому будет производиться запись
buf*long long unsigned[len] (тип C)[]byteУказатель на массив байт для записи
lenint (тип C)int64Длина массива buf
wroteBytesLen*int (тип C)int64Указатель на количество записанных байтов
errorTextchar[1000] (тип C)stringТекст ошибки (передается как параметр, если происходит ошибка метод записывает в этот параметр текст ошибки)
errorCodeint (тип C)int64Код ошибки

Схема регистров датчика тока, напряжения и мощности ina219

Адрес регистраНазвание регистраНазначение регистраТип
0x00ConfigurationСброс всех регистров, настройка диапазона измерений, усиления PGA, разрешения АЦП и фильтрации.Чтение/Запись
0x01Shunt voltageХранит измеренное значение напряжения на шунтирующем резисторе 0,1 Ом.Чтение
0x02Bus voltageХранит измеренное значение напряжения шины.Чтение
0x03PowerХранит измеренное значение мощности.Чтение
0x04CurrentСодержит значение силы тока, протекающего через шунтирующий резистор.Чтение
0x05CalibrationКалибровочный регистр. Задаёт диапазон измерений и позволяет осуществлять калибровку системы.Чтение/Запись

Примеры

Пример №1 - Запись массива байт buf на датчика тока на 0 регистр

В данном примере осуществляется запись массива байт buf на датчика тока на 0 регистр. Выводиться количество записанных байтов wroteBytesLength.


# Запись массива байт buf на датчика тока в 0 регистр
# Перед записью конвертируем массив байт buf в тип c_ulonglong
b = c_ulonglong(int.from_bytes(buf, "little"))
errCode = lib.RI_SDK_sensor_VoltageSensor_WriteRegBytes(voltageSensor, 0x00, b, len(buf), wroteBytesLen, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)


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


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_WriteRegBytes.argtypes = [c_int, c_uint8, POINTER(c_ulonglong), c_int, POINTER(c_int), c_char_p]

def main():
errTextC = create_string_buffer(1000) # Текст ошибки. C type: char*
i2c = c_int()
voltageSensor = c_int()
buf = bytes([0,0,244,1])
wroteBytesLen = 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)

# Создание компонента датчика тока, напряжения и мощности модели 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)

# Запись массива байт buf на датчика тока в 0 регистр
# Перед записью конвертируем массив байт buf в тип c_ulonglong
b = c_ulonglong(int.from_bytes(buf, "little"))
errCode = lib.RI_SDK_sensor_VoltageSensor_WriteRegBytes(pwm, 0x00, b, len(buf), wroteBytesLen, errTextC)
if errCode != 0:
print(errCode, errTextC.raw.decode())
sys.exit(2)

print("wroteBytes: ", wroteBytesLen.value)

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

print("Success")

main()