Связь 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 = &regBank;
  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 строк). кода для записи на ЖК-дисплей).

, 👍1

Обсуждение

Голосование за прекращение, поскольку оно было приостановлено в течение года без предоставления какой-либо конкретной информации, необходимой для привлечения к ответственности., @Chris Stratton


2 ответа


0

Эти библиотеки используют немало оперативной памяти и места для кода. Я не удивлен, что вам не хватает места.

Как предлагает dlu в своем ответе, выясните, сколько флэш-памяти и оперативной памяти вы используете, проверив окно вывода после компиляции.

>

Я предлагаю использовать Arduino Mega, поскольку это даст вам больше места для кода и оперативной памяти. Другими альтернативами являются Arduino Due и Arduino MKR Zero/1000/1010, но для них могут потребоваться преобразователи уровня, поскольку они работают при напряжении 3,3 В.

,

Но вы также можете использовать Teensy3.2 (https://www.sparkfun.com/products/13736), он дешевле и, вероятно, лучше. Но это может быть не так просто настроить., @Paul


1

Прежде чем вы решите сменить платформу, найдите время, чтобы выяснить, как вы используете ресурсы. После компиляции вы получите отчет об объеме потребляемой памяти, проверьте это в первую очередь.

После этого было бы полезно, если бы вы могли более четко описать, что вы видите, когда код дает сбой.

,