diff --git a/adsApp/src/ADSPortDriver.cpp b/adsApp/src/ADSPortDriver.cpp index 86fd301..422bafc 100644 --- a/adsApp/src/ADSPortDriver.cpp +++ b/adsApp/src/ADSPortDriver.cpp @@ -329,37 +329,43 @@ asynStatus ADSPortDriver::ADSConnect(asynUser *pasynUser) { status = static_cast( adsConnection->resolve_variables(ads_read_vars)); - if (status) { + if (status && lastReadError != status) { LOG_ERR_ASYN(pasynUser, "Could not resolve ADS read variable names (%i): %s", status, ads_errors[status].c_str()); + lastReadError = status; return status; } + lastReadError = 0; } if (ads_write_vars.size()) { status = static_cast( adsConnection->resolve_variables(ads_write_vars)); - if (status) { + if (status && lastWriteError != status) { LOG_ERR_ASYN(pasynUser, "Could not resolve ADS write variable names(%i): %s", status, ads_errors[status].c_str()); + lastWriteError = status; return status; } + lastWriteError = 0; } + LOG_WARN_ASYN(pasynUser, "Resolved %lu read and %lu write variable names", ads_read_vars.size(), ads_write_vars.size()); // initialize sum-read buffers status = static_cast(SumRead.initialize()); - if (status) { + if (status && lastSumReadError != status) { LOG_ERR_ASYN(pasynUser, "Error initializing sum-read request buffers (%i): %s", status, ads_errors[status].c_str()); + lastSumReadError = status; return status; } - + lastSumReadError = 0; LOG_WARN_ASYN(pasynUser, "Initialized sum-read request buffers"); status = doSumRead(); @@ -976,3 +982,5 @@ WriteResult ADSPortDriver::stringWrite(DeviceVariable &deviceVar, return result; } + + diff --git a/adsApp/src/ADSPortDriver.h b/adsApp/src/ADSPortDriver.h index e65404b..99311a8 100644 --- a/adsApp/src/ADSPortDriver.h +++ b/adsApp/src/ADSPortDriver.h @@ -82,6 +82,9 @@ class ADSPortDriver : public Autoparam::Driver { uint32_t const adsFunctionTimeout; const std::shared_ptr adsConnection; const std::chrono::milliseconds sumReadPeriod; + long lastReadError; + long lastWriteError; + long lastSumReadError; SumReadRequest SumRead; diff --git a/adsApp/src/epics-ads/SumReadRequest.cpp b/adsApp/src/epics-ads/SumReadRequest.cpp index 19273b9..fd2333b 100644 --- a/adsApp/src/epics-ads/SumReadRequest.cpp +++ b/adsApp/src/epics-ads/SumReadRequest.cpp @@ -207,10 +207,15 @@ int SumReadRequest::initialize() { for (size_t i_var = 0; i_var < chunk->variables.size(); i_var++) { std::shared_ptr var = chunk->variables[i_var]; if (var->addr->is_resolved() == false) { - LOG_ERR("variable name is not resolved: '%s'", - var->addr->get_var_name().c_str()); + std::string name = var->addr->get_var_name(); + if (name !=last) { + LOG_ERR("variable name is not resolved: '%s'", + name.c_str()); + last = var->addr->get_var_name(); + } return EPICSADS_NOT_RESOLVED; } + last = ""; chunk->sum_read_request_buffer[i_var] = { var->addr->get_index_group(), var->addr->get_index_offset(), diff --git a/adsApp/src/epics-ads/SumReadRequest.h b/adsApp/src/epics-ads/SumReadRequest.h index 29c1d0c..ef8a188 100644 --- a/adsApp/src/epics-ads/SumReadRequest.h +++ b/adsApp/src/epics-ads/SumReadRequest.h @@ -10,6 +10,7 @@ #include #include #include +#include #ifdef USE_TC_ADS #include @@ -48,6 +49,7 @@ class SumReadRequest { /* Helper method returns a vector of chunks from chunks_by_ads_port_map */ std::shared_ptr>> get_chunks(); + std::string last; public: /* Number of chunks, i.e. the number of sub-requests needed to sum-read all diff --git a/adsApp/src/err.h b/adsApp/src/err.h index e5c7871..25b740a 100644 --- a/adsApp/src/err.h +++ b/adsApp/src/err.h @@ -32,10 +32,10 @@ LOG_MSG_ASYN(asyn_user, ASYN_TRACE_ERROR, "ERROR", format, ##__VA_ARGS__) #define LOG_WARN_ASYN(asyn_user, format, ...) \ - LOG_MSG_ASYN(asyn_user, ASYN_TRACE_WARNING, "WARNING", format, ##__VA_ARGS__) + //LOG_MSG_ASYN(asyn_user, ASYN_TRACE_WARNING, "WARNING", format, ##__VA_ARGS__) #define LOG_TRACE_ASYN(asyn_user, format, ...) \ - LOG_MSG_ASYN(asyn_user, ASYN_TRACE_FLOW, "TRACE", format, ##__VA_ARGS__) + //LOG_MSG_ASYN(asyn_user, ASYN_TRACE_FLOW, "TRACE", format, ##__VA_ARGS__) /* Error logging macros for use when asyn_user is not available */ #define LOG_MSG(log_level_str, format, ...) \ @@ -45,10 +45,10 @@ LOG_MSG("ERROR", format, ##__VA_ARGS__) #define LOG_WARN(format, ...) \ - LOG_MSG("WARNING", format, ##__VA_ARGS__) + //LOG_MSG("WARNING", format, ##__VA_ARGS__) #define LOG_TRACE(format, ...) \ - LOG_MSG("TRACE", format, ##__VA_ARGS__) + //LOG_MSG("TRACE", format, ##__VA_ARGS__) /* EPICS ADS specific return codes */ #define EPICSADS_BASE 1000