From 48ae311a05088f82d5f9a1c731acf2ea64dcfb50 Mon Sep 17 00:00:00 2001 From: Kevin Jhang Date: Wed, 3 Nov 2021 16:01:13 +0800 Subject: [PATCH] - Updated goose publish period --- .gitignore | 3 +++ src/iec61850/server/mms_mapping/mms_goose.c | 29 ++++++++------------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/.gitignore b/.gitignore index 1c0ee26d..435ce59b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ build/ Debug/ +bin/ +obj/ third_party/winpcap/ + diff --git a/src/iec61850/server/mms_mapping/mms_goose.c b/src/iec61850/server/mms_mapping/mms_goose.c index a5352b00..22d9d2df 100644 --- a/src/iec61850/server/mms_mapping/mms_goose.c +++ b/src/iec61850/server/mms_mapping/mms_goose.c @@ -43,6 +43,7 @@ #if defined(_MSC_VER) && _MSC_VER < 1900 #define snprintf(buf,len, format,...) _snprintf_s(buf, len,len, format, __VA_ARGS__) #endif +#include struct sMmsGooseControlBlock { char* name; @@ -600,23 +601,24 @@ MmsGooseControlBlock_checkAndPublish(MmsGooseControlBlock self, uint64_t current GoosePublisher_publish(self->publisher, self->dataSetValues); - if (self->retransmissionsLeft > 0) { - self->nextPublishTime = currentTime + self->minTime; + int period; + if (self->retransmissionsLeft > 0) { + period = self->minTime * pow(2, CONFIG_GOOSE_EVENT_RETRANSMISSION_COUNT - self->retransmissionsLeft); if (self->retransmissionsLeft > 1) - GoosePublisher_setTimeAllowedToLive(self->publisher, self->minTime * 3); + GoosePublisher_setTimeAllowedToLive(self->publisher, period * 2 * 2); else - GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3); + GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 2); self->retransmissionsLeft--; } else { - GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3); - - self->nextPublishTime = currentTime + self->maxTime; + period = self->maxTime; } + self->nextPublishTime = currentTime + period; + #if (CONFIG_MMS_THREADLESS_STACK != 1) Semaphore_post(self->publisherMutex); #endif @@ -652,18 +654,9 @@ MmsGooseControlBlock_publishNewState(MmsGooseControlBlock self) self->retransmissionsLeft = CONFIG_GOOSE_EVENT_RETRANSMISSION_COUNT; - if (self->retransmissionsLeft > 0) { - self->nextPublishTime = currentTime + self->minTime; - - GoosePublisher_setTimeAllowedToLive(self->publisher, self->minTime * 3); - } - else { - self->nextPublishTime = currentTime + self->maxTime; - - GoosePublisher_setTimeAllowedToLive(self->publisher, self->maxTime * 3); - } + GoosePublisher_setTimeAllowedToLive(self->publisher, self->minTime * 2); - GoosePublisher_publish(self->publisher, self->dataSetValues); + self->nextPublishTime = currentTime; self->stateChangePending = false;