- extended 9-2LE example
parent
3081fcd935
commit
43d99ad438
@ -0,0 +1,152 @@
|
||||
/*
|
||||
* iec61850_9_2_LE_example.c
|
||||
*
|
||||
* Copyright 2016 Michael Zillgith
|
||||
*
|
||||
* This file is part of libIEC61850.
|
||||
*
|
||||
* libIEC61850 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* libIEC61850 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with libIEC61850. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* See COPYING file for the complete license text.
|
||||
*/
|
||||
|
||||
#include "iec61850_server.h"
|
||||
#include "sv_publisher.h"
|
||||
#include "hal_thread.h"
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
/* Include the generated header with the model access handles */
|
||||
#include "static_model.h"
|
||||
|
||||
/* import IEC 61850 device model created from SCL-File */
|
||||
extern IedModel iedModel;
|
||||
|
||||
static int running = 0;
|
||||
|
||||
void sigint_handler(int signalId)
|
||||
{
|
||||
running = 0;
|
||||
}
|
||||
|
||||
static int amp1;
|
||||
static int amp2;
|
||||
static int amp3;
|
||||
static int amp4;
|
||||
|
||||
static int vol1;
|
||||
static int vol2;
|
||||
static int vol3;
|
||||
static int vol4;
|
||||
|
||||
static SampledValuesPublisher svPublisher;
|
||||
static SV_ASDU asdu;
|
||||
|
||||
static void
|
||||
setupSVPublisher()
|
||||
{
|
||||
svPublisher = SampledValuesPublisher_create("eth1");
|
||||
|
||||
asdu = SampledValuesPublisher_addASDU(svPublisher, "xxxxMUnn01", NULL, 1);
|
||||
|
||||
amp1 = SV_ASDU_addINT32(asdu);
|
||||
amp2 = SV_ASDU_addINT32(asdu);
|
||||
amp3 = SV_ASDU_addINT32(asdu);
|
||||
amp4 = SV_ASDU_addINT32(asdu);
|
||||
|
||||
vol1 = SV_ASDU_addINT32(asdu);
|
||||
vol2 = SV_ASDU_addINT32(asdu);
|
||||
vol3 = SV_ASDU_addINT32(asdu);
|
||||
vol4 = SV_ASDU_addINT32(asdu);
|
||||
|
||||
SampledValuesPublisher_setupComplete(svPublisher);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
IedServer iedServer = IedServer_create(&iedModel);
|
||||
|
||||
// TODO set initial measurement and status values from process
|
||||
|
||||
/* MMS server will be instructed to start listening to client connections. */
|
||||
IedServer_start(iedServer, 102);
|
||||
|
||||
if (!IedServer_isRunning(iedServer)) {
|
||||
printf("Starting server failed! Exit.\n");
|
||||
IedServer_destroy(iedServer);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
running = 1;
|
||||
|
||||
signal(SIGINT, sigint_handler);
|
||||
|
||||
setupSVPublisher();
|
||||
|
||||
int voltage = 1;
|
||||
int current = 1;
|
||||
|
||||
while (running) {
|
||||
|
||||
uint64_t timeval = Hal_getTimeInMs();
|
||||
|
||||
IedServer_lockDataModel(iedServer);
|
||||
|
||||
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_MUnn_TCTR1_Amp_instMag_i, current);
|
||||
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_MUnn_TCTR2_Amp_instMag_i, current);
|
||||
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_MUnn_TCTR3_Amp_instMag_i, current);
|
||||
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_MUnn_TCTR3_Amp_instMag_i, current);
|
||||
|
||||
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_MUnn_TVTR1_Vol_instMag_i, voltage);
|
||||
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_MUnn_TVTR2_Vol_instMag_i, voltage);
|
||||
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_MUnn_TVTR3_Vol_instMag_i, voltage);
|
||||
IedServer_updateInt32AttributeValue(iedServer, IEDMODEL_MUnn_TVTR4_Vol_instMag_i, voltage);
|
||||
|
||||
IedServer_unlockDataModel(iedServer);
|
||||
|
||||
if (1) {
|
||||
|
||||
SV_ASDU_setINT32(asdu, amp1, current);
|
||||
SV_ASDU_setINT32(asdu, amp2, current);
|
||||
SV_ASDU_setINT32(asdu, amp3, current);
|
||||
SV_ASDU_setINT32(asdu, amp4, current);
|
||||
|
||||
SV_ASDU_setINT32(asdu, vol1, voltage);
|
||||
SV_ASDU_setINT32(asdu, vol2, voltage);
|
||||
SV_ASDU_setINT32(asdu, vol3, voltage);
|
||||
SV_ASDU_setINT32(asdu, vol4, voltage);
|
||||
|
||||
SV_ASDU_increaseSmpCnt(asdu);
|
||||
|
||||
SampledValuesPublisher_publish(svPublisher);
|
||||
}
|
||||
|
||||
voltage++;
|
||||
current++;
|
||||
|
||||
Thread_sleep(500);
|
||||
}
|
||||
|
||||
/* stop MMS server - close TCP server socket and all client sockets */
|
||||
IedServer_stop(iedServer);
|
||||
|
||||
/* Cleanup - free all resources */
|
||||
SampledValuesPublisher_destroy(svPublisher);
|
||||
IedServer_destroy(iedServer);
|
||||
|
||||
return 0;
|
||||
} /* main() */
|
@ -1,86 +0,0 @@
|
||||
/*
|
||||
* server_example2.c
|
||||
*
|
||||
* Copyright 2013 Michael Zillgith
|
||||
*
|
||||
* This file is part of libIEC61850.
|
||||
*
|
||||
* libIEC61850 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* libIEC61850 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with libIEC61850. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* See COPYING file for the complete license text.
|
||||
*/
|
||||
|
||||
#include "iec61850_server.h"
|
||||
#include "hal_thread.h"
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
/* Include the generated header with the model access handles */
|
||||
#include "static_model.h"
|
||||
|
||||
/* import IEC 61850 device model created from SCL-File */
|
||||
extern IedModel iedModel;
|
||||
|
||||
static int running = 0;
|
||||
|
||||
void sigint_handler(int signalId)
|
||||
{
|
||||
running = 0;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
IedServer iedServer = IedServer_create(&iedModel);
|
||||
|
||||
// TODO get stored values from persistent storage
|
||||
|
||||
// TODO set initial measurement and status values from process
|
||||
|
||||
/* MMS server will be instructed to start listening to client connections. */
|
||||
IedServer_start(iedServer, 102);
|
||||
|
||||
if (!IedServer_isRunning(iedServer)) {
|
||||
printf("Starting server failed! Exit.\n");
|
||||
IedServer_destroy(iedServer);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
running = 1;
|
||||
|
||||
signal(SIGINT, sigint_handler);
|
||||
|
||||
float power = 500.f;
|
||||
|
||||
while (running) {
|
||||
|
||||
uint64_t timeval = Hal_getTimeInMs();
|
||||
|
||||
IedServer_unlockDataModel(iedServer);
|
||||
|
||||
power += 0.1f;
|
||||
|
||||
Thread_sleep(500);
|
||||
}
|
||||
|
||||
/* stop MMS server - close TCP server socket and all client sockets */
|
||||
IedServer_stop(iedServer);
|
||||
|
||||
/* Cleanup - free all resources */
|
||||
IedServer_destroy(iedServer);
|
||||
|
||||
return 0;
|
||||
} /* main() */
|
Loading…
Reference in New Issue