|
Motion Master 6.0.0-alpha.86
Next-generation motion control software
|
Pure SOMANET (Synapticon manufacturer-specific) vocabulary — object indices, sub-entry numbers and enumerations, with no dependency on Device.
More...
Namespaces | |
| namespace | objects |
Classes | |
| struct | IcHausField |
| One field of a register — a named piece of it, with what the datasheet calls it. More... | |
| struct | IcHausRegister |
| One row of a register map — usually one address, sometimes a printed range. More... | |
| struct | IcHausRegisterSpace |
| One addressable register space of one chip. More... | |
| struct | KueblerRegister |
| One register of the Kübler encoder. More... | |
Enumerations | |
| enum class | IcHausChip : uint8_t { kIcMu , kIcPvl } |
| Which chip a register space belongs to. More... | |
| enum class | KueblerFormat : uint8_t { kUnsigned , kSigned , kBitField , kSignedHalves } |
| How a register's value should be read once assembled. More... | |
| enum class | KueblerAccess : uint8_t { kReadOnly , kWriteOnly , kReadWrite } |
| Whether the encoder allows reading a register, writing it, or both. More... | |
| enum | Object : uint16_t { kCommutationAngleOffset = 0x2001 , kMotorSpecificSettings = 0x2003 , kBrakeOptions = 0x2004 , kCommutationOffsetDetection = 0x2009 , kErrorReport = 0x203F } |
| Manufacturer-specific object indices (the 0x2000-0x5FFF vendor range). More... | |
| enum | ErrorReportEntry : uint8_t { kErrorReportDescription = 1 } |
| Sub-entries of 0x203F (error report). The enum value is the subindex. More... | |
| enum | MotorSetting : uint8_t { kMotorPolePairs = 1 , kMotorTorqueConstant = 2 , kMotorPhaseResistance = 3 , kMotorPhaseInductance = 4 , kMotorPhasesInverted = 5 } |
| Sub-entries of 0x2003 (motor specific settings). The enum value is the subindex. More... | |
| enum | CommutationOffsetSetting : uint8_t { kCommutationOffsetState = 1 , kCommutationOffsetAppliedTorquePercent = 2 , kCommutationOffsetMethod = 3 , kCommutationOffsetKp = 4 , kCommutationOffsetKi = 5 , kCommutationOffsetKd = 6 } |
| Sub-entries of 0x2009 (commutation offset detection). The enum value is the subindex. More... | |
| enum class | CommutationOffsetMethod : uint8_t { kRotating = 0 , kRotatingTuned = 1 , kStationary = 2 } |
| How commutation offset measurement (command 5) is performed (0x2009:03). More... | |
| enum class | EncoderOrdinal : uint8_t { kEncoder1 = 1 , kEncoder2 = 2 } |
| Which of a drive's two encoders a command addresses. The enum value is the ordinal the firmware expects. More... | |
| enum class | IcMuCalibrationMode : uint8_t { kConfiguration = 0 , kRaw = 1 , kStandard = 2 } |
| How the BiSS service clocks and interprets an iC-MU encoder (OS command 1). The enum value is the "mode enable" field the firmware expects. More... | |
| enum class | FirmwareService : uint8_t { kDriveControl = 0 , kMotionControl = 1 } |
One of the drive's two independently-scheduled control loops, as the firmware's FirmwareServiceId names them. The enum value is the byte the command carries. More... | |
| enum class | KueblerRegisterFault : uint8_t { kAsyncInProgress = 0 , kInvalidRegisterLength = 1 , kEncoderTimeout = 2 , kWrongByteCount = 3 , kEncoderBusy = 4 } |
| What the Kübler encoder reported when a register access failed (OS command 19). More... | |
| enum class | VelocitySource : uint8_t { kFirmware = 0 , kEncoder = 1 } |
| Where the velocity control loop takes its feedback from (OS command 18). The enum value is the trigger bit the command carries. More... | |
| enum class | FirmwareLatency : uint8_t { kSetpoint = 0 , kFeedback = 1 } |
| Which internal firmware latency OS command 22 measures. The enum value is the latency index byte the command carries. More... | |
| enum class | FirmwareErrorType : uint8_t { kLinkError = 0 , kIllegalPc = 1 , kIllegalInstruction = 2 , kIllegalResource = 3 , kLoadStore = 4 , kIllegalPs = 5 , kArithmetic = 6 , kEcall = 7 , kResourceDependency = 8 , kKcall = 9 , kEndlessLoop = 10 , kResettableFirmwareError = 11 } |
| The errors OS command 16 can provoke in a firmware service. The enum value is the error-type byte the command carries. More... | |
| enum class | FirmwareErrorEffect : uint8_t { kNotImplemented , kStopsService , kRaisesResettableError } |
| What a firmware error type actually does on this firmware — which is not what every one of them is named after. More... | |
| enum class | SystemIdentificationParameter : uint8_t { kStartFrequency = 0 , kTargetFrequency = 1 , kTargetAmplitude = 2 , kTransitionTime = 3 , kSignalType = 4 , kStartProcedure = 5 } |
| The settings of the system-identification chirp (OS command 15). The enum value is the parameter index the command carries in byte 1. More... | |
| enum class | ChirpSignalType : uint8_t { kLogarithmic = 0 , kLinear = 1 } |
| Which excitation the system-identification run sweeps with (parameter 4). More... | |
| enum class | SystemIdentificationStart : uint8_t { kNone = 0 , kImmediately = 1 , kAfterHrdStreamStart = 2 } |
| What writing parameter 5 does — arm the run, and on what trigger. More... | |
| enum class | EncoderRegisterFault : uint8_t { kInvalidResponse = 0 , kRegisterNotAllowed = 1 } |
| The faults encoder register communication (command 0) reports as its command-specific OS error code. More... | |
| enum class | HrdData : uint8_t { kEncoderRawData = 0 , kSystemIdentificationData = 1 } |
| Which signal a high resolution data (HRD) stream records — OS command 3's data index. The enum value is the index the firmware expects. More... | |
| enum class | HrdStreamFault : uint8_t { kInitialization = 0 , kStreaming = 1 , kDuration = 2 , kDataIndex = 3 , kAction = 4 } |
| The faults HRD streaming (command 3) reports as its command-specific OS error code. More... | |
| enum | BrakeOption : uint8_t { kBrakePullVoltage = 1 , kBrakeHoldVoltage = 2 , kBrakePullTime = 3 , kBrakeReleaseStrategy = 4 , kBrakeControllerDisableDelay = 5 , kBrakeDcBusVoltage = 6 , kBrakeStatus = 7 , kBrakeMinimumDisplacement = 8 , kBrakePinCurrentPercent = 9 , kBrakeOutputVoltage = 10 , kBrakeSwitchingFrequency = 11 , kBrakePinInitialDirection = 12 } |
| Sub-entries of 0x2004 (brake options). The enum value is the subindex. More... | |
| enum class | BrakeReleaseStrategy : uint8_t { kManualOutputVoltage = 0 , kClutch = 1 , kPin = 2 } |
| How the brake is driven (0x2004:04). More... | |
| enum class | BrakeStatus : uint8_t { kNotConfigured = 0 , kEngaged = 1 , kDisengaged = 2 } |
| Brake state (0x2004:07), which both reports the brake and commands it when written. More... | |
| enum class | OsCommandId : uint8_t { kEncoderRegisterCommunication = 0 , kIcMuCalibrationMode = 1 , kHrdStreaming = 3 , kMotorPhaseOrderDetection = 4 , kCommutationOffsetMeasurement = 5 , kOpenPhaseDetection = 6 , kPolePairDetection = 7 , kPhaseResistanceMeasurement = 8 , kPhaseInductanceMeasurement = 9 , kTorqueConstantMeasurement = 10 , kSkippedCyclesCounter = 13 , kIgnoreBissStatusBits = 14 , kSystemIdentification = 15 , kTriggerError = 16 , kVelocitySource = 18 , kKueblerRegisterCommunication = 19 , kReadObjectDictionary = 21 , kMeasureFirmwareLatency = 22 } |
| OS command IDs (byte 0 of 0x1023:01). More... | |
| enum class | OpenPhaseFault : uint8_t { kOpenTerminalA = 0 , kOpenTerminalB = 1 , kOpenTerminalC = 2 , kOpenFetAHigh = 3 , kOpenFetALow = 4 , kOpenFetBHigh = 5 , kOpenFetBLow = 6 , kOpenFetCHigh = 7 , kOpenFetCLow = 8 } |
| The faults open phase detection (command 6) reports, as its command-specific OS error code. More... | |
| enum class | MotorPhaseOrder : uint8_t { kNormal = 0 , kInverted = 1 } |
| Which way round the motor's phases are wired, as motor phase order detection (command 4) reports it and as 0x2003:05 "Motor phases inverted" stores it. More... | |
| enum class | MotorMeasurementFault : uint8_t { kCurrentAmplitudeError = 0 } |
| The faults the current-injecting motor measurements report as their command-specific OS error code — pole pair (7), phase resistance (8) and phase inductance (9), which the firmware specification gives the same single-entry table. More... | |
| enum class | OperationMode : int8_t { kImpedance = -6 , kJointTorque = -5 , kSystemIdentification = -4 , kOpenLoopField = -3 , kDiagnostics = -2 , kCoggingCompensationRecording = -1 } |
| SOMANET's manufacturer-specific operation modes — the negative half of 0x6060, which CiA402 leaves to the vendor. More... | |
Functions | |
| void | to_json (nlohmann::json &j, const IcHausField &field) |
Serialises an IcHausField. Participates in nlohmann ADL. | |
| void | to_json (nlohmann::json &j, const IcHausRegister &r) |
Serialises an IcHausRegister, layout() included. Participates in nlohmann ADL, so a span of them converts on its own. | |
| void | to_json (nlohmann::json &j, const IcHausRegisterSpace &space) |
Serialises an IcHausRegisterSpace, registers included. | |
| std::span< const IcHausRegisterSpace > | icHausRegisterSpaces () |
| Every register space of both chips, in the order a reader should meet them: the iC-MU's two, then the iC-PVL's three. | |
| constexpr std::string_view | toString (IcHausChip chip) |
Name of a chip, as the console and logs should render it. Never returns nullptr. | |
| void | to_json (nlohmann::json &j, const KueblerRegister &r) |
Serialises a KueblerRegister. Participates in nlohmann ADL, so nlohmann::json(kKueblerRegisters) works. | |
| constexpr std::optional< KueblerRegister > | findKueblerRegister (uint8_t address) |
The register at address, or std::nullopt when the table has none. | |
| std::optional< HrdData > | parseHrdData (std::string_view token) |
Parses an HRD data token ("encoder-raw" / "system-identification") — the inverse of toString. Returns std::nullopt for any other token. | |
| std::optional< ChirpSignalType > | parseChirpSignalType (std::string_view token) |
Parses a signal-type token ("logarithmic" / "linear"). std::nullopt for any other. | |
| std::optional< SystemIdentificationStart > | parseSystemIdentificationStart (std::string_view token) |
| Parses a start token ("none" / "immediately" / "after-hrd-stream-start"). | |
| std::optional< VelocitySource > | parseVelocitySource (std::string_view token) |
Parses a velocity source token ("firmware" / "encoder"). std::nullopt otherwise. | |
| std::optional< FirmwareLatency > | parseFirmwareLatency (std::string_view token) |
Parses a firmware latency token ("setpoint" / "feedback"). std::nullopt otherwise. | |
| std::optional< FirmwareErrorType > | parseFirmwareErrorType (std::string_view token) |
Parses a firmware error type token — the inverse of toString. | |
| std::optional< FirmwareService > | parseFirmwareService (std::string_view token) |
Parses a service token ("drive-control" / "motion-control") — the inverse of toString. Returns std::nullopt for any other token. | |
| std::optional< IcMuCalibrationMode > | parseIcMuCalibrationMode (std::string_view token) |
Parses a mode token ("configuration" / "raw" / "standard") — the inverse of toString. Returns std::nullopt for any other token. | |
| constexpr std::string_view | toString (CommutationOffsetMethod method) |
Name of a commutation offset method (for logging / JSON). Never returns nullptr. | |
| constexpr bool | requiresBrakeReleased (CommutationOffsetMethod method) |
| Whether the method needs the brake released, as opposed to engaged. | |
| constexpr std::string_view | toString (EncoderOrdinal encoder) |
Name of an encoder ordinal, as a message should render it. Never returns nullptr. | |
| constexpr std::string_view | toString (IcMuCalibrationMode mode) |
Name of an iC-MU calibration mode (for logging / JSON). Never returns nullptr. | |
| constexpr std::string_view | toString (FirmwareService service) |
Name of a firmware service (for logging / JSON). Never returns nullptr. | |
| constexpr std::string_view | toString (KueblerRegisterFault fault) |
Name of a Kübler register fault, as a message should render it. Never nullptr. | |
| constexpr std::string_view | toString (VelocitySource source) |
Name of a velocity source (for logging / JSON). Never returns nullptr. | |
| constexpr std::string_view | toString (FirmwareLatency latency) |
Name of a firmware latency (for logging / JSON). Never returns nullptr. | |
| constexpr FirmwareErrorEffect | effectOf (FirmwareErrorType type) |
What type does, from the firmware's own case bodies rather than from its name. | |
| constexpr std::string_view | toString (FirmwareErrorType type) |
Name of a firmware error type (for logging / JSON). Never returns nullptr. | |
| constexpr std::string_view | toString (SystemIdentificationParameter parameter) |
Name of a system-identification parameter, as a message should render it. Never nullptr. | |
| constexpr std::string_view | toString (ChirpSignalType type) |
Name of a chirp signal type (for logging / JSON). Never returns nullptr. | |
| constexpr std::string_view | toString (SystemIdentificationStart start) |
Name of a start trigger (for logging / JSON). Never returns nullptr. | |
| constexpr std::string_view | toString (EncoderRegisterFault fault) |
Name of an encoder register fault, as the console and logs should render it. Never nullptr. | |
| constexpr std::string_view | describe (EncoderRegisterFault fault) |
What an encoder register fault means, for a message a user has to act on. Never nullptr. | |
| constexpr std::string_view | toString (HrdData data) |
Name of an HRD data selection, as it appears on the wire. Never returns nullptr. | |
| constexpr size_t | hrdSampleSize (HrdData data) |
How many bytes one recorded sample of data occupies in the drive's files. | |
| constexpr std::chrono::milliseconds | maxHrdStreamDuration (HrdData data) |
The longest stream the drive will record for data. | |
| constexpr std::string_view | toString (HrdStreamFault fault) |
Name of an HRD streaming fault, as the console and logs should render it. Never nullptr. | |
| constexpr std::string_view | describe (HrdStreamFault fault) |
What an HRD streaming fault means, for a message a user has to act on. Never nullptr. | |
| constexpr std::string_view | toString (BrakeStatus status) |
Human-readable name of a brake status (for logging / JSON). Never returns nullptr. | |
| constexpr std::string_view | toString (BrakeReleaseStrategy strategy) |
Human-readable name of a release strategy (for logging / JSON). Never nullptr. | |
| constexpr std::string_view | toString (OpenPhaseFault fault) |
Name of an open-phase fault, as the console and logs should render it. Never nullptr. | |
| constexpr std::string_view | describe (OpenPhaseFault fault) |
What an open-phase fault means, for a message a user has to act on. Never nullptr. | |
| constexpr std::string_view | toString (MotorPhaseOrder order) |
Name of a motor phase order (for logging / JSON). Never returns nullptr. | |
| constexpr std::string_view | toString (MotorMeasurementFault fault) |
Name of a motor-measurement fault, as the console and logs should render it. Never nullptr. | |
| constexpr std::string_view | describe (MotorMeasurementFault fault) |
What a motor-measurement fault means, for a message a user has to act on. Never nullptr. | |
| constexpr std::string_view | toString (OperationMode mode) |
Name of a SOMANET operation mode, in the same PascalCase spelling the standard modes use (cia402::toString), so the two halves of a mode list read alike. Never nullptr. | |
| constexpr std::string_view | describe (OperationMode mode) |
The drive's own wording for a mode, as its ESI documents 0x6060. Never nullptr. | |
| constexpr bool | isDeprecated (OperationMode mode) |
Whether the firmware marks mode as deprecated — true for system identification alone, which both the firmware header and the ESI label that way. | |
Variables | |
| constexpr size_t | kMaxFieldsPerRegister = 8 |
| How many fields one register row can name. | |
| constexpr auto | kKueblerRegisters |
| Every register known, ascending by address: the vendor's draft, plus the four the encoder calibration sequence reads and the draft leaves out. | |
| constexpr uint8_t | kMaxKueblerRegisterBytes = 4 |
The largest register width OS command 19 can transfer, in bytes: its length byte is capped at 4. Every register in the table fits, so readableInOneCommand is true for all of them today. It stays on the wire because the cap is real and a wider register would be reported rather than silently truncated. | |
| constexpr FirmwareErrorType | kFirmwareErrorTypes [] |
| Every firmware error type, ascending. | |
| constexpr uint32_t | kMinChirpFrequencyMilliHz = 100 |
| The bounds the firmware enforces on a chirp configuration. | |
| constexpr uint32_t | kMaxChirpFrequencyMilliHz = 1'000'000 |
| 1000 Hz. | |
| constexpr uint32_t | kMinChirpTransitionTimeMs = 1'000 |
| 1 s. | |
| constexpr uint32_t | kMaxChirpTransitionTimeMs = 20'000 |
| 20 s. | |
| constexpr OperationMode | kOperationModes [] |
| Every SOMANET operation mode, ascending — the manufacturer half of a mode list. | |
Pure SOMANET (Synapticon manufacturer-specific) vocabulary — object indices, sub-entry numbers and enumerations, with no dependency on Device.
The vendor counterpart of mm::node::cia402, and nested rather than flat for one concrete reason: SOMANET extends 0x6060 with modes CiA402 does not define, so somanet::OperationMode has to sit beside cia402::OperationMode without colliding with it.
| enum mm::node::somanet::BrakeOption : uint8_t |
Sub-entries of 0x2004 (brake options). The enum value is the subindex.
|
strong |
How the brake is driven (0x2004:04).
kManualOutputVoltage is the one that matters to a caller: the brake is not under firmware control at all, so commanding BrakeStatus does nothing and release/engage are no-ops.
|
strong |
|
strong |
|
strong |
How commutation offset measurement (command 5) is performed (0x2009:03).
The choice changes what the command physically does, not just its accuracy, which is why a caller has to read it rather than assume: the two rotating methods need the brake released, and the stationary one needs it engaged — the drive cannot hold the load itself under that method.
| enum mm::node::somanet::CommutationOffsetSetting : uint8_t |
Sub-entries of 0x2009 (commutation offset detection). The enum value is the subindex.
Types and names are the drive's own, read off a SOMANET Integro rather than assumed — and none of them is what a reader would guess. The method is signed (INTEGER8), the state and torque percentage are INTEGER16 rather than byte-sized, and the three gains are REAL32 floats.
|
strong |
Which of a drive's two encoders a command addresses. The enum value is the ordinal the firmware expects.
The ordinal selects a configuration object, not a kind of encoder: encoder 1 is the encoder configured in 0x2110 and encoder 2 the one configured in 0x2112. A command addressed at an unconfigured encoder — or at one whose service does not support the command — is refused by the drive rather than misapplied to the other one.
| Enumerator | |
|---|---|
| kEncoder1 | The encoder configured in 0x2110. |
| kEncoder2 | The encoder configured in 0x2112. |
|
strong |
The faults encoder register communication (command 0) reports as its command-specific OS error code.
Command-specific codes count up from 0 and mean nothing outside their own command — general codes (OsCommandError) count down from 254 — so this table is only valid for command 0.
| Enumerator | |
|---|---|
| kInvalidResponse | The register transaction failed inside the encoder service. |
| kRegisterNotAllowed | The register cannot be accessed while the firmware is using it. |
| enum mm::node::somanet::ErrorReportEntry : uint8_t |
|
strong |
What a firmware error type actually does on this firmware — which is not what every one of them is named after.
|
strong |
The errors OS command 16 can provoke in a firmware service. The enum value is the error-type byte the command carries.
A test and diagnostic tool, and most of it is one-way. The XMOS exception types are raised by executing genuinely faulty code — an unaligned store, a divide by zero, an out-of-bounds index — and the service that executes it does not come back. Only kResettableFirmwareError leaves a drive you can carry on using.
|
strong |
Which internal firmware latency OS command 22 measures. The enum value is the latency index byte the command carries.
Both are durations inside the drive control service's cycle, which is the only service that implements the command; the drive keeps one maximum per latency and measures them independently.
|
strong |
One of the drive's two independently-scheduled control loops, as the firmware's FirmwareServiceId names them. The enum value is the byte the command carries.
They are separate loops with separate periods and separate counters, so a command addressed at one says nothing about the other. Each service answers only requests naming itself: a byte naming neither leaves the command unanswered by anything, and the drive's OS command handler eventually fails it as a timeout rather than as a bad parameter — which is why a caller validates this rather than passing a number through.
| Enumerator | |
|---|---|
| kDriveControl | The current/torque loop — the fast one, period per 0x60C2. |
| kMotionControl | The position/velocity loop above it. |
|
strong |
Which signal a high resolution data (HRD) stream records — OS command 3's data index. The enum value is the index the firmware expects.
The two formats differ in what a sample is, so the choice made when a stream is configured also decides how its files decode. Nothing on the drive records which one was used, which is why reading a recording back takes the same enum as configuring it did.
A recording is 1 kHz even on a drive that samples faster. The drive control loop runs at 250, 500 or 1000 µs, but the OS command 3 handler writes one sample per millisecond whatever the loop period is — it divides by its cycles-per-ms, which works because every supported loop period divides 1000 µs. Do not read a recording's length as the drive's resolution.
Not to be confused with object 0x20E1, also called high resolution data, which is a separate feature this code does not touch: a rolling OD array the drive fills every motion cycle with position, velocity and phase currents. Same name, different data, different transport.
| Enumerator | |
|---|---|
| kEncoderRawData | The raw position word an iC-MU encoder reports. Records zeros unless the encoder was first put into raw mode ( |
| kSystemIdentificationData | The velocity and torque actual values. Records the response to a system identification run (OS command 15), which has to be configured and started first; on its own this streams a drive that is not being excited. |
|
strong |
The faults HRD streaming (command 3) reports as its command-specific OS error code.
Command-specific codes count up from 0 and mean nothing outside their own command — general codes (OsCommandError) count down from 254 — so this table is only valid for command 3.
|
strong |
|
strong |
How the BiSS service clocks and interprets an iC-MU encoder (OS command 1). The enum value is the "mode enable" field the firmware expects.
The iC-MU is the chip behind a Circulo's internal encoder, and calibrating one means moving between these three modes rather than setting a single "calibration" switch.
|
strong |
|
strong |
How a register's value should be read once assembled.
|
strong |
What the Kübler encoder reported when a register access failed (OS command 19).
Command-specific codes, so they mean nothing outside this command. The specification numbers the last one 5; the firmware sends 4, and there is no code 5 — OsCmd19ErrorCodes is the authority.
|
strong |
The faults the current-injecting motor measurements report as their command-specific OS error code — pole pair (7), phase resistance (8) and phase inductance (9), which the firmware specification gives the same single-entry table.
A table shared between commands is only safe because the specification gives them the same one; command-specific codes count up from 0 and otherwise mean nothing outside the command that issued them (general codes count down from 254 — see OsCommandError). Open phase detection's code 0 means "open terminal A", which is exactly why each command decodes its own table.
| Enumerator | |
|---|---|
| kCurrentAmplitudeError | The drive could not reach the current amplitude it needed. |
|
strong |
Which way round the motor's phases are wired, as motor phase order detection (command 4) reports it and as 0x2003:05 "Motor phases inverted" stores it.
"Inverted" means the sensor angle and the rotor angle move in opposite directions; normal means they increase together.
| Enumerator | |
|---|---|
| kNormal | Sensor and rotor angles change in the same direction. |
| kInverted | They change in opposite directions. |
| enum mm::node::somanet::MotorSetting : uint8_t |
Sub-entries of 0x2003 (motor specific settings). The enum value is the subindex.
Types are the drive's own, read off a SOMANET Integro's object dictionary rather than assumed. Worth knowing that this is where the motor measurements belong: pole pair detection (7), phase resistance (8), phase inductance (9) and torque constant measurement (10) report a value without storing it, and :01, :02, :03 and :04 are the entries it goes in.
| Enumerator | |
|---|---|
| kMotorPolePairs | UNSIGNED8 — where a pole pair count (command 7) belongs. |
| kMotorTorqueConstant | INTEGER32 — where a torque constant (command 10) belongs, in µNm/A_rms, which is not the unit the command reports. The drive's own description of this entry names the unit; the command answers in mNm/A_rms, a factor of 1000 coarser. See |
| kMotorPhaseResistance | INTEGER32 — where a phase resistance (command 8) belongs, in µΩ, which is not the unit the command reports either: it answers in mΩ, so this is the second of the three that needs multiplying by 1000 before it is stored. The firmware reads this object into a variable it calls |
| kMotorPhaseInductance | INTEGER32 — where a phase inductance (command 9) belongs, in µH. The one that matches its command, which also reports µH, so a measurement is stored as it comes. The firmware's variable is |
| kMotorPhasesInverted | BOOLEAN — the phase order motor phase order detection (4) writes. |
| enum mm::node::somanet::Object : uint16_t |
Manufacturer-specific object indices (the 0x2000-0x5FFF vendor range).
|
strong |
The faults open phase detection (command 6) reports, as its command-specific OS error code.
Command-specific codes count up from 0 and mean nothing outside their own command — general codes (OsCommandError) count down from 254 — so this table is only valid for command 6.
|
strong |
SOMANET's manufacturer-specific operation modes — the negative half of 0x6060, which CiA402 leaves to the vendor.
Deliberately a separate enum rather than extra enumerators on cia402::OperationMode: that one is the standard set, and cia402::toOperationMode exists so an API boundary can reject a mode it does not know. Folding these in would make every vendor mode validate as a CiA402 mode everywhere the standard enum is used, including the console's mode list.
|
strong |
OS command IDs (byte 0 of 0x1023:01).
Only the commands this codebase issues are listed; the firmware implements more. The numbering is the firmware's, so gaps are real rather than reserved space.
| Enumerator | |
|---|---|
| kEncoderRegisterCommunication | Reads or writes one register of a BiSS encoder. |
| kIcMuCalibrationMode | Sets how the BiSS service clocks an iC-MU encoder. |
| kHrdStreaming | Records a signal into the drive's high resolution data files. |
| kMotorPhaseOrderDetection | Detects the motor phase order. Rotates the rotor. |
| kCommutationOffsetMeasurement | Measures the commutation angle offset; see somanet::CommutationOffsetMethod. |
| kOpenPhaseDetection | Checks every motor phase and FET leg for an open circuit. |
| kPolePairDetection | Detects the motor's pole pair count. Rotates the rotor. |
| kPhaseResistanceMeasurement | Measures the motor's phase resistance, in milliohms. |
| kPhaseInductanceMeasurement | Measures the motor's phase inductance, in microhenries. |
| kTorqueConstantMeasurement | Measures the motor's torque constant. Rotates the rotor. |
| kSkippedCyclesCounter | Reads a control loop's skipped-cycle counter. Harmless; no motion. |
| kIgnoreBissStatusBits | Suppresses a BiSS encoder's own error and warning bits. |
| kSystemIdentification | Configures and triggers the system-identification chirp. |
| kTriggerError | Provokes a firmware error or exception. Test tool only. |
| kVelocitySource | Chooses where the velocity loop's feedback comes from. |
| kKueblerRegisterCommunication | Reads or writes an Integro internal encoder register. |
| kReadObjectDictionary | Sends every object dictionary value at once. No motion. |
| kMeasureFirmwareLatency | Measures a duration inside the drive control cycle. |
|
strong |
The settings of the system-identification chirp (OS command 15). The enum value is the parameter index the command carries in byte 1.
One command sets one of these, so configuring a run means issuing the command once per setting. They are held on the drive until overwritten or it is power-cycled; nothing reads them back.
|
strong |
What writing parameter 5 does — arm the run, and on what trigger.
| Enumerator | |
|---|---|
| kNone | Do not arm. Writing this is also how an armed run is disarmed, which matters because the drive starts on the rising edge of this parameter: re-arming without clearing first is a write the firmware never sees as an edge. |
| kImmediately | Start on the next control cycle. |
| kAfterHrdStreamStart | Start when high resolution data streaming starts. This is the pairing that produces a usable recording — see |
|
strong |
Where the velocity control loop takes its feedback from (OS command 18). The enum value is the trigger bit the command carries.
Only the Integro's internal (Kübler) encoder provides its own velocity, so this decides anything only for that encoder, wherever it is configured. On a drive whose Kübler encoder is not configured for velocity control the command is accepted and changes nothing.
The velocity feedback filter is applied either way; this chooses what goes into it.
|
constexpr |
What an encoder register fault means, for a message a user has to act on. Never nullptr.
|
constexpr |
What an HRD streaming fault means, for a message a user has to act on. Never nullptr.
|
constexpr |
What a motor-measurement fault means, for a message a user has to act on. Never nullptr.
|
constexpr |
What an open-phase fault means, for a message a user has to act on. Never nullptr.
|
constexpr |
The drive's own wording for a mode, as its ESI documents 0x6060. Never nullptr.
|
constexpr |
What type does, from the firmware's own case bodies rather than from its name.
|
constexpr |
The register at address, or std::nullopt when the table has none.
A missing entry is not an error: the draft is preliminary and the command addresses any byte, so an unknown address is read as an unnamed register rather than refused.
|
constexpr |
How many bytes one recorded sample of data occupies in the drive's files.
Four for a raw encoder word, six for a velocity/torque pair. The firmware writes one sample per millisecond of the configured duration, so this is also what turns a duration into a size.
| std::span< const IcHausRegisterSpace > mm::node::somanet::icHausRegisterSpaces | ( | ) |
Every register space of both chips, in the order a reader should meet them: the iC-MU's two, then the iC-PVL's three.
|
constexpr |
Whether the firmware marks mode as deprecated — true for system identification alone, which both the firmware header and the ESI label that way.
|
constexpr |
The longest stream the drive will record for data.
Two different limits, because the recording is held in at most five 8032-byte files and the ceiling is whatever fills them: 10000 ms of 4-byte samples, or 6000 ms of 6-byte ones. The drive enforces both — it picks the limit from the data index and answers HrdStreamFault::kDuration — so applying them here only turns a rejected round trip into a caller error. (The firmware specification's error table describes that code as "larger than
10000 ms", which reads as though the narrower limit were unchecked; the drive application checks per data index.)
| std::optional< ChirpSignalType > mm::node::somanet::parseChirpSignalType | ( | std::string_view | token | ) |
Parses a signal-type token ("logarithmic" / "linear"). std::nullopt for any other.
| std::optional< FirmwareErrorType > mm::node::somanet::parseFirmwareErrorType | ( | std::string_view | token | ) |
Parses a firmware error type token — the inverse of toString.
| std::optional< FirmwareLatency > mm::node::somanet::parseFirmwareLatency | ( | std::string_view | token | ) |
Parses a firmware latency token ("setpoint" / "feedback"). std::nullopt otherwise.
| std::optional< FirmwareService > mm::node::somanet::parseFirmwareService | ( | std::string_view | token | ) |
Parses a service token ("drive-control" / "motion-control") — the inverse of toString. Returns std::nullopt for any other token.
| std::optional< HrdData > mm::node::somanet::parseHrdData | ( | std::string_view | token | ) |
Parses an HRD data token ("encoder-raw" / "system-identification") — the inverse of toString. Returns std::nullopt for any other token.
| std::optional< IcMuCalibrationMode > mm::node::somanet::parseIcMuCalibrationMode | ( | std::string_view | token | ) |
Parses a mode token ("configuration" / "raw" / "standard") — the inverse of toString. Returns std::nullopt for any other token.
| std::optional< SystemIdentificationStart > mm::node::somanet::parseSystemIdentificationStart | ( | std::string_view | token | ) |
Parses a start token ("none" / "immediately" / "after-hrd-stream-start").
| std::optional< VelocitySource > mm::node::somanet::parseVelocitySource | ( | std::string_view | token | ) |
Parses a velocity source token ("firmware" / "encoder"). std::nullopt otherwise.
|
constexpr |
Whether the method needs the brake released, as opposed to engaged.
True for the rotating methods, whose restrictions require a disengaged brake. False for kStationary, which is the one command in this family that wants the brake engaged — it cannot hold the load, so releasing the brake for it would be actively wrong rather than merely unnecessary.
| void mm::node::somanet::to_json | ( | nlohmann::json & | j, |
| const IcHausField & | field | ||
| ) |
Serialises an IcHausField. Participates in nlohmann ADL.
| void mm::node::somanet::to_json | ( | nlohmann::json & | j, |
| const IcHausRegister & | r | ||
| ) |
Serialises an IcHausRegister, layout() included. Participates in nlohmann ADL, so a span of them converts on its own.
| void mm::node::somanet::to_json | ( | nlohmann::json & | j, |
| const IcHausRegisterSpace & | space | ||
| ) |
Serialises an IcHausRegisterSpace, registers included.
| void mm::node::somanet::to_json | ( | nlohmann::json & | j, |
| const KueblerRegister & | r | ||
| ) |
Serialises a KueblerRegister. Participates in nlohmann ADL, so nlohmann::json(kKueblerRegisters) works.
|
constexpr |
Human-readable name of a release strategy (for logging / JSON). Never nullptr.
|
constexpr |
Human-readable name of a brake status (for logging / JSON). Never returns nullptr.
|
constexpr |
Name of a chirp signal type (for logging / JSON). Never returns nullptr.
|
constexpr |
Name of a commutation offset method (for logging / JSON). Never returns nullptr.
|
constexpr |
Name of an encoder ordinal, as a message should render it. Never returns nullptr.
|
constexpr |
Name of an encoder register fault, as the console and logs should render it. Never nullptr.
|
constexpr |
Name of a firmware error type (for logging / JSON). Never returns nullptr.
|
constexpr |
Name of a firmware latency (for logging / JSON). Never returns nullptr.
|
constexpr |
Name of a firmware service (for logging / JSON). Never returns nullptr.
|
constexpr |
Name of an HRD data selection, as it appears on the wire. Never returns nullptr.
|
constexpr |
Name of an HRD streaming fault, as the console and logs should render it. Never nullptr.
|
constexpr |
Name of a chip, as the console and logs should render it. Never returns nullptr.
|
constexpr |
Name of an iC-MU calibration mode (for logging / JSON). Never returns nullptr.
|
constexpr |
Name of a Kübler register fault, as a message should render it. Never nullptr.
|
constexpr |
Name of a motor-measurement fault, as the console and logs should render it. Never nullptr.
|
constexpr |
Name of a motor phase order (for logging / JSON). Never returns nullptr.
|
constexpr |
Name of an open-phase fault, as the console and logs should render it. Never nullptr.
|
constexpr |
Name of a SOMANET operation mode, in the same PascalCase spelling the standard modes use (cia402::toString), so the two halves of a mode list read alike. Never nullptr.
|
constexpr |
Name of a system-identification parameter, as a message should render it. Never nullptr.
|
constexpr |
Name of a start trigger (for logging / JSON). Never returns nullptr.
|
constexpr |
Name of a velocity source (for logging / JSON). Never returns nullptr.
|
inlineconstexpr |
Every firmware error type, ascending.
|
inlineconstexpr |
Every register known, ascending by address: the vendor's draft, plus the four the encoder calibration sequence reads and the draft leaves out.
|
inlineconstexpr |
1000 Hz.
|
inlineconstexpr |
20 s.
|
inlineconstexpr |
How many fields one register row can name.
Eight: a status register the datasheet breaks out bit by bit is the widest case, and no register can name more than its own bits. A fixed array rather than a span so a register row and its fields are one literal — the alternative is a named array per register, which is 150 names for no gain.
|
inlineconstexpr |
The largest register width OS command 19 can transfer, in bytes: its length byte is capped at 4. Every register in the table fits, so readableInOneCommand is true for all of them today. It stays on the wire because the cap is real and a wider register would be reported rather than silently truncated.
|
inlineconstexpr |
The bounds the firmware enforces on a chirp configuration.
**Taken from the firmware's own are_sinewave_config_parameters_valid, not from the OS command specification**, which says only that an out-of-range value raises an "Invalid Parameter" error and points at another document for the numbers. They are the range within which its fixed-point arithmetic does not overflow, which is why they are hard limits rather than advice.
The amplitude is deliberately absent: the firmware does not check it. See SomanetDrive::setSystemIdentificationParameter. 0.1 Hz.
|
inlineconstexpr |
1 s.
|
inlineconstexpr |
Every SOMANET operation mode, ascending — the manufacturer half of a mode list.
Taken from two sources that agree exactly: the firmware's own state_modes.h and the enum the ESI publishes on 0x6060. Neither knows the -101/-103/-108/-109/-110 "output" modes an earlier table here carried, so they are not listed.