PROFINET IO Controller Stack 1.0.0
Modern C++ implementation of a PROFINET IO Controller stack
Loading...
Searching...
No Matches
indices.cpp
Go to the documentation of this file.
1
28
29#include "profinet/indices.h"
30
31#include <cstdio>
32#include <map>
33
34#include "profinet/util.h"
35
36namespace profinet
37{
38std::string GetBlockTypeName(const BlockType blockType)
39{
40 switch (blockType)
41 {
42 // Diagnosis blocks
43
45 return "Diagnosis Data";
46
48 return "Expected Identification Data";
49
51 return "Real Identification Data";
52
53 // I&M blocks
54
56 return "I&M 0";
57
59 return "I&M 1";
60
62 return "I&M 2";
63
65 return "I&M 3";
66
68 return "I&M 4";
69
71 return "I&M 5";
72
74 return "I&M 6";
75
77 return "I&M 7";
78
80 return "I&M 8";
81
83 return "I&M 9";
84
86 return "I&M 10";
87
89 return "I&M 11";
90
92 return "I&M 12";
93
95 return "I&M 13";
96
98 return "I&M 14";
99
101 return "I&M 15";
102
103 // Alarm blocks
104
106 return "Alarm Notification High";
107
109 return "Alarm Acknowledgement High";
110
112 return "Alarm Notification Low";
113
115 return "Alarm Acknowledgement Low";
116
117 // IOD Read/Write blocks
118
120 return "IO Data Write Request Header";
121
123 return "IO Data Write Response Header";
124
126 return "IO Data Read Request Header";
127
129 return "IO Data Read Response Header";
130
131 // AR data blocks
132
134 return "Application Relation Data";
135
137 return "Log Data";
138
140 return "API Data";
141
143 return "SRL Data";
144
145 // AR/IOCR/AlarmCR connection blocks
146
148 return "Application Relation Request";
149
151 return "Application Relation Response";
152
154 return "IOCR Request";
155
157 return "IOCR Response";
158
160 return "Alarm CR Request";
161
163 return "Alarm CR Response";
164
166 return "Expected Submodule Request";
167
169 return "Module Difference";
170
171 // Control operation blocks
172
174 return "Control Parameter End Request";
175
177 return "Control Parameter End Response";
178
180 return "Control Application Ready Request";
181
183 return "Control Application Ready Response";
184
186 return "Release Request";
187
189 return "Release Response";
190
192 return "Control RT Class 3 Request";
193
195 return "Control RT Class 3 Response";
196
198 return "Parameterization Begin Request";
199
201 return "Parameterization Begin Response";
202
204 return "Submodule List";
205
206 // Port and interface data blocks
207
209 return "Port Data Check";
210
212 return "Port Data Adjust";
213
215 return "Port Data Real";
216
218 return "Interface MRP Data Adjust";
219
221 return "Interface MRP Data Real";
222
224 return "Port MRP Data Real";
225
227 return "MRP Ring State Data";
228
230 return "Port FO Data Real";
231
233 return "Port FO Data Check";
234
236 return "Port FO Data Adjust";
237
239 return "Port Data Real Extended";
240
242 return "Interface Data Real";
243
245 return "Port Statistics";
246
247 // Container blocks
248
250 return "Multiple Header";
251
253 return "Container Content";
254
255 // Device-level blocks
256
258 return "Application Relation Server";
259
261 return "Real Process Data";
262
264 return "Expected Process Data";
265
266 // API-level blocks
267
269 return "Real Identification Data API";
270
271 default:
272 return "Unknown (" +
273 Hex4(static_cast<std::uint16_t>(blockType)) +
274 ")";
275 }
276}
277
278std::string GetAlarmTypeName(const AlarmType alarmType)
279{
280 switch (alarmType)
281 {
283 return "Diagnosis";
284
286 return "Process";
287
288 case AlarmType::Pull:
289 return "Pull";
290
291 case AlarmType::Plug:
292 return "Plug";
293
295 return "Status";
296
298 return "Update";
299
301 return "Redundancy";
302
304 return "Controlled By Supervisor";
305
307 return "Released";
308
310 return "Plug Wrong Submodule";
311
313 return "Return Of Submodule";
314
316 return "Diagnosis Disappears";
317
319 return "Multicast Mismatch";
320
322 return "Port Data Change";
323
325 return "Sync Data Changed";
326
328 return "Isochronous Mode Problem";
329
331 return "Network Component Problem";
332
334 return "Time Data Changed";
335
337 return "DFP Problem";
338
340 return "Upload Retrieval";
341
343 return "Pull Module";
344
345 default:
346 return "Unknown";
347 }
348}
349
350std::string GetIocrTypeName(const IocrType iocrType)
351{
352 switch (iocrType)
353 {
354 case IocrType::Input:
355 return "Input";
356
357 case IocrType::Output:
358 return "Output";
359
361 return "Multicast Provider";
362
364 return "Multicast Consumer";
365
366 default:
367 return "Unknown (" +
368 Hex4(static_cast<std::uint16_t>(iocrType)) +
369 ")";
370 }
371}
372
373std::string GetIocrRtClassName(const IocrRtClass rtClass)
374{
375 switch (rtClass)
376 {
377 case IocrRtClass::Udp:
378 return "RT_CLASS_UDP";
379
380 default:
381 return "Unknown (" +
382 Hex2(static_cast<std::uint8_t>(rtClass)) +
383 ")";
384 }
385}
386std::string GetUsiName(const Usi usi)
387{
388 switch (usi)
389 {
391 return "Channel Diagnosis";
392
394 return "Multiple Diagnosis";
395
397 return "Extended Channel Diagnosis";
398
400 return "Qualified Channel Diagnosis";
401
402 case Usi::Maintenance:
403 return "Maintenance Item";
404
405 case Usi::Upload:
406 return "Upload Record";
407
408 case Usi::IParameter:
409 return "iParameter Item";
410
411 case Usi::RsAlarmLow:
412 return "RS Alarm Item (Low)";
413
414 case Usi::RsAlarmHigh:
415 return "RS Alarm Item (High)";
416
418 return "RS Alarm Item (Submodule)";
419
420 case Usi::PeAlarm:
421 return "PE Alarm Item";
422
423 case Usi::PralAlarm:
424 return "PRAL Alarm Item";
425
426 default:
427 {
428 const auto value = static_cast<std::uint16_t>(usi);
429
430 if (value <= 0x7FFF)
431 {
432 return "Manufacturer Specific (" + Hex4(value) + ")";
433 }
434
435 if (value >= 0x8400 && value <= 0x8FFF)
436 {
437 return "Profile Specific (" + Hex4(value) + ")";
438 }
439
440 return "Reserved (" + Hex4(value) + ")";
441 }
442 }
443}
444
445std::string GetModuleStateName(std::uint16_t state)
446{
447 static const std::map<std::uint16_t, std::string> table = {
448 {MODULE_STATE_NO_MODULE, "NoModule"},
449 {MODULE_STATE_WRONG_MODULE, "WrongModule"},
450 {MODULE_STATE_PROPER_MODULE, "ProperModule"},
451 {MODULE_STATE_SUBSTITUTE_MODULE, "SubstituteModule"},
452 };
453 auto it = table.find(state);
454 return it != table.end() ? it->second : "Unknown(" + Hex4(state) + ")";
455}
456
457std::string GetSubmoduleStateName(std::uint16_t state)
458{
459 static const std::map<std::uint16_t, std::string> table = {
460 {SUBMODULE_STATE_NO_SUBMODULE, "NoSubmodule"},
461 {SUBMODULE_STATE_WRONG_SUBMODULE, "WrongSubmodule"},
462 {SUBMODULE_STATE_LOCKED_BY_SUPERVISOR, "LockedBySupervisor"},
463 {SUBMODULE_STATE_APPLICATION_READY_PENDING, "ApplicationReadyPending"},
464 {SUBMODULE_STATE_OK, "OK"},
465 };
466 auto it = table.find(state);
467 return it != table.end() ? it->second : "Unknown(" + Hex4(state) + ")";
468}
469
470std::string GetPeModeName(std::uint8_t mode)
471{
472 if (mode == PE_MODE_POWER_OFF)
473 {
474 return "PE_PowerOff";
475 }
477 {
478 return "PE_EnergySavingMode_" + std::to_string(mode);
479 }
480 if (mode == PE_MODE_OPERATE)
481 {
482 return "PE_Operate";
483 }
484 if (mode == PE_MODE_SLEEP_MODE_WOL)
485 {
486 return "PE_SleepModeWOL";
487 }
488 if (mode == PE_MODE_READY_TO_OPERATE)
489 {
490 return "PE_ReadyToOperate";
491 }
492 return "PE_Reserved(" + Hex2(mode) + ")";
493}
494
496{
497 static const IndexNamePairs table = {
498 {IM0, "I&M0 (mandatory)"},
499 {IM0_FILTER_DATA, "I&M0FilterData"},
500 {DIAG_DEVICE, "Device Diagnosis"},
501 {MODULE_DIFF_BLOCK, "ModuleDiffBlock"},
502 {PD_REAL_DATA, "PDRealData"},
503 {AR_DATA, "ARData"},
504 {LOG_DATA, "LogData"},
505 };
506 return table;
507}
508
510{
511 static const IndexNamePairs table = {
512 {IM0, "I&M0"},
513 {IM1, "I&M1"},
514 {IM2, "I&M2"},
515 {IM3, "I&M3"},
516 {IM4, "I&M4"},
517 {IM5, "I&M5"},
518 {IM6, "I&M6"},
519 {IM7, "I&M7"},
520 {IM8, "I&M8"},
521 {IM9, "I&M9"},
522 {IM10, "I&M10"},
523 {IM11, "I&M11"},
524 {IM12, "I&M12"},
525 {IM13, "I&M13"},
526 {IM14, "I&M14"},
527 {IM15, "I&M15"},
528 };
529 return table;
530}
531
532const IndexNamePairs& DiagnosisIndices(const std::string& scope)
533{
534 static const IndexNamePairs subslot = {
535 {DIAG_CHANNEL_SUBSLOT, "DiagnosisChannel"},
536 {DIAG_ALL_SUBSLOT, "DiagnosisAll"},
537 {DIAG_MAINTENANCE_SUBSLOT, "DiagnosisMaintenance"},
538 };
539 static const IndexNamePairs slot = {
540 {DIAG_CHANNEL_SLOT, "DiagnosisChannel"},
541 {DIAG_ALL_SLOT, "DiagnosisAll"},
542 {DIAG_MAINTENANCE_SLOT, "DiagnosisMaintenance"},
543 };
544 static const IndexNamePairs ar = {
545 {DIAG_CHANNEL_AR, "DiagnosisChannel"},
546 {DIAG_ALL_AR, "DiagnosisAll"},
547 {DIAG_MAINTENANCE_AR, "DiagnosisMaintenance"},
548 };
549 static const IndexNamePairs api = {
550 {DIAG_CHANNEL_API, "DiagnosisChannel"},
551 {DIAG_ALL_API, "DiagnosisAll"},
552 {DIAG_MAINTENANCE_API, "DiagnosisMaintenance"},
553 };
554 static const IndexNamePairs device = {
555 {DIAG_DEVICE, "DeviceDiagnosis"},
556 };
557 static const IndexNamePairs empty;
558
559 if (scope == "subslot")
560 {
561 return subslot;
562 }
563 if (scope == "slot")
564 {
565 return slot;
566 }
567 if (scope == "ar")
568 {
569 return ar;
570 }
571 if (scope == "api")
572 {
573 return api;
574 }
575 if (scope == "device")
576 {
577 return device;
578 }
579 return empty;
580}
581
583{
584 static const IndexNamePairs table = {
585 {PD_PORT_DATA_REAL, "PDPortDataReal"},
586 {PD_PORT_DATA_CHECK, "PDPortDataCheck"},
587 {PD_PORT_DATA_ADJUST, "PDPortDataAdjust"},
588 {PD_PORT_STATISTIC, "PDPortStatistic"},
589 {PD_PORT_MRP_DATA_REAL, "PDPortMrpDataReal"},
590 };
591 return table;
592}
593
595{
596 static const IndexNamePairs table = {
597 {PD_INTERFACE_DATA_REAL, "PDInterfaceDataReal"},
598 {PD_INTERFACE_MRP_DATA_REAL, "PDInterfaceMrpDataReal"},
599 {PD_NC_DATA_CHECK, "PDNCDataCheck"},
600 };
601 return table;
602}
603
605{
606 static const IndexNamePairs table = {
607 {AR_DATA, "ARData"},
608 {API_DATA, "APIData"},
609 {PDEV_DATA, "PDevData"},
610 {PD_REAL_DATA, "PDRealData"},
611 {PD_EXPECTED_DATA, "PDExpectedData"},
612 {LOG_DATA, "LogData"},
613 {AUTO_CONFIG, "AutoConfiguration"},
614 };
615 return table;
616}
617
619{
620 static const IndexNamePairs table = []
621 {
623 auto append = [&](const IndexNamePairs& src)
624 { v.insert(v.end(), src.begin(), src.end()); };
625 append(ImIndices());
626 append(DiagnosisIndices("subslot"));
627 append(DiagnosisIndices("device"));
628 append(PortIndices());
629 append(InterfaceIndices());
630 append(DeviceIndices());
631 v.emplace_back(EXPECTED_ID_SUBSLOT, "ExpectedIdentificationData");
632 v.emplace_back(REAL_ID_SUBSLOT, "RealIdentificationData");
633 v.emplace_back(MODULE_DIFF_BLOCK, "ModuleDiffBlock");
634 v.emplace_back(SUBSTITUTE_VALUES, "SubstituteValues");
635 v.emplace_back(RECORD_INPUT_DATA, "RecordInputData");
636 v.emplace_back(RECORD_OUTPUT_DATA, "RecordOutputData");
637 return v;
638 }();
639 return table;
640}
641
642std::string GetIndexName(std::uint16_t index)
643{
644 for (const auto& [idx, Name] : AllStandardIndices())
645 {
646 if (idx == index)
647 {
648 return Name;
649 }
650 }
651
652 if (index <= 0x7FFF)
653 {
654 return "User-specific (" + Hex4(index) + ")";
655 }
656 if (index >= 0xAFF0 && index <= 0xAFFF)
657 {
658 return "I&M" + std::to_string(index - 0xAFF0);
659 }
660 if (index >= 0x8000 && index <= 0x8FFF)
661 {
662 return "Subslot data (" + Hex4(index) + ")";
663 }
664 if (index >= 0xC000 && index <= 0xCFFF)
665 {
666 return "Slot data (" + Hex4(index) + ")";
667 }
668 if (index >= 0xE000 && index <= 0xEFFF)
669 {
670 return "AR data (" + Hex4(index) + ")";
671 }
672 if (index >= 0xF000 && index <= 0xF7FF)
673 {
674 return "API data (" + Hex4(index) + ")";
675 }
676 if (index >= 0xF800 && index <= 0xFBFF)
677 {
678 return "Device data (" + Hex4(index) + ")";
679 }
680 return "Unknown (" + Hex4(index) + ")";
681}
682
683std::string GetScope(std::uint16_t index)
684{
685 if (index <= 0x7FFF)
686 {
687 return "user";
688 }
689 if (index >= 0x8000 && index <= 0x8FFF)
690 {
691 return "subslot";
692 }
693 if (index >= 0xA000 && index <= 0xAFFF)
694 {
695 return "slot";
696 }
697 if (index >= 0xC000 && index <= 0xCFFF)
698 {
699 return "slot";
700 }
701 if (index >= 0xE000 && index <= 0xEFFF)
702 {
703 return "ar";
704 }
705 if (index >= 0xF000 && index <= 0xF7FF)
706 {
707 return "api";
708 }
709 if (index >= 0xF800 && index <= 0xFBFF)
710 {
711 return "device";
712 }
713 return "unknown";
714}
715
716} // namespace profinet
PROFINET record-data indices, block types, and protocol enumerations.
std::string Hex2(std::uint8_t value)
Format an 8-bit unsigned integer as a 2-digit hexadecimal string.
Definition util.cpp:68
constexpr std::uint16_t PD_PORT_DATA_REAL
PD Port Data Real.
Definition indices.h:753
constexpr std::uint16_t AR_DATA
AR Data.
Definition indices.h:732
constexpr std::uint16_t DIAG_DEVICE
DIAG Device.
Definition indices.h:693
BlockType
PROFINET block types.
Definition indices.h:91
@ 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.
@ AlarmCrResponse
AlarmCR block response.
@ 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::uint16_t DIAG_ALL_API
DIAG All API.
Definition indices.h:688
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:604
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:839
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
std::string GetSubmoduleStateName(std::uint16_t state)
Get the human-readable name for a submodule state.
Definition indices.cpp:457
constexpr std::uint8_t PE_MODE_POWER_OFF
PE Mode Power Off.
Definition indices.h:600
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:738
constexpr std::uint16_t SUBMODULE_STATE_APPLICATION_READY_PENDING
Submodule State Application Ready Pending.
Definition indices.h:579
constexpr std::uint16_t IM8
I&M8.
Definition indices.h:640
constexpr std::uint16_t DIAG_ALL_AR
DIAG All AR.
Definition indices.h:681
constexpr std::uint16_t MODULE_DIFF_BLOCK
Module Diff Block.
Definition indices.h:726
std::string GetBlockTypeName(BlockType blockType)
Get the human-readable name for a block type.
Definition indices.cpp:38
AlarmType
PROFINET Alarm Types used in AlarmNotification blocks.
Definition indices.h:344
@ 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:669
constexpr std::uint16_t SUBMODULE_STATE_NO_SUBMODULE
Submodule State No Submodule.
Definition indices.h:573
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 IM6
I&M6.
Definition indices.h:636
IocrType
PROFINET IOCR types.
Definition indices.h:428
@ MulticastConsumer
Multicast consumer IOCR.
@ Output
Output IOCR.
@ Input
Input IOCR.
@ MulticastProvider
Multicast provider IOCR.
constexpr std::uint16_t IM2
I&M2.
Definition indices.h:628
constexpr std::uint16_t IM10
I&M10.
Definition indices.h:644
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:624
constexpr std::uint16_t PD_PORT_MRP_DATA_REAL
PD Port MRP Data Real.
Definition indices.h:811
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:924
constexpr std::uint16_t SUBMODULE_STATE_WRONG_SUBMODULE
Submodule State Wrong Submodule.
Definition indices.h:575
constexpr std::uint16_t DIAG_CHANNEL_API
DIAG Channel API.
Definition indices.h:686
constexpr std::uint16_t EXPECTED_ID_SUBSLOT
Expected ID Subslot.
Definition indices.h:717
constexpr std::uint16_t DIAG_CHANNEL_SLOT
DIAG Channel Slot.
Definition indices.h:672
constexpr std::uint16_t DIAG_ALL_SLOT
DIAG All Slot.
Definition indices.h:674
constexpr std::uint8_t PE_MODE_SLEEP_MODE_WOL
PE Mode Sleep Mode WOL.
Definition indices.h:608
constexpr std::uint16_t IM15
I&M15.
Definition indices.h:654
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:683
constexpr std::uint16_t IM1
I&M1.
Definition indices.h:626
constexpr std::uint16_t MODULE_STATE_SUBSTITUTE_MODULE
Module State Substitute Module.
Definition indices.h:570
constexpr std::uint16_t MODULE_STATE_PROPER_MODULE
Module State Proper Module.
Definition indices.h:568
constexpr std::uint16_t DIAG_CHANNEL_AR
DIAG Channel AR.
Definition indices.h:679
const IndexNamePairs & DeviceIndices()
Device-level indices.
Definition indices.cpp:604
constexpr std::uint16_t RECORD_INPUT_DATA
Record Input Data.
Definition indices.h:841
constexpr std::uint16_t LOG_DATA
Log Data.
Definition indices.h:744
constexpr std::uint16_t IM4
I&M4.
Definition indices.h:632
const IndexNamePairs & ImIndices()
I&M0-I&M15 indices.
Definition indices.cpp:509
constexpr std::uint16_t AUTO_CONFIG
Auto Config.
Definition indices.h:742
constexpr std::uint16_t DIAG_MAINTENANCE_API
DIAG Maintenance API.
Definition indices.h:690
std::string Hex4(std::uint16_t value)
Format a 16-bit unsigned integer as a 4-digit hexadecimal string.
Definition util.cpp:63
constexpr std::uint16_t SUBMODULE_STATE_OK
Submodule State Ok.
Definition indices.h:581
constexpr std::uint16_t IM0_FILTER_DATA
I&M0 Filter Data.
Definition indices.h:656
Usi
PROFINET User Structure Identifiers (USI).
Definition indices.h:491
@ Maintenance
Maintenance item.
@ MultipleDiagnosis
Multiple diagnosis.
@ IParameter
iParameter item.
@ PralAlarm
PRAL alarm item.
@ Upload
Upload record.
@ ExtendedChannelDiagnosis
Extended channel diagnosis.
@ PeAlarm
PE alarm item.
@ ChannelDiagnosis
Channel diagnosis.
@ RsAlarmHigh
RS alarm item for high alarm.
@ 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:676
constexpr std::uint16_t IM7
I&M7.
Definition indices.h:638
constexpr std::uint16_t PDEV_DATA
Pdev Data.
Definition indices.h:736
constexpr std::uint16_t PD_INTERFACE_DATA_REAL
PD Interface Data Real.
Definition indices.h:776
constexpr std::uint16_t PD_EXPECTED_DATA
PD Expected Data.
Definition indices.h:740
constexpr std::uint16_t DIAG_ALL_SUBSLOT
DIAG All Subslot.
Definition indices.h:667
constexpr std::uint16_t PD_PORT_DATA_CHECK
PD Port Data Check.
Definition indices.h:755
constexpr std::uint16_t MODULE_STATE_NO_MODULE
Module State No Module.
Definition indices.h:564
constexpr std::uint16_t PD_NC_DATA_CHECK
PD NC Data Check.
Definition indices.h:772
constexpr std::uint16_t IM5
I&M5.
Definition indices.h:634
constexpr std::uint16_t IM13
I&M13.
Definition indices.h:650
constexpr std::uint8_t PE_MODE_ENERGY_SAVING_MIN
PE Mode Energy Saving Min.
Definition indices.h:602
constexpr std::uint16_t REAL_ID_SUBSLOT
Real ID Subslot.
Definition indices.h:719
constexpr std::uint16_t API_DATA
API Data.
Definition indices.h:734
constexpr std::uint8_t PE_MODE_READY_TO_OPERATE
PE Mode Ready To Operate.
Definition indices.h:610
const IndexNamePairs & InterfaceIndices()
Interface-level indices.
Definition indices.cpp:594
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
const IndexNamePairs & PortIndices()
Port-level indices.
Definition indices.cpp:582
constexpr std::uint8_t PE_MODE_OPERATE
PE Mode Operate.
Definition indices.h:606
constexpr std::uint16_t RECORD_OUTPUT_DATA
Record Output Data.
Definition indices.h:843
constexpr std::uint16_t IM12
I&M12.
Definition indices.h:648
constexpr std::uint16_t MODULE_STATE_WRONG_MODULE
Module State Wrong Module.
Definition indices.h:566
constexpr std::uint16_t PD_PORT_DATA_ADJUST
PD Port Data Adjust.
Definition indices.h:761
constexpr std::uint16_t IM3
I&M3.
Definition indices.h:630
constexpr std::uint16_t DIAG_CHANNEL_SUBSLOT
DIAG Channel Subslot.
Definition indices.h:665
constexpr std::uint16_t PD_PORT_STATISTIC
PD Port Statistic.
Definition indices.h:763
IocrRtClass
PROFINET IOCR real-time classes.
Definition indices.h:455
@ Udp
UDP real-time class.
constexpr std::uint16_t PD_INTERFACE_MRP_DATA_REAL
PD Interface MRP Data Real.
Definition indices.h:802
constexpr std::uint16_t IM14
I&M14.
Definition indices.h:652
constexpr std::uint16_t IM9
I&M9.
Definition indices.h:642
constexpr std::uint16_t IM11
I&M11.
Definition indices.h:646
constexpr std::uint16_t SUBMODULE_STATE_LOCKED_BY_SUPERVISOR
Submodule State Locked By Supervisor.
Definition indices.h:577
Declares Linux Ethernet, addressing, timing, and utility helpers used by the PROFINET stack.