WiFiPowerMeter/ModbusApp.cpp

95 lines
2.1 KiB
C++
Raw Permalink Normal View History

2015-05-02 00:14:40 +02:00
/*
* ModbusApp.cpp
*
* Created on: 01.05.2015
* Author: wn
*/
#include "SimpleModbusMaster.h"
2015-05-03 20:53:49 +02:00
// #include "Mudbus.h"
2015-05-02 00:14:40 +02:00
#include "ModbusApp.h"
enum
{
VOLTAGE,
FREQUENCY,
CURRENT,
POWER,
ENERGY,
TOTAL_NO_OF_PACKETS
};
Packet packets[TOTAL_NO_OF_PACKETS];
2015-05-03 20:53:49 +02:00
// Mudbus *modbusSlave;
2015-05-02 00:14:40 +02:00
uint16_t voltage[2];
uint16_t frequency[2];
uint16_t current[2];
uint16_t power[2];
uint16_t energy[2];
float startEnergy = 0;
float convF(uint16_t in[2]) {
union {
struct {
uint16_t a;
uint16_t b;
} s;
float f;
} U;
U.s.a = in[1];
U.s.b = in[0];
return U.f;
}
float getVoltage() { return convF(voltage); }
float getCurrent() { return convF(current); }
float getFrequency() { return convF(frequency); }
float getPower() { return convF(power); }
float getEnergy() { return convF(energy); }
float getNewEnergy() { return convF(energy) - startEnergy; }
2015-05-03 20:53:49 +02:00
// void modbusAppBegin(Mudbus *mb) {
void modbusAppBegin() {
2015-05-02 00:14:40 +02:00
pinMode(ZEROING_PIN, INPUT_PULLUP);
2015-05-03 20:53:49 +02:00
// modbusSlave = mb;
2015-05-02 00:14:40 +02:00
modbus_construct(&packets[VOLTAGE], 1, READ_HOLDING_REGISTERS, 0x2000, 2, voltage);
modbus_construct(&packets[FREQUENCY], 1, READ_HOLDING_REGISTERS, 0x2020, 2, frequency);
modbus_construct(&packets[CURRENT], 1, READ_HOLDING_REGISTERS, 0x2060, 2, current);
modbus_construct(&packets[POWER], 1, READ_HOLDING_REGISTERS, 0x2080, 2, power);
modbus_construct(&packets[ENERGY], 1, READ_HOLDING_REGISTERS, 0x3000, 2, energy);
modbus_configure(&Serial2, MODBUS_BAUD, SERIAL_8N2, MODBUS_TIMEOUT,
MODBUS_SCANRATE, MODBUS_RETRY_COUNT, MODBUS_TX_ENABLE_PIN, packets, TOTAL_NO_OF_PACKETS);
}
void modbusAppExec() {
modbus_update();
float nEnergy = getEnergy();
if (((0 == startEnergy) && (0 != nEnergy)) || (digitalRead(ZEROING_PIN) == 0)) {
startEnergy = nEnergy;
}
2015-05-03 20:53:49 +02:00
// modbusSlave->R[0] = voltage[0];
// modbusSlave->R[1] = voltage[1];
// modbusSlave->R[2] = current[0];
// modbusSlave->R[3] = current[1];
// modbusSlave->R[4] = frequency[0];
// modbusSlave->R[5] = frequency[1];
// modbusSlave->R[6] = power[0];
// modbusSlave->R[7] = power[1];
// modbusSlave->R[8] = energy[0];
// modbusSlave->R[9] = energy[1];
2015-05-02 00:14:40 +02:00
}