mirror of
https://git.rwth-aachen.de/acs/public/villas/node/
synced 2025-03-09 00:00:00 +01:00
Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
commit
c5806c0f79
5 changed files with 867 additions and 4 deletions
53
CHANGELOG.md
53
CHANGELOG.md
|
@ -5,20 +5,65 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.6.2] - Unreleased
|
||||
## [0.6.5] - Unrelease
|
||||
|
||||
### Changed
|
||||
|
||||
- Format identifiers such as `raw-flt32` now use dots instead of hyphens in their name.
|
||||
Please update your configuration files accordingly.
|
||||
- The configuration of many node-types is now splitted into seperate `in` and `out` sections. Please update your configuration files accordingly.
|
||||
|
||||
## [0.6.4] - 2018-07-18
|
||||
|
||||
### Added
|
||||
|
||||
- New client User Code Model (UCM) for OPAL-RT HYPERSIM digital real-time simulator
|
||||
- New node-types:
|
||||
- `infiniband` is using the Infiniband IBverbs and RDMA CM APIs for a low latency interface between simualation nodes.
|
||||
- `comedi` adds support for ADC and DAC cards supported by the [Comedi Linux control and measurment device interface](http://comedi.org).
|
||||
- All header files can now be imported into C++ code. Missing `extern "C"` declarations have been added.
|
||||
|
||||
### Changed
|
||||
|
||||
- The VILLASnode project is now built with [CMake](http://cmake.org). The old Makefile have been removed.
|
||||
- The VILLASnode project will be gradually ported to C++. The tools (`/tools/`), executables (`/src/`) and plugins (`/plugins/`) have already been convert to C++ code.
|
||||
|
||||
## [0.6.3] - 2018-06-04
|
||||
|
||||
### Added
|
||||
|
||||
- The `csv` IO format has been splitted into a similar `tsv` IO format which uses tabulators instead of commas.
|
||||
- The `struct queue_signalled` supports now synchronization under Mac OS X.
|
||||
- A new `poll` setting allows the user to enable/disable the usage of `poll(2)` when reading from multiple source nodes.
|
||||
|
||||
### Changed
|
||||
|
||||
- Started splitting the node configuration into a send and receive side. This changes will be soon also reflected in a changed configuration file syntax.
|
||||
- Docker images are now based on Fedora 28.
|
||||
|
||||
### Fixed
|
||||
|
||||
- We now correctly determine with terminal size when executed in GDB or by the CI runner.
|
||||
|
||||
## [0.6.2] - 2018-05-14
|
||||
|
||||
### Added
|
||||
|
||||
- A Docker application image can now be build in a single step using `make docker`.
|
||||
|
||||
### Changed
|
||||
|
||||
- The IO format names have changed. They now use dots (`raw.flt32`) instead of hyphens (`raw-flt32`) in their name. Please update your configuration files accordingly.
|
||||
|
||||
## [0.6.1] - 2018-02-17
|
||||
|
||||
### Changed
|
||||
|
||||
- Rewrite of IO formatting subsystem/
|
||||
|
||||
### Added
|
||||
|
||||
- New node-types:
|
||||
- `mqtt` for MQTT / Mosquitto
|
||||
- `make help` target
|
||||
- A new `make help` target shows the current build configuration and available targets.
|
||||
|
||||
### Fixed
|
||||
|
||||
|
|
11
clients/hypersim/README.md
Normal file
11
clients/hypersim/README.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
# HYPERSIM User Code Model
|
||||
|
||||
This directory contains a HYPERSIM user code model (UCM) for interfacing the HYPERSIM simulator to VILLASnode.
|
||||
|
||||
## Documentation
|
||||
|
||||
Detailed information for installation and usage of the UCM is provided in the [user documentation](https://villas.fein-aachen.org/doc/node-client-hypersim.html).
|
||||
|
||||
## Author
|
||||
|
||||
- Anju Meghwani <ameghwani@gmail.com>
|
807
clients/hypersim/model/ucm_node.def
Normal file
807
clients/hypersim/model/ucm_node.def
Normal file
|
@ -0,0 +1,807 @@
|
|||
%% User Model Definition File (V1.2)
|
||||
%% Generated from : ucm_def_file_templ_en.sh Version 1.5
|
||||
%% Hypersim (Ucm) : (c) Hydro-Quebec -- 2005
|
||||
%%
|
||||
%% -----------------------------------------------------------------------------
|
||||
%% Model : server -- Fri Jun 15 12:07:11 PDT 2018
|
||||
%% -----------------------------------------------------------------------------
|
||||
%%
|
||||
%% Definition of a user's created Hypersim model
|
||||
%% ---------------------------------------------
|
||||
%%
|
||||
%% Comments used by the definition file are preceded by this string: "%%"
|
||||
%%
|
||||
%% ***************************
|
||||
%% * DO NOT MODIFY COMMENTS! *
|
||||
%% ***************************
|
||||
%%
|
||||
%% Only edit zones between comments.
|
||||
%% Follow directives describing format of data.
|
||||
%%
|
||||
%% This file is divided en 3 major sections : "General description",
|
||||
%% "Preparatory data preprocessing" and "Model simulation".
|
||||
%%
|
||||
%% Here is the file general structure :
|
||||
%%
|
||||
%% I- Model description.
|
||||
%% 1- General informations or parameters.
|
||||
%% 2- Model's documentation.
|
||||
%% 3- Form parameters (tunables).
|
||||
%% 3.1- General parameters table.
|
||||
%% 3.2- (Load Flow parameters table. NOT IMPLEMENTED!!!)
|
||||
%% 4- Control IOs.
|
||||
%% 5- Network nodes.
|
||||
%% 6- Current sources.
|
||||
%% 7- Historical currents.
|
||||
%%
|
||||
%% II- Preparatory data preprocessing.
|
||||
%% 8- Calculated values.
|
||||
%% 8.1- Calculated parameters table.
|
||||
%% 8.2- (Calculated Load Flow values. NOT IMPLEMENTED!!!)
|
||||
%% 8.3- Preparation function code.
|
||||
%% 8.3.1- Function's global code.
|
||||
%% 8.3.2- Parameters & initial admittance matrix (Yini) calculation code.
|
||||
%% 8.3.3- (Load Flow results calculation code. NOT IMPLEMENTED!!!)
|
||||
%% 8.4- "Includes" paths list.
|
||||
%% 8.5- Required dependency libraries pathnames list.
|
||||
%% 8.6- Required libraries for preparatory functions.
|
||||
%%
|
||||
%% III- Model simulation.
|
||||
%% 9- Simulation code.
|
||||
%% 9.1- Historical values table.
|
||||
%% 9.2- Test points table.
|
||||
%% 9.3- Simulation functions global code.
|
||||
%% 9.4- Simulation initialization function.
|
||||
%% 9.5- Before "nodes voltage calculation" function code.
|
||||
%% 9.5.1- Sources calculation.
|
||||
%% 9.5.2- Command selection.
|
||||
%% 9.5.3- Admittances matrix calculation (YMadd).
|
||||
%% 9.6- After "nodes voltage calculation" function code.
|
||||
%% 9.6.1- Historical values calculation.
|
||||
%% 9.6.2- Commands outputs calculation.
|
||||
%% 9.6.3- Determine nodes to recalculate.
|
||||
%% 9.7- "Includes" paths list.
|
||||
%% 9.8- Required simulation dependency libraries pathnames list.
|
||||
%% 9.9- Libraries required by simulation functions.
|
||||
%% 10.0- Simulation finalization function.
|
||||
%%
|
||||
%% -----------------------------------------------------------------------------
|
||||
%% Beginning of model definition:
|
||||
%% -----------------------------------------------------------------------------
|
||||
%%
|
||||
%% I- Model description.
|
||||
%%
|
||||
%% 1- General informations or parameters.
|
||||
%% -----------------------------------
|
||||
%%
|
||||
%% UCM_NAME: Model Unique Name, already assigned
|
||||
%% UCM_TYPE: Model type (Choice of NetworkElement or CommandBlock)
|
||||
%% Default: NetworkElement.
|
||||
%% UCM_CATEGORY: Model category (Breaker, Transformer, etc.)
|
||||
%% Default : User
|
||||
%% UCM_VERSION: User's model version number (in a string)
|
||||
%% UCM_EXEC_TIME: Estimated model's average simulation step time.
|
||||
%% Default: 5.0e-6 s.
|
||||
%% UCM_DESCRIPTION: Short description of model (one phrase).
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN GENERAL INFORMATION -- Enter or modify general information
|
||||
|
||||
UCM_NAME = server
|
||||
UCM_TYPE = NetworkElement
|
||||
UCM_CATEGORY = User
|
||||
UCM_VERSION = "1.0"
|
||||
UCM_EXEC_TIME = 50.0e-6
|
||||
UCM_DESCRIPTION = "Description of server"
|
||||
|
||||
%% END GENERAL INFORMATION
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 2- Model's documentation.
|
||||
%% ----------------------
|
||||
%%
|
||||
%% Enter text or reference after comments.
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN DOCUMENTATION -- Enter model's documentation after this line...
|
||||
|
||||
%% END DOCUMENTATION
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 3- Form parameters (tunables).
|
||||
%%
|
||||
%% Form parameters can be changed by the user, through an editable form
|
||||
%% or by any other public mean. Parameters definitions
|
||||
%% are in a tabular form.
|
||||
%%
|
||||
%% 3.1- General parameters table (10 columns).
|
||||
%% Contains the general parameters of the model.
|
||||
%%
|
||||
%% Format: ( 10 columns records)
|
||||
%%
|
||||
%% Name Tag Units Type Size Default Min Max Flags Description
|
||||
%% ---- --- ----- ---- ---- ------- --- --- ------ -----------
|
||||
%%
|
||||
%% Columns descriptions:
|
||||
%%
|
||||
%% Name : Unique name of parameter (in model's scope).
|
||||
%% Tag : Descriptive name to use in forms.
|
||||
%% SHOULD BE BETWEEN QUOTES!!! ("Tag")
|
||||
%% Units : Parameter's units.
|
||||
%% Text field : Must follows the SI symbols definitions.
|
||||
%% Enter a "-" when not used
|
||||
%% Type : Type of parameter
|
||||
%% Enter: int Integer value(s)
|
||||
%% double Real value(s)
|
||||
%% Size : Parameter size (1->n).
|
||||
%% 1 defines a scalar.
|
||||
%% Default : Default value(s) of parameter.
|
||||
%% v : Default value for a scalar or an array.
|
||||
%% (all array's cell will have the same value).
|
||||
%% [v1 v2 v3 ... vn] : Default values for an array.
|
||||
%% The last value will be propagated to remaining of array
|
||||
%% if the default value set is smaller than the array.
|
||||
%% Min : Minimum value allowed.
|
||||
%% Max : Maximum value allowed.
|
||||
%% Flags : Ored values of flags definitions or '-'.
|
||||
%% Available values :
|
||||
%% NOT_SIMUL_MOD : Cannot be modified during simulation.
|
||||
%% Description : Short description of parameter (BETWEEN DOUBLE QUOTES)
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN TUNABLE PARAMETERS -- Enter parameters table after this line...
|
||||
|
||||
%% END TUNABLE PARAMETERS
|
||||
|
||||
%% 3.2- Load Flow parameters NOT IMPLEMENTED!!!
|
||||
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 4- Control IOs.
|
||||
%% ------------
|
||||
%%
|
||||
%% Control IOs will be visible on network schematics as inputs
|
||||
%% and outputs connectors.
|
||||
%%
|
||||
%% Control IOs definitions table (7 columns).
|
||||
%%
|
||||
%% Format: ( 7 fields records)
|
||||
%%
|
||||
%% NOTE: All control connectors have a UNITARY width
|
||||
%% but they can be grouped.
|
||||
%%
|
||||
%% Name Units Type Direction Position Group Description
|
||||
%% ---- ----- ---- --------- -------- ----- -----------
|
||||
%%
|
||||
%% Fields descriptions:
|
||||
%%
|
||||
%% Name : Connector's unique identifier (tag).
|
||||
%%
|
||||
%% Units : Signal's units.
|
||||
%% Text field: use the official SI symbols.
|
||||
%% Enter a "-" when not used
|
||||
%% Type : Signal type
|
||||
%% Enter: int : Integer
|
||||
%% double : Real double precision
|
||||
%% Direction : Enter: in For model's input signal
|
||||
%% out For model's output signal
|
||||
%% Position : Position of connector around the Ucm box
|
||||
%% in schematic.
|
||||
%% Choice of :
|
||||
%% left, right, top, bottom, auto
|
||||
%% Group : Group name or "-" for "no group".
|
||||
%% All the connectors with the same group name
|
||||
%% will use a single "multiplexed" connector
|
||||
%% bearing the group name.
|
||||
%% Description : Short description of connector.
|
||||
%% (BETWEEN DOUBLE QUOTES)
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN CONTROL IOS -- Enter control IOs table after this line...
|
||||
datain no double in auto I "Data Input"
|
||||
|
||||
switchr no int in auto S "Data Input"
|
||||
switchs no int in auto S "Data Input"
|
||||
|
||||
dataout no double out auto O "Data Output"
|
||||
|
||||
|
||||
%% END CONTROL IOS
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 5- Model nodes definitions table (6 columns).
|
||||
%%
|
||||
%%
|
||||
%% Format: ( 6 fields records)
|
||||
%%
|
||||
%% Name Phases IntExt Position Connect NL element Description
|
||||
%% ---- -------- ------ -------- ------------------ -----------
|
||||
%%
|
||||
%% Fields descriptions:
|
||||
%%
|
||||
%% Name : Node's unique identifier.
|
||||
%%
|
||||
%% Phases : Number of phases.
|
||||
%% Text field: Enter a number (1, 3) or
|
||||
%% 0 for dynamic number of phases.
|
||||
%% IntExt : Nodes can be internal or external.
|
||||
%% An external node has a connection to the network
|
||||
%% and will be visible as a "network connector"
|
||||
%% on the schematic.
|
||||
%% Values : intern/extern
|
||||
%% Position : Position of connector around the Ucm box
|
||||
%% in schematic (external nodes only!).
|
||||
%% Choice of :
|
||||
%% left, right, top, bottom, auto
|
||||
%% or '-' : Non applicable.
|
||||
%% Connect NL element :
|
||||
%% Indicates if a non linear element is connected
|
||||
%% to this node.
|
||||
%% Text field : Enter "yes" or "no".
|
||||
%% Description : Short description of node.
|
||||
%% (BETWEEN DOUBLE QUOTES)
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN NODES DEFINITIONS -- Enter nodes table after this line...
|
||||
|
||||
%% END NODES DEFINITIONS
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 6- Current sources definitions table (single phase).
|
||||
%%
|
||||
%%
|
||||
%% Format: ( 3 fields records) [1] o +
|
||||
%% |
|
||||
%% Name Pos. End conn. Neg. End conn. |
|
||||
%% ---- -------------- -------------- _|_
|
||||
%% / ^ \ I
|
||||
%% Fields descriptions: \_|_/
|
||||
%% |
|
||||
%% Name : Current source unique identifier. |
|
||||
%% (Append phase suffix : _a, _b, etc.) [2] o -
|
||||
%% if applicable.
|
||||
%% Pos. End conn. : Positive end connection point [1].
|
||||
%% Neg. End conn. : Negative end connection point [2].
|
||||
%%
|
||||
%% Connections points accepted values:
|
||||
%%
|
||||
%% Node name : The name of a node defined in section 4.
|
||||
%% ground : Connected to ground.
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN CURRENT SOURCES -- Enter sources table after this line...
|
||||
|
||||
%% END CURRENT SOURCES
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 7- Historical currents definitions table (single phase).
|
||||
%%
|
||||
%%
|
||||
%% Format: ( 3 fields records) [1] o +
|
||||
%% |
|
||||
%% Name Pos. End conn. Neg. End conn. |
|
||||
%% ---- -------------- -------------- _|_
|
||||
%% / ^ \ I
|
||||
%% Fields descriptions: \_|_/
|
||||
%% |
|
||||
%% Name : Historical current unique identifier. |
|
||||
%% (Append phase suffix : _a, _b, etc.) [2] o -
|
||||
%% if applicable.
|
||||
%% Pos. End conn. : Positive end connection point [1].
|
||||
%% Neg. End conn. : Negative end connection point [2].
|
||||
%%
|
||||
%% Connections points accepted values:
|
||||
%%
|
||||
%% Node name : The name of a node defined in section 4.
|
||||
%% ground : Connected to ground.
|
||||
%% - : Not connected
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN HISTORICAL CURRENTS -- Enter historical currents table after this...
|
||||
|
||||
%% END HISTORICAL CURRENTS
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% II- Preparatory data preprocessing.
|
||||
%%
|
||||
%% Due to performances issues, we must do as much work as possible
|
||||
%% before simulation starts. This part never runs in real time.
|
||||
%%
|
||||
%% 8- Calculated values (used as parameters).
|
||||
%% ---------------------------------------
|
||||
%%
|
||||
%% Values to calculate before the simulation starts.
|
||||
%% Simulation tasks will use results of this calculations.
|
||||
%%
|
||||
%% 8.1- Calculated parameters table. (5 columns).
|
||||
%% Contains the calculated parameters definitions.
|
||||
%%
|
||||
%% Format: ( 5 columns records)
|
||||
%%
|
||||
%% Name Units Type Size Description
|
||||
%% ---- ----- ---- ---- -----------
|
||||
%%
|
||||
%% Columns descriptions:
|
||||
%%
|
||||
%% Name : Unique name of parameter (in model's scope).
|
||||
%% Units : Parameter's units.
|
||||
%% Text field : Must follows the SI symbols definitions.
|
||||
%% Enter a "-" when not used
|
||||
%% Type : Type of parameter
|
||||
%% Enter: int Integer value(s)
|
||||
%% double Real value(s)
|
||||
%% Size : Parameter size (1->n).
|
||||
%% 1 defines a scalar.
|
||||
%% Description : Short description of parameter (BETWEEN DOUBLE QUOTES)
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN CALCULATED PARAMETERS -- Enter parameters table after this line...
|
||||
|
||||
%% END CALCULATED PARAMETERS
|
||||
|
||||
%% 8.2- Calculated Load Flow values. NOT IMPLEMENTED!!!
|
||||
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 8.3- Preparation function code.
|
||||
%% Contains the code to produce the calculated values .
|
||||
%%
|
||||
%% 8.3.1- Functions global code.
|
||||
%% The following code will be at the beginning of the
|
||||
%% preparatory code file.
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN PREPARATORY GLOBAL CODE -- Enter code under the appropriate comment...
|
||||
|
||||
/* 8.3.1.1 -- User includes */
|
||||
|
||||
/* 8.3.1.2 -- Definitions */
|
||||
|
||||
|
||||
|
||||
|
||||
/* 8.3.1.3 -- Declarations */
|
||||
|
||||
/* 8.3.1.4 -- Local functions (static) */
|
||||
|
||||
%% END PREPARATORY GLOBAL CODE
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 8.3.2- Parameters & initial admittance matrix (Yini) calculation code.
|
||||
%%
|
||||
%% Enter code here to calculate the initial admittance matrix
|
||||
%% and the calculated parameters.
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN PREPARATION FUNCTION CODE -- Enter code after this line...
|
||||
|
||||
%% END PREPARATION FUNCTION CODE
|
||||
|
||||
%% 8.3.3- Load Flow results function code. NOT IMPLEMENTED!!!
|
||||
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 8.4- "Includes" paths list.
|
||||
%% Enter paths of your include files separated by spaces after "=".
|
||||
%% Put an "\" at end of line to continue list on next line.
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN PREPARATORY INCLUDES PATHS LIST -- Modify the following list...
|
||||
|
||||
UCM_PREP_INCLUDES_PATHS =
|
||||
|
||||
%% END PREPARATORY INCLUDES PATHS LIST
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 8.5- Required dependency libraries pathnames list.
|
||||
%%
|
||||
%% Enter the pathnames of your dependency libraries
|
||||
%% separated by spaces after "=".
|
||||
%% Put an "\" at end of line to continue list on next line.
|
||||
%%
|
||||
%% NOTE :
|
||||
%%
|
||||
%% Use the following special names to select the proper paths and/or
|
||||
%% libraries names if needed. They will be replaced according to
|
||||
%% the system architecture.
|
||||
%%
|
||||
%% <UCMA_DIR> : Will be replaced by a directory name
|
||||
%% according to the computer/os
|
||||
%% combination you have.
|
||||
%% <UCMA_LIB_SUFFX> : Current library name suffix (Ex.: .a).
|
||||
%% <UCMA_LIB_RSUFFX> : Current dynamic library name suffix
|
||||
%% (Ex. : .so).
|
||||
%% <UCMA_LIB_PREFX> : Current library name prefix (Ex.: lib).
|
||||
%%
|
||||
%% Exemples :
|
||||
%%
|
||||
%% UCM_PREP_DEP_LIBS_PATHNAMES = \ ! Always the same library
|
||||
%% /usr/ucm/libmath.a
|
||||
%%
|
||||
%% UCM_PREP_DEP_LIBS_PATHNAMES = \ ! Changes with architecture
|
||||
%% /user/ucm/libs/<UCMA_DIR>/<UCMA_LIB_PREFX>math<UCMA_LIB_SUFFX>
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN PREPARATORY DEPENDANT LIBRARIES LIST -- Modify the following list...
|
||||
|
||||
UCM_PREP_DEP_LIBS_PATHNAMES =
|
||||
|
||||
%% END PREPARATORY DEPENDANT LIBRARIES LIST
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 8.6- Required libraries for preparatory functions.
|
||||
%% Enter full paths or lib notation (-Lpath -llibrary) of your
|
||||
%% libraries separated by spaces after "=".
|
||||
%% Put an "\" at end of line to continue list on next line.
|
||||
%%
|
||||
%% ARCHITECTURE DEPENDANT PATHS: See NOTE in section 8.5
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN PREPARATORY LIBRARIES LIST -- Modify the following list...
|
||||
|
||||
UCM_PREP_LIBRARIES =
|
||||
|
||||
%% END PREPARATORY LIBRARIES LIST
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% III- Model simulation.
|
||||
%%
|
||||
%% This sections deals with model's simulation topics.
|
||||
%%
|
||||
%% 9- Simulation code.
|
||||
%%
|
||||
%% Code to simulate the model can be executed before or after the nodes
|
||||
%% voltages calculations. Code that change topology and cause
|
||||
%% recalculation of admittances matrix (YMadd) must be executed before.
|
||||
%%
|
||||
%% 9.1- Historical values table.
|
||||
%%
|
||||
%% Contains the historical values of the model.
|
||||
%% Historical values are used to keep data from step to step.
|
||||
%%
|
||||
%% Format: ( 5 columns records)
|
||||
%%
|
||||
%% Name Type Size Default Description
|
||||
%% ---- ---- ---- ------- -----------
|
||||
%%
|
||||
%% Columns descriptions:
|
||||
%%
|
||||
%% Name : Unique name of historical (in model's scope).
|
||||
%% Type : Type of historical value
|
||||
%% Enter: int Integer value(s)
|
||||
%% double Real value(s)
|
||||
%% Size : Historical value size (1->n).
|
||||
%% 1 defines a scalar.
|
||||
%% Default : Default value(s).
|
||||
%% v : Default value for a scalar or an array.
|
||||
%% (all array's cell will have the same value).
|
||||
%% [v1 v2 v3 ... vn] : Default values for an array.
|
||||
%% The last value will be propagated to remaining of array
|
||||
%% if the default value set is smaller than the array.
|
||||
%% Description : Short description of historical value
|
||||
%% (BETWEEN DOUBLE QUOTES)
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN HISTORICAL VALUES -- Enter the table after this line...
|
||||
|
||||
%% END HISTORICAL VALUES
|
||||
|
||||
%% 9.2- (Test points table. NOT IMPLEMENTED!!!)
|
||||
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 9.3- Simulation functions global code.
|
||||
%% The following code will be at the beginning of the
|
||||
%% simulation functions file.
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN SIMULATION GLOBAL CODE -- Enter code under the appropriate comment...
|
||||
|
||||
/* 9.3.1 -- User includes */
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
#include <pthread.h>
|
||||
#include <time.h>
|
||||
|
||||
/***** User Settings Start ******/
|
||||
|
||||
#define PORT 12001
|
||||
#define REMOTE_ADR "192.168.1.188"
|
||||
|
||||
#define MAX_VALUES 64
|
||||
#define NO_SEND_DATA 3
|
||||
|
||||
/***** User Settings End ******/
|
||||
|
||||
#define MSG_VERSION 2
|
||||
|
||||
/** @todo Implement more message types */
|
||||
#define MSG_TYPE_DATA 0 /**< Message contains float values */
|
||||
#define MSG_TYPE_START 1 /**< Message marks the beginning of a new simulation case */
|
||||
#define MSG_TYPE_STOP 2 /**< Message marks the end of a simulation case */
|
||||
|
||||
/** The total size in bytes of a message */
|
||||
#define MSG_LEN(values) (sizeof(struct msg) + MSG_DATA_LEN(values))
|
||||
|
||||
/** The length of \p values values in bytes. */
|
||||
#define MSG_DATA_LEN(values) (sizeof(float) * (values))
|
||||
|
||||
/** The offset to the first data value in a message. */
|
||||
#define MSG_DATA_OFFSET(msg) ((char *) (msg) + offsetof(struct msg, data))
|
||||
|
||||
/** Initialize a message with default values */
|
||||
#define MSG_INIT(len, seq) (struct msg) {\
|
||||
.version = MSG_VERSION, \
|
||||
.type = MSG_TYPE_DATA, \
|
||||
.length = len, \
|
||||
.sequence = seq, \
|
||||
.id = 0 \
|
||||
}
|
||||
|
||||
/** The timestamp of a message in struct timespec format */
|
||||
#define MSG_TS(msg) (struct timespec) { \
|
||||
.tv_sec = (msg)->ts.sec, \
|
||||
.tv_nsec = (msg)->ts.nsec \
|
||||
}
|
||||
|
||||
/** This message format is used by all clients
|
||||
*
|
||||
* @diafile msg_format.dia
|
||||
**/
|
||||
struct msg
|
||||
{
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
unsigned version: 4; /**< Specifies the format of the remaining message (see MGS_VERSION) */
|
||||
unsigned type : 2; /**< Data or control message (see MSG_TYPE_*) */
|
||||
unsigned rsvd1 : 2; /**< Reserved bits */
|
||||
#elif BYTE_ORDER == LITTLE_ENDIAN
|
||||
unsigned rsvd1 : 2; /**< Reserved bits */
|
||||
unsigned type : 2; /**< Data or control message (see MSG_TYPE_*) */
|
||||
unsigned version: 4; /**< Specifies the format of the remaining message (see MGS_VERSION) */
|
||||
#else
|
||||
#error Invalid byte-order
|
||||
#endif
|
||||
|
||||
uint8_t id; /**< An id which identifies the source of this sample */
|
||||
uint16_t length; /**< The number of values in msg::data[]. */
|
||||
uint32_t sequence; /**< The sequence number is incremented by one for consecutive messages. */
|
||||
|
||||
/** A timestamp per message. */
|
||||
struct {
|
||||
uint32_t sec; /**< Seconds since 1970-01-01 00:00:00 */
|
||||
uint32_t nsec; /**< Nanoseconds of the current second. */
|
||||
} ts;
|
||||
|
||||
/** The message payload. */
|
||||
union {
|
||||
float f; /**< Floating point values. */
|
||||
uint32_t i; /**< Integer values. */
|
||||
} data[];
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
/* 9.3.2 -- Definitions */
|
||||
#if defined(_WIN32)
|
||||
#include <winsock.h>
|
||||
#elif defined(__linux__) || defined(__MACH__)
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
#define MAXLEN 65536
|
||||
#if defined(_WIN32)
|
||||
SOCKET sockfd,sockfds;
|
||||
#elif defined(__linux__) || defined(__MACH__)
|
||||
int sockfd,sockfds;
|
||||
#endif
|
||||
|
||||
|
||||
/* 9.3.3 -- Declarations */
|
||||
|
||||
struct sockaddr_in send_addr;
|
||||
struct sockaddr_in rec_addr;
|
||||
|
||||
|
||||
%% END SIMULATION GLOBAL CODE
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 9.4- Simulation initialization function.
|
||||
%% Code executed once before simulation starts.
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN SIMULATION INITIALIZATION FUNCTION CODE -- Enter code ->...
|
||||
int ret;
|
||||
struct ip_mreq mreq;
|
||||
unsigned int yes = 1;
|
||||
|
||||
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
|
||||
perror("socket creation failed");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if ((sockfds = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
|
||||
perror("socket creation failed");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
memset(&rec_addr, 0, sizeof(rec_addr));
|
||||
rec_addr.sin_family = AF_INET; // IPv4
|
||||
rec_addr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
rec_addr.sin_port = htons(PORT);
|
||||
|
||||
memset(&send_addr, 0, sizeof(send_addr));
|
||||
send_addr.sin_family = AF_INET; // IPv4
|
||||
send_addr.sin_addr.s_addr = inet_addr(REMOTE_ADR);
|
||||
send_addr.sin_port = htons(PORT);
|
||||
|
||||
if (bind(sockfd, (struct sockaddr*)&rec_addr, sizeof(struct sockaddr_in)) < 0)
|
||||
fprintf(stdout,"ERROR DETECTED !!! There is a problem in binding");
|
||||
|
||||
if (connect(sockfds, (struct sockaddr*)&send_addr, sizeof(struct sockaddr_in)) < 0)
|
||||
fprintf(stdout,"ERROR DETECTED !!! There is a problem in connecting");
|
||||
|
||||
#if 0
|
||||
// Join a multicast group
|
||||
mreq.imr_multiaddr.s_addr=inet_addr("255");
|
||||
mreq.imr_interface.s_addr=htonl(INADDR_ANY);
|
||||
|
||||
if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq) < 0) {
|
||||
perror("Could not join Multicast group");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) {
|
||||
perror("Reusing ADDR failed");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
%% END SIMULATION INITIALIZATION FUNCTION CODE
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 9.5- Before "nodes voltage calculation" function code.
|
||||
%% Code executed before "nodes voltages calculations".
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN BEFORE VOLTAGE CALCULATION CODE -- Enter code ->...
|
||||
|
||||
|
||||
%% END BEFORE VOLTAGE CALCULATION CODE
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 9.6- After "nodes voltage calculation" function code.
|
||||
%% Code executed before "nodes voltages calculations".
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN AFTER VOLTAGE CALCULATION -- Enter code ->...
|
||||
|
||||
int ret;
|
||||
|
||||
/* Receiving data */
|
||||
char bufr[MSG_LEN(MAX_VALUES)];
|
||||
struct msg *msgr = (struct msg *) bufr;
|
||||
|
||||
struct sockaddr_in cli_addr;
|
||||
int cli_addrlen = sizeof(cli_addr);
|
||||
|
||||
if (switchr == 1) {
|
||||
memset(&cli_addr, 0, sizeof(cli_addr));
|
||||
memset((char *) msgr, 0, sizeof(bufr));
|
||||
|
||||
ret = recvfrom(sockfd, (char *) msgr, sizeof(bufr), 0, (struct sockaddr *) &cli_addr, &cli_addrlen);
|
||||
|
||||
msgr->length = htons(msgr->length);
|
||||
msgr->sequence = htonl(msgr->sequence);
|
||||
msgr->ts.sec = htonl(msgr->ts.sec);
|
||||
msgr->ts.nsec = htonl(msgr->ts.nsec);
|
||||
msgr->data[0].i = ntohl(msgr->data[0].i);
|
||||
|
||||
dataout = (float) msgr->data[0].f;
|
||||
}
|
||||
|
||||
/* Sending data */
|
||||
char buf[MSG_LEN(MAX_VALUES)];
|
||||
struct msg *msg = (struct msg *) buf;
|
||||
|
||||
struct timespec now;
|
||||
unsigned int sequence = 0;
|
||||
|
||||
if (switchs == 1) {
|
||||
clock_gettime(CLOCK_REALTIME, &now);
|
||||
|
||||
msg->version = MSG_VERSION;
|
||||
msg->type = MSG_TYPE_DATA;
|
||||
msg->rsvd1 = 0;
|
||||
msg->id = 0;
|
||||
msg->length = NO_SEND_DATA;
|
||||
msg->sequence = sequence++;
|
||||
msg->ts.sec = now.tv_sec;
|
||||
msg->ts.nsec = now.tv_nsec;
|
||||
|
||||
msg->data[0].f = datain;
|
||||
msg->data[0].i = htonl(msg->data[0].i);
|
||||
|
||||
msg->length = htons(msg->length);
|
||||
msg->sequence = htonl(msg->sequence);
|
||||
msg->ts.sec = htonl(msg->ts.sec);
|
||||
msg->ts.nsec = htonl(msg->ts.nsec);
|
||||
|
||||
ret = sendto(sockfds, (char *) msg, sizeof(buf), 0, (struct sockaddr *) &send_addr, sizeof(send_addr));
|
||||
}
|
||||
|
||||
|
||||
%% END AFTER VOLTAGE CALCULATION CODE
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 9.7- "Includes" paths list.
|
||||
%% Enter paths of your include files separated by spaces after "=".
|
||||
%% Put an "\" at end of line to continue list on next line.
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN SIMULATION INCLUDES PATHS LIST -- Modify the following list...
|
||||
|
||||
UCM_SIMULATION_INCLUDES_PATHS =
|
||||
|
||||
%% END SIMULATION INCLUDES PATHS LIST
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 9.8- Required simulation dependency libraries pathnames list.
|
||||
%% Enter the pathnames of your libraries separated
|
||||
%% by spaces after "=".
|
||||
%% Put an "\" at end of line to continue list on next line.
|
||||
%%
|
||||
%% ARCHITECTURE DEPENDANT PATHS: See NOTE in section 8.5
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN SIMULATION DEP LIBS LIST -- Modify the following list...
|
||||
|
||||
UCM_SIMULATION_DEP_LIBS_PATHNAMES =
|
||||
|
||||
%% END SIMULATION DEP LIBS LIST
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 9.9- Libraries required by simulation functions.
|
||||
%% Enter full paths or lib notation (-Lpath -llibrary) of your
|
||||
%% libraries separated by spaces after "=".
|
||||
%% Put an "\" at end of line to continue list on next line.
|
||||
%%
|
||||
%% ARCHITECTURE DEPENDANT PATHS: See NOTE in section 8.5
|
||||
%%
|
||||
%% UCM_SIMULATION_LIBRARIES_<ARCH>: use for compiler dependant librairies
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN SIMULATION LIBRARIES LIST -- Modify the following list...
|
||||
|
||||
UCM_SIMULATION_LIBRARIES =
|
||||
UCM_SIMULATION_LIBRARIES_WINDOWS =
|
||||
UCM_SIMULATION_LIBRARIES_LINUX_RHEL5_32 =
|
||||
UCM_SIMULATION_LIBRARIES_LINUX_RHEL6_64 =
|
||||
UCM_SIMULATION_LIBRARIES_LINUX_SLES9_ia64 =
|
||||
UCM_SIMULATION_LIBRARIES_LINUX_SLES10_ia64 =
|
||||
UCM_SIMULATION_LIBRARIES_LINUX_SLES11SP1_x86_64 =
|
||||
UCM_SIMULATION_LIBRARIES_LINUX_SLES11SP3_x86_64 =
|
||||
UCM_SIMULATION_LIBRARIES_LINUX_SLES12SP1_x86_64 =
|
||||
|
||||
%% END SIMULATION LIBRARIES LIST
|
||||
%%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
%%
|
||||
%% 10.0- Simulation finalization function.
|
||||
%% Code executed once before simulation stops.
|
||||
%%
|
||||
%%vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
||||
%% BEGIN SIMULATION FINALIZATION FUNCTION CODE -- Enter code ->...
|
||||
close(sockfd);
|
||||
close(sockfds);
|
||||
|
||||
%% END SIMULATION FINALIZATION FUNCTION CODE
|
||||
%% END OF FILE
|
BIN
clients/hypersim/send_receive.ecf
Normal file
BIN
clients/hypersim/send_receive.ecf
Normal file
Binary file not shown.
Loading…
Add table
Reference in a new issue