libiec61850/examples/iec61850_client_example4/client_example4.c
2014-12-01 10:34:45 +01:00

92 lines
2.3 KiB
C

/*
* client_example4.c
*
* How to create and delete data sets at a remote server.
*
* This example is intended to be used with server_example3 or server_example_goose.
*/
#include "iec61850_client.h"
#include <stdlib.h>
#include <stdio.h>
#include "thread.h"
static void
printDataSetValues(MmsValue* dataSet)
{
int i;
for (i = 0; i < 4; i++) {
printf(" GGIO1.AnIn%i.mag.f: %f\n", i,
MmsValue_toFloat(MmsValue_getElement(MmsValue_getElement(
MmsValue_getElement(dataSet, i), 0), 0)));
}
}
void
reportCallbackFunction(void* parameter, ClientReport report)
{
MmsValue* dataSetValues = (MmsValue*) parameter;
printf("received report\n");
printDataSetValues(dataSetValues);
}
int main(int argc, char** argv) {
char* hostname;
int tcpPort = 102;
if (argc > 1)
hostname = argv[1];
else
hostname = "localhost";
if (argc > 2)
tcpPort = atoi(argv[2]);
IedClientError error;
IedConnection con = IedConnection_create();
IedConnection_connect(con, &error, hostname, tcpPort);
if (error == IED_ERROR_OK) {
/* Create a new data set at the remote server */
LinkedList newDataSetEntries = LinkedList_create();
LinkedList_add(newDataSetEntries, "simpleIOGenericIO/GGIO1.AnIn1[MX]");
LinkedList_add(newDataSetEntries, "simpleIOGenericIO/GGIO1.AnIn2[MX]");
LinkedList_add(newDataSetEntries, "simpleIOGenericIO/GGIO1.AnIn3[MX]");
LinkedList_add(newDataSetEntries, "simpleIOGenericIO/GGIO1.AnIn4[MX]");
IedConnection_createDataSet(con, &error, "simpleIOGenericIO/LLN0.AnalogueValues", newDataSetEntries);
LinkedList_destroyStatic(newDataSetEntries);
printf("error: %i\n", error);
/* read data set */
ClientDataSet clientDataSet;
clientDataSet = IedConnection_readDataSetValues(con, &error, "simpleIOGenericIO/LLN0.AnalogueValues", NULL);
printDataSetValues(ClientDataSet_getValues(clientDataSet));
Thread_sleep(1000);
IedConnection_deleteDataSet(con, &error, "simpleIOGenericIO/LLN0.AnalogueValues");
IedConnection_close(con);
}
else {
printf("Failed to connect to %s:%i\n", hostname, tcpPort);
}
IedConnection_destroy(con);
}