Связь Arduino MODBUS не удалась из-за большого количества регистров
Когда я пытаюсь запустить следующую программу, она работает нормально:
#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
modbusDevice regBank;
modbusSlave slave;
void setup()
{
lcd.begin(40, 2);
regBank.setId(10);
int numSet=0;
for (int i=0; i <= 300; i++){
if (numSet <= 8) {
regBank.add(i);
}
if (numSet == 16) {
numSet = 0;
}
numSet++;
}
slave._device = ®Bank;
slave.setBaud(9600);
}
void loop() {
int numSet=0;
for (int i=0; i <= 300; i++){
if (numSet <= 8) {
if (regBank.get(i) >= 1) {
lcd.setCursor(2, 0);
lcd.print("test");
}
}
if (numSet == 16) {
numSet = 0;
}
numSet++;
}
slave.run();
}
Но всякий раз, когда я добавляю больше кода или увеличиваю количество циклов, связь по MODBUS перестает работать.
Неужели какая-то часть Arduino не справляется с таким объёмом работы? Это сбивает с толку, поскольку происходит сбой не только при добавлении дополнительных действий regBank.add()
или regBank.get()
, но и при добавлении дополнительного программного кода (например, добавление 40 строк). кода для записи на ЖК-дисплей).
@Marco, 👍1
Обсуждение2 ответа
Эти библиотеки используют немало оперативной памяти и места для кода. Я не удивлен, что вам не хватает места.
Как предлагает dlu в своем ответе, выясните, сколько флэш-памяти и оперативной памяти вы используете, проверив окно вывода после компиляции.
>Я предлагаю использовать Arduino Mega, поскольку это даст вам больше места для кода и оперативной памяти. Другими альтернативами являются Arduino Due и Arduino MKR Zero/1000/1010, но для них могут потребоваться преобразователи уровня, поскольку они работают при напряжении 3,3 В.
Но вы также можете использовать Teensy3.2 (https://www.sparkfun.com/products/13736), он дешевле и, вероятно, лучше. Но это может быть не так просто настроить., @Paul
Прежде чем вы решите сменить платформу, найдите время, чтобы выяснить, как вы используете ресурсы. После компиляции вы получите отчет об объеме потребляемой памяти, проверьте это в первую очередь.
После этого было бы полезно, если бы вы могли более четко описать, что вы видите, когда код дает сбой.
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
- Мониторинг контроллера Modbus RTU с помощью Arduino и модуля RS485
- Есть ли хорошая рабочая библиотека MODBUS TCP master для Arduino?
- Ведомая библиотека Modbus RTU
- Modbus IP с Simply Modbus TCP
- Сбой защиты от разрушения стека ESP32 с Modbus RTU
- Связь Arduino Uno и ESP32 с использованием RS485
- Использование сервера Modbus TCP на Arduino
Голосование за прекращение, поскольку оно было приостановлено в течение года без предоставления какой-либо конкретной информации, необходимой для привлечения к ответственности., @Chris Stratton