Compare commits
No commits in common. "master" and "v1.0.0" have entirely different histories.
206 changed files with 7190 additions and 7588 deletions
42
CHANGELOG
42
CHANGELOG
|
@ -1,45 +1,3 @@
|
|||
Changes to version 1.1.0
|
||||
------------------------
|
||||
|
||||
- MMS client/server: added write support for named variable lists
|
||||
- IEC 61850 client/server: added support for SetDataSet service
|
||||
- C# API: client - added support to write data set values
|
||||
- IEC 61850 client: Changed result strings of IedConnection_getDataDirectoryByFC. Removed appended FC string.
|
||||
- MMS client/server: extended BER encoder to support MMS PDU sizes with more than 64k
|
||||
- C# API: server - keep references to internal control handler delegates to avoid garbage collection
|
||||
- IEC 61850 server: added IedModel_getDeviceByInst function
|
||||
- SV subscriber: added subscriber side handling for RefrTm
|
||||
- SV publisher: Changed SampledValuesPublisher_create to support setting of Communication parameters at runtime
|
||||
- socket-win32: updated WSA initialization handling
|
||||
- all: small fixes and code optimizations
|
||||
|
||||
|
||||
Changes to version 1.0.2
|
||||
------------------------
|
||||
- server: added MmsFileAccessHandler for server side monitoring and control of file services
|
||||
- file services: added support to set filestore basepath at runtime
|
||||
- added IedConnection_getFileDirectoryEx to better control receiving file directories
|
||||
- common: added timestamp handling functions Timestamp_create, Timestamp_destroy, Timestamp_setByMmsUtcTime, Timestamp_toMmsValue
|
||||
- .NET API: Added Timestamp class
|
||||
- .NET API: Added missing UpdateAttribute methods to IedServer
|
||||
- common: added support for Currency BasicType
|
||||
- MMS file services: fixed problem with negative frsmId
|
||||
- java scl tools: fixed bug with SDOs in dynamic code generator
|
||||
- java scl tools: fixed parsing bug in OptionFields.java
|
||||
- server: added functions to restrict local IP address IedServer_setLocalIpAddress, IedServer.SetLocalIpAddress
|
||||
- .NET: IedConnection: added internal reference to IsoConnectionParameters object to avoid deletion of internal AcseAuthenticationParameters by garbage collector
|
||||
|
||||
|
||||
Changes to version 1.0.1
|
||||
------------------------
|
||||
- server: fixed problem in COTP src/dst reference handling (returning zero src reference)
|
||||
- client: fixed problem in report handling when RCB contains no rptID
|
||||
- Python: added pyiec61850 tutorial and example thanks to Cédric Boudinet
|
||||
- .NET API: fixed server side bug with connection indication handler
|
||||
- added Lantronix XPORT PRO uclinux make target
|
||||
- .NET API: fixed bug in client readValue functions
|
||||
- .NET API: added MmsValue.GetDataAccessError() method
|
||||
|
||||
Changes to version 1.0.0
|
||||
------------------------
|
||||
- MMS client/server: implemented obtainFile service
|
||||
|
|
|
@ -11,7 +11,7 @@ project(libiec61850)
|
|||
ENABLE_TESTING()
|
||||
|
||||
set(LIB_VERSION_MAJOR "1")
|
||||
set(LIB_VERSION_MINOR "1")
|
||||
set(LIB_VERSION_MINOR "0")
|
||||
set(LIB_VERSION_PATCH "0")
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/third_party/cmake/modules/")
|
||||
|
@ -62,7 +62,7 @@ option(DEBUG_MMS_CLIENT "Enable MMS CLIENT printf debugging" OFF)
|
|||
# DEBUG_IED_CLIENT DEBUG_MMS_SERVER DEBUG_MMS_CLIENT)
|
||||
|
||||
include_directories(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/config
|
||||
${CMAKE_CURRENT_LIST_DIR}/config
|
||||
${CMAKE_CURRENT_LIST_DIR}/src/common/inc
|
||||
${CMAKE_CURRENT_LIST_DIR}/src/goose
|
||||
${CMAKE_CURRENT_LIST_DIR}/src/sampled_values
|
||||
|
@ -79,13 +79,10 @@ set(API_HEADERS
|
|||
src/hal/inc/hal_time.h
|
||||
src/hal/inc/hal_thread.h
|
||||
src/hal/inc/hal_filesystem.h
|
||||
src/hal/inc/platform_endian.h
|
||||
src/common/inc/libiec61850_common_api.h
|
||||
src/common/inc/libiec61850_platform_includes.h
|
||||
src/common/inc/linked_list.h
|
||||
src/common/inc/byte_buffer.h
|
||||
src/common/inc/lib_memory.h
|
||||
src/common/inc/string_utilities.h
|
||||
src/iec61850/inc/iec61850_client.h
|
||||
src/iec61850/inc/iec61850_common.h
|
||||
src/iec61850/inc/iec61850_server.h
|
||||
|
@ -111,7 +108,6 @@ set(API_HEADERS
|
|||
src/sampled_values/sv_subscriber.h
|
||||
src/sampled_values/sv_publisher.h
|
||||
src/logging/logging_api.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/config/stack_config.h
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
|
@ -140,7 +136,7 @@ INCLUDE(InstallRequiredSystemLibraries)
|
|||
|
||||
SET(CPACK_PACKAGE_DESCRIPTION "IEC 61850 MMS/GOOSE client and server library")
|
||||
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "IEC 61850 MMS/GOOSE client and server library")
|
||||
SET(CPACK_PACKAGE_VENDOR "MZ Automation GmbH")
|
||||
SET(CPACK_PACKAGE_VENDOR "The libIEC61850 project")
|
||||
SET(CPACK_PACKAGE_CONTACT "info@libiec61850.com")
|
||||
SET(CPACK_PACKAGE_VERSION_MAJOR "${LIB_VERSION_MAJOR}")
|
||||
SET(CPACK_PACKAGE_VERSION_MINOR "${LIB_VERSION_MINOR}")
|
||||
|
|
|
@ -1,98 +1,93 @@
|
|||
# README libIEC61850
|
||||
README:
|
||||
-------
|
||||
|
||||
This file is part of the documentation of **libIEC61850**. More documentation can be found online at http://libiec61850.com or in the provided doxygen documentation. Also consider to review the examples to understand how to use the library
|
||||
This file is part of the documentation of libiec61850. More documentation can be found online at http://libiec61850.com or in the provided doxygen documentation.
|
||||
|
||||
Content:
|
||||
|
||||
* Overview
|
||||
* Building and running the examples
|
||||
* Installing the library and the API headers
|
||||
* Building on Windows with GOOSE support
|
||||
* Building with the cmake build script
|
||||
* Using the log service with sqlite
|
||||
* C# API
|
||||
* Licensing
|
||||
* Contributing
|
||||
* Third-party contributions
|
||||
- Overview
|
||||
- Building and running the examples
|
||||
- Installing the library and the API headers
|
||||
- Building on Windows with GOOSE support
|
||||
- Building with the cmake build script
|
||||
- C# client API
|
||||
- Licensing
|
||||
- Third-party contributions
|
||||
|
||||
|
||||
## Overview
|
||||
Overview
|
||||
---------
|
||||
|
||||
|
||||
libiec61850 is an open-source (GPLv3) implementation of an IEC 61850 client and server library implementing the protocols MMS, GOOSE and SV. It is implemented in C (according to the C99 standard) to provide maximum portability. It can be used to implement IEC 61850 compliant client and server applications on embedded systems and PCs running Linux, Windows, and MacOS. Included is a set of simple example applications that can be used as a starting point to implement own IEC 61850 compliant devices or to communicate with IEC 61850 devices. The library has been successfully used in many commercial software products and devices.
|
||||
libiec61850 is an open-source (GPLv3) implementation of an IEC 61850 client and server library. It is implemented in C (according to the C99 standard) to provide maximum portability. It can be used to implement IEC 61850 compliant client and server applications on embedded systems and PCs running Linux and Windows. Included is a set of simple example applications that can be used as a starting point to implement own IEC 61850 compliant devices or to communicate with IEC 61850 devices.
|
||||
|
||||
For commercial projects licenses and support is provided by MZ Automation GmbH. Please contact info@mz-automation.de for more details on licensing options.
|
||||
|
||||
## Building and running the examples with the provided makefiles
|
||||
Building and running the examples
|
||||
----------------------------------------
|
||||
|
||||
In the project root directoy type
|
||||
|
||||
```
|
||||
make examples
|
||||
```
|
||||
> make examples
|
||||
|
||||
If the build succeeds you can find a few binary files in the projects root directory. You can also find a binary version of the library ("libiec61850.a") in the "build" directory.
|
||||
|
||||
Run the sample applications in the example folders. E.g.:
|
||||
|
||||
```
|
||||
cd examples/server_example1
|
||||
sudo ./server_example1
|
||||
```
|
||||
> cd examples/server_example1
|
||||
> sudo ./server_example1
|
||||
|
||||
on the Linux command line.
|
||||
|
||||
You can test the server examples by using a generic client or the provided client example applications.
|
||||
|
||||
|
||||
## Installing the library and the API headers
|
||||
Installing the library and the API headers
|
||||
--------------------------------------------
|
||||
|
||||
The make and cmake build scripts provide an install target. This target copies the API header files and the static library to a single directory for the headers (INSTALL_PREFIX/include) and the static library (INSTALL_PREFIX/lib). With this feature it is more easy to integrate libiec61850 in an external application since you only have to add a simple include directory to the build tool of your choice.
|
||||
|
||||
This can be invoked with
|
||||
|
||||
`make install`
|
||||
make install
|
||||
|
||||
The default install directory for the make build script is ".install".
|
||||
|
||||
You can modify this by setting the INSTALL_PREFIX environment variable (e.g.):
|
||||
|
||||
`make INSTALL_PREFIX=/usr/local install`
|
||||
make INSTALL_PREFIX=/usr/local install
|
||||
|
||||
For the cmake build script you have to provide the CMAKE_INSTALL_PREFIX variable
|
||||
|
||||
|
||||
## Building on windows with GOOSE support
|
||||
Building on windows with GOOSE support
|
||||
---------------------------------------
|
||||
|
||||
To build the library and run libiec61850 applications with GOOSE support on Windows (7/8/10) the use of a third-party library (winpcap) is required. This is necessary because current versions of Windows have no working support for raw sockets. You can download winpcap here (http://www.winpcap.org).
|
||||
To build the library and run libiec61850 applications with GOOSE support on Windows (7/8) the use of a third-party library (winpcap) is required. This is necessary because current versions of Windows have no working support for raw sockets. You can download winpcap here (http://www.winpcap.org).
|
||||
|
||||
1. Download and install winpcap. Make sure that the winpcap driver is loaded at boot time (you can choose this option at the last screen of the winpcap installer).
|
||||
2. Reboot the system (you can do this also later, but you need to reboot or load the winpcap driver before running any llibiec61850 applications that use GOOSE).
|
||||
3. Download the winpcap developers pack from here (http://www.winpcap.org/install/bin/WpdPack_4_1_2.zip)
|
||||
4. Unpack the zip file. Copy the folders Lib and Include from the WpdPack directory in the third_party/winpcap directory of libiec61850
|
||||
|
||||
## Building with the cmake build script
|
||||
Building with the cmake build script
|
||||
-------------------------------------
|
||||
|
||||
With the help of the cmake build script it is possible to create platform independet project descriptions and let cmake create specific project or build files for other tools like Make or Visual Studio.
|
||||
|
||||
If you have cmake installed fire up a command line (cmd.exe) and create a new subdirectory in the libiec61850 folder. Change to this subdirectory. Then you can invoke cmake. As an command line argument you have to supply a "generator" that is used by cmake to create the project file for the actual build tool (in our case Visual Studio).
|
||||
If you have cmake installed fire up a command line (cmd.exe) and create a new subdirectory in the libiec61850-0.x folder. Change to this subdirectory. Then you can invoke cmake. As an command line argument you have to supply a "generator" that is used by cmake to create the project file for the actual build tool (in our case Visual Studio).
|
||||
|
||||
`cmake -G "Visual Studio 11" ..`
|
||||
cmake -G "Visual Studio 11" ..
|
||||
|
||||
will instruct cmake to create a "solution" for Visual Studio 2012. To do the same thing for Visual Studio 2010 type
|
||||
|
||||
`cmake -G "Visual Studio 10" ..`
|
||||
cmake -G "Visual Studio 10" ..
|
||||
|
||||
Note: The ".." at the end of the command line tells cmake where to find the main build script file (called CMakeLists.txt). This should point to the folder libiec61850 which is in our case the parent directory (..).
|
||||
|
||||
Depending on the system you don't have to provide a generator to the cmake command.
|
||||
Note: The ".." at the end of the command line tells cmake where to find the main build script file (called CMakeLists.txt). This should point to the folder libiec61850-0.x which is in our case the parent directory (..).
|
||||
|
||||
To select some configuration options you can use ccmake or cmake-gui.
|
||||
|
||||
|
||||
## Using the log service with sqlite
|
||||
|
||||
The library provides support for the IEC 61850 log service. It provides an abstract interface for a logging database. Included is a driver for using sqlite for logging. This driver can be seen as an example on how to use the abstract logging interface.
|
||||
Building the sqlite logging driver
|
||||
-----------------------------------
|
||||
|
||||
You can use the driver by including the src/logging/drivers/sqlite/log_storage_sqlite.c file into your application build.
|
||||
|
||||
|
@ -101,27 +96,25 @@ On Ubuntu Linux (and simpilar Linux distributions) it is enough to install the s
|
|||
On windows the cmake skript will detect the sqlite source code and also creates the example project for logging.
|
||||
|
||||
|
||||
## C# API
|
||||
C# client API
|
||||
--------------
|
||||
|
||||
A C#/.NET wrapper and examples and Visual Studio/MonoDevelop project files can be found in the dotnet folder. The examples and the C# wrapper API can be build and run on .NET or Mono.
|
||||
|
||||
## Experimental Python bindings
|
||||
Experimental Python bindings
|
||||
----------------------------
|
||||
|
||||
The experimental Python binding can be created using SWIG with cmake.
|
||||
|
||||
To enable the bindings you have to select the phyton configuration option with ccmake of cmake-gui.
|
||||
|
||||
## Commercial licenses and support
|
||||
|
||||
Support and commercial license options are provided by MZ Automation GmbH. Please contact info@mz-automation.de for more details.
|
||||
|
||||
## Contributing
|
||||
|
||||
If you want to contribute to the improvement and development of the library please send me comments, feature requests, bug reports, or patches. For more than trivial contributions I require you to sign a Contributor License Agreement. Please contact info@libiec61850.com.
|
||||
Commercial licenses
|
||||
-------------------
|
||||
Commercial licensing and support options are provided by MZ Automation GmbH. Please contact info@mz-automation.de for more details.
|
||||
|
||||
|
||||
## Third-party contributions
|
||||
|
||||
Third-party contributions:
|
||||
--------------------------
|
||||
- The Mac OS X socket and ethernet layer has been kindly contributed by Michael Clausen, HES-SO Valais-Wallis, http://www.hevs.ch
|
||||
|
||||
|
|
@ -24,11 +24,10 @@
|
|||
#define DEBUG_GOOSE_SUBSCRIBER 0
|
||||
#define DEBUG_GOOSE_PUBLISHER 0
|
||||
#define DEBUG_SV_SUBSCRIBER 0
|
||||
#define DEBUG_SV_PUBLISHER 0
|
||||
#define DEBUG_HAL_ETHERNET 0
|
||||
|
||||
/* Maximum MMS PDU SIZE - default is 65000 */
|
||||
#define CONFIG_MMS_MAXIMUM_PDU_SIZE 120000
|
||||
#define CONFIG_MMS_MAXIMUM_PDU_SIZE 65000
|
||||
|
||||
/*
|
||||
* Enable single threaded mode
|
||||
|
@ -37,7 +36,7 @@
|
|||
* 0 ==> server runs in multi-threaded mode (one thread for each connection and
|
||||
* one server background thread )
|
||||
*/
|
||||
#define CONFIG_MMS_SINGLE_THREADED 0
|
||||
#define CONFIG_MMS_SINGLE_THREADED 1
|
||||
|
||||
/*
|
||||
* Optimize stack for threadless operation - don't use semaphores
|
||||
|
@ -224,9 +223,4 @@
|
|||
/* Support user access to raw messages */
|
||||
#define CONFIG_MMS_RAW_MESSAGE_LOGGING 1
|
||||
|
||||
/* Allow to set the virtual filestore basepath for MMS file services at runtime with the
|
||||
* MmsServer_setFilestoreBasepath function
|
||||
*/
|
||||
#define CONFIG_SET_FILESTORE_BASEPATH_AT_RUNTIME 1
|
||||
|
||||
#endif /* STACK_CONFIG_H_ */
|
||||
|
|
|
@ -29,9 +29,6 @@
|
|||
#cmakedefine01 DEBUG_MMS_SERVER
|
||||
#cmakedefine01 DEBUG_GOOSE_SUBSCRIBER
|
||||
#cmakedefine01 DEBUG_GOOSE_PUBLISHER
|
||||
#cmakedefine01 DEBUG_SV_SUBSCRIBER 0
|
||||
#cmakedefine01 DEBUG_SV_PUBLISHER 0
|
||||
#cmakedefine01 DEBUG_HAL_ETHERNET 0
|
||||
|
||||
/* 1 ==> server runs in single threaded mode (one dedicated thread for the server)
|
||||
* 0 ==> server runs in multi threaded mode (one thread for each connection and
|
||||
|
@ -106,14 +103,14 @@
|
|||
#define CONFIG_GOOSE_EVENT_RETRANSMISSION_COUNT 2
|
||||
|
||||
/* Define if GOOSE control block elements are writable (1) or read-only (0) */
|
||||
#define CONFIG_GOOSE_GOID_WRITABLE 0
|
||||
#define CONFIG_GOOSE_DATSET_WRITABLE 0
|
||||
#define CONFIG_GOOSE_CONFREV_WRITABLE 0
|
||||
#define CONFIG_GOOSE_NDSCOM_WRITABLE 0
|
||||
#define CONFIG_GOOSE_DSTADDRESS_WRITABLE 0
|
||||
#define CONFIG_GOOSE_MINTIME_WRITABLE 0
|
||||
#define CONFIG_GOOSE_MAXTIME_WRITABLE 0
|
||||
#define CONFIG_GOOSE_FIXEDOFFS_WRITABLE 0
|
||||
#define CONFIG_GOOSE_GOID_WRITABLE 1
|
||||
#define CONFIG_GOOSE_DATSET_WRITABLE 1
|
||||
#define CONFIG_GOOSE_CONFREV_WRITABLE 1
|
||||
#define CONFIG_GOOSE_NDSCOM_WRITABLE 1
|
||||
#define CONFIG_GOOSE_DSTADDRESS_WRITABLE 1
|
||||
#define CONFIG_GOOSE_MINTIME_WRITABLE 1
|
||||
#define CONFIG_GOOSE_MAXTIME_WRITABLE 1
|
||||
#define CONFIG_GOOSE_FIXEDOFFS_WRITABLE 1
|
||||
|
||||
/* The default value for the priority field of the 802.1Q header (allowed range 0-7) */
|
||||
#define CONFIG_GOOSE_DEFAULT_PRIORITY 4
|
||||
|
@ -136,9 +133,6 @@
|
|||
/* include support for IEC 61850 reporting services */
|
||||
#cmakedefine01 CONFIG_IEC61850_REPORT_SERVICE
|
||||
|
||||
/* support buffered report control blocks with ResvTms field */
|
||||
#define CONFIG_IEC61850_BRCB_WITH_RESVTMS 0
|
||||
|
||||
/* The default buffer size of buffered RCBs in bytes */
|
||||
#cmakedefine CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE @CONFIG_REPORTING_DEFAULT_REPORT_BUFFER_SIZE@
|
||||
|
||||
|
@ -200,21 +194,10 @@
|
|||
#define CONFIG_IEC61850_CONTROL_SERVICE 0
|
||||
#endif
|
||||
|
||||
/* Sort getNameList response according to the MMS specified collation order - this is required by the standard
|
||||
* Set to 0 only for performance reasons and when no certification is required! */
|
||||
#define CONFIG_MMS_SORT_NAME_LIST 1
|
||||
|
||||
#define CONFIG_INCLUDE_PLATFORM_SPECIFIC_HEADERS 0
|
||||
|
||||
/* use short FC defines as in old API */
|
||||
#define CONFIG_PROVIDE_OLD_FC_DEFINES 0
|
||||
|
||||
/* Support user acccess to raw messages */
|
||||
#cmakedefine01 CONFIG_MMS_RAW_MESSAGE_LOGGING
|
||||
|
||||
/* Allow to set the virtual filestore basepath for MMS file services at runtime with the
|
||||
* MmsServer_setFilestoreBasepath function
|
||||
*/
|
||||
#define CONFIG_SET_FILESTORE_BASEPATH_AT_RUNTIME 1
|
||||
|
||||
#endif /* STACK_CONFIG_H_ */
|
||||
|
|
|
@ -2,7 +2,22 @@
|
|||
<SCL xmlns="http://www.iec.ch/61850/2003/SCL" version="2007" revision="B">
|
||||
<Header id="" version="1" revision="" nameStructure="IEDName">
|
||||
</Header>
|
||||
|
||||
<Communication>
|
||||
<SubNetwork name="subnetwork1" type="8-MMS">
|
||||
<Text>Station bus</Text>
|
||||
<BitRate unit="b/s">10</BitRate>
|
||||
<ConnectedAP iedName="beagle" apName="accessPoint1">
|
||||
<Address>
|
||||
<P type="IP">10.0.0.2</P>
|
||||
<P type="IP-SUBNET">255.255.255.0</P>
|
||||
<P type="IP-GATEWAY">10.0.0.1</P>
|
||||
<P type="OSI-TSEL">0001</P>
|
||||
<P type="OSI-PSEL">00000001</P>
|
||||
<P type="OSI-SSEL">0001</P>
|
||||
</Address>
|
||||
</ConnectedAP>
|
||||
</SubNetwork>
|
||||
</Communication>
|
||||
<IED name="beagle">
|
||||
|
||||
<Services>
|
||||
|
@ -72,12 +87,7 @@
|
|||
</DOI>
|
||||
</LN>
|
||||
|
||||
<LN lnClass="GAPC" lnType="TIM_GAPC" inst="1" prefix="TIM_" />
|
||||
|
||||
<LN lnClass="FSCH" lnType="FSCH_60S" inst="1" prefix="T60S_" />
|
||||
<LN lnClass="FSCH" lnType="FSCH_60S" inst="2" prefix="T60S_" />
|
||||
|
||||
<LN lnClass="FSCC" lnType="FSCC" inst="1" prefix="GGIO_" />
|
||||
<LN lnClass="GAPC" lnType="TIM_GAPC" inst="1" prefix="TIM_" />
|
||||
|
||||
</LDevice>
|
||||
</Server>
|
||||
|
@ -130,159 +140,6 @@
|
|||
<DO name="OpCntRs" type="INC_OpCntRs" />
|
||||
</LNodeType>
|
||||
|
||||
<!-- Schedule type for 60s on/off controls -->
|
||||
<LNodeType id="FSCH_60S" lnClass="FSCH">
|
||||
<DO name="Beh" type="ENS_Beh" desc="Enumerated status" />
|
||||
|
||||
<DO name="SchdSt" type="ENS_ScheduleStateKind" desc="schedule state"/>
|
||||
<DO name="SchdEntr" type="INS_0" desc="current schedule entry of the running schedule"/>
|
||||
|
||||
<DO name="ValSPS" type="SPS_0" desc="current value determined by the schedule" />
|
||||
|
||||
<DO name="VldReq" type="SPC_0" desc="validate request"/>
|
||||
<DO name="EnaReq" type="SPC_0" desc="enable request"/>
|
||||
<DO name="EdtReq" type="SPC_0" desc="enable request"/>
|
||||
<DO name="DsaReq" type="SPC_0" desc="disable request"/>
|
||||
|
||||
<DO name="SchdPrio" type="ING" desc="schedule priority"/>
|
||||
<DO name="NumEntr" type="ING" desc="number of valid entries"/>
|
||||
|
||||
<DO name="SchdIntv" type="ING" desc="the schedule interval duration in time entities as specified in the unit"/>
|
||||
|
||||
<DO name="ValSPG1" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG2" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG3" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG4" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG5" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG6" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG7" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG8" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG9" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG10" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG11" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG12" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG13" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG14" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG15" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG16" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG17" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG18" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG19" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG20" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG21" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG22" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG23" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG24" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG25" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG26" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG27" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG28" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG29" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG30" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG31" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG32" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG33" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG34" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG35" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG36" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG37" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG38" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG39" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG40" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG41" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG42" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG43" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG44" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG45" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG46" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG47" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG48" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG49" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG50" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG51" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG52" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG53" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG54" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG55" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG56" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG57" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG58" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG59" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
<DO name="ValSPG60" type="SPG_0" desc="the SPG scheduled values (current value as SPS)"/>
|
||||
|
||||
<DO name="StrTm" type="TSG_0" desc="start time of the schedule in UTC time" />
|
||||
|
||||
<DO name="IntvPer" type="ING" desc="the periodicity interval duration in entities as specified in IntvTyp; if the value is 0, the schedule shall not be repeated periodically"/>
|
||||
<DO name="IntvTyp" type="ENG_ScheduleIntervalKind" desc="interval type (units) to define the periodicity"/>
|
||||
|
||||
<DO name="SchdReuse" type="SPG_0" desc=""/>
|
||||
</LNodeType>
|
||||
|
||||
<LNodeType id="FSCC" lnClass="FSCH">
|
||||
<DO name="Beh" type="ENS_Beh" desc="Enumerated status" />
|
||||
|
||||
<DO name="ActSchdRef" type="ORS_0" desc="object reference of active schedule"/>
|
||||
|
||||
<DO name="CtlEnt" type="ORG_0" desc="object reference to the entity controlled by the schedule"/>
|
||||
|
||||
<DO name="Schd1" type="ORG_0" desc="object reference to schedule 1"/>
|
||||
<DO name="Schd2" type="ORG_0" desc="object reference to schedule 2"/>
|
||||
</LNodeType>
|
||||
|
||||
<DOType cdc="ORG" id="ORG_0">
|
||||
<DA name="setSrcRef" fc="SP" dchg="true" bType="VisString129" />
|
||||
</DOType>
|
||||
|
||||
<DOType cdc="ORS" id="ORS_0">
|
||||
<DA name="stVal" fc="ST" dchg="true" bType="VisString129" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
|
||||
<DOType cdc="ENS" desc="Enumerated status" id="ENS_ScheduleStateKind">
|
||||
<DA bType="Enum" dchg="true" fc="ST" name="stVal" type="ScheduleStateKind" />
|
||||
<DA bType="Quality" fc="ST" name="q" qchg="true" />
|
||||
<DA bType="Timestamp" fc="ST" name="t" />
|
||||
</DOType>
|
||||
|
||||
<DOType cdc="INS" desc="Integer status" id="INS_0">
|
||||
<DA bType="INT32" dchg="true" fc="ST" name="stVal" />
|
||||
<DA bType="Quality" fc="ST" name="q" qchg="true" />
|
||||
<DA bType="Timestamp" fc="ST" name="t" />
|
||||
</DOType>
|
||||
|
||||
<DOType cdc="SPS" desc="Single point status" id="SPS_0">
|
||||
<DA bType="BOOLEAN" dchg="true" fc="ST" name="stVal" />
|
||||
<DA bType="Quality" fc="ST" name="q" qchg="true" />
|
||||
<DA bType="Timestamp" fc="ST" name="t" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="SPC_0" cdc="SPC">
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="ING" cdc="ING">
|
||||
<DA name="setVal" bType="INT32" fc="SP" dchg="true" />
|
||||
</DOType>
|
||||
|
||||
<DOType cdc="SPG" id="SPG_0">
|
||||
<DA name="setVal" bType="BOOLEAN" fc="SG" dchg="true" />
|
||||
</DOType>
|
||||
|
||||
<DOType cdc="TSG" id="TSG_0">
|
||||
<DA name="setTm" bType="Timestamp" fc="SP" dchg="true" />
|
||||
<DA name="setCal" bType="Struct" type="CalendarTime" fc="SP" dchg="true" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="ENG_ScheduleIntervalKind" cdc="ENG">
|
||||
<DA name="setVal" bType="Enum" type="ScheduleIntervalKind" fc="SP"
|
||||
dchg="true" />
|
||||
</DOType>
|
||||
|
||||
<DOType id="ING_EXT" cdc="ING">
|
||||
<DA name="setVal" bType="INT32" fc="SP" dchg="true" />
|
||||
<DA name="dataNs" bType="VisString255" fc="EX">
|
||||
|
@ -432,17 +289,6 @@
|
|||
<BDA name="Test" bType="BOOLEAN" />
|
||||
<BDA name="Check" bType="Check" />
|
||||
</DAType>
|
||||
|
||||
<DAType id="CalendarTime">
|
||||
<BDA name="occ" bType="INT16U" />
|
||||
<BDA name="occType" bType="Enum" type="OccurenceKind" />
|
||||
<BDA name="occPer" bType="Enum" type="PeriodKind" />
|
||||
<BDA name="weekDay" bType="Enum" type="WeekdayKind" />
|
||||
<BDA name="month" bType="Enum" type="MonthKind" />
|
||||
<BDA name="day" bType="INT8U" />
|
||||
<BDA name="hr" bType="INT8U" />
|
||||
<BDA name="mn" bType="INT8U" />
|
||||
</DAType>
|
||||
|
||||
<EnumType id="Beh">
|
||||
<EnumVal ord="1">on</EnumVal>
|
||||
|
@ -481,66 +327,5 @@
|
|||
<EnumVal ord="7">maintenance</EnumVal>
|
||||
<EnumVal ord="8">process</EnumVal>
|
||||
</EnumType>
|
||||
|
||||
<EnumType id="ScheduleStateKind">
|
||||
<EnumVal ord="1">not-ready</EnumVal>
|
||||
<EnumVal ord="2">validated</EnumVal>
|
||||
<EnumVal ord="3">ready</EnumVal>
|
||||
<EnumVal ord="4">running</EnumVal>
|
||||
</EnumType>
|
||||
|
||||
<EnumType id="OccurenceKind">
|
||||
<EnumVal ord="0">Time</EnumVal>
|
||||
<EnumVal ord="1">WeekDay</EnumVal>
|
||||
<EnumVal ord="2">WeekOfYear</EnumVal>
|
||||
<EnumVal ord="3">DayOfMonth</EnumVal>
|
||||
<EnumVal ord="4">DayOfYear</EnumVal>
|
||||
</EnumType>
|
||||
|
||||
<EnumType id="PeriodKind">
|
||||
<EnumVal ord="0">Hour</EnumVal>
|
||||
<EnumVal ord="1">Day</EnumVal>
|
||||
<EnumVal ord="2">Week</EnumVal>
|
||||
<EnumVal ord="3">Month</EnumVal>
|
||||
<EnumVal ord="4">Year</EnumVal>
|
||||
</EnumType>
|
||||
|
||||
<EnumType id="WeekdayKind">
|
||||
<EnumVal ord="0">reserved</EnumVal>
|
||||
<EnumVal ord="1">Monday</EnumVal>
|
||||
<EnumVal ord="2">Tuesday</EnumVal>
|
||||
<EnumVal ord="3">Wednesday</EnumVal>
|
||||
<EnumVal ord="4">Thursday</EnumVal>
|
||||
<EnumVal ord="5">Friday</EnumVal>
|
||||
<EnumVal ord="6">Saturday</EnumVal>
|
||||
<EnumVal ord="7">Sunday</EnumVal>
|
||||
</EnumType>
|
||||
|
||||
<EnumType id="MonthKind">
|
||||
<EnumVal ord="0">reserved</EnumVal>
|
||||
<EnumVal ord="1">January</EnumVal>
|
||||
<EnumVal ord="2">February</EnumVal>
|
||||
<EnumVal ord="3">March</EnumVal>
|
||||
<EnumVal ord="4">April</EnumVal>
|
||||
<EnumVal ord="5">May</EnumVal>
|
||||
<EnumVal ord="6">June</EnumVal>
|
||||
<EnumVal ord="7">July</EnumVal>
|
||||
<EnumVal ord="8">August</EnumVal>
|
||||
<EnumVal ord="9">September</EnumVal>
|
||||
<EnumVal ord="10">October</EnumVal>
|
||||
<EnumVal ord="11">November</EnumVal>
|
||||
<EnumVal ord="12">December</EnumVal>
|
||||
</EnumType>
|
||||
|
||||
<EnumType id="ScheduleIntervalKind">
|
||||
<EnumVal ord="1">MS</EnumVal>
|
||||
<EnumVal ord="2">PER_CYCLE</EnumVal>
|
||||
<EnumVal ord="3">CYCLE</EnumVal>
|
||||
<EnumVal ord="4">DAY</EnumVal>
|
||||
<EnumVal ord="5">WEEK</EnumVal>
|
||||
<EnumVal ord="6">MONTH</EnumVal>
|
||||
<EnumVal ord="7">YEAR</EnumVal>
|
||||
<EnumVal ord="8">EXTERNAL</EnumVal>
|
||||
</EnumType>
|
||||
</DataTypeTemplates>
|
||||
</SCL>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* static_model.c
|
||||
*
|
||||
* automatically generated from beagle_demo.iid
|
||||
* automatically generated from beagle_demo.icd
|
||||
*/
|
||||
#include "static_model.h"
|
||||
|
||||
|
@ -7583,7 +7583,7 @@ ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0,
|
|||
|
||||
|
||||
IedModel iedModel = {
|
||||
"beagle",
|
||||
"Template",
|
||||
&iedModel_GenericIO,
|
||||
&iedModelds_GenericIO_LLN0_Events,
|
||||
&iedModel_GenericIO_LLN0_report0,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* static_model.h
|
||||
*
|
||||
* automatically generated from beagle_demo.iid
|
||||
* automatically generated from beagle_demo.icd
|
||||
*/
|
||||
|
||||
#ifndef STATIC_MODEL_H_
|
||||
|
|
|
@ -104,7 +104,7 @@ namespace IEC61850
|
|||
/// <summary>
|
||||
/// Control object.
|
||||
/// </summary>
|
||||
public class ControlObject : IDisposable
|
||||
public class ControlObject
|
||||
{
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
private static extern LastApplErrorInternal ControlObjectClient_getLastApplError(IntPtr self);
|
||||
|
@ -183,6 +183,12 @@ namespace IEC61850
|
|||
ControlObjectClient_setCommandTerminationHandler(controlObject, intCommandTerminationHandler, controlObject);
|
||||
}
|
||||
|
||||
~ControlObject ()
|
||||
{
|
||||
if (this.controlObject != System.IntPtr.Zero)
|
||||
ControlObjectClient_destroy(controlObject);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the control model.
|
||||
/// </summary>
|
||||
|
@ -437,18 +443,6 @@ namespace IEC61850
|
|||
this.commandTerminationHandlerParameter = parameter;
|
||||
}
|
||||
|
||||
protected virtual void Dispose(bool disposing) {
|
||||
if (this.controlObject != System.IntPtr.Zero) {
|
||||
ControlObjectClient_destroy (controlObject);
|
||||
this.controlObject = System.IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
Dispose (true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* IEC61850ClientAPI.cs
|
||||
*
|
||||
* Copyright 2014-2016 Michael Zillgith
|
||||
* Copyright 2014 Michael Zillgith
|
||||
*
|
||||
* This file is part of libIEC61850.
|
||||
*
|
||||
|
@ -266,9 +266,6 @@ namespace IEC61850
|
|||
[DllImport ("iec61850", CallingConvention=CallingConvention.Cdecl)]
|
||||
static extern void MmsValue_delete (IntPtr self);
|
||||
|
||||
[DllImport ("iec61850", CallingConvention=CallingConvention.Cdecl)]
|
||||
static extern int MmsValue_getDataAccessError(IntPtr self);
|
||||
|
||||
/****************
|
||||
* IedConnection
|
||||
***************/
|
||||
|
@ -335,9 +332,6 @@ namespace IEC61850
|
|||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern IntPtr IedConnection_readDataSetValues (IntPtr self, out int error, [MarshalAs(UnmanagedType.LPStr)] string dataSetReference, IntPtr dataSet);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedConnection_writeDataSetValues (IntPtr self, out int error, [MarshalAs(UnmanagedType.LPStr)] string dataSetReference, IntPtr values, out IntPtr accessResults);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern IntPtr IedConnection_createDataSet (IntPtr self, out int error, [MarshalAs(UnmanagedType.LPStr)] string dataSetReference, IntPtr dataSet);
|
||||
|
||||
|
@ -435,26 +429,19 @@ namespace IEC61850
|
|||
|
||||
IedConnection_destroy (connection);
|
||||
}
|
||||
}
|
||||
|
||||
private IsoConnectionParameters isoConnectionParameters = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the connection parameters
|
||||
/// </summary>
|
||||
/// <returns>The connection parameters</returns>
|
||||
public IsoConnectionParameters GetConnectionParameters ()
|
||||
{
|
||||
if (isoConnectionParameters == null)
|
||||
{
|
||||
IntPtr mmsConnection = IedConnection_getMmsConnection(connection);
|
||||
|
||||
IntPtr parameters = MmsConnection_getIsoConnectionParameters(mmsConnection);
|
||||
|
||||
isoConnectionParameters = new IsoConnectionParameters(parameters);
|
||||
}
|
||||
|
||||
return isoConnectionParameters;
|
||||
{
|
||||
IntPtr mmsConnection = IedConnection_getMmsConnection(connection);
|
||||
|
||||
IntPtr parameters = MmsConnection_getIsoConnectionParameters(mmsConnection);
|
||||
|
||||
return new IsoConnectionParameters(parameters);
|
||||
}
|
||||
|
||||
private void FreeHGlobaleDeleteFunction (IntPtr pointer)
|
||||
|
@ -826,7 +813,7 @@ namespace IEC61850
|
|||
return QueryLogByTime (logRef, startTimeMs, stopTimeMs, out moreFollows);
|
||||
}
|
||||
|
||||
/// <summary>Read the variable specification (type description of a DA or FCDO</summary>
|
||||
/// <summary>Read the variable specification (type description of a DA or FDCO</summary>
|
||||
/// <param name="objectReference">The object reference of a DA or FCDO.</param>
|
||||
/// <param name="fc">The functional constraint (FC) of the object</param>
|
||||
/// <exception cref="IedConnectionException">This exception is thrown if there is a connection or service error</exception>
|
||||
|
@ -851,7 +838,7 @@ namespace IEC61850
|
|||
if (error != 0)
|
||||
throw new IedConnectionException ("Reading value failed", error);
|
||||
|
||||
if (mmsValue == IntPtr.Zero)
|
||||
if (mmsValue.ToInt32 () == 0)
|
||||
throw new IedConnectionException ("Variable not found on server", error);
|
||||
|
||||
return mmsValue;
|
||||
|
@ -869,22 +856,6 @@ namespace IEC61850
|
|||
return new MmsValue (value, true);
|
||||
}
|
||||
|
||||
private IntPtr readObjectInternalAndCheckDataAccessError(string objectReference, FunctionalConstraint fc)
|
||||
{
|
||||
IntPtr mmsValue = readObjectInternal (objectReference, fc);
|
||||
|
||||
if (MmsValue_getType(mmsValue) == (int) MmsType.MMS_DATA_ACCESS_ERROR) {
|
||||
|
||||
int dataAccessError = MmsValue_getDataAccessError (mmsValue);
|
||||
|
||||
MmsValue_delete (mmsValue);
|
||||
|
||||
throw new IedConnectionException ("Data access error", dataAccessError);
|
||||
}
|
||||
|
||||
return mmsValue;
|
||||
}
|
||||
|
||||
/// <summary>Read the value of a basic data attribute (BDA) of type boolean.</summary>
|
||||
/// <param name="objectReference">The object reference of a BDA.</param>
|
||||
/// <param name="fc">The functional constraint (FC) of the object</param>
|
||||
|
@ -892,18 +863,12 @@ namespace IEC61850
|
|||
/// <exception cref="IedConnectionException">This exception is thrown if there is a connection or service error</exception>
|
||||
public bool ReadBooleanValue (string objectReference, FunctionalConstraint fc)
|
||||
{
|
||||
IntPtr mmsValue = readObjectInternalAndCheckDataAccessError (objectReference, fc);
|
||||
var mmsValue = ReadValue (objectReference, fc);
|
||||
|
||||
if (MmsValue_getType (mmsValue) != (int) MmsType.MMS_BOOLEAN) {
|
||||
MmsValue_delete (mmsValue);
|
||||
if (mmsValue.GetType () == MmsType.MMS_BOOLEAN)
|
||||
return mmsValue.GetBoolean ();
|
||||
else
|
||||
throw new IedConnectionException ("Result is not of type boolean (MMS_BOOLEAN)", 0);
|
||||
}
|
||||
|
||||
bool value = MmsValue_getBoolean (mmsValue);
|
||||
|
||||
MmsValue_delete (mmsValue);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>Read the value of a basic data attribute (BDA) of type float.</summary>
|
||||
|
@ -912,12 +877,10 @@ namespace IEC61850
|
|||
/// <exception cref="IedConnectionException">This exception is thrown if there is a connection or service error</exception>
|
||||
public float ReadFloatValue (string objectReference, FunctionalConstraint fc)
|
||||
{
|
||||
IntPtr mmsValue = readObjectInternalAndCheckDataAccessError (objectReference, fc);
|
||||
IntPtr mmsValue = readObjectInternal (objectReference, fc);
|
||||
|
||||
if (MmsValue_getType (mmsValue) != (int)MmsType.MMS_FLOAT) {
|
||||
MmsValue_delete (mmsValue);
|
||||
throw new IedConnectionException ("Result is not of type float (MMS_FLOAT)", 0);
|
||||
}
|
||||
if (MmsValue_getType (mmsValue) != (int)MmsType.MMS_FLOAT)
|
||||
throw new IedConnectionException ("Result is not of type float", 0);
|
||||
|
||||
float value = MmsValue_toFloat (mmsValue);
|
||||
|
||||
|
@ -932,7 +895,7 @@ namespace IEC61850
|
|||
/// <exception cref="IedConnectionException">This exception is thrown if there is a connection or service error</exception>
|
||||
public string ReadStringValue (string objectReference, FunctionalConstraint fc)
|
||||
{
|
||||
IntPtr mmsValue = readObjectInternalAndCheckDataAccessError (objectReference, fc);
|
||||
IntPtr mmsValue = readObjectInternal (objectReference, fc);
|
||||
|
||||
if (!((MmsValue_getType (mmsValue) == (int)MmsType.MMS_VISIBLE_STRING) || (MmsValue_getType (mmsValue) == (int)MmsType.MMS_STRING))) {
|
||||
MmsValue_delete (mmsValue);
|
||||
|
@ -954,7 +917,7 @@ namespace IEC61850
|
|||
/// <exception cref="IedConnectionException">This exception is thrown if there is a connection or service error</exception>
|
||||
public Quality ReadQualityValue (string objectReference, FunctionalConstraint fc)
|
||||
{
|
||||
IntPtr mmsValue = readObjectInternalAndCheckDataAccessError (objectReference, fc);
|
||||
IntPtr mmsValue = readObjectInternal (objectReference, fc);
|
||||
|
||||
if (MmsValue_getType (mmsValue) == (int)MmsType.MMS_BIT_STRING) {
|
||||
int bitStringValue = (int)MmsValue_getBitStringAsInteger (mmsValue);
|
||||
|
@ -973,7 +936,7 @@ namespace IEC61850
|
|||
/// <exception cref="IedConnectionException">This exception is thrown if there is a connection or service error</exception>
|
||||
public int ReadBitStringValue (string objectReference, FunctionalConstraint fc)
|
||||
{
|
||||
IntPtr mmsValue = readObjectInternalAndCheckDataAccessError (objectReference, fc);
|
||||
IntPtr mmsValue = readObjectInternal (objectReference, fc);
|
||||
|
||||
if (MmsValue_getType (mmsValue) == (int)MmsType.MMS_BIT_STRING) {
|
||||
int bitStringValue = (int)MmsValue_getBitStringAsInteger (mmsValue);
|
||||
|
@ -990,14 +953,14 @@ namespace IEC61850
|
|||
/// <param name="objectReference">The object reference of a BDA.</param>
|
||||
/// <param name="fc">The functional constraint (FC) of the object</param>
|
||||
/// <exception cref="IedConnectionException">This exception is thrown if there is a connection or service error</exception>
|
||||
public Timestamp ReadTimestampValue (string objectReference, FunctionalConstraint fc)
|
||||
public UInt64 ReadTimestampValue (string objectReference, FunctionalConstraint fc)
|
||||
{
|
||||
var mmsValuePtr = readObjectInternalAndCheckDataAccessError (objectReference, fc);
|
||||
var mmsValuePtr = readObjectInternal (objectReference, fc);
|
||||
|
||||
var mmsValue = new MmsValue (mmsValuePtr, true);
|
||||
|
||||
if (mmsValue.GetType () == MmsType.MMS_UTC_TIME)
|
||||
return new Timestamp (mmsValue);
|
||||
return mmsValue.GetUtcTimeInMs ();
|
||||
else
|
||||
throw new IedConnectionException ("Result is not of type timestamp (MMS_UTC_TIME)", 0);
|
||||
}
|
||||
|
@ -1010,7 +973,7 @@ namespace IEC61850
|
|||
/// <exception cref="IedConnectionException">This exception is thrown if there is a connection or service error</exception>
|
||||
public Int64 ReadIntegerValue (string objectReference, FunctionalConstraint fc)
|
||||
{
|
||||
var mmsValuePtr = readObjectInternalAndCheckDataAccessError (objectReference, fc);
|
||||
var mmsValuePtr = readObjectInternal (objectReference, fc);
|
||||
|
||||
var mmsValue = new MmsValue (mmsValuePtr, true);
|
||||
|
||||
|
@ -1244,56 +1207,6 @@ namespace IEC61850
|
|||
return dataSet;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the values of a data set (SetDataSetValues service).
|
||||
/// </summary>
|
||||
/// <returns>The list of access results</returns>
|
||||
/// <param name="dataSetReference">The object reference of the data set</param>
|
||||
/// <param name="values">The new values for the data set members. The values have to be of the same number and type as the data set members</param>
|
||||
public List<MmsDataAccessError> WriteDataSetValues(string dataSetReference, List<MmsValue> values)
|
||||
{
|
||||
int error;
|
||||
IntPtr accessResults = IntPtr.Zero;
|
||||
|
||||
IntPtr valueList = LinkedList_create ();
|
||||
|
||||
foreach (MmsValue mmsValue in values) {
|
||||
LinkedList_add (valueList, mmsValue.valueReference);
|
||||
}
|
||||
|
||||
IedConnection_writeDataSetValues (connection, out error, dataSetReference, valueList, out accessResults);
|
||||
|
||||
LinkedList_destroyStatic (valueList);
|
||||
|
||||
/* handle access results */
|
||||
|
||||
List<MmsDataAccessError> accessResultList = null;
|
||||
|
||||
if (accessResults != IntPtr.Zero) {
|
||||
|
||||
IntPtr element = LinkedList_getNext (accessResults);
|
||||
|
||||
while (element != IntPtr.Zero) {
|
||||
IntPtr elementData = LinkedList_getData (element);
|
||||
|
||||
MmsValue accessResultValue = new MmsValue (elementData, true);
|
||||
|
||||
MmsDataAccessError dataAccessError = accessResultValue.GetDataAccessError ();
|
||||
|
||||
accessResultList.Add (dataAccessError);
|
||||
|
||||
element = LinkedList_getNext (element);
|
||||
}
|
||||
|
||||
LinkedList_destroyStatic (accessResults);
|
||||
}
|
||||
|
||||
if (error != 0)
|
||||
throw new IedConnectionException ("Writing data set failed", error);
|
||||
|
||||
return accessResultList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a new data set.
|
||||
/// </summary>
|
||||
|
|
|
@ -49,27 +49,6 @@ namespace IEC61850
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// MMS data access error for MmsValue type MMS_DATA_ACCESS_ERROR
|
||||
/// </summary>
|
||||
public enum MmsDataAccessError {
|
||||
NO_RESPONSE = -2, /* for server internal purposes only! */
|
||||
SUCCESS = -1,
|
||||
OBJECT_INVALIDATED = 0,
|
||||
HARDWARE_FAULT = 1,
|
||||
TEMPORARILY_UNAVAILABLE = 2,
|
||||
OBJECT_ACCESS_DENIED = 3,
|
||||
OBJECT_UNDEFINED = 4,
|
||||
INVALID_ADDRESS = 5,
|
||||
TYPE_UNSUPPORTED = 6,
|
||||
TYPE_INCONSISTENT = 7,
|
||||
OBJECT_ATTRIBUTE_INCONSISTENT = 8,
|
||||
OBJECT_ACCESS_UNSUPPORTED = 9,
|
||||
OBJECT_NONE_EXISTENT = 10,
|
||||
OBJECT_VALUE_INVALID = 11,
|
||||
UNKNOWN = 12,
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum TriggerOptions {
|
||||
NONE = 0,
|
||||
|
@ -140,203 +119,6 @@ namespace IEC61850
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Timestamp (represents IEC 61850 timestamps e.g. "t" attribute)
|
||||
/// </summary>
|
||||
public class Timestamp
|
||||
{
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern IntPtr Timestamp_create ();
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void Timestamp_destroy (IntPtr self);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void Timestamp_clearFlags (IntPtr self);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
[return: MarshalAs(UnmanagedType.I1)]
|
||||
static extern bool Timestamp_isLeapSecondKnown (IntPtr self);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void Timestamp_setLeapSecondKnown (IntPtr self, bool value);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
[return: MarshalAs(UnmanagedType.I1)]
|
||||
static extern bool Timestamp_hasClockFailure (IntPtr self);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void Timestamp_setClockFailure (IntPtr self, bool value);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
[return: MarshalAs(UnmanagedType.I1)]
|
||||
static extern bool Timestamp_isClockNotSynchronized (IntPtr self);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void Timestamp_setClockNotSynchronized (IntPtr self, bool value);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern int Timestamp_getSubsecondPrecision (IntPtr self);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void Timestamp_setSubsecondPrecision(IntPtr self, int subsecondPrecision);
|
||||
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void Timestamp_setTimeInSeconds (IntPtr self, UInt32 secondsSinceEpoch);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void Timestamp_setTimeInMilliseconds (IntPtr self, UInt64 millisSinceEpoch);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern UInt32 Timestamp_getTimeInSeconds (IntPtr self);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern UInt64 Timestamp_getTimeInMs (IntPtr self);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void Timestamp_setByMmsUtcTime (IntPtr self, IntPtr mmsValue);
|
||||
|
||||
internal IntPtr timestampRef = IntPtr.Zero;
|
||||
private bool responsableForDeletion;
|
||||
|
||||
internal Timestamp(IntPtr timestampRef, bool selfAllocated)
|
||||
{
|
||||
this.timestampRef = timestampRef;
|
||||
this.responsableForDeletion = selfAllocated;
|
||||
}
|
||||
|
||||
public Timestamp (DateTime timestamp) : this ()
|
||||
{
|
||||
SetDateTime (timestamp);
|
||||
}
|
||||
|
||||
public Timestamp (MmsValue mmsUtcTime) : this()
|
||||
{
|
||||
SetByMmsUtcTime (mmsUtcTime);
|
||||
}
|
||||
|
||||
public Timestamp()
|
||||
{
|
||||
timestampRef = Timestamp_create ();
|
||||
LeapSecondKnown = true;
|
||||
responsableForDeletion = true;
|
||||
}
|
||||
|
||||
~Timestamp ()
|
||||
{
|
||||
if (responsableForDeletion)
|
||||
Timestamp_destroy (timestampRef);
|
||||
}
|
||||
|
||||
public void ClearFlags()
|
||||
{
|
||||
Timestamp_clearFlags (timestampRef);
|
||||
}
|
||||
|
||||
public void SetDateTime(DateTime timestamp)
|
||||
{
|
||||
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||
DateTime timestampUTC = timestamp.ToUniversalTime();
|
||||
|
||||
TimeSpan timeDiff = timestampUTC - epoch;
|
||||
ulong timeVal = Convert.ToUInt64(timeDiff.TotalMilliseconds);
|
||||
|
||||
SetTimeInMilliseconds (timeVal);
|
||||
}
|
||||
|
||||
public bool LeapSecondKnown {
|
||||
get { return IsLeapSecondKnown ();}
|
||||
set { SetLeapSecondKnow (value);}
|
||||
}
|
||||
|
||||
public bool IsLeapSecondKnown()
|
||||
{
|
||||
return Timestamp_isLeapSecondKnown (timestampRef);
|
||||
}
|
||||
|
||||
public void SetLeapSecondKnow(bool value)
|
||||
{
|
||||
Timestamp_setLeapSecondKnown (timestampRef, value);
|
||||
}
|
||||
|
||||
public bool ClockFailure {
|
||||
get { return HasClockFailure ();}
|
||||
set { SetClockFailure (value);}
|
||||
}
|
||||
|
||||
public bool HasClockFailure()
|
||||
{
|
||||
return Timestamp_hasClockFailure (timestampRef);
|
||||
}
|
||||
|
||||
public void SetClockFailure(bool value)
|
||||
{
|
||||
Timestamp_setClockFailure (timestampRef, value);
|
||||
}
|
||||
|
||||
public bool ClockNotSynchronized {
|
||||
get { return IsClockNotSynchronized (); }
|
||||
set { SetClockNotSynchronized (value); }
|
||||
}
|
||||
|
||||
public bool IsClockNotSynchronized() {
|
||||
return Timestamp_isClockNotSynchronized(timestampRef);
|
||||
}
|
||||
|
||||
public void SetClockNotSynchronized(bool value) {
|
||||
Timestamp_setClockNotSynchronized (timestampRef, value);
|
||||
}
|
||||
|
||||
public int SubsecondPrecision {
|
||||
get { return GetSubsecondPrecision (); }
|
||||
set { SetSubsecondPrecision (value); }
|
||||
}
|
||||
|
||||
public int GetSubsecondPrecision() {
|
||||
return Timestamp_getSubsecondPrecision (timestampRef);
|
||||
}
|
||||
|
||||
public void SetSubsecondPrecision(int subsecondPrecision) {
|
||||
Timestamp_setSubsecondPrecision (timestampRef, subsecondPrecision);
|
||||
}
|
||||
|
||||
public UInt32 TimeInSeconds {
|
||||
get { return GetTimeInSeconds (); }
|
||||
set { SetTimeInSeconds (value); }
|
||||
}
|
||||
|
||||
public UInt32 GetTimeInSeconds()
|
||||
{
|
||||
return Timestamp_getTimeInSeconds (timestampRef);
|
||||
}
|
||||
|
||||
public void SetTimeInSeconds(UInt32 secondsSinceEpoch)
|
||||
{
|
||||
Timestamp_setTimeInSeconds (timestampRef, secondsSinceEpoch);
|
||||
}
|
||||
|
||||
public UInt64 TimeInMilliseconds {
|
||||
get { return GetTimeInMilliseconds (); }
|
||||
set { SetTimeInMilliseconds (value); }
|
||||
}
|
||||
|
||||
public UInt64 GetTimeInMilliseconds()
|
||||
{
|
||||
return Timestamp_getTimeInMs (timestampRef);
|
||||
}
|
||||
|
||||
public void SetTimeInMilliseconds(UInt64 millisSinceEpoch) {
|
||||
Timestamp_setTimeInMilliseconds (timestampRef, millisSinceEpoch);
|
||||
}
|
||||
|
||||
public void SetByMmsUtcTime(MmsValue mmsValue)
|
||||
{
|
||||
Timestamp_setByMmsUtcTime (timestampRef, mmsValue.valueReference);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public enum ACSIClass
|
||||
{
|
||||
/** data objects */
|
||||
|
|
|
@ -197,6 +197,24 @@ namespace IEC61850
|
|||
ACCESS_POLICY_DENY = 1
|
||||
}
|
||||
|
||||
public enum MmsDataAccessError {
|
||||
DATA_ACCESS_ERROR_NO_RESPONSE = -2, /* for server internal purposes only! */
|
||||
DATA_ACCESS_ERROR_SUCCESS = -1,
|
||||
DATA_ACCESS_ERROR_OBJECT_INVALIDATED = 0,
|
||||
DATA_ACCESS_ERROR_HARDWARE_FAULT = 1,
|
||||
DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE = 2,
|
||||
DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED = 3,
|
||||
DATA_ACCESS_ERROR_OBJECT_UNDEFINED = 4,
|
||||
DATA_ACCESS_ERROR_INVALID_ADDRESS = 5,
|
||||
DATA_ACCESS_ERROR_TYPE_UNSUPPORTED = 6,
|
||||
DATA_ACCESS_ERROR_TYPE_INCONSISTENT = 7,
|
||||
DATA_ACCESS_ERROR_OBJECT_ATTRIBUTE_INCONSISTENT = 8,
|
||||
DATA_ACCESS_ERROR_OBJECT_ACCESS_UNSUPPORTED = 9,
|
||||
DATA_ACCESS_ERROR_OBJECT_NONE_EXISTENT = 10,
|
||||
DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID = 11,
|
||||
DATA_ACCESS_ERROR_UNKNOWN = 12
|
||||
}
|
||||
|
||||
public enum DataAttributeType {
|
||||
BOOLEAN = 0,
|
||||
INT8 = 1,
|
||||
|
@ -227,8 +245,7 @@ namespace IEC61850
|
|||
GENERIC_BITSTRING = 26,
|
||||
CONSTRUCTED = 27,
|
||||
ENTRY_TIME = 28,
|
||||
PHYCOMADDR = 29,
|
||||
CURRENCY = 30
|
||||
PHYCOMADDR = 29
|
||||
}
|
||||
|
||||
public enum ModeValues
|
||||
|
@ -247,12 +264,7 @@ namespace IEC61850
|
|||
ALARM = 3
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The CDC class contains helper functions to create DataObject instances for the
|
||||
/// most common Common Data Classes.
|
||||
/// </summary>
|
||||
public class CDC
|
||||
{
|
||||
public class CDC {
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern IntPtr CDC_SPS_create(string name, IntPtr parent, uint options);
|
||||
|
||||
|
@ -561,9 +573,6 @@ namespace IEC61850
|
|||
[DllImport ("iec61850", CallingConvention=CallingConvention.Cdecl)]
|
||||
static extern IntPtr IedServer_create(IntPtr modelRef);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_setLocalIpAddress(IntPtr self, string localIpAddress);
|
||||
|
||||
[DllImport ("iec61850", CallingConvention=CallingConvention.Cdecl)]
|
||||
static extern void IedServer_start(IntPtr self, int tcpPort);
|
||||
|
||||
|
@ -582,18 +591,12 @@ namespace IEC61850
|
|||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_unlockDataModel(IntPtr self);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_updateAttributeValue(IntPtr self, IntPtr DataAttribute, IntPtr MmsValue);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_updateBooleanAttributeValue(IntPtr self, IntPtr dataAttribute, bool value);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_updateInt32AttributeValue(IntPtr self, IntPtr dataAttribute, int value);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_updateInt64AttributeValue(IntPtr self, IntPtr dataAttribute, Int64 value);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_updateFloatAttributeValue(IntPtr self, IntPtr dataAttribute, float value);
|
||||
|
||||
|
@ -603,9 +606,6 @@ namespace IEC61850
|
|||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_updateUTCTimeAttributeValue(IntPtr self, IntPtr dataAttribute, ulong value);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_updateTimestampAttributeValue(IntPtr self, IntPtr dataAttribute, IntPtr timestamp);
|
||||
|
||||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern void IedServer_updateQuality(IntPtr self, IntPtr dataAttribute, ushort value);
|
||||
|
||||
|
@ -659,9 +659,7 @@ namespace IEC61850
|
|||
|
||||
private IntPtr self = IntPtr.Zero;
|
||||
|
||||
private InternalControlHandler internalControlHandlerRef = null;
|
||||
private InternalControlPerformCheckHandler internalControlPerformCheckHandlerRef = null;
|
||||
private InternalControlWaitForExecutionHandler internalControlWaitForExecutionHandlerRef = null;
|
||||
|
||||
|
||||
private class ControlHandlerInfo {
|
||||
public DataObject controlObject = null;
|
||||
|
@ -799,36 +797,11 @@ namespace IEC61850
|
|||
// }
|
||||
//}
|
||||
|
||||
private InternalConnectionHandler internalConnectionHandler = null;
|
||||
|
||||
/// <summary>
|
||||
/// Sets the local ip address for listening
|
||||
/// </summary>
|
||||
/// <param name="localIpAddress">Local IP address.</param>
|
||||
public void SetLocalIpAddress(string localIpAddress)
|
||||
{
|
||||
IedServer_setLocalIpAddress (self, localIpAddress);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start MMS server
|
||||
/// </summary>
|
||||
/// <param name="localIpAddress">Local IP address.</param>
|
||||
/// <param name="tcpPort">TCP port to use</param>
|
||||
public void Start(string localIpAddress, int tcpPort)
|
||||
{
|
||||
SetLocalIpAddress (localIpAddress);
|
||||
Start (tcpPort);
|
||||
}
|
||||
|
||||
/// <summary>Start MMS server</summary>
|
||||
/// <param name="tcpPort">TCP port to use</param>
|
||||
public void Start(int tcpPort)
|
||||
{
|
||||
if (internalConnectionHandler == null)
|
||||
internalConnectionHandler = new InternalConnectionHandler (connectionIndicationHandler);
|
||||
|
||||
IedServer_setConnectionIndicationHandler (self, internalConnectionHandler, IntPtr.Zero);
|
||||
IedServer_setConnectionIndicationHandler (self, connectionIndicationHandler, IntPtr.Zero);
|
||||
|
||||
IedServer_start(self, tcpPort);
|
||||
}
|
||||
|
@ -846,7 +819,6 @@ namespace IEC61850
|
|||
public void Stop()
|
||||
{
|
||||
IedServer_stop(self);
|
||||
internalConnectionHandler = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -857,7 +829,6 @@ namespace IEC61850
|
|||
{
|
||||
IedServer_destroy(self);
|
||||
self = IntPtr.Zero;
|
||||
internalConnectionHandler = null;
|
||||
}
|
||||
|
||||
public bool IsRunning()
|
||||
|
@ -886,10 +857,7 @@ namespace IEC61850
|
|||
info.controlHandler = handler;
|
||||
info.controlHandlerParameter = parameter;
|
||||
|
||||
if (internalControlHandlerRef == null)
|
||||
internalControlHandlerRef = new InternalControlHandler (internalControlHandler);
|
||||
|
||||
IedServer_setControlHandler(self, controlObject.self, internalControlHandlerRef, GCHandle.ToIntPtr(info.handle));
|
||||
IedServer_setControlHandler(self, controlObject.self, internalControlHandler, GCHandle.ToIntPtr(info.handle));
|
||||
}
|
||||
|
||||
public void SetCheckHandler (DataObject controlObject, CheckHandler handler, object parameter)
|
||||
|
@ -899,10 +867,7 @@ namespace IEC61850
|
|||
info.checkHandler = handler;
|
||||
info.checkHandlerParameter = parameter;
|
||||
|
||||
if (internalControlPerformCheckHandlerRef == null)
|
||||
internalControlPerformCheckHandlerRef = new InternalControlPerformCheckHandler (internalCheckHandler);
|
||||
|
||||
IedServer_setPerformCheckHandler(self, controlObject.self, internalControlPerformCheckHandlerRef, GCHandle.ToIntPtr(info.handle));
|
||||
IedServer_setPerformCheckHandler(self, controlObject.self, internalCheckHandler, GCHandle.ToIntPtr(info.handle));
|
||||
}
|
||||
|
||||
public void SetWaitForExecutionHandler (DataObject controlObject, ControlWaitForExecutionHandler handler, object parameter)
|
||||
|
@ -912,10 +877,7 @@ namespace IEC61850
|
|||
info.waitForExecHandler = handler;
|
||||
info.waitForExecHandlerParameter = parameter;
|
||||
|
||||
if (internalControlWaitForExecutionHandlerRef == null)
|
||||
internalControlWaitForExecutionHandlerRef = new InternalControlWaitForExecutionHandler (internalControlWaitForExecutionHandler);
|
||||
|
||||
IedServer_setWaitForExecutionHandler(self, controlObject.self, internalControlWaitForExecutionHandlerRef, GCHandle.ToIntPtr(info.handle));
|
||||
IedServer_setWaitForExecutionHandler(self, controlObject.self, internalControlWaitForExecutionHandler, GCHandle.ToIntPtr(info.handle));
|
||||
}
|
||||
|
||||
public void HandleWriteAccess (DataAttribute dataAttr, WriteAccessHandler handler, object parameter)
|
||||
|
@ -942,34 +904,24 @@ namespace IEC61850
|
|||
IedServer_unlockDataModel(self);
|
||||
}
|
||||
|
||||
public void UpdateAttributeValue(DataAttribute dataAttr, MmsValue value)
|
||||
public void UpdateBooleanAttributeValue(DataAttribute dataAttr, bool val)
|
||||
{
|
||||
IedServer_updateAttributeValue (self, dataAttr.self, value.valueReference);
|
||||
IedServer_updateBooleanAttributeValue(self, dataAttr.self, val);
|
||||
}
|
||||
|
||||
public void UpdateBooleanAttributeValue(DataAttribute dataAttr, bool value)
|
||||
public void UpdateFloatAttributeValue(DataAttribute dataAttr, float val)
|
||||
{
|
||||
IedServer_updateBooleanAttributeValue(self, dataAttr.self, value);
|
||||
IedServer_updateFloatAttributeValue(self, dataAttr.self, val);
|
||||
}
|
||||
|
||||
public void UpdateFloatAttributeValue(DataAttribute dataAttr, float value)
|
||||
public void UpdateInt32AttributeValue(DataAttribute dataAttr, int val)
|
||||
{
|
||||
IedServer_updateFloatAttributeValue(self, dataAttr.self, value);
|
||||
IedServer_updateInt32AttributeValue(self, dataAttr.self, val);
|
||||
}
|
||||
|
||||
public void UpdateInt32AttributeValue(DataAttribute dataAttr, int value)
|
||||
public void UpdateVisibleStringAttributeValue(DataAttribute dataAttr, string val)
|
||||
{
|
||||
IedServer_updateInt32AttributeValue(self, dataAttr.self, value);
|
||||
}
|
||||
|
||||
public void UpdateInt64AttributeValue(DataAttribute dataAttr, Int64 value)
|
||||
{
|
||||
IedServer_updateInt64AttributeValue (self, dataAttr.self, value);
|
||||
}
|
||||
|
||||
public void UpdateVisibleStringAttributeValue(DataAttribute dataAttr, string value)
|
||||
{
|
||||
IedServer_updateVisibleStringAttributeValue(self, dataAttr.self, value);
|
||||
IedServer_updateVisibleStringAttributeValue(self, dataAttr.self, val);
|
||||
}
|
||||
|
||||
public void UpdateUTCTimeAttributeValue(DataAttribute dataAttr, DateTime timestamp)
|
||||
|
@ -983,11 +935,6 @@ namespace IEC61850
|
|||
IedServer_updateUTCTimeAttributeValue(self, dataAttr.self, timeVal);
|
||||
}
|
||||
|
||||
public void UpdateTimestampAttributeValue(DataAttribute dataAttr, Timestamp timestamp)
|
||||
{
|
||||
IedServer_updateTimestampAttributeValue (self, dataAttr.self, timestamp.timestampRef);
|
||||
}
|
||||
|
||||
public void UpdateQuality(DataAttribute dataAttr, ushort value)
|
||||
{
|
||||
IedServer_updateQuality(self, dataAttr.self, value);
|
||||
|
|
|
@ -102,6 +102,8 @@ namespace IEC61850
|
|||
{
|
||||
if (authParameter != IntPtr.Zero)
|
||||
AcseAuthenticationParameter_destroy(authParameter);
|
||||
|
||||
//IsoConnectionParameters_destroy(self);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -164,9 +164,6 @@ namespace IEC61850
|
|||
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
|
||||
static extern ulong MmsValue_getBinaryTimeAsUtcMs (IntPtr self);
|
||||
|
||||
[DllImport ("iec61850", CallingConvention=CallingConvention.Cdecl)]
|
||||
static extern int MmsValue_getDataAccessError(IntPtr self);
|
||||
|
||||
internal IntPtr valueReference; /* reference to native MmsValue instance */
|
||||
|
||||
private bool responsableForDeletion; /* if .NET wrapper is responsable for the deletion of the native MmsValue instance */
|
||||
|
@ -177,7 +174,8 @@ namespace IEC61850
|
|||
valueReference = value;
|
||||
this.responsableForDeletion = false;
|
||||
}
|
||||
|
||||
|
||||
// TODO make internal
|
||||
internal MmsValue (IntPtr value, bool responsableForDeletion)
|
||||
{
|
||||
valueReference = value;
|
||||
|
@ -427,14 +425,6 @@ namespace IEC61850
|
|||
throw new MmsValueException ("Value is of wrong type");
|
||||
}
|
||||
|
||||
|
||||
public MmsDataAccessError GetDataAccessError ()
|
||||
{
|
||||
int errorCode = MmsValue_getDataAccessError (valueReference);
|
||||
|
||||
return (MmsDataAccessError)errorCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the timestamp value as UTC time in s (UNIX time stamp).
|
||||
/// </summary>
|
||||
|
|
|
@ -21,6 +21,7 @@ namespace authenticate
|
|||
|
||||
Console.WriteLine("Connect to " + hostname);
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
IsoConnectionParameters parameters = con.GetConnectionParameters();
|
||||
|
|
|
@ -86,10 +86,7 @@ namespace control
|
|||
Thread.Sleep(1000);
|
||||
}
|
||||
|
||||
// has to be called before IedConnection dispose method!
|
||||
control.Dispose();
|
||||
|
||||
con.Abort();
|
||||
con.Abort();
|
||||
}
|
||||
catch (IedConnectionException e)
|
||||
{
|
||||
|
|
|
@ -17,19 +17,14 @@ namespace example1
|
|||
if (args.Length > 0)
|
||||
hostname = args[0];
|
||||
else
|
||||
hostname = "127.0.0.1";
|
||||
|
||||
int port = 102;
|
||||
|
||||
if (args.Length > 1)
|
||||
port = Int32.Parse(args [1]);
|
||||
hostname = "10.0.2.2";
|
||||
|
||||
Console.WriteLine("Connect to " + hostname);
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
con.Connect(hostname, port);
|
||||
con.Connect(hostname, 102);
|
||||
|
||||
List<string> serverDirectory = con.GetServerDirectory(false);
|
||||
|
||||
|
|
|
@ -93,6 +93,8 @@ namespace reporting
|
|||
rcb1.SetIntgPd(5000);
|
||||
rcb1.SetRptEna(true);
|
||||
|
||||
rcb1.SetRCBValues();
|
||||
|
||||
rcb2.GetRCBValues();
|
||||
|
||||
if (rcb2.IsBuffered())
|
||||
|
|
|
@ -42,20 +42,8 @@ namespace server1
|
|||
iedServer.Start (102);
|
||||
Console.WriteLine ("Server started");
|
||||
|
||||
GC.Collect ();
|
||||
|
||||
DataObject ggio1AnIn1 = (DataObject)iedModel.GetModelNodeByShortObjectReference ("GenericIO/GGIO1.AnIn1");
|
||||
|
||||
DataAttribute ggio1AnIn1magF = (DataAttribute)ggio1AnIn1.GetChild ("mag.f");
|
||||
DataAttribute ggio1AnIn1T = (DataAttribute)ggio1AnIn1.GetChild ("t");
|
||||
|
||||
float floatVal = 1.0f;
|
||||
|
||||
while (running) {
|
||||
floatVal += 1f;
|
||||
iedServer.UpdateTimestampAttributeValue (ggio1AnIn1T, new Timestamp (DateTime.Now));
|
||||
iedServer.UpdateFloatAttributeValue (ggio1AnIn1magF, floatVal);
|
||||
Thread.Sleep (100);
|
||||
Thread.Sleep (1);
|
||||
}
|
||||
|
||||
iedServer.Stop ();
|
||||
|
|
|
@ -105,30 +105,6 @@ namespace tests
|
|||
Assert.AreEqual (val.ToFloat (), (float)0.1234);
|
||||
}
|
||||
|
||||
[Test ()]
|
||||
public void Timestamps()
|
||||
{
|
||||
Timestamp timestamp = new Timestamp ();
|
||||
|
||||
Assert.IsTrue (timestamp.LeapSecondKnown);
|
||||
Assert.IsFalse (timestamp.ClockFailure);
|
||||
Assert.IsFalse (timestamp.ClockNotSynchronized);
|
||||
|
||||
timestamp.LeapSecondKnown = false;
|
||||
Assert.IsFalse (timestamp.LeapSecondKnown);
|
||||
|
||||
timestamp.ClockFailure = true;
|
||||
Assert.IsTrue (timestamp.ClockFailure);
|
||||
|
||||
timestamp.ClockNotSynchronized = true;
|
||||
Assert.IsTrue (timestamp.ClockNotSynchronized);
|
||||
|
||||
Assert.AreEqual (0, timestamp.SubsecondPrecision);
|
||||
|
||||
timestamp.SubsecondPrecision = 10;
|
||||
Assert.AreEqual (10, timestamp.SubsecondPrecision);
|
||||
}
|
||||
|
||||
[Test ()]
|
||||
public void CreateModelFromNonExistingFile()
|
||||
{
|
||||
|
@ -189,30 +165,6 @@ namespace tests
|
|||
iedServer.Destroy ();
|
||||
}
|
||||
|
||||
[Test ()]
|
||||
public void ReadNonExistingObject()
|
||||
{
|
||||
IedModel iedModel = ConfigFileParser.CreateModelFromConfigFile ("../../model.cfg");
|
||||
|
||||
IedServer iedServer = new IedServer (iedModel);
|
||||
|
||||
iedServer.Start (10002);
|
||||
|
||||
IedConnection connection = new IedConnection ();
|
||||
|
||||
connection.Connect ("localhost", 10002);
|
||||
|
||||
MmsValue value = connection.ReadValue ("simpleIOGenericIO/GGIO1.SPCSO1.stVal", FunctionalConstraint.MX);
|
||||
|
||||
Assert.IsNotNull (value);
|
||||
|
||||
Assert.AreEqual (MmsType.MMS_DATA_ACCESS_ERROR, value.GetType ());
|
||||
|
||||
iedServer.Stop ();
|
||||
|
||||
iedServer.Destroy ();
|
||||
}
|
||||
|
||||
[Test ()]
|
||||
public void AccessDataModelServerSide()
|
||||
{
|
||||
|
@ -281,14 +233,14 @@ namespace tests
|
|||
|
||||
iedServer.HandleWriteAccess (opDlTmms, delegate(IEC61850.Server.DataAttribute dataAttr, MmsValue value, ClientConnection con, object parameter) {
|
||||
opDlTmmsValue = value.ToInt32();
|
||||
return MmsDataAccessError.SUCCESS;
|
||||
return MmsDataAccessError.DATA_ACCESS_ERROR_SUCCESS;
|
||||
}, null);
|
||||
|
||||
iedServer.HandleWriteAccess (rsDlTmms, delegate(IEC61850.Server.DataAttribute dataAttr, MmsValue value, ClientConnection con, object parameter) {
|
||||
if (value.ToInt32() > 1000)
|
||||
return MmsDataAccessError.OBJECT_VALUE_INVALID;
|
||||
return MmsDataAccessError.DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID;
|
||||
else
|
||||
return MmsDataAccessError.SUCCESS;
|
||||
return MmsDataAccessError.DATA_ACCESS_ERROR_SUCCESS;
|
||||
}, null);
|
||||
|
||||
iedServer.Start (10002);
|
||||
|
@ -334,7 +286,7 @@ namespace tests
|
|||
IedServer iedServer = new IedServer (iedModel);
|
||||
|
||||
iedServer.HandleWriteAccess (opDlTmms, delegate(IEC61850.Server.DataAttribute dataAttr, MmsValue value, ClientConnection con, object parameter) {
|
||||
return MmsDataAccessError.SUCCESS;
|
||||
return MmsDataAccessError.DATA_ACCESS_ERROR_SUCCESS;
|
||||
}, null);
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
add_subdirectory(server_example_simple)
|
||||
add_subdirectory(server_example_basic_io)
|
||||
add_subdirectory(server_example_password_auth)
|
||||
add_subdirectory(server_example_write_handler)
|
||||
add_subdirectory(server_example1)
|
||||
add_subdirectory(server_example2)
|
||||
add_subdirectory(server_example3)
|
||||
add_subdirectory(server_example4)
|
||||
add_subdirectory(server_example5)
|
||||
add_subdirectory(server_example_control)
|
||||
add_subdirectory(server_example_dynamic)
|
||||
add_subdirectory(server_example_config_file)
|
||||
|
@ -10,18 +11,18 @@ add_subdirectory(server_example_threadless)
|
|||
add_subdirectory(server_example_61400_25)
|
||||
add_subdirectory(server_example_setting_groups)
|
||||
add_subdirectory(server_example_logging)
|
||||
add_subdirectory(server_example_files)
|
||||
add_subdirectory(iec61850_client_example1)
|
||||
add_subdirectory(iec61850_client_example2)
|
||||
add_subdirectory(iec61850_client_example3)
|
||||
add_subdirectory(iec61850_client_example4)
|
||||
add_subdirectory(iec61850_client_example5)
|
||||
IF(WIN32)
|
||||
else()
|
||||
add_subdirectory(iec61850_client_example_files)
|
||||
endif()
|
||||
add_subdirectory(iec61850_client_example_reporting)
|
||||
add_subdirectory(iec61850_client_example_log)
|
||||
add_subdirectory(mms_client_example1)
|
||||
add_subdirectory(mms_client_example2)
|
||||
add_subdirectory(mms_client_example3)
|
||||
add_subdirectory(mms_client_example4)
|
||||
|
||||
IF(WIN32)
|
||||
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../third_party/winpcap/Lib/wpcap.lib")
|
||||
|
|
|
@ -1,15 +1,21 @@
|
|||
|
||||
EXAMPLE_DIRS = iec61850_client_example1
|
||||
EXAMPLE_DIRS = mms_client_example1
|
||||
EXAMPLE_DIRS += mms_client_example2
|
||||
EXAMPLE_DIRS += mms_client_example3
|
||||
EXAMPLE_DIRS += mms_client_example4
|
||||
EXAMPLE_DIRS += mms_client_example5
|
||||
EXAMPLE_DIRS += iec61850_client_example1
|
||||
EXAMPLE_DIRS += iec61850_client_example2
|
||||
EXAMPLE_DIRS += iec61850_client_example3
|
||||
EXAMPLE_DIRS += iec61850_client_example4
|
||||
EXAMPLE_DIRS += iec61850_client_example5
|
||||
EXAMPLE_DIRS += iec61850_client_example_reporting
|
||||
EXAMPLE_DIRS += iec61850_client_example_log
|
||||
EXAMPLE_DIRS += server_example_simple
|
||||
EXAMPLE_DIRS += server_example_basic_io
|
||||
EXAMPLE_DIRS += server_example_password_auth
|
||||
EXAMPLE_DIRS += server_example_write_handler
|
||||
EXAMPLE_DIRS += server_example1
|
||||
EXAMPLE_DIRS += server_example2
|
||||
EXAMPLE_DIRS += server_example3
|
||||
EXAMPLE_DIRS += server_example4
|
||||
EXAMPLE_DIRS += server_example5
|
||||
EXAMPLE_DIRS += server_example_goose
|
||||
EXAMPLE_DIRS += server_example_control
|
||||
EXAMPLE_DIRS += server_example_config_file
|
||||
|
@ -19,7 +25,6 @@ EXAMPLE_DIRS += server_example_61400_25
|
|||
EXAMPLE_DIRS += server_example_threadless
|
||||
EXAMPLE_DIRS += server_example_setting_groups
|
||||
EXAMPLE_DIRS += server_example_logging
|
||||
EXAMPLE_DIRS += server_example_files
|
||||
EXAMPLE_DIRS += goose_subscriber
|
||||
EXAMPLE_DIRS += goose_publisher
|
||||
EXAMPLE_DIRS += sv_subscriber
|
||||
|
@ -29,10 +34,11 @@ EXAMPLE_DIRS += iec61850_sv_client_example
|
|||
EXAMPLE_DIRS += sv_publisher
|
||||
EXAMPLE_DIRS += sv_subscriber
|
||||
|
||||
MODEL_DIRS += server_example_simple
|
||||
MODEL_DIRS += server_example_basic_io
|
||||
MODEL_DIRS += server_example_password_auth
|
||||
MODEL_DIRS += server_example_write_handler
|
||||
MODEL_DIRS += server_example1
|
||||
MODEL_DIRS += server_example2
|
||||
MODEL_DIRS += server_example3
|
||||
MODEL_DIRS += server_example4
|
||||
MODEL_DIRS += server_example5
|
||||
MODEL_DIRS += server_example_goose
|
||||
MODEL_DIRS += server_example_control
|
||||
MODEL_DIRS += server_example_config_file
|
||||
|
@ -41,7 +47,6 @@ MODEL_DIRS += server_example_61400_25
|
|||
MODEL_DIRS += server_example_threadless
|
||||
MODEL_DIRS += server_example_setting_groups
|
||||
MODEL_DIRS += server_example_logging
|
||||
MODEL_DIRS += server_example_files
|
||||
MODEL_DIRS += iec61850_9_2_LE_example
|
||||
|
||||
all: examples
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
static int running = 1;
|
||||
|
||||
|
@ -27,10 +28,7 @@ gooseListener(GooseSubscriber subscriber, void* parameter)
|
|||
printf(" stNum: %u sqNum: %u\n", GooseSubscriber_getStNum(subscriber),
|
||||
GooseSubscriber_getSqNum(subscriber));
|
||||
printf(" timeToLive: %u\n", GooseSubscriber_getTimeAllowedToLive(subscriber));
|
||||
|
||||
uint64_t timestamp = GooseSubscriber_getTimestamp(subscriber);
|
||||
|
||||
printf(" timestamp: %u.%u\n", (uint32_t) (timestamp / 1000), (uint32_t) (timestamp % 1000));
|
||||
printf(" timestamp: %"PRIu64"\n", GooseSubscriber_getTimestamp(subscriber));
|
||||
|
||||
MmsValue* values = GooseSubscriber_getDataSetValues(subscriber);
|
||||
|
||||
|
@ -44,6 +42,14 @@ gooseListener(GooseSubscriber subscriber, void* parameter)
|
|||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
MmsValue* dataSetValues = MmsValue_createEmptyArray(4);
|
||||
|
||||
int i;
|
||||
for (i = 0; i < 4; i++) {
|
||||
MmsValue* dataSetEntry = MmsValue_newBoolean(false);
|
||||
MmsValue_setElement(dataSetValues, i, dataSetEntry);
|
||||
}
|
||||
|
||||
GooseReceiver receiver = GooseReceiver_create();
|
||||
|
||||
if (argc > 1) {
|
||||
|
@ -71,7 +77,5 @@ main(int argc, char** argv)
|
|||
Thread_sleep(100);
|
||||
}
|
||||
|
||||
GooseReceiver_stop(receiver);
|
||||
|
||||
GooseReceiver_destroy(receiver);
|
||||
GooseSubscriber_destroy(subscriber);
|
||||
}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
|
||||
The default ethernet interface is eth0. You can specify another interface at the command line.
|
||||
|
||||
./sv_9_2LE_example eth1
|
||||
|
||||
In order for the SV publisher to start the SVCB has to be enabled by an MMS client.
|
||||
|
||||
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
extern IedModel iedModel;
|
||||
|
||||
static int running = 0;
|
||||
static int svcbEnabled = 1;
|
||||
static int svcbEnabled = 0;
|
||||
|
||||
void sigint_handler(int signalId)
|
||||
{
|
||||
|
@ -57,9 +57,9 @@ static SampledValuesPublisher svPublisher;
|
|||
static SV_ASDU asdu;
|
||||
|
||||
static void
|
||||
setupSVPublisher(const char* svInterface)
|
||||
setupSVPublisher()
|
||||
{
|
||||
svPublisher = SampledValuesPublisher_create(NULL, svInterface);
|
||||
svPublisher = SampledValuesPublisher_create("eth1");
|
||||
|
||||
asdu = SampledValuesPublisher_addASDU(svPublisher, "xxxxMUnn01", NULL, 1);
|
||||
|
||||
|
@ -87,13 +87,6 @@ static void sVCBEventHandler (SVControlBlock* svcb, int event, void* parameter)
|
|||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
char* svInterface;
|
||||
|
||||
if (argc > 1)
|
||||
svInterface = argv[1];
|
||||
else
|
||||
svInterface = "eth0";
|
||||
|
||||
IedServer iedServer = IedServer_create(&iedModel);
|
||||
|
||||
/* MMS server will be instructed to start listening to client connections. */
|
||||
|
@ -109,7 +102,7 @@ main(int argc, char** argv)
|
|||
|
||||
signal(SIGINT, sigint_handler);
|
||||
|
||||
setupSVPublisher(svInterface);
|
||||
setupSVPublisher();
|
||||
|
||||
int voltage = 1;
|
||||
int current = 1;
|
||||
|
|
|
@ -50,8 +50,6 @@ int main(int argc, char** argv) {
|
|||
|
||||
if (error == IED_ERROR_OK) {
|
||||
|
||||
IedConnection_getServerDirectory(con, &error, false);
|
||||
|
||||
/* read an analog measurement value from server */
|
||||
MmsValue* value = IedConnection_readObject(con, &error, "simpleIOGenericIO/GGIO1.AnIn1.mag.f", IEC61850_FC_MX);
|
||||
|
||||
|
@ -67,8 +65,8 @@ int main(int argc, char** argv) {
|
|||
|
||||
if (error != IED_ERROR_OK)
|
||||
printf("failed to write simpleIOGenericIO/GGIO1.NamPlt.vendor!\n");
|
||||
|
||||
MmsValue_delete(value);
|
||||
else
|
||||
MmsValue_delete(value);
|
||||
|
||||
|
||||
/* read data set */
|
||||
|
@ -119,8 +117,6 @@ int main(int argc, char** argv) {
|
|||
|
||||
ClientDataSet_destroy(clientDataSet);
|
||||
|
||||
ClientReportControlBlock_destroy(rcb);
|
||||
|
||||
close_connection:
|
||||
|
||||
IedConnection_close(con);
|
||||
|
|
|
@ -42,9 +42,8 @@ printDataDirectory(char* doRef, IedConnection con, int spaces)
|
|||
sprintf(daRef, "%s.%s", doRef, daName);
|
||||
printDataDirectory(daRef, con, spaces + 2);
|
||||
}
|
||||
}
|
||||
|
||||
LinkedList_destroy(dataAttributes);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -146,8 +145,6 @@ main(int argc, char** argv)
|
|||
dataSetMemberRef = LinkedList_getNext(dataSetMemberRef);
|
||||
}
|
||||
|
||||
LinkedList_destroy(dataSetMembers);
|
||||
|
||||
dataSet = LinkedList_getNext(dataSet);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,9 +14,8 @@
|
|||
#include "hal_thread.h"
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
char* hostname;
|
||||
int tcpPort = 102;
|
||||
|
||||
|
@ -47,22 +46,25 @@ main(int argc, char** argv)
|
|||
/* use this to skip AP-Title completely - this may be required by some "obscure" servers */
|
||||
// IsoConnectionParameters_setRemoteApTitle(parameters, NULL, 0);
|
||||
// IsoConnectionParameters_setLocalApTitle(parameters, NULL, 0);
|
||||
TSelector localTSelector = { 3, { 0x00, 0x01, 0x02 } };
|
||||
TSelector remoteTSelector = { 2, { 0x00, 0x01 } };
|
||||
|
||||
SSelector sSelector1 = { 2, { 0, 1 } };
|
||||
SSelector sSelector2 = { 5, { 0, 1, 2, 3, 4 } };
|
||||
TSelector localTSelector = { 3, { 0x00, 0x01, 0x02 } };
|
||||
TSelector remoteTSelector = { 2, { 0x00, 0x01 } };
|
||||
|
||||
SSelector sSelector1 = {2, { 0, 1 } };
|
||||
SSelector sSelector2 = {5, { 0, 1, 2, 3, 4 } };
|
||||
|
||||
|
||||
/* change parameters for presentation, session and transport layers */
|
||||
IsoConnectionParameters_setRemoteAddresses(parameters, 0x12345678, sSelector1, localTSelector);
|
||||
IsoConnectionParameters_setLocalAddresses(parameters, 0x87654321, sSelector2, remoteTSelector);
|
||||
IsoConnectionParameters_setRemoteAddresses(parameters, 0x12345678, sSelector1, localTSelector);
|
||||
IsoConnectionParameters_setLocalAddresses(parameters, 0x87654321, sSelector2 , remoteTSelector);
|
||||
|
||||
char* password = "top secret";
|
||||
|
||||
/* use authentication */
|
||||
AcseAuthenticationParameter auth = AcseAuthenticationParameter_create();
|
||||
AcseAuthenticationParameter_setAuthMechanism(auth, ACSE_AUTH_PASSWORD);
|
||||
AcseAuthenticationParameter_setPassword(auth, password);
|
||||
AcseAuthenticationParameter auth = (AcseAuthenticationParameter) calloc(1, sizeof(struct sAcseAuthenticationParameter));
|
||||
auth->mechanism = ACSE_AUTH_PASSWORD;
|
||||
auth->value.password.octetString = (uint8_t*) password;
|
||||
auth->value.password.passwordLength = strlen(password);
|
||||
|
||||
IsoConnectionParameters_setAcseAuthenticationParameter(parameters, auth);
|
||||
|
||||
|
@ -82,8 +84,6 @@ main(int argc, char** argv)
|
|||
}
|
||||
|
||||
IedConnection_destroy(con);
|
||||
|
||||
AcseAuthenticationParameter_destroy(auth);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
set(iec61850_client_example_files_SRCS
|
||||
file-tool.c
|
||||
client_example_files.c
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
|
@ -8,10 +8,10 @@ set_source_files_properties(${iec61850_client_example_files_SRCS}
|
|||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(MSVC)
|
||||
|
||||
add_executable(file-tool
|
||||
add_executable(iec61850_client_example_files
|
||||
${iec61850_client_example_files_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(file-tool
|
||||
target_link_libraries(iec61850_client_example_files
|
||||
iec61850
|
||||
)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = file-tool
|
||||
PROJECT_SOURCES = file-tool.c
|
||||
PROJECT_BINARY_NAME = client_example_files
|
||||
PROJECT_SOURCES = client_example_files.c
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
|
108
examples/iec61850_client_example_files/client_example_files.c
Normal file
108
examples/iec61850_client_example_files/client_example_files.c
Normal file
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* client_example_files.c
|
||||
*
|
||||
* This example demonstrates the usage of the file services
|
||||
*
|
||||
* - How to browse the file system of the server
|
||||
* - How to download a file from the server
|
||||
*
|
||||
* Note: intended to be used with server_example3
|
||||
*
|
||||
*/
|
||||
|
||||
#include "iec61850_client.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "hal_thread.h"
|
||||
|
||||
#define MAX_BUFFER_SIZE 2000000
|
||||
|
||||
static uint8_t downloadBuffer[MAX_BUFFER_SIZE];
|
||||
static int bufferPosition = 0;
|
||||
|
||||
static bool
|
||||
downloadHandler(void* parameter, uint8_t* buffer, uint32_t bytesRead)
|
||||
{
|
||||
printf("received %i bytes\n", bytesRead);
|
||||
|
||||
if (bufferPosition + bytesRead < MAX_BUFFER_SIZE) {
|
||||
memcpy(downloadBuffer + bufferPosition, buffer, bytesRead);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
MmsConnection mmsCon = IedConnection_getMmsConnection(con);
|
||||
|
||||
MmsConnection_setLocalDetail(mmsCon, 800);
|
||||
|
||||
IedConnection_connect(con, &error, hostname, tcpPort);
|
||||
|
||||
if (error == IED_ERROR_OK) {
|
||||
|
||||
/* Get the root directory */
|
||||
LinkedList rootDirectory =
|
||||
IedConnection_getFileDirectory(con, &error, NULL);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("Error retrieving file directory\n");
|
||||
goto abort_connection;
|
||||
}
|
||||
|
||||
|
||||
LinkedList directoryEntry = LinkedList_getNext(rootDirectory);
|
||||
|
||||
while (directoryEntry != NULL) {
|
||||
|
||||
FileDirectoryEntry entry = (FileDirectoryEntry) directoryEntry->data;
|
||||
|
||||
printf("%s %i\n", FileDirectoryEntry_getFileName(entry), FileDirectoryEntry_getFileSize(entry));
|
||||
|
||||
directoryEntry = LinkedList_getNext(directoryEntry);
|
||||
}
|
||||
|
||||
|
||||
/* Download a file from the server */
|
||||
IedConnection_getFile(con, &error, "IEDSERVER.BIN", downloadHandler, NULL);
|
||||
|
||||
if (error != IED_ERROR_OK)
|
||||
printf("Failed to get file!\n");
|
||||
|
||||
/* Delete file at server */
|
||||
IedConnection_deleteFile(con, &error, "IEDSERVER.BIN");
|
||||
|
||||
if (error != IED_ERROR_OK)
|
||||
printf("Failed to delete file! (code=%i)\n", error);
|
||||
|
||||
abort_connection:
|
||||
|
||||
IedConnection_abort(con, &error);
|
||||
}
|
||||
else {
|
||||
printf("Failed to connect to %s:%i\n", hostname, tcpPort);
|
||||
}
|
||||
|
||||
IedConnection_destroy(con);
|
||||
}
|
||||
|
||||
|
|
@ -1,263 +0,0 @@
|
|||
/*
|
||||
* file-tool.c
|
||||
*
|
||||
* This example demonstrates the usage of the file services
|
||||
*
|
||||
* - How to browse the file system of the server
|
||||
* - How to download a file from the server
|
||||
*
|
||||
* Note: intended to be used with server_example3 or server_example_files
|
||||
*
|
||||
* Note: DOES NOT WORK WITH VISUAL STUDIO because of libgen.h
|
||||
*
|
||||
*/
|
||||
|
||||
#include "iec61850_client.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <libgen.h>
|
||||
|
||||
static char* hostname = "localhost";
|
||||
static int tcpPort = 102;
|
||||
static char* filename = NULL;
|
||||
|
||||
typedef enum {
|
||||
FileOperationType_None = 0,
|
||||
FileOperationType_Dir,
|
||||
FileOperationType_Info,
|
||||
FileOperationType_Del,
|
||||
FileOperationType_Get,
|
||||
FileOperationType_Set
|
||||
} FileOperationType;
|
||||
|
||||
static FileOperationType operation = FileOperationType_None;
|
||||
|
||||
|
||||
|
||||
static bool
|
||||
downloadHandler(void* parameter, uint8_t* buffer, uint32_t bytesRead)
|
||||
{
|
||||
FILE* fp = (FILE*) parameter;
|
||||
|
||||
printf("received %i bytes\n", bytesRead);
|
||||
|
||||
if (fwrite(buffer, bytesRead, 1, fp) == 1)
|
||||
return true;
|
||||
else {
|
||||
printf("Failed to write local file!\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
printHelp()
|
||||
{
|
||||
printf("file-tool [options] <operation> [<parameters>]\n");
|
||||
printf(" Options:\n");
|
||||
printf(" -h <hostname/IP>\n");
|
||||
printf(" -p portnumber\n");
|
||||
printf(" Operations\n");
|
||||
printf(" dir - show directory\n");
|
||||
printf(" info <filename> - show file info\n");
|
||||
printf(" del <filename> - delete file\n");
|
||||
printf(" get <filename> - get file\n");
|
||||
printf(" set <filename> - set file\n");
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
parseOptions(int argc, char** argv)
|
||||
{
|
||||
int currentArgc = 1;
|
||||
|
||||
int retVal = 0;
|
||||
|
||||
while (currentArgc < argc) {
|
||||
if (strcmp(argv[currentArgc], "-h") == 0) {
|
||||
hostname = argv[++currentArgc];
|
||||
}
|
||||
else if (strcmp(argv[currentArgc], "-p") == 0) {
|
||||
tcpPort = atoi(argv[++currentArgc]);
|
||||
}
|
||||
else if (strcmp(argv[currentArgc], "del") == 0) {
|
||||
operation = FileOperationType_Del;
|
||||
filename = argv[++currentArgc];
|
||||
}
|
||||
else if (strcmp(argv[currentArgc], "dir") == 0) {
|
||||
operation = FileOperationType_Dir;
|
||||
}
|
||||
else if (strcmp(argv[currentArgc], "info") == 0) {
|
||||
operation = FileOperationType_Info;
|
||||
filename = argv[++currentArgc];
|
||||
}
|
||||
else if (strcmp(argv[currentArgc], "get") == 0) {
|
||||
operation = FileOperationType_Get;
|
||||
filename = argv[++currentArgc];
|
||||
}
|
||||
else if (strcmp(argv[currentArgc], "set") == 0) {
|
||||
operation = FileOperationType_Set;
|
||||
filename = argv[++currentArgc];
|
||||
}
|
||||
else {
|
||||
printf("Unknown operation!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
currentArgc++;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
void
|
||||
showDirectory(IedConnection con)
|
||||
{
|
||||
IedClientError error;
|
||||
|
||||
/* Get the root directory */
|
||||
LinkedList rootDirectory =
|
||||
IedConnection_getFileDirectory(con, &error, NULL);
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("Error retrieving file directory\n");
|
||||
}
|
||||
else {
|
||||
LinkedList directoryEntry = LinkedList_getNext(rootDirectory);
|
||||
|
||||
while (directoryEntry != NULL) {
|
||||
|
||||
FileDirectoryEntry entry = (FileDirectoryEntry) directoryEntry->data;
|
||||
|
||||
printf("%s %i\n", FileDirectoryEntry_getFileName(entry), FileDirectoryEntry_getFileSize(entry));
|
||||
|
||||
directoryEntry = LinkedList_getNext(directoryEntry);
|
||||
}
|
||||
|
||||
LinkedList_destroyDeep(rootDirectory, (LinkedListValueDeleteFunction) FileDirectoryEntry_destroy);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
getFile(IedConnection con)
|
||||
{
|
||||
IedClientError error;
|
||||
|
||||
char* bname = strdup(filename);
|
||||
|
||||
char* localFilename = basename(bname);
|
||||
|
||||
FILE* fp = fopen(localFilename, "w");
|
||||
|
||||
if (fp != NULL) {
|
||||
|
||||
/* Download a file from the server */
|
||||
IedConnection_getFile(con, &error, filename, downloadHandler, (void*) fp);
|
||||
|
||||
if (error != IED_ERROR_OK)
|
||||
printf("Failed to get file!\n");
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
else
|
||||
printf("Failed to open file %s\n", localFilename);
|
||||
|
||||
free(bname);
|
||||
}
|
||||
|
||||
void
|
||||
setFile(IedConnection con)
|
||||
{
|
||||
IedClientError error;
|
||||
|
||||
char* dirc = strdup(filename);
|
||||
char* basec = strdup(filename);
|
||||
|
||||
char* localDirName = dirname(dirc);
|
||||
char* localFileName = basename(basec);
|
||||
|
||||
printf("local dir: %s\n", localDirName);
|
||||
printf("local file: %s\n", localFileName);
|
||||
|
||||
/* IedConnection_setFilestoreBasepath requires the file separator at the end! */
|
||||
strcpy(dirc, localDirName);
|
||||
strcat(dirc, "/");
|
||||
|
||||
printf("filestore basepath: %s\n", dirc);
|
||||
|
||||
IedConnection_setFilestoreBasepath(con, dirc);
|
||||
|
||||
IedConnection_setFile(con, &error, localFileName, localFileName);
|
||||
|
||||
if (error != IED_ERROR_OK)
|
||||
printf("Failed to set file! (code=%i)\n", error);
|
||||
|
||||
free(dirc);
|
||||
free(basec);
|
||||
}
|
||||
|
||||
void
|
||||
deleteFile(IedConnection con)
|
||||
{
|
||||
IedClientError error;
|
||||
|
||||
/* Delete file at server */
|
||||
IedConnection_deleteFile(con, &error, filename);
|
||||
|
||||
if (error != IED_ERROR_OK)
|
||||
printf("Failed to delete file! (code=%i)\n", error);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
if (argc < 2) {
|
||||
printHelp();
|
||||
return 0;
|
||||
}
|
||||
|
||||
parseOptions(argc, argv);
|
||||
|
||||
if (operation == FileOperationType_None) {
|
||||
printHelp();
|
||||
return 0;
|
||||
}
|
||||
|
||||
IedClientError error;
|
||||
|
||||
IedConnection con = IedConnection_create();
|
||||
|
||||
IedConnection_connect(con, &error, hostname, tcpPort);
|
||||
|
||||
if (error == IED_ERROR_OK) {
|
||||
|
||||
|
||||
switch (operation) {
|
||||
case FileOperationType_Dir:
|
||||
showDirectory(con);
|
||||
break;
|
||||
case FileOperationType_Get:
|
||||
getFile(con);
|
||||
break;
|
||||
case FileOperationType_Del:
|
||||
deleteFile(con);
|
||||
break;
|
||||
case FileOperationType_Info:
|
||||
break;
|
||||
case FileOperationType_Set:
|
||||
setFile(con);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
IedConnection_abort(con, &error);
|
||||
}
|
||||
else {
|
||||
printf("Failed to connect to %s:%i\n", hostname, tcpPort);
|
||||
}
|
||||
|
||||
IedConnection_destroy(con);
|
||||
}
|
||||
|
||||
|
|
@ -132,9 +132,7 @@ int main(int argc, char** argv) {
|
|||
|
||||
Thread_sleep(1000);
|
||||
|
||||
/* Trigger GI Report */
|
||||
ClientReportControlBlock_setGI(rcb, true);
|
||||
IedConnection_setRCBValues(con, &error, rcb, RCB_ELEMENT_GI, true);
|
||||
IedConnection_triggerGIReport(con, &error, "simpleIOGenericIO/LLN0.RP.EventsRCB01");
|
||||
|
||||
if (error != IED_ERROR_OK) {
|
||||
printf("Error triggering a GI report (code: %i)\n", error);
|
||||
|
|
17
examples/mms_client_example1/CMakeLists.txt
Normal file
17
examples/mms_client_example1/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
set(mms_client_example1_SRCS
|
||||
mms_client_example1.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${mms_client_example1_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(mms_client_example1
|
||||
${mms_client_example1_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(mms_client_example1
|
||||
iec61850
|
||||
)
|
17
examples/mms_client_example1/Makefile
Normal file
17
examples/mms_client_example1/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = mms_client_example1
|
||||
PROJECT_SOURCES = mms_client_example1.c
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
51
examples/mms_client_example1/mms_client_example1.c
Normal file
51
examples/mms_client_example1/mms_client_example1.c
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* mms_client_example.c
|
||||
*
|
||||
* This is the most simple example. It illustrates how to create an MmsConnection
|
||||
* object and connect to a MMS server.
|
||||
*
|
||||
* 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 <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "mms_client_connection.h"
|
||||
#include "hal_thread.h"
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
MmsConnection con = MmsConnection_create();
|
||||
|
||||
MmsError mmsError;
|
||||
|
||||
if (MmsConnection_connect(con, &mmsError, "localhost", 102)) {
|
||||
// add application code here
|
||||
|
||||
Thread_sleep(1000);
|
||||
|
||||
printf("Send abort\n");
|
||||
MmsConnection_abort(con, &mmsError);
|
||||
}
|
||||
else
|
||||
printf("Connect to server failed!\n");
|
||||
|
||||
MmsConnection_destroy(con);
|
||||
}
|
||||
|
17
examples/mms_client_example2/CMakeLists.txt
Normal file
17
examples/mms_client_example2/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
set(mms_client_example2_SRCS
|
||||
mms_client_example2.c
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
set_source_files_properties(${mms_client_example2_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(MSVC)
|
||||
|
||||
add_executable(mms_client_example2
|
||||
${mms_client_example2_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(mms_client_example2
|
||||
iec61850
|
||||
)
|
17
examples/mms_client_example2/Makefile
Normal file
17
examples/mms_client_example2/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = mms_client_example2
|
||||
PROJECT_SOURCES = mms_client_example2.c
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
64
examples/mms_client_example2/mms_client_example2.c
Normal file
64
examples/mms_client_example2/mms_client_example2.c
Normal file
|
@ -0,0 +1,64 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "mms_client_connection.h"
|
||||
|
||||
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]);
|
||||
|
||||
MmsConnection con = MmsConnection_create();
|
||||
|
||||
MmsError mmsError;
|
||||
|
||||
/* Set maximum MMS PDU size (local detail) to 2000 byte */
|
||||
MmsConnection_setLocalDetail(con, 2000);
|
||||
|
||||
if (!MmsConnection_connect(con, &mmsError, hostname, tcpPort)) {
|
||||
printf("MMS connect failed!\n");
|
||||
goto exit;
|
||||
}
|
||||
else
|
||||
printf("MMS connected.\n\n");
|
||||
|
||||
printf("Domains present on server:\n--------------------------\n");
|
||||
LinkedList nameList = MmsConnection_getDomainNames(con, &mmsError);
|
||||
LinkedList_printStringList(nameList);
|
||||
printf("\n");
|
||||
|
||||
LinkedList element = nameList;
|
||||
|
||||
while ((element = LinkedList_getNext(element)) != NULL) {
|
||||
printf("\nNamed variables in domain: %s\n-------------------------------------------------\n", (char*) element->data);
|
||||
|
||||
LinkedList variableList = MmsConnection_getDomainVariableNames(con, &mmsError, (char*) element->data);
|
||||
|
||||
LinkedList_printStringList(variableList);
|
||||
|
||||
LinkedList_destroy(variableList);
|
||||
|
||||
printf("\nNamed variable lists (data sets) in domain: %s\n", (char*) element->data);
|
||||
|
||||
LinkedList dataSetList = MmsConnection_getDomainVariableListNames(con, &mmsError, (char*) element->data);
|
||||
|
||||
LinkedList_printStringList(dataSetList);
|
||||
|
||||
LinkedList_destroy(dataSetList);
|
||||
|
||||
}
|
||||
|
||||
LinkedList_destroy(nameList);
|
||||
|
||||
exit:
|
||||
MmsConnection_destroy(con);
|
||||
}
|
||||
|
17
examples/mms_client_example3/CMakeLists.txt
Normal file
17
examples/mms_client_example3/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
set(mms_client_example3_SRCS
|
||||
mms_client_example3.c
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
set_source_files_properties(${mms_client_example3_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(MSVC)
|
||||
|
||||
add_executable(mms_client_example3
|
||||
${mms_client_example3_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(mms_client_example3
|
||||
iec61850
|
||||
)
|
17
examples/mms_client_example3/Makefile
Normal file
17
examples/mms_client_example3/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = mms_client_example3
|
||||
PROJECT_SOURCES = mms_client_example3.c
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
41
examples/mms_client_example3/mms_client_example3.c
Normal file
41
examples/mms_client_example3/mms_client_example3.c
Normal file
|
@ -0,0 +1,41 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "mms_client_connection.h"
|
||||
|
||||
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]);
|
||||
|
||||
MmsConnection con = MmsConnection_create();
|
||||
|
||||
MmsError error;
|
||||
|
||||
if (!MmsConnection_connect(con, &error, hostname, tcpPort)) {
|
||||
printf("MMS connect failed!\n");
|
||||
goto exit;
|
||||
}
|
||||
else
|
||||
printf("MMS connected.\n\n");
|
||||
|
||||
MmsValue* value =
|
||||
MmsConnection_readVariable(con, &error, "simpleIOGenericIO", "LLN0$GO");
|
||||
|
||||
if (value == NULL)
|
||||
printf("reading value failed!\n");
|
||||
else
|
||||
MmsValue_delete(value);
|
||||
|
||||
exit:
|
||||
MmsConnection_destroy(con);
|
||||
}
|
||||
|
17
examples/mms_client_example4/CMakeLists.txt
Normal file
17
examples/mms_client_example4/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
set(mms_client_example4_SRCS
|
||||
mms_client_example4.c
|
||||
)
|
||||
|
||||
IF(MSVC)
|
||||
set_source_files_properties(${mms_client_example4_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(MSVC)
|
||||
|
||||
add_executable(mms_client_example4
|
||||
${mms_client_example4_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(mms_client_example4
|
||||
iec61850
|
||||
)
|
17
examples/mms_client_example4/Makefile
Normal file
17
examples/mms_client_example4/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = mms_client_example4
|
||||
PROJECT_SOURCES = mms_client_example4.c
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
87
examples/mms_client_example4/mms_client_example4.c
Normal file
87
examples/mms_client_example4/mms_client_example4.c
Normal file
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* mms_client_example.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 <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "mms_client_connection.h"
|
||||
|
||||
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]);
|
||||
|
||||
MmsConnection con = MmsConnection_create();
|
||||
|
||||
MmsError mmsError;
|
||||
|
||||
char* password = "testpw";
|
||||
|
||||
/* use authentication */
|
||||
AcseAuthenticationParameter auth = (AcseAuthenticationParameter) calloc(1, sizeof(struct sAcseAuthenticationParameter));
|
||||
auth->mechanism = ACSE_AUTH_PASSWORD;
|
||||
auth->value.password.octetString= (uint8_t*) password;
|
||||
auth->value.password.passwordLength = strlen(password);
|
||||
|
||||
IsoConnectionParameters connectionParameters =
|
||||
MmsConnection_getIsoConnectionParameters(con);
|
||||
|
||||
IsoConnectionParameters_setAcseAuthenticationParameter(connectionParameters, auth);
|
||||
|
||||
if (!MmsConnection_connect(con, &mmsError, hostname, tcpPort)) {
|
||||
printf("MMS connect failed!\n");
|
||||
goto exit;
|
||||
}
|
||||
else
|
||||
printf("MMS connected.\n\n");
|
||||
|
||||
printf("Domains present on server:\n--------------------------\n");
|
||||
LinkedList nameList = MmsConnection_getDomainNames(con, &mmsError);
|
||||
LinkedList_printStringList(nameList);
|
||||
LinkedList_destroy(nameList);
|
||||
printf("\n");
|
||||
|
||||
|
||||
printf("Named variables for domain SampleIEDDevice1:\n--------------------------------------------\n");
|
||||
nameList = MmsConnection_getDomainVariableNames(con, &mmsError, "SampleIEDDevice1");
|
||||
LinkedList_printStringList(nameList);
|
||||
LinkedList_destroy(nameList);
|
||||
printf("\n");
|
||||
|
||||
printf("Data sets for domain SampleIEDDevice1:\n--------------------------------------------\n");
|
||||
nameList = MmsConnection_getDomainVariableListNames(con, &mmsError, "SampleIEDDevice1");
|
||||
LinkedList_printStringList(nameList);
|
||||
LinkedList_destroy(nameList);
|
||||
printf("\n");
|
||||
|
||||
exit:
|
||||
MmsConnection_destroy(con);
|
||||
}
|
||||
|
17
examples/mms_client_example5/CMakeLists.txt
Normal file
17
examples/mms_client_example5/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
set(mms_client_example5_SRCS
|
||||
mms_client_example5.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${mms_client_example5_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(mms_client_example5
|
||||
${mms_client_example5_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(mms_client_example5
|
||||
iec61850
|
||||
)
|
17
examples/mms_client_example5/Makefile
Normal file
17
examples/mms_client_example5/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = mms_client_example5
|
||||
PROJECT_SOURCES = mms_client_example5.c
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
50
examples/mms_client_example5/mms_client_example5.c
Normal file
50
examples/mms_client_example5/mms_client_example5.c
Normal file
|
@ -0,0 +1,50 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "mms_client_connection.h"
|
||||
|
||||
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]);
|
||||
|
||||
MmsConnection con = MmsConnection_create();
|
||||
|
||||
MmsError error;
|
||||
|
||||
if (!MmsConnection_connect(con, &error, hostname, tcpPort)) {
|
||||
printf("MMS connect failed!\n");
|
||||
goto exit;
|
||||
}
|
||||
else
|
||||
printf("MMS connected.\n\n");
|
||||
|
||||
LinkedList dataSetEntries = LinkedList_create();
|
||||
|
||||
MmsVariableAccessSpecification* dataSetEntry =
|
||||
MmsVariableAccessSpecification_create("BayControllerQ", "QA1CSWI1$ST$Pos");
|
||||
|
||||
LinkedList_add(dataSetEntries, (void*) dataSetEntry);
|
||||
|
||||
dataSetEntry =
|
||||
MmsVariableAccessSpecification_create("BayControllerQ", "QA1XCBR1$ST$Pos");
|
||||
|
||||
LinkedList_add(dataSetEntries, (void*) dataSetEntry);
|
||||
|
||||
MmsConnection_defineNamedVariableList(con, &error, "BayControllerQ", "LLN0$LIBIEC61850_CLIENT", dataSetEntries);
|
||||
|
||||
/* delete list and all elements */
|
||||
LinkedList_destroy(dataSetEntries);
|
||||
|
||||
exit:
|
||||
MmsConnection_destroy(con);
|
||||
}
|
||||
|
|
@ -4,7 +4,6 @@
|
|||
#include <unistd.h>
|
||||
#include "string_utilities.h"
|
||||
#include "mms_client_connection.h"
|
||||
#include "conversions.h"
|
||||
|
||||
static void
|
||||
print_help()
|
||||
|
@ -21,9 +20,7 @@ print_help()
|
|||
printf("-a <domain_name> specify domain for read or write command\n");
|
||||
printf("-f show file list\n");
|
||||
printf("-g <filename> get file attributes\n");
|
||||
printf("-x <filename> delete file\n");
|
||||
printf("-j <domainName/journalName> read journal\n");
|
||||
printf("-v <variable list_name> read domain variable list\n");
|
||||
printf("-m print raw MMS messages\n");
|
||||
}
|
||||
|
||||
|
@ -99,7 +96,7 @@ printRawMmsMessage(void* parameter, uint8_t* message, int messageLength, bool re
|
|||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
char* hostname = StringUtils_copyString("localhost");
|
||||
char* hostname = copyString("localhost");
|
||||
int tcpPort = 102;
|
||||
int maxPduSize = 65000;
|
||||
|
||||
|
@ -117,19 +114,17 @@ int main(int argc, char** argv) {
|
|||
int getFileAttributes = 0;
|
||||
int readJournal = 0;
|
||||
int printRawMmsMessages = 0;
|
||||
int deleteFile = 0;
|
||||
int readVariableList = 0;
|
||||
|
||||
int c;
|
||||
|
||||
while ((c = getopt(argc, argv, "mifdh:p:l:t:a:r:g:j:x:v:")) != -1)
|
||||
while ((c = getopt(argc, argv, "mifdh:p:l:t:a:r:g:j:")) != -1)
|
||||
switch (c) {
|
||||
case 'm':
|
||||
printRawMmsMessages = 1;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
hostname = StringUtils_copyString(optarg);
|
||||
hostname = copyString(optarg);
|
||||
break;
|
||||
case 'p':
|
||||
tcpPort = atoi(optarg);
|
||||
|
@ -145,35 +140,27 @@ int main(int argc, char** argv) {
|
|||
break;
|
||||
case 't':
|
||||
getDeviceDirectory = 1;
|
||||
domainName = StringUtils_copyString(optarg);
|
||||
domainName = copyString(optarg);
|
||||
break;
|
||||
case 'a':
|
||||
readWriteHasDomain = 1;
|
||||
domainName = StringUtils_copyString(optarg);
|
||||
domainName = copyString(optarg);
|
||||
break;
|
||||
case 'r':
|
||||
readVariable = 1;
|
||||
variableName = StringUtils_copyString(optarg);
|
||||
variableName = copyString(optarg);
|
||||
break;
|
||||
case 'v':
|
||||
readVariableList = 1;
|
||||
variableName = StringUtils_copyString(optarg);
|
||||
break;
|
||||
case 'f':
|
||||
showFileList = 1;
|
||||
break;
|
||||
case 'g':
|
||||
getFileAttributes = 1;
|
||||
filename = StringUtils_copyString(optarg);
|
||||
break;
|
||||
case 'x':
|
||||
deleteFile = 1;
|
||||
filename = StringUtils_copyString(optarg);
|
||||
filename = copyString(optarg);
|
||||
break;
|
||||
|
||||
case 'j':
|
||||
readJournal = 1;
|
||||
journalName = StringUtils_copyString(optarg);
|
||||
journalName = copyString(optarg);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -348,21 +335,6 @@ int main(int argc, char** argv) {
|
|||
printf("Reading VMD scope variable not yet supported!\n");
|
||||
}
|
||||
|
||||
if (readVariableList) {
|
||||
if (readWriteHasDomain) {
|
||||
MmsValue* variables = MmsConnection_readNamedVariableListValues(con, &error, domainName, variableName, true);
|
||||
|
||||
if (error != MMS_ERROR_NONE) {
|
||||
printf("Reading variable failed: (ERROR %i)\n", error);
|
||||
}
|
||||
else {
|
||||
printf("Read SUCCESS\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
printf("Reading VMD scope variable list not yet supported!\n");
|
||||
}
|
||||
|
||||
if (showFileList) {
|
||||
char lastName[300];
|
||||
lastName[0] = 0;
|
||||
|
@ -378,19 +350,7 @@ int main(int argc, char** argv) {
|
|||
MmsConnection_getFileDirectory(con, &error, filename, NULL, mmsGetFileAttributeHandler, NULL);
|
||||
}
|
||||
|
||||
if (deleteFile) {
|
||||
MmsConnection_fileDelete(con, &error, filename);
|
||||
|
||||
if (error != MMS_ERROR_NONE) {
|
||||
printf("Delete file failed: (ERROR %i)\n", error);
|
||||
}
|
||||
else {
|
||||
printf("File deleted\n");
|
||||
}
|
||||
}
|
||||
|
||||
exit:
|
||||
free(hostname);
|
||||
MmsConnection_destroy(con);
|
||||
}
|
||||
|
||||
|
|
21
examples/server_example1/CMakeLists.txt
Normal file
21
examples/server_example1/CMakeLists.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example1_SRCS
|
||||
server_example1.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example1_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example1
|
||||
${server_example1_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example1
|
||||
iec61850
|
||||
)
|
|
@ -1,7 +1,7 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = server_example_simple
|
||||
PROJECT_SOURCES = server_example_simple.c
|
||||
PROJECT_BINARY_NAME = server_example1
|
||||
PROJECT_SOURCES = server_example1.c
|
||||
PROJECT_SOURCES += static_model.c
|
||||
|
||||
PROJECT_ICD_FILE = sampleModel_with_dataset.icd
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* server_example_simple.c
|
||||
* server_example1.c
|
||||
*
|
||||
* Copyright 2013 Michael Zillgith
|
||||
*
|
||||
|
@ -27,7 +27,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../server_example_simple/static_model.h"
|
||||
#include "static_model.h"
|
||||
|
||||
/* import IEC 61850 device model created from SCL-File */
|
||||
extern IedModel iedModel;
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* automatically generated from sampleModel_with_dataset.icd
|
||||
*/
|
||||
#include "../server_example_simple/static_model.h"
|
||||
#include "static_model.h"
|
||||
|
||||
static void initializeValues();
|
||||
|
21
examples/server_example2/CMakeLists.txt
Normal file
21
examples/server_example2/CMakeLists.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example2_SRCS
|
||||
server_example2.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example2_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example2
|
||||
${server_example2_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example2
|
||||
iec61850
|
||||
)
|
24
examples/server_example2/Makefile
Normal file
24
examples/server_example2/Makefile
Normal file
|
@ -0,0 +1,24 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = server_example2
|
||||
PROJECT_SOURCES = server_example2.c
|
||||
PROJECT_SOURCES += static_model.c
|
||||
|
||||
PROJECT_ICD_FILE = complexModel.icd
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
model: $(PROJECT_ICD_FILE)
|
||||
java -jar $(LIBIEC_HOME)/tools/model_generator/genmodel.jar $(PROJECT_ICD_FILE)
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDFLAGS) $(LDLIBS)
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
||||
|
91
examples/server_example2/server_example2.c
Normal file
91
examples/server_example2/server_example2.c
Normal file
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* 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_lockDataModel(iedServer);
|
||||
|
||||
IedServer_updateUTCTimeAttributeValue(iedServer, IEDMODEL_Inverter_MMXU1_TotW_t, timeval);
|
||||
IedServer_updateFloatAttributeValue(iedServer, IEDMODEL_Inverter_MMXU1_TotW_mag_f, power);
|
||||
|
||||
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() */
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* automatically generated from complexModel.icd
|
||||
*/
|
||||
#include "../server_example_write_handler/static_model.h"
|
||||
#include "static_model.h"
|
||||
|
||||
static void initializeValues();
|
||||
|
21
examples/server_example3/CMakeLists.txt
Normal file
21
examples/server_example3/CMakeLists.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example3_SRCS
|
||||
server_example3.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example3_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example3
|
||||
${server_example3_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example3
|
||||
iec61850
|
||||
)
|
|
@ -1,7 +1,7 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = server_example_files
|
||||
PROJECT_SOURCES = server_example_files.c
|
||||
PROJECT_BINARY_NAME = server_example3
|
||||
PROJECT_SOURCES = server_example3.c
|
||||
PROJECT_SOURCES += static_model.c
|
||||
|
||||
PROJECT_ICD_FILE = simpleIO_direct_control.icd
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* server_example_basic_io.c
|
||||
* server_example3.c
|
||||
*
|
||||
* - How to use simple control models
|
||||
* - How to serve analog measurement data
|
||||
|
@ -12,7 +12,7 @@
|
|||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "../server_example_basic_io/static_model.h"
|
||||
#include "static_model.h"
|
||||
|
||||
/* import IEC 61850 device model created from SCL-File */
|
||||
extern IedModel iedModel;
|
||||
|
@ -85,10 +85,6 @@ main(int argc, char** argv)
|
|||
|
||||
iedServer = IedServer_create(&iedModel);
|
||||
|
||||
/* Set the base path for the MMS file services */
|
||||
MmsServer mmsServer = IedServer_getMmsServer(iedServer);
|
||||
MmsServer_setFilestoreBasepath(mmsServer, "./vmd-filestore/");
|
||||
|
||||
/* Install handler for operate command */
|
||||
IedServer_setControlHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO1,
|
||||
(ControlHandler) controlHandlerForBinaryOutput,
|
|
@ -87,9 +87,9 @@
|
|||
<TrgOps dchg="true" qchg="true"/>
|
||||
</LogControl>
|
||||
|
||||
<LogControl name="GeneralLog" logName="">
|
||||
<LogControl name="GeneralLog" datSet="" logName="">
|
||||
<TrgOps dchg="true" qchg="true"/>
|
||||
</LogControl>
|
||||
</LogControl>
|
||||
|
||||
|
||||
<Log />
|
|
@ -1944,13 +1944,13 @@ 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", 4294967295, 24, 239, 50, 1000, &iedModel_GenericIO_LLN0_report1};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 24, 239, 50, 1000, &iedModel_GenericIO_LLN0_report2};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 24, 239, 50, 1000, &iedModel_GenericIO_LLN0_report3};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 24, 239, 50, 1000, &iedModel_GenericIO_LLN0_report4};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0, "Measurements01", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, &iedModel_GenericIO_LLN0_report5};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report5 = {&iedModel_GenericIO_LLN0, "Measurements02", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, &iedModel_GenericIO_LLN0_report6};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, "Measurements03", "Measurements", true, "Measurements", 1, 16, 239, 50, 1000, NULL};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events1", false, "Events", 4294967295, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report1};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report1 = {&iedModel_GenericIO_LLN0, "EventsIndexed01", "Events2", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report2};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report2 = {&iedModel_GenericIO_LLN0, "EventsIndexed02", "Events2", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report3};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report3 = {&iedModel_GenericIO_LLN0, "EventsIndexed03", "Events2", false, "Events", 1, 24, 111, 50, 1000, &iedModel_GenericIO_LLN0_report4};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report4 = {&iedModel_GenericIO_LLN0, "Measurements01", "Measurements", true, "Measurements", 1, 16, 111, 50, 1000, &iedModel_GenericIO_LLN0_report5};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report5 = {&iedModel_GenericIO_LLN0, "Measurements02", "Measurements", true, "Measurements", 1, 16, 111, 50, 1000, &iedModel_GenericIO_LLN0_report6};
|
||||
ReportControlBlock iedModel_GenericIO_LLN0_report6 = {&iedModel_GenericIO_LLN0, "Measurements03", "Measurements", true, "Measurements", 1, 16, 111, 50, 1000, NULL};
|
||||
|
||||
|
||||
|
0
examples/server_example3/vmd-filestore/SYSTEM.BIN
Normal file
0
examples/server_example3/vmd-filestore/SYSTEM.BIN
Normal file
21
examples/server_example4/CMakeLists.txt
Normal file
21
examples/server_example4/CMakeLists.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example4_SRCS
|
||||
server_example4.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example4_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example4
|
||||
${server_example4_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example4
|
||||
iec61850
|
||||
)
|
|
@ -1,7 +1,7 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = server_example_password_auth
|
||||
PROJECT_SOURCES = server_example_password_auth.c
|
||||
PROJECT_BINARY_NAME = server_example4
|
||||
PROJECT_SOURCES = server_example4.c
|
||||
PROJECT_SOURCES += static_model.c
|
||||
|
||||
PROJECT_ICD_FILE = simpleIO_direct_control.icd
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* server_example_password_auth.c
|
||||
* server_example4.c
|
||||
*
|
||||
* Example server application with password authentication.
|
||||
*
|
||||
|
@ -15,11 +15,11 @@
|
|||
*/
|
||||
|
||||
#include "iec61850_server.h"
|
||||
#include "static_model.h"
|
||||
#include "hal_thread.h"
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "../server_example_password_auth/static_model.h"
|
||||
|
||||
/* import IEC 61850 device model created from SCL-File */
|
||||
extern IedModel iedModel;
|
||||
|
@ -37,32 +37,13 @@ void sigint_handler(int signalId)
|
|||
static char* password1 = "user1@testpw";
|
||||
static char* password2 = "user2@testpw";
|
||||
|
||||
static void printAppTitle(ItuObjectIdentifier* oid)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < oid->arcCount; i++) {
|
||||
printf("%i", oid->arc[i]);
|
||||
|
||||
if (i != (oid->arcCount - 1))
|
||||
printf(".");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the AcseAuthenticator callback function that is invoked on each client connection attempt.
|
||||
* When returning true the server stack accepts the client. Otherwise the connection is rejected.
|
||||
*
|
||||
* The security token can be used to pass an application specific object to other library callbacks
|
||||
*/
|
||||
static bool
|
||||
clientAuthenticator(void* parameter, AcseAuthenticationParameter authParameter, void** securityToken, IsoApplicationReference* appRef)
|
||||
clientAuthenticator(void* parameter, AcseAuthenticationParameter authParameter, void** securityToken)
|
||||
{
|
||||
printf("ACSE Authenticator:\n");
|
||||
printf(" client ap-title: "); printAppTitle(&(appRef->apTitle)); printf("\n");
|
||||
printf(" client ae-qualifier: %i\n", appRef->aeQualifier);
|
||||
|
||||
|
||||
if (authParameter->mechanism == ACSE_AUTH_PASSWORD) {
|
||||
if (authParameter->value.password.passwordLength == strlen(password1)) {
|
||||
if (memcmp(authParameter->value.password.octetString, password1,
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* automatically generated from simpleIO_direct_control.icd
|
||||
*/
|
||||
#include "../server_example_password_auth/static_model.h"
|
||||
#include "static_model.h"
|
||||
|
||||
static void initializeValues();
|
||||
|
21
examples/server_example5/CMakeLists.txt
Normal file
21
examples/server_example5/CMakeLists.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example5_SRCS
|
||||
server_example5.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example5_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example5
|
||||
${server_example5_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example5
|
||||
iec61850
|
||||
)
|
|
@ -1,7 +1,7 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = server_example_write_handler
|
||||
PROJECT_SOURCES = server_example_write_handler.c
|
||||
PROJECT_BINARY_NAME = server_example5
|
||||
PROJECT_SOURCES = server_example5.c
|
||||
PROJECT_SOURCES += static_model.c
|
||||
|
||||
PROJECT_ICD_FILE = complexModel.icd
|
347
examples/server_example5/complexModel.icd
Normal file
347
examples/server_example5/complexModel.icd
Normal file
|
@ -0,0 +1,347 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<SCL xmlns="http://www.iec.ch/61850/2003/SCL">
|
||||
<Header id="" />
|
||||
<IED name="ied1">
|
||||
<Services>
|
||||
<DynAssociation />
|
||||
<GetDirectory />
|
||||
<GetDataObjectDefinition />
|
||||
<GetDataSetValue />
|
||||
<DataSetDirectory />
|
||||
<ReadWrite />
|
||||
<GetCBValues />
|
||||
<ConfLNs fixPrefix="true" fixLnInst="true" />
|
||||
</Services>
|
||||
<AccessPoint name="accessPoint1">
|
||||
<Server>
|
||||
<Authentication password="true" />
|
||||
<LDevice inst="Inverter">
|
||||
<LN0 lnClass="LLN0" lnType="LLN02" inst="">
|
||||
<DataSet name="dataset1" desc="">
|
||||
<FCDA ldInst="Inverter" lnClass="LLN0" fc="ST" doName="Mod" daName="q" />
|
||||
<FCDA ldInst="Battery" lnClass="LLN0" fc="ST" doName="Mod" daName="q" />
|
||||
<FCDA ldInst="Inverter" lnClass="MMXU" fc="ST" lnInst="1" doName="Mod" daName="q" />
|
||||
<FCDA ldInst="Inverter" lnClass="MMXU" fc="CF" lnInst="1" doName="Mod" daName="ctlModel" />
|
||||
<FCDA ldInst="Inverter" lnClass="MMXU" fc="MX" lnInst="1" doName="TotW" daName="mag" />
|
||||
</DataSet>
|
||||
|
||||
<ReportControl name="rcb1" confRev="0" datSet="dataset1" rptID="ID" intgPd="0" bufTime="0">
|
||||
<TrgOps dchg="true" qchg="true" />
|
||||
<OptFields />
|
||||
</ReportControl>
|
||||
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN0>
|
||||
<LN lnClass="LPHD" lnType="LPHD2" inst="1" prefix="" />
|
||||
<LN lnClass="ZINV" lnType="ZINV3" inst="1" prefix="">
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN>
|
||||
<LN lnClass="MMXU" lnType="MMXU1" inst="1" prefix="">
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN>
|
||||
</LDevice>
|
||||
<LDevice inst="Battery">
|
||||
<LN0 lnClass="LLN0" lnType="LLN03" inst="">
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN0>
|
||||
<LN lnClass="LPHD" lnType="LPHD3" inst="1" prefix="" />
|
||||
<LN lnClass="ZBAT" lnType="ZBAT1" inst="1" prefix="">
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN>
|
||||
<LN lnClass="ZBTC" lnType="ZBTC1" inst="1" prefix="">
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN>
|
||||
</LDevice>
|
||||
<LDevice inst="Physical_Measurements">
|
||||
<LN0 lnClass="LLN0" lnType="LLN01" inst="">
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN0>
|
||||
<LN lnClass="LPHD" lnType="LPHD1" inst="1" prefix="" />
|
||||
</LDevice>
|
||||
</Server>
|
||||
</AccessPoint>
|
||||
</IED>
|
||||
<DataTypeTemplates>
|
||||
<LNodeType id="MMXU1" lnClass="MMXU" desc="Measurement">
|
||||
<DO name="Mod" type="INC_1_Mod" />
|
||||
<DO name="Beh" type="INS_1_Beh" />
|
||||
<DO name="Health" type="INS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_2_NamPlt" />
|
||||
<DO name="TotW" type="MV_1_Vol" />
|
||||
<DO name="TotVAr" type="MV_1_Vol" />
|
||||
<DO name="TotVA" type="MV_1_Vol" />
|
||||
<DO name="Hz" type="MV_1_Vol" />
|
||||
<DO name="PhV" type="WYE_1_PhV" />
|
||||
<DO name="A" type="WYE_1_PhV" />
|
||||
<DO name="W" type="WYE_1_W" />
|
||||
</LNodeType>
|
||||
<LNodeType id="ZBTC1" lnClass="ZBTC" desc="Battery charger">
|
||||
<DO name="Mod" type="ENC_1_Mod" />
|
||||
<DO name="Beh" type="ENS_1_Beh" />
|
||||
<DO name="Health" type="ENS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_2_NamPlt" />
|
||||
<DO name="BatChaSt" type="ENG_1_BatChaSt" />
|
||||
<DO name="BatChaPwr" type="ASG_1_BatChaPwr" />
|
||||
<DO name="BatChaMod" type="ENG_1_BatChaSt" />
|
||||
<DO name="ChaV" type="MV_1_Vol" />
|
||||
<DO name="ChaA" type="MV_1_Vol" />
|
||||
</LNodeType>
|
||||
<LNodeType id="ZBAT1" lnClass="ZBAT" desc="Battery">
|
||||
<DO name="Mod" type="INC_1_Mod" />
|
||||
<DO name="Beh" type="INS_1_Beh" />
|
||||
<DO name="Health" type="INS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_2_NamPlt" />
|
||||
<DO name="Vol" type="MV_1_Vol" />
|
||||
<DO name="Amp" type="MV_1_Vol" />
|
||||
</LNodeType>
|
||||
<LNodeType id="LPHD1" lnClass="LPHD" desc="Physical device information">
|
||||
<DO name="PhyNam" type="DPL_1_PhyNam" />
|
||||
<DO name="PhyHealth" type="INS_1_Beh" />
|
||||
<DO name="Proxy" type="SPS_1_Proxy" />
|
||||
</LNodeType>
|
||||
<LNodeType id="LLN01" lnClass="LLN0" desc="Logical node zero">
|
||||
<DO name="Mod" type="INC_1_Mod" />
|
||||
<DO name="Beh" type="INS_1_Beh" />
|
||||
<DO name="Health" type="INS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_1_NamPlt" />
|
||||
</LNodeType>
|
||||
<LNodeType id="LLN02" lnClass="LLN0" desc="Logical node zero">
|
||||
<DO name="Mod" type="INC_1_Mod" />
|
||||
<DO name="Beh" type="INS_1_Beh" />
|
||||
<DO name="Health" type="INS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_1_NamPlt" />
|
||||
</LNodeType>
|
||||
<LNodeType id="LPHD2" lnClass="LPHD" desc="Physical device information">
|
||||
<DO name="PhyNam" type="DPL_1_PhyNam" />
|
||||
<DO name="PhyHealth" type="INS_1_Beh" />
|
||||
<DO name="Proxy" type="SPS_1_Proxy" />
|
||||
</LNodeType>
|
||||
<LNodeType id="LLN03" lnClass="LLN0" desc="Logical node zero">
|
||||
<DO name="Mod" type="INC_1_Mod" />
|
||||
<DO name="Beh" type="INS_1_Beh" />
|
||||
<DO name="Health" type="INS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_1_NamPlt" />
|
||||
</LNodeType>
|
||||
<LNodeType id="LPHD3" lnClass="LPHD" desc="Physical device information">
|
||||
<DO name="PhyNam" type="DPL_1_PhyNam" />
|
||||
<DO name="PhyHealth" type="INS_1_Beh" />
|
||||
<DO name="Proxy" type="SPS_1_Proxy" />
|
||||
</LNodeType>
|
||||
<LNodeType id="ZINV3" lnClass="ZINV" desc="Inverter">
|
||||
<DO name="Mod" type="ENC_1_Mod" />
|
||||
<DO name="Beh" type="ENS_1_Beh" />
|
||||
<DO name="Health" type="ENS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_2_NamPlt" />
|
||||
<DO name="WRtg" type="ASG_1_WRtg" />
|
||||
<DO name="VarRtg" type="ASG_1_WRtg" />
|
||||
<DO name="ACTyp" type="ENG_1_ACTyp" />
|
||||
<DO name="OutWSet" type="ASG_1_WRtg" />
|
||||
<DO name="OutVarSet" type="ASG_1_WRtg" />
|
||||
</LNodeType>
|
||||
<DOType id="INC_1_Mod" cdc="INC">
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="INS_1_Beh" cdc="INS">
|
||||
<DA name="stVal" bType="INT32" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DOType id="LPL_1_NamPlt" cdc="LPL">
|
||||
<DA name="vendor" bType="VisString255" fc="DC" />
|
||||
<DA name="swRev" bType="VisString255" fc="DC" />
|
||||
<DA name="d" bType="VisString255" fc="DC" />
|
||||
<DA name="configRev" bType="VisString255" fc="DC" />
|
||||
<DA name="ldNs" bType="VisString255" fc="EX" />
|
||||
</DOType>
|
||||
<DOType id="DPL_1_PhyNam" cdc="DPL">
|
||||
<DA name="vendor" bType="VisString255" fc="DC" />
|
||||
</DOType>
|
||||
<DOType id="SPS_1_Proxy" cdc="SPS">
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DOType id="LPL_2_NamPlt" cdc="LPL">
|
||||
<DA name="vendor" bType="VisString255" fc="DC" />
|
||||
<DA name="swRev" bType="VisString255" fc="DC" />
|
||||
<DA name="d" bType="VisString255" fc="DC" />
|
||||
</DOType>
|
||||
<DOType id="ENC_1_Mod" cdc="ENC">
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="ENS_1_Beh" cdc="ENS">
|
||||
<DA name="stVal" bType="INT32" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DOType id="WYE_1_W" cdc="WYE">
|
||||
<SDO name="phsA" type="CMV_1_phsA" />
|
||||
<SDO name="phsB" type="CMV_1_phsA" />
|
||||
<SDO name="phsC" type="CMV_1_phsA" />
|
||||
</DOType>
|
||||
<DOType id="CMV_1_phsA" cdc="CMV">
|
||||
<DA name="cVal" type="Vector_1" bType="Struct" fc="MX" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="MX" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="MX" />
|
||||
</DOType>
|
||||
<DOType id="ASG_1_BatChaPwr" cdc="ASG" />
|
||||
<DOType id="ENG_1_BatChaSt" cdc="ENG" />
|
||||
<DOType id="WYE_1_PhV" cdc="WYE">
|
||||
<SDO name="phsA" type="CMV_1_phsA" />
|
||||
<SDO name="phsB" type="CMV_1_phsA" />
|
||||
<SDO name="phsC" type="CMV_1_phsA" />
|
||||
<SDO name="neut" type="CMV_1_phsA" />
|
||||
</DOType>
|
||||
<DOType id="MV_1_Vol" cdc="MV">
|
||||
<DA name="mag" type="AnalogueValue_1" bType="Struct" fc="MX" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="MX" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="MX" />
|
||||
</DOType>
|
||||
<DOType id="ASG_1_WRtg" cdc="ASG">
|
||||
<DA name="setMag" type="AnalogueValue_1" bType="Struct" fc="SP" />
|
||||
<DA name="units" type="Unit_1" bType="Struct" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="ENG_1_ACTyp" cdc="ENG">
|
||||
<DA name="setVal" bType="INT32" fc="SP" />
|
||||
</DOType>
|
||||
<DAType id="AnalogueValue_1">
|
||||
<BDA name="f" bType="FLOAT32" />
|
||||
</DAType>
|
||||
<DAType id="Vector_1">
|
||||
<BDA name="mag" type="AnalogueValue_1" bType="Struct" />
|
||||
</DAType>
|
||||
<DAType id="Unit_1">
|
||||
<BDA name="SIUnit" type="SIUnit" bType="Enum" />
|
||||
</DAType>
|
||||
<EnumType id="CtlModels">
|
||||
<EnumVal ord="0">status-only</EnumVal>
|
||||
<EnumVal ord="1">direct-with-normal-security</EnumVal>
|
||||
<EnumVal ord="2">sbo-with-normal-security</EnumVal>
|
||||
<EnumVal ord="3">direct-with-enhanced-security</EnumVal>
|
||||
<EnumVal ord="4">sbo-with-enhanced-security</EnumVal>
|
||||
</EnumType>
|
||||
<EnumType id="SIUnit">
|
||||
<EnumVal ord="1">
|
||||
</EnumVal>
|
||||
<EnumVal ord="10">rad</EnumVal>
|
||||
<EnumVal ord="11">sr</EnumVal>
|
||||
<EnumVal ord="2">m</EnumVal>
|
||||
<EnumVal ord="21">Gy</EnumVal>
|
||||
<EnumVal ord="22">q</EnumVal>
|
||||
<EnumVal ord="23">°C</EnumVal>
|
||||
<EnumVal ord="24">Sv</EnumVal>
|
||||
<EnumVal ord="25">F</EnumVal>
|
||||
<EnumVal ord="26">C</EnumVal>
|
||||
<EnumVal ord="27">S</EnumVal>
|
||||
<EnumVal ord="28">H</EnumVal>
|
||||
<EnumVal ord="29">V</EnumVal>
|
||||
<EnumVal ord="3">kg</EnumVal>
|
||||
<EnumVal ord="30">ohm</EnumVal>
|
||||
<EnumVal ord="31">J</EnumVal>
|
||||
<EnumVal ord="32">N</EnumVal>
|
||||
<EnumVal ord="33">Hz</EnumVal>
|
||||
<EnumVal ord="34">Ix</EnumVal>
|
||||
<EnumVal ord="35">Lm</EnumVal>
|
||||
<EnumVal ord="36">Wb</EnumVal>
|
||||
<EnumVal ord="37">T</EnumVal>
|
||||
<EnumVal ord="38">W</EnumVal>
|
||||
<EnumVal ord="39">Pa</EnumVal>
|
||||
<EnumVal ord="4">s</EnumVal>
|
||||
<EnumVal ord="41">m²</EnumVal>
|
||||
<EnumVal ord="42">m³</EnumVal>
|
||||
<EnumVal ord="43">m/s</EnumVal>
|
||||
<EnumVal ord="44">m/s²</EnumVal>
|
||||
<EnumVal ord="45">m³/s</EnumVal>
|
||||
<EnumVal ord="46">m/m³</EnumVal>
|
||||
<EnumVal ord="47">M</EnumVal>
|
||||
<EnumVal ord="48">kg/m³</EnumVal>
|
||||
<EnumVal ord="49">m²/s</EnumVal>
|
||||
<EnumVal ord="5">A</EnumVal>
|
||||
<EnumVal ord="50">W/m K</EnumVal>
|
||||
<EnumVal ord="51">J/K</EnumVal>
|
||||
<EnumVal ord="52">ppm</EnumVal>
|
||||
<EnumVal ord="53">1/s</EnumVal>
|
||||
<EnumVal ord="54">rad/s</EnumVal>
|
||||
<EnumVal ord="6">K</EnumVal>
|
||||
<EnumVal ord="61">VA</EnumVal>
|
||||
<EnumVal ord="62">Watts</EnumVal>
|
||||
<EnumVal ord="63">VAr</EnumVal>
|
||||
<EnumVal ord="64">theta</EnumVal>
|
||||
<EnumVal ord="65">cos(theta)</EnumVal>
|
||||
<EnumVal ord="66">Vs</EnumVal>
|
||||
<EnumVal ord="67">V²</EnumVal>
|
||||
<EnumVal ord="68">As</EnumVal>
|
||||
<EnumVal ord="69">A²</EnumVal>
|
||||
<EnumVal ord="7">mol</EnumVal>
|
||||
<EnumVal ord="70">A²t</EnumVal>
|
||||
<EnumVal ord="71">VAh</EnumVal>
|
||||
<EnumVal ord="72">Wh</EnumVal>
|
||||
<EnumVal ord="73">VArh</EnumVal>
|
||||
<EnumVal ord="74">V/Hz</EnumVal>
|
||||
<EnumVal ord="8">cd</EnumVal>
|
||||
<EnumVal ord="9">deg</EnumVal>
|
||||
</EnumType>
|
||||
<EnumType id="Multiplier">
|
||||
<EnumVal ord="-24">Yocto</EnumVal>
|
||||
<EnumVal ord="-21">Zepto</EnumVal>
|
||||
<EnumVal ord="-18">Atto</EnumVal>
|
||||
<EnumVal ord="-15">Femto</EnumVal>
|
||||
<EnumVal ord="-12">Pico</EnumVal>
|
||||
<EnumVal ord="-9">Nano</EnumVal>
|
||||
<EnumVal ord="-6">Micro</EnumVal>
|
||||
<EnumVal ord="-3">Milli</EnumVal>
|
||||
<EnumVal ord="-2">Centi</EnumVal>
|
||||
<EnumVal ord="-1">Deci</EnumVal>
|
||||
<EnumVal ord="0">zeroNoValue</EnumVal>
|
||||
<EnumVal ord="1">Deca</EnumVal>
|
||||
<EnumVal ord="2">Hecto</EnumVal>
|
||||
<EnumVal ord="3">Kilo</EnumVal>
|
||||
<EnumVal ord="6">Mega</EnumVal>
|
||||
<EnumVal ord="9">Giga</EnumVal>
|
||||
<EnumVal ord="12">Tera</EnumVal>
|
||||
<EnumVal ord="15">Petra</EnumVal>
|
||||
<EnumVal ord="18">Exa</EnumVal>
|
||||
<EnumVal ord="21">Zetta</EnumVal>
|
||||
<EnumVal ord="24">Yotta</EnumVal>
|
||||
</EnumType>
|
||||
<EnumType id="Range">
|
||||
<EnumVal ord="0">normal</EnumVal>
|
||||
<EnumVal ord="1">high</EnumVal>
|
||||
<EnumVal ord="2">low</EnumVal>
|
||||
<EnumVal ord="3">high-high</EnumVal>
|
||||
<EnumVal ord="4">low-low</EnumVal>
|
||||
</EnumType>
|
||||
</DataTypeTemplates>
|
||||
</SCL>
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* server_example_write_handler.c
|
||||
* server_example5.c
|
||||
*/
|
||||
|
||||
#include "iec61850_server.h"
|
||||
|
@ -8,7 +8,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "../server_example_write_handler/static_model.h"
|
||||
#include "static_model.h"
|
||||
|
||||
/* import IEC 61850 device model created from SCL-File */
|
||||
extern IedModel iedModel;
|
3621
examples/server_example5/static_model.c
Normal file
3621
examples/server_example5/static_model.c
Normal file
File diff suppressed because it is too large
Load diff
609
examples/server_example5/static_model.h
Normal file
609
examples/server_example5/static_model.h
Normal file
|
@ -0,0 +1,609 @@
|
|||
/*
|
||||
* static_model.h
|
||||
*
|
||||
* automatically generated from complexModel.icd
|
||||
*/
|
||||
|
||||
#ifndef STATIC_MODEL_H_
|
||||
#define STATIC_MODEL_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "iec61850_model.h"
|
||||
|
||||
extern IedModel iedModel;
|
||||
extern LogicalDevice iedModel_Inverter;
|
||||
extern LogicalNode iedModel_Inverter_LLN0;
|
||||
extern DataObject iedModel_Inverter_LLN0_Mod;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_Mod_q;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_Mod_t;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_Mod_ctlModel;
|
||||
extern DataObject iedModel_Inverter_LLN0_Beh;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_Beh_stVal;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_Beh_q;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_Beh_t;
|
||||
extern DataObject iedModel_Inverter_LLN0_Health;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_Health_stVal;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_Health_q;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_Health_t;
|
||||
extern DataObject iedModel_Inverter_LLN0_NamPlt;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_NamPlt_vendor;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_NamPlt_swRev;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_NamPlt_d;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_NamPlt_configRev;
|
||||
extern DataAttribute iedModel_Inverter_LLN0_NamPlt_ldNs;
|
||||
extern LogicalNode iedModel_Inverter_LPHD1;
|
||||
extern DataObject iedModel_Inverter_LPHD1_PhyNam;
|
||||
extern DataAttribute iedModel_Inverter_LPHD1_PhyNam_vendor;
|
||||
extern DataObject iedModel_Inverter_LPHD1_PhyHealth;
|
||||
extern DataAttribute iedModel_Inverter_LPHD1_PhyHealth_stVal;
|
||||
extern DataAttribute iedModel_Inverter_LPHD1_PhyHealth_q;
|
||||
extern DataAttribute iedModel_Inverter_LPHD1_PhyHealth_t;
|
||||
extern DataObject iedModel_Inverter_LPHD1_Proxy;
|
||||
extern DataAttribute iedModel_Inverter_LPHD1_Proxy_stVal;
|
||||
extern DataAttribute iedModel_Inverter_LPHD1_Proxy_q;
|
||||
extern DataAttribute iedModel_Inverter_LPHD1_Proxy_t;
|
||||
extern LogicalNode iedModel_Inverter_ZINV1;
|
||||
extern DataObject iedModel_Inverter_ZINV1_Mod;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_Mod_q;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_Mod_t;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_Mod_ctlModel;
|
||||
extern DataObject iedModel_Inverter_ZINV1_Beh;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_Beh_stVal;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_Beh_q;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_Beh_t;
|
||||
extern DataObject iedModel_Inverter_ZINV1_Health;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_Health_stVal;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_Health_q;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_Health_t;
|
||||
extern DataObject iedModel_Inverter_ZINV1_NamPlt;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_NamPlt_vendor;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_NamPlt_swRev;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_NamPlt_d;
|
||||
extern DataObject iedModel_Inverter_ZINV1_WRtg;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_WRtg_setMag_f;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_WRtg_units;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_WRtg_units_SIUnit;
|
||||
extern DataObject iedModel_Inverter_ZINV1_VarRtg;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_VarRtg_setMag_f;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_VarRtg_units;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_VarRtg_units_SIUnit;
|
||||
extern DataObject iedModel_Inverter_ZINV1_ACTyp;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_ACTyp_setVal;
|
||||
extern DataObject iedModel_Inverter_ZINV1_OutWSet;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_OutWSet_setMag_f;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_OutWSet_units;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_OutWSet_units_SIUnit;
|
||||
extern DataObject iedModel_Inverter_ZINV1_OutVarSet;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_OutVarSet_setMag_f;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units;
|
||||
extern DataAttribute iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit;
|
||||
extern LogicalNode iedModel_Inverter_MMXU1;
|
||||
extern DataObject iedModel_Inverter_MMXU1_Mod;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Mod_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Mod_t;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Mod_ctlModel;
|
||||
extern DataObject iedModel_Inverter_MMXU1_Beh;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Beh_stVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Beh_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Beh_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_Health;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Health_stVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Health_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Health_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_NamPlt;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_NamPlt_vendor;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_NamPlt_swRev;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_NamPlt_d;
|
||||
extern DataObject iedModel_Inverter_MMXU1_TotW;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotW_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotW_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotW_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotW_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_TotVAr;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotVAr_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotVAr_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotVAr_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_TotVA;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotVA_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotVA_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotVA_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_TotVA_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_Hz;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Hz_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Hz_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Hz_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_Hz_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_PhV;
|
||||
extern DataObject iedModel_Inverter_MMXU1_PhV_phsA;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsA_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_PhV_phsB;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsB_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_PhV_phsC;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_phsC_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_PhV_neut;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_PhV_neut_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_A;
|
||||
extern DataObject iedModel_Inverter_MMXU1_A_phsA;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsA_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_A_phsB;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsB_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_A_phsC;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_phsC_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_A_neut;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_neut_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_neut_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_A_neut_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_W;
|
||||
extern DataObject iedModel_Inverter_MMXU1_W_phsA;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsA_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_W_phsB;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsB_t;
|
||||
extern DataObject iedModel_Inverter_MMXU1_W_phsC;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_q;
|
||||
extern DataAttribute iedModel_Inverter_MMXU1_W_phsC_t;
|
||||
extern LogicalDevice iedModel_Battery;
|
||||
extern LogicalNode iedModel_Battery_LLN0;
|
||||
extern DataObject iedModel_Battery_LLN0_Mod;
|
||||
extern DataAttribute iedModel_Battery_LLN0_Mod_q;
|
||||
extern DataAttribute iedModel_Battery_LLN0_Mod_t;
|
||||
extern DataAttribute iedModel_Battery_LLN0_Mod_ctlModel;
|
||||
extern DataObject iedModel_Battery_LLN0_Beh;
|
||||
extern DataAttribute iedModel_Battery_LLN0_Beh_stVal;
|
||||
extern DataAttribute iedModel_Battery_LLN0_Beh_q;
|
||||
extern DataAttribute iedModel_Battery_LLN0_Beh_t;
|
||||
extern DataObject iedModel_Battery_LLN0_Health;
|
||||
extern DataAttribute iedModel_Battery_LLN0_Health_stVal;
|
||||
extern DataAttribute iedModel_Battery_LLN0_Health_q;
|
||||
extern DataAttribute iedModel_Battery_LLN0_Health_t;
|
||||
extern DataObject iedModel_Battery_LLN0_NamPlt;
|
||||
extern DataAttribute iedModel_Battery_LLN0_NamPlt_vendor;
|
||||
extern DataAttribute iedModel_Battery_LLN0_NamPlt_swRev;
|
||||
extern DataAttribute iedModel_Battery_LLN0_NamPlt_d;
|
||||
extern DataAttribute iedModel_Battery_LLN0_NamPlt_configRev;
|
||||
extern DataAttribute iedModel_Battery_LLN0_NamPlt_ldNs;
|
||||
extern LogicalNode iedModel_Battery_LPHD1;
|
||||
extern DataObject iedModel_Battery_LPHD1_PhyNam;
|
||||
extern DataAttribute iedModel_Battery_LPHD1_PhyNam_vendor;
|
||||
extern DataObject iedModel_Battery_LPHD1_PhyHealth;
|
||||
extern DataAttribute iedModel_Battery_LPHD1_PhyHealth_stVal;
|
||||
extern DataAttribute iedModel_Battery_LPHD1_PhyHealth_q;
|
||||
extern DataAttribute iedModel_Battery_LPHD1_PhyHealth_t;
|
||||
extern DataObject iedModel_Battery_LPHD1_Proxy;
|
||||
extern DataAttribute iedModel_Battery_LPHD1_Proxy_stVal;
|
||||
extern DataAttribute iedModel_Battery_LPHD1_Proxy_q;
|
||||
extern DataAttribute iedModel_Battery_LPHD1_Proxy_t;
|
||||
extern LogicalNode iedModel_Battery_ZBAT1;
|
||||
extern DataObject iedModel_Battery_ZBAT1_Mod;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Mod_q;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Mod_t;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Mod_ctlModel;
|
||||
extern DataObject iedModel_Battery_ZBAT1_Beh;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Beh_stVal;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Beh_q;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Beh_t;
|
||||
extern DataObject iedModel_Battery_ZBAT1_Health;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Health_stVal;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Health_q;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Health_t;
|
||||
extern DataObject iedModel_Battery_ZBAT1_NamPlt;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_NamPlt_vendor;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_NamPlt_swRev;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_NamPlt_d;
|
||||
extern DataObject iedModel_Battery_ZBAT1_Vol;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Vol_mag;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Vol_mag_f;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Vol_q;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Vol_t;
|
||||
extern DataObject iedModel_Battery_ZBAT1_Amp;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Amp_mag;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Amp_mag_f;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Amp_q;
|
||||
extern DataAttribute iedModel_Battery_ZBAT1_Amp_t;
|
||||
extern LogicalNode iedModel_Battery_ZBTC1;
|
||||
extern DataObject iedModel_Battery_ZBTC1_Mod;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_Mod_q;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_Mod_t;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_Mod_ctlModel;
|
||||
extern DataObject iedModel_Battery_ZBTC1_Beh;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_Beh_stVal;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_Beh_q;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_Beh_t;
|
||||
extern DataObject iedModel_Battery_ZBTC1_Health;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_Health_stVal;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_Health_q;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_Health_t;
|
||||
extern DataObject iedModel_Battery_ZBTC1_NamPlt;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_NamPlt_vendor;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_NamPlt_swRev;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_NamPlt_d;
|
||||
extern DataObject iedModel_Battery_ZBTC1_BatChaSt;
|
||||
extern DataObject iedModel_Battery_ZBTC1_BatChaPwr;
|
||||
extern DataObject iedModel_Battery_ZBTC1_BatChaMod;
|
||||
extern DataObject iedModel_Battery_ZBTC1_ChaV;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_ChaV_mag;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_ChaV_mag_f;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_ChaV_q;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_ChaV_t;
|
||||
extern DataObject iedModel_Battery_ZBTC1_ChaA;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_ChaA_mag;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_ChaA_mag_f;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_ChaA_q;
|
||||
extern DataAttribute iedModel_Battery_ZBTC1_ChaA_t;
|
||||
extern LogicalDevice iedModel_Physical_Measurements;
|
||||
extern LogicalNode iedModel_Physical_Measurements_LLN0;
|
||||
extern DataObject iedModel_Physical_Measurements_LLN0_Mod;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_Mod_q;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_Mod_t;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_Mod_ctlModel;
|
||||
extern DataObject iedModel_Physical_Measurements_LLN0_Beh;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_Beh_stVal;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_Beh_q;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_Beh_t;
|
||||
extern DataObject iedModel_Physical_Measurements_LLN0_Health;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_Health_stVal;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_Health_q;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_Health_t;
|
||||
extern DataObject iedModel_Physical_Measurements_LLN0_NamPlt;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_vendor;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_swRev;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_d;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_configRev;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LLN0_NamPlt_ldNs;
|
||||
extern LogicalNode iedModel_Physical_Measurements_LPHD1;
|
||||
extern DataObject iedModel_Physical_Measurements_LPHD1_PhyNam;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LPHD1_PhyNam_vendor;
|
||||
extern DataObject iedModel_Physical_Measurements_LPHD1_PhyHealth;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_stVal;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_q;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LPHD1_PhyHealth_t;
|
||||
extern DataObject iedModel_Physical_Measurements_LPHD1_Proxy;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_stVal;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_q;
|
||||
extern DataAttribute iedModel_Physical_Measurements_LPHD1_Proxy_t;
|
||||
|
||||
|
||||
|
||||
#define IEDMODEL_Inverter (&iedModel_Inverter)
|
||||
#define IEDMODEL_Inverter_LLN0 (&iedModel_Inverter_LLN0)
|
||||
#define IEDMODEL_Inverter_LLN0_Mod (&iedModel_Inverter_LLN0_Mod)
|
||||
#define IEDMODEL_Inverter_LLN0_Mod_q (&iedModel_Inverter_LLN0_Mod_q)
|
||||
#define IEDMODEL_Inverter_LLN0_Mod_t (&iedModel_Inverter_LLN0_Mod_t)
|
||||
#define IEDMODEL_Inverter_LLN0_Mod_ctlModel (&iedModel_Inverter_LLN0_Mod_ctlModel)
|
||||
#define IEDMODEL_Inverter_LLN0_Beh (&iedModel_Inverter_LLN0_Beh)
|
||||
#define IEDMODEL_Inverter_LLN0_Beh_stVal (&iedModel_Inverter_LLN0_Beh_stVal)
|
||||
#define IEDMODEL_Inverter_LLN0_Beh_q (&iedModel_Inverter_LLN0_Beh_q)
|
||||
#define IEDMODEL_Inverter_LLN0_Beh_t (&iedModel_Inverter_LLN0_Beh_t)
|
||||
#define IEDMODEL_Inverter_LLN0_Health (&iedModel_Inverter_LLN0_Health)
|
||||
#define IEDMODEL_Inverter_LLN0_Health_stVal (&iedModel_Inverter_LLN0_Health_stVal)
|
||||
#define IEDMODEL_Inverter_LLN0_Health_q (&iedModel_Inverter_LLN0_Health_q)
|
||||
#define IEDMODEL_Inverter_LLN0_Health_t (&iedModel_Inverter_LLN0_Health_t)
|
||||
#define IEDMODEL_Inverter_LLN0_NamPlt (&iedModel_Inverter_LLN0_NamPlt)
|
||||
#define IEDMODEL_Inverter_LLN0_NamPlt_vendor (&iedModel_Inverter_LLN0_NamPlt_vendor)
|
||||
#define IEDMODEL_Inverter_LLN0_NamPlt_swRev (&iedModel_Inverter_LLN0_NamPlt_swRev)
|
||||
#define IEDMODEL_Inverter_LLN0_NamPlt_d (&iedModel_Inverter_LLN0_NamPlt_d)
|
||||
#define IEDMODEL_Inverter_LLN0_NamPlt_configRev (&iedModel_Inverter_LLN0_NamPlt_configRev)
|
||||
#define IEDMODEL_Inverter_LLN0_NamPlt_ldNs (&iedModel_Inverter_LLN0_NamPlt_ldNs)
|
||||
#define IEDMODEL_Inverter_LPHD1 (&iedModel_Inverter_LPHD1)
|
||||
#define IEDMODEL_Inverter_LPHD1_PhyNam (&iedModel_Inverter_LPHD1_PhyNam)
|
||||
#define IEDMODEL_Inverter_LPHD1_PhyNam_vendor (&iedModel_Inverter_LPHD1_PhyNam_vendor)
|
||||
#define IEDMODEL_Inverter_LPHD1_PhyHealth (&iedModel_Inverter_LPHD1_PhyHealth)
|
||||
#define IEDMODEL_Inverter_LPHD1_PhyHealth_stVal (&iedModel_Inverter_LPHD1_PhyHealth_stVal)
|
||||
#define IEDMODEL_Inverter_LPHD1_PhyHealth_q (&iedModel_Inverter_LPHD1_PhyHealth_q)
|
||||
#define IEDMODEL_Inverter_LPHD1_PhyHealth_t (&iedModel_Inverter_LPHD1_PhyHealth_t)
|
||||
#define IEDMODEL_Inverter_LPHD1_Proxy (&iedModel_Inverter_LPHD1_Proxy)
|
||||
#define IEDMODEL_Inverter_LPHD1_Proxy_stVal (&iedModel_Inverter_LPHD1_Proxy_stVal)
|
||||
#define IEDMODEL_Inverter_LPHD1_Proxy_q (&iedModel_Inverter_LPHD1_Proxy_q)
|
||||
#define IEDMODEL_Inverter_LPHD1_Proxy_t (&iedModel_Inverter_LPHD1_Proxy_t)
|
||||
#define IEDMODEL_Inverter_ZINV1 (&iedModel_Inverter_ZINV1)
|
||||
#define IEDMODEL_Inverter_ZINV1_Mod (&iedModel_Inverter_ZINV1_Mod)
|
||||
#define IEDMODEL_Inverter_ZINV1_Mod_q (&iedModel_Inverter_ZINV1_Mod_q)
|
||||
#define IEDMODEL_Inverter_ZINV1_Mod_t (&iedModel_Inverter_ZINV1_Mod_t)
|
||||
#define IEDMODEL_Inverter_ZINV1_Mod_ctlModel (&iedModel_Inverter_ZINV1_Mod_ctlModel)
|
||||
#define IEDMODEL_Inverter_ZINV1_Beh (&iedModel_Inverter_ZINV1_Beh)
|
||||
#define IEDMODEL_Inverter_ZINV1_Beh_stVal (&iedModel_Inverter_ZINV1_Beh_stVal)
|
||||
#define IEDMODEL_Inverter_ZINV1_Beh_q (&iedModel_Inverter_ZINV1_Beh_q)
|
||||
#define IEDMODEL_Inverter_ZINV1_Beh_t (&iedModel_Inverter_ZINV1_Beh_t)
|
||||
#define IEDMODEL_Inverter_ZINV1_Health (&iedModel_Inverter_ZINV1_Health)
|
||||
#define IEDMODEL_Inverter_ZINV1_Health_stVal (&iedModel_Inverter_ZINV1_Health_stVal)
|
||||
#define IEDMODEL_Inverter_ZINV1_Health_q (&iedModel_Inverter_ZINV1_Health_q)
|
||||
#define IEDMODEL_Inverter_ZINV1_Health_t (&iedModel_Inverter_ZINV1_Health_t)
|
||||
#define IEDMODEL_Inverter_ZINV1_NamPlt (&iedModel_Inverter_ZINV1_NamPlt)
|
||||
#define IEDMODEL_Inverter_ZINV1_NamPlt_vendor (&iedModel_Inverter_ZINV1_NamPlt_vendor)
|
||||
#define IEDMODEL_Inverter_ZINV1_NamPlt_swRev (&iedModel_Inverter_ZINV1_NamPlt_swRev)
|
||||
#define IEDMODEL_Inverter_ZINV1_NamPlt_d (&iedModel_Inverter_ZINV1_NamPlt_d)
|
||||
#define IEDMODEL_Inverter_ZINV1_WRtg (&iedModel_Inverter_ZINV1_WRtg)
|
||||
#define IEDMODEL_Inverter_ZINV1_WRtg_setMag (&iedModel_Inverter_ZINV1_WRtg_setMag)
|
||||
#define IEDMODEL_Inverter_ZINV1_WRtg_setMag_f (&iedModel_Inverter_ZINV1_WRtg_setMag_f)
|
||||
#define IEDMODEL_Inverter_ZINV1_WRtg_units (&iedModel_Inverter_ZINV1_WRtg_units)
|
||||
#define IEDMODEL_Inverter_ZINV1_WRtg_units_SIUnit (&iedModel_Inverter_ZINV1_WRtg_units_SIUnit)
|
||||
#define IEDMODEL_Inverter_ZINV1_VarRtg (&iedModel_Inverter_ZINV1_VarRtg)
|
||||
#define IEDMODEL_Inverter_ZINV1_VarRtg_setMag (&iedModel_Inverter_ZINV1_VarRtg_setMag)
|
||||
#define IEDMODEL_Inverter_ZINV1_VarRtg_setMag_f (&iedModel_Inverter_ZINV1_VarRtg_setMag_f)
|
||||
#define IEDMODEL_Inverter_ZINV1_VarRtg_units (&iedModel_Inverter_ZINV1_VarRtg_units)
|
||||
#define IEDMODEL_Inverter_ZINV1_VarRtg_units_SIUnit (&iedModel_Inverter_ZINV1_VarRtg_units_SIUnit)
|
||||
#define IEDMODEL_Inverter_ZINV1_ACTyp (&iedModel_Inverter_ZINV1_ACTyp)
|
||||
#define IEDMODEL_Inverter_ZINV1_ACTyp_setVal (&iedModel_Inverter_ZINV1_ACTyp_setVal)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutWSet (&iedModel_Inverter_ZINV1_OutWSet)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutWSet_setMag (&iedModel_Inverter_ZINV1_OutWSet_setMag)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutWSet_setMag_f (&iedModel_Inverter_ZINV1_OutWSet_setMag_f)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutWSet_units (&iedModel_Inverter_ZINV1_OutWSet_units)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutWSet_units_SIUnit (&iedModel_Inverter_ZINV1_OutWSet_units_SIUnit)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutVarSet (&iedModel_Inverter_ZINV1_OutVarSet)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutVarSet_setMag (&iedModel_Inverter_ZINV1_OutVarSet_setMag)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutVarSet_setMag_f (&iedModel_Inverter_ZINV1_OutVarSet_setMag_f)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutVarSet_units (&iedModel_Inverter_ZINV1_OutVarSet_units)
|
||||
#define IEDMODEL_Inverter_ZINV1_OutVarSet_units_SIUnit (&iedModel_Inverter_ZINV1_OutVarSet_units_SIUnit)
|
||||
#define IEDMODEL_Inverter_MMXU1 (&iedModel_Inverter_MMXU1)
|
||||
#define IEDMODEL_Inverter_MMXU1_Mod (&iedModel_Inverter_MMXU1_Mod)
|
||||
#define IEDMODEL_Inverter_MMXU1_Mod_q (&iedModel_Inverter_MMXU1_Mod_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_Mod_t (&iedModel_Inverter_MMXU1_Mod_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_Mod_ctlModel (&iedModel_Inverter_MMXU1_Mod_ctlModel)
|
||||
#define IEDMODEL_Inverter_MMXU1_Beh (&iedModel_Inverter_MMXU1_Beh)
|
||||
#define IEDMODEL_Inverter_MMXU1_Beh_stVal (&iedModel_Inverter_MMXU1_Beh_stVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_Beh_q (&iedModel_Inverter_MMXU1_Beh_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_Beh_t (&iedModel_Inverter_MMXU1_Beh_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_Health (&iedModel_Inverter_MMXU1_Health)
|
||||
#define IEDMODEL_Inverter_MMXU1_Health_stVal (&iedModel_Inverter_MMXU1_Health_stVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_Health_q (&iedModel_Inverter_MMXU1_Health_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_Health_t (&iedModel_Inverter_MMXU1_Health_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_NamPlt (&iedModel_Inverter_MMXU1_NamPlt)
|
||||
#define IEDMODEL_Inverter_MMXU1_NamPlt_vendor (&iedModel_Inverter_MMXU1_NamPlt_vendor)
|
||||
#define IEDMODEL_Inverter_MMXU1_NamPlt_swRev (&iedModel_Inverter_MMXU1_NamPlt_swRev)
|
||||
#define IEDMODEL_Inverter_MMXU1_NamPlt_d (&iedModel_Inverter_MMXU1_NamPlt_d)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotW (&iedModel_Inverter_MMXU1_TotW)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotW_mag (&iedModel_Inverter_MMXU1_TotW_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotW_mag_f (&iedModel_Inverter_MMXU1_TotW_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotW_q (&iedModel_Inverter_MMXU1_TotW_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotW_t (&iedModel_Inverter_MMXU1_TotW_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVAr (&iedModel_Inverter_MMXU1_TotVAr)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVAr_mag (&iedModel_Inverter_MMXU1_TotVAr_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVAr_mag_f (&iedModel_Inverter_MMXU1_TotVAr_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVAr_q (&iedModel_Inverter_MMXU1_TotVAr_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVAr_t (&iedModel_Inverter_MMXU1_TotVAr_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVA (&iedModel_Inverter_MMXU1_TotVA)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVA_mag (&iedModel_Inverter_MMXU1_TotVA_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVA_mag_f (&iedModel_Inverter_MMXU1_TotVA_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVA_q (&iedModel_Inverter_MMXU1_TotVA_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_TotVA_t (&iedModel_Inverter_MMXU1_TotVA_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_Hz (&iedModel_Inverter_MMXU1_Hz)
|
||||
#define IEDMODEL_Inverter_MMXU1_Hz_mag (&iedModel_Inverter_MMXU1_Hz_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_Hz_mag_f (&iedModel_Inverter_MMXU1_Hz_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_Hz_q (&iedModel_Inverter_MMXU1_Hz_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_Hz_t (&iedModel_Inverter_MMXU1_Hz_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV (&iedModel_Inverter_MMXU1_PhV)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsA (&iedModel_Inverter_MMXU1_PhV_phsA)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsA_cVal (&iedModel_Inverter_MMXU1_PhV_phsA_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsA_cVal_mag (&iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsA_cVal_mag_f (&iedModel_Inverter_MMXU1_PhV_phsA_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsA_q (&iedModel_Inverter_MMXU1_PhV_phsA_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsA_t (&iedModel_Inverter_MMXU1_PhV_phsA_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsB (&iedModel_Inverter_MMXU1_PhV_phsB)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsB_cVal (&iedModel_Inverter_MMXU1_PhV_phsB_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsB_cVal_mag (&iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsB_cVal_mag_f (&iedModel_Inverter_MMXU1_PhV_phsB_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsB_q (&iedModel_Inverter_MMXU1_PhV_phsB_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsB_t (&iedModel_Inverter_MMXU1_PhV_phsB_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsC (&iedModel_Inverter_MMXU1_PhV_phsC)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsC_cVal (&iedModel_Inverter_MMXU1_PhV_phsC_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsC_cVal_mag (&iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsC_cVal_mag_f (&iedModel_Inverter_MMXU1_PhV_phsC_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsC_q (&iedModel_Inverter_MMXU1_PhV_phsC_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_phsC_t (&iedModel_Inverter_MMXU1_PhV_phsC_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_neut (&iedModel_Inverter_MMXU1_PhV_neut)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_neut_cVal (&iedModel_Inverter_MMXU1_PhV_neut_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_neut_cVal_mag (&iedModel_Inverter_MMXU1_PhV_neut_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_neut_cVal_mag_f (&iedModel_Inverter_MMXU1_PhV_neut_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_neut_q (&iedModel_Inverter_MMXU1_PhV_neut_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_PhV_neut_t (&iedModel_Inverter_MMXU1_PhV_neut_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_A (&iedModel_Inverter_MMXU1_A)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsA (&iedModel_Inverter_MMXU1_A_phsA)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsA_cVal (&iedModel_Inverter_MMXU1_A_phsA_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsA_cVal_mag (&iedModel_Inverter_MMXU1_A_phsA_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsA_cVal_mag_f (&iedModel_Inverter_MMXU1_A_phsA_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsA_q (&iedModel_Inverter_MMXU1_A_phsA_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsA_t (&iedModel_Inverter_MMXU1_A_phsA_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsB (&iedModel_Inverter_MMXU1_A_phsB)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsB_cVal (&iedModel_Inverter_MMXU1_A_phsB_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsB_cVal_mag (&iedModel_Inverter_MMXU1_A_phsB_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsB_cVal_mag_f (&iedModel_Inverter_MMXU1_A_phsB_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsB_q (&iedModel_Inverter_MMXU1_A_phsB_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsB_t (&iedModel_Inverter_MMXU1_A_phsB_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsC (&iedModel_Inverter_MMXU1_A_phsC)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsC_cVal (&iedModel_Inverter_MMXU1_A_phsC_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsC_cVal_mag (&iedModel_Inverter_MMXU1_A_phsC_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsC_cVal_mag_f (&iedModel_Inverter_MMXU1_A_phsC_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsC_q (&iedModel_Inverter_MMXU1_A_phsC_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_phsC_t (&iedModel_Inverter_MMXU1_A_phsC_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_neut (&iedModel_Inverter_MMXU1_A_neut)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_neut_cVal (&iedModel_Inverter_MMXU1_A_neut_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_neut_cVal_mag (&iedModel_Inverter_MMXU1_A_neut_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_neut_cVal_mag_f (&iedModel_Inverter_MMXU1_A_neut_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_neut_q (&iedModel_Inverter_MMXU1_A_neut_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_A_neut_t (&iedModel_Inverter_MMXU1_A_neut_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_W (&iedModel_Inverter_MMXU1_W)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsA (&iedModel_Inverter_MMXU1_W_phsA)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsA_cVal (&iedModel_Inverter_MMXU1_W_phsA_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsA_cVal_mag (&iedModel_Inverter_MMXU1_W_phsA_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsA_cVal_mag_f (&iedModel_Inverter_MMXU1_W_phsA_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsA_q (&iedModel_Inverter_MMXU1_W_phsA_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsA_t (&iedModel_Inverter_MMXU1_W_phsA_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsB (&iedModel_Inverter_MMXU1_W_phsB)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsB_cVal (&iedModel_Inverter_MMXU1_W_phsB_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsB_cVal_mag (&iedModel_Inverter_MMXU1_W_phsB_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsB_cVal_mag_f (&iedModel_Inverter_MMXU1_W_phsB_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsB_q (&iedModel_Inverter_MMXU1_W_phsB_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsB_t (&iedModel_Inverter_MMXU1_W_phsB_t)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsC (&iedModel_Inverter_MMXU1_W_phsC)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsC_cVal (&iedModel_Inverter_MMXU1_W_phsC_cVal)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsC_cVal_mag (&iedModel_Inverter_MMXU1_W_phsC_cVal_mag)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsC_cVal_mag_f (&iedModel_Inverter_MMXU1_W_phsC_cVal_mag_f)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsC_q (&iedModel_Inverter_MMXU1_W_phsC_q)
|
||||
#define IEDMODEL_Inverter_MMXU1_W_phsC_t (&iedModel_Inverter_MMXU1_W_phsC_t)
|
||||
#define IEDMODEL_Battery (&iedModel_Battery)
|
||||
#define IEDMODEL_Battery_LLN0 (&iedModel_Battery_LLN0)
|
||||
#define IEDMODEL_Battery_LLN0_Mod (&iedModel_Battery_LLN0_Mod)
|
||||
#define IEDMODEL_Battery_LLN0_Mod_q (&iedModel_Battery_LLN0_Mod_q)
|
||||
#define IEDMODEL_Battery_LLN0_Mod_t (&iedModel_Battery_LLN0_Mod_t)
|
||||
#define IEDMODEL_Battery_LLN0_Mod_ctlModel (&iedModel_Battery_LLN0_Mod_ctlModel)
|
||||
#define IEDMODEL_Battery_LLN0_Beh (&iedModel_Battery_LLN0_Beh)
|
||||
#define IEDMODEL_Battery_LLN0_Beh_stVal (&iedModel_Battery_LLN0_Beh_stVal)
|
||||
#define IEDMODEL_Battery_LLN0_Beh_q (&iedModel_Battery_LLN0_Beh_q)
|
||||
#define IEDMODEL_Battery_LLN0_Beh_t (&iedModel_Battery_LLN0_Beh_t)
|
||||
#define IEDMODEL_Battery_LLN0_Health (&iedModel_Battery_LLN0_Health)
|
||||
#define IEDMODEL_Battery_LLN0_Health_stVal (&iedModel_Battery_LLN0_Health_stVal)
|
||||
#define IEDMODEL_Battery_LLN0_Health_q (&iedModel_Battery_LLN0_Health_q)
|
||||
#define IEDMODEL_Battery_LLN0_Health_t (&iedModel_Battery_LLN0_Health_t)
|
||||
#define IEDMODEL_Battery_LLN0_NamPlt (&iedModel_Battery_LLN0_NamPlt)
|
||||
#define IEDMODEL_Battery_LLN0_NamPlt_vendor (&iedModel_Battery_LLN0_NamPlt_vendor)
|
||||
#define IEDMODEL_Battery_LLN0_NamPlt_swRev (&iedModel_Battery_LLN0_NamPlt_swRev)
|
||||
#define IEDMODEL_Battery_LLN0_NamPlt_d (&iedModel_Battery_LLN0_NamPlt_d)
|
||||
#define IEDMODEL_Battery_LLN0_NamPlt_configRev (&iedModel_Battery_LLN0_NamPlt_configRev)
|
||||
#define IEDMODEL_Battery_LLN0_NamPlt_ldNs (&iedModel_Battery_LLN0_NamPlt_ldNs)
|
||||
#define IEDMODEL_Battery_LPHD1 (&iedModel_Battery_LPHD1)
|
||||
#define IEDMODEL_Battery_LPHD1_PhyNam (&iedModel_Battery_LPHD1_PhyNam)
|
||||
#define IEDMODEL_Battery_LPHD1_PhyNam_vendor (&iedModel_Battery_LPHD1_PhyNam_vendor)
|
||||
#define IEDMODEL_Battery_LPHD1_PhyHealth (&iedModel_Battery_LPHD1_PhyHealth)
|
||||
#define IEDMODEL_Battery_LPHD1_PhyHealth_stVal (&iedModel_Battery_LPHD1_PhyHealth_stVal)
|
||||
#define IEDMODEL_Battery_LPHD1_PhyHealth_q (&iedModel_Battery_LPHD1_PhyHealth_q)
|
||||
#define IEDMODEL_Battery_LPHD1_PhyHealth_t (&iedModel_Battery_LPHD1_PhyHealth_t)
|
||||
#define IEDMODEL_Battery_LPHD1_Proxy (&iedModel_Battery_LPHD1_Proxy)
|
||||
#define IEDMODEL_Battery_LPHD1_Proxy_stVal (&iedModel_Battery_LPHD1_Proxy_stVal)
|
||||
#define IEDMODEL_Battery_LPHD1_Proxy_q (&iedModel_Battery_LPHD1_Proxy_q)
|
||||
#define IEDMODEL_Battery_LPHD1_Proxy_t (&iedModel_Battery_LPHD1_Proxy_t)
|
||||
#define IEDMODEL_Battery_ZBAT1 (&iedModel_Battery_ZBAT1)
|
||||
#define IEDMODEL_Battery_ZBAT1_Mod (&iedModel_Battery_ZBAT1_Mod)
|
||||
#define IEDMODEL_Battery_ZBAT1_Mod_q (&iedModel_Battery_ZBAT1_Mod_q)
|
||||
#define IEDMODEL_Battery_ZBAT1_Mod_t (&iedModel_Battery_ZBAT1_Mod_t)
|
||||
#define IEDMODEL_Battery_ZBAT1_Mod_ctlModel (&iedModel_Battery_ZBAT1_Mod_ctlModel)
|
||||
#define IEDMODEL_Battery_ZBAT1_Beh (&iedModel_Battery_ZBAT1_Beh)
|
||||
#define IEDMODEL_Battery_ZBAT1_Beh_stVal (&iedModel_Battery_ZBAT1_Beh_stVal)
|
||||
#define IEDMODEL_Battery_ZBAT1_Beh_q (&iedModel_Battery_ZBAT1_Beh_q)
|
||||
#define IEDMODEL_Battery_ZBAT1_Beh_t (&iedModel_Battery_ZBAT1_Beh_t)
|
||||
#define IEDMODEL_Battery_ZBAT1_Health (&iedModel_Battery_ZBAT1_Health)
|
||||
#define IEDMODEL_Battery_ZBAT1_Health_stVal (&iedModel_Battery_ZBAT1_Health_stVal)
|
||||
#define IEDMODEL_Battery_ZBAT1_Health_q (&iedModel_Battery_ZBAT1_Health_q)
|
||||
#define IEDMODEL_Battery_ZBAT1_Health_t (&iedModel_Battery_ZBAT1_Health_t)
|
||||
#define IEDMODEL_Battery_ZBAT1_NamPlt (&iedModel_Battery_ZBAT1_NamPlt)
|
||||
#define IEDMODEL_Battery_ZBAT1_NamPlt_vendor (&iedModel_Battery_ZBAT1_NamPlt_vendor)
|
||||
#define IEDMODEL_Battery_ZBAT1_NamPlt_swRev (&iedModel_Battery_ZBAT1_NamPlt_swRev)
|
||||
#define IEDMODEL_Battery_ZBAT1_NamPlt_d (&iedModel_Battery_ZBAT1_NamPlt_d)
|
||||
#define IEDMODEL_Battery_ZBAT1_Vol (&iedModel_Battery_ZBAT1_Vol)
|
||||
#define IEDMODEL_Battery_ZBAT1_Vol_mag (&iedModel_Battery_ZBAT1_Vol_mag)
|
||||
#define IEDMODEL_Battery_ZBAT1_Vol_mag_f (&iedModel_Battery_ZBAT1_Vol_mag_f)
|
||||
#define IEDMODEL_Battery_ZBAT1_Vol_q (&iedModel_Battery_ZBAT1_Vol_q)
|
||||
#define IEDMODEL_Battery_ZBAT1_Vol_t (&iedModel_Battery_ZBAT1_Vol_t)
|
||||
#define IEDMODEL_Battery_ZBAT1_Amp (&iedModel_Battery_ZBAT1_Amp)
|
||||
#define IEDMODEL_Battery_ZBAT1_Amp_mag (&iedModel_Battery_ZBAT1_Amp_mag)
|
||||
#define IEDMODEL_Battery_ZBAT1_Amp_mag_f (&iedModel_Battery_ZBAT1_Amp_mag_f)
|
||||
#define IEDMODEL_Battery_ZBAT1_Amp_q (&iedModel_Battery_ZBAT1_Amp_q)
|
||||
#define IEDMODEL_Battery_ZBAT1_Amp_t (&iedModel_Battery_ZBAT1_Amp_t)
|
||||
#define IEDMODEL_Battery_ZBTC1 (&iedModel_Battery_ZBTC1)
|
||||
#define IEDMODEL_Battery_ZBTC1_Mod (&iedModel_Battery_ZBTC1_Mod)
|
||||
#define IEDMODEL_Battery_ZBTC1_Mod_q (&iedModel_Battery_ZBTC1_Mod_q)
|
||||
#define IEDMODEL_Battery_ZBTC1_Mod_t (&iedModel_Battery_ZBTC1_Mod_t)
|
||||
#define IEDMODEL_Battery_ZBTC1_Mod_ctlModel (&iedModel_Battery_ZBTC1_Mod_ctlModel)
|
||||
#define IEDMODEL_Battery_ZBTC1_Beh (&iedModel_Battery_ZBTC1_Beh)
|
||||
#define IEDMODEL_Battery_ZBTC1_Beh_stVal (&iedModel_Battery_ZBTC1_Beh_stVal)
|
||||
#define IEDMODEL_Battery_ZBTC1_Beh_q (&iedModel_Battery_ZBTC1_Beh_q)
|
||||
#define IEDMODEL_Battery_ZBTC1_Beh_t (&iedModel_Battery_ZBTC1_Beh_t)
|
||||
#define IEDMODEL_Battery_ZBTC1_Health (&iedModel_Battery_ZBTC1_Health)
|
||||
#define IEDMODEL_Battery_ZBTC1_Health_stVal (&iedModel_Battery_ZBTC1_Health_stVal)
|
||||
#define IEDMODEL_Battery_ZBTC1_Health_q (&iedModel_Battery_ZBTC1_Health_q)
|
||||
#define IEDMODEL_Battery_ZBTC1_Health_t (&iedModel_Battery_ZBTC1_Health_t)
|
||||
#define IEDMODEL_Battery_ZBTC1_NamPlt (&iedModel_Battery_ZBTC1_NamPlt)
|
||||
#define IEDMODEL_Battery_ZBTC1_NamPlt_vendor (&iedModel_Battery_ZBTC1_NamPlt_vendor)
|
||||
#define IEDMODEL_Battery_ZBTC1_NamPlt_swRev (&iedModel_Battery_ZBTC1_NamPlt_swRev)
|
||||
#define IEDMODEL_Battery_ZBTC1_NamPlt_d (&iedModel_Battery_ZBTC1_NamPlt_d)
|
||||
#define IEDMODEL_Battery_ZBTC1_BatChaSt (&iedModel_Battery_ZBTC1_BatChaSt)
|
||||
#define IEDMODEL_Battery_ZBTC1_BatChaPwr (&iedModel_Battery_ZBTC1_BatChaPwr)
|
||||
#define IEDMODEL_Battery_ZBTC1_BatChaMod (&iedModel_Battery_ZBTC1_BatChaMod)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaV (&iedModel_Battery_ZBTC1_ChaV)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaV_mag (&iedModel_Battery_ZBTC1_ChaV_mag)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaV_mag_f (&iedModel_Battery_ZBTC1_ChaV_mag_f)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaV_q (&iedModel_Battery_ZBTC1_ChaV_q)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaV_t (&iedModel_Battery_ZBTC1_ChaV_t)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaA (&iedModel_Battery_ZBTC1_ChaA)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaA_mag (&iedModel_Battery_ZBTC1_ChaA_mag)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaA_mag_f (&iedModel_Battery_ZBTC1_ChaA_mag_f)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaA_q (&iedModel_Battery_ZBTC1_ChaA_q)
|
||||
#define IEDMODEL_Battery_ZBTC1_ChaA_t (&iedModel_Battery_ZBTC1_ChaA_t)
|
||||
#define IEDMODEL_Physical_Measurements (&iedModel_Physical_Measurements)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0 (&iedModel_Physical_Measurements_LLN0)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Mod (&iedModel_Physical_Measurements_LLN0_Mod)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Mod_q (&iedModel_Physical_Measurements_LLN0_Mod_q)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Mod_t (&iedModel_Physical_Measurements_LLN0_Mod_t)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Mod_ctlModel (&iedModel_Physical_Measurements_LLN0_Mod_ctlModel)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Beh (&iedModel_Physical_Measurements_LLN0_Beh)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Beh_stVal (&iedModel_Physical_Measurements_LLN0_Beh_stVal)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Beh_q (&iedModel_Physical_Measurements_LLN0_Beh_q)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Beh_t (&iedModel_Physical_Measurements_LLN0_Beh_t)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Health (&iedModel_Physical_Measurements_LLN0_Health)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Health_stVal (&iedModel_Physical_Measurements_LLN0_Health_stVal)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Health_q (&iedModel_Physical_Measurements_LLN0_Health_q)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_Health_t (&iedModel_Physical_Measurements_LLN0_Health_t)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_NamPlt (&iedModel_Physical_Measurements_LLN0_NamPlt)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_vendor (&iedModel_Physical_Measurements_LLN0_NamPlt_vendor)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_swRev (&iedModel_Physical_Measurements_LLN0_NamPlt_swRev)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_d (&iedModel_Physical_Measurements_LLN0_NamPlt_d)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_configRev (&iedModel_Physical_Measurements_LLN0_NamPlt_configRev)
|
||||
#define IEDMODEL_Physical_Measurements_LLN0_NamPlt_ldNs (&iedModel_Physical_Measurements_LLN0_NamPlt_ldNs)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1 (&iedModel_Physical_Measurements_LPHD1)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_PhyNam (&iedModel_Physical_Measurements_LPHD1_PhyNam)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_PhyNam_vendor (&iedModel_Physical_Measurements_LPHD1_PhyNam_vendor)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_PhyHealth (&iedModel_Physical_Measurements_LPHD1_PhyHealth)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_PhyHealth_stVal (&iedModel_Physical_Measurements_LPHD1_PhyHealth_stVal)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_PhyHealth_q (&iedModel_Physical_Measurements_LPHD1_PhyHealth_q)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_PhyHealth_t (&iedModel_Physical_Measurements_LPHD1_PhyHealth_t)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_Proxy (&iedModel_Physical_Measurements_LPHD1_Proxy)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_Proxy_stVal (&iedModel_Physical_Measurements_LPHD1_Proxy_stVal)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_Proxy_q (&iedModel_Physical_Measurements_LPHD1_Proxy_q)
|
||||
#define IEDMODEL_Physical_Measurements_LPHD1_Proxy_t (&iedModel_Physical_Measurements_LPHD1_Proxy_t)
|
||||
|
||||
#endif /* STATIC_MODEL_H_ */
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example_SRCS
|
||||
server_example_basic_io.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example_basic_io
|
||||
${server_example_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example_basic_io
|
||||
iec61850
|
||||
)
|
|
@ -1,31 +0,0 @@
|
|||
LIBIEC_HOME=../..
|
||||
|
||||
PROJECT_BINARY_NAME = server_example_basic_io
|
||||
PROJECT_SOURCES = server_example_basic_io.c
|
||||
PROJECT_SOURCES += static_model.c
|
||||
|
||||
PROJECT_ICD_FILE = simpleIO_direct_control.icd
|
||||
|
||||
include $(LIBIEC_HOME)/make/target_system.mk
|
||||
include $(LIBIEC_HOME)/make/stack_includes.mk
|
||||
|
||||
all: $(PROJECT_BINARY_NAME)
|
||||
|
||||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
LDLIBS += -lm
|
||||
|
||||
CP = cp
|
||||
|
||||
model: $(PROJECT_ICD_FILE)
|
||||
java -jar $(LIBIEC_HOME)/tools/model_generator/genmodel.jar $(PROJECT_ICD_FILE)
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
$(CP) $(PROJECT_BINARY_NAME) vmd-filestore/IEDSERVER.BIN
|
||||
|
||||
clean:
|
||||
rm -f $(PROJECT_BINARY_NAME)
|
||||
rm -f vmd-filestore/IEDSERVER.BIN
|
||||
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -13,7 +13,7 @@ all: $(PROJECT_BINARY_NAME)
|
|||
include $(LIBIEC_HOME)/make/common_targets.mk
|
||||
|
||||
model: $(PROJECT_ICD_FILE)
|
||||
java -jar $(LIBIEC_HOME)/tools/model_generator/genconfig.jar $(PROJECT_ICD_FILE) model.cfg
|
||||
java -jar $(LIBIEC_HOME)/tools/model_generator/genconfig.jar $(PROJECT_ICD_FILE) > vmd-filestore/model.cfg
|
||||
|
||||
$(PROJECT_BINARY_NAME): $(PROJECT_SOURCES) $(LIB_NAME)
|
||||
$(CC) $(CFLAGS) $(LDFLAGS) -o $(PROJECT_BINARY_NAME) $(PROJECT_SOURCES) $(INCLUDES) $(LIB_NAME) $(LDLIBS)
|
||||
|
|
|
@ -2,6 +2,7 @@ MODEL(simpleIO){
|
|||
LD(GenericIO){
|
||||
LN(LLN0){
|
||||
DO(Mod 0){
|
||||
DA(stVal 0 3 0 1 0);
|
||||
DA(q 0 23 0 2 0);
|
||||
DA(t 0 22 0 0 0);
|
||||
DA(ctlModel 0 12 4 0 0)=0;
|
||||
|
@ -17,9 +18,9 @@ DA(q 0 23 0 2 0);
|
|||
DA(t 0 22 0 0 0);
|
||||
}
|
||||
DO(NamPlt 0){
|
||||
DA(vendor 0 20 5 0 0);
|
||||
DA(swRev 0 20 5 0 0);
|
||||
DA(d 0 20 5 0 0);
|
||||
DA(vendor 0 20 5 0 0)="MZ Automation";
|
||||
DA(swRev 0 20 5 0 0)="0.7.3";
|
||||
DA(d 0 20 5 0 0)="libiec61850 server example";
|
||||
DA(configRev 0 20 5 0 0);
|
||||
DA(ldNs 0 20 11 0 0);
|
||||
}
|
||||
|
@ -29,24 +30,33 @@ DE(GGIO1$ST$SPCSO2$stVal);
|
|||
DE(GGIO1$ST$SPCSO3$stVal);
|
||||
DE(GGIO1$ST$SPCSO4$stVal);
|
||||
}
|
||||
DS(AnalogValues){
|
||||
DE(GGIO1$MX$AnIn1);
|
||||
DE(GGIO1$MX$AnIn2);
|
||||
DE(GGIO1$MX$AnIn3);
|
||||
DE(GGIO1$MX$AnIn4);
|
||||
DS(Events2){
|
||||
DE(GGIO1$ST$SPCSO1);
|
||||
DE(GGIO1$ST$SPCSO2);
|
||||
DE(GGIO1$ST$SPCSO3);
|
||||
DE(GGIO1$ST$SPCSO4);
|
||||
}
|
||||
RC(EventsRCB01 Events 0 Events 1 24 111 50 1000);
|
||||
RC(AnalogValuesRCB01 AnalogValues 0 AnalogValues 1 24 111 50 1000);
|
||||
LC(EventLog Events GenericIO/LLN0$EventLog 19 0 0 1);
|
||||
LC(GeneralLog - - 19 0 0 1);
|
||||
DS(Measurements){
|
||||
DE(GGIO1$MX$AnIn1$mag$f);
|
||||
DE(GGIO1$MX$AnIn1$q);
|
||||
DE(GGIO1$MX$AnIn2$mag$f);
|
||||
DE(GGIO1$MX$AnIn2$q);
|
||||
DE(GGIO1$MX$AnIn3$mag$f);
|
||||
DE(GGIO1$MX$AnIn3$q);
|
||||
DE(GGIO1$MX$AnIn4$mag$f);
|
||||
DE(GGIO1$MX$AnIn4$q);
|
||||
}
|
||||
RC(EventsRCB01 Events1 0 Events 4294967295 24 111 50 1000);
|
||||
RC(EventsIndexed01 Events2 0 Events 1 24 111 50 1000);
|
||||
RC(EventsIndexed02 Events2 0 Events 1 24 111 50 1000);
|
||||
RC(EventsIndexed03 Events2 0 Events 1 24 111 50 1000);
|
||||
RC(Measurements01 Measurements 1 Measurements 1 16 111 50 1000);
|
||||
RC(Measurements02 Measurements 1 Measurements 1 16 111 50 1000);
|
||||
RC(Measurements03 Measurements 1 Measurements 1 16 111 50 1000);
|
||||
LC(EventLog Events GenericIO/LLN0$EventLog 19 0 1 1);
|
||||
LC(GeneralLog - - 19 0 1 1);
|
||||
LOG(GeneralLog);
|
||||
LOG(EventLog);
|
||||
GC(gcbEvents events Events 2 0 -1 -1 ){
|
||||
PA(4 273 4096 010ccd010001);
|
||||
}
|
||||
GC(gcbAnalogValues analog AnalogValues 2 0 -1 -1 ){
|
||||
PA(4 273 4096 010ccd010001);
|
||||
}
|
||||
}
|
||||
LN(LPHD1){
|
||||
DO(PhyNam 0){
|
||||
|
@ -92,11 +102,11 @@ DA(q 0 23 1 2 0);
|
|||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(AnIn2 0){
|
||||
DA(mag 0 27 1 1 101){
|
||||
DA(mag 0 27 1 1 0){
|
||||
DA(f 0 10 1 1 0);
|
||||
}
|
||||
DA(q 0 23 1 2 0);
|
||||
DA(t 0 22 1 0 102);
|
||||
DA(t 0 22 1 0 0);
|
||||
}
|
||||
DO(AnIn3 0){
|
||||
DA(mag 0 27 1 1 0){
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example_SRCS
|
||||
server_example_files.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example_files
|
||||
${server_example_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example_files
|
||||
iec61850
|
||||
)
|
|
@ -1,98 +0,0 @@
|
|||
/*
|
||||
* server_example_files.c
|
||||
*
|
||||
* - How to use some special MMS file service features
|
||||
* - How to control how files file services can be used
|
||||
*/
|
||||
|
||||
#include "iec61850_server.h"
|
||||
#include "hal_thread.h"
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "static_model.h"
|
||||
|
||||
/* import IEC 61850 device model created from SCL-File */
|
||||
extern IedModel iedModel;
|
||||
|
||||
static int running = 0;
|
||||
static IedServer iedServer = NULL;
|
||||
|
||||
void
|
||||
sigint_handler(int signalId)
|
||||
{
|
||||
running = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
connectionHandler (IedServer self, ClientConnection connection, bool connected, void* parameter)
|
||||
{
|
||||
if (connected)
|
||||
printf("Connection opened\n");
|
||||
else
|
||||
printf("Connection closed\n");
|
||||
}
|
||||
|
||||
static MmsError
|
||||
fileAccessHandler (void* parameter, MmsServerConnection connection, MmsFileServiceType service,
|
||||
const char* localFilename, const char* otherFilename)
|
||||
{
|
||||
printf("fileAccessHandler: service = %i, local-file: %s other-file: %s\n", service, localFilename, otherFilename);
|
||||
|
||||
/* Don't allow client to rename files */
|
||||
if (service == MMS_FILE_ACCESS_TYPE_RENAME)
|
||||
return MMS_ERROR_FILE_FILE_ACCESS_DENIED;
|
||||
|
||||
/* Don't allow client to delete fike "IEDSERVER.BIN" */
|
||||
if (service == MMS_FILE_ACCESS_TYPE_DELETE) {
|
||||
if (strcmp(localFilename, "IEDSERVER.BIN") == 0)
|
||||
return MMS_ERROR_FILE_FILE_ACCESS_DENIED;
|
||||
}
|
||||
|
||||
/* allow all other accesses */
|
||||
return MMS_ERROR_NONE;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
printf("Using libIEC61850 version %s\n", LibIEC61850_getVersionString());
|
||||
|
||||
iedServer = IedServer_create(&iedModel);
|
||||
|
||||
/* Set the base path for the MMS file services */
|
||||
MmsServer mmsServer = IedServer_getMmsServer(iedServer);
|
||||
MmsServer_setFilestoreBasepath(mmsServer, "./vmd-filestore/");
|
||||
|
||||
/* Set a callback handler to control file accesses */
|
||||
MmsServer_installFileAccessHandler(mmsServer, fileAccessHandler, NULL);
|
||||
|
||||
IedServer_setConnectionIndicationHandler(iedServer, (IedConnectionIndicationHandler) connectionHandler, NULL);
|
||||
|
||||
/* 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);
|
||||
|
||||
|
||||
while (running)
|
||||
Thread_sleep(100);
|
||||
|
||||
|
||||
/* stop MMS server - close TCP server socket and all client sockets */
|
||||
IedServer_stop(iedServer);
|
||||
|
||||
/* Cleanup - free all resources */
|
||||
IedServer_destroy(iedServer);
|
||||
|
||||
} /* main() */
|
|
@ -1,281 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<SCL xmlns="http://www.iec.ch/61850/2003/SCL">
|
||||
<Header id="" nameStructure="IEDName">
|
||||
</Header>
|
||||
<Communication>
|
||||
<SubNetwork name="subnetwork1" type="8-MMS">
|
||||
<Text>Station bus</Text>
|
||||
<BitRate unit="b/s">10</BitRate>
|
||||
<ConnectedAP iedName="simpleIO" apName="accessPoint1">
|
||||
<Address>
|
||||
<P type="IP">10.0.0.2</P>
|
||||
<P type="IP-SUBNET">255.255.255.0</P>
|
||||
<P type="IP-GATEWAY">10.0.0.1</P>
|
||||
<P type="OSI-TSEL">0001</P>
|
||||
<P type="OSI-PSEL">00000001</P>
|
||||
<P type="OSI-SSEL">0001</P>
|
||||
</Address>
|
||||
</ConnectedAP>
|
||||
</SubNetwork>
|
||||
</Communication>
|
||||
<IED name="simpleIO">
|
||||
<Services>
|
||||
<DynAssociation />
|
||||
<GetDirectory />
|
||||
<GetDataObjectDefinition />
|
||||
<GetDataSetValue />
|
||||
<DataSetDirectory />
|
||||
<ReadWrite />
|
||||
<GetCBValues />
|
||||
<ConfLNs fixPrefix="true" fixLnInst="true" />
|
||||
<GOOSE max="5" />
|
||||
<GSSE max="5" />
|
||||
<FileHandling />
|
||||
<GSEDir />
|
||||
<TimerActivatedControl />
|
||||
</Services>
|
||||
<AccessPoint name="accessPoint1">
|
||||
<Server>
|
||||
<Authentication />
|
||||
<LDevice inst="GenericIO">
|
||||
<LN0 lnClass="LLN0" lnType="LLN01" inst="">
|
||||
|
||||
<DataSet name="Events" desc="Events">
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO1" daName="stVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO2" daName="stVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO3" daName="stVal" />
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO4" daName="stVal" />
|
||||
</DataSet>
|
||||
|
||||
<DataSet name="Events2" desc="Events2">
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO1" />
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO2" />
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO3" />
|
||||
<FCDA ldInst="GenericIO" lnClass="GGIO" fc="ST" lnInst="1" doName="SPCSO4" />
|
||||
</DataSet>
|
||||
|
||||
<DataSet name="Measurements" desc="Measurements">
|
||||
<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="4294967295" 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" />
|
||||
<RptEnabled max="1" />
|
||||
</ReportControl>
|
||||
|
||||
<ReportControl name="EventsIndexed" indexed="true" confRev="1" datSet="Events" rptID="Events2" buffered="false" intgPd="1000" bufTime="50">
|
||||
<TrgOps period="true" />
|
||||
<OptFields seqNum="true" timeStamp="true" dataSet="true" reasonCode="true" entryID="true" configRef="true" />
|
||||
<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>
|
||||
|
||||
<LogControl name="GeneralLog" logName="">
|
||||
<TrgOps dchg="true" qchg="true"/>
|
||||
</LogControl>
|
||||
|
||||
|
||||
<Log />
|
||||
<Log name="EventLog" />
|
||||
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
|
||||
<DOI name="NamPlt">
|
||||
<DAI name="vendor">
|
||||
<Val>MZ Automation</Val>
|
||||
</DAI>
|
||||
<DAI name="swRev">
|
||||
<Val>0.7.3</Val>
|
||||
</DAI>
|
||||
<DAI name="d">
|
||||
<Val>libiec61850 server example</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN0>
|
||||
<LN lnClass="LPHD" lnType="LPHD1" inst="1" prefix="" />
|
||||
<LN lnClass="GGIO" lnType="GGIO1" inst="1" prefix="">
|
||||
<DOI name="Mod">
|
||||
<DAI name="ctlModel">
|
||||
<Val>status-only</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO1">
|
||||
<DAI name="ctlModel">
|
||||
<Val>direct-with-normal-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO2">
|
||||
<DAI name="ctlModel">
|
||||
<Val>direct-with-normal-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO3">
|
||||
<DAI name="ctlModel">
|
||||
<Val>direct-with-normal-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
<DOI name="SPCSO4">
|
||||
<DAI name="ctlModel">
|
||||
<Val>direct-with-normal-security</Val>
|
||||
</DAI>
|
||||
</DOI>
|
||||
</LN>
|
||||
</LDevice>
|
||||
</Server>
|
||||
</AccessPoint>
|
||||
</IED>
|
||||
<DataTypeTemplates>
|
||||
<LNodeType id="LLN01" lnClass="LLN0">
|
||||
<DO name="Mod" type="INC_1_Mod" />
|
||||
<DO name="Beh" type="INS_1_Beh" />
|
||||
<DO name="Health" type="INS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_1_NamPlt" />
|
||||
</LNodeType>
|
||||
<LNodeType id="LPHD1" lnClass="LPHD">
|
||||
<DO name="PhyNam" type="DPL_1_PhyNam" />
|
||||
<DO name="PhyHealth" type="INS_1_Beh" />
|
||||
<DO name="Proxy" type="SPS_1_Proxy" />
|
||||
</LNodeType>
|
||||
<LNodeType id="GGIO1" lnClass="GGIO">
|
||||
<DO name="Mod" type="INC_2_Mod" />
|
||||
<DO name="Beh" type="INS_1_Beh" />
|
||||
<DO name="Health" type="INS_1_Beh" />
|
||||
<DO name="NamPlt" type="LPL_2_NamPlt" />
|
||||
<DO name="AnIn1" type="MV_1_AnIn1" />
|
||||
<DO name="AnIn2" type="MV_1_AnIn1" />
|
||||
<DO name="AnIn3" type="MV_1_AnIn1" />
|
||||
<DO name="AnIn4" type="MV_1_AnIn1" />
|
||||
<DO name="SPCSO1" type="SPC_2_SPCSO1" />
|
||||
<DO name="SPCSO2" type="SPC_1_SPCSO2" />
|
||||
<DO name="SPCSO3" type="SPC_1_SPCSO3" />
|
||||
<DO name="SPCSO4" type="SPC_1_SPCSO1" />
|
||||
<DO name="Ind1" type="SPS_1_Proxy" />
|
||||
<DO name="Ind2" type="SPS_1_Proxy" />
|
||||
<DO name="Ind3" type="SPS_1_Proxy" />
|
||||
<DO name="Ind4" type="SPS_1_Proxy" />
|
||||
</LNodeType>
|
||||
<DOType id="INC_1_Mod" cdc="INC">
|
||||
<DA name="stVal" bType="INT32" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="INS_1_Beh" cdc="INS">
|
||||
<DA name="stVal" bType="INT32" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DOType id="LPL_1_NamPlt" cdc="LPL">
|
||||
<DA name="vendor" bType="VisString255" fc="DC" />
|
||||
<DA name="swRev" bType="VisString255" fc="DC" />
|
||||
<DA name="d" bType="VisString255" fc="DC" />
|
||||
<DA name="configRev" bType="VisString255" fc="DC" />
|
||||
<DA name="ldNs" bType="VisString255" fc="EX" />
|
||||
</DOType>
|
||||
<DOType id="DPL_1_PhyNam" cdc="DPL">
|
||||
<DA name="vendor" bType="VisString255" fc="DC" />
|
||||
</DOType>
|
||||
<DOType id="SPS_1_Proxy" cdc="SPS">
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DOType id="LPL_2_NamPlt" cdc="LPL">
|
||||
<DA name="vendor" bType="VisString255" fc="DC" />
|
||||
<DA name="swRev" bType="VisString255" fc="DC" />
|
||||
<DA name="d" bType="VisString255" fc="DC" />
|
||||
</DOType>
|
||||
<DOType id="MV_1_AnIn1" cdc="MV">
|
||||
<DA name="mag" type="AnalogueValue_1" bType="Struct" fc="MX" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="MX" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="MX" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO1" cdc="SPC">
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DOType id="INC_2_Mod" cdc="INC">
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
</DOType>
|
||||
<DOType id="SPC_2_SPCSO1" cdc="SPC">
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO2" cdc="SPC">
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DOType id="SPC_1_SPCSO3" cdc="SPC">
|
||||
<DA name="stVal" bType="BOOLEAN" fc="ST" dchg="true" />
|
||||
<DA name="q" bType="Quality" fc="ST" qchg="true" />
|
||||
<DA name="Oper" type="SPCOperate_1" bType="Struct" fc="CO" />
|
||||
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
|
||||
<DA name="t" bType="Timestamp" fc="ST" />
|
||||
</DOType>
|
||||
<DAType id="AnalogueValue_1">
|
||||
<BDA name="f" bType="FLOAT32" />
|
||||
</DAType>
|
||||
<DAType id="Originator_1">
|
||||
<BDA name="orCat" type="OrCat" bType="Enum" />
|
||||
<BDA name="orIdent" bType="Octet64" />
|
||||
</DAType>
|
||||
<DAType id="SPCOperate_1">
|
||||
<BDA name="ctlVal" bType="BOOLEAN" />
|
||||
<BDA name="origin" type="Originator_1" bType="Struct" />
|
||||
<BDA name="ctlNum" bType="INT8U" />
|
||||
<BDA name="T" bType="Timestamp" />
|
||||
<BDA name="Test" bType="BOOLEAN" />
|
||||
<BDA name="Check" bType="Check" />
|
||||
</DAType>
|
||||
<EnumType id="CtlModels">
|
||||
<EnumVal ord="0">status-only</EnumVal>
|
||||
<EnumVal ord="1">direct-with-normal-security</EnumVal>
|
||||
<EnumVal ord="2">sbo-with-normal-security</EnumVal>
|
||||
<EnumVal ord="3">direct-with-enhanced-security</EnumVal>
|
||||
<EnumVal ord="4">sbo-with-enhanced-security</EnumVal>
|
||||
</EnumType>
|
||||
<EnumType id="OrCat">
|
||||
<EnumVal ord="0">not-supported</EnumVal>
|
||||
<EnumVal ord="1">bay-control</EnumVal>
|
||||
<EnumVal ord="2">station-control</EnumVal>
|
||||
<EnumVal ord="3">remote-control</EnumVal>
|
||||
<EnumVal ord="4">automatic-bay</EnumVal>
|
||||
<EnumVal ord="5">automatic-station</EnumVal>
|
||||
<EnumVal ord="6">automatic-remote</EnumVal>
|
||||
<EnumVal ord="7">maintenance</EnumVal>
|
||||
<EnumVal ord="8">process</EnumVal>
|
||||
</EnumType>
|
||||
</DataTypeTemplates>
|
||||
</SCL>
|
|
@ -1,301 +0,0 @@
|
|||
/*
|
||||
* static_model.h
|
||||
*
|
||||
* automatically generated from simpleIO_direct_control.icd
|
||||
*/
|
||||
|
||||
#ifndef STATIC_MODEL_H_
|
||||
#define STATIC_MODEL_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "iec61850_model.h"
|
||||
|
||||
extern IedModel iedModel;
|
||||
extern LogicalDevice iedModel_GenericIO;
|
||||
extern LogicalNode iedModel_GenericIO_LLN0;
|
||||
extern DataObject iedModel_GenericIO_LLN0_Mod;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Mod_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Mod_q;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Mod_t;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Mod_ctlModel;
|
||||
extern DataObject iedModel_GenericIO_LLN0_Beh;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Beh_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Beh_q;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Beh_t;
|
||||
extern DataObject iedModel_GenericIO_LLN0_Health;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Health_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Health_q;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_Health_t;
|
||||
extern DataObject iedModel_GenericIO_LLN0_NamPlt;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_vendor;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_d;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev;
|
||||
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs;
|
||||
extern LogicalNode iedModel_GenericIO_LPHD1;
|
||||
extern DataObject iedModel_GenericIO_LPHD1_PhyNam;
|
||||
extern DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor;
|
||||
extern DataObject iedModel_GenericIO_LPHD1_PhyHealth;
|
||||
extern DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_q;
|
||||
extern DataAttribute iedModel_GenericIO_LPHD1_PhyHealth_t;
|
||||
extern DataObject iedModel_GenericIO_LPHD1_Proxy;
|
||||
extern DataAttribute iedModel_GenericIO_LPHD1_Proxy_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_LPHD1_Proxy_q;
|
||||
extern DataAttribute iedModel_GenericIO_LPHD1_Proxy_t;
|
||||
extern LogicalNode iedModel_GenericIO_GGIO1;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_Mod;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Mod_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Mod_t;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Mod_ctlModel;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_Beh;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Beh_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Beh_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Beh_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_Health;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Health_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Health_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Health_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_NamPlt;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_NamPlt_vendor;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_NamPlt_swRev;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_NamPlt_d;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_AnIn1;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_mag_f;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn1_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_AnIn2;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_mag_f;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn2_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_AnIn3;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_mag_f;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn3_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_AnIn4;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_mag_f;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_AnIn4_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_SPCSO1;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_T;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_ctlModel;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO1_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_SPCSO2;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_T;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_ctlModel;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO2_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_SPCSO3;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_T;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_ctlModel;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO3_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_SPCSO4;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_T;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_ctlModel;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_SPCSO4_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_Ind1;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind1_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind1_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind1_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_Ind2;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind2_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind2_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind2_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_Ind3;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind3_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind3_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind3_t;
|
||||
extern DataObject iedModel_GenericIO_GGIO1_Ind4;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_stVal;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_q;
|
||||
extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_t;
|
||||
|
||||
|
||||
|
||||
#define IEDMODEL_GenericIO (&iedModel_GenericIO)
|
||||
#define IEDMODEL_GenericIO_LLN0 (&iedModel_GenericIO_LLN0)
|
||||
#define IEDMODEL_GenericIO_LLN0_Mod (&iedModel_GenericIO_LLN0_Mod)
|
||||
#define IEDMODEL_GenericIO_LLN0_Mod_stVal (&iedModel_GenericIO_LLN0_Mod_stVal)
|
||||
#define IEDMODEL_GenericIO_LLN0_Mod_q (&iedModel_GenericIO_LLN0_Mod_q)
|
||||
#define IEDMODEL_GenericIO_LLN0_Mod_t (&iedModel_GenericIO_LLN0_Mod_t)
|
||||
#define IEDMODEL_GenericIO_LLN0_Mod_ctlModel (&iedModel_GenericIO_LLN0_Mod_ctlModel)
|
||||
#define IEDMODEL_GenericIO_LLN0_Beh (&iedModel_GenericIO_LLN0_Beh)
|
||||
#define IEDMODEL_GenericIO_LLN0_Beh_stVal (&iedModel_GenericIO_LLN0_Beh_stVal)
|
||||
#define IEDMODEL_GenericIO_LLN0_Beh_q (&iedModel_GenericIO_LLN0_Beh_q)
|
||||
#define IEDMODEL_GenericIO_LLN0_Beh_t (&iedModel_GenericIO_LLN0_Beh_t)
|
||||
#define IEDMODEL_GenericIO_LLN0_Health (&iedModel_GenericIO_LLN0_Health)
|
||||
#define IEDMODEL_GenericIO_LLN0_Health_stVal (&iedModel_GenericIO_LLN0_Health_stVal)
|
||||
#define IEDMODEL_GenericIO_LLN0_Health_q (&iedModel_GenericIO_LLN0_Health_q)
|
||||
#define IEDMODEL_GenericIO_LLN0_Health_t (&iedModel_GenericIO_LLN0_Health_t)
|
||||
#define IEDMODEL_GenericIO_LLN0_NamPlt (&iedModel_GenericIO_LLN0_NamPlt)
|
||||
#define IEDMODEL_GenericIO_LLN0_NamPlt_vendor (&iedModel_GenericIO_LLN0_NamPlt_vendor)
|
||||
#define IEDMODEL_GenericIO_LLN0_NamPlt_swRev (&iedModel_GenericIO_LLN0_NamPlt_swRev)
|
||||
#define IEDMODEL_GenericIO_LLN0_NamPlt_d (&iedModel_GenericIO_LLN0_NamPlt_d)
|
||||
#define IEDMODEL_GenericIO_LLN0_NamPlt_configRev (&iedModel_GenericIO_LLN0_NamPlt_configRev)
|
||||
#define IEDMODEL_GenericIO_LLN0_NamPlt_ldNs (&iedModel_GenericIO_LLN0_NamPlt_ldNs)
|
||||
#define IEDMODEL_GenericIO_LPHD1 (&iedModel_GenericIO_LPHD1)
|
||||
#define IEDMODEL_GenericIO_LPHD1_PhyNam (&iedModel_GenericIO_LPHD1_PhyNam)
|
||||
#define IEDMODEL_GenericIO_LPHD1_PhyNam_vendor (&iedModel_GenericIO_LPHD1_PhyNam_vendor)
|
||||
#define IEDMODEL_GenericIO_LPHD1_PhyHealth (&iedModel_GenericIO_LPHD1_PhyHealth)
|
||||
#define IEDMODEL_GenericIO_LPHD1_PhyHealth_stVal (&iedModel_GenericIO_LPHD1_PhyHealth_stVal)
|
||||
#define IEDMODEL_GenericIO_LPHD1_PhyHealth_q (&iedModel_GenericIO_LPHD1_PhyHealth_q)
|
||||
#define IEDMODEL_GenericIO_LPHD1_PhyHealth_t (&iedModel_GenericIO_LPHD1_PhyHealth_t)
|
||||
#define IEDMODEL_GenericIO_LPHD1_Proxy (&iedModel_GenericIO_LPHD1_Proxy)
|
||||
#define IEDMODEL_GenericIO_LPHD1_Proxy_stVal (&iedModel_GenericIO_LPHD1_Proxy_stVal)
|
||||
#define IEDMODEL_GenericIO_LPHD1_Proxy_q (&iedModel_GenericIO_LPHD1_Proxy_q)
|
||||
#define IEDMODEL_GenericIO_LPHD1_Proxy_t (&iedModel_GenericIO_LPHD1_Proxy_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1 (&iedModel_GenericIO_GGIO1)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Mod (&iedModel_GenericIO_GGIO1_Mod)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Mod_q (&iedModel_GenericIO_GGIO1_Mod_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Mod_t (&iedModel_GenericIO_GGIO1_Mod_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Mod_ctlModel (&iedModel_GenericIO_GGIO1_Mod_ctlModel)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Beh (&iedModel_GenericIO_GGIO1_Beh)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Beh_stVal (&iedModel_GenericIO_GGIO1_Beh_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Beh_q (&iedModel_GenericIO_GGIO1_Beh_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Beh_t (&iedModel_GenericIO_GGIO1_Beh_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Health (&iedModel_GenericIO_GGIO1_Health)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Health_stVal (&iedModel_GenericIO_GGIO1_Health_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Health_q (&iedModel_GenericIO_GGIO1_Health_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Health_t (&iedModel_GenericIO_GGIO1_Health_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_NamPlt (&iedModel_GenericIO_GGIO1_NamPlt)
|
||||
#define IEDMODEL_GenericIO_GGIO1_NamPlt_vendor (&iedModel_GenericIO_GGIO1_NamPlt_vendor)
|
||||
#define IEDMODEL_GenericIO_GGIO1_NamPlt_swRev (&iedModel_GenericIO_GGIO1_NamPlt_swRev)
|
||||
#define IEDMODEL_GenericIO_GGIO1_NamPlt_d (&iedModel_GenericIO_GGIO1_NamPlt_d)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn1 (&iedModel_GenericIO_GGIO1_AnIn1)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn1_mag (&iedModel_GenericIO_GGIO1_AnIn1_mag)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn1_mag_f (&iedModel_GenericIO_GGIO1_AnIn1_mag_f)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn1_q (&iedModel_GenericIO_GGIO1_AnIn1_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn1_t (&iedModel_GenericIO_GGIO1_AnIn1_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn2 (&iedModel_GenericIO_GGIO1_AnIn2)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn2_mag (&iedModel_GenericIO_GGIO1_AnIn2_mag)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn2_mag_f (&iedModel_GenericIO_GGIO1_AnIn2_mag_f)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn2_q (&iedModel_GenericIO_GGIO1_AnIn2_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn2_t (&iedModel_GenericIO_GGIO1_AnIn2_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn3 (&iedModel_GenericIO_GGIO1_AnIn3)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn3_mag (&iedModel_GenericIO_GGIO1_AnIn3_mag)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn3_mag_f (&iedModel_GenericIO_GGIO1_AnIn3_mag_f)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn3_q (&iedModel_GenericIO_GGIO1_AnIn3_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn3_t (&iedModel_GenericIO_GGIO1_AnIn3_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn4 (&iedModel_GenericIO_GGIO1_AnIn4)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn4_mag (&iedModel_GenericIO_GGIO1_AnIn4_mag)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn4_mag_f (&iedModel_GenericIO_GGIO1_AnIn4_mag_f)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn4_q (&iedModel_GenericIO_GGIO1_AnIn4_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_AnIn4_t (&iedModel_GenericIO_GGIO1_AnIn4_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1 (&iedModel_GenericIO_GGIO1_SPCSO1)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_stVal (&iedModel_GenericIO_GGIO1_SPCSO1_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_q (&iedModel_GenericIO_GGIO1_SPCSO1_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper (&iedModel_GenericIO_GGIO1_SPCSO1_Oper)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_ctlVal (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_origin (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orCat)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_origin_orIdent)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_ctlNum (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_ctlNum)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_T (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_T)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_Test (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_Test)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_Oper_Check (&iedModel_GenericIO_GGIO1_SPCSO1_Oper_Check)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO1_ctlModel)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO1_t (&iedModel_GenericIO_GGIO1_SPCSO1_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2 (&iedModel_GenericIO_GGIO1_SPCSO2)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_stVal (&iedModel_GenericIO_GGIO1_SPCSO2_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_q (&iedModel_GenericIO_GGIO1_SPCSO2_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper (&iedModel_GenericIO_GGIO1_SPCSO2_Oper)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_ctlVal (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_origin (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orCat)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_origin_orIdent)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_ctlNum (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_ctlNum)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_T (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_T)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_Test (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_Test)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_Oper_Check (&iedModel_GenericIO_GGIO1_SPCSO2_Oper_Check)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO2_ctlModel)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO2_t (&iedModel_GenericIO_GGIO1_SPCSO2_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3 (&iedModel_GenericIO_GGIO1_SPCSO3)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_stVal (&iedModel_GenericIO_GGIO1_SPCSO3_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_q (&iedModel_GenericIO_GGIO1_SPCSO3_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper (&iedModel_GenericIO_GGIO1_SPCSO3_Oper)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_ctlVal (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_origin (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orCat)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_origin_orIdent)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_ctlNum (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_ctlNum)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_T (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_T)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_Test (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_Test)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_Oper_Check (&iedModel_GenericIO_GGIO1_SPCSO3_Oper_Check)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO3_ctlModel)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO3_t (&iedModel_GenericIO_GGIO1_SPCSO3_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4 (&iedModel_GenericIO_GGIO1_SPCSO4)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_stVal (&iedModel_GenericIO_GGIO1_SPCSO4_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_q (&iedModel_GenericIO_GGIO1_SPCSO4_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper (&iedModel_GenericIO_GGIO1_SPCSO4_Oper)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_ctlVal (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_origin (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orCat)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_origin_orIdent)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_ctlNum (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_ctlNum)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_T (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_T)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_Test (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_Test)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_Oper_Check (&iedModel_GenericIO_GGIO1_SPCSO4_Oper_Check)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_ctlModel (&iedModel_GenericIO_GGIO1_SPCSO4_ctlModel)
|
||||
#define IEDMODEL_GenericIO_GGIO1_SPCSO4_t (&iedModel_GenericIO_GGIO1_SPCSO4_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind1 (&iedModel_GenericIO_GGIO1_Ind1)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind1_stVal (&iedModel_GenericIO_GGIO1_Ind1_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind1_q (&iedModel_GenericIO_GGIO1_Ind1_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind1_t (&iedModel_GenericIO_GGIO1_Ind1_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind2 (&iedModel_GenericIO_GGIO1_Ind2)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind2_stVal (&iedModel_GenericIO_GGIO1_Ind2_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind2_q (&iedModel_GenericIO_GGIO1_Ind2_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind2_t (&iedModel_GenericIO_GGIO1_Ind2_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind3 (&iedModel_GenericIO_GGIO1_Ind3)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind3_stVal (&iedModel_GenericIO_GGIO1_Ind3_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind3_q (&iedModel_GenericIO_GGIO1_Ind3_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind3_t (&iedModel_GenericIO_GGIO1_Ind3_t)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind4 (&iedModel_GenericIO_GGIO1_Ind4)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind4_stVal (&iedModel_GenericIO_GGIO1_Ind4_stVal)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind4_q (&iedModel_GenericIO_GGIO1_Ind4_q)
|
||||
#define IEDMODEL_GenericIO_GGIO1_Ind4_t (&iedModel_GenericIO_GGIO1_Ind4_t)
|
||||
|
||||
#endif /* STATIC_MODEL_H_ */
|
||||
|
|
@ -1 +0,0 @@
|
|||
test
|
|
@ -1,21 +0,0 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example_SRCS
|
||||
server_example_password_auth.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example_password_auth
|
||||
${server_example_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example_password_auth
|
||||
iec61850
|
||||
)
|
|
@ -1,21 +0,0 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example_SRCS
|
||||
server_example_simple.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example_simple
|
||||
${server_example_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example_simple
|
||||
iec61850
|
||||
)
|
|
@ -1,21 +0,0 @@
|
|||
include_directories(
|
||||
.
|
||||
)
|
||||
|
||||
set(server_example_SRCS
|
||||
server_example_write_handler.c
|
||||
static_model.c
|
||||
)
|
||||
|
||||
IF(WIN32)
|
||||
set_source_files_properties(${server_example_SRCS}
|
||||
PROPERTIES LANGUAGE CXX)
|
||||
ENDIF(WIN32)
|
||||
|
||||
add_executable(server_example_write_handler
|
||||
${server_example_SRCS}
|
||||
)
|
||||
|
||||
target_link_libraries(server_example_write_handler
|
||||
iec61850
|
||||
)
|
|
@ -20,16 +20,7 @@ void sigint_handler(int signalId)
|
|||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
char* interface;
|
||||
|
||||
if (argc > 1)
|
||||
interface = argv[1];
|
||||
else
|
||||
interface = "eth0";
|
||||
|
||||
printf("Using interface %s\n", interface);
|
||||
|
||||
SampledValuesPublisher svPublisher = SampledValuesPublisher_create(NULL, interface);
|
||||
SampledValuesPublisher svPublisher = SampledValuesPublisher_create("vboxnet0");
|
||||
|
||||
SV_ASDU asdu1 = SampledValuesPublisher_addASDU(svPublisher, "svpub1", NULL, 1);
|
||||
|
||||
|
@ -60,7 +51,7 @@ main(int argc, char** argv)
|
|||
|
||||
SampledValuesPublisher_publish(svPublisher);
|
||||
|
||||
Thread_sleep(50);
|
||||
//Thread_sleep(50);
|
||||
}
|
||||
|
||||
SampledValuesPublisher_destroy(svPublisher);
|
||||
|
|
|
@ -6,7 +6,6 @@ ARM_TOOLCHAIN_PREFIX=arm-linux-gnueabihf-
|
|||
#ARM_TOOLCHAIN_PREFIX=arm-poky-linux-gnueabi-
|
||||
#ARM_TOOLCHAIN_PREFIX=arm-linux-gnueabi-
|
||||
UCLINUX_ARM_TOOLCHAIN_PREFIX=arm-uclinux-elf-
|
||||
UCLINUX_XPORT_TOOLCHAIN_PREFIX=m68k-uclinux-
|
||||
MINGW_TOOLCHAIN_PREFIX=i586-mingw32msvc-
|
||||
#MINGW_TOOLCHAIN_PREFIX=x86_64-w64-mingw32-
|
||||
MINGW64_TOOLCHAIN_PREFIX=x86_64-w64-mingw32-
|
||||
|
@ -61,14 +60,6 @@ CFLAGS += -mno-unaligned-access
|
|||
#CFLAGS += -mcpu=arm926ej-s
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET), UCLINUX-XPORT)
|
||||
TOOLCHAIN_PREFIX=$(UCLINUX_XPORT_TOOLCHAIN_PREFIX)
|
||||
CFLAGS += -DPLATFORM_BYTE_ORDER
|
||||
CFLAGS += -mcpu=5208
|
||||
CFLAGS += -fno-builtin -fno-common
|
||||
CFLAGS += -fno-dwarf2-cfi-asm -msep-data -DCONFIG_COLDFIRE -D__linux__ -Dunix -D__uClinux__
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET), UCLINUX-WAGO)
|
||||
TOOLCHAIN_PREFIX=$(UCLINUX_ARM_TOOLCHAIN_PREFIX)
|
||||
CFLAGS += -msoft-float
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
FIND_PACKAGE(SWIG REQUIRED)
|
||||
INCLUDE(${SWIG_USE_FILE})
|
||||
FIND_PACKAGE(PythonLibs REQUIRED)
|
||||
FIND_PACKAGE ( PythonInterp ${PYTHONLIBS_VERSION_STRING} EXACT REQUIRED )
|
||||
FIND_PACKAGE ( PythonInterp REQUIRED )
|
||||
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
|
||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
|
||||
SET(CMAKE_SWIG_FLAGS "")
|
||||
|
@ -17,7 +17,7 @@ EXECUTE_PROCESS ( #Finding python modules install path
|
|||
"import site, sys; sys.stdout.write(site.getsitepackages()[-1])"
|
||||
OUTPUT_VARIABLE PYTHON_SITE_DIR
|
||||
)
|
||||
INSTALL ( FILES ${CMAKE_CURRENT_BINARY_DIR}/iec61850.py DESTINATION ${PYTHON_SITE_DIR})
|
||||
INSTALL ( FILES ${CMAKE_BINARY_DIR}/iec61850.py DESTINATION ${PYTHON_SITE_DIR})
|
||||
INSTALL ( TARGETS _iec61850 LIBRARY DESTINATION ${PYTHON_SITE_DIR})
|
||||
|
||||
add_test(test_pyiec61850 ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/test_pyiec61850.py)
|
||||
add_test(test_pyiec61850 ${PYTHON_EXECUTABLE} test_pyiec61850.py)
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
import os,sys
|
||||
import iec61850
|
||||
if __name__=="__main__":
|
||||
hostname = "localhost";
|
||||
tcpPort = 102
|
||||
if len(sys.argv)>1:
|
||||
hostname = sys.argv[1]
|
||||
if len(sys.argv)>2:
|
||||
port = sys.argv[2]
|
||||
con = iec61850.IedConnection_create()
|
||||
error = iec61850.IedConnection_connect(con, hostname, tcpPort)
|
||||
if (error == iec61850.IED_ERROR_OK):
|
||||
[deviceList, error] = iec61850.IedConnection_getLogicalDeviceList(con)
|
||||
device = iec61850.LinkedList_getNext(deviceList)
|
||||
while device:
|
||||
LD_name=iec61850.toCharP(device.data)
|
||||
print("LD: %s" % LD_name)
|
||||
[logicalNodes, error] = iec61850.IedConnection_getLogicalDeviceDirectory(con, LD_name)
|
||||
logicalNode = iec61850.LinkedList_getNext(logicalNodes)
|
||||
while logicalNode:
|
||||
LN_name=iec61850.toCharP(logicalNode.data)
|
||||
print(" LN: %s" % LN_name)
|
||||
[LNobjects, error] = iec61850.IedConnection_getLogicalNodeVariables(con, LD_name+"/"+LN_name)
|
||||
LNobject = iec61850.LinkedList_getNext(LNobjects)
|
||||
while LNobject:
|
||||
print(" DO: %s" % iec61850.toCharP(LNobject.data))
|
||||
LNobject = iec61850.LinkedList_getNext(LNobject)
|
||||
iec61850.LinkedList_destroy(LNobjects)
|
||||
logicalNode = iec61850.LinkedList_getNext(logicalNode)
|
||||
iec61850.LinkedList_destroy(logicalNodes)
|
||||
device = iec61850.LinkedList_getNext(device)
|
||||
iec61850.LinkedList_destroy(deviceList)
|
||||
iec61850.IedConnection_close(con)
|
||||
else:
|
||||
print("Failed to connect to %s:%i\n"%(hostname, tcpPort))
|
||||
iec61850.IedConnection_destroy(con)
|
|
@ -18,10 +18,6 @@ ModelNode* toModelNode(DataObject * DO)
|
|||
{
|
||||
return (ModelNode*) DO;
|
||||
}
|
||||
char* toCharP(void * v)
|
||||
{
|
||||
return (char *) v;
|
||||
}
|
||||
DataAttribute* toDataAttribute(DataObject * DO)
|
||||
{ return (DataAttribute*)DO;}
|
||||
DataAttribute* toDataAttribute(ModelNode * MN)
|
||||
|
@ -39,9 +35,8 @@ DataAttribute* toDataAttribute(ModelNode * MN)
|
|||
%include "iec61850_server.h"
|
||||
%include "iec61850_dynamic_model.h"
|
||||
%include "iec61850_cdc.h"
|
||||
%include "linked_list.h"
|
||||
%include "linked_list.h
|
||||
ModelNode* toModelNode(LogicalNode *);
|
||||
ModelNode* toModelNode(DataObject *);
|
||||
DataAttribute* toDataAttribute(DataObject *);
|
||||
DataAttribute* toDataAttribute(ModelNode *);
|
||||
char* toCharP(void *);
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
#!/usr/bin/python
|
||||
import sys
|
||||
import time
|
||||
import iec61850
|
||||
import threading
|
||||
import traceback
|
||||
import signal
|
||||
import sys
|
||||
sys.path.append('.')
|
||||
import iec61850
|
||||
def signal_handler(signal, frame):
|
||||
global running
|
||||
running =0
|
||||
|
@ -55,20 +54,20 @@ def testClient():
|
|||
theVal = "testmodelSENSORS/TTMP1.TmpSp.setMag.f"
|
||||
theValType = iec61850.IEC61850_FC_SP
|
||||
temperatureSetpoint = iec61850.IedConnection_readFloatValue(con, theVal, theValType)
|
||||
print(temperatureSetpoint)
|
||||
print temperatureSetpoint
|
||||
assert(temperatureValue[1]==0)
|
||||
newValue= temperatureValue[0]+10
|
||||
err = iec61850.IedConnection_writeFloatValue(con, theVal, theValType, newValue)
|
||||
assert(err==0)
|
||||
temperatureSetpoint = iec61850.IedConnection_readFloatValue(con, theVal, theValType)
|
||||
print(temperatureSetpoint)
|
||||
print temperatureSetpoint
|
||||
assert(temperatureSetpoint[0]==newValue)
|
||||
iec61850.IedConnection_close(con)
|
||||
else:
|
||||
print("Connection error")
|
||||
print "Connection error"
|
||||
sys.exit(-1)
|
||||
iec61850.IedConnection_destroy(con)
|
||||
print("client ok")
|
||||
print "client ok"
|
||||
try:
|
||||
srv=myIECServer()
|
||||
srvThread = threading.Thread(target = srv.run)
|
||||
|
@ -78,6 +77,6 @@ try:
|
|||
#signal.pause()
|
||||
except:
|
||||
running = 0
|
||||
print("Error :")
|
||||
print "Error :"
|
||||
traceback.print_exc(file=sys.stdout)
|
||||
sys.exit(-1)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue