Использование Modbus-RTU с Arduino и контроллером температуры
Я пытаюсь подключиться к 4-канальному контроллеру температуры, используя библиотеку Arduino Modbus.
Это часть описания моего контроллера температуры. Он имеет регистр для чтения PV каждого канала.
Я изучил пример кода библиотеки и теперь пытаюсь прочитать PV каждого канала.
Итак, я изменил пример кода, как показано ниже,
#include <ModbusMaster.h>
// создание экземпляра объекта ModbusMaster
ModbusMaster node;
void setup()
{
// использовать Serial (порт 0); инициализировать скорость передачи данных Modbus
Serial.begin(19200);
// связь с ведомым устройством Modbus с идентификатором 2 по последовательному порту (порт 0)
node.begin(2, Serial);
}
void loop()
{
static uint32_t i;
uint8_t j, result;
uint16_t data[6];
i++;
// установить слово 0 буфера TX в наименее значимое слово счетчика (биты 15..0)
node.setTransmitBuffer(0, lowWord(i));
// установить слово 1 буфера TX в самое старшее слово счетчика (биты 31..16)
node.setTransmitBuffer(1, highWord(i));
// ведомое устройство: чтение (4) 16-битных регистров, начиная с регистра 2, в буфер RX
result = node.readHoldingRegisters(1, 4);
// делаем что-то с данными, если чтение прошло успешно
if (result == node.ku8MBSuccess)
{
for (j = 0; j < 4; j++)
{
data[j] = node.getResponseBuffer(j);
}
}
}
Мои вопросы: Объясните следующие строки в коде
// установить слово 0 буфера TX в наименее значимое слово счетчика (биты 15..0)
node.setTransmitBuffer(0, lowWord(i));
// установить слово 1 буфера TX в самое старшее слово счетчика (биты 31..16)
node.setTransmitBuffer(1, highWord(i));
Я не передал никакого запроса подчиненному устройству. Итак, могу ли я получить значение 4 PV таким образом? Если нет, объясните, как мне это сделать.
@user_fs10, 👍0
1 ответ
Вызовы setTransmitBuffer предназначены для writeMultipleRegisters, которые вы удалили из примера.
Первый параметр readHoldingRegisters — это адрес регистра. Второй параметр — количество регистров для чтения.
На скетче не отображаются полученные данные. У вас нет признаков успеха или неудачи.
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
- Мониторинг контроллера Modbus RTU с помощью Arduino и модуля RS485
- Связь Arduino Uno и ESP32 с использованием RS485
- Управление VFD с помощью ModBus RTU через RS485 и Arduino
- считывание данных с контроллера через RS485 Modbus rtu Arduino
- Подключить датчик постоянного тока 12 В к Arduino UNO с помощью TTL RS485
- Controllino Mega и ЧМИ Fatek
- Связь Arduino master/slave с использованием RS485
Как я понял,
setTransmitBuffer
используется для инициализации буфера TX. Я прав? Полученные данные хранятся в буфере RX. мы не можем получить данные с помощьюgetResponseBuffer
?, @user_fs10у вас есть
data[j] = node.getResponseBuffer(j);
, @Juraj