PROFINET IO Controller Stack 1.0.0
Modern C++ implementation of a PROFINET IO Controller stack
Loading...
Searching...
No Matches
alarms.h
Go to the documentation of this file.
1
11
12#pragma once
13
14#include <cstdint>
15#include <stdexcept>
16#include <string>
17#include <utility>
18#include <variant>
19#include <vector>
20
21#include "profinet/indices.h"
22#include "profinet/protocol.h"
23
24namespace profinet
25{
30{
33
36
39 [[nodiscard]] std::string UsiName() const
40 {
42 }
43};
44
49{
52
54 std::uint16_t channelNumber = 0;
55
57 std::uint16_t channelProperties = 0;
58
60 std::uint16_t channelErrorType = 0;
61
63 std::uint16_t extChannelErrorType = 0;
64
66 std::uint32_t extChannelAddValue = 0;
67
69 std::uint32_t qualifiedChannelQualifier = 0;
70
73 [[nodiscard]] std::string UsiName() const
74 {
76 }
77
80 [[nodiscard]] std::uint16_t ChannelNumberValue() const
81 {
82 return channelNumber & static_cast<uint16_t>(Usi::Bit0till14OfChannelNumber);
83 }
84
87 [[nodiscard]] bool IsAccumulative() const
88 {
89 return (channelNumber & static_cast<uint16_t>(Usi::Bit15OfChannelNumber)) != 0;
90 }
91
94 [[nodiscard]] std::uint8_t ChannelTypeValue() const
95 {
96 return static_cast<std::uint8_t>(channelProperties & LowByteMask);
97 }
98
105
108 [[nodiscard]] bool IsQualified() const
109 {
111 }
112};
113
116{
119
122
124 std::uint16_t blockLength = 0;
125
127 std::uint16_t blockVersion = 0;
128
130 std::uint32_t maintenanceStatus = 0;
131
134 [[nodiscard]] std::string UsiName() const
135 {
137 }
138
141 [[nodiscard]] bool MaintenanceRequired() const
142 {
143 return (maintenanceStatus & 0x01) != 0;
144 }
145
148 [[nodiscard]] bool MaintenanceDemanded() const
149 {
150 return (maintenanceStatus & 0x02) != 0;
151 }
152};
153
160{
163
166
168 std::uint16_t blockLength = 0;
169
171 std::uint16_t blockVersion = 0;
172
174 std::uint32_t urRecordIndex = 0;
175
177 std::uint32_t urRecordLength = 0;
178
181 [[nodiscard]] std::string UsiName() const
182 {
184 }
185
188 [[nodiscard]] bool IsUpload() const
189 {
191 }
192
195 [[nodiscard]] bool IsRetrieval() const
196 {
198 }
199};
200
206{
209
211 std::uint16_t blockType = 0;
212
214 std::uint16_t blockLength = 0;
215
217 std::uint16_t blockVersion = 0;
218
220 std::uint32_t iParReqHeader = 0;
221
223 std::uint32_t maxSegmentSize = 0;
224
226 std::uint32_t transferIndex = 0;
227
229 std::uint32_t totalIparSize = 0;
230
233 [[nodiscard]] std::string UsiName() const
234 {
236 }
237};
238
241{
244
247
249 std::uint16_t blockLength = 0;
250
252 std::uint16_t blockVersion = 0;
253
255 std::uint8_t peOperationalMode = 0;
256
259 [[nodiscard]] std::string UsiName() const
260 {
262 }
263
266 [[nodiscard]] std::string ModeName() const
267 {
269 }
270};
271
274{
277
279 std::uint16_t rsAlarmInfo = 0;
280
283 [[nodiscard]] std::string UsiName() const
284 {
286 }
287
290 [[nodiscard]] std::uint16_t RsSpecifier() const
291 {
292 return rsAlarmInfo & static_cast<std::uint16_t>(Usi::Low11BitsOfRsAlarmInfo);
293 }
294
297 [[nodiscard]] std::uint16_t RsSequenceNumber() const
298 {
299 return RsSpecifier();
300 }
301};
302
305{
308
310 std::uint16_t channelNumber = 0;
311
313 std::uint16_t propAlChannelProperties = 0;
314
316 std::uint16_t prAlReason = 0;
317
319 std::uint16_t prAlExtReason = 0;
320
323
326 [[nodiscard]] std::string UsiName() const
327 {
329 }
330};
331
337
341Usi UsiOf(const AlarmItemVariant& item);
342
346std::string UsiNameOf(const AlarmItemVariant& item);
347
354std::pair<AlarmItemVariant, std::size_t> ParseAlarmItem(const Bytes& data, std::size_t offset = 0);
355
358{
361
363 std::pair<std::uint8_t, std::uint8_t> blockVersion{1, 0};
364
367
369 std::uint32_t api = 0;
370
372 std::uint16_t slotNumber = 0;
373
375 std::uint16_t subslotNumber = 0;
376
378 std::uint32_t moduleIdentNumber = 0;
379
381 std::uint32_t submoduleIdentNumber = 0;
382
384 std::uint16_t alarmSequenceNumber = 0;
385
387 bool channelDiagnosis = false;
388
391
394
396 bool arDiagnosisState = false;
397
399 std::vector<AlarmItemVariant> items;
400
403
406 [[nodiscard]] bool IsHighPriority() const
407 {
409 }
410
413 [[nodiscard]] bool IsLowPriority() const
414 {
416 }
417
420 [[nodiscard]] std::string AlarmTypeName() const
421 {
423 }
424
427 [[nodiscard]] std::string Location() const;
428};
429
441AlarmNotification ParseAlarmNotification(const Bytes& data);
442
443} // namespace profinet
PROFINET record-data indices, block types, and protocol enumerations.
BlockType
PROFINET block types.
Definition indices.h:91
@ AlarmNotificationHigh
Alarm notification high block.
@ Unknown
Unknown / Initialize value.
@ AlarmNotificationLow
Alarm notification low block.
std::pair< AlarmItemVariant, std::size_t > ParseAlarmItem(const Bytes &data, std::size_t offset=0)
Parse a single alarm item starting at an offset.
Definition alarms.cpp:234
AlarmNotification ParseAlarmNotification(const Bytes &data)
Parse a complete AlarmNotification PDU (BlockHeader + body + items).
Definition alarms.cpp:286
AlarmType
PROFINET Alarm Types used in AlarmNotification blocks.
Definition indices.h:344
@ Unknown
Unkown alarm.
std::string GetUsiName(Usi usi)
Get the human-readable name for a User Structure Identifier.
Definition indices.cpp:386
std::string GetPeModeName(std::uint8_t mode)
Get the human-readable name for a PROFIenergy operational mode.
Definition indices.cpp:470
std::string UsiNameOf(const AlarmItemVariant &item)
Get the human-readable USI name for any AlarmItemVariant alternative.
Definition alarms.cpp:73
Usi
PROFINET User Structure Identifiers (USI).
Definition indices.h:491
@ Maintenance
Maintenance item.
@ Bit0till14OfChannelNumber
The channel number (bits 0-14).
@ IParameter
iParameter item.
@ Bit15OfChannelNumber
Check diagnosis is accumulative (bit 15 of ChannelNumber).
@ PralAlarm
PRAL alarm item.
@ Unknown
Initializer.
@ Upload
Upload record.
@ ExtendedChannelDiagnosis
Extended channel diagnosis.
@ PeAlarm
PE alarm item.
@ Low11BitsOfRsAlarmInfo
The low 11 bits of RsAlarmInfo, so the RS specifier can be extracted from RsAlarmInfo.
@ QualifiedChannelDiagnosis
Qualified channel diagnosis.
static constexpr std::uint8_t LowByteMask
Bitmask used to isolate the lowest significant byte (8 bits) of a larger integer.
Definition util.h:59
std::vector< std::uint8_t > Bytes
Generic byte buffer alias used throughout the library for raw wire data.
Definition protocol.h:52
std::string GetAlarmTypeName(AlarmType alarmType)
Get the human-readable name for an alarm type.
Definition indices.cpp:278
Usi UsiOf(const AlarmItemVariant &item)
Get the USI shared by every AlarmItemVariant alternative.
Definition alarms.cpp:67
std::variant< AlarmItem, DiagnosisItem, MaintenanceItem, UploadRetrievalItem, PEAlarmItem, RSAlarmItem, PRALAlarmItem > AlarmItemVariant
A parsed alarm payload item; the held alternative is selected by USI.
Definition alarms.h:336
PROFINET protocol wire-format structures and serialization helpers.
Generic/unknown alarm item.
Definition alarms.h:30
std::string UsiName() const
Human-readable name for this item's USI.
Definition alarms.h:39
Usi userStructureId
User Structure Identifier for this item.
Definition alarms.h:32
Bytes rawData
Raw, undecoded item payload.
Definition alarms.h:35
Complete parsed AlarmNotification PDU: header fields + parsed items.
Definition alarms.h:358
bool manufacturerSpecific
Whether the alarm specifier indicates a manufacturer-specific diagnosis.
Definition alarms.h:390
std::vector< AlarmItemVariant > items
Parsed alarm items carried by this notification.
Definition alarms.h:399
std::uint16_t slotNumber
Slot number where the alarm originated.
Definition alarms.h:372
bool IsLowPriority() const
Whether this is a low-priority notification.
Definition alarms.h:413
std::uint16_t alarmSequenceNumber
Sequence number extracted from the alarm specifier.
Definition alarms.h:384
BlockType blockType
Block type (high or low priority notification).
Definition alarms.h:360
std::uint32_t api
API number.
Definition alarms.h:369
Bytes rawPayload
Raw, undecoded payload the items were parsed from.
Definition alarms.h:402
std::string Location() const
Location string identifying where the alarm originated.
Definition alarms.cpp:281
AlarmType alarmType
Alarm type (Diagnosis/Process/Pull/Plug/...).
Definition alarms.h:366
std::pair< std::uint8_t, std::uint8_t > blockVersion
Block format version.
Definition alarms.h:363
std::uint32_t submoduleIdentNumber
Submodule ident number of the affected submodule.
Definition alarms.h:381
std::uint16_t subslotNumber
Subslot number where the alarm originated.
Definition alarms.h:375
bool IsHighPriority() const
Whether this is a high-priority notification.
Definition alarms.h:406
bool channelDiagnosis
Whether the alarm specifier indicates channel diagnosis is present.
Definition alarms.h:387
std::uint32_t moduleIdentNumber
Module ident number of the affected module.
Definition alarms.h:378
std::string AlarmTypeName() const
Human-readable name for AlarmType.
Definition alarms.h:420
bool arDiagnosisState
Whether the alarm specifier indicates AR diagnosis state.
Definition alarms.h:396
bool submoduleDiagnosisState
Whether the alarm specifier indicates submodule diagnosis state.
Definition alarms.h:393
Diagnosis alarm item.
Definition alarms.h:49
std::uint16_t extChannelErrorType
Extended channel error type code (Ext/Qualified variants only).
Definition alarms.h:63
std::uint16_t channelProperties
Channel properties bitfield (type, direction, specifier, maintenance flags).
Definition alarms.h:57
std::uint16_t ChannelNumberValue() const
Channel number with the accumulative bit masked off.
Definition alarms.h:80
bool IsExtended() const
Whether this is the Ext or Qualified variant.
Definition alarms.h:101
std::uint32_t qualifiedChannelQualifier
Qualifier bitmask (Qualified variant only).
Definition alarms.h:69
Usi userStructureId
User Structure Identifier for this item.
Definition alarms.h:51
bool IsAccumulative() const
Whether this diagnosis is accumulative (bit 15 of ChannelNumber).
Definition alarms.h:87
std::string UsiName() const
Human-readable name for this item's USI.
Definition alarms.h:73
std::uint8_t ChannelTypeValue() const
Channel type extracted from ChannelProperties.
Definition alarms.h:94
std::uint16_t channelNumber
Channel number, with the accumulative bit packed into bit 15.
Definition alarms.h:54
bool IsQualified() const
Whether this is the Qualified variant.
Definition alarms.h:108
std::uint16_t channelErrorType
Channel error type code.
Definition alarms.h:60
std::uint32_t extChannelAddValue
Extended channel additional value (Ext/Qualified variants only).
Definition alarms.h:66
iParameter alarm item (USI 0x8201).
Definition alarms.h:206
std::uint16_t blockVersion
Nested block version.
Definition alarms.h:217
std::uint16_t blockType
Nested block type.
Definition alarms.h:211
Usi userStructureId
User Structure Identifier for this item.
Definition alarms.h:208
std::uint32_t maxSegmentSize
Maximum segment size for the transfer.
Definition alarms.h:223
std::uint16_t blockLength
Nested block length.
Definition alarms.h:214
std::uint32_t totalIparSize
Total iParameter data size in bytes.
Definition alarms.h:229
std::uint32_t iParReqHeader
iParameter request header.
Definition alarms.h:220
std::string UsiName() const
Human-readable name for this item's USI.
Definition alarms.h:233
std::uint32_t transferIndex
Transfer index.
Definition alarms.h:226
Maintenance alarm item (USI 0x8100).
Definition alarms.h:116
std::uint32_t maintenanceStatus
Maintenance status bitmask.
Definition alarms.h:130
std::string UsiName() const
Human-readable name for this item's USI.
Definition alarms.h:134
bool MaintenanceRequired() const
Whether maintenance is required.
Definition alarms.h:141
std::uint16_t blockLength
Nested block length.
Definition alarms.h:124
bool MaintenanceDemanded() const
Whether maintenance is demanded (more urgent than required).
Definition alarms.h:148
BlockType blockType
Nested block type.
Definition alarms.h:121
Usi userStructureId
User Structure Identifier for this item.
Definition alarms.h:118
std::uint16_t blockVersion
Nested block version.
Definition alarms.h:127
PROFIenergy alarm item (USI 0x8310).
Definition alarms.h:241
std::uint8_t peOperationalMode
Current PROFIenergy operational mode.
Definition alarms.h:255
std::string ModeName() const
Human-readable name for PeOperationalMode.
Definition alarms.h:266
Usi userStructureId
User Structure Identifier for this item.
Definition alarms.h:243
std::string UsiName() const
Human-readable name for this item's USI.
Definition alarms.h:259
BlockType blockType
Nested block type.
Definition alarms.h:246
std::uint16_t blockLength
Nested block length.
Definition alarms.h:249
std::uint16_t blockVersion
Nested block version.
Definition alarms.h:252
Pull Request Alarm item (USI 0x8320).
Definition alarms.h:305
std::uint16_t channelNumber
Channel number.
Definition alarms.h:310
std::string UsiName() const
Human-readable name for this item's USI.
Definition alarms.h:326
std::uint16_t prAlExtReason
Extended pull-request reason code.
Definition alarms.h:319
std::uint16_t prAlReason
Pull-request reason code.
Definition alarms.h:316
Bytes prAlReasonAddValue
Additional reason-specific data.
Definition alarms.h:322
std::uint16_t propAlChannelProperties
Channel properties bitfield.
Definition alarms.h:313
Usi userStructureId
User Structure Identifier for this item.
Definition alarms.h:307
Reporting System alarm item (USI 0x8300-0x8302).
Definition alarms.h:274
std::string UsiName() const
Human-readable name for this item's USI.
Definition alarms.h:283
std::uint16_t RsSequenceNumber() const
RS sequence number (alias for RsSpecifier()).
Definition alarms.h:297
std::uint16_t RsSpecifier() const
RS specifier extracted from RsAlarmInfo.
Definition alarms.h:290
std::uint16_t rsAlarmInfo
RS alarm info bitfield.
Definition alarms.h:279
Usi userStructureId
User Structure Identifier for this item.
Definition alarms.h:276
Upload/Retrieval alarm item (USI 0x8200, 0x8201).
Definition alarms.h:160
std::string UsiName() const
Human-readable name for this item's USI.
Definition alarms.h:181
std::uint32_t urRecordIndex
Record index the upload/retrieval refers to.
Definition alarms.h:174
bool IsUpload() const
Whether this is an upload record.
Definition alarms.h:188
BlockType blockType
Nested block type.
Definition alarms.h:165
bool IsRetrieval() const
Whether this is an iParameter retrieval record.
Definition alarms.h:195
std::uint32_t urRecordLength
Record length in bytes.
Definition alarms.h:177
Usi userStructureId
User Structure Identifier for this item.
Definition alarms.h:162
std::uint16_t blockLength
Nested block length.
Definition alarms.h:168
std::uint16_t blockVersion
Nested block version.
Definition alarms.h:171