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,
|
2015-05-18 12:36:47 +02:00
|
|
|
COSPHI,
|
2015-05-02 00:14:40 +02:00
|
|
|
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
|
|
|
|
2015-05-18 12:36:47 +02:00
|
|
|
uint16_t voltage;
|
|
|
|
uint16_t cosphi;
|
|
|
|
uint16_t current;
|
|
|
|
uint16_t power;
|
2015-05-18 22:07:33 +02:00
|
|
|
uint16_t energy[2];
|
2015-05-02 00:14:40 +02:00
|
|
|
|
|
|
|
float startEnergy = 0;
|
|
|
|
|
|
|
|
|
2015-05-18 12:36:47 +02:00
|
|
|
float getVoltage() { return (float)voltage; }
|
|
|
|
float getCurrent() { return (float)current * 0.1; }
|
|
|
|
float getCosPhi() { return (float)cosphi * 0.01; }
|
2015-05-18 22:07:33 +02:00
|
|
|
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; }
|
2015-05-02 00:14:40 +02:00
|
|
|
|
|
|
|
|
2015-05-03 20:53:49 +02:00
|
|
|
// void modbusAppBegin(Mudbus *mb) {
|
|
|
|
void modbusAppBegin() {
|
|
|
|
// modbusSlave = mb;
|
2015-05-02 00:14:40 +02:00
|
|
|
|
|
|
|
|
2015-05-18 12:36:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
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, ¤t);
|
|
|
|
modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 37, 1, &power);
|
2015-05-18 22:07:33 +02:00
|
|
|
modbus_construct(&packets[ENERGY], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 27, 2, energy);
|
2015-05-18 12:36:47 +02:00
|
|
|
// modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 1, 1, &power);
|
2015-05-02 00:14:40 +02:00
|
|
|
|
|
|
|
|
|
|
|
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();
|
2015-05-18 22:07:33 +02:00
|
|
|
if ((0 == startEnergy) && (0 != nEnergy)) {
|
2015-05-02 00:14:40 +02:00
|
|
|
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
|
|
|
}
|
|
|
|
|