Skip to content

Problem with use it on arduino UNO #39

@kluszon

Description

@kluszon

Hello,

I'm trying to use ...\Stabile version\Modbus-Energy-Monitor-Arduino.ino with my Arduino UNO and SDM120C, but I can't recive any respons from energy meter.... Arduino TX diode is blink interval, but any data wasn't respond.(RX don't blink) Can you help me?

My connection:
SDM120 -> max485 module
B - B
A - A

max485 module ->Arduino
Vcc - 5V
GND - GND
DE - RE - PIN2
DI - PIN1 TX
R0 - PIN0 RX

Code modifiation:

Lines:

#define SERIAL_OUTPUT 0 // Serial port 0
#define TxEnablePin 2 //DE and RE PIN

I'll be very gratefull for any help.

/**********************************************************************
  ModbusEnergyMonitor example
  An example to collect data from a Modbus energy monitor using ModbusSensor class
  to datalogger, include a RTC DS3231 and a SD card
  version 0.4 BETA 31/12/2015

  Author: Jaime García  @peninquen
  License: Apache License Version 2.0.
**********************************************************************/
/*

*/
#define SERIAL_OUTPUT 0

#if SERIAL_OUTPUT
#   define SERIAL_BEGIN(...) Serial.begin(__VA_ARGS__)
#   define SERIAL_PRINT(...) Serial.print(__VA_ARGS__)
#   define SERIAL_PRINTLN(...) Serial.println(__VA_ARGS__)
#else
#   define SERIAL_BEGIN(...)
#   define SERIAL_PRINT(...)
#   define SERIAL_PRINTLN(...)
#endif

#include "ModbusSensor.h"
#include "SDMdefines.h"

#define MB_SERIAL_PORT &Serial   // Arduino has only one serial port, Mega has 3 serial ports.
// if use Serial 0, remember disconect Tx (pin0) when upload sketch, then re-conect
#define MB_BAUDRATE       2400          // b 2400
#define MB_BYTEFORMAT     SERIAL_8N2    // Prty n
#define TxEnablePin       2

#define ID_1  1                       // id 001  modbus id of the energy monitor
#define REFRESH_INTERVAL  5000        // refresh time, 5 SECONDS
#define WRITE_INTERVAL 10000UL        // values send to serial port, 1 minute ( 60 * 1000)
#define KWH_2_WS 36000000

// multiplication factor, store value as an integer
#define VOL_FAC 10
#define CUR_FAC 100
#define POW_FAC 10
#define PFA_FAC 100
#define FRE_FAC 10
#define ENE_FAC 100


// global variables to poll, process and send values
modbusSensor volt(ID_1, VOLTAGE, CHANGE_TO_ZERO);
modbusSensor curr(ID_1, CURRENT, CHANGE_TO_ZERO);
modbusSensor pwr(ID_1, POWER, CHANGE_TO_ZERO);
modbusSensor enrg(ID_1, IAENERGY, HOLD_VALUE);
modbusSensor freq(ID_1, FREQUENCY, CHANGE_TO_ZERO);
modbusSensor aPwr(ID_1, APOWER, CHANGE_TO_ZERO);
modbusSensor pwrFact(ID_1, PFACTOR, CHANGE_TO_ONE);

uint16_t voltage, maxVoltage, minVoltage; // integer, factor x10
uint16_t current, maxCurrent, minCurrent; // integer, factor x100
uint16_t power, maxPower, minPower;       // integer, factor x10
uint16_t lastEnergy, energy, avgPower;    // integer, factor x100
uint16_t frequency, maxFreq, minFreq;     // integer, factor x100
uint16_t aPower, maxApower, minApower;    // integer, factor x10
uint16_t powerFactor, maxPF, minPF;       // integer, factor x100

unsigned long previousMillis = 0;
unsigned long currentMillis = 0;
boolean       firstData;

void setup() {
  Serial.begin(9600);
  MBSerial.config(MB_SERIAL_PORT, TxEnablePin, REFRESH_INTERVAL);
  MBSerial.begin(MB_BAUDRATE, MB_BYTEFORMAT);
  delay(95);
  Serial.println("time(s), maxVolt(V), minVolt(V), maxCurr(A) minCurr(A), maxPower(W), minPower(W), maxApPower(VA), minApPower(VA), maxFreq(Hz), minFreq(Hz), AvgPower (W), Energy(Kwh)");

  firstData = false;
  power = 0;
  maxPower = 0;    // in case it has been recorded, use it
  minPower = 0;
  lastEnergy = 0;  // in case it has been recorded, use it
  energy = lastEnergy;
}

void loop() {
  sei();
  if (MBSerial.available()) {
    voltage = volt.read(VOL_FAC);
    current = curr.read(CUR_FAC);
    power = pwr.read(POW_FAC);
    aPower = aPwr.read(POW_FAC);
    frequency = freq.read(FRE_FAC);
    energy = enrg.read(ENE_FAC);

    if (!firstData) {
      if (maxVoltage < voltage) maxVoltage = voltage;
      if (minVoltage > voltage) minVoltage = voltage;
      if (maxCurrent < current) maxCurrent = current;
      if (minCurrent > current) minCurrent = current;
      if (maxPower < power) maxPower = power;
      if (minPower > power) minPower = power;
      if (maxApower < aPower) maxApower = aPower;
      if (minApower > aPower) minApower = aPower;
      if (maxFreq < frequency) maxFreq = frequency;
      if (minFreq > frequency) minFreq = frequency;
      if (maxPower < power) maxPower = power;
      if (minPower > power) minPower = power;
    }
    else {
      maxVoltage = voltage;
      minVoltage = voltage;
      maxCurrent = current;
      minCurrent = current;
      maxPower = power;
      minPower = power;
      maxApower = aPower;
      minApower = aPower;
      maxFreq = frequency;
      minFreq = frequency;
      firstData = false;
    }
  }

  currentMillis = millis();
  if (currentMillis - previousMillis >= WRITE_INTERVAL) {
    previousMillis = currentMillis;
    avgPower = (energy - lastEnergy) * KWH_2_WS / (WRITE_INTERVAL / 1000); //average power KWh/s to W
    lastEnergy = energy;
    firstData = true;

    Serial.print(currentMillis / 1000);
    Serial.print(",");
    Serial.print((float)maxVoltage / VOL_FAC, 1);
    Serial.print(",");
    Serial.print((float)minVoltage / VOL_FAC, 1);
    Serial.print(",");
    Serial.print((float)maxCurrent / CUR_FAC, 2);
    Serial.print(",");
    Serial.print((float)minCurrent / CUR_FAC, 2);
    Serial.print(",");
    Serial.print((float)maxPower / POW_FAC, 2);
    Serial.print(",");
    Serial.print((float)minPower / POW_FAC, 2);
    Serial.print(",");
    Serial.print((float)maxApower / POW_FAC, 2);
    Serial.print(",");
    Serial.print((float)minApower / POW_FAC, 2);
    Serial.print(",");
    Serial.print((float)maxFreq / FRE_FAC, 2);
    Serial.print(",");
    Serial.print((float)minFreq / FRE_FAC, 2);
    Serial.print(",");
    Serial.print((float)avgPower / ENE_FAC, 2);
    Serial.print(",");
    Serial.println((float)energy / ENE_FAC, 2);

  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions