initial
This commit is contained in:
93
ModbusApp.cpp
Normal file
93
ModbusApp.cpp
Normal file
@ -0,0 +1,93 @@
|
||||
/*
|
||||
* ModbusApp.cpp
|
||||
*
|
||||
* Created on: 01.05.2015
|
||||
* Author: wn
|
||||
*/
|
||||
|
||||
#include "SimpleModbusMaster.h"
|
||||
#include "Mudbus.h"
|
||||
|
||||
|
||||
#include "ModbusApp.h"
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
VOLTAGE,
|
||||
FREQUENCY,
|
||||
CURRENT,
|
||||
POWER,
|
||||
ENERGY,
|
||||
TOTAL_NO_OF_PACKETS
|
||||
};
|
||||
|
||||
Packet packets[TOTAL_NO_OF_PACKETS];
|
||||
|
||||
Mudbus *modbusSlave;
|
||||
|
||||
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; }
|
||||
|
||||
|
||||
void modbusAppBegin(Mudbus *mb) {
|
||||
pinMode(ZEROING_PIN, INPUT_PULLUP);
|
||||
modbusSlave = mb;
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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];
|
||||
}
|
||||
|
Reference in New Issue
Block a user