upm
0.7.0
Sensor/Actuator repository for libmraa (v1.0.0)
|
UPM API for the Veris E50HX Energy Meter. More...
This module implements support for the Veris E50H2 and E50H5 BACnet Energy Meters.
From the datasheet: The E50H5 BACnet MS/TP DIN Rail Meter with Data Logging combines exceptional performance and easy installation to deliver a cost-effective solution for power monitoring applications. Native serial communication via BACnet MS/TP provides complete accessibility of all measurements to your Building Automation System The data logging capability protects data in the event of a power failure. The E50H5 can be easily installed on standard DIN rail, surface mounted or contained in an optional NEMA 4 enclosure, as needed. The front-panel LCD display makes device installation and setup easy and provides local access to the full set of detailed measurements.
This module was developed using the upm::BACNETMSTP module, based on libbacnet-stack 0.8.3. Both libbacnet 0.8.3 and the upm::BACNETMSTP libraries must be present in order to build this module. This driver was developed on the E50H5. The Trend Log functionality is not currently supported.
The Binary Input Objects are also not supported as these are only used for the Alarm bits which are already available from Analog Input Object 52 as an alarm bitfield incorporating all of the supported alarm indicators.
It was connected using an RS232->RS485 interface. You cannot use the built in MCU TTL UART pins for accessing this device – you must use a full Serial RS232->RS485 or USB-RS485 interface connected via USB.
Public Member Functions | |
E50HX (uint32_t targetDeviceObjectID) | |
~E50HX () | |
void | initMaster (std::string port, int baudRate, int deviceInstanceNumber, int macAddr, int maxMaster=DEFAULT_MAX_MASTER, int maxInfoFrames=1) |
void | setDebug (bool enable) |
float | getAnalogValue (ANALOG_VALUES_T objInstance) |
float | getAnalogInput (ANALOG_INPUTS_T objInstance) |
bool | writeConfig (CFG_VALUES_T config) |
bool | writeSystemType (SYSTEM_TYPES_T systype) |
bool | writeCTRatioPrimary (float ctRatio) |
bool | writeCTRatioSecondary (CT_SECONDARY_T ctRatio) |
bool | writePTRatio (float ptRatio) |
bool | writeSystemVoltage (float sysVolts) |
bool | writeDisplayUnits (DISP_UNITS_T dispUnits) |
bool | writePhaseLossVT (float phaseLoss) |
bool | writePhaseLossIT (float phaseLoss) |
std::string | getAnalogValueUnits (ANALOG_VALUES_T objInstance) |
std::string | getAnalogInputUnits (ANALOG_INPUTS_T objInstance) |
uint16_t | getAlarmBits () |
void | checkReliability (bool enable) |
std::string | getDescription () |
std::string | getLocation () |
bool | setLocation (std::string location) |
std::string | getAllErrorString () |
BACNETMSTP::BACERR_TYPE_T | getErrorType () |
uint8_t | getRejectReason () |
std::string | getRejectString () |
uint8_t | getAbortReason () |
std::string | getAbortString () |
BACNET_ERROR_CLASS | getErrorClass () |
BACNET_ERROR_CODE | getErrorCode () |
std::string | getErrorString () |
std::string | getUPMErrorString () |
Data Fields | |
const float | RETURN_ERROR = -1.0 |
const float | RETURN_UNRELIABLE = -2.0 |
Protected Attributes | |
BACNETMSTP * | m_instance |
uint32_t | m_targetDeviceObjectID |
bool | m_initialized |
E50HX | ( | uint32_t | targetDeviceObjectID | ) |
E50HX constructor
targetDeviceObjectID | the unique Instance ID of the Device Object. This number is used to uniquely identify devices on the BACnet network, and ranges from 1 to 4194302. This is not the device's MAC address, though on some devices, the MAC address may be used as part of this number. On the E50HX, this number is randomly generated per device, and you can see this number (or change it) on the BACnet config screens on the LCD. |
void initMaster | ( | std::string | port, |
int | baudRate, | ||
int | deviceInstanceNumber, | ||
int | macAddr, | ||
int | maxMaster = DEFAULT_MAX_MASTER , |
||
int | maxInfoFrames = 1 |
||
) |
This function initializes the underlying BACNETMSTP Master singleton in the event it has not already been initialized. If the BACNETMSTP Master singleton has already been initialized, then this call will be ignored.
port | The serial port that the RS-485 interface is connected to. |
baudRate | The baudrate of the RS-485 interface. All devices on a BACnet RS-485 bus must run at the same baudrate. Valid values are 9600, 19200, 38400, 57600, 76800, and 115200. |
deviceInstanceNumber | This is the unique Device Object Instance number that will be used for our BACnet Master in order to communicate over the BACnet interface. This number must be between 1-4194302 and must be unique on the BACnet network. |
macAddr | This is the MAC address of our BACnet Master. It must be unique on the BACnet segment, and must be between 1-127. |
maxMaster | This specifies to our Master the maximum MAC address used by any other Masters on the BACnet network. This must be between 1-127, the default is 127. Do not change this unless you know what you are doing or you could introduce token passing errors on the BACnet network. |
maxInfoFrames | This number specifies the maximum number of transmissions (like requests for data) our Master is allowed to make before passing the token to the next Master. The default is 1. |
void setDebug | ( | bool | enable | ) |
Enable some debugging output in this module as well as the BACNETMSTP module. Debugging is disabled by default.
enable | true to enable, false to disable. |
float getAnalogValue | ( | ANALOG_VALUES_T | objInstance | ) |
Retrieve the Present_Value property of an Analog Value object. If checkReliability() has been enabled, then the Reliability property of the object will be retrieved first. If the Reliability property is anything other than RELIABILITY_NO_FAULT_DETECTED, then the RETURN_UNRELIABLE value will be returned. Reliability checking is disabled by default for performance reasons.
objInstance | One of the ANALOG_VALUES_T values. |
float getAnalogInput | ( | ANALOG_INPUTS_T | objInstance | ) |
Retrieve the Present_Value property of an Analog Input object. If checkReliability() has been enabled, then the Reliability property of the object will be retrieved first. If the Reliability property is anything other than RELIABILITY_NO_FAULT_DETECTED, then the RETURN_UNRELIABLE value will be returned. Reliability checking is disabled by default for performance reasons.
objInstance | One of the ANALOG_INPUTS_T values. |
bool writeConfig | ( | CFG_VALUES_T | config | ) |
Write one of several 'magic' numbers to the configuration object (AV1). This is used to clear certain counters, reset the accumulated Energy consumption values, etc.
config | One of the CFG_VALUES_T values |
bool writeSystemType | ( | SYSTEM_TYPES_T | systype | ) |
Set the System Type of the device. This defines the voltage lines you have connected.
systype | One of the SYSTEM_TYPES_T values. |
bool writeCTRatioPrimary | ( | float | ctRatio | ) |
Set the Primary CT ratio. See the datasheet for details.
ctRatio | A floating point value between 5-32000 |
bool writeCTRatioSecondary | ( | CT_SECONDARY_T | ctRatio | ) |
Set the Secondary CT ratio. See the datasheet for details.
ctRatio | One of the CT_SECONDARY_T values. |
bool writePTRatio | ( | float | ptRatio | ) |
Set the PT ratio. See the datasheet for details.
ptRatio | A floating point value between 0.01-320.0 |
bool writeSystemVoltage | ( | float | sysVolts | ) |
Set the System Voltage parmeter. See the datasheet for details.
sysVolts | A floating point value between 82.0-32000.0 |
bool writeDisplayUnits | ( | DISP_UNITS_T | dispUnits | ) |
Set the LCD Display Units in IEC or IEEE format.
dispUnits | One of the DISP_UNITS_T values. |
bool writePhaseLossVT | ( | float | phaseLoss | ) |
Set the Phase Loss Voltage Threshold. See the datasheet for details.
dispUnits | A floating point value between 1.0-99.0 |
bool writePhaseLossIT | ( | float | phaseLoss | ) |
Set the Phase Loss Imbalance Threshold. See the datasheet for details.
dispUnits | A floating point value between 1.0-99.0 |
string getAnalogValueUnits | ( | ANALOG_VALUES_T | objInstance | ) |
Query an Analog Value object for the unit code, translate it into a string and cache the result for future use. Return the BACnet text for the Unit enumeration. Unit enumerations are things like 'kilowatt-hours', 'volts', etc. For Objects which do not have a Units property defined for them, or for which Units has no meaning, 'no-units' will typically be returned and cached.
objInstance | One of the ANALOG_VALUES_T values. |
string getAnalogInputUnits | ( | ANALOG_INPUTS_T | objInstance | ) |
Query an Analog Input object for the unit code, translate it into a string and cache the result for future use. Return the BACnet text for the Unit enumeration. Unit enumerations are things like 'kilowatt-hours', 'volts', etc. For Objects which do not have a Units property defined for them, or for which Units has no meaning, 'no-units' will typically be returned and cached.
objInstance | One of the ANALOG_INPUTS_T values. |
uint16_t getAlarmBits | ( | ) |
Query the AI52 Object and return a bitmask of current Alarms. Compare against ALARM_BITS_T to determine what conditions are signaling an alarm. Alarm conditions will clear on their own as soon as the cause is rectified.
|
inline |
Enable or disable reliability checking. By default, when using getAnalogValue() or getAnalogInput() the Present_Value property is returned. There is also a property called Reliability that can be checked to ensure that the Present_Value property is currently valid.
Enabling Reliability Checking has these functions check for a RELIABILITY_NO_FAULT_DETECTED value for the Reliability property before querying the Present_Value property. If anything other than RELIABILITY_NO_FAULT_DETECTED is set, then these functions will return RETURN_UNRELIABLE rather than the Present_Value.
This checking is disabled by default since it will double the number of queries needed to retrieve a given value. However, if you need to ensure that the values returned are always completely valid as determined by the device firmware, you should enable this.
enable | true to check Reliability before returning a value, false otherwise. |
string getDescription | ( | ) |
Query the Device Object of the device and return it's Description property. This typically contains information like the Vendor, model and serial number of a device.
string getLocation | ( | ) |
Query the Device Object of the device and return it's Location property. This typically contains a string indication a customer specific value. Use setLocation() to change.
bool setLocation | ( | std::string | location | ) |
Set the Device Object's Location property. This must be a string containing no more than 63 characters.
string getAllErrorString | ( | ) |
This is a utility function that will return a string reporting on the various types of errors that can occur in BACnet operation.
BACNETMSTP::BACERR_TYPE_T getErrorType | ( | ) |
Return an enumration of the last error type to occur. The value returned will be one of the BACNETMSTP::BACERR_TYPE_T values.
uint8_t getRejectReason | ( | ) |
In the event of a BACnet Reject error, return the error code.
std::string getRejectString | ( | ) |
In the event of a BACnet Reject error, return the error string.
uint8_t getAbortReason | ( | ) |
In the event of a BACnet Abort error, return the Abort reason code.
std::string getAbortString | ( | ) |
In the event of a BACnet Abort error, return the Abort string.
BACNET_ERROR_CLASS getErrorClass | ( | ) |
In the event of a general BACnet error, return the BACnet error class.
BACNET_ERROR_CODE getErrorCode | ( | ) |
In the event of a general BACnet error, return the BACnet error code.
std::string getErrorString | ( | ) |
In the event of a general BACnet error, return the BACnet error string.
std::string getUPMErrorString | ( | ) |
In the event of a non-BACnet UPM error, return a string describing the error.