45 return "Diagnosis Data";
48 return "Expected Identification Data";
51 return "Real Identification Data";
106 return "Alarm Notification High";
109 return "Alarm Acknowledgement High";
112 return "Alarm Notification Low";
115 return "Alarm Acknowledgement Low";
120 return "IO Data Write Request Header";
123 return "IO Data Write Response Header";
126 return "IO Data Read Request Header";
129 return "IO Data Read Response Header";
134 return "Application Relation Data";
148 return "Application Relation Request";
151 return "Application Relation Response";
154 return "IOCR Request";
157 return "IOCR Response";
160 return "Alarm CR Request";
163 return "Alarm CR Response";
166 return "Expected Submodule Request";
169 return "Module Difference";
174 return "Control Parameter End Request";
177 return "Control Parameter End Response";
180 return "Control Application Ready Request";
183 return "Control Application Ready Response";
186 return "Release Request";
189 return "Release Response";
192 return "Control RT Class 3 Request";
195 return "Control RT Class 3 Response";
198 return "Parameterization Begin Request";
201 return "Parameterization Begin Response";
204 return "Submodule List";
209 return "Port Data Check";
212 return "Port Data Adjust";
215 return "Port Data Real";
218 return "Interface MRP Data Adjust";
221 return "Interface MRP Data Real";
224 return "Port MRP Data Real";
227 return "MRP Ring State Data";
230 return "Port FO Data Real";
233 return "Port FO Data Check";
236 return "Port FO Data Adjust";
239 return "Port Data Real Extended";
242 return "Interface Data Real";
245 return "Port Statistics";
250 return "Multiple Header";
253 return "Container Content";
258 return "Application Relation Server";
261 return "Real Process Data";
264 return "Expected Process Data";
269 return "Real Identification Data API";
273 Hex4(
static_cast<std::uint16_t
>(blockType)) +
304 return "Controlled By Supervisor";
310 return "Plug Wrong Submodule";
313 return "Return Of Submodule";
316 return "Diagnosis Disappears";
319 return "Multicast Mismatch";
322 return "Port Data Change";
325 return "Sync Data Changed";
328 return "Isochronous Mode Problem";
331 return "Network Component Problem";
334 return "Time Data Changed";
337 return "DFP Problem";
340 return "Upload Retrieval";
343 return "Pull Module";
361 return "Multicast Provider";
364 return "Multicast Consumer";
368 Hex4(
static_cast<std::uint16_t
>(iocrType)) +
378 return "RT_CLASS_UDP";
382 Hex2(
static_cast<std::uint8_t
>(rtClass)) +
391 return "Channel Diagnosis";
394 return "Multiple Diagnosis";
397 return "Extended Channel Diagnosis";
400 return "Qualified Channel Diagnosis";
403 return "Maintenance Item";
406 return "Upload Record";
409 return "iParameter Item";
412 return "RS Alarm Item (Low)";
415 return "RS Alarm Item (High)";
418 return "RS Alarm Item (Submodule)";
421 return "PE Alarm Item";
424 return "PRAL Alarm Item";
428 const auto value =
static_cast<std::uint16_t
>(usi);
432 return "Manufacturer Specific (" +
Hex4(value) +
")";
435 if (value >= 0x8400 && value <= 0x8FFF)
437 return "Profile Specific (" +
Hex4(value) +
")";
440 return "Reserved (" +
Hex4(value) +
")";
447 static const std::map<std::uint16_t, std::string> table = {
453 auto it = table.find(state);
454 return it != table.end() ? it->second :
"Unknown(" +
Hex4(state) +
")";
459 static const std::map<std::uint16_t, std::string> table = {
466 auto it = table.find(state);
467 return it != table.end() ? it->second :
"Unknown(" +
Hex4(state) +
")";
474 return "PE_PowerOff";
478 return "PE_EnergySavingMode_" + std::to_string(mode);
486 return "PE_SleepModeWOL";
490 return "PE_ReadyToOperate";
492 return "PE_Reserved(" +
Hex2(mode) +
")";
498 {
IM0,
"I&M0 (mandatory)"},
559 if (scope ==
"subslot")
575 if (scope ==
"device")
624 { v.insert(v.end(), src.begin(), src.end()); };
654 return "User-specific (" +
Hex4(index) +
")";
656 if (index >= 0xAFF0 && index <= 0xAFFF)
658 return "I&M" + std::to_string(index - 0xAFF0);
660 if (index >= 0x8000 && index <= 0x8FFF)
662 return "Subslot data (" +
Hex4(index) +
")";
664 if (index >= 0xC000 && index <= 0xCFFF)
666 return "Slot data (" +
Hex4(index) +
")";
668 if (index >= 0xE000 && index <= 0xEFFF)
670 return "AR data (" +
Hex4(index) +
")";
672 if (index >= 0xF000 && index <= 0xF7FF)
674 return "API data (" +
Hex4(index) +
")";
676 if (index >= 0xF800 && index <= 0xFBFF)
678 return "Device data (" +
Hex4(index) +
")";
680 return "Unknown (" +
Hex4(index) +
")";
689 if (index >= 0x8000 && index <= 0x8FFF)
693 if (index >= 0xA000 && index <= 0xAFFF)
697 if (index >= 0xC000 && index <= 0xCFFF)
701 if (index >= 0xE000 && index <= 0xEFFF)
705 if (index >= 0xF000 && index <= 0xF7FF)
709 if (index >= 0xF800 && index <= 0xFBFF)
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.
constexpr std::uint16_t PD_PORT_DATA_REAL
PD Port Data Real.
constexpr std::uint16_t AR_DATA
AR Data.
constexpr std::uint16_t DIAG_DEVICE
DIAG Device.
BlockType
PROFINET block types.
@ 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.
@ 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.
@ 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.
@ 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.
const IndexNamePairs & DiagnosisIndices(const std::string &scope)
Diagnosis indices for a given addressing scope.
constexpr std::uint8_t PE_MODE_ENERGY_SAVING_MAX
PE Mode Energy Saving Max.
const IndexNamePairs & CriticalIndices()
Critical indices that should always be tested.
constexpr std::uint16_t SUBSTITUTE_VALUES
Substitute Values.
std::string GetIocrRtClassName(IocrRtClass rtClass)
Get the human-readable name for an IOCR real-time class.
std::string GetScope(std::uint16_t index)
Get the addressing scope for an index.
std::string GetSubmoduleStateName(std::uint16_t state)
Get the human-readable name for a submodule state.
constexpr std::uint8_t PE_MODE_POWER_OFF
PE Mode Power Off.
std::string GetModuleStateName(std::uint16_t state)
Get the human-readable name for a module state.
constexpr std::uint16_t PD_REAL_DATA
PD Real Data.
constexpr std::uint16_t SUBMODULE_STATE_APPLICATION_READY_PENDING
Submodule State Application Ready Pending.
constexpr std::uint16_t IM8
I&M8.
constexpr std::uint16_t DIAG_ALL_AR
DIAG All AR.
constexpr std::uint16_t MODULE_DIFF_BLOCK
Module Diff Block.
std::string GetBlockTypeName(BlockType blockType)
Get the human-readable name for a block type.
AlarmType
PROFINET Alarm Types used in AlarmNotification blocks.
@ IsochronousModeProblem
Isochronous mode problem alarm.
@ MulticastMismatch
Multicast mismatch alarm.
@ PlugWrongSubmodule
Plug wrong submodule alarm.
@ DfpProblem
DFP problem alarm.
@ ReturnOfSubmodule
Return of submodule alarm.
@ Diagnosis
Diagnosis alarm.
@ PortDataChange
Port data change alarm.
@ SyncDataChanged
Sync data changed alarm.
@ ControlledBySupervisor
Controlled by supervisor alarm.
@ NetworkComponentProblem
Network component problem alarm.
@ Released
Released alarm.
@ TimeDataChanged
Time data changed 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.
constexpr std::uint16_t SUBMODULE_STATE_NO_SUBMODULE
Submodule State No Submodule.
const IndexNamePairs & AllStandardIndices()
Union of every standard index category.
std::string GetUsiName(Usi usi)
Get the human-readable name for a User Structure Identifier.
constexpr std::uint16_t IM6
I&M6.
IocrType
PROFINET IOCR types.
@ MulticastConsumer
Multicast consumer IOCR.
@ MulticastProvider
Multicast provider IOCR.
constexpr std::uint16_t IM2
I&M2.
constexpr std::uint16_t IM10
I&M10.
std::string GetPeModeName(std::uint8_t mode)
Get the human-readable name for a PROFIenergy operational mode.
constexpr std::uint16_t IM0
I&M0.
constexpr std::uint16_t PD_PORT_MRP_DATA_REAL
PD Port MRP Data Real.
std::vector< std::pair< std::uint16_t, std::string > > IndexNamePairs
(index, name) pairs, e.g. for building a "try each of these" scan.
constexpr std::uint16_t SUBMODULE_STATE_WRONG_SUBMODULE
Submodule State Wrong Submodule.
constexpr std::uint16_t DIAG_CHANNEL_API
DIAG Channel API.
constexpr std::uint16_t EXPECTED_ID_SUBSLOT
Expected ID Subslot.
constexpr std::uint16_t DIAG_CHANNEL_SLOT
DIAG Channel Slot.
constexpr std::uint16_t DIAG_ALL_SLOT
DIAG All Slot.
constexpr std::uint8_t PE_MODE_SLEEP_MODE_WOL
PE Mode Sleep Mode WOL.
constexpr std::uint16_t IM15
I&M15.
std::string GetIocrTypeName(IocrType iocrType)
Get the human-readable name for an IOCR type.
constexpr std::uint16_t DIAG_MAINTENANCE_AR
DIAG Maintenance AR.
constexpr std::uint16_t IM1
I&M1.
constexpr std::uint16_t MODULE_STATE_SUBSTITUTE_MODULE
Module State Substitute Module.
constexpr std::uint16_t MODULE_STATE_PROPER_MODULE
Module State Proper Module.
constexpr std::uint16_t DIAG_CHANNEL_AR
DIAG Channel AR.
const IndexNamePairs & DeviceIndices()
Device-level indices.
constexpr std::uint16_t RECORD_INPUT_DATA
Record Input Data.
constexpr std::uint16_t LOG_DATA
Log Data.
constexpr std::uint16_t IM4
I&M4.
const IndexNamePairs & ImIndices()
I&M0-I&M15 indices.
constexpr std::uint16_t AUTO_CONFIG
Auto Config.
constexpr std::uint16_t DIAG_MAINTENANCE_API
DIAG Maintenance API.
std::string Hex4(std::uint16_t value)
Format a 16-bit unsigned integer as a 4-digit hexadecimal string.
constexpr std::uint16_t SUBMODULE_STATE_OK
Submodule State Ok.
constexpr std::uint16_t IM0_FILTER_DATA
I&M0 Filter Data.
Usi
PROFINET User Structure Identifiers (USI).
@ Maintenance
Maintenance item.
@ MultipleDiagnosis
Multiple diagnosis.
@ IParameter
iParameter item.
@ PralAlarm
PRAL alarm item.
@ ExtendedChannelDiagnosis
Extended channel diagnosis.
@ 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.
constexpr std::uint16_t IM7
I&M7.
constexpr std::uint16_t PDEV_DATA
Pdev Data.
constexpr std::uint16_t PD_INTERFACE_DATA_REAL
PD Interface Data Real.
constexpr std::uint16_t PD_EXPECTED_DATA
PD Expected Data.
constexpr std::uint16_t DIAG_ALL_SUBSLOT
DIAG All Subslot.
constexpr std::uint16_t PD_PORT_DATA_CHECK
PD Port Data Check.
constexpr std::uint16_t MODULE_STATE_NO_MODULE
Module State No Module.
constexpr std::uint16_t PD_NC_DATA_CHECK
PD NC Data Check.
constexpr std::uint16_t IM5
I&M5.
constexpr std::uint16_t IM13
I&M13.
constexpr std::uint8_t PE_MODE_ENERGY_SAVING_MIN
PE Mode Energy Saving Min.
constexpr std::uint16_t REAL_ID_SUBSLOT
Real ID Subslot.
constexpr std::uint16_t API_DATA
API Data.
constexpr std::uint8_t PE_MODE_READY_TO_OPERATE
PE Mode Ready To Operate.
const IndexNamePairs & InterfaceIndices()
Interface-level indices.
std::string GetIndexName(std::uint16_t index)
Get the human-readable name for a record data index.
std::string GetAlarmTypeName(AlarmType alarmType)
Get the human-readable name for an alarm type.
const IndexNamePairs & PortIndices()
Port-level indices.
constexpr std::uint8_t PE_MODE_OPERATE
PE Mode Operate.
constexpr std::uint16_t RECORD_OUTPUT_DATA
Record Output Data.
constexpr std::uint16_t IM12
I&M12.
constexpr std::uint16_t MODULE_STATE_WRONG_MODULE
Module State Wrong Module.
constexpr std::uint16_t PD_PORT_DATA_ADJUST
PD Port Data Adjust.
constexpr std::uint16_t IM3
I&M3.
constexpr std::uint16_t DIAG_CHANNEL_SUBSLOT
DIAG Channel Subslot.
constexpr std::uint16_t PD_PORT_STATISTIC
PD Port Statistic.
IocrRtClass
PROFINET IOCR real-time classes.
@ Udp
UDP real-time class.
constexpr std::uint16_t PD_INTERFACE_MRP_DATA_REAL
PD Interface MRP Data Real.
constexpr std::uint16_t IM14
I&M14.
constexpr std::uint16_t IM9
I&M9.
constexpr std::uint16_t IM11
I&M11.
constexpr std::uint16_t SUBMODULE_STATE_LOCKED_BY_SUPERVISOR
Submodule State Locked By Supervisor.
Declares Linux Ethernet, addressing, timing, and utility helpers used by the PROFINET stack.