Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Здравствуйте!
Библиотеки Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave были созданы для уроков о протоколе ModBus RTU. Предназначены для работы только на аппаратном UART плат Arduino c микроконтроллерами Atmega328/168.
Мне посыпались вопросы об использовании библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на контроллере Mega2560. В этой теме я публикую переписку с Валерием и Романом, которые пытались использовать библиотеки в такой конфигурации.
Библиотеки Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave были созданы для уроков о протоколе ModBus RTU. Предназначены для работы только на аппаратном UART плат Arduino c микроконтроллерами Atmega328/168.
Мне посыпались вопросы об использовании библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на контроллере Mega2560. В этой теме я публикую переписку с Валерием и Романом, которые пытались использовать библиотеки в такой конфигурации.
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Роман:
Добрый день Эдуард! Спасибо вам за ваши уроки очень толково изложено . Вопрос возник когда я попытался использовать ваши
библиотеки modbus master , modbus slave. в качестве мастера ардуино мега, в качестве слейва ардуино нано. Получилось следующее: команды с мастера доходят до слейва , но со слейва ни чего не приходит к мастеру. я попробовал поменять платы , теперь мастер это нано а слейв мега. в таком варианте все заработало. И второй вопрос : в вашей библиотеки задействован единственный ком порт ардуино, я попытался изменить в библиотеки мастера Serial на Serial1 (для меги) не заработало . помогите разобраться в данном вопросе.
Цель использования вашей библиотеки связь плат с главным контролерам для обмена данными по сети рс485 нужно чтобы мастер получал состояние концевиков ворот , калитки данные с дальномеров (сантиметры) и мастер должен отпровлять некие инструкции типа открыть закрыть заблокировать и тп. не чегосверх естественного. до использования вашей библиотеки я пробовал это делать на софтварном порту.
пакет выглядел так:
byte Id
byte start
byte a
byte b
byte c
byte e
stop byte
передавал и принимал несколько байт и в каждом из них было состояния того или иного датчика, но работоло все это криво.
вот хотелось бы все тоже самое делать но вместо пачки байт забивать ваш масив reg Table и отправлять мастеру.
например regTable[10] c 0 по 5 команды мастера с 6 по 10 ответы слейва. прошу помочь мне в этой затеи. Спасибо, всего вам хорошего.
Добрый день Эдуард! Спасибо вам за ваши уроки очень толково изложено . Вопрос возник когда я попытался использовать ваши
библиотеки modbus master , modbus slave. в качестве мастера ардуино мега, в качестве слейва ардуино нано. Получилось следующее: команды с мастера доходят до слейва , но со слейва ни чего не приходит к мастеру. я попробовал поменять платы , теперь мастер это нано а слейв мега. в таком варианте все заработало. И второй вопрос : в вашей библиотеки задействован единственный ком порт ардуино, я попытался изменить в библиотеки мастера Serial на Serial1 (для меги) не заработало . помогите разобраться в данном вопросе.
Цель использования вашей библиотеки связь плат с главным контролерам для обмена данными по сети рс485 нужно чтобы мастер получал состояние концевиков ворот , калитки данные с дальномеров (сантиметры) и мастер должен отпровлять некие инструкции типа открыть закрыть заблокировать и тп. не чегосверх естественного. до использования вашей библиотеки я пробовал это делать на софтварном порту.
пакет выглядел так:
byte Id
byte start
byte a
byte b
byte c
byte e
stop byte
передавал и принимал несколько байт и в каждом из них было состояния того или иного датчика, но работоло все это криво.
вот хотелось бы все тоже самое делать но вместо пачки байт забивать ваш масив reg Table и отправлять мастеру.
например regTable[10] c 0 по 5 команды мастера с 6 по 10 ответы слейва. прошу помочь мне в этой затеи. Спасибо, всего вам хорошего.
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Роман, здравствуйте!
По поводу переделки библиотеки на Serial1. Библиотека использует функции класса Serial, за исключением места, где определяется окончание передачи данных из буфера. Такой функции в Serial нет. Поэтому я использовал прямую проверку флага аппаратного последовательного порта.
// ожидание окончания передачи
if( (UCSR0A & 64) != 0 ) {
Вам необходимо кроме замены Serial на Serial1 изменить контроль этого флага. Найти в описании микроконтроллера соответствующий бит. Возможно это будет UCSR1A, но я не уверен. Переправить необходимо в обеих библиотеках.
Почему не работает Мега я не знаю. Я не пробовал. Прежде всего попробуйте увеличить на мастере время тайм-аута ответа. Это второй аргумент конструктора timeOutRecieve. Для отладки надо определять, где виснет программа слейва. Почему слейв не отвечает. Или он отвечает. В интервала типа else if(_mode == 2) { надо по очереди вставлять, например, инверсию светодиода и смотреть до какого интервала программа не доходит.
Попробуйте, соберите больше информации и пишите. Можете открыть тему на форуме сайта.
По поводу переделки библиотеки на Serial1. Библиотека использует функции класса Serial, за исключением места, где определяется окончание передачи данных из буфера. Такой функции в Serial нет. Поэтому я использовал прямую проверку флага аппаратного последовательного порта.
// ожидание окончания передачи
if( (UCSR0A & 64) != 0 ) {
Вам необходимо кроме замены Serial на Serial1 изменить контроль этого флага. Найти в описании микроконтроллера соответствующий бит. Возможно это будет UCSR1A, но я не уверен. Переправить необходимо в обеих библиотеках.
Почему не работает Мега я не знаю. Я не пробовал. Прежде всего попробуйте увеличить на мастере время тайм-аута ответа. Это второй аргумент конструктора timeOutRecieve. Для отладки надо определять, где виснет программа слейва. Почему слейв не отвечает. Или он отвечает. В интервала типа else if(_mode == 2) { надо по очереди вставлять, например, инверсию светодиода и смотреть до какого интервала программа не доходит.
Попробуйте, соберите больше информации и пишите. Можете открыть тему на форуме сайта.
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Роман:
Эдуард ! А чем объясняется что переправлять нужно в обоих библиотеках - как это касается Slave ?
Эдуард ! А чем объясняется что переправлять нужно в обоих библиотеках - как это касается Slave ?
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Там тоже необходимо ждать, пока закончиться передача последнего бита.
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Валерий:
Эдуард ! на железном уровне разобрался с проблемой Master MAGA2560 <<<<< Slave NANO - все дело в чипе USB CH340 его RX TX подтянуты к +5в через резисторы номиналом ВНИМАНИЕ 49 Ом - ну какая 485 их перетянет в ноль ! Залил скетч в MEGA выпаял резисторы и все заработало !
Просим все-таки сделать вашу библиотеку более универсальную для работы и на выводах TR1 / RX1, TX2 / RX2 и TX3 RX3 !
Эдуард ! на железном уровне разобрался с проблемой Master MAGA2560 <<<<< Slave NANO - все дело в чипе USB CH340 его RX TX подтянуты к +5в через резисторы номиналом ВНИМАНИЕ 49 Ом - ну какая 485 их перетянет в ноль ! Залил скетч в MEGA выпаял резисторы и все заработало !
Просим все-таки сделать вашу библиотеку более универсальную для работы и на выводах TR1 / RX1, TX2 / RX2 и TX3 RX3 !
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
На счет переделки библиотеки на другие выводы подумаю. Надо переправить номера Serial и подправить строчки
// ожидание окончания передачи
if( (UCSR0A & 64) != 0 ) {
Возможно UCSR0A надо заменить на UCSR1A.
// ожидание окончания передачи
if( (UCSR0A & 64) != 0 ) {
Возможно UCSR0A надо заменить на UCSR1A.
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Валерий:
Я пробовал мернять - но у меня после редактирования библиотека в среде IDE отмечается как неправильная ! У меня MAC OS - может из за этого ! MAC - всегда делает пометки какие-то в каждой папке и каждого файла при редактировании и ли просто при сохранении !
Я пробовал мернять - но у меня после редактирования библиотека в среде IDE отмечается как неправильная ! У меня MAC OS - может из за этого ! MAC - всегда делает пометки какие-то в каждой папке и каждого файла при редактировании и ли просто при сохранении !
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Валерий, здравствуйте!
Я сделал формальные изменения в библиотеке Tiny_ModBusRTU_Master. Теперь библиотека называется Tiny_ModBusRTU_Master_1 и настроена на Serial 1. У меня в Arduino IDE компилируется без ошибок. Попробуйте. Напишите мне о результате.
Я сделал формальные изменения в библиотеке Tiny_ModBusRTU_Master. Теперь библиотека называется Tiny_ModBusRTU_Master_1 и настроена на Serial 1. У меня в Arduino IDE компилируется без ошибок. Попробуйте. Напишите мне о результате.
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Валерий:
Компилируется без ошибок в 1_67 нормально , но MEGA2560 зависает при первом обращении к Serial !
Компилируется без ошибок в 1_67 нормально , но MEGA2560 зависает при первом обращении к Serial !
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Скажите, чем-то закончилась эта история с переделкой библиотек для работы в качестве Master - Mega2560?
Вопрос весьма актуальный в связи с тем, что именно Mega удобнее использовать в качестве центрального контроллера сети RS485 и иных к ней навешанных на многочисленные порты устройств.
Просто выпаивание резисторов не самый удобный способ
Вопрос весьма актуальный в связи с тем, что именно Mega удобнее использовать в качестве центрального контроллера сети RS485 и иных к ней навешанных на многочисленные порты устройств.
Просто выпаивание резисторов не самый удобный способ

Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Здравствуйте!
У меня нет меги попробовать. Заказал, когда придут проверю и подкорректирую библиотеку, если надо.
У меня нет меги попробовать. Заказал, когда придут проверю и подкорректирую библиотеку, если надо.
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Здравствуйте Эдуард,
Отличные статьи, отличные уроки. Один вопрос. Подскажите пожалуйста почему не могу переслать с master-а на slave боле одной команды? При отправке больше, чем одной команды отправляется и исполняется только последняя. В качестве master-а использую Arduino MEGA, а в качестве slave-а Arduino UNO, библиотеки <Tiny_ModBusRTU_Master_1.h> и <Tiny_ModBusRTU_Slave.h>, программы контроллеров ниже.
На перёд благодарю Вас за помощь,
С уважением,
Василий
////////Master/////////
#include <TimerOne.h>
#include <Button.h>
#include <Tiny_ModBusRTU_Master_1.h>
#define ADR_CONTR_1 51 // адрес контроллера 1
unsigned int regTable[12]; // таблица регистров
unsigned int cyclCount = 0; // счетчик циклов
unsigned int errorCount = 0; // счетчик ошибок
byte mode = 0; // режим
int timeCount = 0; // счетчик времени
Tiny_ModBusRTU_Master_1 master(8, 30, 2); // создаем объект, времена тайм-аутов 4 и 15 мс, управляющий вывод 2
Button button1(5, 30); // кнопка 1 подключена к выводу 4
Button button2(6, 30); // кнопка 2 подключена к выводу 5
Button button3(7, 30); // кнопка 3 подключена к выводу 6
void setup() {
Timer1.initialize(500); // инициализация таймера 1, период 500 мкс
Timer1.attachInterrupt(timerInterrupt, 3000); // задаем обработчик прерываний
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
if (mode == 0) {
if (timeCount > 1000) {
timeCount = 0;
// вывод счетчиков на дисплей
cyclCount++; // счетчик циклов
Serial.print("C=");
Serial.print(cyclCount);
Serial.print('\t');
Serial.print("E=");
Serial.println(errorCount);
mode = 1;
master.read(ADR_CONTR_1, regTable, 0, 9); // чтение регистров контроллера 1 9=regTable[10]-1
}
}
if (mode == 1) {
// ожидание данных контроллера 1
if (master.state != 1) {
if (master.state == 0) {
// данные получены
Serial.print("The floor temperature in room 1 is: ");
Serial.println(*((float *)regTable), 1);
Serial.print("The air temperature in room 1 is: ");
Serial.println(*(((float *)regTable) + 1 ), 1);
Serial.print('\n');
}
else {
// ошибка обмена
errorCount++;
Serial.println ("ERROR");
}
mode = 0;
master.writeSingle(ADR_CONTR_1, (unsigned int)button1.flagPress, 5); // !!! запись регистра хранения (светодиод)
master.writeSingle(ADR_CONTR_1, (unsigned int)button2.flagPress, 6);
master.writeSingle(ADR_CONTR_1, (unsigned int)button3.flagPress, 7);
}
}
}
//--------------------------- обработчик прерывания 500 мкс
void timerInterrupt() {
master.update(); // проверка данных обмена
button1.scanState(); // обработка сигнала кнопки 1
button2.scanState(); // обработка сигнала кнопки 2
button3.scanState(); // обработка сигнала кнопки 3
timeCount++;
}
////////Slave/////////
#include <TimerOne.h>
#include <Button.h>
#include <Tiny_ModBusRTU_Slave.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define TEMPSENSOR_DQ_PIN 8 // thermometer data pin
#define LIGHT1_PIN 10 // подключен к выводу 10
#define LIGHT2_PIN 11 // подключен к выводу 11
#define LIGHT3_PIN 12 // подключен к выводу 12
int timeCount = 0; // счетчик времени
unsigned int regTable[20]; // таблица регистров
int buttonState = 0;
boolean LED_state[5] = {0};
int flag = 0;
Tiny_ModBusRTU_Slave slave(51, 8, regTable, 20, 2); // создаем объект ModBus, адрес 51, таймаут 4 мс, массив regTable, размер 20
OneWire oneWire (TEMPSENSOR_DQ_PIN);
DallasTemperature ds(&oneWire);
DeviceAddress Sensor0 = { 0x28, 0xB1, 0x85, 0xD0, 0x02, 0x00, 0x00, 0x79 }; // floor temperature 28 B1 85 D0 02 00 00 79
DeviceAddress Sensor1 = { 0x28, 0xC0, 0xAA, 0x26, 0x00, 0x00, 0x80, 0xFA }; // air temperature 28 C0 AA 26 00 00 80 FA
void setup() {
Timer1.initialize(500); // инициализация таймера 1, период 500 мкс
Timer1.attachInterrupt(timerInterrupt, 500); // задаем обработчик прерываний
//ds.setResolution(Sensor0, 12);
//ds.setResolution(Sensor1, 12);
Serial.begin(9600);
pinMode(LIGHT1_PIN, OUTPUT);
digitalWrite(LIGHT1_PIN, LOW);
pinMode(LIGHT2_PIN, OUTPUT);
digitalWrite(LIGHT2_PIN, LOW);
pinMode(LIGHT3_PIN, OUTPUT);
digitalWrite(LIGHT3_PIN, LOW);
}
void loop() {
Climate();
Light();
// перегрузка состояния кнопки в таблицу регистров
//noInterrupts();
//interrupts();
}
//--------------------------- обработчик прерывания 500 мкс
void timerInterrupt() {
slave.update(); // проверка данных обмена
timeCount++;
}
void Climate() {
ds.requestTemperatures(); // read temperature
noInterrupts();
*(float *)regTable = ds.getTempC(Sensor0);
*(float *)(regTable + 2) = ds.getTempC(Sensor1);
interrupts();
}
void Light()
{
if ( (regTable[5] & 1) == 0) digitalWrite(LIGHT1_PIN, LOW);
else digitalWrite(LIGHT1_PIN, HIGH);
if ( (regTable[6] & 1) == 0) digitalWrite(LIGHT2_PIN, LOW);
else digitalWrite(LIGHT2_PIN, HIGH);
if ( (regTable[7] & 1) == 0) digitalWrite(LIGHT3_PIN, LOW);
else digitalWrite(LIGHT3_PIN, HIGH);
delay(2);
}
Отличные статьи, отличные уроки. Один вопрос. Подскажите пожалуйста почему не могу переслать с master-а на slave боле одной команды? При отправке больше, чем одной команды отправляется и исполняется только последняя. В качестве master-а использую Arduino MEGA, а в качестве slave-а Arduino UNO, библиотеки <Tiny_ModBusRTU_Master_1.h> и <Tiny_ModBusRTU_Slave.h>, программы контроллеров ниже.
На перёд благодарю Вас за помощь,
С уважением,
Василий
////////Master/////////
#include <TimerOne.h>
#include <Button.h>
#include <Tiny_ModBusRTU_Master_1.h>
#define ADR_CONTR_1 51 // адрес контроллера 1
unsigned int regTable[12]; // таблица регистров
unsigned int cyclCount = 0; // счетчик циклов
unsigned int errorCount = 0; // счетчик ошибок
byte mode = 0; // режим
int timeCount = 0; // счетчик времени
Tiny_ModBusRTU_Master_1 master(8, 30, 2); // создаем объект, времена тайм-аутов 4 и 15 мс, управляющий вывод 2
Button button1(5, 30); // кнопка 1 подключена к выводу 4
Button button2(6, 30); // кнопка 2 подключена к выводу 5
Button button3(7, 30); // кнопка 3 подключена к выводу 6
void setup() {
Timer1.initialize(500); // инициализация таймера 1, период 500 мкс
Timer1.attachInterrupt(timerInterrupt, 3000); // задаем обработчик прерываний
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
if (mode == 0) {
if (timeCount > 1000) {
timeCount = 0;
// вывод счетчиков на дисплей
cyclCount++; // счетчик циклов
Serial.print("C=");
Serial.print(cyclCount);
Serial.print('\t');
Serial.print("E=");
Serial.println(errorCount);
mode = 1;
master.read(ADR_CONTR_1, regTable, 0, 9); // чтение регистров контроллера 1 9=regTable[10]-1
}
}
if (mode == 1) {
// ожидание данных контроллера 1
if (master.state != 1) {
if (master.state == 0) {
// данные получены
Serial.print("The floor temperature in room 1 is: ");
Serial.println(*((float *)regTable), 1);
Serial.print("The air temperature in room 1 is: ");
Serial.println(*(((float *)regTable) + 1 ), 1);
Serial.print('\n');
}
else {
// ошибка обмена
errorCount++;
Serial.println ("ERROR");
}
mode = 0;
master.writeSingle(ADR_CONTR_1, (unsigned int)button1.flagPress, 5); // !!! запись регистра хранения (светодиод)
master.writeSingle(ADR_CONTR_1, (unsigned int)button2.flagPress, 6);
master.writeSingle(ADR_CONTR_1, (unsigned int)button3.flagPress, 7);
}
}
}
//--------------------------- обработчик прерывания 500 мкс
void timerInterrupt() {
master.update(); // проверка данных обмена
button1.scanState(); // обработка сигнала кнопки 1
button2.scanState(); // обработка сигнала кнопки 2
button3.scanState(); // обработка сигнала кнопки 3
timeCount++;
}
////////Slave/////////
#include <TimerOne.h>
#include <Button.h>
#include <Tiny_ModBusRTU_Slave.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define TEMPSENSOR_DQ_PIN 8 // thermometer data pin
#define LIGHT1_PIN 10 // подключен к выводу 10
#define LIGHT2_PIN 11 // подключен к выводу 11
#define LIGHT3_PIN 12 // подключен к выводу 12
int timeCount = 0; // счетчик времени
unsigned int regTable[20]; // таблица регистров
int buttonState = 0;
boolean LED_state[5] = {0};
int flag = 0;
Tiny_ModBusRTU_Slave slave(51, 8, regTable, 20, 2); // создаем объект ModBus, адрес 51, таймаут 4 мс, массив regTable, размер 20
OneWire oneWire (TEMPSENSOR_DQ_PIN);
DallasTemperature ds(&oneWire);
DeviceAddress Sensor0 = { 0x28, 0xB1, 0x85, 0xD0, 0x02, 0x00, 0x00, 0x79 }; // floor temperature 28 B1 85 D0 02 00 00 79
DeviceAddress Sensor1 = { 0x28, 0xC0, 0xAA, 0x26, 0x00, 0x00, 0x80, 0xFA }; // air temperature 28 C0 AA 26 00 00 80 FA
void setup() {
Timer1.initialize(500); // инициализация таймера 1, период 500 мкс
Timer1.attachInterrupt(timerInterrupt, 500); // задаем обработчик прерываний
//ds.setResolution(Sensor0, 12);
//ds.setResolution(Sensor1, 12);
Serial.begin(9600);
pinMode(LIGHT1_PIN, OUTPUT);
digitalWrite(LIGHT1_PIN, LOW);
pinMode(LIGHT2_PIN, OUTPUT);
digitalWrite(LIGHT2_PIN, LOW);
pinMode(LIGHT3_PIN, OUTPUT);
digitalWrite(LIGHT3_PIN, LOW);
}
void loop() {
Climate();
Light();
// перегрузка состояния кнопки в таблицу регистров
//noInterrupts();
//interrupts();
}
//--------------------------- обработчик прерывания 500 мкс
void timerInterrupt() {
slave.update(); // проверка данных обмена
timeCount++;
}
void Climate() {
ds.requestTemperatures(); // read temperature
noInterrupts();
*(float *)regTable = ds.getTempC(Sensor0);
*(float *)(regTable + 2) = ds.getTempC(Sensor1);
interrupts();
}
void Light()
{
if ( (regTable[5] & 1) == 0) digitalWrite(LIGHT1_PIN, LOW);
else digitalWrite(LIGHT1_PIN, HIGH);
if ( (regTable[6] & 1) == 0) digitalWrite(LIGHT2_PIN, LOW);
else digitalWrite(LIGHT2_PIN, HIGH);
if ( (regTable[7] & 1) == 0) digitalWrite(LIGHT3_PIN, LOW);
else digitalWrite(LIGHT3_PIN, HIGH);
delay(2);
}
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Здравствуйте!
Я уже забыл, там какие-то проблемы работы с Мегой. В цикле Умный дом в качестве центрального контроллера планируется использовать Мегу 2560. Мне придется проверять и дорабатывать эти библиотеки. Когда - точно не знаю. Скорее всего сейчас сделаем несколько локальных контроллеров и перейдем к центральному.
Я уже забыл, там какие-то проблемы работы с Мегой. В цикле Умный дом в качестве центрального контроллера планируется использовать Мегу 2560. Мне придется проверять и дорабатывать эти библиотеки. Когда - точно не знаю. Скорее всего сейчас сделаем несколько локальных контроллеров и перейдем к центральному.
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
Здравствуйте, я на данной библиотеке сделал себе сеть, но у меня не получается широковещательный режим, он точно обрабатывается в библиотеке? Я в мастере передаю массив, в качестве устройства указываю 0, в slave нечего не делаю, он имеет например номер 2, но массив не обновляется на slave. Может что не так делаю?
Re: Работа библиотек Tiny_ModBusRTU_Master и Tiny_ModBusRTU_Slave на Mega2560.
saf47 писал(а):Здравствуйте, я на данной библиотеке сделал себе сеть, но у меня не получается широковещательный режим, он точно обрабатывается в библиотеке? Я в мастере передаю массив, в качестве устройства указываю 0, в slave нечего не делаю, он имеет например номер 2, но массив не обновляется на slave. Может что не так делаю?
Разобрался сам,все работает.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость