consider noise error

This commit is contained in:
Wolfgang Hottgenroth 2020-11-25 13:33:46 +01:00
parent 1357b17bb8
commit f5f8aa0660
Signed by: wn
GPG Key ID: 6C1E5E531E0D5D7F
4 changed files with 14 additions and 8 deletions

View File

@ -33,6 +33,7 @@ typedef struct {
uint32_t uartOverrunCnt; uint32_t uartOverrunCnt;
uint32_t uartFramingErrCnt; uint32_t uartFramingErrCnt;
uint32_t uartParityErrCnt; uint32_t uartParityErrCnt;
uint32_t uartNoiseErrCnt;
} t_mbusCommStats; } t_mbusCommStats;
// e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice); // e_mbusCommRequestResult mbusCommRequest(t_mbusDevice *mbusDevice);

View File

@ -44,7 +44,7 @@ typedef struct {
// clear statistics // clear statistics
bool clearCmd(uint8_t argc, char **args) { bool clearCmd(uint8_t argc, char **args) {
t_mbusCommStats zeroedStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 }; t_mbusCommStats zeroedStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0, .uartNoiseErrCnt = 0 };
mbusCommSetStats(zeroedStats); mbusCommSetStats(zeroedStats);
coloredMsg(LOG_YELLOW, true, "ch cc global statistics cleared"); coloredMsg(LOG_YELLOW, true, "ch cc global statistics cleared");
return true; return true;
@ -60,9 +60,10 @@ bool globalStatsCmd(uint8_t argc, char **args) {
" UART Octets: %ld\n\r" \ " UART Octets: %ld\n\r" \
" UART Overruns: %ld\n\r" \ " UART Overruns: %ld\n\r" \
" UART Framing Errs: %ld\n\r" \ " UART Framing Errs: %ld\n\r" \
" UART Parity Errs: %ld\n\r", " UART Parity Errs: %ld\n\r" \
" UART Noise Errs: %ld\n\r",
stats->mbusRequestCnt, stats->mbusErrorCnt, stats->mbusRequestCnt, stats->mbusErrorCnt,
stats->uartOctetCnt, stats->uartOverrunCnt, stats->uartFramingErrCnt, stats->uartParityErrCnt stats->uartOctetCnt, stats->uartOverrunCnt, stats->uartFramingErrCnt, stats->uartParityErrCnt, stats->uartNoiseErrCnt
); );
send(CMD_SOCK, (uint8_t*)buf, strlen(buf)); send(CMD_SOCK, (uint8_t*)buf, strlen(buf));
return true; return true;

View File

@ -105,7 +105,7 @@ typedef struct {
static t_mbusCommHandle mbusCommHandle = { .requestId = 0, .state = MBCS_IDLE, .retryCnt = 0, .cmd = 0, .addr = 0, .startTime = 0, .receiveCnt = 0, .waitForOctet = false }; static t_mbusCommHandle mbusCommHandle = { .requestId = 0, .state = MBCS_IDLE, .retryCnt = 0, .cmd = 0, .addr = 0, .startTime = 0, .receiveCnt = 0, .waitForOctet = false };
static t_mbusCommStats mbusCommStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0 }; static t_mbusCommStats mbusCommStats = { .mbusRequestCnt = 0, .mbusErrorCnt = 0, .uartOctetCnt = 0, .uartOverrunCnt = 0, .uartFramingErrCnt = 0, .uartParityErrCnt = 0, .uartNoiseErrCnt = 0 };
static bool mbusCommEnabled = true; static bool mbusCommEnabled = true;
@ -265,7 +265,7 @@ void mbusCommISR() {
// RXNEIE doesn't need to be considered since it is always on and more over the // RXNEIE doesn't need to be considered since it is always on and more over the
// RXNE flag is cleared by reading the DR, which is done in any case // RXNE flag is cleared by reading the DR, which is done in any case
if (((isrflags & USART_SR_RXNE) != RESET) || ((isrflags & (USART_SR_ORE | USART_SR_FE | USART_SR_PE)) != RESET)) { if (((isrflags & USART_SR_RXNE) != RESET) || ((isrflags & (USART_SR_ORE | USART_SR_FE | USART_SR_PE | USART_SR_NE)) != RESET)) {
// Error flags are only valid together with the RX flag. // Error flags are only valid together with the RX flag.
// They will be cleared by reading SR (already done above) followed by reading DR (below). // They will be cleared by reading SR (already done above) followed by reading DR (below).
bool errorFound = false; bool errorFound = false;
@ -282,6 +282,10 @@ void mbusCommISR() {
mbusCommStats.uartParityErrCnt += 1; mbusCommStats.uartParityErrCnt += 1;
errorFound = true; errorFound = true;
} }
if ((isrflags & USART_SR_NE) != RESET) {
mbusCommStats.uartNoiseErrCnt += 1;
errorFound = true;
}
mbusCommStats.uartOctetCnt += 1; mbusCommStats.uartOctetCnt += 1;
// it is required to read the DR in any case here, not only when the buffer has space // it is required to read the DR in any case here, not only when the buffer has space
// otherwise the interrupt flag won't be disabled, particularly important in case of // otherwise the interrupt flag won't be disabled, particularly important in case of

View File

@ -58,9 +58,9 @@ static void mqttStatusPublisher(void *handle) {
char buf[256]; char buf[256];
uint32_t uptime = HAL_GetTick() / 1000; uint32_t uptime = HAL_GetTick() / 1000;
snprintf(buf, sizeof(buf), "{\"uptime\":\"%ld\", \"runningHours\":\"%ld\", \"powerCycles\":\"%ld\", \"tasks\":\"%d\", \"requests\":\"%ld\", \"errors\":\"%ld\", \"octets\":\"%ld\", \"overrun\":\"%ld\", \"framing\":\"%ld\", \"parity\":\"%ld\"}", snprintf(buf, sizeof(buf), "{\"uptime\":\"%ld\", \"runningHours\":\"%ld\", \"powerCycles\":\"%ld\", \"tasks\":\"%d\", \"requests\":\"%ld\", \"errors\":\"%ld\", \"octets\":\"%ld\", \"overrun\":\"%ld\", \"framing\":\"%ld\", \"parity\":\"%ld\", \"noise\":\"%ld\"}",
uptime, globalDeviceStats->totalRunningHours, globalDeviceStats->totalPowercycles, schTaskCnt(), mbusCommStats->mbusRequestCnt, mbusCommStats->mbusErrorCnt, uptime, globalDeviceStats->totalRunningHours, globalDeviceStats->totalPowercycles, schTaskCnt(), mbusCommStats->mbusRequestCnt, mbusCommStats->mbusErrorCnt,
mbusCommStats->uartOctetCnt, mbusCommStats->uartOverrunCnt, mbusCommStats->uartFramingErrCnt, mbusCommStats->uartParityErrCnt); mbusCommStats->uartOctetCnt, mbusCommStats->uartOverrunCnt, mbusCommStats->uartFramingErrCnt, mbusCommStats->uartParityErrCnt, mbusCommStats->uartNoiseErrCnt);
bool res = publish(&mqttClient, StatusTopic, (const uint8_t*)buf, strlen(buf), false); bool res = publish(&mqttClient, StatusTopic, (const uint8_t*)buf, strlen(buf), false);
coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res); coloredMsg(LOG_GREEN, false, "mqch, publish returned %d", res);
@ -73,7 +73,7 @@ static void mqttStatusPublisher(void *handle) {
oledPrintf(OLED_SCREEN1, "PowerCycl:%d", globalDeviceStats->totalPowercycles); oledPrintf(OLED_SCREEN1, "PowerCycl:%d", globalDeviceStats->totalPowercycles);
oledPrintf(OLED_SCREEN1, "Req:%ld", mbusCommStats->mbusRequestCnt); oledPrintf(OLED_SCREEN1, "Req:%ld", mbusCommStats->mbusRequestCnt);
oledPrintf(OLED_SCREEN1, "Err:%ld", mbusCommStats->mbusErrorCnt); oledPrintf(OLED_SCREEN1, "Err:%ld", mbusCommStats->mbusErrorCnt);
oledPrintf(OLED_SCREEN1, "Uart:%d", mbusCommStats->uartOverrunCnt + mbusCommStats->uartFramingErrCnt + mbusCommStats->uartParityErrCnt); oledPrintf(OLED_SCREEN1, "Uart:%d", mbusCommStats->uartOverrunCnt + mbusCommStats->uartFramingErrCnt + mbusCommStats->uartParityErrCnt + mbusCommStats->uartNoiseErrCnt);
} }
void mqttCommHandler(void *handle) { void mqttCommHandler(void *handle) {