@synapticon/motion-master-client 6.0.0-alpha.114 → 6.0.0-alpha.116

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { AlStatusCode, AutoTuningError, AutoTuningRunRequest, AutoTuningRunResponse, AutoTuningStatus, BrakeState, CaptureSummary, Cia402Status, DcSyncStatus, DeviceDiagnostics, DeviceFile, DeviceParameter, Encoders, EscRegister, EsiParseResult, FirmwareCompatibility, FirmwarePackageName, FoeErrorCode, GameLoopHealth, HardwareDescription, HrdRecording, IdentifiedPlantModel, IntegroVariant, IntegroVariantOption, MailboxErrorCode, Monitoring, ObjectDataTypeInfo, OperationModes, OutputStageResult, ParameterCacheEntry, ParameterValue, PdoMapping, PdoMappingRequest, ProcedureListing, ProcedureRequest, ProcedureSnapshot, ProcessDataWatchdog, ProcessImageObject, SdoAbortCode, SlaveConfig, SlaveInformationInterface, UserCacheListing } from "./data-contracts.js";
1
+ import { AlStatusCode, AutoTuningError, AutoTuningRunRequest, AutoTuningRunResponse, AutoTuningStatus, BrakeState, CaptureSummary, Cia402Status, DcSyncStatus, DeviceDiagnostics, DeviceFile, DeviceParameter, Encoders, EscRegister, EsiParseResult, FirmwareCompatibility, FirmwarePackageName, FoeErrorCode, GameLoopHealth, HardwareDescription, HrdRecording, IcHausRegister, IcMuRestoreFile, IcMuStatusBit, IdentifiedPlantModel, IntegroVariant, IntegroVariantOption, MailboxErrorCode, Monitoring, ObjectDataTypeInfo, OperationModes, OutputStageResult, ParameterCacheEntry, ParameterValue, PdoMapping, PdoMappingRequest, ProcedureListing, ProcedureRequest, ProcedureSnapshot, ProcessDataWatchdog, ProcessImageObject, SdoAbortCode, SlaveConfig, SlaveInformationInterface, UserCacheListing } from "./data-contracts.js";
2
2
  import { HttpClient, RequestParams } from "./http-client.js";
3
3
  export declare class Api<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
4
4
  /**
@@ -538,48 +538,7 @@ export declare class Api<SecurityDataType = unknown> extends HttpClient<Security
538
538
  name: string;
539
539
  /** How the space is reached, which is what decides whether the register communication service can read it at all. */
540
540
  addressing: string;
541
- registers: {
542
- /**
543
- * The address, or the first of a printed range.
544
- * @example 15
545
- */
546
- address: number;
547
- /**
548
- * The last address of the range; equal to address for a single-address row.
549
- * @example 15
550
- */
551
- lastAddress: number;
552
- /**
553
- * The fields rendered as the datasheet prints the row. "RESERVED" for a reserved row.
554
- * @example "SPO_MT(3:0) | MPC(3:0)"
555
- */
556
- layout: string;
557
- /** The named pieces of this register, most significant bit first. Empty when reserved. */
558
- fields: {
559
- /**
560
- * The datasheet's own name for the field.
561
- * @example "SPO_MT"
562
- */
563
- name: string;
564
- /**
565
- * The field's own bit slice as the register map prints it, empty where it prints a bare name. Not the position within the byte.
566
- * @example "3:0"
567
- */
568
- bits: string;
569
- /**
570
- * The datasheet's one-line description of the field.
571
- * @example "Offset external multiturn"
572
- */
573
- description: string;
574
- }[];
575
- /** @example false */
576
- reserved: boolean;
577
- /**
578
- * Reachable over SPI only, so the register communication service cannot touch it.
579
- * @example false
580
- */
581
- spiOnly: boolean;
582
- }[];
541
+ registers: IcHausRegister[];
583
542
  }[], any>>;
584
543
  /**
585
544
  * @description The register map of the Integro's internal (Kübler) encoder — the reference table for POST /api/devices/{slavePosition}/procedures/kuebler-register-communication, and documentation in its own right. Static: it describes the encoder type, not any connected device, so it needs no bus and no scan. Transcribed from the vendor's own draft table, then corrected against what the encoder really does: the draft calls four registers not implemented that the encoder calibration sequence reads or writes, and leaves out four more. Each entry carries the width, the access type, whether the encoder implements it, and the vendor's bit definitions verbatim, which for a bit-field register is the only place its meaning is recorded. A register the draft does not document says so in `definition`, because a reader has nowhere else to look. `format` says how to read the assembled value, because signedness is not uniform and one register is not a single number at all: `unsigned`, `signed`, `bitField` (the number means nothing on its own), or `signedHalves` — two signed 16-bit values packed into 32 bits, which register 0x3C is the only case of. `readableInOneCommand` says whether one command can carry the register, since the command's length byte caps at 4 bytes. Every register fits today, so it is true for all of them.
@@ -1247,6 +1206,35 @@ export declare class Api<SecurityDataType = unknown> extends HttpClient<Security
1247
1206
  * @request POST:/api/hardware-description/parse
1248
1207
  */
