/* * 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 * 0.01; } 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, ¤t); 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]; }