Motion Master 6.0.0-alpha.50
Next-generation motion control software
Loading...
Searching...
No Matches
sii.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <expected>
5#include <nlohmann/json.hpp>
6#include <optional>
7#include <span>
8#include <string>
9#include <vector>
10
11namespace mm::comm {
12
32
38struct SiiInfo {
39 uint16_t pdiControl = 0;
40 uint16_t pdiConfiguration = 0;
41 uint16_t syncImpulseLen = 0;
42 uint16_t pdiConfiguration2 = 0;
44 uint16_t checksum = 0;
45 uint32_t vendorId = 0;
46 uint32_t productCode = 0;
47 uint32_t revisionNumber = 0;
48 uint32_t serialNumber = 0;
57 uint16_t mailboxProtocol = 0;
58 uint16_t size = 0;
59 uint16_t version = 0;
60};
61
64 uint8_t groupIdx = 0;
65 uint8_t imgIdx = 0;
66 uint8_t orderIdx = 0;
67 uint8_t nameIdx = 0;
68 uint8_t coeDetails = 0;
69 uint8_t foeDetails = 0;
70 uint8_t eoeDetails = 0;
71 uint8_t soeChannels = 0;
72 uint8_t ds402Channels = 0;
73 uint8_t sysmanClass = 0;
74 uint8_t flags = 0;
75 int16_t currentOnEBus = 0;
76 uint16_t physicalPort = 0;
77 uint16_t physicalMemoryAddress = 0;
78};
79
82 uint16_t physicalStartAddress = 0;
83 uint16_t length = 0;
84 uint8_t controlRegister = 0;
85 uint8_t statusRegister = 0;
86 uint8_t enableSyncManager = 0;
87 uint8_t syncManagerType = 0;
88};
89
92 uint16_t entryIndex = 0;
93 uint8_t subindex = 0;
94 uint8_t entryNameIdx = 0;
95 uint8_t dataType = 0;
96 uint8_t bitLen = 0;
97 uint16_t flags = 0;
98};
99
102 uint16_t pdoIndex = 0;
103 uint8_t nEntry = 0;
104 uint8_t syncM = 0;
105 uint8_t synchronization = 0;
106 uint8_t nameIdx = 0;
107 uint16_t flags = 0;
108 std::vector<SiiCategoryPdoEntryElement> entries;
110};
111
114 uint32_t cycleTime0 = 0;
115 uint32_t shiftTime0 = 0;
116 uint32_t shiftTime1 = 0;
117 int16_t sync1CycleFactor = 0;
118 uint16_t assignActivate = 0;
119 int16_t sync0CycleFactor = 0;
120 uint8_t nameIdx = 0;
121 uint8_t descIdx = 0;
122};
123
126 std::vector<std::string> strings;
128 std::vector<uint8_t> fmmus;
129 std::vector<SiiCategorySyncManagerElement> syncManagers;
130 std::vector<SiiCategoryPdoElement> rxPdos;
131 std::vector<SiiCategoryPdoElement> txPdos;
132 std::vector<SiiCategoryDistributedClockElement> distributedClocks;
133};
134
140
149enum class SiiCategoryType : uint16_t {
150 Nop = 0,
151 DeviceSpecific = 1,
152 Strings = 10,
153 DataTypes = 20,
154 General = 30,
155 Fmmu = 40,
156 SyncM = 41,
157 FmmuX = 42,
158 SyncUnit = 43,
159 TxPdo = 50,
160 RxPdo = 51,
161 Dc = 60,
162 Timeouts = 70,
163 Dictionary = 80,
164 Hardware = 90,
165 VendorInformation = 100,
166 Images = 110,
167 VendorSpecific = 0x0800,
168 ApplicationSpecific = 0x2000,
169 End = 0xFFFF,
170};
171
178std::optional<SiiCategoryType> resolveSiiCategoryType(uint16_t value);
179
190std::expected<SlaveInformationInterface, std::string> parseSii(std::span<const uint8_t> buffer);
191
192void to_json(nlohmann::json& j, const SiiInfo& v);
193void to_json(nlohmann::json& j, const SiiCategoryGeneral& v);
194void to_json(nlohmann::json& j, const SiiCategorySyncManagerElement& v);
195void to_json(nlohmann::json& j, const SiiCategoryPdoEntryElement& v);
196void to_json(nlohmann::json& j, const SiiCategoryPdoElement& v);
197void to_json(nlohmann::json& j, const SiiCategoryDistributedClockElement& v);
198void to_json(nlohmann::json& j, const SiiCategorySection& v);
199void to_json(nlohmann::json& j, const SlaveInformationInterface& v);
200
201} // namespace mm::comm
Definition al_status_codes.cc:5
void to_json(nlohmann::json &j, const AlStatusCode &c)
Serialises an AlStatusCode to JSON.
Definition al_status_codes.cc:7
std::optional< SiiCategoryType > resolveSiiCategoryType(uint16_t value)
Normalises a raw 16-bit category-type word into a SiiCategoryType.
Definition sii.cc:194
std::expected< SlaveInformationInterface, std::string > parseSii(std::span< const uint8_t > buffer)
Parses a raw SII EEPROM image into a SlaveInformationInterface.
Definition sii.cc:235
SiiCategoryType
Recognised SII category type identifiers (ETG.2010 Table 5).
Definition sii.h:149
One distributed-clock setting from SII category 60 (0x3C).
Definition sii.h:113
uint32_t shiftTime0
SYNC0 shift time (ns).
Definition sii.h:115
uint32_t cycleTime0
SYNC0 cycle time (ns).
Definition sii.h:114
int16_t sync1CycleFactor
SYNC1 cycle factor.
Definition sii.h:117
uint32_t shiftTime1
SYNC1 shift time (ns).
Definition sii.h:116
uint16_t assignActivate
DC assign/activate register value.
Definition sii.h:118
uint8_t descIdx
STRINGS index of the description.
Definition sii.h:121
int16_t sync0CycleFactor
SYNC0 cycle factor.
Definition sii.h:119
uint8_t nameIdx
STRINGS index of the name.
Definition sii.h:120
General device information (SII category 30 / 0x1E).
Definition sii.h:63
uint8_t nameIdx
STRINGS index of the device name.
Definition sii.h:67
int16_t currentOnEBus
E-Bus current consumption (mA); negative = feed-in.
Definition sii.h:75
uint8_t foeDetails
FoE capability flags.
Definition sii.h:69
uint16_t physicalPort
Physical-port configuration (per-port nibbles).
Definition sii.h:76
uint8_t ds402Channels
DS402 channel count.
Definition sii.h:72
uint16_t physicalMemoryAddress
Physical-memory address (16-bit word, ETG.2010 Table 7).
Definition sii.h:77
uint8_t soeChannels
SoE channel count.
Definition sii.h:71
uint8_t imgIdx
STRINGS index of the image name.
Definition sii.h:65
uint8_t groupIdx
STRINGS index of the group name.
Definition sii.h:64
uint8_t flags
General device flags.
Definition sii.h:74
uint8_t orderIdx
STRINGS index of the order number.
Definition sii.h:66
uint8_t coeDetails
CoE capability flags.
Definition sii.h:68
uint8_t eoeDetails
EoE capability flags.
Definition sii.h:70
uint8_t sysmanClass
Sync-manager class.
Definition sii.h:73
One default PDO (RxPDO category 51 / 0x33, or TxPDO category 50 / 0x32).
Definition sii.h:101
uint8_t nEntry
Declared number of mapped entries.
Definition sii.h:103
uint8_t synchronization
Synchronisation type.
Definition sii.h:105
uint8_t syncM
Assigned Sync Manager.
Definition sii.h:104
std::vector< SiiCategoryPdoEntryElement > entries
Definition sii.h:108
uint16_t pdoIndex
PDO object index (0x16xx / 0x1Axx).
Definition sii.h:102
uint16_t flags
PDO flags.
Definition sii.h:107
uint8_t nameIdx
STRINGS index of the PDO name.
Definition sii.h:106
One mapped object within a default PDO (SII categories 50/51).
Definition sii.h:91
uint8_t dataType
ETG.1020 data-type code.
Definition sii.h:95
uint8_t entryNameIdx
STRINGS index of the entry name.
Definition sii.h:94
uint16_t flags
Entry flags.
Definition sii.h:97
uint8_t bitLen
Entry bit length.
Definition sii.h:96
uint16_t entryIndex
Object dictionary index.
Definition sii.h:92
uint8_t subindex
Object dictionary subindex.
Definition sii.h:93
The decoded category section of an SII image.
Definition sii.h:125
std::vector< SiiCategoryDistributedClockElement > distributedClocks
DC (category 60).
Definition sii.h:132
std::vector< uint8_t > fmmus
FMMU defaults (category 40).
Definition sii.h:128
std::vector< SiiCategoryPdoElement > txPdos
Default TxPDOs (category 50).
Definition sii.h:131
std::vector< SiiCategorySyncManagerElement > syncManagers
SYNC_M defaults (category 41).
Definition sii.h:129
std::vector< SiiCategoryPdoElement > rxPdos
Default RxPDOs (category 51).
Definition sii.h:130
std::vector< std::string > strings
STRINGS table (category 10).
Definition sii.h:126
SiiCategoryGeneral general
GENERAL (category 30).
Definition sii.h:127
One Sync-Manager default from SII category 41 (0x29).
Definition sii.h:81
uint8_t syncManagerType
1=MbxOut, 2=MbxIn, 3=Outputs, 4=Inputs.
Definition sii.h:87
uint8_t enableSyncManager
Non-zero when enabled.
Definition sii.h:86
uint8_t controlRegister
SM control register value.
Definition sii.h:84
uint16_t physicalStartAddress
Start address in ESC DPRAM.
Definition sii.h:82
uint8_t statusRegister
SM status register value.
Definition sii.h:85
uint16_t length
Window length in bytes.
Definition sii.h:83
SII (Slave Information Interface) — the structured EEPROM image of an EtherCAT slave.
Definition sii.h:38
uint16_t standardSendMailboxOffset
Definition sii.h:55
uint16_t standardSendMailboxSize
Definition sii.h:56
uint16_t pdiConfiguration
Definition sii.h:40
uint16_t mailboxProtocol
Definition sii.h:57
uint16_t syncImpulseLen
Definition sii.h:41
uint16_t standardReceiveMailboxOffset
Definition sii.h:53
uint32_t revisionNumber
Definition sii.h:47
uint16_t configuredStationAlias
Definition sii.h:43
uint16_t bootstrapReceiveMailboxSize
Definition sii.h:50
uint32_t serialNumber
Definition sii.h:48
uint16_t pdiConfiguration2
Definition sii.h:42
uint16_t bootstrapSendMailboxSize
Definition sii.h:52
uint16_t size
Definition sii.h:58
uint16_t checksum
Definition sii.h:44
uint16_t pdiControl
Definition sii.h:39
uint16_t bootstrapReceiveMailboxOffset
Definition sii.h:49
uint16_t version
Definition sii.h:59
uint16_t standardReceiveMailboxSize
Definition sii.h:54
uint32_t productCode
Definition sii.h:46
uint16_t bootstrapSendMailboxOffset
Definition sii.h:51
uint32_t vendorId
Definition sii.h:45
A fully parsed SII image: fixed header plus decoded categories.
Definition sii.h:136
SiiCategorySection category
Definition sii.h:138
SiiInfo info
Definition sii.h:137