PROFINET IO Controller Stack 1.0.0
Modern C++ implementation of a PROFINET IO Controller stack
Loading...
Searching...
No Matches
indices.h
Go to the documentation of this file.
1
41
42#pragma once
43
44#include <cstdint>
45#include <iostream>
46#include <magic_enum.hpp>
47#include <string>
48#include <utility>
49#include <vector>
50namespace profinet
51{
52
53// =============================================================================
54// Block Types (from Wireshark pn_io_block_type dissector)
55// =============================================================================
56
60enum class ControlCommand : std::uint16_t
61{
63 PrmEnd = 0x0001,
64
66 ApplicationReady = 0x0002,
67
69 Release = 0x0004,
70
72 Done = 0x0008,
73
75 ReadyForCompanion = 0x0010,
76
78 ReadyForRtClass3 = 0x0020,
79
81 PrmBegin = 0x0040
82};
83
88enum class BlockType : std::uint16_t
89{
90 // Diagnosis blocks
91
93 DiagnosisData = 0x0010,
94
97
100
101 // I&M blocks
102
105
108
111
114
117
120
123
126
129
132
135
138
141
144
147
150
151 // Alarm blocks
152
154 AlarmNotificationHigh = 0x0001,
155
158
160 AlarmNotificationLow = 0x0002,
161
164
165 // IOD Read/Write blocks
166
168 IoDataWriteRequest = 0x0008,
169
171 IoDataWriteResponse = 0x8008,
172
174 IoDataReadRequest = 0x0009,
175
177 IoDataReadResponse = 0x8009,
178
179 // AR data blocks
180
183
185 LogData = 0x0019,
186
188 ApiData = 0x001A,
189
191 SrlData = 0x001B,
192
193 // AR/IOCR/AlarmCR connection blocks
194
197
200
202 IoCrRequest = 0x0102,
203
205 IoCrResponse = 0x8102,
206
208 AlarmCrRequest = 0x0103,
209
211 AlarmCrResponse = 0x8103,
212
215
217 ModuleDifference = 0x8104,
218
219 // Control operation blocks
220
222 ControlPrmEndRequest = 0x0110,
223
225 ControlPrmEndResponse = 0x8110,
226
229
232
234 ReleaseRequest = 0x0114,
235
237 ReleaseResponse = 0x8114,
238
240 ControlRtClass3Request = 0x0117,
241
244
247
250
254 SubmoduleList = 0x0119,
255
256 // Port and interface data blocks
257
259 PortDataCheck = 0x0200,
260
262 PortDataAdjust = 0x0202,
263
265 PortDataReal = 0x020F,
266
268 InterfaceMrpDataAdjust = 0x0211,
269
271 InterfaceMrpDataReal = 0x0212,
272
274 PortMrpDataReal = 0x0215,
275
277 MrpRingStateData = 0x0219,
278
280 PortFoDataReal = 0x0220,
281
283 PortFoDataCheck = 0x0221,
284
286 PortFoDataAdjust = 0x0222,
287
289 PortDataRealExtended = 0x022C,
290
293
295 PortStatistics = 0x0251,
296
297 // Container blocks
298
300 MultipleHeader = 0x0400,
301
303 ContainerContent = 0x0401,
304
305 // Device-level blocks (0xF8xx)
306
309
311 RealProcessData = 0xF841,
312
314 ExpectedProcessData = 0xF842,
315
316 // API-level blocks (0xF0xx)
317
320};
321
326[[nodiscard]] constexpr bool operator==(BlockType lhs, std::uint16_t rhs) noexcept
327{
328 return static_cast<std::uint16_t>(lhs) == rhs;
329}
330
335[[nodiscard]] constexpr bool operator==(std::uint16_t lhs, BlockType rhs) noexcept
336{
337 return lhs == static_cast<std::uint16_t>(rhs);
338}
339
344[[nodiscard]] constexpr bool operator!=(BlockType lhs, std::uint16_t rhs) noexcept
345{
346 return !(lhs == rhs);
347}
348
353[[nodiscard]] constexpr bool operator!=(std::uint16_t lhs, BlockType rhs) noexcept
354{
355 return !(lhs == rhs);
356}
357
359inline std::ostream& operator<<(std::ostream& os, BlockType type)
360{
361 // Prints hex format like 0x0010
362 return os << "0x" << std::hex << static_cast<std::uint16_t>(type);
363}
364
371std::string GetBlockTypeName(BlockType blockType);
372
373// =============================================================================
374// Alarm Types (used in AlarmNotification blocks)
375// =============================================================================
376
381enum class AlarmType : std::uint16_t
382{
384 Diagnosis = 0x0001,
385
387 Process = 0x0002,
388
390 Pull = 0x0003,
391
393 Plug = 0x0004,
394
396 Status = 0x0005,
397
399 Update = 0x0006,
400
402 Redundancy = 0x0007,
403
405 ControlledBySupervisor = 0x0008,
406
408 Released = 0x0009,
409
411 PlugWrongSubmodule = 0x000A,
412
414 ReturnOfSubmodule = 0x000B,
415
417 DiagnosisDisappears = 0x000C,
418
420 MulticastMismatch = 0x000D,
421
423 PortDataChange = 0x000E,
424
426 SyncDataChanged = 0x000F,
427
429 IsochronousModeProblem = 0x0010,
430
433
435 TimeDataChanged = 0x0012,
436
438 DfpProblem = 0x0013,
439
441 UploadRetrieval = 0x001E,
442
444 PullModule = 0x001F
445};
446
452std::string GetAlarmTypeName(AlarmType alarmType);
453
454// =============================================================================
455// IOCR / AlarmCR / AR type constants
456// =============================================================================
457
462enum class IocrType : std::uint16_t
463{
465 Input = 0x0001,
466
468 Output = 0x0002,
469
471 MulticastProvider = 0x0003,
472
474 MulticastConsumer = 0x0004
475};
476
483std::string GetIocrTypeName(IocrType iocrType);
484
489enum class IocrRtClass : std::uint8_t
490{
492 Udp = 0x04
493};
494
501std::string GetIocrRtClassName(IocrRtClass rtClass);
502
503// NOLINTBEGIN(readability-identifier-naming)
505// inline constexpr std::uint16_t ALARM_CR_TYPE_ALARM = 0x0001;
506
508inline constexpr std::uint8_t ALARM_TRANSPORT_RTA_CLASS_UDP = 0x01;
509
511inline constexpr std::uint16_t AR_TYPE_IOCAR_SINGLE = 0x0001;
513inline constexpr std::uint16_t AR_TYPE_IOSAR = 0x0006;
515inline constexpr std::uint16_t AR_TYPE_IOCARSR = 0x0020;
516// NOLINTEND(readability-identifier-naming)
517//
518// =============================================================================
519// USI (User Structure Identifier) constants
520// =============================================================================
525enum class Usi : std::uint16_t
526{
528 NoIdentifier = 0x0000,
529
531 ChannelDiagnosis = 0x8000,
532
534 MultipleDiagnosis = 0x8001,
535
538
541
543 Maintenance = 0x8100,
544
546 Upload = 0x8200,
547
549 IParameter = 0x8201,
550
552 RsAlarmLow = 0x8300,
553
555 RsAlarmHigh = 0x8301,
556
558 RsAlarmSubmodule = 0x8302,
559
561 PeAlarm = 0x8310,
562
564 PralAlarm = 0x8320,
565
568
570 Bit15OfChannelNumber = 0x8000,
571
574
577
581};
586[[nodiscard]] constexpr bool operator==(Usi lhs, std::uint16_t rhs) noexcept
587{
588 return static_cast<std::uint16_t>(lhs) == rhs;
589}
590
595[[nodiscard]] constexpr bool operator==(std::uint16_t lhs, Usi rhs) noexcept
596{
597 return lhs == static_cast<std::uint16_t>(rhs);
598}
599
604[[nodiscard]] constexpr bool operator!=(Usi lhs, std::uint16_t rhs) noexcept
605{
606 return !(lhs == rhs);
607}
608
613[[nodiscard]] constexpr bool operator!=(std::uint16_t lhs, Usi rhs) noexcept
614{
615 return !(lhs == rhs);
616}
617
622inline std::ostream& operator<<(std::ostream& os, Usi value)
623{
624 return os << "0x" << std::hex << static_cast<std::uint16_t>(value);
625}
626
633std::string GetUsiName(Usi usi);
634
635// =============================================================================
636// Module / Submodule state constants
637// =============================================================================
638
639// NOLINTBEGIN(readability-identifier-naming)
641inline constexpr std::uint16_t MODULE_STATE_NO_MODULE = 0x0000;
643inline constexpr std::uint16_t MODULE_STATE_WRONG_MODULE = 0x0001;
645inline constexpr std::uint16_t MODULE_STATE_PROPER_MODULE = 0x0002;
647inline constexpr std::uint16_t MODULE_STATE_SUBSTITUTE_MODULE = 0x0003;
648
650inline constexpr std::uint16_t SUBMODULE_STATE_NO_SUBMODULE = 0x0000;
652inline constexpr std::uint16_t SUBMODULE_STATE_WRONG_SUBMODULE = 0x0001;
654inline constexpr std::uint16_t SUBMODULE_STATE_LOCKED_BY_SUPERVISOR = 0x0002;
656inline constexpr std::uint16_t SUBMODULE_STATE_APPLICATION_READY_PENDING = 0x0004;
658inline constexpr std::uint16_t SUBMODULE_STATE_OK = 0x0007;
659// NOLINTEND(readability-identifier-naming)
660
664std::string GetModuleStateName(std::uint16_t state);
665
669std::string GetSubmoduleStateName(std::uint16_t state);
670
671// =============================================================================
672// PROFIenergy operational mode constants
673// =============================================================================
674
675// NOLINTBEGIN(readability-identifier-naming)
677inline constexpr std::uint8_t PE_MODE_POWER_OFF = 0x00;
679inline constexpr std::uint8_t PE_MODE_ENERGY_SAVING_MIN = 0x01;
681inline constexpr std::uint8_t PE_MODE_ENERGY_SAVING_MAX = 0x1F;
683inline constexpr std::uint8_t PE_MODE_OPERATE = 0xF0;
685inline constexpr std::uint8_t PE_MODE_SLEEP_MODE_WOL = 0xFE;
687inline constexpr std::uint8_t PE_MODE_READY_TO_OPERATE = 0xFF;
688// NOLINTEND(readability-identifier-naming)
689
693std::string GetPeModeName(std::uint8_t mode);
694
695// =============================================================================
696// I&M (Identification & Maintenance) Indices - 0xAFFx
697// =============================================================================
698
699// NOLINTBEGIN(readability-identifier-naming)
701inline constexpr std::uint16_t IM0 = 0xAFF0;
703inline constexpr std::uint16_t IM1 = 0xAFF1;
705inline constexpr std::uint16_t IM2 = 0xAFF2;
707inline constexpr std::uint16_t IM3 = 0xAFF3;
709inline constexpr std::uint16_t IM4 = 0xAFF4;
711inline constexpr std::uint16_t IM5 = 0xAFF5;
713inline constexpr std::uint16_t IM6 = 0xAFF6;
715inline constexpr std::uint16_t IM7 = 0xAFF7;
717inline constexpr std::uint16_t IM8 = 0xAFF8;
719inline constexpr std::uint16_t IM9 = 0xAFF9;
721inline constexpr std::uint16_t IM10 = 0xAFFA;
723inline constexpr std::uint16_t IM11 = 0xAFFB;
725inline constexpr std::uint16_t IM12 = 0xAFFC;
727inline constexpr std::uint16_t IM13 = 0xAFFD;
729inline constexpr std::uint16_t IM14 = 0xAFFE;
731inline constexpr std::uint16_t IM15 = 0xAFFF;
733inline constexpr std::uint16_t IM0_FILTER_DATA = 0xF840;
734// NOLINTEND(readability-identifier-naming)
735
736// =============================================================================
737// Diagnosis Indices - Pattern: 0x__0A/B/C
738// =============================================================================
739
740// NOLINTBEGIN(readability-identifier-naming)
742inline constexpr std::uint16_t DIAG_CHANNEL_SUBSLOT = 0x800A;
744inline constexpr std::uint16_t DIAG_ALL_SUBSLOT = 0x800B;
746inline constexpr std::uint16_t DIAG_MAINTENANCE_SUBSLOT = 0x800C;
747
749inline constexpr std::uint16_t DIAG_CHANNEL_SLOT = 0xC00A;
751inline constexpr std::uint16_t DIAG_ALL_SLOT = 0xC00B;
753inline constexpr std::uint16_t DIAG_MAINTENANCE_SLOT = 0xC00C;
754
756inline constexpr std::uint16_t DIAG_CHANNEL_AR = 0xE00A;
758inline constexpr std::uint16_t DIAG_ALL_AR = 0xE00B;
760inline constexpr std::uint16_t DIAG_MAINTENANCE_AR = 0xE00C;
761
763inline constexpr std::uint16_t DIAG_CHANNEL_API = 0xF00A;
765inline constexpr std::uint16_t DIAG_ALL_API = 0xF00B;
767inline constexpr std::uint16_t DIAG_MAINTENANCE_API = 0xF00C;
768
770inline constexpr std::uint16_t DIAG_DEVICE = 0xF80C;
771// NOLINTEND(readability-identifier-naming)
772
773// =============================================================================
774// Maintenance Indices - Pattern: 0x__10-13
775// =============================================================================
776
777// NOLINTBEGIN(readability-identifier-naming)
779inline constexpr std::uint16_t MAINT_REQUIRED_CHANNEL_SUBSLOT = 0x8010;
781inline constexpr std::uint16_t MAINT_DEMANDED_CHANNEL_SUBSLOT = 0x8011;
783inline constexpr std::uint16_t MAINT_REQUIRED_ALL_SUBSLOT = 0x8012;
785inline constexpr std::uint16_t MAINT_DEMANDED_ALL_SUBSLOT = 0x8013;
786// NOLINTEND(readability-identifier-naming)
787
788// =============================================================================
789// Configuration/Identification Indices
790// =============================================================================
791
792// NOLINTBEGIN(readability-identifier-naming)
794inline constexpr std::uint16_t EXPECTED_ID_SUBSLOT = 0x8000;
796inline constexpr std::uint16_t REAL_ID_SUBSLOT = 0x8001;
797
799inline constexpr std::uint16_t EXPECTED_ID_AR = 0xE000;
801inline constexpr std::uint16_t REAL_ID_AR = 0xE001;
803inline constexpr std::uint16_t MODULE_DIFF_BLOCK = 0xE002;
804
806inline constexpr std::uint16_t REAL_ID_API = 0xF000;
807
809inline constexpr std::uint16_t AR_DATA = 0xF820;
811inline constexpr std::uint16_t API_DATA = 0xF821;
813inline constexpr std::uint16_t PDEV_DATA = 0xF831;
815inline constexpr std::uint16_t PD_REAL_DATA = 0xF841;
817inline constexpr std::uint16_t PD_EXPECTED_DATA = 0xF842;
819inline constexpr std::uint16_t AUTO_CONFIG = 0xF850;
821inline constexpr std::uint16_t LOG_DATA = 0xF830;
822// NOLINTEND(readability-identifier-naming)
823
824// =============================================================================
825// PDPort Indices (for port subslots 0x8001, 0x8002, etc.)
826// =============================================================================
827
828// NOLINTBEGIN(readability-identifier-naming)
830inline constexpr std::uint16_t PD_PORT_DATA_REAL = 0x802A;
832inline constexpr std::uint16_t PD_PORT_DATA_CHECK = 0x802B;
834inline constexpr std::uint16_t PD_IR_DATA = 0x802C;
836inline constexpr std::uint16_t PD_SYNC_DATA = 0x802D;
838inline constexpr std::uint16_t PD_PORT_DATA_ADJUST = 0x802F;
840inline constexpr std::uint16_t PD_PORT_STATISTIC = 0x8072;
841// NOLINTEND(readability-identifier-naming)
842
843// =============================================================================
844// PDInterface Indices (for interface subslot 0x8000)
845// =============================================================================
846
847// NOLINTBEGIN(readability-identifier-naming)
849inline constexpr std::uint16_t PD_NC_DATA_CHECK = 0x8070;
851inline constexpr std::uint16_t PD_INTERFACE_ADJUST = 0x8071;
853inline constexpr std::uint16_t PD_INTERFACE_DATA_REAL = 0x8080;
855inline constexpr std::uint16_t PD_INTERFACE_FSU_ADJUST = 0x8090;
856// NOLINTEND(readability-identifier-naming)
857
858// =============================================================================
859// Fiber Optic Indices
860// =============================================================================
861
862// NOLINTBEGIN(readability-identifier-naming)
864inline constexpr std::uint16_t PD_PORT_FO_DATA_REAL = 0x8060;
866inline constexpr std::uint16_t PD_PORT_FO_DATA_CHECK = 0x8061;
868inline constexpr std::uint16_t PD_PORT_FO_DATA_ADJUST = 0x8062;
870inline constexpr std::uint16_t PD_PORT_SFP_DATA_CHECK = 0x8063;
871// NOLINTEND(readability-identifier-naming)
872
873// =============================================================================
874// MRP (Media Redundancy Protocol) Indices
875// =============================================================================
876
877// NOLINTBEGIN(readability-identifier-naming)
879inline constexpr std::uint16_t PD_INTERFACE_MRP_DATA_REAL = 0x8050;
881inline constexpr std::uint16_t PD_INTERFACE_MRP_DATA_CHECK = 0x8051;
883inline constexpr std::uint16_t PD_INTERFACE_MRP_DATA_ADJUST = 0x8052;
884
886inline constexpr std::uint16_t PD_PORT_MRP_DATA_ADJUST = 0x8053;
888inline constexpr std::uint16_t PD_PORT_MRP_DATA_REAL = 0x8054;
890inline constexpr std::uint16_t PD_PORT_MRP_IC_DATA_ADJUST = 0x8055;
892inline constexpr std::uint16_t PD_PORT_MRP_IC_DATA_CHECK = 0x8056;
894inline constexpr std::uint16_t PD_PORT_MRP_IC_DATA_REAL = 0x8057;
895// NOLINTEND(readability-identifier-naming)
896
897// =============================================================================
898// Sync/PTCP Indices
899// =============================================================================
900
901// NOLINTBEGIN(readability-identifier-naming)
903inline constexpr std::uint16_t PD_IR_SUBFRAME_DATA = 0x8020;
905inline constexpr std::uint16_t ISOCHRONOUS_MODE_DATA = 0x8030;
907inline constexpr std::uint16_t PD_TIME_DATA = 0x8031;
908// NOLINTEND(readability-identifier-naming)
909
910// =============================================================================
911// I/O Data Indices
912// =============================================================================
913
914// NOLINTBEGIN(readability-identifier-naming)
916inline constexpr std::uint16_t SUBSTITUTE_VALUES = 0x801E;
918inline constexpr std::uint16_t RECORD_INPUT_DATA = 0x8028;
920inline constexpr std::uint16_t RECORD_OUTPUT_DATA = 0x8029;
921// NOLINTEND(readability-identifier-naming)
922
923// =============================================================================
924// Asset Management Indices
925// =============================================================================
926
927// NOLINTBEGIN(readability-identifier-naming)
929inline constexpr std::uint16_t AM_DEVICE_ID = 0xF8E0;
931inline constexpr std::uint16_t AM_FULL_INFO = 0xF8E1;
933inline constexpr std::uint16_t AM_HW_ONLY = 0xF8E2;
935inline constexpr std::uint16_t AM_FW_ONLY = 0xF8E3;
937inline constexpr std::uint16_t AM_LOCATION_SLOT = 0xFBE0;
939inline constexpr std::uint16_t AM_LOCATION_TREE = 0xFBE1;
941inline constexpr std::uint16_t AM_DATA = 0xFBF0;
942// NOLINTEND(readability-identifier-naming)
943
944// =============================================================================
945// PROFIsafe Indices
946// =============================================================================
947
948// NOLINTBEGIN(readability-identifier-naming)
950inline constexpr std::uint16_t F_PARAMETER_BLOCK = 0x0100;
952inline constexpr std::uint16_t F_PRM_FLAG1 = 0x0101;
954inline constexpr std::uint16_t F_PRM_FLAG2 = 0x0102;
956inline constexpr std::uint16_t F_PARAMETER_WRITE = 0xE000;
958inline constexpr std::uint16_t F_PARAMETER_READ = 0xE001;
959// NOLINTEND(readability-identifier-naming)
960
961// =============================================================================
962// PROFIenergy Index
963// =============================================================================
964
965// NOLINTBEGIN(readability-identifier-naming)
967inline constexpr std::uint16_t PROFIENERGY = 0x80A0;
968// NOLINTEND(readability-identifier-naming)
969
970// =============================================================================
971// AR-specific Indices
972// =============================================================================
973
974// NOLINTBEGIN(readability-identifier-naming)
976inline constexpr std::uint16_t WRITE_MULTIPLE = 0xE040;
978inline constexpr std::uint16_t AR_FSU_DATA_ADJUST = 0xE050;
979// NOLINTEND(readability-identifier-naming)
980
981// =============================================================================
982// Standard DAP Subslots
983// =============================================================================
984
985// NOLINTBEGIN(readability-identifier-naming)
987inline constexpr std::uint16_t SUBSLOT_DAP = 0x0001;
989inline constexpr std::uint16_t SUBSLOT_INTERFACE = 0x8000;
991inline constexpr std::uint16_t SUBSLOT_PORT1 = 0x8001;
993inline constexpr std::uint16_t SUBSLOT_PORT2 = 0x8002;
994// NOLINTEND(readability-identifier-naming)
995
996// =============================================================================
997// Index Categories for Enumeration
998// =============================================================================
999
1001using IndexNamePairs = std::vector<std::pair<std::uint16_t, std::string>>;
1002
1008const IndexNamePairs& ImIndices();
1012const IndexNamePairs& DiagnosisIndices(const std::string& scope);
1031
1036std::string GetIndexName(std::uint16_t index);
1037
1041std::string GetScope(std::uint16_t index);
1042
1043} // namespace profinet
constexpr std::uint16_t PD_PORT_DATA_REAL
PD Port Data Real.
Definition indices.h:830
constexpr std::uint16_t MAINT_DEMANDED_CHANNEL_SUBSLOT
MAINT Demanded Channel Subslot.
Definition indices.h:781
@ AlarmCrResponse
AlarmCRBlock response.
constexpr std::uint16_t PD_PORT_MRP_DATA_ADJUST
PD Port MRP Data Adjust.
Definition indices.h:886
constexpr std::uint16_t AR_DATA
AR Data.
Definition indices.h:809
constexpr std::uint16_t DIAG_DEVICE
DIAG Device.
Definition indices.h:770
BlockType
PROFINET block types.
Definition indices.h:89
@ PortDataRealExtended
PD Port Data Real Extended block.
@ MrpRingStateData
MRP Ring State Data block.
@ IoCrRequest
IOCR block request.
@ SubmoduleList
Submodule list block.
@ PortDataCheck
PD Port Data Check block.
@ IdentificationMaintenance2
I&M2 block.
@ ExpectedProcessData
PD Expected Data block.
@ IdentificationMaintenance4
I&M4 block.
@ ControlPrmEndRequest
IOD Control Prm End request.
@ RealIdentificationDataApi
Real Identification Data API block.
@ InterfaceMrpDataAdjust
PD Interface MRP Data Adjust block.
@ AlarmAcknowledgementLow
Alarm acknowledgement low block.
@ IoDataReadResponse
IOD read response block.
@ PortFoDataReal
PD Port FO Data Real block.
@ ApplicationRelationRequest
AR block request.
@ IdentificationMaintenance14
I&M14 block.
@ AlarmAcknowledgementHigh
Alarm acknowledgement high block.
@ IdentificationMaintenance13
I&M13 block.
@ ControlPrmEndResponse
IOD Control Prm End response.
@ IdentificationMaintenance10
I&M10 block.
@ PortMrpDataReal
PD Port MRP Data Real block.
@ PortStatistics
PD Port Statistic block.
@ AlarmNotificationHigh
Alarm notification high block.
@ ModuleDifference
Module difference block.
@ ReleaseResponse
IOD Release response.
@ IdentificationMaintenance11
I&M11 block.
@ ControlRtClass3Request
IOD Control RT Class 3 request.
@ IdentificationMaintenance7
I&M7 block.
@ LogData
LogData block.
@ ExpectedIdentificationData
Expected identification data block.
@ PortFoDataCheck
PD Port FO Data Check block.
@ IdentificationMaintenance6
I&M6 block.
@ PortDataReal
PD Port Data Real block.
@ ExpectedSubmoduleRequest
Expected submodule block request.
@ AlarmCrRequest
AlarmCR block request.
@ ReleaseRequest
IOD Release request.
@ IdentificationMaintenance3
I&M3 block.
@ ContainerContent
CO Container Content block.
@ DiagnosisData
Diagnosis data block.
@ IdentificationMaintenance8
I&M8 block.
@ ControlApplicationReadyRequest
IOD Control Application Ready request.
@ ApplicationRelationServer
AR Server Block.
@ IdentificationMaintenance1
I&M1 block.
@ IdentificationMaintenance12
I&M12 block.
@ ApplicationRelationResponse
AR block response.
@ RealProcessData
PD Real Data block.
@ IoCrResponse
IOCR block response.
@ ParameterizationBeginRequest
Parameterization Begin request.
@ IoDataWriteResponse
IOD write response block.
@ ApiData
API data block.
@ ParameterizationBeginResponse
Parameterization Begin response.
@ ApplicationRelationData
ARData block.
@ InterfaceMrpDataReal
PD Interface MRP Data Real block.
@ IoDataWriteRequest
IOD write request block.
@ ControlApplicationReadyResponse
IOD Control Application Ready response.
@ RealIdentificationData
Real identification data block.
@ IoDataReadRequest
IOD read request block.
@ PortDataAdjust
PD Port Data Adjust block.
@ PortDataInterfaceDataReal
PD Interface Data Real block.
@ IdentificationMaintenance15
I&M15 block.
@ PortFoDataAdjust
PD Port FO Data Adjust block.
@ MultipleHeader
Multiple Header block.
@ SrlData
SRL data block.
@ IdentificationMaintenance0
I&M0 block.
@ ControlRtClass3Response
IOD Control RT Class 3 response.
@ AlarmNotificationLow
Alarm notification low block.
@ IdentificationMaintenance9
I&M9 block.
@ IdentificationMaintenance5
I&M5 block.
constexpr std::uint8_t ALARM_TRANSPORT_RTA_CLASS_UDP
ALARM Cr Type ALARM.
Definition indices.h:508
constexpr std::uint16_t F_PRM_FLAG1
F Prm Flag1.
Definition indices.h:952
constexpr std::uint16_t DIAG_ALL_API
DIAG All API.
Definition indices.h:765
const IndexNamePairs & DiagnosisIndices(const std::string &scope)
Diagnosis indices for a given addressing scope.
Definition indices.cpp:532
constexpr std::uint8_t PE_MODE_ENERGY_SAVING_MAX
PE Mode Energy Saving Max.
Definition indices.h:681
const IndexNamePairs & CriticalIndices()
Critical indices that should always be tested.
Definition indices.cpp:495
constexpr std::uint16_t SUBSTITUTE_VALUES
Substitute Values.
Definition indices.h:916
constexpr std::uint16_t MAINT_DEMANDED_ALL_SUBSLOT
MAINT Demanded All Subslot.
Definition indices.h:785
constexpr std::uint16_t EXPECTED_ID_AR
Expected ID AR.
Definition indices.h:799
constexpr std::uint16_t SUBSLOT_PORT1
Subslot Port1.
Definition indices.h:991
constexpr std::uint16_t PD_TIME_DATA
PD Time Data.
Definition indices.h:907
std::string GetIocrRtClassName(IocrRtClass rtClass)
Get the human-readable name for an IOCR real-time class.
Definition indices.cpp:373
std::string GetScope(std::uint16_t index)
Get the addressing scope for an index.
Definition indices.cpp:683
constexpr std::uint16_t F_PARAMETER_READ
F Parameter Read.
Definition indices.h:958
std::string GetSubmoduleStateName(std::uint16_t state)
Get the human-readable name for a submodule state.
Definition indices.cpp:457
constexpr std::uint16_t PD_PORT_MRP_IC_DATA_REAL
PD Port MRP IC Data Real.
Definition indices.h:894
constexpr std::uint16_t SUBSLOT_PORT2
Subslot Port2.
Definition indices.h:993
constexpr std::uint8_t PE_MODE_POWER_OFF
PE Mode Power Off.
Definition indices.h:677
constexpr std::uint16_t PD_SYNC_DATA
PD Sync Data.
Definition indices.h:836
constexpr std::uint16_t AR_FSU_DATA_ADJUST
AR FSU Data Adjust.
Definition indices.h:978
std::string GetModuleStateName(std::uint16_t state)
Get the human-readable name for a module state.
Definition indices.cpp:445
constexpr std::uint16_t PD_REAL_DATA
PD Real Data.
Definition indices.h:815
constexpr std::uint16_t SUBMODULE_STATE_APPLICATION_READY_PENDING
Submodule State Application Ready Pending.
Definition indices.h:656
@ ChannelDiagnosis
Bit 15: Indicates channel diagnosis details are present.
constexpr std::uint16_t IM8
I&M8.
Definition indices.h:717
constexpr std::uint16_t DIAG_ALL_AR
DIAG All AR.
Definition indices.h:758
constexpr std::uint16_t MODULE_DIFF_BLOCK
Module Diff Block.
Definition indices.h:803
std::string GetBlockTypeName(BlockType blockType)
Get the human-readable name for a block type.
Definition indices.cpp:38
constexpr std::uint16_t PD_INTERFACE_ADJUST
PD Interface Adjust.
Definition indices.h:851
AlarmType
PROFINET Alarm Types used in AlarmNotification blocks.
Definition indices.h:382
@ Update
Update alarm.
@ IsochronousModeProblem
Isochronous mode problem alarm.
@ MulticastMismatch
Multicast mismatch alarm.
@ PlugWrongSubmodule
Plug wrong submodule alarm.
@ DfpProblem
DFP problem alarm.
@ Plug
Plug alarm.
@ ReturnOfSubmodule
Return of submodule alarm.
@ Diagnosis
Diagnosis alarm.
@ PortDataChange
Port data change alarm.
@ SyncDataChanged
Sync data changed alarm.
@ Pull
Pull alarm.
@ ControlledBySupervisor
Controlled by supervisor alarm.
@ NetworkComponentProblem
Network component problem alarm.
@ Process
Process alarm.
@ Released
Released alarm.
@ TimeDataChanged
Time data changed alarm.
@ Status
Status alarm.
@ Redundancy
Redundancy alarm.
@ PullModule
Pull module alarm.
@ UploadRetrieval
Upload retrieval alarm.
@ DiagnosisDisappears
Diagnosis disappears alarm.
constexpr std::uint16_t DIAG_MAINTENANCE_SUBSLOT
DIAG Maintenance Subslot.
Definition indices.h:746
constexpr std::uint16_t PD_PORT_MRP_IC_DATA_CHECK
PD Port MRP IC Data Check.
Definition indices.h:892
constexpr std::uint16_t SUBMODULE_STATE_NO_SUBMODULE
Submodule State No Submodule.
Definition indices.h:650
constexpr std::uint16_t F_PARAMETER_BLOCK
F Parameter Block.
Definition indices.h:950
std::ostream & operator<<(std::ostream &os, BlockType type)
Enables clean printing of BlockType.
Definition indices.h:359
constexpr std::uint16_t AM_FULL_INFO
AM Full Info.
Definition indices.h:931
const IndexNamePairs & AllStandardIndices()
Union of every standard index category.
Definition indices.cpp:618
std::string GetUsiName(Usi usi)
Get the human-readable name for a User Structure Identifier.
Definition indices.cpp:386
constexpr std::uint16_t MAINT_REQUIRED_ALL_SUBSLOT
MAINT Required All Subslot.
Definition indices.h:783
constexpr std::uint16_t AR_TYPE_IOCARSR
AR Type Iocarsr.
Definition indices.h:515
constexpr std::uint16_t IM6
I&M6.
Definition indices.h:713
IocrType
PROFINET IOCR types.
Definition indices.h:463
@ MulticastConsumer
Multicast consumer IOCR.
@ Output
Output IOCR.
@ Input
Input IOCR.
@ MulticastProvider
Multicast provider IOCR.
constexpr std::uint16_t IM2
I&M2.
Definition indices.h:705
constexpr std::uint16_t IM10
I&M10.
Definition indices.h:721
std::string GetPeModeName(std::uint8_t mode)
Get the human-readable name for a PROFIenergy operational mode.
Definition indices.cpp:470
constexpr std::uint16_t IM0
I&M0.
Definition indices.h:701
constexpr std::uint16_t AM_LOCATION_SLOT
AM Location Slot.
Definition indices.h:937
constexpr std::uint16_t PD_PORT_MRP_DATA_REAL
PD Port MRP Data Real.
Definition indices.h:888
ControlCommand
PROFINET IOD control command values.
Definition indices.h:61
@ ApplicationReady
Application Ready command.
@ ReadyForCompanion
Ready for Companion command.
@ PrmEnd
Prm End command.
@ Release
Release command.
@ ReadyForRtClass3
Ready for RT Class 3 command.
@ PrmBegin
Prm Begin command.
std::vector< std::pair< std::uint16_t, std::string > > IndexNamePairs
(index, name) pairs, e.g. for building a "try each of these" scan.
Definition indices.h:1001
constexpr std::uint16_t SUBMODULE_STATE_WRONG_SUBMODULE
Submodule State Wrong Submodule.
Definition indices.h:652
constexpr std::uint16_t DIAG_CHANNEL_API
DIAG Channel API.
Definition indices.h:763
constexpr std::uint16_t EXPECTED_ID_SUBSLOT
Expected ID Subslot.
Definition indices.h:794
constexpr std::uint16_t DIAG_CHANNEL_SLOT
DIAG Channel Slot.
Definition indices.h:749
constexpr std::uint16_t DIAG_ALL_SLOT
DIAG All Slot.
Definition indices.h:751
constexpr std::uint8_t PE_MODE_SLEEP_MODE_WOL
PE Mode Sleep Mode WOL.
Definition indices.h:685
constexpr std::uint16_t IM15
I&M15.
Definition indices.h:731
std::string GetIocrTypeName(IocrType iocrType)
Get the human-readable name for an IOCR type.
Definition indices.cpp:350
constexpr std::uint16_t DIAG_MAINTENANCE_AR
DIAG Maintenance AR.
Definition indices.h:760
constexpr std::uint16_t IM1
I&M1.
Definition indices.h:703
constexpr std::uint16_t PD_INTERFACE_FSU_ADJUST
PD Interface FSU Adjust.
Definition indices.h:855
constexpr std::uint16_t MODULE_STATE_SUBSTITUTE_MODULE
Module State Substitute Module.
Definition indices.h:647
constexpr std::uint16_t MODULE_STATE_PROPER_MODULE
Module State Proper Module.
Definition indices.h:645
constexpr std::uint16_t REAL_ID_API
Real ID API.
Definition indices.h:806
constexpr std::uint16_t DIAG_CHANNEL_AR
DIAG Channel AR.
Definition indices.h:756
const IndexNamePairs & DeviceIndices()
Device-level indices.
Definition indices.cpp:604
constexpr std::uint16_t RECORD_INPUT_DATA
Record Input Data.
Definition indices.h:918
constexpr std::uint16_t LOG_DATA
Log Data.
Definition indices.h:821
constexpr std::uint16_t PD_PORT_FO_DATA_REAL
PD Port FO Data Real.
Definition indices.h:864
constexpr std::uint16_t IM4
I&M4.
Definition indices.h:709
constexpr std::uint16_t PD_IR_DATA
PD IR Data.
Definition indices.h:834
const IndexNamePairs & ImIndices()
I&M0-I&M15 indices.
Definition indices.cpp:509
constexpr std::uint16_t PD_IR_SUBFRAME_DATA
PD IR Subframe Data.
Definition indices.h:903
constexpr std::uint16_t PD_PORT_SFP_DATA_CHECK
PD Port SFP Data Check.
Definition indices.h:870
constexpr std::uint16_t AUTO_CONFIG
Auto Config.
Definition indices.h:819
constexpr std::uint16_t DIAG_MAINTENANCE_API
DIAG Maintenance API.
Definition indices.h:767
constexpr std::uint16_t WRITE_MULTIPLE
Write Multiple.
Definition indices.h:976
constexpr std::uint16_t SUBMODULE_STATE_OK
Submodule State Ok.
Definition indices.h:658
constexpr std::uint16_t IM0_FILTER_DATA
I&M0 Filter Data.
Definition indices.h:733
Usi
PROFINET User Structure Identifiers (USI).
Definition indices.h:526
@ Maintenance
Maintenance item.
@ MultipleDiagnosis
Multiple diagnosis.
@ Bit0till14OfChannelNumber
The channel number (bits 0-14).
@ Bit15AndExternalChannelDiagnosisOfChannelNumber
Check diagnosis is in external channel diagnosis (bit 15 of ChannelNumber + 0x02).
@ IParameter
iParameter item.
@ Bit15OfChannelNumber
Check diagnosis is accumulative (bit 15 of ChannelNumber).
@ PralAlarm
PRAL alarm item.
@ Upload
Upload record.
@ NoIdentifier
No identifier.
@ ExtendedChannelDiagnosis
Extended channel diagnosis.
@ PeAlarm
PE alarm item.
@ RsAlarmHigh
RS alarm item for high alarm.
@ Bit15AndQualifiedChannelDiagnosisOfChannelNumber
Check diagnosis is in qualified channel diagnosis (bit 15 of ChannelNumber + 0x03).
@ Low11BitsOfRsAlarmInfo
The low 11 bits of RsAlarmInfo, so the RS specifier can be extracted from RsAlarmInfo.
@ RsAlarmSubmodule
RS alarm item for submodule.
@ RsAlarmLow
RS alarm item for low alarm.
@ QualifiedChannelDiagnosis
Qualified channel diagnosis.
constexpr std::uint16_t DIAG_MAINTENANCE_SLOT
DIAG Maintenance Slot.
Definition indices.h:753
constexpr std::uint16_t IM7
I&M7.
Definition indices.h:715
constexpr std::uint16_t PDEV_DATA
Pdev Data.
Definition indices.h:813
constexpr std::uint16_t PD_INTERFACE_DATA_REAL
PD Interface Data Real.
Definition indices.h:853
constexpr std::uint16_t PD_EXPECTED_DATA
PD Expected Data.
Definition indices.h:817
constexpr std::uint16_t DIAG_ALL_SUBSLOT
DIAG All Subslot.
Definition indices.h:744
constexpr std::uint16_t PD_PORT_DATA_CHECK
PD Port Data Check.
Definition indices.h:832
constexpr std::uint16_t F_PRM_FLAG2
F Prm Flag2.
Definition indices.h:954
constexpr std::uint16_t ISOCHRONOUS_MODE_DATA
Isochronous Mode Data.
Definition indices.h:905
constexpr std::uint16_t MODULE_STATE_NO_MODULE
Module State No Module.
Definition indices.h:641
constexpr std::uint16_t PD_NC_DATA_CHECK
PD NC Data Check.
Definition indices.h:849
constexpr std::uint16_t MAINT_REQUIRED_CHANNEL_SUBSLOT
MAINT Required Channel Subslot.
Definition indices.h:779
constexpr std::uint16_t PD_PORT_FO_DATA_ADJUST
PD Port FO Data Adjust.
Definition indices.h:868
constexpr std::uint16_t AM_LOCATION_TREE
AM Location Tree.
Definition indices.h:939
constexpr std::uint16_t REAL_ID_AR
Real ID AR.
Definition indices.h:801
constexpr std::uint16_t AM_FW_ONLY
AM FW Only.
Definition indices.h:935
constexpr std::uint16_t IM5
I&M5.
Definition indices.h:711
constexpr std::uint16_t IM13
I&M13.
Definition indices.h:727
constexpr std::uint16_t AM_DATA
AM Data.
Definition indices.h:941
constexpr std::uint16_t AM_DEVICE_ID
AM Device ID.
Definition indices.h:929
constexpr std::uint16_t PD_PORT_MRP_IC_DATA_ADJUST
PD Port MRP IC Data Adjust.
Definition indices.h:890
constexpr std::uint16_t AM_HW_ONLY
AM HW Only.
Definition indices.h:933
constexpr std::uint8_t PE_MODE_ENERGY_SAVING_MIN
PE Mode Energy Saving Min.
Definition indices.h:679
constexpr std::uint16_t PD_INTERFACE_MRP_DATA_CHECK
PD Interface MRP Data Check.
Definition indices.h:881
constexpr std::uint16_t PD_PORT_FO_DATA_CHECK
PD Port FO Data Check.
Definition indices.h:866
constexpr std::uint16_t REAL_ID_SUBSLOT
Real ID Subslot.
Definition indices.h:796
constexpr std::uint16_t API_DATA
API Data.
Definition indices.h:811
constexpr bool operator==(BlockType lhs, std::uint16_t rhs) noexcept
Checks equality between a BlockType enum and a raw uint16_t value.
Definition indices.h:326
constexpr std::uint16_t AR_TYPE_IOSAR
AR Type Iosar.
Definition indices.h:513
constexpr std::uint8_t PE_MODE_READY_TO_OPERATE
PE Mode Ready To Operate.
Definition indices.h:687
constexpr std::uint16_t PD_INTERFACE_MRP_DATA_ADJUST
PD Interface MRP Data Adjust.
Definition indices.h:883
const IndexNamePairs & InterfaceIndices()
Interface-level indices.
Definition indices.cpp:594
constexpr std::uint16_t AR_TYPE_IOCAR_SINGLE
AR Type Iocar Single.
Definition indices.h:511
constexpr bool operator!=(BlockType lhs, std::uint16_t rhs) noexcept
Checks inequality between a BlockType enum and a raw uint16_t value.
Definition indices.h:344
std::string GetIndexName(std::uint16_t index)
Get the human-readable name for a record data index.
Definition indices.cpp:642
std::string GetAlarmTypeName(AlarmType alarmType)
Get the human-readable name for an alarm type.
Definition indices.cpp:278
constexpr std::uint16_t PROFIENERGY
Profienergy.
Definition indices.h:967
const IndexNamePairs & PortIndices()
Port-level indices.
Definition indices.cpp:582
constexpr std::uint8_t PE_MODE_OPERATE
PE Mode Operate.
Definition indices.h:683
constexpr std::uint16_t RECORD_OUTPUT_DATA
Record Output Data.
Definition indices.h:920
constexpr std::uint16_t IM12
I&M12.
Definition indices.h:725
constexpr std::uint16_t MODULE_STATE_WRONG_MODULE
Module State Wrong Module.
Definition indices.h:643
constexpr std::uint16_t PD_PORT_DATA_ADJUST
PD Port Data Adjust.
Definition indices.h:838
constexpr std::uint16_t IM3
I&M3.
Definition indices.h:707
constexpr std::uint16_t DIAG_CHANNEL_SUBSLOT
DIAG Channel Subslot.
Definition indices.h:742
constexpr std::uint16_t F_PARAMETER_WRITE
F Parameter Write.
Definition indices.h:956
constexpr std::uint16_t SUBSLOT_INTERFACE
Subslot Interface.
Definition indices.h:989
constexpr std::uint16_t PD_PORT_STATISTIC
PD Port Statistic.
Definition indices.h:840
IocrRtClass
PROFINET IOCR real-time classes.
Definition indices.h:490
@ Udp
UDP real-time class.
constexpr std::uint16_t PD_INTERFACE_MRP_DATA_REAL
PD Interface MRP Data Real.
Definition indices.h:879
constexpr std::uint16_t IM14
I&M14.
Definition indices.h:729
constexpr std::uint16_t IM9
I&M9.
Definition indices.h:719
constexpr std::uint16_t SUBSLOT_DAP
Subslot DAP.
Definition indices.h:987
constexpr std::uint16_t IM11
I&M11.
Definition indices.h:723
constexpr std::uint16_t SUBMODULE_STATE_LOCKED_BY_SUPERVISOR
Submodule State Locked By Supervisor.
Definition indices.h:654