1249
1208
  parseHardwareDescription: (data: string, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<HardwareDescription, void>>;
1209
+ /**
1210
+ * @description Decodes an encoder status word, the value of 0x2111:04 or 0x2113:04, into the same bits the `ic-mu-encoder-status` procedure reports. Bus-independent: it reads nothing from a drive, so a value from a log can be decoded with no hardware present. A `GET` with a query, like `/api/firmware-package-name`, because the input is one number.
1211
+ *
1212
+ * @name GetIcMuEncoderStatus
1213
+ * @summary Decode an iC-MU encoder status word
1214
+ * @request GET:/api/ic-mu-encoder-status
1215
+ */
1216
+ getIcMuEncoderStatus: (query: {
1217
+ /**
1218
+ * The word, in decimal or in hexadecimal with a 0x prefix.
1219
+ * @example "0x1000"
1220
+ */
1221
+ encoderStatus: string;
1222
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
1223
+ /**
1224
+ * @format int64
1225
+ * @example 4096
1226
+ */
1227
+ encoderStatus: number;
1228
+ encoderStatusBits: IcMuStatusBit[];
1229
+ }, void>>;
1230
+ /**
1231
+ * @description Decodes a `circulo_integrated_encoder_<sensor port>_config.bin` supplied in the request body. The `ic-mu-encoder-configuration` procedure writes this file. It holds `[address, value]` pairs of iC-MU registers, and the drive writes them into the encoder when the iC-MU reports a corrupted EEPROM. Each pair comes back with the iC-MU register at its address. The file is refused when the drive would refuse it: an odd length, or more than 66 bytes.
1232
+ *
1233
+ * @name ParseIcMuRestoreFile
1234
+ * @summary Parse an iC-MU restore file
1235
+ * @request POST:/api/ic-mu-restore-file/parse
1236
+ */
1237
+ parseIcMuRestoreFile: (data: File, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<IcMuRestoreFile, void>>;
1250
1238
  /**
1251
1239
  * @description Decodes a `.variant` file supplied in the request body. Binary rather than text, hence a `POST` with bytes like `/api/sii/parse` rather than a query like `/api/firmware-package-name`. Trailing bytes past the last option are accepted: the firmware reads only as many options as the count claims and ignores the rest, so refusing padding would reject a file the drive is happy with.
1252
1240
  *
@@ -901,6 +901,34 @@ export class Api extends HttpClient {
901
901
  format: "json",
902
902
  ...params,
903
903
  });
904
+ /**
905
+ * @description Decodes an encoder status word, the value of 0x2111:04 or 0x2113:04, into the same bits the `ic-mu-encoder-status` procedure reports. Bus-independent: it reads nothing from a drive, so a value from a log can be decoded with no hardware present. A `GET` with a query, like `/api/firmware-package-name`, because the input is one number.
906
+ *
907
+ * @name GetIcMuEncoderStatus
908
+ * @summary Decode an iC-MU encoder status word
909
+ * @request GET:/api/ic-mu-encoder-status
910
+ */
911
+ getIcMuEncoderStatus = (query, params = {}) => this.request({
912
+ path: `/api/ic-mu-encoder-status`,
913
+ method: "GET",
914
+ query: query,
915
+ format: "json",
916
+ ...params,
917
+ });
918
+ /**
919
+ * @description Decodes a `circulo_integrated_encoder_<sensor port>_config.bin` supplied in the request body. The `ic-mu-encoder-configuration` procedure writes this file. It holds `[address, value]` pairs of iC-MU registers, and the drive writes them into the encoder when the iC-MU reports a corrupted EEPROM. Each pair comes back with the iC-MU register at its address. The file is refused when the drive would refuse it: an odd length, or more than 66 bytes.
920
+ *
921
+ * @name ParseIcMuRestoreFile
922
+ * @summary Parse an iC-MU restore file
923
+ * @request POST:/api/ic-mu-restore-file/parse
924
+ */
925
+ parseIcMuRestoreFile = (data, params = {}) => this.request({
926
+ path: `/api/ic-mu-restore-file/parse`,
927
+ method: "POST",
928
+ body: data,
929
+ format: "json",
930
+ ...params,
931
+ });
904
932
  /**
905
933
  * @description Decodes a `.variant` file supplied in the request body. Binary rather than text, hence a `POST` with bytes like `/api/sii/parse` rather than a query like `/api/firmware-package-name`. Trailing bytes past the last option are accepted: the firmware reads only as many options as the count claims and ignores the rest, so refusing padding would reject a file the drive is happy with.
906
934
  *
@@ -451,7 +451,7 @@ export interface ProgressStep {
451
451
  /** @example "succeeded" */
452
452
  status: "idle" | "running" | "succeeded" | "failed";
453
453
  /**
454
- * What the step produced, if anything — shape is per procedure. Absent when the step produced nothing. For `os-command` it is an object with `status`, `data`, `errorCode` when the drive sent one, and `fsBuffer` when the request asked to read bulk data. For `read-object-dictionary` it is an object with `byteCount` and `values`, one entry per object with its `index`, `subindex` and `value`.
454
+ * What the step produced, if anything — shape is per procedure. Absent when the step produced nothing. For `os-command` it is an object with `status`, `data`, `errorCode` when the drive sent one, and `fsBuffer` when the request asked to read bulk data. For `read-object-dictionary` it is an object with `byteCount` and `values`, one entry per object with its `index`, `subindex` and `value`. For `ic-mu-encoder-status` the `read-registers` step holds an array of `IcMuEncoderStatus`, and for `ic-mu-encoder-configuration` the `verify` step holds one. For `ic-mu-calibration` the `validate` step holds an `IcMuCalibrationPlan`, each `iteration-<n>` step an `IcMuCalibrationIteration`, and the `validation` step an `IcMuCalibrationValidation`. For `ic-mu-key-registers` the `read-key-registers` step holds an array of `IcMuKeyRegister`, for `ic-mu-eeprom-export` the `read-eeprom` step an array of `IcMuEepromByte`, and for `ic-mu-i2c-register` the `i2c-transfer` step an `IcMuI2cTransfer`. For `ic-mu-restore-file` the `restore-file` step holds `file` and `entries`, the pairs written, as `IcMuRestoreFile` lists them. For `open-loop-field-control` the `validate` step holds an `OpenLoopFieldPlan`. For `ic-mu-eeprom-erase` the `read-eeprom` step holds the 77 erased bytes as `IcMuEepromByte`, and the `delete-restore-file` step the `file` it deleted, or null with a `reason`. For `controller-auto-tuning` the `drive-configuration` step holds the `DriveConfig` sent to the auto-tuning program, the `noise` step `noiseRpm` and a `warning`, the `compute` step a `ControllerTuningComputed`, and the `write` step a `ControllerTuningWrite`.
455
455
  * @example {"status":1,"data":[1,2,3,4,5,6]}
456
456
  */
457
457
  value?: any;
@@ -538,10 +538,10 @@ export interface HrdRecording {
538
538
  /** One encoder configuration record, 0x2110 for encoder 1 or 0x2112 for encoder 2. */
539
539
  export interface EncoderConfiguration {
540
540
  /**
541
- * The ordinal the controller fields refer to; 1 is 0x2110, 2 is 0x2112.
541
+ * The encoder ordinal, which the controller fields and the OS commands refer to; 1 is 0x2110, 2 is 0x2112.
542
542
  * @example 1
543
543
  */
544
- encoder: 1 | 2;
544
+ encoderOrdinal: 1 | 2;
545
545
  /**
546
546
  * The port the encoder is wired to (:01), 0 for none.
547
547
  * @example 1
@@ -594,6 +594,11 @@ export interface Encoders {
594
594
  }
595
595
  /** A drive's brake configuration and current state — the parts of object 0x2004 that decide what commanding the brake will actually do. Returned by every brake endpoint, so the outcome of a release or engage arrives in the same shape as a plain read. */
596
596
  export interface BrakeState {
597
+ /**
598
+ * Whether the drive has the brake object 0x2004. A drive with no brake, such as one running Jasper firmware, has none: then `status` is `notConfigured`, `softwareControllable` is false, and release and engage write nothing and succeed.
599
+ * @example true
600
+ */
601
+ present: boolean;
597
602
  /**
598
603
  * Brake state (0x2004:07). A brake is spring-engaged, so `engaged` is also its powered-off state.
599
604
  * @example "engaged"
@@ -993,6 +998,423 @@ export interface ProcedureListing {
993
998
  /** The complete state of a procedure on one device — an accumulating snapshot rather than an event, which is what makes polling lossless. */
994
999
  snapshot: ProcedureSnapshot;
995
1000
  }
1001
+ export interface IcHausRegister {
1002
+ /**
1003
+ * The address, or the first of a printed range.
1004
+ * @example 15
1005
+ */
1006
+ address: number;
1007
+ /**
1008
+ * The last address of the range; equal to address for a single-address row.
1009
+ * @example 15
1010
+ */
1011
+ lastAddress: number;
1012
+ /**
1013
+ * The fields rendered as the datasheet prints the row. "RESERVED" for a reserved row.
1014
+ * @example "SPO_MT(3:0) | MPC(3:0)"
1015
+ */
1016
+ layout: string;
1017
+ /** The named pieces of this register, most significant bit first. Empty when reserved. */
1018
+ fields: {
1019
+ /**
1020
+ * The datasheet's own name for the field.
1021
+ * @example "SPO_MT"
1022
+ */
1023
+ name: string;
1024
+ /**
1025
+ * The field's own bit slice as the register map prints it, empty where it prints a bare name. Not the position within the byte.
1026
+ * @example "3:0"
1027
+ */
1028
+ bits: string;
1029
+ /**
1030
+ * The datasheet's one-line description of the field.
1031
+ * @example "Offset external multiturn"
1032
+ */
1033
+ description: string;
1034
+ }[];
1035
+ /** @example false */
1036
+ reserved: boolean;
1037
+ /**
1038
+ * Reachable over SPI only, so the register communication service cannot touch it.
1039
+ * @example false
1040
+ */
1041
+ spiOnly: boolean;
1042
+ }
1043
+ /** Whether one iC-MU encoder holds the output configuration that its encoder configuration object asks for. */
1044
+ export interface IcMuEncoderStatus {
1045
+ /** @example 1 */
1046
+ encoderOrdinal: 1 | 2;
1047
+ /**
1048
+ * 0x21x0:01. 3 to 5 is an external encoder.
1049
+ * @example 1
1050
+ */
1051
+ sensorPort: number;
1052
+ /**
1053
+ * 0x21x0:0C.
1054
+ * @example 19
1055
+ */
1056
+ singleturnBits: number;
1057
+ /**
1058
+ * 0x21x0:0A, 0 where the object has none.
1059
+ * @example 0
1060
+ */
1061
+ multiturnBits: number;
1062
+ /**
1063
+ * The pole pairs of the ring, null for a ring the rules do not know.
1064
+ * @example 32
1065
+ */
1066
+ masterPolePairs: number | null;
1067
+ /**
1068
+ * iC-MU register 0x74.
1069
+ * @example 21
1070
+ */
1071
+ hardRev: number;
1072
+ /**
1073
+ * The part register 0x74 names, null for a code no iC-MU uses.
1074
+ * @example "iC-MU150"
1075
+ */
1076
+ part: string | null;
1077
+ /**
1078
+ * The low nibble of register 0x74.
1079
+ * @example 5
1080
+ */
1081
+ revision: number;
1082
+ /**
1083
+ * iC-MU register 0x11.
1084
+ * @example 5
1085
+ */
1086
+ outputRegister: number;
1087
+ /**
1088
+ * The value of register 0x11 the rules give, null where they do not apply.
1089
+ * @example 5
1090
+ */
1091
+ expectedOutputRegister: number | null;
1092
+ /**
1093
+ * not-configured when register 0x11 holds 0xA5, configured when it holds the expected value, invalid otherwise. null without an expected value, and for another chip on an external port.
1094
+ * @example "configured"
1095
+ */
1096
+ state: "not-configured" | "invalid" | "configured" | null;
1097
+ /** Why there is no expected value. */
1098
+ reason: string | null;
1099
+ /** @example "singleturn" */
1100
+ path: "singleturn" | "multiturn";
1101
+ /** The battery modes a configuration request can name besides default. Empty on the singleturn path and on a ring that offers no mode. */
1102
+ batteryModes: {
1103
+ /** @example "18-microamperes" */
1104
+ name: string;
1105
+ /** @example 18 */
1106
+ maxCurrentMicroamps: number;
1107
+ /** @example 56 */
1108
+ maxAccelerationKrpmPerSecond: number;
1109
+ }[];
1110
+ /**
1111
+ * The encoder status word, 0x2111:04 for encoder 1 and 0x2113:04 for encoder 2, read with an SDO upload. It is a snapshot, not a live view of the chips. The drive writes it after a BiSS error bit and at start-up: iC-MU STATUS1 in bits 0-7, the iC-PVL status in bits 8-15 and iC-MU STATUS0 in bits 16-23, each with only the bits the drive watches. 0 means that nothing was latched since the drive started. The drive sets the word to 0 again only when a change of the encoder configuration object, 0x2110 or 0x2112, restarts the encoder; `ic-mu-encoder-configuration` does not clear it. The chips themselves are not read, because a read of STATUS1 clears the iC-MU errors.
1112
+ * @format int64
1113
+ * @example 4096
1114
+ */
1115
+ encoderStatus: number;
1116
+ /** One entry for each set bit of encoderStatus, lowest bit first. */
1117
+ encoderStatusBits: IcMuStatusBit[];
1118
+ }
1119
+ /** The `validate` step of `open-loop-field-control`: the move in the electrical units the drive takes, as OS command 2 writes them. */
1120
+ export interface OpenLoopFieldPlan {
1121
+ /** @example 360 */
1122
+ angleDegrees: number;
1123
+ /**
1124
+ * 0x2003:01.
1125
+ * @example 5
1126
+ */
1127
+ polePairs: number;
1128
+ /**
1129
+ * The end electrical angle. The drive takes 2π as 6.28, so this is the mechanical angle times the pole pairs times 6280 / 360.
1130
+ * @example 31400
1131
+ */
1132
+ angleEndMilliRadian: number;
1133
+ /** @example 3 */
1134
+ speedRadPerSecond: number;
1135
+ /** @example 523 */
1136
+ accelerationRadPerSquaredSecond: number;
1137
+ /** @example 1000 */
1138
+ lengthEndPerMille: number;
1139
+ /** @example 10000 */
1140
+ lengthRatePerMillePerSecond: number;
1141
+ /**
1142
+ * The velocity of the motor shaft the rounded speed gives.
1143
+ * @example 5.73
1144
+ */
1145
+ velocityRpm: number;
1146
+ }
1147
+ /** The `compute` step of `controller-auto-tuning`: what the auto-tuning program tuned for, and the gains it returned in SI units, before the conversion to the drive's units. */
1148
+ export interface ControllerTuningComputed {
1149
+ /** @example true */
1150
+ full: boolean;
1151
+ /** Position tuning only. */
1152
+ controllerType?: "PI-P" | "P-PI";
1153
+ /**
1154
+ * The damping ratio the program chose, or the one the request gave.
1155
+ * @example 0.9
1156
+ */
1157
+ dampingRatio: number;
1158
+ /**
1159
+ * Position tuning only. The settling time the program chose, or the one given.
1160
+ * @example 120
1161
+ */
1162
+ settlingTimeMs?: number;
1163
+ /**
1164
+ * Velocity tuning only. The bandwidth the program chose, or the one given.
1165
+ * @example 40.8
1166
+ */
1167
+ bandwidthHz?: number;
1168
+ /**
1169
+ * Kp and Ki of the position loop, in (rad/s)/rad and (rad/s)/(rad·s), and of the velocity loop, in Nm/(rad/s) and Nm/(rad/s·s). A velocity tuning returns zeros for the position loop.
1170
+ * @example {"position":{"kp":30,"ki":4},"velocity":{"kp":0.05,"ki":2.5}}
1171
+ */
1172
+ gains: object;
1173
+ /** The stability margins and other figures a full tuning reports, as the program renders them. Null for a tuning to targets. */
1174
+ state: any | null;
1175
+ }
1176
+ /** The `write` step of `controller-auto-tuning`: each gain object, its value before and after the write, in the drive's units, and the Kd objects the drive does not have. */
1177
+ export interface ControllerTuningWrite {
1178
+ gains: {
1179
+ /** @example "0x2011:01" */
1180
+ object: string;
1181
+ /** @example 1.5 */
1182
+ before: number;
1183
+ /** @example 5.24 */
1184
+ after: number;
1185
+ }[];
1186
+ /** @example ["0x2011:03"] */
1187
+ skipped: string[];
1188
+ /** Set when a full tuning computed the gains with a noise of 0, because the motor moved or the noise recording failed. */
1189
+ warning: string | null;
1190
+ }
1191
+ /** One key register of an iC-MU, read from its RAM: the step value of `ic-mu-key-registers` is a list of 33 of them, in the order of the restore file. */
1192
+ export interface IcMuKeyRegister {
1193
+ /** @example 82 */
1194
+ ramAddress: number;
1195
+ /**
1196
+ * Where the EEPROM keeps the register. RAM 0x00-0x18 is EEPROM 0x00-0x18, and RAM 0x52-0x59 is EEPROM 0x19-0x20.
1197
+ * @example 25
1198
+ */
1199
+ eepromAddress: number;
1200
+ /** @example 47 */
1201
+ value: number;
1202
+ /** The iC-MU register at `ramAddress`, as `/api/meta/ic-haus-registers` lists it, or null for an address the register map does not list. */
1203
+ register: IcHausRegister | null;
1204
+ }
1205
+ /** One byte of the EEPROM of an iC-MU encoder: the step value of `ic-mu-eeprom-export` is a list of 77 of them, 0x00-0x4C. 0x00-0x3F is the configuration of the iC-MU and 0x40-0x4C that of the iC-PVL. The `read-eeprom` step of `ic-mu-eeprom-erase` holds the same list, read back after the erase. */
1206
+ export interface IcMuEepromByte {
1207
+ /** @example 64 */
1208
+ address: number;
1209
+ /** @example 40 */
1210
+ value: number;
1211
+ }
1212
+ /** The step value of `ic-mu-i2c-register`. */
1213
+ export interface IcMuI2CTransfer {
1214
+ /** @example "ic-pvl" */
1215
+ target: "eeprom" | "ic-pvl" | "ic-pvl-status";
1216
+ /**
1217
+ * The I²C device id with the R/W bit, as written to I2C_DEVID (0x5E).
1218
+ * @example 195
1219
+ */
1220
+ deviceId: number;
1221
+ /** @example false */
1222
+ write: boolean;
1223
+ /** @example 16 */
1224
+ registerAddress: number;
1225
+ /**
1226
+ * The byte read or written.
1227
+ * @example 240
1228
+ */
1229
+ value: number;
1230
+ }
1231
+ /** One set bit of the encoder status word. A set bit that the drive masks out has no name, title, description or remedy. */
1232
+ export interface IcMuStatusBit {
1233
+ /**
1234
+ * The bit in the encoder status word.
1235
+ * @example 12
1236
+ */
1237
+ bit: number;
1238
+ /**
1239
+ * The chip the bit comes from, null for bits 24-31.
1240
+ * @example "iC-PVL"
1241
+ */
1242
+ chip: "iC-MU" | "iC-PVL" | null;
1243
+ /**
1244
+ * The status register of the chip, null for bits 24-31.
1245
+ * @example "STATUS"
1246
+ */
1247
+ register: "STATUS0" | "STATUS1" | "STATUS" | null;
1248
+ /**
1249
+ * The bit in that register.
1250
+ * @example 4
1251
+ */
1252
+ registerBit: number;
1253
+ /**
1254
+ * The datasheet name.
1255
+ * @example "BAT_ERR"
1256
+ */
1257
+ name: string | null;
1258
+ /** @example "Battery error" */
1259
+ title: string | null;
1260
+ /** @example "The battery voltage is too low (iC-PVL datasheet, Elec. Char. No. 404). The position is not valid." */
1261
+ description: string | null;
1262
+ /**
1263
+ * What to do, null where there is nothing to do.
1264
+ * @example "Change the battery, then reset the fault of the drive."
1265
+ */
1266
+ remedy: string | null;
1267
+ }
1268
+ /** What an iC-MU calibration decided before the motor moved. */
1269
+ export interface IcMuCalibrationPlan {
1270
+ /** @example 2 */
1271
+ encoderOrdinal: 1 | 2;
1272
+ /** @example 2 */
1273
+ sensorPort: number;
1274
+ /** @example "outer" */
1275
+ ringPosition: "inner" | "outer";
1276
+ /** @example "iC-MU200" */
1277
+ part: string;
1278
+ /** @example 32 */
1279
+ masterPolePairs: number;
1280
+ /** @example "motor" */
1281
+ shaft: "motor" | "driving";
1282
+ /** False when the start values of another ring are used. */
1283
+ startValuesMeasured: boolean;
1284
+ /**
1285
+ * On the driving shaft.
1286
+ * @example 0.75
1287
+ */
1288
+ velocityRpm: number;
1289
+ /**
1290
+ * On the driving shaft.
1291
+ * @example 8.33
1292
+ */
1293
+ accelerationRpmPerSecond: number;
1294
+ /**
1295
+ * The time at constant velocity.
1296
+ * @example 6000
1297
+ */
1298
+ recordingMs: number;
1299
+ /** Whether the software position limits bound the motion. */
1300
+ limitedRange: boolean;
1301
+ warnings: string[];
1302
+ }
1303
+ /** The error that remains on one track after a recording, in LSB of its registers. */
1304
+ export interface IcMuTrackResidual {
1305
+ sineOffset: number;
1306
+ cosineOffset: number;
1307
+ gain: number;
1308
+ phase: number;
1309
+ phaseRange: 0 | 1;
1310
+ /** Whether the track passed the test of this iteration. */
1311
+ passed: boolean;
1312
+ }
1313
+ /** A curve over the ring: at most 720 points of [ring angle in degrees, value]. The value is in the unit of phaseRangeLimit. */
1314
+ export type IcMuCalibrationCurve = number[][];
1315
+ /** What one calibration iteration recorded and wrote. */
1316
+ export interface IcMuCalibrationIteration {
1317
+ /** @example 1 */
1318
+ iteration: number;
1319
+ direction: 1 | -1;
1320
+ /** @example 0.75 */
1321
+ velocityRpm: number;
1322
+ /**
1323
+ * The samples analysed.
1324
+ * @example 6000
1325
+ */
1326
+ samples: number;
1327
+ /**
1328
+ * Turns of the ring the recording covered.
1329
+ * @example 8.9
1330
+ */
1331
+ recordedRevolutions: number;
1332
+ /**
1333
+ * The master periods MU_3SL calculated from the recording. Reported as the library gives it; nothing judges it.
1334
+ * @example 32
1335
+ */
1336
+ calculatedMasterPeriods?: number;
1337
+ /**
1338
+ * The fewest samples MU_3SL saw in one master period of the recording. Reported as the library gives it; nothing judges it.
1339
+ * @example 12.5
1340
+ */
1341
+ minimalSamplesPerMasterPeriod?: number;
1342
+ /** Present when the recording covered less than one turn of the ring. */
1343
+ warning?: string;
1344
+ /** The permissible nonius phase error. */
1345
+ phaseRangeLimit: number;
1346
+ /** The tolerance of the pass test */
1347
+ tolerance: 1 | 3 | 5;
1348
+ /** The error that remains on one track after a recording, in LSB of its registers. */
1349
+ master: IcMuTrackResidual;
1350
+ /** The error that remains on one track after a recording, in LSB of its registers. */
1351
+ nonius: IcMuTrackResidual;
1352
+ /** A curve over the ring: at most 720 points of [ring angle in degrees, value]. The value is in the unit of phaseRangeLimit. */
1353
+ phaseError: IcMuCalibrationCurve;
1354
+ }
1355
+ /** The validation pass of an iC-MU calibration: the nonius phase margins the encoder now holds. It passes when both are at least 10 %. */
1356
+ export interface IcMuCalibrationValidation {
1357
+ /** @example 3 */
1358
+ iteration: number;
1359
+ direction: 1 | -1;
1360
+ /** @example 0.75 */
1361
+ velocityRpm: number;
1362
+ /** @example 6000 */
1363
+ samples: number;
1364
+ /** @example 8.9 */
1365
+ recordedRevolutions: number;
1366
+ /**
1367
+ * As in IcMuCalibrationIteration.
1368
+ * @example 32
1369
+ */
1370
+ calculatedMasterPeriods?: number;
1371
+ /**
1372
+ * As in IcMuCalibrationIteration.
1373
+ * @example 12.5
1374
+ */
1375
+ minimalSamplesPerMasterPeriod?: number;
1376
+ warning?: string;
1377
+ phaseRangeLimit: number;
1378
+ /** A curve over the ring: at most 720 points of [ring angle in degrees, value]. The value is in the unit of phaseRangeLimit. */
1379
+ phaseMargin: IcMuCalibrationCurve;
1380
+ /** @example 78.5 */
1381
+ lowerMarginPercent: number;
1382
+ /** @example 75 */
1383
+ upperMarginPercent: number;
1384
+ /**
1385
+ * The smaller of the two margins.
1386
+ * @example 75
1387
+ */
1388
+ marginPercent: number;
1389
+ /** robust from 50 %, small-displacements from 30 %, avoid-displacements from 10 %, and too-high below 10 %, where the validation fails. */
1390
+ marginBand: "robust" | "small-displacements" | "avoid-displacements" | "too-high";
1391
+ /** What the band means for the user. */
1392
+ marginMessage: string;
1393
+ passed: boolean;
1394
+ /** Present after a full calibration of the commutation encoder: the commutation offset must be measured again. */
1395
+ commutationWarning?: string;
1396
+ }
1397
+ /** A decoded iC-MU restore file, `circulo_integrated_encoder_<sensor port>_config.bin`. The drive writes these pairs into the encoder when the iC-MU reports a corrupted EEPROM. */
1398
+ export interface IcMuRestoreFile {
1399
+ /** One entry for each pair, in the order of the file. */
1400
+ entries: {
1401
+ /**
1402
+ * The iC-MU RAM address the drive writes the value into.
1403
+ * @min 0
1404
+ * @max 255
1405
+ * @example 12
1406
+ */
1407
+ address: number;
1408
+ /**
1409
+ * @min 0
1410
+ * @max 255
1411
+ * @example 108
1412
+ */
1413
+ value: number;
1414
+ /** The iC-MU register at the address, as `/api/meta/ic-haus-registers` lists it, or null for an address the register map does not list. */
1415
+ register: IcHausRegister | null;
1416
+ }[];
1417
+ }
996
1418
  /** A procedure's parameters. Which fields apply is per procedure, and each descriptor reports its own in `parameters` — so this schema is open, and a procedure that takes none may be started with no body at all. The properties below are the union of every procedure's, each naming the procedure it belongs to. */
997
1419
  export interface ProcedureRequest {
998
1420
  /**
@@ -1003,7 +1425,7 @@ export interface ProcedureRequest {
1003
1425
  */
1004
1426
  command?: number[];
1005
1427
  /**
1006
- * Ceiling on the whole command. Not a liveness check — the drive fails a command no service acknowledges within 5 s on its own — so size it for the command being run. Hitting it aborts the command on the drive.
1428
+ * Ceiling on the whole command. Not a liveness check — the drive fails a command no service acknowledges within 5 s on its own — so size it for the command being run. Hitting it aborts the command on the drive. For `open-loop-field-control` it is how long the move may take after the drive is enabled, from 1000 ms, with 60000 ms as its default.
1007
1429
  * @min 1
1008
1430
  * @max 600000
1009
1431
  * @default 1000
@@ -1026,25 +1448,30 @@ export interface ProcedureRequest {
1026
1448
  /** `os-command` only, and required when `fsBuffer` is `write`: the bytes to send, base64-encoded into this JSON string. Rejected for the other two directions rather than ignored, so a request that names one and forgets the other is told rather than running a command that moves nothing. (Deliberately not `format: byte`, for the reason spelled out on `packageContent`.) */
1027
1449
  fsBufferData?: string;
1028
1450
  /**
1029
- * `encoder-register-communication` and `ic-mu-calibration-mode`: which of the drive's encoders to address. Encoder 1 is the encoder configured in 0x2110 and encoder 2 the one configured in 0x2112, so the ordinal picks a configuration object rather than a kind of encoder.
1451
+ * `encoder-register-communication`, `ic-mu-calibration-mode`, `ignore-biss-status-bits`, `ic-mu-encoder-configuration`, `ic-mu-calibration`, `ic-mu-key-registers`, `ic-mu-eeprom-export`, `ic-mu-i2c-register`, `ic-mu-restore-file` and `ic-mu-eeprom-erase`: the encoder ordinal of the OS commands, which picks the drive's encoder to address. Encoder 1 is the encoder configured in 0x2110 and encoder 2 the one configured in 0x2112, so the ordinal picks a configuration object rather than a kind of encoder. Required for every `ic-mu-` procedure that takes it, because a default would address an encoder that nobody named.
1030
1452
  * @default 1
1031
1453
  * @example 1
1032
1454
  */
1033
- encoder?: 1 | 2;
1455
+ encoderOrdinal?: 1 | 2;
1034
1456
  /**
1035
- * `encoder-register-communication` only: false reads the register, true writes `value` into it. Either way the drive reports what the register holds afterwards.
1457
+ * `encoder-register-communication` and `ic-mu-i2c-register`: false reads, true writes `value`. `encoder-register-communication` reports what the register holds afterwards; `ic-mu-i2c-register` reports the byte it wrote.
1036
1458
  * @default false
1037
1459
  */
1038
1460
  write?: boolean;
1039
1461
  /**
1040
- * `encoder-register-communication` only, and required for it: the register to access. The map belongs to the encoder chip rather than to the drive's firmware.
1462
+ * `encoder-register-communication` and `ic-mu-i2c-register`, and required for both: the register to access. For `encoder-register-communication` the map belongs to the encoder chip rather than to the drive's firmware. For `ic-mu-i2c-register` it is an address on `target`: an EEPROM address, or an iC-PVL register.
1041
1463
  * @min 0
1042
1464
  * @max 255
1043
1465
  * @example 117
1044
1466
  */
1045
1467
  registerAddress?: number;
1046
1468
  /**
1047
- * `encoder-register-communication` only: the byte to write into the register. Ignored when reading.
1469
+ * `ic-mu-i2c-register` only, and required for it: what the I²C transfer of the iC-MU addresses. `eeprom` is the EEPROM that holds the configuration of the iC-MU and the iC-PVL, `ic-pvl` every iC-PVL register, and `ic-pvl-status` only the status and command registers of the iC-PVL, where the command register is 0x01. The server picks the I²C device id from `target` and `write`.
1470
+ * @example "eeprom"
1471
+ */
1472
+ target?: "eeprom" | "ic-pvl" | "ic-pvl-status";
1473
+ /**
1474
+ * `encoder-register-communication` and `ic-mu-i2c-register`: the byte to write. Ignored when reading. `ic-mu-i2c-register` requires it for a write.
1048
1475
  * @min 0
1049
1476
  * @max 255
1050
1477
  * @default 0
@@ -1068,6 +1495,39 @@ export interface ProcedureRequest {
1068
1495
  * @example "configuration"
1069
1496
  */
1070
1497
  mode?: "configuration" | "raw" | "standard";
1498
+ /**
1499
+ * `ic-mu-encoder-configuration` only, and only on the multiturn path: the current the iC-PVL draws from the battery while the drive has no power. A higher current lets it count revolutions at a higher acceleration. `default` takes iC-PVL code 0x5D for an encoder on the motor shaft and 0x68 for one on the driving shaft, and refuses an encoder that serves no controller. A ring of 16 master pole pairs takes only `default`. The `ic-mu-encoder-status` result lists the modes of each encoder with the acceleration each one allows.
1500
+ * @default "default"
1501
+ * @example "18-microamperes"
1502
+ */
1503
+ batteryMode?: "default" | "6-microamperes" | "10-microamperes" | "18-microamperes" | "36-microamperes" | "72-microamperes";
1504
+ /**
1505
+ * `ic-mu-encoder-configuration` only: writes the configured registers to the restore file of the sensor port, `circulo_integrated_encoder_<sensor port>_config.bin`. The drive writes that file back into the encoder when the iC-MU reports a corrupted EEPROM. False keeps the file there now. The drive keeps a restore file only for sensor ports 1 and 2.
1506
+ * @default true
1507
+ */
1508
+ writeRestoreFile?: boolean;
1509
+ /**
1510
+ * `ic-mu-calibration` only: where the ring of an external encoder on sensor port 3 to 5 sits. Required there, and refused for port 1, which is always inner, and port 2, which is always outer. The calibration starts from the values measured for that position.
1511
+ * @example "inner"
1512
+ */
1513
+ ringPosition?: "inner" | "outer";
1514
+ /**
1515
+ * `ic-mu-calibration` only: runs one validation pass, which reports the nonius phase margins of the calibration the encoder holds, and writes nothing to the encoder.
1516
+ * @default false
1517
+ */
1518
+ measurementOnly?: boolean;
1519
+ /**
1520
+ * `ic-mu-calibration` only: after a full calibration, shows the NON_CTR error of the iC-MU in the BiSS error bit, register 0x0C = 0x2C.
1521
+ * @default false
1522
+ */
1523
+ activateHealthMonitoring?: boolean;
1524
+ /**
1525
+ * `ic-mu-calibration` only: the velocity of the encoder's ring in rpm, on whichever shaft the encoder sits. Without it a motor-shaft encoder runs at the velocity measured for its ring and a driving-shaft encoder at 15 rpm. The 0.95 × 0x6080 cap still applies, and a narrow range between the software position limits replaces it with the velocity that fits.
1526
+ * @min 1
1527
+ * @max 1000
1528
+ * @example 90
1529
+ */
1530
+ ringVelocity?: number;
1071
1531
  /**
1072
1532
  * `restore-default-parameters` only: which group of defaults to restore — all (0x1011:01), communication (0x1011:02), application (0x1011:03), or manufacturer (0x1011:04).
1073
1533
  * @default "all"
@@ -1105,6 +1565,76 @@ export interface ProcedureRequest {
1105
1565
  * @example 2
1106
1566
  */
1107
1567
  finalState?: 1 | 2 | 3 | 4 | 8;
1568
+ /**
1569
+ * `open-loop-field-control` only, and required for it: how far to turn the motor shaft, in mechanical degrees. Negative turns the other way.
1570
+ * @example 360
1571
+ */
1572
+ angle?: number;
1573
+ /**
1574
+ * `open-loop-field-control` only: the highest velocity of the motor shaft, in rpm. The drive takes whole electrical rad/s, so a slow move is rounded; the `validate` step reports the velocity the drive runs.
1575
+ * @default 5
1576
+ * @example 5
1577
+ */
1578
+ velocity?: number;
1579
+ /**
1580
+ * `open-loop-field-control` only: the acceleration and the deceleration of the motor shaft, in rpm/s.
1581
+ * @default 1000
1582
+ * @example 1000
1583
+ */
1584
+ acceleration?: number;
1585
+ /**
1586
+ * `open-loop-field-control` only: the current of the rotating field, in per mille of the rated current.
1587
+ * @default 1000
1588
+ * @example 1000
1589
+ */
1590
+ fieldLength?: number;
1591
+ /**
1592
+ * `open-loop-field-control` only: how fast the field length rises from 0, in per mille of the rated current per second.
1593
+ * @default 10000
1594
+ * @example 10000
1595
+ */
1596
+ fieldLengthRate?: number;
1597
+ /**
1598
+ * `controller-auto-tuning` only, and required for it: the controller to tune.
1599
+ * @example "position"
1600
+ */
1601
+ controller?: "position" | "velocity";
1602
+ /**
1603
+ * `controller-auto-tuning` only, position tuning only: the structure of the cascaded position controller the gains are computed for. PI-P puts the integral action in the position loop, P-PI in the velocity loop.
1604
+ * @default "PI-P"
1605
+ * @example "PI-P"
1606
+ */
1607
+ controllerType?: "PI-P" | "P-PI";
1608
+ /**
1609
+ * `controller-auto-tuning` only: true lets the auto-tuning program choose the damping ratio and the settling time or the bandwidth, from the drive configuration and the velocity noise. False computes the gains for `dampingRatioPermil` and `settlingTimeMs` or `bandwidthMilliHz`.
1610
+ * @default true
1611
+ * @example true
1612
+ */
1613
+ full?: boolean;
1614
+ /**
1615
+ * `controller-auto-tuning` only, when `full` is false: the damping ratio of the closed loop, in per mille.
1616
+ * @min 400
1617
+ * @max 2000
1618
+ * @default 1000
1619
+ * @example 1000
1620
+ */
1621
+ dampingRatioPermil?: number;
1622
+ /**
1623
+ * `controller-auto-tuning` only, position tuning only, when `full` is false: the time the step response takes to stay within 5 % of the target.
1624
+ * @min 20
1625
+ * @max 1000
1626
+ * @default 200
1627
+ * @example 200
1628
+ */
1629
+ settlingTimeMs?: number;
1630
+ /**
1631
+ * `controller-auto-tuning` only, velocity tuning only, when `full` is false: the bandwidth of the closed velocity loop, in mHz.
1632
+ * @min 200
1633
+ * @max 100000
1634
+ * @default 5000
1635
+ * @example 5000
1636
+ */
1637
+ bandwidthMilliHz?: number;
1108
1638
  [key: string]: any;
1109
1639
  }
1110
1640
  export interface OutputStageResult {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synapticon/motion-master-client",
3
- "version": "6.0.0-alpha.114",
3
+ "version": "6.0.0-alpha.116",
4
4
  "description": "Isomorphic TypeScript client for Motion Master: the generated HTTP API client, the WebSocket connection, and helpers.",
5
5
  "license": "MIT",
6
6
  "repository": {