diff --git a/examples/iec61850_client_example_reporting/client_example_reporting.c b/examples/iec61850_client_example_reporting/client_example_reporting.c index 13423668..f070248a 100644 --- a/examples/iec61850_client_example_reporting/client_example_reporting.c +++ b/examples/iec61850_client_example_reporting/client_example_reporting.c @@ -1,7 +1,7 @@ /* * client_example_reporting.c * - * This example is intended to be used with server_example3 or server_example_goose. + * This example is intended to be used with server_example_basic_io or server_example_goose. */ #include "iec61850_client.h" @@ -40,8 +40,7 @@ reportCallbackFunction(void* parameter, ClientReport report) ctime_r(&unixTime, timeBuf); #endif - printf(" report contains timestamp (%u):", (unsigned int) unixTime); - printf("%s \n", timeBuf); + printf(" report contains timestamp (%u): %s", (unsigned int) unixTime, timeBuf); } int i; @@ -85,9 +84,12 @@ main(int argc, char** argv) if (error == IED_ERROR_OK) { + ClientReportControlBlock rcb = NULL; + ClientDataSet clientDataSet = NULL; + LinkedList dataSetDirectory = NULL; + /* read data set directory */ - LinkedList dataSetDirectory = - IedConnection_getDataSetDirectory(con, &error, "simpleIOGenericIO/LLN0.Events", NULL); + dataSetDirectory = IedConnection_getDataSetDirectory(con, &error, "simpleIOGenericIO/LLN0.Events", NULL); if (error != IED_ERROR_OK) { printf("Reading data set directory failed!\n"); @@ -95,8 +97,6 @@ main(int argc, char** argv) } /* read data set */ - ClientDataSet clientDataSet; - clientDataSet = IedConnection_readDataSetValues(con, &error, "simpleIOGenericIO/LLN0.Events", NULL); if (clientDataSet == NULL) { @@ -105,8 +105,7 @@ main(int argc, char** argv) } /* Read RCB values */ - ClientReportControlBlock rcb = - IedConnection_getRCBValues(con, &error, "simpleIOGenericIO/LLN0.RP.EventsRCB01", NULL); + rcb = IedConnection_getRCBValues(con, &error, "simpleIOGenericIO/LLN0.RP.EventsRCB01", NULL); if (error != IED_ERROR_OK) { printf("getRCBValues service error!\n"); @@ -115,6 +114,7 @@ main(int argc, char** argv) /* prepare the parameters of the RCP */ ClientReportControlBlock_setResv(rcb, true); + ClientReportControlBlock_setTrgOps(rcb, TRG_OPT_DATA_CHANGED | TRG_OPT_QUALITY_CHANGED | TRG_OPT_GI); ClientReportControlBlock_setDataSetReference(rcb, "simpleIOGenericIO/LLN0$Events"); /* NOTE the "$" instead of "." ! */ ClientReportControlBlock_setRptEna(rcb, true); ClientReportControlBlock_setGI(rcb, true); @@ -124,7 +124,7 @@ main(int argc, char** argv) (void*) dataSetDirectory); /* Write RCB parameters and enable report */ - IedConnection_setRCBValues(con, &error, rcb, RCB_ELEMENT_RESV | RCB_ELEMENT_DATSET | RCB_ELEMENT_RPT_ENA | RCB_ELEMENT_GI, true); + IedConnection_setRCBValues(con, &error, rcb, RCB_ELEMENT_RESV | RCB_ELEMENT_DATSET | RCB_ELEMENT_TRG_OPS | RCB_ELEMENT_RPT_ENA | RCB_ELEMENT_GI, true); if (error != IED_ERROR_OK) { printf("setRCBValues service error!\n"); @@ -156,12 +156,18 @@ main(int argc, char** argv) ClientReportControlBlock_setRptEna(rcb, false); IedConnection_setRCBValues(con, &error, rcb, RCB_ELEMENT_RPT_ENA, true); - exit_error: +exit_error: IedConnection_close(con); - ClientDataSet_destroy(clientDataSet); - ClientReportControlBlock_destroy(rcb); + if (clientDataSet) + ClientDataSet_destroy(clientDataSet); + + if (rcb) + ClientReportControlBlock_destroy(rcb); + + if (dataSetDirectory) + LinkedList_destroy(dataSetDirectory); } else { printf("Failed to connect to %s:%i\n", hostname, tcpPort);