libiec61850/examples/iec61850_sv_client_example/sv_client_example.c
2015-11-13 17:48:19 +01:00

119 lines
3.1 KiB
C

/*
* sv_client_example.c
*
* This example is intended to show how SV control blocks are accessed
*/
#include "iec61850_client.h"
#include <stdlib.h>
#include <stdio.h>
#include "hal_thread.h"
static void
printDstAddr(DstAddress dstAddress)
{
printf(" addr: ");
int i;
for (i = 0; i < 6; i++)
printf("%02x", dstAddress.addr[i]);
printf("\n prio: %u\n", dstAddress.priority);
printf(" vid: %u\n", dstAddress.vid);
printf(" appID: %u\n", dstAddress.appId);
}
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) {
char* svcbRef = "simpleIOGenericIO/LLN0.Volt";
ClientSVControlBlock svcb = ClientSVControlBlock_create(con, svcbRef);
if (svcb != NULL) {
if (ClientSVControlBlock_isMulticast(svcb))
printf("SVCB is multicast\n");
else
printf("SVCB is unicast\n");
if (ClientSVControlBlock_setSvEna(svcb, true))
printf("SVCB enabled\n");
else
printf("Failed to enable SVCB\n");
printf("SvEna state: %i\n", ClientSVControlBlock_getSvEna(svcb));
char* msvID = ClientSVControlBlock_getMsvID(svcb);
if (msvID != NULL) {
printf("MsvID: %s\n", msvID);
free(msvID);
}
char* datSetName = ClientSVControlBlock_getDatSet(svcb);
if (datSetName != NULL) {
printf("DatSet: %s\n", datSetName);
free(datSetName);
}
printf("ConfRev: %i\n", ClientSVControlBlock_getConfRev(svcb));
printf("SmpRate: %i\n", ClientSVControlBlock_getSmpRate(svcb));
printf("SmpMod: %i\n", ClientSVControlBlock_getSmpMod(svcb));
int optFlds = ClientSVControlBlock_getOptFlds(svcb);
printf("OptFlds: ");
if (optFlds & IEC61850_SV_OPT_REFRESH_TIME)
printf("refresh-time ");
if (optFlds & IEC61850_SV_OPT_SAMPLE_SYNC)
printf("sample-synch ");
if (optFlds & IEC61850_SV_OPT_SAMPLE_RATE)
printf("sample-rate ");
if (optFlds & IEC61850_SV_OPT_DATA_SET)
printf("date-set ");
if (optFlds & IEC61850_SV_OPT_SECURITY)
printf("security ");
printf("\n");
printf("noASDU: %i\n", ClientSVControlBlock_getNoASDU(svcb));
DstAddress dstAddress = ClientSVControlBlock_getDstAddress(svcb);
printDstAddr(dstAddress);
}
else {
printf("SVCB %s does not exist on server!\n", svcbRef);
}
IedConnection_close(con);
}
else {
printf("Failed to connect to %s:%i\n", hostname, tcpPort);
}
IedConnection_destroy(con);
}