Added set function for AV Present Value (similar to ao.c).
This commit is contained in:
@@ -159,7 +159,35 @@ unsigned Analog_Value_Instance_To_Index(
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float Analog_Value_Present_Value(
|
bool Analog_Value_Present_Value_Set(
|
||||||
|
uint32_t object_instance,
|
||||||
|
float value,
|
||||||
|
uint8_t priority)
|
||||||
|
{
|
||||||
|
unsigned index = 0;
|
||||||
|
bool status = false;
|
||||||
|
|
||||||
|
Analog_Value_Init();
|
||||||
|
index = Analog_Value_Instance_To_Index(object_instance);
|
||||||
|
if (index < MAX_ANALOG_VALUES) {
|
||||||
|
if (priority && (priority <= BACNET_MAX_PRIORITY) &&
|
||||||
|
(priority != 6 /* reserved */ ) &&
|
||||||
|
(value >= 0.0) && (value <= 100.0)) {
|
||||||
|
Analog_Value_Level[index][priority - 1] = (uint8_t) value;
|
||||||
|
/* Note: you could set the physical output here to the next
|
||||||
|
highest priority, or to the relinquish default if no
|
||||||
|
priorities are set.
|
||||||
|
However, if Out of Service is TRUE, then don't set the
|
||||||
|
physical output. This comment may apply to the
|
||||||
|
main loop (i.e. check out of service before changing output) */
|
||||||
|
status = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float Analog_Value_Present_Value(
|
||||||
uint32_t object_instance)
|
uint32_t object_instance)
|
||||||
{
|
{
|
||||||
float value = ANALOG_RELINQUISH_DEFAULT;
|
float value = ANALOG_RELINQUISH_DEFAULT;
|
||||||
@@ -346,26 +374,15 @@ bool Analog_Value_Write_Property(
|
|||||||
switch (wp_data->object_property) {
|
switch (wp_data->object_property) {
|
||||||
case PROP_PRESENT_VALUE:
|
case PROP_PRESENT_VALUE:
|
||||||
if (value.tag == BACNET_APPLICATION_TAG_REAL) {
|
if (value.tag == BACNET_APPLICATION_TAG_REAL) {
|
||||||
priority = wp_data->priority;
|
|
||||||
/* Command priority 6 is reserved for use by Minimum On/Off
|
/* Command priority 6 is reserved for use by Minimum On/Off
|
||||||
algorithm and may not be used for other purposes in any
|
algorithm and may not be used for other purposes in any
|
||||||
object. */
|
object. */
|
||||||
if (priority && (priority <= BACNET_MAX_PRIORITY) &&
|
if (Analog_Value_Present_Value_Set(
|
||||||
(priority != 6 /* reserved */ ) &&
|
wp_data->object_instance,
|
||||||
(value.type.Real >= 0.0) && (value.type.Real <= 100.0)) {
|
wp_data->priority,
|
||||||
level = (uint8_t) value.type.Real;
|
value.type.Real)) {
|
||||||
object_index =
|
|
||||||
Analog_Value_Instance_To_Index(wp_data->
|
|
||||||
object_instance);
|
|
||||||
priority--;
|
|
||||||
Analog_Value_Level[object_index][priority] = level;
|
|
||||||
/* Note: you could set the physical output here if we
|
|
||||||
are the highest priority.
|
|
||||||
However, if Out of Service is TRUE, then don't set the
|
|
||||||
physical output. This comment may apply to the
|
|
||||||
main loop (i.e. check out of service before changing output) */
|
|
||||||
status = true;
|
status = true;
|
||||||
} else if (priority == 6) {
|
} else if (wp_data->priority == 6) {
|
||||||
/* Command priority 6 is reserved for use by Minimum On/Off
|
/* Command priority 6 is reserved for use by Minimum On/Off
|
||||||
algorithm and may not be used for other purposes in any
|
algorithm and may not be used for other purposes in any
|
||||||
object. */
|
object. */
|
||||||
|
|||||||
@@ -63,6 +63,14 @@ extern "C" {
|
|||||||
BACNET_WRITE_PROPERTY_DATA * wp_data,
|
BACNET_WRITE_PROPERTY_DATA * wp_data,
|
||||||
BACNET_ERROR_CLASS * error_class,
|
BACNET_ERROR_CLASS * error_class,
|
||||||
BACNET_ERROR_CODE * error_code);
|
BACNET_ERROR_CODE * error_code);
|
||||||
|
|
||||||
|
bool Analog_Value_Present_Value_Set(
|
||||||
|
uint32_t object_instance,
|
||||||
|
float value,
|
||||||
|
uint8_t priority);
|
||||||
|
float Analog_Value_Present_Value(
|
||||||
|
uint32_t object_instance);
|
||||||
|
|
||||||
|
|
||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
#include "ctest.h"
|
#include "ctest.h"
|
||||||
|
|||||||
Reference in New Issue
Block a user