WiFiPowerMeter/ModbusApp.cpp

91 lines
2.1 KiB
C++

/*
* ModbusApp.cpp
*
* Created on: 01.05.2015
* Author: wn
*/
#include "SimpleModbusMaster.h"
// #include "Mudbus.h"
#include "ModbusApp.h"
enum
{
VOLTAGE,
COSPHI,
CURRENT,
POWER,
ENERGY,
TOTAL_NO_OF_PACKETS
};
Packet packets[TOTAL_NO_OF_PACKETS];
// Mudbus *modbusSlave;
uint16_t voltage;
uint16_t cosphi;
uint16_t current;
uint16_t power;
uint16_t energy[2];
float startEnergy = 0;
float getVoltage() { return (float)voltage; }
float getCurrent() { return (float)current * 0.1; }
float getCosPhi() { return (float)cosphi * 0.01; }
float getPower() { return (float)power * 10; }
float getEnergy() {
uint32_t v = ((uint32_t)energy[1]) + (((uint32_t)energy[0]) << 16);
float vv = ((float)v) * 0.01;
return vv;
}
float getNewEnergy() { return getEnergy() - startEnergy; }
// void modbusAppBegin(Mudbus *mb) {
void modbusAppBegin() {
// modbusSlave = mb;
modbus_construct(&packets[VOLTAGE], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 35, 1, &voltage);
modbus_construct(&packets[COSPHI], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 39, 1, &cosphi);
modbus_construct(&packets[CURRENT], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 36, 1, &current);
modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 37, 1, &power);
modbus_construct(&packets[ENERGY], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 27, 2, energy);
// modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 1, 1, &power);
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)) {
startEnergy = nEnergy;
}
// 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];
}