- added bufOvfl support for buffered reports

pull/6/head
Michael Zillgith 11 years ago
parent b5e319b904
commit f53b254097

@ -8,7 +8,7 @@
#include "iec61850_server.h"
#include "iso_server.h"
#include "acse.h"
#include "thread.h"
#include "hal_thread.h"
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>

@ -4,7 +4,7 @@
* automatically generated from beagle_demo.icd
*/
#include <stdlib.h>
#include "model.h"
#include "iec61850_model.h"
extern IedModel iedModel;
static void initializeValues();
@ -150,13 +150,16 @@ extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_q;
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_t;
static DataSetEntry ds_GenericIO_LLN0_Events_fcda0;
static DataSetEntry ds_GenericIO_LLN0_Events_fcda1;
static DataSetEntry ds_GenericIO_LLN0_Events_fcda2;
static DataSetEntry ds_GenericIO_LLN0_Events_fcda3;
extern DataSet ds_GenericIO_LLN0_Events;
static DataSetEntry ds_GenericIO_LLN0_Events_fcda0 = {
"beagleGenericIO",
extern DataSetEntry ds_GenericIO_LLN0_Events_fcda0;
extern DataSetEntry ds_GenericIO_LLN0_Events_fcda1;
extern DataSetEntry ds_GenericIO_LLN0_Events_fcda2;
extern DataSetEntry ds_GenericIO_LLN0_Events_fcda3;
DataSetEntry ds_GenericIO_LLN0_Events_fcda0 = {
"GenericIO",
"GGIO1$ST$SPCSO1$stVal",
-1,
NULL,
@ -164,8 +167,8 @@ static DataSetEntry ds_GenericIO_LLN0_Events_fcda0 = {
&ds_GenericIO_LLN0_Events_fcda1
};
static DataSetEntry ds_GenericIO_LLN0_Events_fcda1 = {
"beagleGenericIO",
DataSetEntry ds_GenericIO_LLN0_Events_fcda1 = {
"GenericIO",
"GGIO1$ST$SPCSO2$stVal",
-1,
NULL,
@ -173,8 +176,8 @@ static DataSetEntry ds_GenericIO_LLN0_Events_fcda1 = {
&ds_GenericIO_LLN0_Events_fcda2
};
static DataSetEntry ds_GenericIO_LLN0_Events_fcda2 = {
"beagleGenericIO",
DataSetEntry ds_GenericIO_LLN0_Events_fcda2 = {
"GenericIO",
"GGIO1$ST$SPCSO3$stVal",
-1,
NULL,
@ -182,8 +185,8 @@ static DataSetEntry ds_GenericIO_LLN0_Events_fcda2 = {
&ds_GenericIO_LLN0_Events_fcda3
};
static DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = {
"beagleGenericIO",
DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = {
"GenericIO",
"GGIO1$ST$DPCSO1$stVal",
-1,
NULL,
@ -191,16 +194,17 @@ static DataSetEntry ds_GenericIO_LLN0_Events_fcda3 = {
NULL
};
static DataSet ds_GenericIO_LLN0_Events = {
"beagleGenericIO",
DataSet ds_GenericIO_LLN0_Events = {
"GenericIO",
"LLN0$Events",
4,
&ds_GenericIO_LLN0_Events_fcda0
&ds_GenericIO_LLN0_Events_fcda0,
NULL
};
LogicalDevice iedModel_GenericIO = {
LogicalDeviceModelType,
"beagleGenericIO",
"GenericIO",
(ModelNode*) &iedModel,
NULL,
(ModelNode*) &iedModel_GenericIO_LLN0
@ -1919,21 +1923,11 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = {
NULL,
0};
extern ReportControlBlock iedModel_GenericIO_LLN0_report0;
extern ReportControlBlock iedModel_GenericIO_LLN0_report1;
static ReportControlBlock iedModel_GenericIO_LLN0_report0;
static ReportControlBlock iedModel_GenericIO_LLN0_report1;
static ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB", "Events1", false, "Events", 1, 16, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1};
static ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsRCB2", "Events2", false, "Events", 1, 16, 111, 50, 1000, NULL};
ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1};
ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsRCB201", "Events2", false, "Events", 1, 8, 111, 50, 1000, NULL};
@ -1944,6 +1938,7 @@ IedModel iedModel = {
&ds_GenericIO_LLN0_Events,
&iedModel_GenericIO_LLN0_report0,
NULL,
NULL,
initializeValues
};

@ -8,7 +8,7 @@
#define STATIC_MODEL_H_
#include <stdlib.h>
#include "model.h"
#include "iec61850_model.h"
extern IedModel iedModel;
extern LogicalDevice iedModel_GenericIO;

@ -53,6 +53,17 @@
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO4" />
</DataSet>
<DataSet name="Measurements" desc="Events2">
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="MX" lnInst="1" doName="AnIn1" daName="mag.f" />
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="MX" lnInst="1" doName="AnIn1" daName="q" />
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="MX" lnInst="1" doName="AnIn2" daName="mag.f" />
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="MX" lnInst="1" doName="AnIn2" daName="q" />
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="MX" lnInst="1" doName="AnIn3" daName="mag.f" />
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="MX" lnInst="1" doName="AnIn3" daName="q" />
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="MX" lnInst="1" doName="AnIn4" daName="mag.f" />
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="MX" lnInst="1" doName="AnIn4" daName="q" />
</DataSet>
<ReportControl name="EventsRCB" confRev="1" datSet="Events" rptID="Events1" buffered="false" intgPd="1000" bufTime="50">
<TrgOps period="true" />
<OptFields seqNum="true" timeStamp="true" dataSet="true" reasonCode="true" entryID="true" configRef="true" />
@ -65,6 +76,12 @@
<RptEnabled max="3" />
</ReportControl>
<ReportControl name="Measurements" indexed="true" confRev="1" datSet="Measurements" rptID="Measurements" buffered="true" intgPd="1000" bufTime="50">
<TrgOps period="false" />
<OptFields seqNum="true" timeStamp="true" dataSet="true" reasonCode="true" entryID="true" configRef="true" />
<RptEnabled max="3" />
</ReportControl>
<LogControl name="EventLog" datSet="Events" logName="EventLog">
<TrgOps dchg="true" qchg="true"/>
</LogControl>

@ -152,6 +152,7 @@ extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_t;
extern DataSet ds_GenericIO_LLN0_Events;
extern DataSet ds_GenericIO_LLN0_Events2;
extern DataSet ds_GenericIO_LLN0_Measurements;
extern DataSetEntry ds_GenericIO_LLN0_Events_fcda0;
@ -249,6 +250,95 @@ DataSet ds_GenericIO_LLN0_Events2 = {
"LLN0$Events2",
4,
&ds_GenericIO_LLN0_Events2_fcda0,
&ds_GenericIO_LLN0_Measurements
};
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda0;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda1;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda2;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda3;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda4;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda5;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda6;
extern DataSetEntry ds_GenericIO_LLN0_Measurements_fcda7;
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda0 = {
"GenericIO",
"GGIO1$MX$AnIn1$mag$f",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda1
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda1 = {
"GenericIO",
"GGIO1$MX$AnIn1$q",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda2
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda2 = {
"GenericIO",
"GGIO1$MX$AnIn2$mag$f",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda3
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda3 = {
"GenericIO",
"GGIO1$MX$AnIn2$q",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda4
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda4 = {
"GenericIO",
"GGIO1$MX$AnIn3$mag$f",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda5
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda5 = {
"GenericIO",
"GGIO1$MX$AnIn3$q",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda6
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda6 = {
"GenericIO",
"GGIO1$MX$AnIn4$mag$f",
-1,
NULL,
NULL,
&ds_GenericIO_LLN0_Measurements_fcda7
};
DataSetEntry ds_GenericIO_LLN0_Measurements_fcda7 = {
"GenericIO",
"GGIO1$MX$AnIn4$q",
-1,
NULL,
NULL,
NULL
};
DataSet ds_GenericIO_LLN0_Measurements = {
"GenericIO",
"LLN0$Measurements",
8,
&ds_GenericIO_LLN0_Measurements_fcda0,
NULL
};
@ -1977,11 +2067,17 @@ extern ReportControlBlock iedModel_GenericIO_LLN0_report0;
extern ReportControlBlock iedModel_GenericIO_LLN0_report1;
extern ReportControlBlock iedModel_GenericIO_LLN0_report2;
extern ReportControlBlock iedModel_GenericIO_LLN0_report3;
extern ReportControlBlock iedModel_GenericIO_LLN0_report4;
extern ReportControlBlock iedModel_GenericIO_LLN0_report5;
extern ReportControlBlock iedModel_GenericIO_LLN0_report6;
ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1};
ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report2};
ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report3};
ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 8, 111, 50, 1000, NULL};
ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 8, 111, 50, 1000, &iedModel_GenericIO_LLN0_report4};
ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0, "Measurements01", "Measurements", true, "Measurements", 1, 0, 111, 50, 1000, &iedModel_GenericIO_LLN0_report5};
ReportControlBlock iedModel_GenericIO_LLN0_report5 = {&iedModel_GenericIO_LLN0, "Measurements02", "Measurements", true, "Measurements", 1, 0, 111, 50, 1000, &iedModel_GenericIO_LLN0_report6};
ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, "Measurements03", "Measurements", true, "Measurements", 1, 0, 111, 50, 1000, NULL};

@ -40,6 +40,7 @@ typedef struct {
ReportBufferEntry* oldestReport;
ReportBufferEntry* lastEnqueuedReport;
ReportBufferEntry* nextToTransmit;
bool isOverflow; /* true if overflow condition is active */
} ReportBuffer;
typedef struct {

@ -53,6 +53,7 @@ ReportBuffer_create(void)
self->memoryBlockSize = CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE;
self->memoryBlock = (uint8_t*) GLOBAL_MALLOC(self->memoryBlockSize);
self->reportsCount = 0;
self->isOverflow = false;
return self;
}
@ -1336,7 +1337,7 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme
goto exit_function;
}
else if (strcmp(elementName, "ConfRev") == 0) {
else if ((strcmp(elementName, "ConfRev") == 0) || (strcmp(elementName, "SqNum") == 0)) {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
goto exit_function;
}
@ -1587,6 +1588,8 @@ enqueueReport(ReportControl* reportControl, bool isIntegrity, bool isGI)
printf("\n");
#endif
buffer->isOverflow = true;
buffer->oldestReport = buffer->oldestReport->next;
buffer->reportsCount--;
@ -1877,7 +1880,10 @@ sendNextReportEntry(ReportControl* self)
bufOvfl->deleteValue = 0;
bufOvfl->type = MMS_BOOLEAN;
bufOvfl->value.boolean = false;
bufOvfl->value.boolean = self->reportBuffer->isOverflow;
if (self->reportBuffer->isOverflow)
self->reportBuffer->isOverflow = false;
if (MemAllocLinkedList_add(reportElements, bufOvfl) == NULL)
goto return_out_of_memory;

@ -230,7 +230,7 @@ MmsServerConnection_sendInformationReportVMDSpecific(MmsServerConnection* self,
accessResultSize += mmsServer_encodeAccessResult(data, NULL, 0, false);
value = LinkedList_getNext(value);
value = LinkedList_getNext(value);
}
listOfAccessResultSize = accessResultSize +

Loading…
Cancel
Save