Тел. (495) 972-27-12

Анализатор/регистратор электро-сети с интерфейсом MODBUS

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY

Анализатор/регистратор электро-сети с интерфейсом MODBUS

Сообщение Тима » 19 авг 2016, 22:22

Доброго времени суток.
Есть необходимость сделать некий анализатор/регистратор электро-сети.
Имеем тот-же МВА8, дуина, ОЛЕД-экран, 3 трансформатора тока с выходом 4..20 мА, трансформатор 220/9 вольт.
Необходимо собрать регистратор, сохраняющий максимальный ток по 3 фазам и минимальное напряжение.
В принципе со схемой соединения приборов проблем нет, как и с настройками МВА8.
Проблема со скетчем... Необходимо считать данные с ячеек 1, 7, 13, 19 и присвоить их reg[0], reg[1], reg[2], reg[3].
Данные со всех ячеек почему-то поочередно присваиваются reg[0]. Остальные остаются нулями.
Т.е. на экране одно значение меняется 1 раз в секунду, перебирая значения 4х ячеек.
Вот скетч:
Code: [Выделить всё] [Expand/Collapse]
  1. #include <SimpleModbusMaster.h>
  2. #include <Arduino.h>
  3. #include <Wire.h>
  4. #include <MicroLCD.h>
  5. int A,B,C,U;
  6.  
  7. LCD_SSD1306 lcd;
  8.  
  9. // Настройки интерфейса
  10. #define baud 9600       // Скорость
  11. #define timeout 1000    // Длительность ожидание ответа
  12. #define polling 200     // Длительность паузы между запросами
  13. #define retry_count 10  // Количество попыток обмена до отключения канала
  14.  
  15. // Выход контроллера для управления направлением драйвера
  16. #define TxEnablePin 2
  17.  
  18. // Выход для управления светодиодом
  19. #define LED 13
  20.  
  21. // Количество регистров на стороне ведущего устройства для хранения данных
  22. #define TOTAL_NO_OF_REGISTERS 4
  23.  
  24. // Простой способ подсчета количтества создаваемых объектов packet.
  25. // TOTAL_NO_OF_PACKETS обновляется автоматически.
  26. enum
  27. {
  28.   PACKET1,
  29.   PACKET2,
  30.   PACKET3,
  31.   PACKET4,
  32.   TOTAL_NO_OF_PACKETS // Этот элемент должен быть последним
  33. };
  34.  
  35. Packet packets[TOTAL_NO_OF_PACKETS];
  36.  
  37. unsigned int regs[TOTAL_NO_OF_REGISTERS];
  38.  
  39. void setup()
  40. {
  41.   // Инициализируем каждый обект packet
  42.   modbus_construct(&packets[PACKET1], 1, READ_HOLDING_REGISTERS, 1, 1, 0);
  43.   modbus_construct(&packets[PACKET2], 1, READ_HOLDING_REGISTERS, 7, 1, 0);
  44.   modbus_construct(&packets[PACKET3], 1, READ_HOLDING_REGISTERS, 13, 1, 0);
  45.   modbus_construct(&packets[PACKET4], 1, READ_HOLDING_REGISTERS, 19, 1, 0);
  46.   // Инициализируем конечный автомат протокола MODBUS
  47.   modbus_configure(&Serial, baud, SERIAL_8N1, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);
  48.  
  49.   // Инициализируем последовательный порт для отладочного вывода
  50.  lcd.begin();
  51.  
  52.   // Настраиваем порт для светодиода
  53.   pinMode(LED, OUTPUT);
  54.   digitalWrite(LED, LOW);
  55. }
  56.  
  57. void loop()
  58. {
  59.   modbus_update();
  60.  
  61.         lcd.setFont(FONT_SIZE_MEDIUM);
  62.         lcd.setCursor(0, 0); lcd.print("ANALIZATOR");
  63.         lcd.setCursor(0, 2); lcd.print(regs[0]);
  64.         lcd.setCursor(40, 2); lcd.print(regs[1]);
  65.         lcd.setCursor(80, 2); lcd.print(regs[2]);
  66.         lcd.setCursor(0, 6); lcd.print(regs[3]);
  67.         U=250;
  68.     if (A < regs[0])  { A=regs[0]; }
  69.     if (B < regs[1])  { B=regs[1]; }
  70.     if (C < regs[2])  { C=regs[2]; }
  71.     if (U > regs[3])  { U=regs[3]; }
  72.         lcd.setCursor(0, 4); lcd.print(A);
  73.         lcd.setCursor(40, 4); lcd.print(B);
  74.         lcd.setCursor(80, 4); lcd.print(C);
  75.         lcd.setCursor(40, 6); lcd.print(U);
  76. }
  77.  
GeSHi © Codebox Plus


Как это исправить?
Тима
 
Сообщения: 118
Зарегистрирован: 16 ноя 2012, 21:03

Re: Анализатор/регистратор электро-сети с интерфейсом MODBUS

Сообщение Mr.Kubikus » 19 авг 2016, 22:59

Перенес в отдельную тему
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 875
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: Анализатор/регистратор электро-сети с интерфейсом MODBUS

Сообщение Тима » 21 авг 2016, 21:11

Разобрался.
copy/paste конечно штука удобная, но иногда сбивает с толку. Вот и я докопипастился.... :lol:
В строках:
Code: [Выделить всё] [Expand/Collapse]
  modbus_construct(&packets[PACKET1], 1, READ_HOLDING_REGISTERS, 1, 1, 0);
  modbus_construct(&packets[PACKET2], 1, READ_HOLDING_REGISTERS, 7, 1, 0);
  modbus_construct(&packets[PACKET3], 1, READ_HOLDING_REGISTERS, 13, 1, 0);
  modbus_construct(&packets[PACKET4], 1, READ_HOLDING_REGISTERS, 19, 1, 0);
GeSHi © Codebox Plus

последние параметры "0", а это адрес ячейки, куда записываются считанные данные. Вот он и записывал все считанное в regs[0] поочередно.
Поменял адреса на соответствующие и все встало на свои места.
Последний раз редактировалось Тима 22 авг 2016, 19:48, всего редактировалось 2 раз(а).
Тима
 
Сообщения: 118
Зарегистрирован: 16 ноя 2012, 21:03

Re: Анализатор/регистратор электро-сети с интерфейсом MODBUS

Сообщение Mr.Kubikus » 22 авг 2016, 12:02

Копипаста она такая :).

Кстати, если при публикации исходников к тегу code добавить параметр =сpp, то тогда появляется подсветка синтаксиса и нумерация строк. За счет этого удобнее ссылаться на конкретные места в коде.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 875
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва


Вернуться в Arduino и Ко. ♥♥♥



Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex[bot] и гости: 1

cron