rust_openfmb_ops_protobuf/openfmb/
commonmodule.rs

1/// This is a root class to provide common identification for all classes needing identification and
2/// naming attributes.
3#[derive(Clone, PartialEq, ::prost::Message)]
4pub struct IdentifiedObject {
5    /// MISSING DOCUMENTATION!!!
6    #[prost(message, optional, tag="1")]
7    pub description: ::std::option::Option<::std::string::String>,
8    /// Master resource identifier issued by a model authority. The mRID must semantically be a UUID as
9    /// specified in RFC 4122. The mRID is globally unique.
10    #[prost(message, optional, tag="2")]
11    pub m_rid: ::std::option::Option<::std::string::String>,
12    /// The name is any free human readable and possibly non unique text naming the object.
13    #[prost(message, optional, tag="3")]
14    pub name: ::std::option::Option<::std::string::String>,
15}
16/// An electrical connection point (AC or DC) to a piece of conducting equipment. Terminals are
17/// connected at physical connection points called connectivity nodes.
18#[derive(Clone, PartialEq, ::prost::Message)]
19pub struct AcdcTerminal {
20    /// UML inherited base object
21    #[prost(message, optional, tag="1")]
22    pub identified_object: ::std::option::Option<IdentifiedObject>,
23    /// The connected status is related to a bus-branch model and the topological node to terminal
24    /// relation.  True implies the terminal is connected to the related topological node and false implies
25    /// it is not.  In a bus-branch model, the connected status is used to tell if equipment is disconnected
26    /// without having to change the connectivity described by the topological node to terminal relation. A
27    /// valid case is that conducting equipment can be connected in one end and open in the other. In
28    /// particular for an AC line segment, where the reactive line charging can be significant, this is a
29    /// relevant case.
30    #[prost(message, optional, tag="2")]
31    pub connected: ::std::option::Option<bool>,
32    /// The orientation of the terminal connections for a multiple terminal conducting equipment.  The
33    /// sequence numbering starts with 1 and additional terminals should follow in increasing order.   The
34    /// first terminal is the "starting point" for a two terminal branch.
35    #[prost(message, optional, tag="3")]
36    pub sequence_number: ::std::option::Option<i32>,
37}
38#[derive(Clone, PartialEq, ::prost::Message)]
39pub struct OptionalUnitSymbolKind {
40    #[prost(enumeration="UnitSymbolKind", tag="1")]
41    pub value: i32,
42}
43#[derive(Clone, PartialEq, ::prost::Message)]
44pub struct OptionalUnitMultiplierKind {
45    #[prost(enumeration="UnitMultiplierKind", tag="1")]
46    pub value: i32,
47}
48/// MISSING DOCUMENTATION!!!
49#[derive(Clone, PartialEq, ::prost::Message)]
50pub struct ActivePower {
51    /// MISSING DOCUMENTATION!!!
52    #[prost(message, optional, tag="1")]
53    pub multiplier: ::std::option::Option<OptionalUnitMultiplierKind>,
54    /// MISSING DOCUMENTATION!!!
55    #[prost(message, optional, tag="2")]
56    pub unit: ::std::option::Option<OptionalUnitSymbolKind>,
57    /// MISSING DOCUMENTATION!!!
58    #[prost(message, optional, tag="3")]
59    pub value: ::std::option::Option<f32>,
60}
61#[derive(Clone, PartialEq, ::prost::Message)]
62pub struct OptionalPhaseCodeKind {
63    #[prost(enumeration="PhaseCodeKind", tag="1")]
64    pub value: i32,
65}
66/// Analogue value (AnalogueValue)
67#[derive(Clone, PartialEq, ::prost::Message)]
68pub struct AnalogueValue {
69    /// Floating point representation of the measured value. The formula to convert between 'f' and the
70    /// process value (pVal) shall be: <i>pVal</i>='f'*10exp('Unit.multiplier') in ['Unit.SIUnit'].
71    #[prost(message, optional, tag="1")]
72    pub f: ::std::option::Option<f32>,
73    /// Integer representation of the measured value. The formula to convert between 'i' and the process
74    /// value (pVal) shall be: <i>pVal</i>=(('i'*'ScaledValueConfig.scaleFactor')+'ScaledValueConfig.offset'
75    ///  in ['Unit.SIUnit'].
76    #[prost(message, optional, tag="2")]
77    pub i: ::std::option::Option<i32>,
78}
79#[derive(Clone, PartialEq, ::prost::Message)]
80pub struct OptionalValidityKind {
81    #[prost(enumeration="ValidityKind", tag="1")]
82    pub value: i32,
83}
84/// Describes some reasons in case 'validity' is not 'good'.
85#[derive(Clone, PartialEq, ::prost::Message)]
86pub struct DetailQual {
87    /// (default=false) If true, the value may not be a correct value due to a reference being out of
88    /// calibration. The server shall decide if validity shall be set to invalid or questionable (used for
89    /// measurand information and binary counter information only).
90    #[prost(bool, tag="1")]
91    pub bad_reference: bool,
92    /// (default=false) If true, a supervision function has detected an internal or external failure.
93    #[prost(bool, tag="2")]
94    pub failure: bool,
95    /// (default=false) If true, the value does not meet the stated accuracy of the source. EXAMPLE The
96    /// measured value of power factor may be noisy (inaccurate) when the current is very small.
97    #[prost(bool, tag="3")]
98    pub inaccurate: bool,
99    /// (default=false) If true, an evaluation function has detected an inconsistency.
100    #[prost(bool, tag="4")]
101    pub inconsistent: bool,
102    /// (default=false) If true, an update is not made during a specific time interval. The value may be
103    /// an old value that may have changed in the meantime. This specific time interval may be defined by an
104    /// allowed-age attribute. NOTE "Fail silent" errors, where the equipment stops sending data, will cause
105    /// setting this flag to true. In this case, the last received information was correct.
106    #[prost(bool, tag="5")]
107    pub old_data: bool,
108    /// (default=false) To prevent overloading of event driven communication channels, it is desirable
109    /// to detect and suppress oscillating (fast changing) binary inputs. If a signal changes in a defined
110    /// time (tosc) twice in the same direction (from 0 to 1 or from 1 to 0), then it shall be defined as an
111    /// oscillation and this attribute shall be set to true. If a configured number of transient changes is
112    /// detected, they shall be suppressed. In this time, the 'Quality.validity' shall be set to
113    /// 'questionable'. If the signal is still in the oscillating state after the defined number of changes,
114    /// the value shall be left in the state it was in when this flag was set. In this case, the 'Quality
115    /// validity' shall be changed from 'questionable' to 'invalid' and kept so as long as the signal is
116    /// oscillating.  If the configuration is such that all transient changes should be suppressed, the
117    /// 'Quality.validity' shall be set immediately to 'invalid' and this flag to true (used for status
118    /// information only).
119    #[prost(bool, tag="6")]
120    pub oscillatory: bool,
121    /// (default=false) If true, the attribute to which the quality has been associated is beyond a
122    /// predefined range of values. The server shall decide if validity shall be set to invalid or
123    /// questionable (used for measurand information only). EXAMPLE A measured value may exceed a predefined
124    /// range, however the selected data type can still represent the value, for example the data type is a
125    /// 16-bit unsigned integer, the predefined range is 0 to 40 000, if the value is between 40 001 and 65
126    /// 535 it is considered to be out of range.
127    #[prost(bool, tag="7")]
128    pub out_of_range: bool,
129    /// (default=false) If true, the value of the attribute to which the quality has been associated is
130    /// beyond the capability of being represented properly (used for measurand information only). EXAMPLE A
131    /// measured value may exceed the range that may be represented by the selected data type, for example
132    /// the data type is a 16-bit unsigned integer and the value exceeds 65 535.
133    #[prost(bool, tag="8")]
134    pub overflow: bool,
135}
136#[derive(Clone, PartialEq, ::prost::Message)]
137pub struct OptionalSourceKind {
138    #[prost(enumeration="SourceKind", tag="1")]
139    pub value: i32,
140}
141/// Quality contains data that describe the quality of the data from the server. Quality of the data
142/// is also related to the mode of a logical node. Further details can be found in IEC 61850-7-4. The
143/// different quality attributes are <i>not</i> independent.The default value shall be applied if the
144/// functionality of the related attribute is not supported. The mapping may specify to exclude the
145/// attribute from the message if it is not supported or if the default value applies.
146#[derive(Clone, PartialEq, ::prost::Message)]
147pub struct Quality {
148    /// Describes some reasons in case 'validity' is not 'good'.
149    #[prost(message, optional, tag="1")]
150    pub detail_qual: ::std::option::Option<DetailQual>,
151    /// (default=false) If true, further update of the value has been blocked by an operator. The value
152    /// shall be the information that was acquired before blocking. If this flag is set, then the
153    /// 'detailQual.oldData' shall also be set. The operator shall use the data attribute 'CDC.blkEna' to
154    /// block the update of the value. NOTE Both an operator as well as an automatic function may freeze
155    /// communication updating as well as input updating. In both cases, 'detailQual.oldData' will be set.
156    /// If the blocking is done by an operator, then this flag is set additionally, and an operator activity
157    /// is required to clear the condition.
158    #[prost(bool, tag="2")]
159    pub operator_blocked: bool,
160    /// (default=process) Defines the source of a value. NOTE 1 Substitution may be done locally or via
161    /// the communication services. In the second case, specific attributes with a FC=SV are used. NOTE 2
162    /// There are various means to clear a substitution. As an example, a substitution that was done
163    /// following an invalid condition may be cleared automatically if the invalid condition is cleared.
164    /// However, this is a local issue and therefore not within the scope of this standard.
165    #[prost(enumeration="SourceKind", tag="3")]
166    pub source: i32,
167    /// (default=false) If true, the value is a test value. The processing of the test quality in the
168    /// client shall be as described in IEC 61850-7-4. This bit shall be completely independent from the
169    /// other bits within the quality descriptor.
170    #[prost(bool, tag="4")]
171    pub test: bool,
172    /// Validity of the value, as condensed information for the client. In case this value is not
173    /// 'good', some reasons may be found in the 'detailQual'.
174    #[prost(enumeration="ValidityKind", tag="5")]
175    pub validity: i32,
176}
177#[derive(Clone, PartialEq, ::prost::Message)]
178pub struct OptionalTimeAccuracyKind {
179    #[prost(enumeration="TimeAccuracyKind", tag="1")]
180    pub value: i32,
181}
182/// Information about the quality of the time source of the sending IED.
183#[derive(Clone, PartialEq, ::prost::Message)]
184pub struct TimeQuality {
185    /// If true, the time source of the sending device is unreliable and the value of the time stamp
186    /// shall be ignored.
187    #[prost(bool, tag="1")]
188    pub clock_failure: bool,
189    /// If true, the time source of the sending device is not synchronised with the external UTC time.
190    #[prost(bool, tag="2")]
191    pub clock_not_synchronized: bool,
192    /// If true, the value in 'P_Timestamp.SecondSinceEpoch' contains all leap seconds occurred.
193    /// Otherwise, it does not take into account the leap seconds that occurred before the initialization of
194    /// the time source of the device. Instead, the seconds since start of the epoch are calculated from the
195    /// current date assuming a constant day length of 86 400 seconds. Note: If a UTC time master clock is
196    /// used and accessible, this value should always be true.
197    #[prost(bool, tag="3")]
198    pub leap_seconds_known: bool,
199    /// Information about the quality of the time source of the sending IED.
200    #[prost(enumeration="TimeAccuracyKind", tag="4")]
201    pub time_accuracy: i32,
202}
203/// UTC time with the epoch of midnight (00:00:00) of 1970-01-01. The presentation is defined in the
204/// SCSMs.The NULL time stamp has all fields set to 0 (zero).The relation between a timestamp value, the
205/// synchronization of an internal time with an external time source (for example, UTC time), and other
206/// information related to time model are available as requirements in Clause 21.
207#[derive(Clone, PartialEq, ::prost::Message)]
208pub struct Timestamp {
209    /// Fractional of the current second when the value of time stamp has been determined. It shall be
210    /// calculated as (SUM from i=0 to 31 of bi*2**-(i+1)).
211    #[prost(uint32, tag="1")]
212    pub fraction: u32,
213    /// Second since epoch (1970-01-01T00:00:00Z)
214    #[prost(uint64, tag="2")]
215    pub seconds: u64,
216    /// IEC61850 time quality
217    #[prost(message, optional, tag="3")]
218    pub tq: ::std::option::Option<TimeQuality>,
219}
220/// Unit definition (Unit)
221#[derive(Clone, PartialEq, ::prost::Message)]
222pub struct Unit {
223    /// (default='') Unit multiplier.
224    #[prost(message, optional, tag="1")]
225    pub multiplier: ::std::option::Option<OptionalUnitMultiplierKind>,
226    /// SI unit of measure.
227    #[prost(enumeration="UnitSymbolKind", tag="2")]
228    pub si_unit: i32,
229}
230/// Measured value (MV)
231#[derive(Clone, PartialEq, ::prost::Message)]
232pub struct Mv {
233    /// Value of the magnitude based on a deadband calculation from the instantaneous value 'instMag'.
234    /// The value of 'mag' shall be updated to the current instantaneous value 'instMag' when the value has
235    /// changed according to the configuration parameter 'db'. If 'db'=0, 'mag'='instMag'.NOTE 1 This value
236    /// is typically used to create reports for analogue values. Such a report sent "by exception" is not
237    /// comparable to the transfer of sampled measured values as supported by the CDC SAV.NOTE 2 This 'mag'
238    /// is not the same as 'mag' of the constructed attribute class 'Vector'.
239    #[prost(message, optional, tag="1")]
240    pub mag: ::std::option::Option<AnalogueValue>,
241    /// Quality of the values in 'instMag', 'mag', 'range'.
242    #[prost(message, optional, tag="2")]
243    pub q: ::std::option::Option<Quality>,
244    /// Timestamp of the last refresh of the value in 'mag' or of the last change of the value in any of
245    /// 'range' or 'q'.
246    #[prost(message, optional, tag="3")]
247    pub t: ::std::option::Option<Timestamp>,
248    /// Unit for: 'instMag', 'mag', 'subMag', 'rangeC'.
249    #[prost(message, optional, tag="4")]
250    pub units: ::std::option::Option<Unit>,
251}
252/// IEC61850 logical node.
253#[derive(Clone, PartialEq, ::prost::Message)]
254pub struct LogicalNode {
255    /// UML inherited base object
256    #[prost(message, optional, tag="1")]
257    pub identified_object: ::std::option::Option<IdentifiedObject>,
258}
259/// LN: Generic process I/O   Name: GGIO
260#[derive(Clone, PartialEq, ::prost::Message)]
261pub struct AnalogStatusGgio {
262    /// UML inherited base object
263    #[prost(message, optional, tag="1")]
264    pub logical_node: ::std::option::Option<LogicalNode>,
265    /// Generic analogue input <i>n</i>.
266    #[prost(message, optional, tag="2")]
267    pub an_in: ::std::option::Option<Mv>,
268    /// Phase code
269    #[prost(message, optional, tag="3")]
270    pub phase: ::std::option::Option<OptionalPhaseCodeKind>,
271}
272/// Analogue value control (AnalogueValueCtl)
273#[derive(Clone, PartialEq, ::prost::Message)]
274pub struct AnalogueValueCtl {
275    /// Floating point representation of the measured value.  See 'AnalogueValue.f'.
276    #[prost(message, optional, tag="1")]
277    pub f: ::std::option::Option<f32>,
278    /// Integer representation of the measured value. See 'AnalogueValue.i'.
279    #[prost(message, optional, tag="2")]
280    pub i: ::std::option::Option<i32>,
281}
282/// This is a root class similar to IdentifiedObject but without the mRID. The reason to separate
283/// the two classes is because the mRID may need to be defined as a separate key field for technology
284/// such as the DDS implementation.
285#[derive(Clone, PartialEq, ::prost::Message)]
286pub struct NamedObject {
287    /// MISSING DOCUMENTATION!!!
288    #[prost(message, optional, tag="1")]
289    pub description: ::std::option::Option<::std::string::String>,
290    /// The name is any free human readable and possibly non unique text naming the object.
291    #[prost(message, optional, tag="2")]
292    pub name: ::std::option::Option<::std::string::String>,
293}
294/// The parts of a power system that are physical devices, electronic or mechanical.
295#[derive(Clone, PartialEq, ::prost::Message)]
296pub struct ApplicationSystem {
297    /// UML inherited base object
298    #[prost(message, optional, tag="1")]
299    pub named_object: ::std::option::Option<NamedObject>,
300    /// MISSING DOCUMENTATION!!!
301    #[prost(string, tag="2")]
302    pub m_rid: std::string::String,
303}
304/// Analogue setting (FC=SP) (ASG_SP)
305#[derive(Clone, PartialEq, ::prost::Message)]
306pub struct Asg {
307    /// The value of the analogue setting.
308    #[prost(message, optional, tag="1")]
309    pub set_mag: ::std::option::Option<AnalogueValueCtl>,
310    /// Unit for 'setMag', 'minVal', 'maxVal', 'stepSize'.
311    #[prost(message, optional, tag="2")]
312    pub units: ::std::option::Option<Unit>,
313}
314/// Binary counter reading (BCR)
315#[derive(Clone, PartialEq, ::prost::Message)]
316pub struct Bcr {
317    /// Binary counter status represented as an integer value; wraps to 0 at the maximum or minimum
318    /// value of INT64.
319    #[prost(int64, tag="1")]
320    pub act_val: i64,
321    /// Quality of the values in 'actVal', 'frVal'.
322    #[prost(message, optional, tag="2")]
323    pub q: ::std::option::Option<Quality>,
324    /// Timestamp of the last change of value in 'actVal' or 'q'.
325    #[prost(message, optional, tag="3")]
326    pub t: ::std::option::Option<Timestamp>,
327    /// Unit for value in 'pulsQty'.
328    #[prost(message, optional, tag="4")]
329    pub units: ::std::option::Option<OptionalUnitSymbolKind>,
330}
331/// Specialized 61850 SPS class
332#[derive(Clone, PartialEq, ::prost::Message)]
333pub struct StatusSps {
334    /// MISSING DOCUMENTATION!!!
335    #[prost(message, optional, tag="1")]
336    pub q: ::std::option::Option<Quality>,
337    /// MISSING DOCUMENTATION!!!
338    #[prost(bool, tag="2")]
339    pub st_val: bool,
340    /// MISSING DOCUMENTATION!!!
341    #[prost(message, optional, tag="3")]
342    pub t: ::std::option::Option<Timestamp>,
343}
344/// LN: Generic process I/O   Name: GGIO
345#[derive(Clone, PartialEq, ::prost::Message)]
346pub struct BooleanStatusGgio {
347    /// UML inherited base object
348    #[prost(message, optional, tag="1")]
349    pub logical_node: ::std::option::Option<LogicalNode>,
350    /// If true, indication <i>n</i> is present.
351    #[prost(message, optional, tag="2")]
352    pub ind: ::std::option::Option<StatusSps>,
353    /// Phase code
354    #[prost(message, optional, tag="3")]
355    pub phase: ::std::option::Option<OptionalPhaseCodeKind>,
356}
357/// IEC61850-7-2 Service parameter for conditions checking
358#[derive(Clone, PartialEq, ::prost::Message)]
359pub struct CheckConditions {
360    /// InterlockCheck is used for the device to be controlled to check if other devices are in proper
361    /// state for the control command.  One example is that 2 circuit breakers on a busbar need to be
362    /// interlocked so one is open and one is closed, but not both on.
363    #[prost(message, optional, tag="1")]
364    pub interlock_check: ::std::option::Option<bool>,
365    /// To check if a device is synchrous to the system.
366    #[prost(message, optional, tag="2")]
367    pub synchro_check: ::std::option::Option<bool>,
368}
369/// Vector definition (Vector)
370#[derive(Clone, PartialEq, ::prost::Message)]
371pub struct Vector {
372    /// (range=[-180...180]) Angle of the complex value (Unit.SIUnit='deg' and Unit.multiplier='');
373    /// angle reference is defined in the context where this type is used.
374    #[prost(message, optional, tag="1")]
375    pub ang: ::std::option::Option<AnalogueValue>,
376    /// Magnitude of the complex value.
377    #[prost(message, optional, tag="2")]
378    pub mag: ::std::option::Option<AnalogueValue>,
379}
380/// Complex measured value (CMV)
381#[derive(Clone, PartialEq, ::prost::Message)]
382pub struct Cmv {
383    /// Complex value based on a deadband calculation from the instantaneous value 'instCVal.mag'. The
384    /// deadband calculation is done both on 'instCVal.mag' (based on 'db') and on 'instCVal.ang' (based on
385    /// 'dbAng'), independently. See  'MV.mag'.
386    #[prost(message, optional, tag="1")]
387    pub c_val: ::std::option::Option<Vector>,
388    /// Quality of the values in 'instCVal', 'cVal', 'range', ‘rangeAng’.
389    #[prost(message, optional, tag="2")]
390    pub q: ::std::option::Option<Quality>,
391    /// Timestamp of the last refresh of the value in 'cVal' or of the last change of the value in any
392    /// of 'range', 'rangeAng' or 'q'.
393    #[prost(message, optional, tag="3")]
394    pub t: ::std::option::Option<Timestamp>,
395    /// Units for: 'instCVal.mag', 'cVal.mag', 'subCVal.mag', 'rangeC'.
396    #[prost(message, optional, tag="4")]
397    pub units: ::std::option::Option<Unit>,
398}
399/// Asset representation of a ConductingEquipment.
400#[derive(Clone, PartialEq, ::prost::Message)]
401pub struct ConductingEquipment {
402    /// UML inherited base object
403    #[prost(message, optional, tag="1")]
404    pub named_object: ::std::option::Option<NamedObject>,
405    /// MISSING DOCUMENTATION!!!
406    #[prost(string, tag="2")]
407    pub m_rid: std::string::String,
408}
409/// An AC electrical connection point to a piece of conducting equipment. Terminals are connected at
410/// physical connection points called connectivity nodes.
411#[derive(Clone, PartialEq, ::prost::Message)]
412pub struct Terminal {
413    /// UML inherited base object
414    #[prost(message, optional, tag="1")]
415    pub a_cdc_terminal: ::std::option::Option<AcdcTerminal>,
416    /// Represents the normal network phasing condition. If the attribute is missing three phases (ABC
417    /// or ABCN) shall be assumed.
418    #[prost(message, optional, tag="2")]
419    pub phases: ::std::option::Option<OptionalPhaseCodeKind>,
420}
421/// Reading associated with an equipment such as a recloser.
422#[derive(Clone, PartialEq, ::prost::Message)]
423pub struct ConductingEquipmentTerminalReading {
424    /// MISSING DOCUMENTATION!!!
425    #[prost(message, optional, tag="1")]
426    pub terminal: ::std::option::Option<Terminal>,
427}
428/// Specialized DPC 61850 CDC class
429#[derive(Clone, PartialEq, ::prost::Message)]
430pub struct ControlDpc {
431    /// Service parameter that determines the control activity ('false' for off, 'true' for on).
432    #[prost(bool, tag="1")]
433    pub ctl_val: bool,
434}
435/// UTC time with the epoch of midnight (00:00:00) of 1970-01-01. The presentation is defined in the
436/// SCSMs.The NULL time stamp has all fields set to 0 (zero).The relation between a timestamp value, the
437/// synchronization of an internal time with an external time source (for example, UTC time), and other
438/// information related to time model are available as requirements in Clause 21.  ControlTimestamp is a
439/// timestamp for future time point so it does not contain the time quality as the one contained in the
440/// normal Timestamp data type.
441#[derive(Clone, PartialEq, ::prost::Message)]
442pub struct ControlTimestamp {
443    /// Fractional of the current second when the value of time stamp has been determined. It shall be
444    /// calculated as (SUM from i=0 to 31 of bi*2**-(i+1)).
445    #[prost(uint32, tag="1")]
446    pub fraction: u32,
447    /// Second since epoch (1970-01-01T00:00:00Z)
448    #[prost(uint64, tag="2")]
449    pub seconds: u64,
450}
451#[derive(Clone, PartialEq, ::prost::Message)]
452pub struct OptionalScheduleParameterKind {
453    #[prost(enumeration="ScheduleParameterKind", tag="1")]
454    pub value: i32,
455}
456/// Grid connect mode kind
457#[derive(Clone, PartialEq, ::prost::Message)]
458pub struct EngScheduleParameter {
459    /// Schedule parameter type
460    #[prost(enumeration="ScheduleParameterKind", tag="1")]
461    pub schedule_parameter_type: i32,
462    /// MISSING DOCUMENTATION!!!
463    #[prost(float, tag="2")]
464    pub value: f32,
465}
466/// Point definition (Point)
467#[derive(Clone, PartialEq, ::prost::Message)]
468pub struct SchedulePoint {
469    /// Schedule parameter
470    #[prost(message, repeated, tag="1")]
471    pub schedule_parameter: ::std::vec::Vec<EngScheduleParameter>,
472    /// Start time
473    #[prost(message, optional, tag="2")]
474    pub start_time: ::std::option::Option<ControlTimestamp>,
475}
476/// Curve shape setting (FC=SP) (CSG_SP)
477#[derive(Clone, PartialEq, ::prost::Message)]
478pub struct ScheduleCsg {
479    /// The array with the points specifying a time schedule
480    #[prost(message, repeated, tag="1")]
481    pub sch_pts: ::std::vec::Vec<SchedulePoint>,
482}
483/// OpenFMB specialization for control schedule using:  LN: Schedule   Name: FSCH
484#[derive(Clone, PartialEq, ::prost::Message)]
485pub struct ControlScheduleFsch {
486    /// Analog CSG
487    #[prost(message, optional, tag="1")]
488    pub val_acsg: ::std::option::Option<ScheduleCsg>,
489}
490/// OpenFMB specialization for logical node control
491#[derive(Clone, PartialEq, ::prost::Message)]
492pub struct LogicalNodeForControl {
493    /// UML inherited base object
494    #[prost(message, optional, tag="1")]
495    pub logical_node: ::std::option::Option<LogicalNode>,
496}
497/// LN: Schedule controller   Name: FSCC  F:    Function (generic) SC:  Schedule Controller C:   
498/// Control (execution)
499#[derive(Clone, PartialEq, ::prost::Message)]
500pub struct ControlFscc {
501    /// UML inherited base object
502    #[prost(message, optional, tag="1")]
503    pub logical_node_for_control: ::std::option::Option<LogicalNodeForControl>,
504    /// MISSING DOCUMENTATION!!!
505    #[prost(message, optional, tag="2")]
506    pub control_schedule_fsch: ::std::option::Option<ControlScheduleFsch>,
507    /// MISSING DOCUMENTATION!!!
508    #[prost(message, optional, tag="3")]
509    pub island_control_schedule_fsch: ::std::option::Option<ControlScheduleFsch>,
510}
511/// Integer status setting (FC=SP) (ING_SP)
512#[derive(Clone, PartialEq, ::prost::Message)]
513pub struct ControlIng {
514    /// The value of the status setting.
515    #[prost(int32, tag="1")]
516    pub set_val: i32,
517    /// Unit for 'setVal', 'minVal', 'maxVal', 'stepSize'.
518    #[prost(message, optional, tag="2")]
519    pub units: ::std::option::Option<Unit>,
520}
521/// &lt;&lt;statistics&gt;&gt; Integer controlled step position information (ISC)
522#[derive(Clone, PartialEq, ::prost::Message)]
523pub struct ControlIsc {
524    /// Service parameter that determines the control activity.
525    #[prost(int32, tag="1")]
526    pub ctl_val: i32,
527}
528/// Generic control message info.
529#[derive(Clone, PartialEq, ::prost::Message)]
530pub struct MessageInfo {
531    /// UML inherited base object
532    #[prost(message, optional, tag="1")]
533    pub identified_object: ::std::option::Option<IdentifiedObject>,
534    /// MISSING DOCUMENTATION!!!
535    #[prost(message, optional, tag="2")]
536    pub message_time_stamp: ::std::option::Option<Timestamp>,
537}
538/// Generic control message info.
539#[derive(Clone, PartialEq, ::prost::Message)]
540pub struct ControlMessageInfo {
541    /// UML inherited base object
542    #[prost(message, optional, tag="1")]
543    pub message_info: ::std::option::Option<MessageInfo>,
544}
545/// Controllable single point (SPC)
546#[derive(Clone, PartialEq, ::prost::Message)]
547pub struct ControlSpc {
548    /// Service parameter that determines the control activity ('false' for off or deactivation, 'true'
549    /// for on or activation).
550    #[prost(bool, tag="1")]
551    pub ctl_val: bool,
552}
553/// The value of a control command which could either be a setpoint or a control schedule in curve. 
554/// The attribute modBlk is used to tag out a device. if it is TRUE, any setpoints and control schedule
555/// in a message payload should be ignored.   It should also be presented in a status profile.  Any
556/// modBlk value change (i.e. TRUE to FALSE and vice versa) should trigger an event.
557#[derive(Clone, PartialEq, ::prost::Message)]
558pub struct ControlValue {
559    /// UML inherited base object
560    #[prost(message, optional, tag="1")]
561    pub identified_object: ::std::option::Option<IdentifiedObject>,
562    /// The attribute modBlk is used to tag out a device. if it is TRUE, any setpoints and control
563    /// schedule in a message payload should be ignored.   It should also be presented in a status profile. 
564    /// Any modBlk value change (i.e. TRUE to FALSE and vice versa) should trigger an event.
565    #[prost(message, optional, tag="2")]
566    pub mod_blk: ::std::option::Option<bool>,
567}
568/// Interval between two date and time points.
569#[derive(Clone, PartialEq, ::prost::Message)]
570pub struct DateTimeInterval {
571    /// End date and time of this interval.
572    #[prost(message, optional, tag="1")]
573    pub end: ::std::option::Option<i64>,
574    /// Start date and time of this interval.
575    #[prost(message, optional, tag="2")]
576    pub start: ::std::option::Option<i64>,
577}
578/// Phase to phase related measured values of a three-phase system (DEL)
579#[derive(Clone, PartialEq, ::prost::Message)]
580pub struct Del {
581    /// Value of phase A to phase B measurement.
582    #[prost(message, optional, tag="1")]
583    pub phs_ab: ::std::option::Option<Cmv>,
584    /// Value of phase B to phase C measurement.
585    #[prost(message, optional, tag="2")]
586    pub phs_bc: ::std::option::Option<Cmv>,
587    /// Value of phase C to phase A measurement.
588    #[prost(message, optional, tag="3")]
589    pub phs_ca: ::std::option::Option<Cmv>,
590}
591/// Generic user of energy - a  point of consumption on the power system model.
592#[derive(Clone, PartialEq, ::prost::Message)]
593pub struct EnergyConsumer {
594    /// UML inherited base object
595    #[prost(message, optional, tag="1")]
596    pub conducting_equipment: ::std::option::Option<ConductingEquipment>,
597    /// MISSING DOCUMENTATION!!!
598    #[prost(message, optional, tag="2")]
599    pub operating_limit: ::std::option::Option<::std::string::String>,
600}
601#[derive(Clone, PartialEq, ::prost::Message)]
602pub struct OptionalCalcMethodKind {
603    #[prost(enumeration="CalcMethodKind", tag="1")]
604    pub value: i32,
605}
606/// Calc method kind
607#[derive(Clone, PartialEq, ::prost::Message)]
608pub struct EngCalcMethodKind {
609    /// The value of the status setting.
610    #[prost(enumeration="CalcMethodKind", tag="1")]
611    pub set_val: i32,
612}
613#[derive(Clone, PartialEq, ::prost::Message)]
614pub struct OptionalGridConnectModeKind {
615    #[prost(enumeration="GridConnectModeKind", tag="1")]
616    pub value: i32,
617}
618/// Grid connect mode kind
619#[derive(Clone, PartialEq, ::prost::Message)]
620pub struct EngGridConnectModeKind {
621    /// The value of the status setting.
622    #[prost(enumeration="GridConnectModeKind", tag="1")]
623    pub set_val: i32,
624    /// MISSING DOCUMENTATION!!!
625    #[prost(message, optional, tag="2")]
626    pub set_val_extension: ::std::option::Option<::std::string::String>,
627}
628#[derive(Clone, PartialEq, ::prost::Message)]
629pub struct OptionalPfSignKind {
630    #[prost(enumeration="PfSignKind", tag="1")]
631    pub value: i32,
632}
633/// Enumerated status setting (FC=SP) (ENG_SP)
634#[derive(Clone, PartialEq, ::prost::Message)]
635pub struct EngPfSignKind {
636    /// The value of the status setting.
637    #[prost(enumeration="PfSignKind", tag="1")]
638    pub set_val: i32,
639}
640#[derive(Clone, PartialEq, ::prost::Message)]
641pub struct OptionalBehaviourModeKind {
642    #[prost(enumeration="BehaviourModeKind", tag="1")]
643    pub value: i32,
644}
645/// Behavior mode kind. ENS stands for Enumerated status
646#[derive(Clone, PartialEq, ::prost::Message)]
647pub struct EnsBehaviourModeKind {
648    /// Quality of the value in 'stVal'.
649    #[prost(message, optional, tag="1")]
650    pub q: ::std::option::Option<Quality>,
651    /// Value of the data.
652    #[prost(enumeration="BehaviourModeKind", tag="2")]
653    pub st_val: i32,
654    /// Timestamp of the last change or update event of 'stVal' or the last change of value in 'q'.
655    #[prost(message, optional, tag="3")]
656    pub t: ::std::option::Option<Timestamp>,
657}
658#[derive(Clone, PartialEq, ::prost::Message)]
659pub struct OptionalDerGeneratorStateKind {
660    #[prost(enumeration="DerGeneratorStateKind", tag="1")]
661    pub value: i32,
662}
663/// DER generation state kind. ENS stands for Enumerated status
664#[derive(Clone, PartialEq, ::prost::Message)]
665pub struct EnsDerGeneratorStateKind {
666    /// Quality of the value in 'stVal'.
667    #[prost(message, optional, tag="1")]
668    pub q: ::std::option::Option<Quality>,
669    /// Value of the data.
670    #[prost(enumeration="DerGeneratorStateKind", tag="2")]
671    pub st_val: i32,
672    /// Timestamp of the last change or update event of 'stVal' or the last change of value in 'q'.
673    #[prost(message, optional, tag="3")]
674    pub t: ::std::option::Option<Timestamp>,
675}
676#[derive(Clone, PartialEq, ::prost::Message)]
677pub struct OptionalDynamicTestKind {
678    #[prost(enumeration="DynamicTestKind", tag="1")]
679    pub value: i32,
680}
681/// Dynamic test kind. ENS stands for Enumerated status
682#[derive(Clone, PartialEq, ::prost::Message)]
683pub struct EnsDynamicTestKind {
684    /// Quality of the value in 'stVal'.
685    #[prost(message, optional, tag="1")]
686    pub q: ::std::option::Option<Quality>,
687    /// Value of the data.
688    #[prost(enumeration="DynamicTestKind", tag="2")]
689    pub st_val: i32,
690    /// Timestamp of the last change or update event of 'stVal' or the last change of value in 'q'.
691    #[prost(message, optional, tag="3")]
692    pub t: ::std::option::Option<Timestamp>,
693}
694/// Grid connect event &amp; status mode kind
695#[derive(Clone, PartialEq, ::prost::Message)]
696pub struct EnsGridConnectModeKind {
697    /// Actual Grid Connection Mode
698    #[prost(enumeration="GridConnectModeKind", tag="1")]
699    pub st_val: i32,
700    /// MISSING DOCUMENTATION!!!
701    #[prost(string, tag="2")]
702    pub st_val_extension: std::string::String,
703}
704#[derive(Clone, PartialEq, ::prost::Message)]
705pub struct OptionalHealthKind {
706    #[prost(enumeration="HealthKind", tag="1")]
707    pub value: i32,
708}
709/// &lt;&gt; Enumerated status (ENS)
710#[derive(Clone, PartialEq, ::prost::Message)]
711pub struct EnsHealthKind {
712    /// Textual description of the data. In case it is used within the CDC LPL, the description refers
713    /// to the logical node.
714    #[prost(message, optional, tag="1")]
715    pub d: ::std::option::Option<::std::string::String>,
716    /// Value of the data.
717    #[prost(enumeration="HealthKind", tag="2")]
718    pub st_val: i32,
719}
720/// MISSING DOCUMENTATION!!!
721#[derive(Clone, PartialEq, ::prost::Message)]
722pub struct Ess {
723    /// UML inherited base object
724    #[prost(message, optional, tag="1")]
725    pub conducting_equipment: ::std::option::Option<ConductingEquipment>,
726}
727/// Generic event message information
728#[derive(Clone, PartialEq, ::prost::Message)]
729pub struct EventMessageInfo {
730    /// UML inherited base object
731    #[prost(message, optional, tag="1")]
732    pub message_info: ::std::option::Option<MessageInfo>,
733}
734/// Event value
735#[derive(Clone, PartialEq, ::prost::Message)]
736pub struct EventValue {
737    /// UML inherited base object
738    #[prost(message, optional, tag="1")]
739    pub identified_object: ::std::option::Option<IdentifiedObject>,
740}
741/// The source where a forecast value is issued.
742#[derive(Clone, PartialEq, ::prost::Message)]
743pub struct ForecastValueSource {
744    /// UML inherited base object
745    #[prost(message, optional, tag="1")]
746    pub identified_object: ::std::option::Option<IdentifiedObject>,
747}
748/// Intelligent Electronic Device is a device with a microprocessor that can contain one or more
749/// (IEC61850) SERVERs. In the context of IEC61850, IED could be an electronic protection device, a
750/// controller or even a laptop/desktop computer. <b>Modelling note</b>: This class is not explicitly
751/// defined in IEC61850-7-2 (but only in SCL: IEC61850-6). However, it is an important concept that
752/// deserves its place in the meta-model. When the meta-model gets instantiated from a direct link to an
753/// IED with an IEC61850 SERVER, we typically create an instance of the meta-model IED per connection.
754/// When the meta-model gets instantiated from an SCL file, there is the full description of IED and its
755/// functions.
756#[derive(Clone, PartialEq, ::prost::Message)]
757pub struct ForecastIed {
758    /// UML inherited base object
759    #[prost(message, optional, tag="1")]
760    pub forecast_value_source: ::std::option::Option<ForecastValueSource>,
761    /// For control, this is an application ID, unique within communication system, and if the message
762    /// is transformed between gateway the original source application ID should be kept.
763    #[prost(string, tag="2")]
764    pub source_application_id: std::string::String,
765    /// Message publication date time
766    #[prost(int64, tag="3")]
767    pub source_date_time: i64,
768}
769/// Forecast value
770#[derive(Clone, PartialEq, ::prost::Message)]
771pub struct ForecastValue {
772    /// UML inherited base object
773    #[prost(message, optional, tag="1")]
774    pub identified_object: ::std::option::Option<IdentifiedObject>,
775}
776/// Intelligent Electronic Device is a device with a microprocessor that can contain one or more
777/// (IEC61850) SERVERs. In the context of IEC61850, IED could be an electronic protection device, a
778/// controller or even a laptop/desktop computer. <b>Modelling note</b>: This class is not explicitly
779/// defined in IEC61850-7-2 (but only in SCL: IEC61850-6). However, it is an important concept that
780/// deserves its place in the meta-model. When the meta-model gets instantiated from a direct link to an
781/// IED with an IEC61850 SERVER, we typically create an instance of the meta-model IED per connection.
782/// When the meta-model gets instantiated from an SCL file, there is the full description of IED and its
783/// functions.
784#[derive(Clone, PartialEq, ::prost::Message)]
785pub struct Ied {
786    /// UML inherited base object
787    #[prost(message, optional, tag="1")]
788    pub identified_object: ::std::option::Option<IdentifiedObject>,
789}
790/// <<statistics>> Integer status (INS)
791#[derive(Clone, PartialEq, ::prost::Message)]
792pub struct StatusIns {
793    /// Quality of the value in 'stVal'.
794    #[prost(message, optional, tag="1")]
795    pub q: ::std::option::Option<Quality>,
796    /// Value of the data.
797    #[prost(int32, tag="2")]
798    pub st_val: i32,
799    /// Timestamp of the last change or update event of 'stVal' or the last change of value in 'q'.
800    #[prost(message, optional, tag="3")]
801    pub t: ::std::option::Option<Timestamp>,
802    /// Units for: 'stVal', 'subVal'.
803    #[prost(message, optional, tag="4")]
804    pub units: ::std::option::Option<Unit>,
805}
806/// Status expressed in integer based on IEC61850 GGIO.
807#[derive(Clone, PartialEq, ::prost::Message)]
808pub struct IntegerStatusGgio {
809    /// UML inherited base object
810    #[prost(message, optional, tag="1")]
811    pub logical_node: ::std::option::Option<LogicalNode>,
812    /// Generic integer status input <i>n</i>.
813    #[prost(message, optional, tag="2")]
814    pub int_in: ::std::option::Option<StatusIns>,
815    /// Phase code
816    #[prost(message, optional, tag="3")]
817    pub phase: ::std::option::Option<OptionalPhaseCodeKind>,
818}
819/// Logical node for event and status
820#[derive(Clone, PartialEq, ::prost::Message)]
821pub struct LogicalNodeForEventAndStatus {
822    /// UML inherited base object
823    #[prost(message, optional, tag="1")]
824    pub logical_node: ::std::option::Option<LogicalNode>,
825    /// Behavior of the function
826    #[prost(message, optional, tag="2")]
827    pub beh: ::std::option::Option<EnsBehaviourModeKind>,
828    /// Asset health
829    #[prost(message, optional, tag="3")]
830    pub ee_health: ::std::option::Option<EnsHealthKind>,
831}
832/// The current state for a measurement. A state value is an instance of a measurement from a
833/// specific source. Measurements can be associated with many state values, each representing a
834/// different source for the measurement.
835#[derive(Clone, PartialEq, ::prost::Message)]
836pub struct MeasurementValue {
837    /// UML inherited base object
838    #[prost(message, optional, tag="1")]
839    pub identified_object: ::std::option::Option<IdentifiedObject>,
840}
841/// Physical asset that performs the metering role of the usage point. Used for measuring
842/// consumption and detection of events.
843#[derive(Clone, PartialEq, ::prost::Message)]
844pub struct Meter {
845    /// UML inherited base object
846    #[prost(message, optional, tag="1")]
847    pub conducting_equipment: ::std::option::Option<ConductingEquipment>,
848}
849/// Generic event message information
850#[derive(Clone, PartialEq, ::prost::Message)]
851pub struct OptimizationMessageInfo {
852    /// UML inherited base object
853    #[prost(message, optional, tag="1")]
854    pub message_info: ::std::option::Option<MessageInfo>,
855}
856/// Specialized 61850 MMTN LN class
857#[derive(Clone, PartialEq, ::prost::Message)]
858pub struct ReadingMmtn {
859    /// UML inherited base object
860    #[prost(message, optional, tag="1")]
861    pub logical_node: ::std::option::Option<LogicalNode>,
862    /// Apparent energy demand (direction: from busbar).
863    #[prost(message, optional, tag="2")]
864    pub dmd_v_ah: ::std::option::Option<Bcr>,
865    /// Reactive energy demand (direction: from busbar).
866    #[prost(message, optional, tag="3")]
867    pub dmd_v_arh: ::std::option::Option<Bcr>,
868    /// Real energy demand (direction: from busbar).
869    #[prost(message, optional, tag="4")]
870    pub dmd_wh: ::std::option::Option<Bcr>,
871    /// Apparent energy supply (default direction: towards busbar).
872    #[prost(message, optional, tag="5")]
873    pub sup_v_ah: ::std::option::Option<Bcr>,
874    /// Reactive energy supply (default direction: towards busbar).
875    #[prost(message, optional, tag="6")]
876    pub sup_v_arh: ::std::option::Option<Bcr>,
877    /// Real energy supply (default direction: towards busbar).
878    #[prost(message, optional, tag="7")]
879    pub sup_wh: ::std::option::Option<Bcr>,
880    /// Net apparent energy since last reset.
881    #[prost(message, optional, tag="8")]
882    pub tot_v_ah: ::std::option::Option<Bcr>,
883    /// Net reactive energy since last reset.
884    #[prost(message, optional, tag="9")]
885    pub tot_v_arh: ::std::option::Option<Bcr>,
886    /// Net real energy since last reset.
887    #[prost(message, optional, tag="10")]
888    pub tot_wh: ::std::option::Option<Bcr>,
889}
890/// Specialized 61850 MMTN LN class
891#[derive(Clone, PartialEq, ::prost::Message)]
892pub struct PhaseMmtn {
893    /// MISSING DOCUMENTATION!!!
894    #[prost(message, optional, tag="1")]
895    pub phs_a: ::std::option::Option<ReadingMmtn>,
896    /// MISSING DOCUMENTATION!!!
897    #[prost(message, optional, tag="2")]
898    pub phs_ab: ::std::option::Option<ReadingMmtn>,
899    /// MISSING DOCUMENTATION!!!
900    #[prost(message, optional, tag="3")]
901    pub phs_b: ::std::option::Option<ReadingMmtn>,
902    /// MISSING DOCUMENTATION!!!
903    #[prost(message, optional, tag="4")]
904    pub phs_bc: ::std::option::Option<ReadingMmtn>,
905    /// MISSING DOCUMENTATION!!!
906    #[prost(message, optional, tag="5")]
907    pub phs_c: ::std::option::Option<ReadingMmtn>,
908    /// MISSING DOCUMENTATION!!!
909    #[prost(message, optional, tag="6")]
910    pub phs_ca: ::std::option::Option<ReadingMmtn>,
911}
912/// Grid connect mode kind
913#[derive(Clone, PartialEq, ::prost::Message)]
914pub struct RampRate {
915    /// MISSING DOCUMENTATION!!!
916    #[prost(message, optional, tag="1")]
917    pub negative_reactive_power_kv_ar_per_min: ::std::option::Option<f32>,
918    /// MISSING DOCUMENTATION!!!
919    #[prost(message, optional, tag="2")]
920    pub negative_real_power_kw_per_min: ::std::option::Option<f32>,
921    /// MISSING DOCUMENTATION!!!
922    #[prost(message, optional, tag="3")]
923    pub positive_reactive_power_kv_ar_per_min: ::std::option::Option<f32>,
924    /// MISSING DOCUMENTATION!!!
925    #[prost(message, optional, tag="4")]
926    pub positive_real_power_kw_per_min: ::std::option::Option<f32>,
927}
928/// Generic reading message information
929#[derive(Clone, PartialEq, ::prost::Message)]
930pub struct ReadingMessageInfo {
931    /// UML inherited base object
932    #[prost(message, optional, tag="1")]
933    pub message_info: ::std::option::Option<MessageInfo>,
934}
935/// Specialized 61850 MMTR class
936#[derive(Clone, PartialEq, ::prost::Message)]
937pub struct ReadingMmtr {
938    /// UML inherited base object
939    #[prost(message, optional, tag="1")]
940    pub logical_node: ::std::option::Option<LogicalNode>,
941    /// Apparent energy demand (direction: from busbar).
942    #[prost(message, optional, tag="2")]
943    pub dmd_v_ah: ::std::option::Option<Bcr>,
944    /// Reactive energy demand (direction: from busbar).
945    #[prost(message, optional, tag="3")]
946    pub dmd_v_arh: ::std::option::Option<Bcr>,
947    /// Real energy demand (direction: from busbar).
948    #[prost(message, optional, tag="4")]
949    pub dmd_wh: ::std::option::Option<Bcr>,
950    /// Apparent energy supply (default direction: towards busbar).
951    #[prost(message, optional, tag="5")]
952    pub sup_v_ah: ::std::option::Option<Bcr>,
953    /// Reactive energy supply (default direction: towards busbar).
954    #[prost(message, optional, tag="6")]
955    pub sup_v_arh: ::std::option::Option<Bcr>,
956    /// Real energy supply (default direction: towards busbar).
957    #[prost(message, optional, tag="7")]
958    pub sup_wh: ::std::option::Option<Bcr>,
959    /// Net apparent energy since last reset.
960    #[prost(message, optional, tag="8")]
961    pub tot_v_ah: ::std::option::Option<Bcr>,
962    /// Net reactive energy since last reset.
963    #[prost(message, optional, tag="9")]
964    pub tot_v_arh: ::std::option::Option<Bcr>,
965    /// Net real energy since last reset.
966    #[prost(message, optional, tag="10")]
967    pub tot_wh: ::std::option::Option<Bcr>,
968}
969/// Phase to ground/neutral related measured values of a three-phase system (WYE)
970#[derive(Clone, PartialEq, ::prost::Message)]
971pub struct Wye {
972    /// Net current, as the algebraic sum of the instantaneous values of currents flowing through all
973    /// live conductors and the neutral of a circuit at one point of the electrical installation ('phsA
974    /// instCVal'+'phsB.instCVal'+'phsC.instCVal'+'neut.instCVal').
975    #[prost(message, optional, tag="1")]
976    pub net: ::std::option::Option<Cmv>,
977    /// Value of the measured phase neutral. If a direct measurement of this value is not available, it
978    /// is acceptable to substitute an estimate computed by creating the algebraic sum of the instantaneous
979    /// values of currents flowing through all live conductors ('phsA.instCVal'+'phsB.instCVal'+'phsC
980    /// instCVal'); in that case, 'neut'='res'.
981    #[prost(message, optional, tag="2")]
982    pub neut: ::std::option::Option<Cmv>,
983    /// Value of phase A.
984    #[prost(message, optional, tag="3")]
985    pub phs_a: ::std::option::Option<Cmv>,
986    /// Value of phase B.
987    #[prost(message, optional, tag="4")]
988    pub phs_b: ::std::option::Option<Cmv>,
989    /// Value of phase C.
990    #[prost(message, optional, tag="5")]
991    pub phs_c: ::std::option::Option<Cmv>,
992}
993/// Specialized 61850 MMXU LN class
994#[derive(Clone, PartialEq, ::prost::Message)]
995pub struct ReadingMmxu {
996    /// UML inherited base object
997    #[prost(message, optional, tag="1")]
998    pub logical_node: ::std::option::Option<LogicalNode>,
999    /// Phase to ground/phase to neutral three phase currents.
1000    #[prost(message, optional, tag="2")]
1001    pub a: ::std::option::Option<Wye>,
1002    /// Kind of statistical calculation, specifying how the data attributes that represent analogue
1003    /// values have been calculated. The calculation method shall be the same for all data objects of the
1004    /// logical node instance.If the value is 'PEAK_FUNDAMENTAL', angle may be present in a data object of
1005    /// complex measured value type (CMV, such as in WYE, DEL, etc.), otherwise angle is not used (if
1006    /// ‘TRUE_RMS’ and ‘RMS_FUNDAMENTAL’).If the value is 'unspecified', the dependent data objects may be
1007    /// meaningless.
1008    #[prost(message, optional, tag="3")]
1009    pub clc_mth: ::std::option::Option<EngCalcMethodKind>,
1010    /// Frequency [Hz].
1011    #[prost(message, optional, tag="4")]
1012    pub hz: ::std::option::Option<Mv>,
1013    /// Phase to ground/phase to neutral power factors.The power factor is defined as P (active power) /
1014    /// S (apparent power), so the value range is 0...1. If current (I) and voltage (U) are sinusoidal and
1015    /// displaced by the angle phi, then the power factor is |cos phi|, again with the value range 0...1.
1016    /// Therefore, for the power factor per phase, value is contained in 'mag' and 'ang' is not used.
1017    #[prost(message, optional, tag="5")]
1018    pub pf: ::std::option::Option<Wye>,
1019    /// Sign convention for power factor 'PF' (and reactive power 'VAr').
1020    #[prost(message, optional, tag="6")]
1021    pub pf_sign: ::std::option::Option<EngPfSignKind>,
1022    /// Phase to ground (line) voltages.
1023    #[prost(message, optional, tag="7")]
1024    pub ph_v: ::std::option::Option<Wye>,
1025    /// Phase to phase voltages.
1026    #[prost(message, optional, tag="8")]
1027    pub ppv: ::std::option::Option<Del>,
1028    /// Phase to ground/phase to neutral apparent powers S.
1029    #[prost(message, optional, tag="9")]
1030    pub va: ::std::option::Option<Wye>,
1031    /// Phase to ground/phase to neutral reactive powers Q.
1032    #[prost(message, optional, tag="10")]
1033    pub v_ar: ::std::option::Option<Wye>,
1034    /// Phase to ground/phase to neutral real powers P.
1035    #[prost(message, optional, tag="11")]
1036    pub w: ::std::option::Option<Wye>,
1037}
1038#[derive(Clone, PartialEq, ::prost::Message)]
1039pub struct OptionalDbPosKind {
1040    #[prost(enumeration="DbPosKind", tag="1")]
1041    pub value: i32,
1042}
1043/// Specialized 61850 DPS class
1044#[derive(Clone, PartialEq, ::prost::Message)]
1045pub struct StatusDps {
1046    /// Quality of the value in 'stVal'.
1047    #[prost(message, optional, tag="1")]
1048    pub q: ::std::option::Option<Quality>,
1049    /// Status value of the controllable data object.
1050    #[prost(enumeration="DbPosKind", tag="2")]
1051    pub st_val: i32,
1052    /// Timestamp of the last change of the value in any of 'stVal' or 'q'.
1053    #[prost(message, optional, tag="3")]
1054    pub t: ::std::option::Option<Timestamp>,
1055}
1056/// OpenFMB specialization for breaker, recloser and switch status and event profiles:  LN: Circuit
1057/// breaker   Name: XCBR
1058#[derive(Clone, PartialEq, ::prost::Message)]
1059pub struct StatusAndEventXcbr {
1060    /// UML inherited base object
1061    #[prost(message, optional, tag="1")]
1062    pub logical_node_for_event_and_status: ::std::option::Option<LogicalNodeForEventAndStatus>,
1063    /// MISSING DOCUMENTATION!!!
1064    #[prost(message, optional, tag="2")]
1065    pub dynamic_test: ::std::option::Option<EnsDynamicTestKind>,
1066    /// MISSING DOCUMENTATION!!!
1067    #[prost(message, optional, tag="3")]
1068    pub pos: ::std::option::Option<StatusDps>,
1069}
1070/// &lt;&lt;statistics&gt;&gt; Integer controlled step position information (ISC)
1071#[derive(Clone, PartialEq, ::prost::Message)]
1072pub struct StatusIsc {
1073    /// Quality of the value in 'valWTr'.
1074    #[prost(message, optional, tag="1")]
1075    pub q: ::std::option::Option<Quality>,
1076    /// Status value
1077    #[prost(int32, tag="2")]
1078    pub st_val: i32,
1079    /// Timestamp of the last change of the value in any of 'valWTr' or 'q'.
1080    #[prost(message, optional, tag="3")]
1081    pub t: ::std::option::Option<Timestamp>,
1082}
1083/// Generic status message information
1084#[derive(Clone, PartialEq, ::prost::Message)]
1085pub struct StatusMessageInfo {
1086    /// UML inherited base object
1087    #[prost(message, optional, tag="1")]
1088    pub message_info: ::std::option::Option<MessageInfo>,
1089}
1090/// Controllable single point (SPC)
1091#[derive(Clone, PartialEq, ::prost::Message)]
1092pub struct StatusSpc {
1093    /// Quality of the value in 'stVal'.
1094    #[prost(message, optional, tag="1")]
1095    pub q: ::std::option::Option<Quality>,
1096    /// Status value of the controllable data object.
1097    #[prost(bool, tag="2")]
1098    pub st_val: bool,
1099    /// Timestamp of the last change of the value in any of 'stVal' or 'q'.
1100    #[prost(message, optional, tag="3")]
1101    pub t: ::std::option::Option<Timestamp>,
1102}
1103/// Status value
1104#[derive(Clone, PartialEq, ::prost::Message)]
1105pub struct StatusValue {
1106    /// UML inherited base object
1107    #[prost(message, optional, tag="1")]
1108    pub identified_object: ::std::option::Option<IdentifiedObject>,
1109}
1110/// Visible string status (VSS)
1111#[derive(Clone, PartialEq, ::prost::Message)]
1112pub struct Vss {
1113    /// Quality of the value in 'stVal'.
1114    #[prost(message, optional, tag="1")]
1115    pub q: ::std::option::Option<Quality>,
1116    /// Value of the data.
1117    #[prost(string, tag="2")]
1118    pub st_val: std::string::String,
1119    /// Timestamp of the last change of the value in any of 'stVal' or 'q'.
1120    #[prost(message, optional, tag="3")]
1121    pub t: ::std::option::Option<Timestamp>,
1122}
1123/// LN: Generic process I/O   Name: GGIO
1124#[derive(Clone, PartialEq, ::prost::Message)]
1125pub struct StringStatusGgio {
1126    /// UML inherited base object
1127    #[prost(message, optional, tag="1")]
1128    pub logical_node: ::std::option::Option<LogicalNode>,
1129    /// Phase code
1130    #[prost(message, optional, tag="2")]
1131    pub phase: ::std::option::Option<OptionalPhaseCodeKind>,
1132    /// String status
1133    #[prost(message, optional, tag="3")]
1134    pub str_in: ::std::option::Option<Vss>,
1135}
1136/// Point definition (Point)
1137#[derive(Clone, PartialEq, ::prost::Message)]
1138pub struct SwitchPoint {
1139    /// Switch position
1140    #[prost(message, optional, tag="1")]
1141    pub pos: ::std::option::Option<ControlDpc>,
1142    /// Start time
1143    #[prost(message, optional, tag="2")]
1144    pub start_time: ::std::option::Option<ControlTimestamp>,
1145}
1146/// Curve shape setting (FC=SP) (CSG_SP)
1147#[derive(Clone, PartialEq, ::prost::Message)]
1148pub struct SwitchCsg {
1149    /// The array with the points specifying a curve shape.
1150    #[prost(message, repeated, tag="1")]
1151    pub crv_pts: ::std::vec::Vec<SwitchPoint>,
1152}
1153/// OpenFMB specialization for control schedule using:  LN: Schedule   Name: FSCH
1154#[derive(Clone, PartialEq, ::prost::Message)]
1155pub struct SwitchControlScheduleFsch {
1156    /// Discrete value in SwitchCSG type
1157    #[prost(message, optional, tag="1")]
1158    pub val_dcsg: ::std::option::Option<SwitchCsg>,
1159}
1160#[derive(Clone, PartialEq, ::prost::Message)]
1161pub struct OptionalStateKind {
1162    #[prost(enumeration="StateKind", tag="1")]
1163    pub value: i32,
1164}
1165/// The units defined for usage in the CIM.
1166#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1167#[repr(i32)]
1168pub enum UnitSymbolKind {
1169    /// Dimension less quantity, e.g. count, per unit, etc.
1170    None = 0,
1171    /// Length in meter.
1172    Meter = 2,
1173    /// Mass in gram.
1174    Gram = 3,
1175    /// Current in ampere.
1176    Amp = 5,
1177    /// Plane angle in degrees.
1178    Deg = 9,
1179    /// Plane angle in radians.
1180    Rad = 10,
1181    /// Relative temperature in degrees Celsius. In the SI unit system the symbol is ºC. Electric charge
1182    /// is measured in coulomb that has the unit symbol C. To distinguish degree Celsius form coulomb the
1183    /// symbol used in the UML is degC. Reason for not using ºC is the special character º is difficult to
1184    /// manage in software.
1185    DegC = 23,
1186    /// Capacitance in farad.
1187    Farad = 25,
1188    /// Time in seconds.
1189    Sec = 27,
1190    /// Inductance in Henry.
1191    Henry = 28,
1192    /// Voltage in volt.
1193    V = 29,
1194    /// Resistance in ohm.
1195    Ohm = 30,
1196    /// Energy in joule.
1197    Joule = 31,
1198    /// Force in newton.
1199    Newton = 32,
1200    /// Frequency in hertz.
1201    Hz = 33,
1202    /// Active power in watt.
1203    W = 38,
1204    /// Pressure in pascal (n/m2).
1205    Pa = 39,
1206    /// Area in square meters.
1207    M2 = 41,
1208    /// Conductance in siemens.
1209    Siemens = 53,
1210    /// Apparent power in volt ampere.
1211    Va = 61,
1212    /// Reactive power in volt ampere reactive.
1213    VAr = 63,
1214    /// Power factor
1215    WPerVa = 65,
1216    /// Apparent energy in volt ampere hours.
1217    VAh = 71,
1218    /// Real energy in what hours.
1219    Wh = 72,
1220    /// Reactive energy in volt ampere reactive hours.
1221    VArh = 73,
1222    /// MISSING DOCUMENTATION!!!
1223    HzPerS = 75,
1224    /// MISSING DOCUMENTATION!!!
1225    WPerS = 81,
1226    /// Other enum not listed
1227    Other = 100,
1228    /// Amp hour
1229    Ah = 106,
1230    /// Time in minutes.
1231    Min = 159,
1232    /// Time in hours.
1233    Hour = 160,
1234    /// Volume in cubic meters.
1235    M3 = 166,
1236    /// Watts per square meter
1237    WPerM2 = 179,
1238    /// Relative temperature in degree fahrenheit.
1239    DegF = 279,
1240    /// Mile per hour
1241    Mph = 500,
1242}
1243/// The unit multipliers defined for the CIM.
1244#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1245#[repr(i32)]
1246pub enum UnitMultiplierKind {
1247    /// No multiplier or equivalently multiply by 1.
1248    None = 0,
1249    /// Other enum not listed
1250    Other = 1,
1251    /// Centi 10**-2.
1252    Centi = 2,
1253    /// Deci 10**-1.
1254    Deci = 3,
1255    /// Giga 10**9.
1256    Giga = 4,
1257    /// Kilo 10**3.
1258    Kilo = 5,
1259    /// Mega 10**6.
1260    Mega = 6,
1261    /// Micro 10**-6.
1262    Micro = 7,
1263    /// Milli 10**-3.
1264    Milli = 8,
1265    /// Nano 10**-9.
1266    Nano = 9,
1267    /// Pico 10**-12.
1268    Pico = 10,
1269    /// Tera 10**12.
1270    Tera = 11,
1271}
1272/// Enumeration of phase identifiers. Allows designation of phases for both transmission and
1273/// distribution equipment, circuits and loads. Residential and small commercial loads are often served
1274/// from single-phase, or split-phase, secondary circuits. For example of s12N, phases 1 and 2 refer to
1275/// hot wires that are 180 degrees out of phase, while N refers to the neutral wire. Through single
1276/// phase transformer connections, these secondary circuits may be served from one or two of the primary
1277/// phases A, B, and C. For three-phase loads, use the A, B, C phase codes instead of s12N.
1278#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1279#[repr(i32)]
1280pub enum PhaseCodeKind {
1281    /// Not applicable
1282    None = 0,
1283    /// Other enum not listed
1284    Other = 1,
1285    /// Neutral phase.
1286    N = 16,
1287    /// Phase C.
1288    C = 32,
1289    /// Phases C and neutral.
1290    Cn = 33,
1291    /// Phases A and C.
1292    Ac = 40,
1293    /// Phases A, C and neutral.
1294    Acn = 41,
1295    /// Phase B.
1296    B = 64,
1297    /// Phases B and neutral.
1298    Bn = 65,
1299    /// Phases B and C.
1300    Bc = 66,
1301    /// Phases B, C, and neutral.
1302    Bcn = 97,
1303    /// Phase A.
1304    A = 128,
1305    /// Phases A and neutral.
1306    An = 129,
1307    /// Phases A and B.
1308    Ab = 132,
1309    /// Phases A, B, and neutral.
1310    Abn = 193,
1311    /// Phases A, B, and C.
1312    Abc = 224,
1313    /// Phases A, B, C, and N.
1314    Abcn = 225,
1315    /// Secondary phase 2.
1316    S2 = 256,
1317    /// Secondary phase 2 and neutral.
1318    S2N = 257,
1319    /// Secondary phase 1.
1320    S1 = 512,
1321    /// Secondary phase 1 and neutral.
1322    S1N = 513,
1323    /// Secondary phase 1 and 2.
1324    S12 = 768,
1325    /// Secondary phases 1, 2, and neutral.
1326    S12N = 769,
1327}
1328/// Validity of the value, as condensed information for the client. In case this value is not
1329/// 'good', some reasons may be found in the 'detailQual'.
1330#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1331#[repr(i32)]
1332pub enum ValidityKind {
1333    /// Supervision function has detected no abnormal condition of either the acquisition function or
1334    /// the information source.
1335    Good = 0,
1336    /// Supervision function has detected an abnormal condition of the acquisition function or the
1337    /// information source (missing or non-operating updating devices). The value is not defined under this
1338    /// condition. It shall be used to indicate to the client that the value may be incorrect and shall not
1339    /// be used.  EXAMPLE If an input unit detects an oscillation of one input it will mark the related
1340    /// information as invalid.
1341    Invalid = 1,
1342    /// Reserved
1343    Reserved = 2,
1344    /// Supervision function has detected any abnormal behaviour. However, the value could still be
1345    /// valid. It is client's responsibility to determine whether the values should be used.
1346    Questionable = 3,
1347}
1348/// (default=process) Defines the source of a value. NOTE 1 Substitution may be done locally or via
1349/// the communication services. In the second case, specific attributes with a FC=SV are used. NOTE 2
1350/// There are various means to clear a substitution. As an example, a substitution that was done
1351/// following an invalid condition may be cleared automatically if the invalid condition is cleared.
1352/// However, this is a local issue and therefore
1353#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1354#[repr(i32)]
1355pub enum SourceKind {
1356    /// The value is provided by an input function from the process I/O or is calculated from some
1357    /// application function.
1358    Process = 0,
1359    /// The value is provided by an operator input or by an automatic source.
1360    Substituted = 1,
1361}
1362/// Validity of the value, as condensed information for the client. In case this value is not
1363/// 'good', some reasons may be found in the 'detailQual'.
1364#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1365#[repr(i32)]
1366pub enum TimeAccuracyKind {
1367    /// Undefined
1368    Undefined = 0,
1369    /// 10 ms (class T0)
1370    T0 = 7,
1371    /// 1 ms (class T1)
1372    T1 = 10,
1373    /// 100 us (class T2)
1374    T2 = 14,
1375    /// 25 us (class T3)
1376    T3 = 16,
1377    /// 4 us (class T4)
1378    T4 = 18,
1379    /// 1 us (class T5)
1380    T5 = 20,
1381    /// Undefined
1382    Unspecified = 31,
1383}
1384/// ESS function kind
1385#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1386#[repr(i32)]
1387pub enum ScheduleParameterKind {
1388    /// MISSING DOCUMENTATION!!!
1389    None = 0,
1390    /// Other enum not listed
1391    Other = 1,
1392    /// MISSING DOCUMENTATION!!!
1393    ANetMag = 2,
1394    /// MISSING DOCUMENTATION!!!
1395    ANeutMag = 3,
1396    /// MISSING DOCUMENTATION!!!
1397    APhsAMag = 4,
1398    /// MISSING DOCUMENTATION!!!
1399    APhsBMag = 5,
1400    /// MISSING DOCUMENTATION!!!
1401    APhsCMag = 6,
1402    /// MISSING DOCUMENTATION!!!
1403    HzMag = 7,
1404    /// MISSING DOCUMENTATION!!!
1405    PfNetMag = 8,
1406    /// MISSING DOCUMENTATION!!!
1407    PfNeutMag = 9,
1408    /// MISSING DOCUMENTATION!!!
1409    PfPhsAMag = 10,
1410    /// MISSING DOCUMENTATION!!!
1411    PfPhsBMag = 11,
1412    /// MISSING DOCUMENTATION!!!
1413    PfPhsCMag = 12,
1414    /// MISSING DOCUMENTATION!!!
1415    PhVNetAng = 13,
1416    /// MISSING DOCUMENTATION!!!
1417    PhVNetMag = 14,
1418    /// MISSING DOCUMENTATION!!!
1419    PhVNeutAng = 15,
1420    /// MISSING DOCUMENTATION!!!
1421    PhVNeutMag = 16,
1422    /// MISSING DOCUMENTATION!!!
1423    PhVPhsAAng = 17,
1424    /// MISSING DOCUMENTATION!!!
1425    PhVPhsAMag = 18,
1426    /// MISSING DOCUMENTATION!!!
1427    PhVPhsBAng = 19,
1428    /// MISSING DOCUMENTATION!!!
1429    PhVPhsBMag = 20,
1430    /// MISSING DOCUMENTATION!!!
1431    PhVPhsCAng = 21,
1432    /// MISSING DOCUMENTATION!!!
1433    PhVPhsCMag = 22,
1434    /// MISSING DOCUMENTATION!!!
1435    PpvPhsAbAng = 23,
1436    /// MISSING DOCUMENTATION!!!
1437    PpvPhsAbMag = 24,
1438    /// MISSING DOCUMENTATION!!!
1439    PpvPhsBcAng = 25,
1440    /// MISSING DOCUMENTATION!!!
1441    PpvPhsBcMag = 26,
1442    /// MISSING DOCUMENTATION!!!
1443    PpvPhsCaAng = 27,
1444    /// MISSING DOCUMENTATION!!!
1445    PpvPhsCaMag = 28,
1446    /// MISSING DOCUMENTATION!!!
1447    VaNetMag = 29,
1448    /// MISSING DOCUMENTATION!!!
1449    VaNeutMag = 30,
1450    /// MISSING DOCUMENTATION!!!
1451    VaPhsAMag = 31,
1452    /// MISSING DOCUMENTATION!!!
1453    VaPhsBMag = 32,
1454    /// MISSING DOCUMENTATION!!!
1455    VaPhsCMag = 33,
1456    /// MISSING DOCUMENTATION!!!
1457    VArNetMag = 34,
1458    /// MISSING DOCUMENTATION!!!
1459    VArNeutMag = 35,
1460    /// MISSING DOCUMENTATION!!!
1461    VArPhsAMag = 36,
1462    /// MISSING DOCUMENTATION!!!
1463    VArPhsBMag = 37,
1464    /// MISSING DOCUMENTATION!!!
1465    VArPhsCMag = 38,
1466    /// MISSING DOCUMENTATION!!!
1467    WNetMag = 39,
1468    /// MISSING DOCUMENTATION!!!
1469    WNeutMag = 40,
1470    /// MISSING DOCUMENTATION!!!
1471    WPhsAMag = 41,
1472    /// MISSING DOCUMENTATION!!!
1473    WPhsBMag = 42,
1474    /// MISSING DOCUMENTATION!!!
1475    WPhsCMag = 43,
1476}
1477/// Calculation method (CalcMethodKind enumeration)
1478#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1479#[repr(i32)]
1480pub enum CalcMethodKind {
1481    /// Undefined enum value which can be used for Protobuf generation and be consistent with other
1482    /// technologies.
1483    Undefined = 0,
1484    /// All analogue values (i.e., all common attributes 'i' and 'f') meet the sampling and filtering
1485    /// characteristics specified in IEEE C37.118.1 for P-CLASS.
1486    PClass = 11,
1487    /// All analogue values (i.e., all common attributes 'i' and 'f') meet the sampling and filtering
1488    /// characteristics specified in IEEE C37.118.1 for M-CLASS.
1489    MClass = 12,
1490    /// All analogue values are [F(t+T)-F(t)] for a calculation interval T (in the same unit as the
1491    /// original entity). Note: The client can still calculate rate so: RATE = DIFF/T.
1492    Diff = 13,
1493}
1494/// Power system connect modes to the power grid (GridConnectModeKind)
1495#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1496#[repr(i32)]
1497pub enum GridConnectModeKind {
1498    /// Undefined
1499    Undefined = 0,
1500    /// Current-source inverter (CSI)
1501    Csi = 1,
1502    /// Voltage-controlled voltage-source inverter (VC-VSI)
1503    VcVsi = 2,
1504    /// Current-controlled voltage-source inverter (CC-VSI)
1505    CcVsi = 3,
1506    /// Not applicable / Unknown
1507    None = 98,
1508    /// MISSING DOCUMENTATION!!!
1509    Other = 99,
1510    /// Voltage source inverter regulating to P and Q references (VSI PQ)
1511    VsiPq = 2000,
1512    /// Voltage source inverter regulating to voltage and frequency references paralleling other
1513    /// generation and not grid forming (VSI VF).
1514    VsiVf = 2001,
1515    /// Voltage source inverter regulating to voltage and frequency references as primary grid forming
1516    /// generation (VSI ISO).
1517    VsiIso = 2002,
1518}
1519/// Power factor sign (PFSignKind enumeration)
1520#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1521#[repr(i32)]
1522pub enum PfSignKind {
1523    /// Undefined enum value which can be used for Protobuf generation and be consistent with other
1524    /// technologies.
1525    Undefined = 0,
1526    /// All analogue values are [F(t+T)-F(t)] for a calculation interval T (in the same unit as the
1527    /// original entity). Note: The client can still calculate rate so: RATE = DIFF/T.
1528    Iec = 1,
1529    /// All analogue values (i.e., all common attributes 'i' and 'f') meet the sampling and filtering
1530    /// characteristics specified in IEEE C37.118.1 for M-CLASS.
1531    Eei = 2,
1532}
1533/// Behaviour or mode (BehaviourModeKind enumeration)
1534#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1535#[repr(i32)]
1536pub enum BehaviourModeKind {
1537    /// Undefined
1538    Undefined = 0,
1539    /// Normal enabled state.
1540    On = 1,
1541    /// Process is passively supervised.
1542    Blocked = 2,
1543    /// Function is operated but results are indicated as test results.
1544    Test = 3,
1545    /// Function is operated in test mode, but with no impact to the process.
1546    TestBlocked = 4,
1547    /// Function is inactive but shows its configuration capability.
1548    Off = 5,
1549}
1550/// DER operational state (DERGeneratorStateKind)
1551#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1552#[repr(i32)]
1553pub enum DerGeneratorStateKind {
1554    /// Undefined enum value which can be used for Protobuf generation and be consistent with other
1555    /// technologies.
1556    Undefined = 0,
1557    /// MISSING DOCUMENTATION!!!
1558    NotOperating = 1,
1559    /// MISSING DOCUMENTATION!!!
1560    Operating = 2,
1561    /// MISSING DOCUMENTATION!!!
1562    StartingUp = 3,
1563    /// MISSING DOCUMENTATION!!!
1564    ShuttingDown = 4,
1565    /// MISSING DOCUMENTATION!!!
1566    AtDisconnectLevel = 5,
1567    /// MISSING DOCUMENTATION!!!
1568    RampingInPower = 6,
1569    /// MISSING DOCUMENTATION!!!
1570    RampingInReactivePower = 7,
1571    /// MISSING DOCUMENTATION!!!
1572    Standby = 8,
1573    /// MISSING DOCUMENTATION!!!
1574    NotApplicableUnknown = 98,
1575    /// MISSING DOCUMENTATION!!!
1576    Other = 99,
1577}
1578/// Dynamic test status (see IEC61850-7-2 section 20.2.1 Direct control with normal security, state
1579/// machine diagram)   A simplified state machine diagram (from Herb F.) is provided.
1580#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1581#[repr(i32)]
1582pub enum DynamicTestKind {
1583    /// None
1584    None = 0,
1585    /// Testing status
1586    Testing = 1,
1587    /// Operating status
1588    Operating = 2,
1589    /// Failed status
1590    Failed = 3,
1591}
1592/// State kind
1593#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1594#[repr(i32)]
1595pub enum HealthKind {
1596    /// MISSING DOCUMENTATION!!!
1597    None = 0,
1598    /// No problems, normal operation ("green").
1599    Ok = 1,
1600    /// Minor problems, but in safe operating mode ("yellow"). The exact meaning is a local issue,
1601    /// depending on the dedicated function/device.
1602    Warning = 2,
1603    /// Severe problem, no operation possible ("red").
1604    Alarm = 3,
1605}
1606/// Double point position status
1607#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1608#[repr(i32)]
1609pub enum DbPosKind {
1610    /// Transient status
1611    Transient = 0,
1612    /// Closed status
1613    Closed = 1,
1614    /// Open status
1615    Open = 2,
1616    /// Invalid status
1617    Invalid = 3,
1618}
1619/// State kind
1620#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
1621#[repr(i32)]
1622pub enum StateKind {
1623    /// MISSING DOCUMENTATION!!!
1624    Off = 0,
1625    /// MISSING DOCUMENTATION!!!
1626    On = 1,
1627    /// MISSING DOCUMENTATION!!!
1628    Standby = 2,
1629}