The goal of this software is to automatically generate C/C++ code which reads and writes GOOSE and Sampled Value packets. Any valid IEC 61850 Substation Configuration Description (SCD) file, describing GOOSE and/or SV communications, can be used as the input. The output code is lightweight and platform-independent, so it can run on a variety of devices, including low-cost microcontrollers. It\'s ideal for rapid-prototyping new protection and control systems that require communications. This mbed project is a simple example of this functionality. Other code: https://github.com/stevenblair/rapid61850 Project homepage: http://personal.strath.ac.uk/steven.m.blair/
datatypes.h@1:9399d44c2b1a, 2011-10-07 (annotated)
- Committer:
- sblair
- Date:
- Fri Oct 07 13:48:18 2011 +0000
- Revision:
- 1:9399d44c2b1a
- Parent:
- 0:230c10b228ea
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sblair | 1:9399d44c2b1a | 1 | /** |
sblair | 1:9399d44c2b1a | 2 | * Rapid-prototyping protection schemes with IEC 61850 |
sblair | 1:9399d44c2b1a | 3 | * |
sblair | 1:9399d44c2b1a | 4 | * Copyright (c) 2011 Steven Blair |
sblair | 1:9399d44c2b1a | 5 | * |
sblair | 1:9399d44c2b1a | 6 | * This program is free software; you can redistribute it and/or |
sblair | 1:9399d44c2b1a | 7 | * modify it under the terms of the GNU General Public License |
sblair | 1:9399d44c2b1a | 8 | * as published by the Free Software Foundation; either version 2 |
sblair | 1:9399d44c2b1a | 9 | * of the License, or (at your option) any later version. |
sblair | 1:9399d44c2b1a | 10 | |
sblair | 1:9399d44c2b1a | 11 | * This program is distributed in the hope that it will be useful, |
sblair | 1:9399d44c2b1a | 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
sblair | 1:9399d44c2b1a | 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
sblair | 1:9399d44c2b1a | 14 | * GNU General Public License for more details. |
sblair | 1:9399d44c2b1a | 15 | |
sblair | 1:9399d44c2b1a | 16 | * You should have received a copy of the GNU General Public License |
sblair | 1:9399d44c2b1a | 17 | * along with this program; if not, write to the Free Software |
sblair | 1:9399d44c2b1a | 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
sblair | 1:9399d44c2b1a | 19 | */ |
sblair | 1:9399d44c2b1a | 20 | |
sblair | 0:230c10b228ea | 21 | #ifndef DATATYPES_H |
sblair | 0:230c10b228ea | 22 | #define DATATYPES_H |
sblair | 0:230c10b228ea | 23 | |
sblair | 0:230c10b228ea | 24 | #ifdef __cplusplus /* If this is a C++ compiler, use C linkage */ |
sblair | 0:230c10b228ea | 25 | extern "C" { |
sblair | 0:230c10b228ea | 26 | #endif |
sblair | 0:230c10b228ea | 27 | |
sblair | 0:230c10b228ea | 28 | #include "ctypes.h" |
sblair | 0:230c10b228ea | 29 | |
sblair | 1:9399d44c2b1a | 30 | // enums |
sblair | 1:9399d44c2b1a | 31 | enum ACDdir { |
sblair | 1:9399d44c2b1a | 32 | ACDDIR_UNKNOWN, |
sblair | 1:9399d44c2b1a | 33 | ACDDIR_FORWARD, |
sblair | 1:9399d44c2b1a | 34 | ACDDIR_BACKWARD, |
sblair | 1:9399d44c2b1a | 35 | ACDDIR_BOTH |
sblair | 1:9399d44c2b1a | 36 | }; |
sblair | 1:9399d44c2b1a | 37 | enum seqT { |
sblair | 1:9399d44c2b1a | 38 | SEQT_POS_NEG_ZERO, |
sblair | 1:9399d44c2b1a | 39 | SEQT_DIR_QUAD_ZERO |
sblair | 1:9399d44c2b1a | 40 | }; |
sblair | 1:9399d44c2b1a | 41 | enum Dbpos { |
sblair | 1:9399d44c2b1a | 42 | DBPOS_INTERMEDIATE, |
sblair | 1:9399d44c2b1a | 43 | DBPOS_OFF, |
sblair | 1:9399d44c2b1a | 44 | DBPOS_ON, |
sblair | 1:9399d44c2b1a | 45 | DBPOS_BAD |
sblair | 1:9399d44c2b1a | 46 | }; |
sblair | 1:9399d44c2b1a | 47 | enum Tcmd { |
sblair | 1:9399d44c2b1a | 48 | TCMD_STOP, |
sblair | 1:9399d44c2b1a | 49 | TCMD_LOWER, |
sblair | 1:9399d44c2b1a | 50 | TCMD_HIGHER, |
sblair | 1:9399d44c2b1a | 51 | TCMD_RESERVED |
sblair | 1:9399d44c2b1a | 52 | }; |
sblair | 1:9399d44c2b1a | 53 | enum Beh { |
sblair | 1:9399d44c2b1a | 54 | BEH_ON, |
sblair | 1:9399d44c2b1a | 55 | BEH_BLOCKED, |
sblair | 1:9399d44c2b1a | 56 | BEH_TEST, |
sblair | 1:9399d44c2b1a | 57 | BEH_TEST_BLOCKED, |
sblair | 1:9399d44c2b1a | 58 | BEH_OFF |
sblair | 1:9399d44c2b1a | 59 | }; |
sblair | 1:9399d44c2b1a | 60 | enum Mod { |
sblair | 1:9399d44c2b1a | 61 | MOD_ON, |
sblair | 1:9399d44c2b1a | 62 | MOD_BLOCKED, |
sblair | 1:9399d44c2b1a | 63 | MOD_TEST, |
sblair | 1:9399d44c2b1a | 64 | MOD_TEST_BLOCKED, |
sblair | 1:9399d44c2b1a | 65 | MOD_OFF |
sblair | 1:9399d44c2b1a | 66 | }; |
sblair | 1:9399d44c2b1a | 67 | enum Health { |
sblair | 1:9399d44c2b1a | 68 | HEALTH_OK, |
sblair | 1:9399d44c2b1a | 69 | HEALTH_WARNING, |
sblair | 1:9399d44c2b1a | 70 | HEALTH_ALARM |
sblair | 1:9399d44c2b1a | 71 | }; |
sblair | 1:9399d44c2b1a | 72 | |
sblair | 1:9399d44c2b1a | 73 | // data attributes |
sblair | 1:9399d44c2b1a | 74 | struct myAnalogValue { |
sblair | 1:9399d44c2b1a | 75 | CTYPE_FLOAT32 f; |
sblair | 1:9399d44c2b1a | 76 | }; |
sblair | 1:9399d44c2b1a | 77 | struct ScaledValueConfig { |
sblair | 1:9399d44c2b1a | 78 | CTYPE_FLOAT32 scaleFactor; |
sblair | 1:9399d44c2b1a | 79 | CTYPE_FLOAT32 offset; |
sblair | 1:9399d44c2b1a | 80 | }; |
sblair | 1:9399d44c2b1a | 81 | struct myVector { |
sblair | 1:9399d44c2b1a | 82 | struct myAnalogValue mag; |
sblair | 1:9399d44c2b1a | 83 | struct myAnalogValue ang; |
sblair | 1:9399d44c2b1a | 84 | }; |
sblair | 1:9399d44c2b1a | 85 | struct simpleVector { |
sblair | 1:9399d44c2b1a | 86 | struct myAnalogValue mag; |
sblair | 1:9399d44c2b1a | 87 | struct myAnalogValue ang; |
sblair | 0:230c10b228ea | 88 | }; |
sblair | 0:230c10b228ea | 89 | |
sblair | 1:9399d44c2b1a | 90 | // data objects |
sblair | 1:9399d44c2b1a | 91 | struct myMod { |
sblair | 1:9399d44c2b1a | 92 | enum Mod ctlVal; |
sblair | 1:9399d44c2b1a | 93 | enum Mod stVal; |
sblair | 1:9399d44c2b1a | 94 | CTYPE_QUALITY q; |
sblair | 1:9399d44c2b1a | 95 | CTYPE_TIMESTAMP t; |
sblair | 1:9399d44c2b1a | 96 | }; |
sblair | 1:9399d44c2b1a | 97 | struct myHealth { |
sblair | 1:9399d44c2b1a | 98 | enum Health stVal; |
sblair | 1:9399d44c2b1a | 99 | }; |
sblair | 1:9399d44c2b1a | 100 | struct myBeh { |
sblair | 1:9399d44c2b1a | 101 | enum Beh stVal; |
sblair | 1:9399d44c2b1a | 102 | }; |
sblair | 1:9399d44c2b1a | 103 | struct myINS { |
sblair | 1:9399d44c2b1a | 104 | CTYPE_INT32 stVal; |
sblair | 1:9399d44c2b1a | 105 | }; |
sblair | 1:9399d44c2b1a | 106 | struct myLPL { |
sblair | 1:9399d44c2b1a | 107 | CTYPE_VISSTRING255 ldNs; |
sblair | 1:9399d44c2b1a | 108 | CTYPE_VISSTRING255 configRev; |
sblair | 1:9399d44c2b1a | 109 | }; |
sblair | 1:9399d44c2b1a | 110 | struct myDPL { |
sblair | 1:9399d44c2b1a | 111 | CTYPE_VISSTRING255 vendor; |
sblair | 1:9399d44c2b1a | 112 | CTYPE_VISSTRING255 hwRev; |
sblair | 1:9399d44c2b1a | 113 | }; |
sblair | 1:9399d44c2b1a | 114 | struct myPos { |
sblair | 1:9399d44c2b1a | 115 | CTYPE_DBPOS stVal; |
sblair | 1:9399d44c2b1a | 116 | CTYPE_QUALITY q; |
sblair | 1:9399d44c2b1a | 117 | CTYPE_TIMESTAMP t; |
sblair | 1:9399d44c2b1a | 118 | CTYPE_BOOLEAN ctlVal; |
sblair | 1:9399d44c2b1a | 119 | }; |
sblair | 1:9399d44c2b1a | 120 | struct mySPS { |
sblair | 1:9399d44c2b1a | 121 | CTYPE_INT32 stVal; |
sblair | 1:9399d44c2b1a | 122 | CTYPE_QUALITY q; |
sblair | 1:9399d44c2b1a | 123 | CTYPE_TIMESTAMP t; |
sblair | 1:9399d44c2b1a | 124 | }; |
sblair | 1:9399d44c2b1a | 125 | struct myMV { |
sblair | 1:9399d44c2b1a | 126 | struct myAnalogValue mag; |
sblair | 1:9399d44c2b1a | 127 | CTYPE_QUALITY q; |
sblair | 1:9399d44c2b1a | 128 | CTYPE_TIMESTAMP t; |
sblair | 1:9399d44c2b1a | 129 | struct ScaledValueConfig sVC; |
sblair | 1:9399d44c2b1a | 130 | }; |
sblair | 1:9399d44c2b1a | 131 | struct simpleMV { |
sblair | 1:9399d44c2b1a | 132 | CTYPE_FLOAT32 mag; |
sblair | 1:9399d44c2b1a | 133 | CTYPE_QUALITY q; |
sblair | 1:9399d44c2b1a | 134 | CTYPE_TIMESTAMP t; |
sblair | 1:9399d44c2b1a | 135 | struct ScaledValueConfig sVC; |
sblair | 1:9399d44c2b1a | 136 | }; |
sblair | 1:9399d44c2b1a | 137 | struct simpleCMV { |
sblair | 1:9399d44c2b1a | 138 | struct simpleVector cVal; |
sblair | 1:9399d44c2b1a | 139 | CTYPE_QUALITY q; |
sblair | 1:9399d44c2b1a | 140 | CTYPE_TIMESTAMP t; |
sblair | 1:9399d44c2b1a | 141 | }; |
sblair | 1:9399d44c2b1a | 142 | struct simpleWYE { |
sblair | 1:9399d44c2b1a | 143 | struct simpleCMV phsA; |
sblair | 1:9399d44c2b1a | 144 | struct simpleCMV phsB; |
sblair | 1:9399d44c2b1a | 145 | struct simpleCMV phsC; |
sblair | 1:9399d44c2b1a | 146 | }; |
sblair | 1:9399d44c2b1a | 147 | struct myCMV { |
sblair | 1:9399d44c2b1a | 148 | struct myVector cVal; |
sblair | 1:9399d44c2b1a | 149 | CTYPE_QUALITY q; |
sblair | 1:9399d44c2b1a | 150 | CTYPE_TIMESTAMP t; |
sblair | 1:9399d44c2b1a | 151 | }; |
sblair | 1:9399d44c2b1a | 152 | struct mySEQ { |
sblair | 1:9399d44c2b1a | 153 | struct myCMV c1; |
sblair | 1:9399d44c2b1a | 154 | struct myCMV c2; |
sblair | 1:9399d44c2b1a | 155 | struct myCMV c3; |
sblair | 1:9399d44c2b1a | 156 | enum seqT seqT; |
sblair | 1:9399d44c2b1a | 157 | }; |
sblair | 1:9399d44c2b1a | 158 | struct mySAV { |
sblair | 1:9399d44c2b1a | 159 | struct myAnalogValue instMag; |
sblair | 1:9399d44c2b1a | 160 | CTYPE_QUALITY q; |
sblair | 1:9399d44c2b1a | 161 | }; |
sblair | 1:9399d44c2b1a | 162 | struct simpleSAV { |
sblair | 1:9399d44c2b1a | 163 | struct myAnalogValue instMag; |
sblair | 1:9399d44c2b1a | 164 | CTYPE_QUALITY q; |
sblair | 1:9399d44c2b1a | 165 | }; |
sblair | 1:9399d44c2b1a | 166 | |
sblair | 1:9399d44c2b1a | 167 | // logical nodes |
sblair | 1:9399d44c2b1a | 168 | struct LN0 { |
sblair | 1:9399d44c2b1a | 169 | struct myMod Mod; |
sblair | 1:9399d44c2b1a | 170 | struct myHealth Health; |
sblair | 1:9399d44c2b1a | 171 | struct myBeh Beh; |
sblair | 1:9399d44c2b1a | 172 | struct myLPL NamPlt; |
sblair | 1:9399d44c2b1a | 173 | }; |
sblair | 1:9399d44c2b1a | 174 | struct LPHDa { |
sblair | 1:9399d44c2b1a | 175 | struct myMod Mod; |
sblair | 1:9399d44c2b1a | 176 | struct myHealth Health; |
sblair | 1:9399d44c2b1a | 177 | struct myBeh Beh; |
sblair | 1:9399d44c2b1a | 178 | struct myLPL NamPlt; |
sblair | 1:9399d44c2b1a | 179 | struct myDPL PhyNam; |
sblair | 1:9399d44c2b1a | 180 | struct myINS PhyHealth; |
sblair | 1:9399d44c2b1a | 181 | struct mySPS Proxy; |
sblair | 1:9399d44c2b1a | 182 | struct { |
sblair | 1:9399d44c2b1a | 183 | struct myAnalogValue instMag_1[2]; |
sblair | 1:9399d44c2b1a | 184 | struct myMod Mod_1[2]; |
sblair | 1:9399d44c2b1a | 185 | enum Mod stVal_1[2]; |
sblair | 1:9399d44c2b1a | 186 | CTYPE_QUALITY q_1[2]; |
sblair | 1:9399d44c2b1a | 187 | struct myMV Amps_1[2]; |
sblair | 1:9399d44c2b1a | 188 | struct myPos Pos_2[2]; |
sblair | 1:9399d44c2b1a | 189 | } sv_inputs; |
sblair | 1:9399d44c2b1a | 190 | }; |
sblair | 1:9399d44c2b1a | 191 | struct CSWIa { |
sblair | 1:9399d44c2b1a | 192 | struct myMod Mod; |
sblair | 1:9399d44c2b1a | 193 | struct myHealth Health; |
sblair | 1:9399d44c2b1a | 194 | struct myBeh Beh; |
sblair | 1:9399d44c2b1a | 195 | struct myPos Pos; |
sblair | 1:9399d44c2b1a | 196 | struct mySPS GrpAl; |
sblair | 1:9399d44c2b1a | 197 | }; |
sblair | 1:9399d44c2b1a | 198 | struct MMXUa { |
sblair | 1:9399d44c2b1a | 199 | struct myMod Mod; |
sblair | 1:9399d44c2b1a | 200 | struct myHealth Beh; |
sblair | 1:9399d44c2b1a | 201 | struct myBeh Health; |
sblair | 1:9399d44c2b1a | 202 | struct myMV Amps; |
sblair | 1:9399d44c2b1a | 203 | struct myMV Volts; |
sblair | 1:9399d44c2b1a | 204 | }; |
sblair | 1:9399d44c2b1a | 205 | struct exampleMMXU { |
sblair | 1:9399d44c2b1a | 206 | struct myMod Mod; |
sblair | 1:9399d44c2b1a | 207 | struct myHealth Beh; |
sblair | 1:9399d44c2b1a | 208 | struct myBeh Health; |
sblair | 1:9399d44c2b1a | 209 | struct simpleWYE A; |
sblair | 1:9399d44c2b1a | 210 | struct { |
sblair | 1:9399d44c2b1a | 211 | struct simpleSAV AmpLocPhsA_1[16]; |
sblair | 1:9399d44c2b1a | 212 | struct simpleSAV AmpLocPhsB_1[16]; |
sblair | 1:9399d44c2b1a | 213 | struct simpleSAV AmpLocPhsC_1[16]; |
sblair | 1:9399d44c2b1a | 214 | } sv_inputs; |
sblair | 1:9399d44c2b1a | 215 | }; |
sblair | 1:9399d44c2b1a | 216 | struct exampleRMXU { |
sblair | 1:9399d44c2b1a | 217 | struct myMod Mod; |
sblair | 1:9399d44c2b1a | 218 | struct myHealth Beh; |
sblair | 1:9399d44c2b1a | 219 | struct myBeh Health; |
sblair | 1:9399d44c2b1a | 220 | struct simpleSAV AmpLocPhsA; |
sblair | 1:9399d44c2b1a | 221 | struct simpleSAV AmpLocPhsB; |
sblair | 1:9399d44c2b1a | 222 | struct simpleSAV AmpLocPhsC; |
sblair | 1:9399d44c2b1a | 223 | }; |
sblair | 1:9399d44c2b1a | 224 | struct CILOa { |
sblair | 1:9399d44c2b1a | 225 | struct myHealth Mod; |
sblair | 1:9399d44c2b1a | 226 | struct myBeh Beh; |
sblair | 1:9399d44c2b1a | 227 | struct myINS Health; |
sblair | 1:9399d44c2b1a | 228 | struct mySPS EnaOpen; |
sblair | 1:9399d44c2b1a | 229 | struct mySPS EnaClose; |
sblair | 1:9399d44c2b1a | 230 | }; |
sblair | 1:9399d44c2b1a | 231 | struct TVTRa { |
sblair | 1:9399d44c2b1a | 232 | struct myMod Mod; |
sblair | 1:9399d44c2b1a | 233 | struct myHealth Health; |
sblair | 1:9399d44c2b1a | 234 | struct myBeh Beh; |
sblair | 1:9399d44c2b1a | 235 | struct mySAV Vol; |
sblair | 1:9399d44c2b1a | 236 | }; |
sblair | 1:9399d44c2b1a | 237 | struct RSYNa { |
sblair | 1:9399d44c2b1a | 238 | struct myMod Mod; |
sblair | 1:9399d44c2b1a | 239 | struct myHealth Health; |
sblair | 1:9399d44c2b1a | 240 | struct myBeh Beh; |
sblair | 1:9399d44c2b1a | 241 | struct myLPL NamPlt; |
sblair | 1:9399d44c2b1a | 242 | struct mySPS Rel; |
sblair | 1:9399d44c2b1a | 243 | struct { |
sblair | 1:9399d44c2b1a | 244 | struct myAnalogValue instMag_1[2]; |
sblair | 1:9399d44c2b1a | 245 | struct myMod Mod_1[2]; |
sblair | 1:9399d44c2b1a | 246 | enum Mod stVal_1[2]; |
sblair | 1:9399d44c2b1a | 247 | CTYPE_QUALITY q_1[2]; |
sblair | 1:9399d44c2b1a | 248 | struct myMV Amps_1[2]; |
sblair | 1:9399d44c2b1a | 249 | struct myPos Pos_2[2]; |
sblair | 1:9399d44c2b1a | 250 | } sv_inputs; |
sblair | 1:9399d44c2b1a | 251 | struct { |
sblair | 1:9399d44c2b1a | 252 | struct myAnalogValue instMag_1; |
sblair | 1:9399d44c2b1a | 253 | struct myPos Pos_1; |
sblair | 1:9399d44c2b1a | 254 | struct myPos Pos_2; |
sblair | 1:9399d44c2b1a | 255 | enum Mod stVal_1; |
sblair | 1:9399d44c2b1a | 256 | struct myMV Amps_1; |
sblair | 1:9399d44c2b1a | 257 | struct myMV Volts_1; |
sblair | 1:9399d44c2b1a | 258 | } gse_inputs; |
sblair | 1:9399d44c2b1a | 259 | }; |
sblair | 1:9399d44c2b1a | 260 | |
sblair | 1:9399d44c2b1a | 261 | void init_datatypes(); |
sblair | 0:230c10b228ea | 262 | |
sblair | 0:230c10b228ea | 263 | |
sblair | 0:230c10b228ea | 264 | |
sblair | 0:230c10b228ea | 265 | |
sblair | 0:230c10b228ea | 266 | #ifdef __cplusplus /* If this is a C++ compiler, end C linkage */ |
sblair | 0:230c10b228ea | 267 | } |
sblair | 0:230c10b228ea | 268 | #endif |
sblair | 0:230c10b228ea | 269 | |
sblair | 0:230c10b228ea | 270 | #endif |