ERROR_CODES = {
  0: {"text": "Success", "description": "Operation completed successfully without an error."},
  1: {
    "text": "Warning",
    "description": "Operation completed without an error, but an anomaly occurred that should be brought to the attention of the system operator.",
  },
  -200: {
    "text": "No memory available",
    "description": "There is not sufficient memory to perform the requested operation. Large amounts of memory may be used by the following: loaded GPL procedures, arrays, strings, and the Data Logger. Check if any of these items are unusually large.",
  },
  -201: {
    "text": "System internal consistency error",
    "description": "This error indicates that a condition has been detected that should not be possible if the controller and its system software are operating properly. Most likely, this indicates that a software bug has been encountered. Please report this message along with the process necessary to generate this problem to Precise.",
  },
  -202: {
    "text": "Invalid argument",
    "description": "The value of an argument used in a GPL instruction, built-in method, or console command is not allowed.",
  },
  -203: {
    "text": "FIFO overflowed",
    "description": "An overflow has occurred in a system data structure. Most likely, this indicates that a software bug has been encountered. Please report this message along with the process necessary to generate this problem to Precise.",
  },
  -204: {
    "text": "Not implemented",
    "description": "You have attempted to use a feature of GPL or the Precise Controller that is planned but not implemented.",
  },
  -205: {
    "text": "Missing argument",
    "description": "A required argument for a GPL instruction, built-in method, or console command was not supplied.",
  },
  -206: {
    "text": "Invalid auto execute mode",
    "description": 'The "Auto execution mode" specifies the major motion control function that the controller should perform. For example, the execution of the DIOMotion Blocks and GPL projects are examples of two "Auto execution modes". This error indicates that an invalid mode has been specified. Most likely, the value of "Automatic execution mode" (DataID 200) has been set incorrectly.',
  },
  -207: {
    "text": "Too many",
    "description": "The current operation has attempted to create more items of an internal data structure than is allowed. Most likely, this indicates that a software bug has been encountered. Please report this message along with the process necessary to generate this problem to Precise.",
  },
  -208: {
    "text": "Protection error",
    "description": "You have attempted to read a hidden value, access a secured data area without proper authorization, or use the Data Logger on data that cannot be logged. This error is often generated by GPL application programs that attempt to write to Parameter Database values that cannot be modified when motor power is enabled. In these cases, disable motor power and retry the operation.",
  },
  -209: {
    "text": "Read only",
    "description": "This error message indicates that you have attempted to alter a value that can only be read. For example, this error is generated if you attempt to change the value of an analog input.",
  },
  -210: {
    "text": "Operating system error code",
    "description": "This error message indicates that the underlying real-time operating system (the RTOS) or one of its communications drivers has signaled an error that does not correspond to a standard GPL error. The numeric code contains the RTOS error number.",
  },
  -211: {
    "text": "Option not enabled",
    "description": """This error is generated if you attempt to execute or enable a software or hardware option that is either not available in your system or has not been enabled.  Typically, this indicates that your system software does not support the desired feature or a parameter has not be properly set.  This is different from missing a required license bit, which is indicated by the "License not installed" error message.  Normally, this error includes one of the following codes that further defines the problem.

   1: Split axis capability is not supported by kinematic module.
   2: External trajectory interface is not support by system software.
   3: Ethernet is not supported by the system software.
   4: TCP network protocol is not supported by system software, so Telnet and GDE may not be used.
   5: UDP network protocol is not supported by system software.
   6: Vision interface is not supported by system software.
   7: Motor linearity compensation is either not supported by the kinematic module or is not enabled."
  """,
  },
  -212: {
    "text": "License not installed",
    "description": """A required software license is not installed on your controller.  The name of the missing license is shown after this error message. The license names include:

    (1)   Guidance Programming Language
    (2)   Motion control
    (3)   Conveyor tracking
    (4)   Advanced kinematics
    (5)   Complex kinematics
    (6)   Advanced controls
    (7)   Enhanced encoder
    (8)   Encoder latching
    (9)   RIO motion control
   (10)  Software application
   (11)  G&M code support
   (12)  Motion no kinematics support
   (13)  External trajectory
   (14)  XY compliance
   (15)  Z height detection
   (16)  GuidanceMotion application
   (17)  EtherCAT Master

Older GPL systems may display the license number shown above in ( ) rather than the name. The currently installed licenses can be viewed via the web interface by selecting Utilities>Controller Options or by accessing DataID 112, "Software license option bits".  To obtain a required license, contact your system administrator or Brooks.""",
  },
  -213: {
    "text": "Invalid password",
    "description": "An invalid password was entered for a protected operation or facility. Please re-enter the correct password or ask your system administrator for the correct password.",
  },
  -214: {
    "text": "Cancelled",
    "description": "An operation was initiated that was subsequently cancelled. No further action is required.",
  },
  -215: {
    "text": "No system clock interrupts",
    "description": "Many of the major subsystems of the controller (e.g. the servo code, the trajectory generator, the GPL projects) are serviced by different threads of software that execute independently. This thread execution is governed in part by the ticking of a master system clock. When the system restarts, it automatically tests the system clock to ensure that it is ticking at the correct rate. These errors signify that the system clock is not operating properly. Most likely, this indicates a hardware problem with the main processor board, the MIDS.",
  },
  -216: {
    "text": "System clock interrupts too slow",
    "description": "Many of the major subsystems of the controller (e.g. the servo code, the trajectory generator, the GPL projects) are serviced by different threads of software that execute independently. This thread execution is governed in part by the ticking of a master system clock. When the system restarts, it automatically tests the system clock to ensure that it is ticking at the correct rate. These errors signify that the system clock is not operating properly. Most likely, this indicates a hardware problem with the main processor board, the MIDS.",
  },
  -217: {
    "text": "System clock interrupts too fast",
    "description": "Many of the major subsystems of the controller (e.g. the servo code, the trajectory generator, the GPL projects) are serviced by different threads of software that execute independently. This thread execution is governed in part by the ticking of a master system clock. When the system restarts, it automatically tests the system clock to ensure that it is ticking at the correct rate. These errors signify that the system clock is not operating properly. Most likely, this indicates a hardware problem with the main processor board, the MIDS.",
  },
  -218: {
    "text": "Invalid task configuration",
    "description": "An invalid parameter has been entered associated with one of the major tasks of the system. For example, the update period of the trajectory generator must be specified as a number that is a power of two.",
  },
  -219: {
    "text": "Incompatible FPGA version",
    "description": 'The firmware in the FPGA is not compatible with the hardware or software configuration options in this controller. The FPGA ("Field Programmable Gate Array") controls the robot power sequencing, encoder interfaces, motor current loop and a host of other critical functions. There are multiple versions of FPGA firmware that support various motors, encoders, and other options. Please obtain a compatible version of the FPGA firmware data or modify your configuration parameters. FPGA firmware may be loaded by following the instructions in the FAQ section of the PreciseFlex™ PreciseFlex Library.',
  },
  -220: {
    "text": "Not configured",
    "description": "You have attempted to access some aspect of the system that has not been configured. For example, you have attempted to set a parameter for an axis that was not defined in the configuration database.",
  },
  -221: {
    "text": "Invalid robot type",
    "description": 'A kinematic robot module does not exist for the specified robot type. This typically indicates that a value specified in the "Robot types" (DataID 116) is incorrect. Please review this list of values and look at the information on the available robot kinematic modules.',
  },
  -222: {
    "text": "Remote software incompatible",
    "description": "In a Servo Network system, the indicated slave controller contains software that is not compatible with the master controller. Update the slave controller's software to a compatible version. Normally the master and all slaves should run the identical GPL software version.",
  },
  -223: {"text": "Incompatible system", "description": ""},
  -224: {"text": "FPGA load failed", "description": ""},
  -300: {
    "text": "Invalid device",
    "description": "The device specified for a file or I/O operation is of the wrong type for that operation. Check the spelling of the device name and verify what types of devices are appropriate for the operation you are attempting.",
  },
  -301: {
    "text": "Undefined device",
    "description": "The device specified for a file or I/O operation is not recognized. Check the spelling of the device name. Verify that the device (e.g. remote I/O board) is installed in your system.",
  },
  -302: {
    "text": "Invalid device unit",
    "description": "The unit for a device specified for a file or I/O operation is not valid for that operation. Verify what device's unit is appropriate for the operation you are attempting.",
  },
  -303: {
    "text": "Undefined device unit",
    "description": "The unit for a device specified for a file or I/O operation is not recognized. Verify that the unit (e.g. serial port) is present in your system.",
  },
  -304: {
    "text": "Device already in use",
    "description": "An attempt to open or attach a device has failed because the device is already in use. For example, an attempt has been made to open the /dev/com2 serial port from a GPL program while the hardware MCP that uses the same port is active. Check to make sure that the device you are accessing is available for use.",
  },
  -305: {"text": "Logical device already in use", "description": ""},
  -306: {"text": "Duplicate logical device", "description": ""},
  -307: {"text": "Duplicate physical device", "description": ""},
  -308: {
    "text": "Too many devices",
    "description": "This error indicates that an internal software configuration bug has been encountered. Please report this message along with the process that generated this problem to Precise.",
  },
  -309: {
    "text": "No physical device mapped",
    "description": "This error indicates that an internal software configuration bug has been encountered. Please report this message along with the process that generated this problem to Precise.",
  },
  -310: {
    "text": "Timeout waiting for device",
    "description": "A device has failed to respond within the expected time period. This message may indicate a real error or the timeout may be expected if the system is testing for the presence of a device. Verify that the device is present. Increase the timeout value for the I/O operation.",
  },
  -311: {
    "text": "Date/time not set",
    "description": "An attempt to read the system date or time has failed because the internal clock has not been initialized. Verify that your system contains a real-time clock. If so, this error may indicate a hardware failure such as a dead clock battery.",
  },
  -312: {
    "text": "Invalid date/time specification",
    "description": "An attempt to set the system date or time has failed because the specification does not represent a valid date or time. Enter a valid specification.",
  },
  -313: {"text": "CANOpen driver initialization failure", "description": ""},
  -314: {
    "text": "Device not found",
    "description": "An I/O device is not responding. This message may indicate a real error or the error may be expected if the system is testing for the presence of a device.",
  },
  -315: {
    "text": "NVRAM not responding",
    "description": "A device connected to the I2C bus is not responding. This device may be the system NVRAM or it may be a different device. This message may indicate a real error or it may be expected if the system is testing for the presence of a device.",
  },
  -316: {
    "text": "NVRAM invalid response",
    "description": "A device connected to the I2C bus is not communicating properly. This message indicates a hardware problem. Please report this message along with the process that generated this problem to Precise.",
  },
  -317: {
    "text": "Configuration area invalid",
    "description": "The data in the system configuration area is not valid. The configuration data may have been corrupted. This error should not be seen on a control board that has been initialized. Please report this message along with the process that generated this problem to technical support.",
  },
  -318: {
    "text": "Real-time-clock disabled",
    "description": "The real-time clock is disabled internally. This error should never be seen and indicates a hardware problem. Please report this message to Precise.",
  },
  -319: {
    "text": "Real-time-clock battery failed",
    "description": "The real-time clock battery has failed. This error indicates a hardware problem. Please report this message to Precise.",
  },
  -320: {
    "text": "Device not ready",
    "description": "An attempt was made to access a device that is busy. Depending on the device, it may be attached to a different thread, or it may have not been properly initialized. Try the operation again. Make sure the procedure used to access the device is correct.",
  },
  -321: {
    "text": "Invalid device command",
    "description": "A device has rejected a command because it was not recognized. Check to make sure you are issuing the proper command for the device.",
  },
  -322: {
    "text": "i2c device failure",
    "description": 'Robot power has been turned off because an unrecoverable error has occurred for an I2C device. I2C is used for a number of purposes including to communicate with the remote Z-axis digital I/O for the PrecisePlace 1300/1400 robots. This failure may be due to excessive electrical noise in your system. Check that your motor wiring and cable routing follows Precise guidelines. If your system is not a PP1300/1400, disable this error by setting parameter "Disable i2c errors" (DataID 920) to 1.',
  },
  -323: {
    "text": "Device full",
    "description": "You have attempted to write data to a device that is full. No more data can be written until some of the existing data or files are deleted.",
  },
  -324: {
    "text": "MCP not recognized",
    "description": "The hardware Manual Control Pendant connected to the Front Panel connector is not recognized as a Precise MCP. Consequently, the system cannot communicate with the device and the MCP driver is terminated. Please obtain an authorized MCP or contact Precise to repair your existing MCP.",
  },
  -325: {
    "text": "SIO device failure",
    "description": 'Robot power has been turned off or has been inhibited from turning on because an SIO (RS-485) device has failed to respond to polling requests as expected. Verify that all required SIO devices are connected properly. Verify that only existing SIO devices are enabled in the "SIO mode flags" (DataID 571).',
  },
  -326: {
    "text": "Device not enabled",
    "description": "An I/O operation has failed for a device because it is not enabled. The method for enabling a device depends on the particular device. Verify that any enable flags for the device are set in the configuration database.",
  },
  -327: {
    "text": "Invalid device configuration",
    "description": "Some device configuration parameters are invalid. Check the values of the DataID reporting this error and verify that they are correct.",
  },
  -328: {
    "text": "PMIC not responding",
    "description": "The power management controller is not responding as expected during system startup. This error should never be seen. Please report this message along with the process that generated this problem to technical support.",
  },
  -700: {
    "text": "Thread execution aborted",
    "description": "A GPL user thread has been stopped by request (for example from a Stop command) or a robot error occurred while the robot was attached.",
  },
  -702: {
    "text": "Undefined thread",
    "description": "The thread name specified in a Thread Class method or console command is not known to GPL. Verify that the thread name is correct. Verify that the thread has not been stopped and the name removed from the list of threads.",
  },
  -704: {
    "text": "Missing quote mark",
    "description": 'A double quote character (") has not been found where expected at the end of a string specification or another syntax error in the statement prevented the compiler from finding the quote mark. Fix the statement syntax and add a quote mark if needed.',
  },
  -705: {
    "text": "Value too small",
    "description": "A parameter database value, property value, or method parameter value is smaller than allowed. Check the relevant documentation and change the value to be within the proper range.",
  },
  -706: {
    "text": "Value too large",
    "description": "A parameter database value, property value, or method parameter value is larger than allowed. Check the relevant documentation and change the value to be within the proper range.",
  },
  -707: {
    "text": "Value out-of-range",
    "description": "A parameter database value, property value, or method parameter value is outside the range of allowed values. Check the relevant documentation and change the value to be within the proper range.",
  },
  -708: {
    "text": "Value infinite or NAN",
    "description": 'A numeric value has been encountered that is too large for its new data type, or a floating point value has been encountered that is marked as "Not A Number" (NAN). This error can occur when converting from a larger numeric data type to a smaller one, for example Integer to Byte, or when performing a computation that results in a very large or infinite result, for example dividing by zero, or when computing the square root of a negative number. Check your procedure to eliminate these situations, or add checks to detect and handle them.',
  },
  -709: {
    "text": "Division by 0",
    "description": "Indicates a division by zero was attempted. In matrix (Location) operations, this error can occur if the Z-axis orientation vector of a Cartesian Location has a zero length and the Location is being re-normalized. This can be caused by severe round-off error and can be corrected by normalizing the Location value more often.",
  },
  -710: {
    "text": "Arithmetic overflow",
    "description": "This error indicates that a mathematical operation resulted in a number that is too large to represent. Since the majority of the internal computational operations are performed in double precision arithmetic, this typically indicates a result larger than 10^308 and normally indicates a programming error.",
  },
  -711: {
    "text": "Singular matrix",
    "description": "A matrix operation is being performed and the determinate of the matrix is zero, i.e. the matrix is singular. This is typically detected when the system attempts to invert a matrix. For example, the conversion from joint angles to motor encoder values is represented as a matrix if the axes are mechanical coupled. When the system attempts to automatically compute the inverse conversion factors to go from motor encoder values to joint angles, a matrix inversion must be performed. This error indicates that a meaningful inverse relationship does not exist.",
  },
  -712: {
    "text": "Invalid syntax",
    "description": "If encountered during program compilation, this message indicates that the GPL parser does not understand the current instruction. Either the instruction itself has an error, or it is being used in an unexpected situation. If encountered during execution, the arguments to a command, instruction, or method do not follow the expected format.",
  },
  -713: {
    "text": "Symbol too long",
    "description": "An object or variable name exceeds the system's limit of 128 characters.",
  },
  -714: {
    "text": "Unknown command",
    "description": "The command keyword for a console command is not recognized. Check to make sure you have entered the command correctly. Check that the command is supported by your version of GPL.",
  },
  -715: {
    "text": "Invalid procedure step",
    "description": "An attempt has been made to execute a procedure step that is not executable. For example, during debugging, you have attempted to specify a comment line as the next step to execute.",
  },
  -716: {
    "text": "Ambiguous abbreviation",
    "description": "A command keyword or parameter keyword has been entered that is an abbreviation for more than one command or parameter. Reenter the command specifying a longer abbreviation that matches only one keyword.",
  },
  -717: {
    "text": "Invalid number format",
    "description": 'A numeric constant has been entered that does not match the expected format. For example, a floating point value has been entered with an empty exponent: "2.0E".',
  },
  -718: {
    "text": "Missing parentheses",
    "description": 'After a left parenthesis "(" was encountered, the matching right parenthesis ")" was not found where expected. This error is sometimes reported when a syntax error occurs in the argument list for a procedure call, even if the right parenthesis is present. Add the missing parenthesis or fix any syntax errors.',
  },
  -719: {
    "text": "Illegal use of keyword",
    "description": "A GPL keyword has been encountered in a place where it is invalid. For example, a keyword occurs in a declaration where it is not allowed, or an attempt was made to create a variable with the same name as a GPL keyword. Remove the keyword or rename the variable.",
  },
  -720: {
    "text": "Unexpected character in expression",
    "description": "An unexpected character was encountered while evaluating a numeric or string expression. For example an operator was found in an unexpected place. Correct the expression syntax.",
  },
  -721: {"text": "Conflict with reserved keyword", "description": ""},
  -722: {
    "text": "Unexpected text at end of line",
    "description": "Unexpected characters were found at the end of a statement. There may have been a previous syntax error that confused the compiler, or a missing comment character. Correct the line.",
  },
  -723: {
    "text": "Invalid statement label",
    "description": "A statement label has been placed where it is not allowed, for example outside a procedure, or a Goto statement refers to a statement label that was not defined. Move or define the label.",
  },
  -724: {"text": "Invalid End keyword", "description": ""},
  -725: {
    "text": "Unknown data type",
    "description": "During XML processing, a node with an unknown data type has been encountered. Correct the XML document.",
  },
  -726: {
    "text": "Data type required",
    "description": 'A variable or procedure declaration is missing the "As" clause that specifies the data type. Add the appropriate clause and data type.',
  },
  -727: {
    "text": "Cannot redefine symbol",
    "description": "An attempt has been made to define a symbol that already exists in the same context. This symbol may be the name of a project, module, class, procedure or variable. Change the name or scope of the symbol.",
  },
  -728: {"text": "Procedure too long", "description": ""},
  -729: {
    "text": "Undefined symbol",
    "description": "A symbol has been encountered that is not declared within the current context. This symbol may be the name of a project, module, class, procedure or variable. Declare the symbol.",
  },
  -730: {
    "text": "Invalid symbol type",
    "description": "A known symbol has been encountered in a statement but its type is not valid where it is being used. For example a Sub procedure name is used in an expression as if it were a function. Correct the statement.",
  },
  -731: {
    "text": "Unmatched parentheses",
    "description": 'A right parenthesis ")" was encountered without being preceded by a left parenthesis "(". Add a "(" where appropriate, or remove the extra ")".',
  },
  -732: {
    "text": "Invalid procedure end",
    "description": "When compiling a procedure, a top-level statement has been found other than the expected matching procedure end statement. Verify that the correct matching end statement is present.",
  },
  -733: {
    "text": "Not a top-level statement",
    "description": "A statement has been encountered outside of a Module or Class definition block. Move the statement inside the block.",
  },
  -734: {
    "text": "Object not bound to class",
    "description": 'A variable had been declared to be of type "Object" which is not supported by GPL. Correct the declaration.',
  },
  -735: {
    "text": "Too many nested blocks",
    "description": "This typically indicates that a individual GPL procedure contains too many control structures, e.g. If..Then..Else or For loops, that are embedded within each other. The system currently has a limit of 100 nested control structures. To correct this problem, the procedure must be rewritten to reduce the nesting depth.",
  },
  -736: {
    "text": "Duplicate statement label",
    "description": "An identical duplicate statement label has been encountered when compiling either a GPL program or a command script. Labels must be unique.",
  },
  -737: {
    "text": "Too many errors, compile cancelled",
    "description": "The compiler has encountered more than 8 errors and is stopping the compile operation. Fix the errors already listed and compile again.",
  },
  -738: {
    "text": "Invalid data type",
    "description": "A data type keyword has been encountered where it is not allowed. For example, a variable has been declared as type Function.",
  },
  -739: {
    "text": "Cannot change built-in symbol",
    "description": "An attempt has been made to add to a built-in class or module. These built-in classes cannot be changed.",
  },
  -740: {"text": "Empty procedure", "description": ""},
  -741: {
    "text": "Argument mismatch",
    "description": "The arguments in a statement, console command or procedure call do not match the parameters for that statement, console command or procedure call. Change the arguments so that they match the required parameters.",
  },
  -742: {
    "text": "Compilation errors",
    "description": "A compilation has failed because of detected errors. The specific errors are listed during the compilation operation. Or, an attempt has been made to start a project that contains compilation errors. Fix the errors and recompile.",
  },
  -743: {
    "text": "Invalid project file",
    "description": "The Project.gpr file in your project folder is not valid. This file is normally automatically generated and managed by GDE. If you edited this file by hand, double-check that the format is valid. Otherwise use GDE to rebuild the project or restore your project from a backup.",
  },
  -744: {
    "text": "Invalid start procedure",
    "description": 'The "start" procedure specified for your project or by a Thread.Start method could not be found or is of the wrong type. Start procedures must be Public and of type Sub or Function. Correct the start procedure specification.',
  },
  -745: {
    "text": "Project already exists",
    "description": "An attempt was made to load a project with the same name as a project currently loaded. Change the name of the second project, or unload the first project.",
  },
  -746: {
    "text": "Interlocked for read",
    "description": "An attempt was made to change a system resource that is currently in use. Wait a short time and try again in case the lock was temporary. Otherwise, determine the thread that is using the resource and stop it. Then, try accessing the resource again.",
  },
  -747: {
    "text": "Interlocked for write",
    "description": "An attempt was made to change a system resource that is actively being changed. For example two threads might be attempting to delete the same project simultaneously. Wait a short time and try again. Write locks are normally temporary",
  },
  -748: {
    "text": "No matching control structure",
    "description": "A GPL procedure is missing statements that are necessary to properly terminate one or more control structures. For example, a For statement might be missing its matching Next statement or an If instruction might not be properly terminated by an End If statement or a Case statement may not immediately follow a Select statement.",
  },
  -749: {
    "text": "Thread already exists",
    "description": "An attempt was made to create a thread with the same name as one that already exists. Unload the first thread, or rename the second thread.",
  },
  -750: {
    "text": "Invalid when thread active",
    "description": "An attempt was made to perform an operation that cannot be executed while a thread is active. For example, you may have attempted to start a thread that is already active or you may have attempted to delete a project with an active thread.",
  },
  -751: {
    "text": "Timeout starting thread",
    "description": "A thread has not started or restarted within 1 second of being requested to execute. This error often occurs when restarting a thread that is still winding down because it is taking longer than expected to perform its cleanup procedures. Stop or pause the thread and repeat the operation.",
  },
  -752: {
    "text": "Timeout stopping thread",
    "description": "A thread has not stopped within 3 seconds of when a request to stop it occurred. The thread may be waiting for some operation to complete before it can stop. For example, it may be waiting for a robot motion or I/O operation to complete. This is not a critical error and the thread will stop when it completes whatever it is doing. This error is commonly seen if a thread stop request occurs after a thread has started a long robot motion. To stop a thread quickly in this case, issue a soft E-Stop just prior to requesting the thread to stop.",
  },
  -753: {
    "text": "Project not compiled",
    "description": "An attempt was made to access a project that is not compiled. The project may not exist, or it may be loaded but not compiled. Load the project if not loaded and then compile it.",
  },
  -754: {
    "text": "Thread execution complete",
    "description": "An attempt was made to continue execution of a thread that has run to completion. You must restart the thread with a Start command or Thread Start method.",
  },
  -755: {
    "text": "Thread stack too small",
    "description": "An attempt was made to allocate more data on a thread stack than the stack is able to accommodate. You may have more nested procedure calls than expected or you may have allocated too many procedure-local variables. Verify that you do not have a program recursion bug. Check the stack usage with the Show Stack command. If required, specify a larger thread stack size with the Start command or the Thread Class constructor.",
  },
  -756: {
    "text": "Member not shared",
    "description": "You have attempted to associate a Delegate object with a non-shared class procedure, but you have not provided an object reference in the Delegate New clause. Change your New clause to provide an object reference, or change your Delegate to refer to a shared procedure.",
  },
  -757: {
    "text": "Object not instantiated",
    "description": 'An object is being assigned to on the left-hand side of an equal sign or is being referenced in an expression and the object value block has not been allocated. To correct this problem, use the "New" qualifier in the DIM statement that declared the object to allocate its value block.',
  },
  -758: {
    "text": "No Get Property defined",
    "description": "An attempt has been made to read the value of a write-only property (that does not support Get). This can occur by attempting to assign a value to a write-only property with an assignment operator such as +=. Eliminate the read of the property.",
  },
  -759: {
    "text": "Undefined value",
    "description": "An attempt was made to read a variable or procedure argument that does not have any value assigned. Be sure to assign a value to a variable before referring to it.",
  },
  -760: {
    "text": "Invalid assignment",
    "description": "An attempt was made to assign a value to a variable with an incompatible data type. For example you cannot assign an object of one class to a variable for another class.",
  },
  -761: {
    "text": "Cannot have list of variables",
    "description": "A declaration with an initializer may define only one variable. A list of variables is not allowed in this situation. Break your declaration into multiple statements.",
  },
  -762: {
    "text": "Location not a Cartesian type",
    "description": 'A property or a method of a Location object requires a Cartesian type value, but the Location is an Angles type instead. For example, it is invalid to reference the "X" property of a Location defined as an Angles type.',
  },
  -763: {
    "text": "Location not an angles type",
    "description": 'A property or a method of a Location object requires an Angles type value, but the Location is a Cartesian type instead. For example, it is invalid to reference the "Angle" property of a Location defined as a Cartesian type.',
  },
  -764: {
    "text": "Invalid procedure overload",
    "description": "An attempt was made to declare a procedure with the same name as an existing procedure, and with arguments that match too closely so that it cannot be considered an overload. Change the arguments so that the two procedures can be distinguished by the compiler.",
  },
  -765: {
    "text": "Array index required",
    "description": "An array reference was found that does not have the correct number of index arguments specified for the number of array dimensions. Specify the correct number.",
  },
  -766: {
    "text": "Array index mismatch",
    "description": "An array argument does not have the same number of dimensions as an corresponding array parameter. Change the arrays so that the dimensions match.",
  },
  -767: {
    "text": "Invalid array index",
    "description": "An array index value is negative or greater than the maximum permitted by its declaration. Or, an array argument was specified that does not contain sufficient elements for the matching array parameter.",
  },
  -768: {
    "text": "Unsupported array access",
    "description": "An attempt was made to access an array in a way that is not supported. This error should never occur in GPL 3.1 or later.",
  },
  -769: {
    "text": "Reference frame wrong type",
    "description": "A property or a method of a RefFrame object requires a particular type of reference frame value and the type is incorrectly set. For example, the PalletIndex property is only valid when the RefFrame Type is set to pallet.",
  },
  -770: {
    "text": "Reference frame undefined data",
    "description": "When the position of a reference frame is evaluated either directly or as part of the absolute value of a Location that is relative to the reference frame or when a property of a reference frame is being accessed, this error is generated if the Loc of the reference frame is not defined. To correct this problem, assign a defined Cartesian Location value to the refframe.Loc property.",
  },
  -771: {
    "text": "Stack frame does not exist",
    "description": 'A command that accepts a stack frame number has specified a stack frame that does not exist. Use the "show stack" command with no frame argument to display all frames and determine the maximum valid frame number.',
  },
  -772: {
    "text": "Ambiguous Public reference",
    "description": "References to top-level public variables do not need to be qualified by their containing module or class provided that they are unique. However if the same public variable appears in more than one module or class, you must precede its name with the name of its module or class.",
  },
  -773: {
    "text": "Missing module end",
    "description": 'An "End Module" or "End Class" statement was not found where it was expected. Add the appropriate statement.',
  },
  -774: {
    "text": "Too many breakpoints",
    "description": 'More than 32 breakpoints have been set in GPL procedures. Remove some of the existing breakpoints or issue "Clear All Breakpoints" and set fewer breakpoints.',
  },
  -775: {
    "text": "Duplicate breakpoint",
    "description": 'A breakpoint was set on a line that already contains a breakpoint. If GDE does not show a breakpoint on this line, GDE could be out-of-sync with GPL. Try disconnecting and reconnecting GDE. Try issuing "Clear All Breakpoints" and set your breakpoint again.',
  },
  -776: {
    "text": "No instruction at this line",
    "description": 'A breakpoint was set in a procedure that does not exist or on a line that contains an instruction that does not allow breakpoints. In the second case, GPL tries to set a breakpoint on the next valid instruction, but this error will be generated if there is no valid instruction before the end of the procedure.\n\nThe error can occur if you edit your program and re-compile after adding/removing lines while having breakpoints set. It could also occur if GDE is out-of-sync with GPL. Try disconnecting and reconnecting GDE. Try issuing "Clear All Breakpoints" and set your breakpoints again.',
  },
  -778: {
    "text": "Objects not allowed for class",
    "description": "An attempt was made to use the New clause to allocate an object for a built-in class that does not allow objects.",
  },
  -779: {
    "text": "Thread paused in eval",
    "description": 'A console command such as "Show Variable" has invoked a procedure that has paused due to an error or breakpoint. The command cannot continue. Normally this error is not seen.',
  },
  -780: {
    "text": "Unsupported procedure reference",
    "description": "A console command or a Const statement has attempted to call a user-defined function or property. This type of access is not supported.",
  },
  -781: {
    "text": "Missing string",
    "description": 'The system is expecting a string value, such as following a concatenation operator ("&") but a string value was not found.',
  },
  -782: {
    "text": "Object value is Nothing",
    "description": 'An object is being referenced in an expression of some type, and its value is not allocated and therefore undefined. To correct this problem, use the "New" qualifier in the DIM statement to allocate the value, and then define the required properties.',
  },
  -783: {
    "text": "Short string",
    "description": "The number of characters stored in a string variable has been found to be less than is indicated by the string length. This is an abnormal condition and might occur if two threads are writing to the same string variable at the same time.",
  },
  -784: {
    "text": "Invalid property",
    "description": "An object property is being accessed that is not valid given the settings of the other properties of the object. For example, an Exception object can be marked as a general error or a robot error. Depending upon this setting, certain properties are not accessible.",
  },
  -785: {
    "text": "Branch not permitted",
    "description": "A GoTo instruction specifies a branch to a instruction that is not permitted. This typically means that a GoTo is attempting to branch into or out of a Try...Catch...Finally...End Try block that is not permitted. See the section on Exception handling for more information.",
  },
  -786: {
    "text": "Project generated error",
    "description": "This error is never generated automatically and is provided solely as a convenience for GPL application programs. GPL projects can use the Throw instruction to emit this error code to indicate special application errors. The exception Qualifier can be used to provide additional information.",
  },
  -787: {
    "text": "Invalid in shared procedure",
    "description": "An attempt has been made to access a non-shared and non-constant class variable from within a shared class procedure. Shared class procedures are not associated with an object instance, so they cannot access object variables. Either the procedure should not be declared Shared, or the class variable of interest should be declared Shared or Const.",
  },
  -788: {
    "text": "Inconsistent MOVE.TRIGGER mode",
    "description": "Most likely, this indicates that a MOVE.TRIGGER instruction was executed that specified that the signal should be triggered a distance from the start or the end of the next motion, but the motion was not a straight-line or arc motion. To correct this problem, change the trigger mode or the motion type.",
  },
  -789: {
    "text": "Procedure exception",
    "description": "A GPL procedure instruction has detected an exception that interrupts normal program execution. This error is normally handled internally by GPL and is not seen by the user.",
  },
  -790: {
    "text": "Invalid static initializer",
    "description": "An attempt has been made to call a user-defined method in the initializer of a statically allocated variable or Const value. These variables include Module level variables, Shared class variables, and Static procedure variables. User-defined methods include constructors (New method) for user-defined classes.",
  },
  -791: {
    "text": "Conveyor must be base RefFrame",
    "description": "Conveyor type RefFrame objects cannot themselves have a defined RefFrame value. That is, a Conveyor reference frame must always be the last (base) reference frame in a series of relative reference frames. However, other types of RefFrame objects can be relative to (above) Conveyor reference frames.",
  },
  -792: {
    "text": "undefined",
    "description": "Before a Conveyor RefFrame can be used, its ConveyorRobot property must be set to specify the number of the Robot whose first axis provides the encoder signal for the conveyor. Without this information, the system has no way to determine the position of a conveyor.",
  },
  -793: {
    "text": "Arc cannot transition conveyors",
    "description": "Circular interpolated motions can be performed relative to a conveyor belt. However, this type of motion cannot be used to accelerate on to a conveyor or off of a conveyor. That is, all three points that define a circular interpolated motion must all be relative to the same conveyor belt. To transition on to or off of a conveyor, use a straight-line Cartesian motion.",
  },
  -794: {
    "text": "ZClearance property not set",
    "description": "A Move.Approach instruction was executed that referenced a Location whose ZClearance property has not been set to a realistic value. This instruction attempts to move the robot's tool to \"ZClearance\" mm above the Location's position. When a Location is first created, its ZClearance property is set to a very large number that cannot be reached. To correct this problem, set the Location's ZClearance property to the desired value in mm before executing the Approach instruction.",
  },
  -795: {
    "text": "XML documents do not match",
    "description": "An attempt was made to define a parameter that is already defined. Only occurs in CommandProgram class methods.",
  },
  -796: {
    "text": "No delegate defined",
    "description": "A reference has been made to an undefined delegate. Verify that any referenced delegate has been properly defined.",
  },
  -797: {
    "text": "Object not up-to-date",
    "description": "An object that depends on another object or data structure has been referenced after the underlying data structure has been changed. Only occurs in CommandProgram class methods.",
  },
  -798: {
    "text": "No module defined",
    "description": "An attempt has been made to declare a variable when no containing module has been defined. Only occurs in CommandProgram class methods.",
  },
  -799: {
    "text": "XML error",
    "description": "An XML library error has occurred while parsing, accessing, or storing an XML document. This error is accompanied by an error code which further qualifies the error. See the XmlDoc.Message method for a string value that shows the error details.",
  },
  -800: {
    "text": "No XML document",
    "description": "An attempt has been made to access an XmlDoc class object that is not associated with any document. Use the XmlDoc LoadString, LoadFile, or New methods to create a document.",
  },
  -801: {
    "text": "No XML node",
    "description": "An attempt has been made to access an XmlNode class object that is not associated with any document node. This dissociation can occur if the referenced node is removed while the XmlNode object is still pointing to it. Check your program flow to see if nodes are being removed when you do not expect it. Remember that removing a parent may remove its children also.",
  },
  -802: {
    "text": "Undefined XML name",
    "description": "A search for a named node using an XmlNode method has failed to find the named node. If you are not sure whether or not the node exists, use the HasElement or HasAttribute methods to check or enclose your search within a Try / Catch block.",
  },
  -803: {
    "text": "Invalid XML node type",
    "description": 'An attempt has been made to use an XML node of a particular type where it is not allowed. For example, the parents of "attribute" nodes must be "element" nodes, and the parents of "element" nodes must be nodes of type "element", "entity", "document" or "htmldocument".',
  },
  -804: {
    "text": "XML documents do not match",
    "description": "An attempt was made to add a XML node that is a member of one document to a second, different document. This is not permitted. Use the XmlNode.Clone method, with the second parameter specified, to create a clone of the node on an alternate document. You can add the clone to the second document.",
  },
  -805: {
    "text": "Invalid circular reference",
    "description": "A Const symbol declaration refers to other Const symbols in a circular manner such that the original symbol references itself. This is not permitted.",
  },
  -806: {
    "text": "Invalid Const reference",
    "description": "A Const symbol declaration refers to non-constant values, such as user variables or functions. This is not permitted. Const symbols may only be defined in terms of constants, other Const symbols, and built-in system functions.",
  },
  -807: {
    "text": "Invalid exception",
    "description": "The exception object parameter to a Throw statement is invalid. Probably the ErrorCode property of the exception is not set to a negative value. Verify that you are setting the ErrorCode property to a negative value after creating the exception object.",
  },
  -808: {
    "text": "Branch out of Finally block not permitted",
    "description": "An attempt has been made to exit from the Finally block of a Try … End control structure by using a statement such as a Goto, End, Exit, or Return. Finally blocks must always continue to the End Try statement.",
  },
  -809: {
    "text": "Expression too complex",
    "description": "An attempt had been made to evaluate an expression that contains more the 32 objects, or that contains object references in a recursive loop. For example, a reference frame that refers to itself. Break the expression into multiple statements or remove any recursive references.",
  },
  -810: {
    "text": "Unexpected end of line",
    "description": "The compiler has encountered the end of a line at an unexpected place, for example in the middle of an incomplete expression. Correct the syntax of the indicated line.",
  },
  -811: {
    "text": "No Set Property defined",
    "description": "A Property definition has been encountered that is not declared ReadOnly and does not contain a Set statement. Either add a Set … End Set block or add the ReadOnly keyword to your Property definition.",
  },
  -812: {
    "text": "Not allowed in factory test system",
    "description": "A special limited functionality version of GPL is loaded into the controller and one of the eliminated functions has been invoked. Replace the GPL system with the latest version available on the Precise Support website.",
  },
  -1009: {
    "text": "No robot attached",
    "description": "A function or method was executed that required that a robot be ATTACHED. This error is often generated if you attempt to execute one of the methods in the Move Class without first attaching the robot. Correct your GPL program by inserting a Robot.Attached method prior to executing the instruction that contains the Move Class method.",
  },
  -1000: {
    "text": "Invalid robot number",
    "description": "A robot number has been specified that is less than 1 or more than the number of configured robots.",
  },
  -1001: {
    "text": "Undefined robot",
    "description": 'A robot number must be specified (1 to N), but no number was defined. For example, this error can occur if you are referencing a Parameter Database value that requires that a robot be specified as the "unit" (second) parameter but this value is left blank.',
  },
  -1002: {
    "text": "Invalid axis number",
    "description": "An axis number has been specified that is less than 1 or more than the number of axes configured in the referenced robot. For example, this error will be generated if you are accessing a location's angle value (location.angle(n)) but the axis number is undefined or set to 0.",
  },
  -1003: {
    "text": "Undefined axis",
    "description": "An axis has been specified that is not configured for the referenced robot. This can occur if an axis bit mask has been specified that references an axis that is not currently configured.",
  },
  -1004: {
    "text": "Invalid motor number",
    "description": "A motor number has been specified that is less than 1 or more than the number of motors configured in the referenced robot.",
  },
  -1005: {
    "text": "Undefined motor",
    "description": "A motor has been specified that is not configured for the referenced robot. This can occur if a motor bit mask has been specified that references a motor that is not currently configured.",
  },
  -1006: {
    "text": "Robot already attached",
    "description": "An Auto Execution task or a GPL project has attempted to gain control of a robot by executing a Robot.Attach method or similar function, but the specified robot is already in use by another task. Alternately, this error is generated if you attempt to Attach or Select a robot, but the task is already attached to a different robot.",
  },
  -1007: {
    "text": "Robot not ready to be attached",
    "description": 'An Auto Execution task or a GPL project has attempted to gain control of a robot by executing a Robot.Attach method or similar function, but the specified robot is not in a state where it can be attached. If this was generated by a GPL project, it might indicate: That the system is configured to execute DIOMotion blocks instead of a GPL motion program (DataID 200) or "Auto start auto execute mode" (DataID 202) is not set to TRUE. If so, please check the Setup>Startup Configuration web page to verify the current setup.',
  },
  -1008: {
    "text": "Can't detached a moving robot",
    "description": "An operation is attempting to Detach a robot that is currently moving. Normally, it is not possible to generate this error condition because the Robot.Attached method automatically waits for the robot to stop before attempting the detach operation.",
  },
  -1010: {
    "text": "No robot selected",
    "description": 'A function or method was executed that required that the robot be SELECTED. By default, the first robot or the Attached robot is set as the selected robot. A number of "readonly" operations require that a robot be selected, e.g. location.Here. Correct your GPL program by inserting a Robot.Selected method prior to executing the instruction that generated the exception.',
  },
  -1011: {
    "text": "Illegal during special Cartesian mode",
    "description": "The robot is performing a special Cartesian trajectory mode such as conveyor tracking, outputting a DAC signal based upon the Cartesian tool tip speed, performing real-time trajectory modification, etc. When the trajectory generator is in this mode, the requested operation that produced this error is not permitted to execute. For example, jogging or moving along a joint interpolated trajectory or changing the tool length cannot be performed while tracking a conveyor belt. You must either terminate the current Cartesian trajectory mode with a Robot.RapidDecel or other means before initiating the new robot control mode or you must modify your program to use a method consistent with the current trajectory mode. For example, if you attempted to initiate a joint interpolated motion, use a Cartesian straight-line motion instead.",
  },
  -1012: {
    "text": "Joint out-of-range",
    "description": "This indicates that the specified robot axes are either beyond or were attempted to be moved beyond their software limits, i.e. outside of their permitted ranges of travel. This error is also generated if you attempt to set the minimum and maximum soft and hard joint limits to inconsistent values. If you are narrowing the limits, you should set the new soft limits first and then change the hard limits. If you attempt to make both changes at the same time with the web interface, the system will process the new hard limits first, determine that they violate the old soft limits, and generate this error message.",
  },
  -1013: {
    "text": "Motor out-of-range",
    "description": "This indicates that the specified robot motors are either beyond or were attempted to be moved beyond their software limits. This error is also generated if you attempt to set the minimum and maximum soft and hard motor limits to inconsistent values. For most robots, this error code will never be generated because the joint limits will be used exclusively. However, some robot's have coupled motors such that it may be possible to not violate a joint limit and still encounter the extreme travel limit of a motor. In these cases, this error message may be generated even when it appears that the robot's joint's are within their permitted ranges of travel.",
  },
  -1014: {
    "text": "Time out during nulling",
    "description": 'At the end of a program generated motion, if the axes of the robot take too long to achieve the "InRange" constraint limits, this error message will be generated and program execution will be terminated. This may indicate that the InRange limit has been set too tightly or that the robot may not be able to get to the specified final position due to an obstruction.',
  },
  -1015: {
    "text": "Invalid roll over spec",
    "description": "The Continuous Turn (encoder roll-over compensation) angle (DataID 2302) was set non-zero for an axis and the axis is not designed to support continuous turning. Please review the information for your kinematic module in the Kinematic Library documentation and ensure that the axis has been designed to support this feature.",
  },
  -1016: {
    "text": "Torque control mode incorrect",
    "description": "Either the system is in torque control mode and should not be for the currently execution instruction or the system should be in torque control mode but is not. This can be generated in the following situations: Torque control mode is active and an instruction is executed to start External Trajectory mode, Jog Control mode, or torque control mode. An instruction is issued to set the torque values, but no motors are in torque control mode.",
  },
  -1017: {
    "text": "Not in position control mode",
    "description": "A motion control instruction was initiated that requires that the robot be in the standard position controlled mode and the robot is in a special control mode, e.g. velocity control or jogging mode. For example, to initiate any of the following, the robot must be in the standard position control mode: torque control mode, velocity control mode, jog mode or any of the Move Class position controlled methods (e.g. Move.Loc).",
  },
  -1018: {
    "text": "Not in velocity control mode",
    "description": "This error is generated if an instruction attempts to set the velocity mode speeds of an axis, but the system is not in velocity control mode.",
  },
  -1019: {
    "text": "Timeout sending servo setpoint",
    "description": "The GPL trajectory generator sends a setpoint to the servos at the time interval determined by DataID 600, (Trajectory Generator update period in sec). This error occurs if a new setpoint is ready but the previous setpoint has not been sent. Verify that the DataID 603 (Servo update period in sec) value is one-half or less than the value of DataID 600 (Trajectory Generator update period in sec). In a servo network system, this error may indicate a network failure or unexpected network congestion. Provided that DataID 600 and 603 are set properly, this error should never be seen in a non-servo-network system. If the problem persists, contact Precise.",
  },
  -1020: {
    "text": "Timeout reading servo status",
    "description": 'The servos send status information to GPL at the time interval determined by DataID 600, (Trajectory Generator update period in sec). This error occurs if no status information has been received by GPL for the past 32 milliseconds. If this error occurs when you are configuring a new controller system, it might indicate that you have changed some system parameters that are marked as "Restart required". However, you have attempted to operate the system without rebooting the controller. This can be corrected by restarting the controller. In a servo network system, this error may indicate a network failure or unexpected network congestion. This error should never be seen in a properly configured non-servo-network system. If the problem persists, contact Precise.',
  },
  -1021: {
    "text": "Robot not homed",
    "description": 'An operation was invoked that requires that the robot\'s motors be homed. If a robot is equipped with incremental encoders, when the controller is restarted, the system does not have any knowledge of where each axes is located in the workspace. Homing establishes a repeatable "zero" position for each axis. The robot can be homed by pressing a button on the web Operator Control Panel, the web Virtual Manual Control Panel or via a program instruction.',
  },
  -1022: {
    "text": "Invalid homing parameter",
    "description": "While executing the homing sequence an invalid parameter was encountered. This indicates that one of the Parameter Database values that controls homing (DataID 28xx) has been incorrect set. For example, an illegal homing method may be specified (DataID 2803) or the homing speed may be zero (DataID 2804).",
  },
  -1023: {
    "text": "Missed signal during homing",
    "description": "During the homing operation with the robot moving, an error was detected prior to finding the signal that was expected. The detected error is most likely caused by an unexpected hardstop encountered or a over-travel limit switch tripping.",
  },
  -1024: {
    "text": "Encoder index disabled",
    "description": 'This is normally generated by the homing routines. If a selected homing method tests for an encoder zero index signal and the encoder index is not enabled, this error is generated. This typically occurs if the "Encoder counts used for resolution calc" (DataID 10203) or the "Encoder revs used for resolution" (DataID 10204) are not properly setup.',
  },
  -1025: {
    "text": "Timeout enabling power",
    "description": 'A request to enable robot power has failed to complete within the timeout period. Either a hardware failure has prevented power from coming on, or the timeout period is too short. Check the System Messages on the web interface Operator Control Panel for additional errors that may indicate a hardware failure. Verify that the controller is properly cabled. Try increasing the value of parameter "Timeout waiting for power to come on in sec" (DataID 262). This error may also occur as a GPL exception if power does not come on when the Controller.PowerEnabled method is used with a non-zero timeout parameter.',
  },
  -1026: {
    "text": "Timeout enabling amp",
    "description": 'Robot power has been turned off during the robot power-on sequence because one or more power amplifiers have not become ready within the timeout period. Please try the following procedures: Check the System Messages on the web interface Operator Control Panel for additional errors that may indicate a hardware failure. Verify that the controller is properly cabled. Try increasing the value of parameter "Timeout waiting for amps to come on in sec" (DataID 264). If this occurs when the controller is first booted, try repeating the enable power operation after delaying for 1 minute. This error message can be generated if the robot includes absolute encoders that take a minute or so to complete their initialize before becoming ready to operate.',
  },
  -1027: {
    "text": "Timeout starting commutation",
    "description": 'Robot power has been turned off during the robot power-on sequence because one or more motors have not completed their commutation sequence within the timeout period. Check the System Messages on the web interface Operator Control Panel for additional errors that may indicate a hardware failure. Try increasing the value of parameter "Timeout waiting for commutation in sec" (DataID 266). Verify that the controller is properly cabled and that the encoders and motors are wired correctly. See documentation section First Time Mechanism Integration and verify that the controller commutation parameters are set correctly for your motor and encoder combination. Verify that the FPGA firmware on the controller supports your motor and encoder combination.',
  },
  -1028: {
    "text": "Hard E-Stop",
    "description": 'A hard E-Stop condition has been detected. Any robot motion in progress is stopped rapidly and robot power is turned off. One the following has occurred: A front panel E-Stop loop ("ESTOP_L 1" or "ESTOP_L 2") has been broken. The digital input signal specified by "Hard E-Stop DIN" (DataID 244) has been asserted. The parameter database item "Hard E-Stop" (DataID 243) has been set to TRUE. A "fatal" or "severe" error is detected and GPL automatically internally asserts an E-stop as a safety precaution to ensure that motor power is disabled. When a hard e-stop is asserted for any reason, if the "E-stop delay" (DataID 267) is set too short, it is possible that a "Amplifier under-voltage" error (-3109) will also be generated due to the DC motor bus voltage dropping before the amplifiers are disabled.',
  },
  -1029: {
    "text": "Asynchronous error",
    "description": "An error signal from the servos or trajectory generator has been received by GPL, but no specific error code has been received. The error log entry immediately following this one normally indicates the actual error. Error signaling within the motion subsystem is a two-step process. When an error is first detected, a signal is sent to GPL immediately so that a controlled deceleration sequence can begin. This first signal generates a -1029 error code. Several milliseconds later, a more specific error code is sent to identify the source of the error. This second error code overwrites the -1029 error. Error -1029 is only seen if the error log is sampled after the initial error signal is received and before the specific error code is received.",
  },
  -1030: {
    "text": "Fatal asynchronous error",
    "description": 'A severe error signal from the servos or trajectory generator has been received by GPL, but no specific error code has been received. The error log entry immediately following this one normally indicates the actual error. Error signaling within the motion subsystem is a two-step process. When a severe error is first detected, a signal is sent to GPL immediately so that a controlled deceleration sequence can begin. This first signal generates a -1030 error code. Several milliseconds later, a more specific error code is sent to identify the source of the error. This second error code overwrites the -1030 error. Error -1030 is only seen if the error log is sampled after the initial error signal is received and before the specific error code is received. Unlike standard errors, a severe error prevents robot power from being enabled until the controller is rebooted or "Reset fatal error" (DataID 247) is set to 1.',
  },
  -1031: {
    "text": "Analog input value too small",
    "description": 'When reading an analog input signal, if after the scale and offset is applied, the value of the signal is lower than the limit set by "Gen AIO In min scaled value" (DataID 526), the analog value is set to the minimum value and this error is generated.',
  },
  -1032: {
    "text": "Analog input value too big",
    "description": 'When reading an analog input signal, if after the scale and offset is applied, the value of the signal is higher than the limit set by "Gen AIO In max scaled value" (DataID 527), the analog value is set to the maximum value and this error is generated.',
  },
  -1033: {
    "text": "Invalid Cartesian value",
    "description": "For robots with less than 6 independent degrees-of-freedom, certain combinations of tool orientations and positions are not possible. This does not indicate an axis limit stop error such as when a program attempts to move a linear axis beyond its end of travel. This error refers to positions and orientations that are not possible even if each axis of the robot has an unlimited range of motion. For example, for a 4-axis Cartesian robot with a theta axis, the tool cannot be rotated about the world X or Y axis. So if an instruction has a destination that requires that the tool be moved from pointing down to pointing up, this error will be generated.",
  },
  -1034: {
    "text": "Negative overtravel",
    "description": "This is generated when the optional negative travel limit hardware switch has been tripped. This error indicates that a specified axis it outside of its permitted range-of-motion.",
  },
  -1035: {
    "text": "Positive overtravel",
    "description": "This is generated when the optional positive travel limit hardware switch has been tripped. This error indicates that a specified axis it outside of its permitted range-of-motion.",
  },
  -1036: {
    "text": "Kinematics not installed",
    "description": 'An operation was invoked that requires that the system be able to convert between joint and Cartesian (XYZ) coordinates. However, the system software has not been configured with a robot kinematics (geometry) module. The kinematic modules are selected using the "Robot types" (DataID 116) and are described in the Kinematics Library section of the PreciseFlex Library. Select an appropriate module and restart the system. If there is not an appropriate kinematics module, contact Precise.',
  },
  -1037: {
    "text": "Motors not commutated",
    "description": "The operation that was attempted may not require that the robot's motors be homed, however, they must have their commutation reference established. Setting the commutation reference provides the controller with the knowledge of how to energize the individual motor phases as the motor rotates. For example, motors can be placed into torque control mode after they have been commutated and without homing the motors.",
  },
  -1038: {
    "text": "Project generated robot error",
    "description": "This error is never generated automatically and is provided solely as a convenience for GPL application programs. GPL projects can use the Throw instruction to generate this special error to indicate special application errors that are robot specific.",
  },
  -1039: {
    "text": "Position too close",
    "description": "This indicates that an XYZ destination is too close to the center of the robot and cannot be reached. For example, your robot may have an inner and an outer rotary link that dictates the radial distance of the gripper. If the outer link is shorter than the inner link, there will be a circular region at the center of the robot that cannot be accessed. In other cases, if the inner and outer link are the same lengths, the robot may be able to reach the center position, but such a position might be a mathematical singularity where two or more joints degenerate into the same motion. These types of conditions are signaled by this error code.",
  },
  -1040: {
    "text": "Position too far",
    "description": "This indicates that an XYZ destination is beyond the robot's reach. This is typically generated by robot's with rotary links where the position is beyond the range of the fully outstretched links. To avoid excessive joint rotation speeds, this error may be signaled a few degrees before the fully extended position in manual jog mode or when the robot is moving along a straight-line path.",
  },
  -1041: {
    "text": "Invalid Base transform",
    "description": "The Base transformation for a robot is required to have a zero pitch value. That is, a Base transform can translate the robot in all three directions and can rotate the robot about the world Z-axis, but it can not rotate the robot about the world X-axis or Y-axis.",
  },
  -1042: {
    "text": "Can't change robot config",
    "description": "A motion was initiated that attempted to change the robot configuration (e.g. Righty vs. Lefty) when such a change is not permitted. For example, you cannot change the robot configuration during a Cartesian straight-line motion. Normally, if you specify a motion destination as a Cartesian Location, any differences in configuration are ignored. However, if you specify a Angles Location as the destination for a Cartesian motion and the Angles correspond to a different configuration, this error will be signaled.",
  },
  -1043: {
    "text": "Asynchronous soft error",
    "description": "A soft error signal from the servos or trajectory generator has been received by GPL, but no specific error code has been received. The error log entry immediately following this one normally indicates the actual error. Error signaling within the motion subsystem is a two-step process. When an error is first detected, a signal is sent to GPL immediately so that a controlled deceleration sequence can begin. This first signal generates a -1043 error code. Several milliseconds later, a more specific error code is sent to identify the source of the error. This second error code overwrites the -1043 error. Error -1043 is only seen if the error log is sampled after the initial error signal is received and before the specific error code is received. Unlike standard errors, a soft error does not disable robot power.",
  },
  -1044: {
    "text": "Auto mode disabled",
    "description": 'This indicates that: (1) the Auto/Manual hardware input signal has been switched to Manual and motor power has been disabled or (2) an automatic program controlled motion was attempted, but the Auto/Manual hardware input signal is set to Manual. When the Auto/Manual signal is set to Manual, only Jog ("Manual control") mode is permitted.',
  },
  -1045: {
    "text": "Soft E-STOP",
    "description": 'A soft E-Stop condition has been detected. Any robot motion in progress is stopped rapidly but robot power is left on. One of the following has occurred: The GPL property Controller.SoftEStop has been set to TRUE. The GPL console command SoftEStop has been executed. The digital input signal specified by "Soft E-Stop DIN" (DataID 246) has been asserted. The parameter database item "Soft E-Stop" (DataID 245) has been set to TRUE.',
  },
  -1046: {
    "text": "Power not enabled",
    "description": "An operation was attempted, such as trying to Attach to a robot, and power to the robot is required but has not yet been enabled. Enable high power and repeat the operation.",
  },
  -1047: {
    "text": "Virtual MCP in Jog mode",
    "description": "An operation was attempted, such as trying to Attach to a robot, but the robot is already attached and is being controlled in Jog control mode via the web based Virtual MCP. Go to the Web Virtual MCP, place the robot into computer control mode, and retry the operation.",
  },
  -1048: {
    "text": "Hardware MCP in Jog mode",
    "description": "An operation was attempted, such as trying to Attach to a robot, but the robot is already attached and is being controlled in Jog control mode via the hardware MCP. Go to the MCP, place the robot into computer control mode, and retry the operation.",
  },
  -1049: {
    "text": "Timeout on homing DIN",
    "description": 'During the homing operation, a digital input signal that is specified for a motor via the "Wait to home axis DIN" (DataID 2812) failed to turn on before the timeout period defined by the "Timeout on home axis, sec" (DataID 2813) expired.',
  },
  -1050: {
    "text": "Illegal during joint motion",
    "description": "An operation or program instruction has been executed that requires that the robot either be stopped or moving in a Cartesian control mode. However, the robot is executing a program controlled joint interpolated motion. Wait for the joint interpolated motion to terminate before executing this instruction.",
  },
  -1051: {
    "text": "Incorrect Cartesian trajectory mode",
    "description": "An operation or program instruction has been executed that requires that the Trajectory Generator be in a specific Cartesian mode, but the mode was incorrect. Some possible problems could be: An instruction attempted to start the Real-time Trajectory Modification mode, but this mode is already active. An instruction attempted to set Real-time Trajectory Modification parameters, but this mode is not active.",
  },
  -1052: {
    "text": "Beyond conveyor limits",
    "description": "Indicates that the position for a motion being planned is beyond the upstream or downstream limits of the referenced conveyor belt. This error is generated in the following circumstances: A motion is being planned that is relative to a conveyor belt and the final position is projected to be out of the conveyors downstream limit before the robot can reach this position. If a position is upstream of the upstream limit, the system pauses thread execution until the position comes within the limits and no error is generated.",
  },
  -1053: {
    "text": "Beyond conveyor limits while tracking",
    "description": "Indicates that a position is beyond the upstream or downstream limits of a conveyor belt while the robot is tracking the belt. This error is generated in the following circumstances: The robot is moving relative to a conveyor belt and the final destination for the motion or the instantaneous position is beyond either limit of the conveyor belt.",
  },
  -1054: {
    "text": "Can't attach Encoder Only robot",
    "description": "An Auto Execution task (such as that for the Manual Control Pendant) or a GPL project has attempted to gain control of a robot by executing a Robot.Attach method or similar function, but the specified robot is an Encoder Only module. This type of kinematic module can be accessed to read the position of an encoder, but cannot be used to drive the encoder. Therefore, it is not legal to Attach this type of robot. Use the Robot.Selected method instead, if you only need read-only access to the robot.",
  },
  -1055: {
    "text": "Cartesian motion not configured",
    "description": 'This error is generated if you attempt to perform a Cartesian motion either in manual control or program control mode, and some key Cartesian motion parameters have not been initialized. Typically, this is caused by: The "100% Cartesian speeds" (DataID 2701) being set to 0 instead of their proper positive non-zero values. The "100% Cartesian accels" (DataID 2703) being set to 0 instead of their proper positive non-zero values.',
  },
  -1056: {
    "text": "Incompatible robot position",
    "description": "The current robot position is not compatible with the requirements of the operation that has been initiated. Situations where this error can be generated include: For the RPRR kinematic module, the two yaw axes have been defined to move at a fixed offset relative to each other. However, at the start of a straight line motion, the yaw axes are not in proper alignment.",
  },
  -1057: {
    "text": "Timeout waiting for front panel button",
    "description": 'For Category 3 (CAT-3) systems, the front panel "High Power Enable" button or the digital input specified by DataID 268 must transition from low to high within 30 seconds of a power-on request for high power to actually be enabled. This error is generated if the low to high transition is not seen within this time period.',
  },
  -1058: {
    "text": "Commutation disabled by servos",
    "description": "This error indicates that the servos have invalidated the motor commutation in response to an error condition. For example, a severe encoder error may have occurred. Check the Error Log for additional error messages that indicate why commutation was disabled. In most cases, re-enabling robot power causes the motor commutation to be re-established and this error to be cleared.",
  },
  -1059: {
    "text": "Homed state disabled by servos",
    "description": "This error indicates that the servos have marked an axis as not homed in response to an error condition. For example, a severe encoder error may have occurred. Check the Error Log for additional error messages that indicate why homing was invalidated. You cannot operate the axis under program control until you re-execute the axis homing procedure. You can use the MCP in joint control mode to move an axis that is not homed.",
  },
  -1060: {
    "text": "Remote E-STOP (node n)",
    "description": 'Indicates that servo network node n is asserting an E-Stop condition. Whether E-Stop is connected to the main controller or to a remote node depends on your robot model and configuration. See the explanation for error -1028 "Hard E-Stop" for possible reasons for this error.',
  },
  -1061: {
    "text": "Illegal when robot moving",
    "description": "This error is generated when a robot is moving under computer controller and an operation is performed that requires that the robot be stopped. For example, this occurs if the Set Payload console command is issued while the robot is moving.",
  },
  -1062: {
    "text": "Certified Safety Zones not supported",
    "description": "This error indicates that the robot's PAC files include the specification of a Safety Certified Safety Zone, but the robot does not support this feature. These safety zones ensure that the robot does not exceed certain speed limits within specified physical areas. Typically, this error occurs if the wrong type of safety zone is specified or if the robot's safety certification functions are not operational but should be.",
  },
  -1063: {
    "text": "Certified Safety Zones cannot be rotated",
    "description": "This error indicates that the robot's PAC files include the specification of a Safety Certified Safety Zone, but the orientation of the zone is rotated. For computational reasons, Certified Safety Zones must always be non-rotated rectangular volumes. Ensure that the Yaw, Pitch, and Roll parameters for the safety zone are zero. Alternately, use an Uncertified Safety Zone if you do not require a safety certified operation and would like to use a rotated safety zone.",
  },
  -1064: {
    "text": "Tool tip violates Safety Zone",
    "description": 'This error indicates that the robot\'s tool tip (TCP) violates one or more defined Uncertified Safety Zones. A violation will occur if the TCP enters a "keep out" or exits a "keep in" safety zone. This error can occur if the end position of a program-controlled motion is in error, anytime during a Cartesian or joint programmed controlled motion, or anytime during a World, Tool, or Joint manual control motion. Once a violation has occurred, the robot must be backed out when high power is disabled or by using manual control Free mode or by using manual control Joint, Tool, or World mode (so long as the manual jog motion reduces the violation of the safety zone).',
  },
  -1065: {
    "text": "Tool tip speed too high in Safety Zone",
    "description": "This error indicates that the robot's tool tip (TCP) is either moving down too fast in Z or moving too fast in the XY plane in a defined speed-limited non-rotated rectangular Safety Certified Safety Zone. Robots like the PreciseFlex 300/400/3400 can operate safely at their highest speed throughout their working volume, except when the tool tip is moving down and might pin an operator's hand to a hard surface. Additionally, robots like the PreciseFlex DD need to limit their horizontal speed when they are on near-vertical surfaces. If this error occurs, reduce the speed of the robot before it enters these safety zones and retry the motion. Please consult the operating manuals for these robots to determine when certified speed-limited safety zones must be used to ensure the safe operation of these robots.",
  },
  -1066: {
    "text": "Invalid Data ID code",
    "description": "The Data ID code and the specified index values do not form a valid data reference. Check that the appropriate index values are specified with this Data ID.",
  },
  -1501: {
    "text": "Unknown Data ID code",
    "description": "The Data ID code specified is not known by GPL. Check that the Data ID is valid. Some Data ID codes only become known if certain software options are enabled or configurations are selected. For example, you cannot specify absolute encoder parameters if you do not have any absolute encoders configured. Check that you are not specifying codes for a component that is not configured.",
  },
  -1502: {
    "text": "Inconsistent duplicate Data ID code",
    "description": "For networked servo systems, the definitions for a Data ID must be the same for the master and all slave nodes. This error indicates some differences were detected. Verify that compatible software is loaded on the master node and all slave nodes.",
  },
  -1505: {
    "text": "Uninitialized parameter database",
    "description": "The parameter database was not initialized properly at system startup. This error indicates an internal system error and should never been seen.",
  },
  -1507: {
    "text": "Must be master node",
    "description": "For networked servo systems, some data and operations are only allowed on the master node. An attempt has been made to access such data or operations directly from a slave node.",
  },
  -1509: {
    "text": "Invalid data index",
    "description": "The data index value specified in a Data ID reference is invalid. Probably an array index has been specified that is greater than the actual array size.",
  },
  -1510: {
    "text": "Database internal consistency error",
    "description": "An internal error has occurred during a database reference. The parameter specified along with the Data ID may not be valid. This error should never be seen.",
  },
  -1511: {
    "text": "Invalid pointer value",
    "description": "An internal error has occurred during a database reference. The parameter specified along with the Data ID may not be valid. This error should never be seen.",
  },
  -1512: {
    "text": "Undefined callback routine",
    "description": "An internal error has occurred during a database reference. This error should never be seen.",
  },
  -1513: {"text": "Invalid data from callback routine", "description": ""},
  -1514: {
    "text": "Invalid parameter array index",
    "description": "A parameter index value specified in a Data ID reference is invalid. Probably the robot number or other index value is too large.",
  },
  -1515: {
    "text": "Invalid data file format",
    "description": 'Some or all of the data in a configuration ".pac" file could not be read because it did not have the expected format. Either the file has become corrupted or an attempt to manually edit the file has introduced some errors.',
  },
  -1516: {
    "text": "Invalid number of axes or motors",
    "description": "The total number of axes or motors specified for a robot violates the number permitted. For example, this can occur if you specify 5 axes for the XYZTheta robot module. More subtly, if you configure the maximum number of motors supported by the system and then attempt to turn on split-axis control for one or axes, this requires that more motors be added.",
  },
  -1517: {
    "text": "Invalid signal number",
    "description": "A specified analog or digital signal number is not within the allowed range of values for the signal type expected. Change the signal number to a valid value.",
  },
  -1518: {
    "text": "Undefined signal number",
    "description": "A specified analog or digital signal is not currently installed in the controller. Remote signals may dynamically change between installed and uninstalled status depending on the state of the remote device. Verify that all remote devices are connected and active.",
  },
  -1519: {
    "text": "Output signal required",
    "description": "An input signal has been specified when an output signal is required. Change the signal number to an appropriate value.",
  },
  -1520: {
    "text": "Can't open parameter DB file",
    "description": "During initialization, one or more of the parameter database files (*.pac files) could not be found on the controller's flash drive in the folder /flash/config. Restore the files and reboot your controller.",
  },
  -1521: {
    "text": "Invalid parameter DB file not loaded",
    "description": "A parameter database file (*.pac file) was found in the controller's flash drive folder /flash/config but the file format is not valid. Restore the file and reboot your controller.",
  },
  -1522: {
    "text": "Cannot write value when power on",
    "description": "An attempt has been made to alter a Parameter Database value when motor power is enabled. However, the parameter can only be modified if motor power is disabled. This is a safety precaution to ensure that the robot does not move erratically when the value is modified. To avoid this error condition, disable motor power and retry modifying the Parameter Database value.",
  },
  -1523: {
    "text": "Coupled axis must be on same node",
    "description": "Two coupled robot axes, for example two axes that are coupled in Split-axis control, have been defined to be driven by amplifiers that are contained on two different physical controllers that are connected on a Servo Network. This is not permitted. The two axes must be driven by amplifiers on the same physical controller.",
  },
  -1524: {
    "text": "Saving PDB values to flash not allowed",
    "description": "A special command has been issued that inhibits any modified Parameter Database values that are in memory from being written to the flash disk. This command is typically issued by system programs that temporarily modify PDB values, which if written to the flash, would corrupt the valid data that is already contained on the flash. If you wish to modify PDB values and permanently save the changes, reboot the controller to clear this special mode.",
  },
  -1525: {"text": "Servo network not allowed with EtherCAT", "description": ""},
  -1526: {"text": "EtherCAT configuration mismatch", "description": ""},
  -1527: {"text": "EtherCAT object not supported", "description": ""},
  -1528: {"text": "Too many EtherCAT slaves", "description": ""},
  -1550: {
    "text": "Data ID cannot be logged",
    "description": "A data log specification refers to a Data ID that cannot be logged. Some values require too much computation to permit real-time logging.",
  },
  -1551: {
    "text": "Invalid when datalogger enabled",
    "description": "An attempt has been made to perform an operation that is not valid while the datalogger is active. Disable the datalogger and try again.",
  },
  -1552: {
    "text": "Datalogger not initialized",
    "description": 'An attempt has been made to start the datalogger before it has been initialized. Normally this error is not seen if the web interface is used for logging. It may be seen if database parameter "Data logger enable" (DataID 753) is set before parameter "Data logger load command" (DataID 752) is set.',
  },
  -1553: {
    "text": "No data items defined",
    "description": "An attempt has been made to start the datalogger before defining any items to log.",
  },
  -1554: {
    "text": "Trigger Data ID must be logged",
    "description": "A datalogger trigger specification refers to a Data ID that is not specified as a logged item. Triggers can only specify Data ID values that are also being logged.",
  },
  -1555: {
    "text": "Trigger Data IDs on different nodes",
    "description": "In a networked servo system, a datalogger trigger specification attempted to compare two Data IDs whose values exist on different network nodes. A trigger can only compare items that are on the same node.",
  },
  -1556: {
    "text": "Trigger not allowed for Data ID",
    "description": "Some Data ID values cannot be used as trigger values. For example Cartesian positions or velocities are computed from logged data after logging is complete, so these values cannot be tested at logging time.",
  },
  -1558: {
    "text": "Too many remote data items",
    "description": "In a servo network or GSB-based system, items collected by the datalogger from slave nodes are streamed from the slave to the master in real time. The amount of data that can be streamed depends on the trajectory period, the datalogger sampling interval, and the size and number of data items being logged from the slave. This error indicates that you have requested more data to be logged than can be streamed. Reduce the number of data items requested from the slave or increase the datalogger sampling interval.",
  },
  -1560: {
    "text": "Invalid when CPU Monitor enabled",
    "description": "An attempt was made to start the CPU Monitor utility or read data from it when it was active. Wait until the current monitor interval is complete, or cancel the current monitor and try again.",
  },
  -1561: {
    "text": "No CPU Monitor data available",
    "description": "An attempt was made to read the CPU Monitor data before the CPU Monitor utility was run. Execute the CPU Monitor utility and try again.",
  },
  -1600: {
    "text": "Power off requested",
    "description": 'Robot power had been turned off by request. One of the following occurred: The GPL property Controller.PowerEnabled has been set to FALSE. The parameter database item "Power enable" (DataID 241) has been set to FALSE.',
  },
  -1601: {
    "text": "Software Reset: using default settings",
    "description": 'When the system was restarted, the "Software Reset" switch on the MCIM Selector Switch was set to the ON state. This forced the system to read in the default configuration files (*.PAC) instead of the standard files. This feature should be used if a configuration files becomes corrupted or a setting inadvertently make the system unusable.',
  },
  -1602: {
    "text": "External E-STOP",
    "description": 'A front panel E-Stop loop ("ESTOP_L 1" or "ESTOP_L 2") has been broken and the status signal "External ESTOP_L" is asserted, indicating that external equipment is the source of the E-Stop.',
  },
  -1603: {
    "text": "Watchdog timer expired",
    "description": "The hardware watchdog timer on the CPU board has expired and robot power is disabled. This error may indicate a hardware failure or software bug and should not normally be seen. If this error persists, please contact customer service to report this problem.",
  },
  -1604: {
    "text": "Power light failure",
    "description": "The robot power-on light interfaced via the front panel connector has burned out. Robot power is turned off and may not be turned back on. Please contact customer service.",
  },
  -1605: {
    "text": "Unknown power off request",
    "description": "Robot power is off or was turned off, but no request was made to turn it off. This error may indicate a hardware failure or software bug and should not normally be seen.",
  },
  -1606: {
    "text": "E-STOP stuck off",
    "description": "When the controller is restarted, a diagnostic program has detected an E-Stop circuit that is stuck in the off state. Robot power cannot be turned on until the stuck E-Stop circuit is repaired and the controller is restarted.",
  },
  -1607: {
    "text": "Trajectory task overrun",
    "description": 'The periodic trajectory generation system task was unable to complete its executing during its allotted period. The parameter "Trajectory Generator update period in sec" (DataID 600) is set too small for the type of robot you are using.',
  },
  -1609: {
    "text": "E-STOP timer failed",
    "description": "When the controller is restarted, a diagnostic program has detected that the hardware E-Stop timer is not triggering as expected. Robot power cannot be turned on and you must restart the controller. If this error persists, please contact customer service to report this problem.",
  },
  -1610: {
    "text": "Controller overheating",
    "description": 'In GPL 3.0 H1 and later, this error is reported in addition to -1617 CPU overheating, -3144 Amplifier overheating or -3145 Motor overheating. These other errors provide detailed information on the specific component that is generating the overheating error condition. Prior to GPL 3.0 H1, this is the only error message that is generated when the CPU or one of the power amplifiers has exceeded its permitted operating temperature. For the CPU, the limit is 90 degrees Celsius. For the amplifiers of the G3xxx and G1xxxA/B controllers (except for the G3x3xA 30A version), the limit is 80C. For the amplifiers of the G3x3xA 30A version, the limit is 100C. For the G2xxx controllers, the amplifier chips are equipped with internal temperature monitoring to protect the power modules, but they do not have temperature sensors that can be read. If the CPU is overheating, it will switch off in 5 minutes and then you will need to reboot the controller. For all versions of software, robot power is automatically turned off and cannot be turned on until the overheated device cools. In a servo network, the overheated device may reside in the master controller or one of the slaves. This error is issued each time a command to enable robot power is received until all temperatures return to acceptable levels. DataIDs 126, 12605 and 12110 contain the "CPU temperature" and "Amp temperature", and "Motor temperatures" respectively, and can be displayed to determine which device is overheating.',
  },
  -1611: {
    "text": "Auto/Manual switch set to Manual",
    "description": 'A attempt has been made to enable robot power, using one of the standard means, when the Auto/Manual switch is set to Manual. The robot power has not been enabled. The standard means of enabling power are by using: the PowerEnabled property of the Controller class in GPL, the "Enable Power" parameter (DataID 241), the "Automatic power on" parameter (DataID 240), the power enable digital input (defined by DataID 242), or CANopen.',
  },
  -1612: {
    "text": "Power supply relay stuck",
    "description": 'An attempt to turn on power has failed because an internal diagnostic test indicates that the motor power supply relay is stuck in the "on" position and may be unsafe. Reboot your controller. If this error persists, contact customer service.',
  },
  -1613: {
    "text": "Power supply shorted",
    "description": "Power has been disabled because the motor power supply has detected that it is shorted. Check the wiring and the amplifiers to make sure no short is present.",
  },
  -1614: {
    "text": "Power supply overloaded",
    "description": 'Power has been disabled because the motor power supply has detected an overload condition. Verify that you are not attempting to draw more than the rated current from the power supply. Verify that the parameter "Delay after turning on power in sec" (DataID 263) is set long enough to allow power to stabilize before the amplifiers are enabled.',
  },
  -1615: {
    "text": "No 3-phase power",
    "description": "A power supply has been configured to use 3-phase power, but the 3rd phase is not connected or has failed. It is still possible to run the power supply in this mode at low power, but attempting to draw high power may overheat the power supply.",
  },
  -1616: {
    "text": "Shutdown due to overheating",
    "description": 'The CPU exceeded its operating temperature for too long a period of time and the controller automatically turned off. When the CPU first exceeds its maximum permitted limit of 90 degrees Celsius, a "Controller overheating" error (-1610) is generated and motor power is disabled. If the temperature does not decline within 5 minutes, error code -1616 is logged to the flash in a special system file ("/flash/system/errlog.txt")and the controller is shutdown. The next time the controller is restarted, the -1616 error code will be displayed in the error log. This error code will be displayed every time the controller is restarted until the error log is cleared.',
  },
  -1617: {
    "text": "CPU overheating",
    "description": 'Either the master or a slave CPU board temperature has exceeded its maximum temperature of 90 degrees Celsius. See CPU temperature (DataID 126) for the current temperature of all CPUs. If the temperature does not fall below 90 degrees, the controller will switch off in 5 minutes and the controller must be restarted. Normally this error is followed by the generic error -1610 "Controller overheating". Ensure there is good air circulation around the controller and check that the fans are not blocked. The Installation section of the controller hardware manuals provide guidelines for ventilating and cooling controllers.',
  },
  -1618: {
    "text": "Power supply not communicating",
    "description": 'Some PreciseFlex™ power supplies communicate with the PreciseFlex™ controller for identification, error detection, and safety interlocks. This communications has failed. Be sure that all cables between the controller and power supply are installed properly. Verify that DataID 128 "Power supply type" is set properly for the type of power supply you are using.',
  },
  -1619: {
    "text": "Power disabled by GIO timeout",
    "description": 'This errors occurs in two possible cases: If the error message indicates node 8 and the robot has a "safety board" (e.g. a PreciseFlex™ 3400), this error indicates that the safety board has stopped responding for 32 trajectory periods (approximately 0.128 seconds). This error disables the robot motor power and this error cannot be disabled. Otherwise, the error is related to the GIO board indicated by the node number in the error message. The GIO has stopped responding for 32 trajectory periods and the "GIO mode" (DataID 574) has bit mask 2 set, so that robot motor is disabled. If bit mask 2 is clear, GIO board timeouts do not disable robot motor power. This error might be due to: a wiring problem; improperly installed RS485 bus termination jumpers on the main CPU, Safety, GIO or GSB boards; or excessive noise in another cable, motor, or amplifier that is close to the RS485 cable. Issuing a "GSB Show" command from the System Web Console may provide additional information about the source of the error.',
  },
  -1620: {
    "text": "Safety diagnostics failed",
    "description": 'In enhanced CAT3 mode, the safety diagnostic checks have failed. Robot power cannot be enabled. Previous error messages may indicate the cause of the failure. Use the "Show Safety" web console command for more details. Once the problem has been resolved, try to enable power again.',
  },
  -1621: {
    "text": "Safety software configuration mismatch",
    "description": 'The safety configuration bits in DataID 2031 "Enhanced safety mode" do not match the settings of DataID 117 "Safety mode" or require hardware not present in your controller. For example, you set bit &H001 of DataID 2031 but DataID 117 is not set to 4 or 5 or you set bit &H200 in DataID 2031 but do not have a 3-phase power supply. Verify that DataID 117 is correct. For hardware-related errors, contact Brooks support. If a numeric value is displayed with this error, the value indicates what aspect of the safety configuration did not match. See DataID 2031 "Enhanced safety mode" for a description of the bits that form this value.',
  },
  -1622: {
    "text": "Not allowed in safety mode",
    "description": 'You have attempted to perform some operation that is not allowed in your current safety mode. For example, you have attempted to enable power from a user program while DataID 117 "Safety mode" is set to 5 (Enhanced CAT-3 full).',
  },
  -1623: {
    "text": "ESTOP1 stuck on",
    "description": "The safety diagnostics in enhanced CAT3 mode have determined that ESTOP channel 1 is asserted. Probably your channel 1 ESTOP loop is open. Close the loop and retry the operation.",
  },
  -1624: {
    "text": "ESTOP2 stuck on",
    "description": "The safety diagnostics in enhanced CAT3 mode have determined that ESTOP channel 2 is asserted. Probably your channel 2 ESTOP loop is open. Close the loop and retry the operation.",
  },
  -1625: {
    "text": "ESTOP1 stuck off",
    "description": "The safety diagnostics in enhanced CAT3 mode have determined that ESTOP channel 1 cannot be asserted by the internal force-ESTOP circuit. Your channel 1 ESTOP may be wired incorrectly.",
  },
  -1626: {
    "text": "ESTOP2 stuck off",
    "description": "The safety diagnostics in enhanced CAT3 mode have determined that ESTOP channel 2 cannot be asserted by the internal force-ESTOP circuit. Your channel 2 ESTOP may be wired incorrectly.",
  },
  -1627: {
    "text": "Motor power stuck on",
    "description": 'The safety diagnostics in enhanced CAT3 mode have determined the DC voltage indicated by DataID 12684 ("Nominal DC bus voltage, volt") is too high when the motor power has been turned off. This may indicate a failed internal safety circuit or an unplugged cable.',
  },
  -1628: {
    "text": "Motor power stuck off",
    "description": 'The safety diagnostics in enhanced CAT3 mode have determined the DC voltage indicated by DataID 12684 ("Nominal DC bus voltage, volt") is too low when the motor power has been turned on. This may indicate a failed internal safety circuit or an unplugged cable.',
  },
  -1629: {
    "text": "FFC ENA_PWR' signal stuck on",
    "description": 'In a controller that includes a FFC safety board, the safety diagnostics in enhanced CAT3 mode have determined the DC voltage indicated by DataID 12684 ("Nominal DC bus voltage, volt") is too high when the motor power has been turned off. Probably the FFC_ENA_PWR\' signal on the FFC board is stuck on or this signal from the controller is shorted high. When the safety board is present, the output from the motor power supply should be off when the controller commands that motor power should be disabled. If the output of motor power supply is on, there is a problem with the motor power disable signal and its associated circuits.',
  },
  -1630: {
    "text": "FFC ENA_PWR' signal stuck off",
    "description": 'In a controller that includes a FFC safety board, the safety diagnostics in enhanced CAT3 mode have determined the DC voltage indicated by DataID 12684 ("Nominal DC bus voltage, volt") is too low when the motor power has been turned on. Probably the FFC_ENA_PWR\' signal on the FFC board is stuck off or this signal from the controller is shorted low.',
  },
  -1631: {
    "text": "Power dump circuit failed",
    "description": 'The safety diagnostics in enhanced CAT3 mode have determined the DC voltage indicated by DataID 12684 ("Nominal DC bus voltage, volt") is not falling quickly enough when power is turned off. This indicates that the power dump circuit has failed or is missing. Verify that you are using the correct robot *.pac files with this robot.',
  },
  -1632: {
    "text": "At least one motor must be enabled",
    "description": 'The safety diagnostics in enhanced CAT3 mode have determined that there are no motors enabled for the robot. At least one motor must be present to perform the safety tests. Check the values for DataID 2105 ("Simulate servo interface") and DataID 2026 ("Motor disable mask") to make sure at least one motor is enabled. If you really want all motors disabled, you must also disable safety mode using DataID 117.',
  },
  -1633: {
    "text": "Hardware watchdog timer failed to disable power",
    "description": 'The safety diagnostics in enhanced CAT3 mode have determined the DC voltage indicated by DataID 12684 ("Nominal DC bus voltage, volt") is too high after the hardware watchdog timer has expired. There may be a hardware problem with the watchdog timer, or you have attempted to enable safety mode on an older controller that does not contain a hardware watchdog timer.',
  },
  -1634: {
    "text": "FPGA watchdog timer failed to disable power",
    "description": 'The safety diagnostics in enhanced CAT3 mode have determined the DC voltage indicated by DataID 12684 ("Nominal DC bus voltage, volt") is too high after the watchdog timer in the FPGA has expired. There may be a hardware problem with the watchdog timer.',
  },
  -1635: {
    "text": "FPGA watchdog trigger stuck on",
    "description": "The FPGA indicates that the watchdog timer is triggered even though it is being polled normally. There may be a hardware problem with the watchdog timer or the FPGA.",
  },
  -1636: {
    "text": "FPGA watchdog trigger stuck off",
    "description": "The FPGA indicates that the watchdog timer is not triggered even though it is not being polled. There may be a hardware problem with the watchdog timer or the FPGA.",
  },
  -1700: {
    "text": "Cannot get local host name",
    "description": "The Ethernet network is not configured properly. Check the parameter values for DataIDs 420, 421 and 422.",
  },
  -1701: {
    "text": "Cannot get local host address",
    "description": "The Ethernet network is not configured properly. Check the parameter values for DataIDs 420, 421 and 422.",
  },
  -1702: {
    "text": "Connection refused",
    "description": "An attempt to connect to a TCP server was refused. Be sure your IP address and port numbers are correct. Be sure the server is ready to accept connections.",
  },
  -1703: {
    "text": "No connection",
    "description": "An attempt was made to send or receive on socket that was not connected to a TCP or UDP port.",
  },
  -1704: {
    "text": "Invalid network address",
    "description": "The IP address specified cannot be accessed.",
  },
  -1705: {
    "text": "Network timeout",
    "description": "A network operation did not complete within the allowed time period. Depending on the operation, the connection may or may not be closed.",
  },
  -1706: {
    "text": "Already connected",
    "description": "An attempt was made to connect a socket to an IP Address and port when there is already a connection.",
  },
  -1707: {
    "text": "Socket not open",
    "description": "An attempt was made to use a network socket that is not open.",
  },
  -1708: {
    "text": "Connection closed",
    "description": "An attempted was made to use a socket whose connection has been closed either locally or by the remote endpoint.",
  },
  -1709: {
    "text": "Invalid protocol",
    "description": "A message was received that does not follow a known communications protocol.",
  },
  -1710: {
    "text": "Invalid multicast address",
    "description": "The IP address is not a valid multicast address. The recommended range for multicast IP addresses is from 239.192.0.0 through 239.195.255.255.",
  },
  -1720: {
    "text": "Web interface not enabled",
    "description": 'An external system attempted to access one of the controller\'s web pages, but access via the web server has been disabled. To enable the web interface, modify the value of the "Web password security" (DataId 450) database parameter.',
  },
  -1730: {
    "text": "Modbus/RIO exception: n",
    "description": "A MODBUS or RIO board request failed with exception code n. The standard MODBUS exception codes are: 1 = Illegal function, 2 = Illegal data address, 3 = Illegal data value, 4 = Device has failed.",
  },
  -1731: {
    "text": "Modbus/RIO device timeout",
    "description": "A MODBUS device or RIO board is not responding or is not responding within the specified timeout period.",
  },
  -1732: {
    "text": "Modbus/RIO disable requested",
    "description": 'A MODBUS device or RIO board connection has closed because of a user request. For example, you have set the parameter "Remote IO module enable" (DataID 554) to zero.',
  },
  -1740: {
    "text": "Servo latency too large",
    "description": "The master controller cannot connect with a slave controller because the measured communications latency is too large or is negative. Typically there should be no more than 80 microseconds of latency between the nodes. Verify that both controllers are on the same LAN and external traffic is low. Verify that your Ethernet switch is operating properly. Verify that the servo network protocols for all nodes are compatible.",
  },
  -1750: {"text": "EtherCAT error", "description": ""},
  -1751: {"text": "EtherCAT slave not responding", "description": ""},
  -1752: {"text": "EtherCAT synchronous message timeout", "description": ""},
  -1753: {"text": "EtherCAT slave not ready", "description": ""},
  -1754: {"text": "EtherCAT disabled", "description": ""},
  -2101: {
    "text": "Vertical search limit violated",
    "description": "This error is generated during the vertical motion to search for the height of the nest.  This indicates that the motion search distance limit was encountered before the specified force level was achieved.",
  },
  -2102: {
    "text": "Horizontal search limit violated",
    "description": "This error is generated during a horizontal motion to search for the edges of the nest.  This indicates that the motion search distance limit was encountered before the specified force level was achieved.",
  },
  -2103: {
    "text": "Insufficient number of Tool X samples",
    "description": "The nest height detection routines did not collect the minimum required number of force samples either when the plate was in free air or when the plate was pressing against the nest.",
  },
  -2104: {
    "text": "Insufficient number of Tool Tx torque samples",
    "description": "The nest orientation detection did not collect the minimum required number of torque samples either when the plate was rotated between the edges of the nest.",
  },
  -2105: {
    "text": "No free air during Yaw detection",
    "description": "When using Tx to determine the nest Yaw angle, the line fit to the first samples overlapped with the line fit to the last of the samples.  This indicates that no free air region was detected.",
  },
  -2106: {
    "text": "Motor exceeded peak torque",
    "description": "One or more motors was generating the peak permitted torque.  The torque will be saturated and the Cartesian gripper forces and torques will not be accurate.  The offending motor numbers are listed.",
  },
  -2107: {
    "text": "GPL 3.2 or later required",
    "description": "This package relies on features contained in GPL 3.2 or later.",
  },
  -2850: {
    "text": "Invalid Gripper Type",
    "description": "This command requires a servoed gripper and none is detected.",
  },
  -2851: {
    "text": "Invalid Station ID",
    "description": "A station ID less than 1 or greater than the maximum number of stations has been specified.",
  },
  -2852: {
    "text": "Invalid robot state to execute command",
    "description": "The command cannot be executed while the robot is in its current state.  For example, you cannot issue a TeachPlate command while the robot is moving.",
  },
  -2853: {
    "text": "Rail not at correct station",
    "description": "The optional rail is not currently at or moving toward the destination station for this command.  Issue a MoveRail command to move the rail to the desired station.",
  },
  -2854: {
    "text": "Invalid Station type",
    "description": "The robot cannot move to a station of the requested type.  For example, the PP100 robot cannot move to a horizontal station.",
  },
  -2855: {
    "text": "No gripper close sensor",
    "description": "The command requires a gripper-close sensor but no such sensor exists for the current robot type.",
  },
  -3000: {"text": "NULL pointer detected", "description": ""},
  -3001: {"text": "Too many arguments", "description": ""},
  -3002: {"text": "Too few arguments", "description": ""},
  -3003: {"text": "Illegal value", "description": ""},
  -3004: {"text": "Servo not initialized", "description": ""},
  -3005: {"text": "Servo mode transition failed", "description": ""},
  -3006: {"text": "Servo mode locked", "description": ""},
  -3007: {"text": "Servo hash table not found", "description": ""},
  -3008: {"text": "Servo hash entry collision", "description": ""},
  -3009: {"text": "No hash entry found", "description": ""},
  -3010: {"text": "Servo hash table full", "description": ""},
  -3011: {"text": "Illegal parameter access", "description": ""},
  -3012: {
    "text": "One or more servo tasks stopped",
    "description": "A software watchdog timer has not been updated in the required time. This normally indicates a controller hardware failure or a system software bug.",
  },
  -3013: {"text": "Servo task submission failed", "description": ""},
  -3014: {
    "text": "Cal parameters not set correctly",
    "description": """This error is generated if a homing operation is initiated and one or more parameters that affect homing are not set properly.  For example, this error is generated in the following circumstances:

  The "Hardstop envelope limit, mcnt" (DataID 10122) is less thanor equal to zero or it is greater than either the "Soft envelope error limit, mcnt" (DataID 10302) or the "Hard envelope error limit, mcnt" (DataID 10303).  If you are not using DataID 10122 for your homing method, set it to a small non-zero value to avoid this error.""",
  },
  -3015: {
    "text": "Cal position not ready",
    "description": """If your robot is equipped with the Precise Absolute encoders, e.g. you have a PrecisePlace 2300/2400 robot, this indicates that the robot does not have its factory encoder calibration data defined. Most likely, one of the "Index code for calibration" (DataID 16241) values is zero.  To correct the problem, run the factory encoder calibration program.

  For 3rd party absolute encoders, this error indicates that the full precision absolute encoder position could not be read from the encoder during the homing operation.  In some cases, this indicates an error in reading the multiple turn counter for the encoder.  If this problem persists, it probably indicates an encoder or controller hardware failure.

  For incremental encoders, this error indicates that a signal required for the selected homing method was not found (e.g. a missing homing or limit or index signal) or a signal was corrupted (e.g. incorrect index due to excessive skew).""",
  },
  -3016: {
    "text": "Illegal cal seek command",
    "description": "This error should never be generated.  It indicates that the homing operation sent an illegal command to the servo code.  Please report this message along with the process that generated this problem to Precise.",
  },
  -3017: {
    "text": "No axis selected",
    "description": "A debug control panel operation has been requested for an axis that does not exist on a particular servo network node. Reselect the axis and try again. Verify that the node mapped to the axis is active on the network.",
  },
  -3100: {
    "text": "Hard envelope error",
    "description": """This error is generated if the value of the "Position tracking error, mcnt" (DataID 12320) for an axis exceeds its "Hard envelope error limit, mcnt" (DataID 10303) for a sufficient period of time.  This error indicates that there was a significant difference between an axis' commanded position and its actual position.  This can occur if:

  The axis is being driven too fast for the load that it is carrying.
  The axis hits an obstacle and cannot advance.
  The axis is oscillating due to a servo tuning instability.
  There is a hardware failure of some type.
  Normally, this error can be avoided by reducing the speed and/or acceleration of a motion.""",
  },
  -3101: {
    "text": "PID output saturated too long",
    "description": """This error indicates that the sum of the servo feedback terms ("Compensator output torque" (DataID 12304) minus the sum of the "Dynamic feedforward torque" (DataID 12337) and the "Filtered feedforward torque" (DataID 12331)) has either saturated the maximum specified torque for an axis or the "Max positive/negative torque limit for PID feedback" (10351,10352) for more than the time specified the "PID output saturation duration limit" (DataID 10369), which is set to 200 msec by default.

  This error is generated if the limits are set too low or the axis has been over-driven or the axis has collided with an obstacle or some other unexpected error has occurred.

  This check reduces the time that an axis is over-driven or that it drives into an obstacle.""",
  },
  -3102: {
    "text": "Illegal zero index",
    "description": """An encoder zero index pulse was detected when none is expected.  The axis is marked as "not calibrated" and the robot must be re-homed.  Verify that parameters "Encoder counts for resolution calc, ecnt" (DataID 10203) and "Encoder revs for resolution calc, rev" (DataID 10204) are correct.  If the unexpected pulse is due to noise, the parameter "Index noise spikes limit" (DataID 10222) may be adjusted.  If the unexpected pulse is due to encoder slippage, parameter "Index skew count limit, mcnt" (DataID 10221) may be adjusted.""",
  },
  -3103: {
    "text": "Missing zero index",
    "description": """No encoder zero index pulse was detected when one is expected.  The axis is marked as "not calibrated" and the robot must be re-homed.  Verify that parameters "Encoder counts for resolution calc, ecnt" (DataID 10203) and "Encoder revs for resolution calc, rev" (DataID 10204) are correct.  If the missing pulse is due to encoder slippage, parameter "Index skew count limit, mcnt" (DataID 10221) may be adjusted.""",
  },
  -3104: {
    "text": "Motor duty cycle exceeded",
    "description": """Duty cycle testing is intended to prevent a motor from being damaged due to overheating.  The overheating estimate is computed based upon the average power that is supplied to a motor by an amplifier over a period of time.

  The duty cycle criteria is defined by the "RMS rated motor current, A(rms)" (DataID 10611), "Duty cycle limit in terms of rated torque" (DataID 10623), "Duty cycle exceeded duration" (DataID 10622) and "Duty cycle SPR filter pole" (DataID 10621).

  If the dynamically computed "Duty cycle value, tcnt^2" (DataID 12606) exceeds the "Duty cycle limit, tcnt^2" (DataID 10624), which is defined from the criteria above, the "Motor duty cycle exceeded" error is generated and motor power is disabled.

  If this error is generated, but the motor is still very cool, try changing the "Duty cycle SPR filter pole" (DataID 10621) to average the power over a longer period of time.  This will reduce the effect of short periods of high power utilization.""",
  },
  -3105: {
    "text": "Motor stalled",
    "description": """This error indicates that the torque/current for a motor has been saturated at the peak value as defined by the "RMS rated motor current, A(rms)" (DataID 10611) * "AUTO mode motor PEAK(non-RMS)/(RMS rated) current, %" (DataID 10613) for "Motor stalled check duration" (DataID 10617) seconds.

  This is different than the conventional definition of having a motor not moving for a period of time with the torque/current continuously above a specified level.""",
  },
  -3106: {
    "text": "Axis over-speed",
    "description": """This error is generated when power is enabled or during normal running if the system detects that an axis has violated a speed limit.

  If this occurs when power is enabled, it indicates that the axis has violated the speed limit defined by "Special power-up speed limit" (DataID 10210).  The possible causes for this error are as follows:

  The motor torque sign is negated and the axis is attempting to run away at high speed.
  For 3rd party amplifiers, there is an excessive DAC offset.
  For gravity loaded axes, the axis might be dropping very quickly after the brake is released.
  A somewhat large offset between the amplifier/motor phase currents might be causing the axis to move excessively when the system attempts to automatically compensate for the phase offset.  The "Disable auto phase offset adjustment" (DataID 10695) can be used to turn off this adjustment if desired.
  The "Special power-up speed limit" (DataID 10210) may be set too low.
  If this error occurs when the system is running, it indicates that either the "Run-time speed limit" (DataID 10208) or the "Manual mode speed limit" (DataID 10209) has been violated.   When this runtime error occurs, do the following:

  Reduce the speed of your motions to avoid damaging the motor or its gear train or violating manual control safety regulations.
  Review the values of 10208 and 10209 and ensure that they are set properly.
  If possible, reduce the gear ratio of the motor to reduce the maximum motor rotational speed.
  If the error is triggered by intermittent noise in the velocity signal, reduce the "Motor velocity SPR filter pole" (10207).  This value will not affect the PID loop tuning, but it does affect other functions of the system. Review the documentation for 10207 before you change its value.""",
  },
  -3107: {
    "text": "Amplifier over-current",
    "description": "This error is generated if the FPGA firmware detects that the output motor current has exceeded the specified current limits for too long a time.",
  },
  -3108: {
    "text": "Amplifier over-voltage",
    "description": """This error is generated by the FPGA firmware when it detects that the DC bus voltage is too high.  The limit on the bus voltage is a function of the controller model being utilized.  For the G1xxxA/B controllers, the maximum voltage is approximately 59.5 VDC.  For the G3xxx and G2xxxB/C series controllers, the maximum voltage was approximately 445 VDC, but in May 2014 was adjusted down to 436 VDC.  Whenever a motor decelerates, it typically pumps power back into the motor power supply and the voltage will rise above its nominal value.  For example, if the nominal bus voltage is 330V, it is not unusual to see the voltage rise into the high 300's when a large motor is decelerating.  To monitor the DC bus voltage, see "Raw DC bus voltage, volt" (DataID 12684). If this problem persists, it may indicate that the motor power supply must be changed or augmented to include more capacity to dump or absorb more power when the robot is decelerating.""",
  },
  -3109: {
    "text": "Amplifier under-voltage",
    "description": """This indicates that the DC motor bus has dropped too low.  This can occur if:

  The bus voltage does not rise above 10V the first time that motor power is enabled.
  The bus voltage falls too far (typically 30%) below its nominal value at any time after power has been enabled.
  The bus voltage falls below 10V while motor power and the motor amplifiers are enabled.
  If this error is generated at the same time as a "Hard E-STOP" error (-1028), it is possible that the "E-stop delay" (DataID 267) is set too short and the DC motor bus voltage is dropping before the amplifiers are disabled.

  If this error persists, it could be due to a fuse on the Motor Power Supply being blown.  To monitor the DC bus voltage, see "Raw DC bus voltage, volt" (DataID 12684).  To see the current setting of the nominal voltage look at "Nominal DC bus voltage, volt" (DataID 12683).""",
  },
  -3110: {
    "text": "Amplifier fault",
    "description": """This is a generic message indicating that the amplifier hardware has detected a significant problem and has shut down.  For example, the output motor current has exceeded the rated limits of the hardware, or the input power to the amplifier has failed while the amplifier was enabled.   Frequently, a separate amplifier-related error message is also displayed that provides details about the specific problem.

  Verify that the amplifiers are configured properly.
  Verify the motors are wired correctly.
  Verify the current loop tuning is correct.  Unstable current loop tuning can trigger an amplifier fault.
  Verify the motor and motor harness are not shorted. This can be done by disconnecting the motor and measuring the resistance between the UVW phases.  The resistance should be the same for each pair and low, but not zero.
  If this error occurs when an E-STOP is asserted, verify that the "Delay after setting brakes" (DataID 260) is longer than or equal to the "E-Stop delay" (DataID 267).  Normally, DataID 260 should be at least 0.1 seconds shorter than DataID 267.""",
  },
  -3111: {
    "text": "Brake fault",
    "description": "This error indicates that the FPGA has detected a fault condition in the hardware motor brake driver circuit.  This test is not currently enabled, so this error message should never be generated.",
  },
  -3112: {
    "text": "Excessive dual encoder slippage",
    "description": """If an axis has been configured for dual encoder loop control (i.e. two encoders are used to control a single motor), this error is generated if there is an excessive position or speed differential between the readings of the two encoders.  The slippage limits are defined by "Dual loop position slippage limit" (DataID 10212) and "Dual loop speed slippage limit" (DataID 10216).

  If the axis is driven by a traction drive, some amount of slippage occurs every time that the axis is accelerated or decelerated.  This normal slippage is automatically corrected for by the system software.  If excessive speed slippage occurs, it could indicate that one of the two encoders has failed and the system was shutdown to prevent a run-away condition.""",
  },
  -3113: {
    "text": "Motor commutation setup failed",
    "description": """The procedure for determining the commutation reference angle for the motor failed and the reference angle was not established. This error normally occurs the first time that motor power is enabled after the controller is restarted or during the homing process.

  The followings are the common causes for the failure:

      Motor power was disabled. The motor power was manually disabled or was automatically disabled due to another error occurring before the end of the search process.
     Lose motor cable. Some commutation reference search processes move the motor a short distance. During this small motion, the motor cable became disconnected. Encoder feedback lost.
  TEhnec ofdeeedback device (encoder) is not working properly or the "Encoder type" (DataID 10027) was incorrectly set.
     Incorrect configuration parameters. Any of the following parameters may have been incorrect set. The Precise Configuration Utility (PCU) contains tools that can be used to verify the correct settings.
  DataID 10108, Dedicated DIN's selection
  DataID 10650, Commutation sign
  DataID 10651, # of pole pairs per motor revolution
  DataID 10652, Commutation counts per electrical cycle
  Poor current loop tuning. The motor current loop may not be properly tuned.
  Improper configuration parameters for selected commutation search method. While the default parameter values will work for a wide variety of axis configurations, there are cases which require parameter adjustment in order to properly perform commutation reference finding. Refer to the selected commutation method parameter description for details.
  If the problem persists after checking the above items, please contact Precise support for further assistance.""",
  },
  -3114: {
    "text": "Servo tasks overrun",
    "description": 'The servo tasks are not able to complete their servo computations within the specified servo period.  Too many axes are being servoed by a single board, the parameter "Servo update period in sec" (DataID 603) is too small, or a CPU failure has occurred.  This error is fatal and prevents robot power from being turned on until the controller is rebooted.',
  },
  -3115: {
    "text": "Encoder quadrature error",
    "description": """For incremental encoders, the encoder count and direction of change is derived from two square waves (channels A & B) that are 90 degrees out of phase.  If at any time, the FPGA detects that the phase angle between the channels is too small, a quadrature error is generated.  Normally, this error is caused by noise in the encoder lines.  To correct this problem, please see the recommendations on wiring encoders and motors in the Installation Section of the Controller Hardware Manual.  The motor wiring is as important as the encoder wiring since the motors are often generating the noise that is cause the erroneous reading on the encoder channels.

  When this error occurs, the motor must be commutated again and should be re-homed since this error indicates that the position of the motor/encoder is not longer exactly known.

  For robots with gravity loaded axes (e.g. Z-axes), the "Severe error power off mode" (DataID 142) should be set to mode 1.  If the robot's incremental encoders suffer a quadrature error, the robot's brakes will be set immediately and minimize dropping due to gravity loading.""",
  },
  -3116: {"text": "Precise encoder index error", "description": ""},
  -3117: {
    "text": "Amplifier RMS current exceeded",
    "description": """This error indicates that the rated RMS current for an integrated amplifier has been exceeded and the software has disabled motor power to protect the amplifier from being damaged.  This is an internal test that is automatically performed and cannot be disabled.  See the specifications for your controller for the RMS rating of the amplifiers.  If this error occurs, consider doing the following:

  Reduce the accelerations, decelerations and speeds for your motions.
  Verify that the rated RMS current for the motor is equal to or below that of the amplifier.  If the motor needs to operate at a higher average current level (due to gravity loading, constantly working against friction, etc.), consider purchasing a controller with amplifiers that have a higher rated RMS current.
  This error is different than a "Motor duty cycle exceeded" (-3104) error.  The duty cycle testing is intended to protect a motor from being damaged due to over-heating.  There are a number of parameters for configuring the duty cycle testing to match a motor's operating specifications.""",
  },
  -3118: {
    "text": "Dedicated DINs not config'ed for Hall",
    "description": """If the "Commutation reference setup config" (DataID 10700) specifies that the "Hall-effect" method is to be used for commutating a motor, then the "Dedicated DIN's selection" (DataID 10108) must be set to configure the single-ended inputs in the corresponding encoder connector for use as hall sensor inputs.  If DataID 10108 is not set properly, this error is generated.  Normally, DataID 10108 is automatically configured if DataID 10700 specifies the "Hall-effect" method.""",
  },
  -3119: {
    "text": "Illegal 6-step number",
    "description": """If the "Commutation reference setup config" (DataID 10700) specifies that the "Hall-effect" method is to be used for commutating a motor, the single-ended inputs in the corresponding encoder connector are read to determine the hall sensor 6-step value.  The only permitted hall readings are values from 1 to 6.  If the single-ended digital inputs are set to some other value, this error is generated.""",
  },
  -3120: {
    "text": "Illegal commutation angle",
    "description": """This is a general error message that indicates a problem has been detected with the commutation reference angle.  Some possible problems that would generate this error message include:

  The "Commutation counts per electrical cycle" (DataID 10652) may be set to zero or some other invalid number.
  For a motor with an absolute encoder, the "Commutation offset" (DataID 10775) may be un-initialized so the commutation reference angle cannot be set based upon the encoders single turn data reading.
  For a motor with a serial incremental encoder that outputs hall sensor readings during startup, the hall sensor reading may have been unavailable or invalid.
  For a motor with hall sensors, the commutation angle specified for a hall sensor reading (DataIDs 10744-10756) may be un-initialized.
  For a motor with an analog encoder, the "Analog hall commutation phase angle" (DataID 10756) may not yield a valid commutation reference angle.""",
  },
  -3121: {
    "text": "Encoder fault",
    "description": """This code is generated when an error occurs in communication with a serial encoder such as a Panasonic or Yaskawa serial encoder.  This error indicates one of several possible problems.

  For the Yaskawa Sigma II/III serial absolute encoder, this error is generated when the encoder signals a "Runtime Error" due to an error in the encoder's memory. When this occurs, bit 1 in the "Encoder alarm" field (DataID 12251) is set. Check the encoder cable and cycle the power to see if the error goes away. See the Yaskawa encoder alarm documentation for more details.
  For the Panasonic serial incremental encoder (type 41), this error is generated when the encoder signals a Preload error after the encoder has been initialized. When this occurs, bit 7 is set in the "Encoder alarm" field (DataID 12251). See the Panasonic encoder alarm documentation for more details.

  This is a severe error and requires the encoder to be re-initialization and/or power cycled.""",
  },
  -3122: {
    "text": "Soft envelope error",
    "description": """The position error of an axis has exceeded the value set in the "Soft envelope error limit" (DataID 10302).  This is a safety precaution to ensure that each axis does not deviate too far from its intended position.  This error may indicate that the following has occurred:

  An axis has been commanded to accelerate too quickly or move too fast and does not have the power to perform the operation.  If necessary, this can be confirmed by datalogging the "Compensator output torque" (DataID 12304) and the "Position tracking error" (DataID 12320) for the axis in question.  If this is the source of the envelope error, the position error will increase significantly when the motor torque saturates at its maximum value for several tens of milliseconds.
  The axis has gone unstable due to a hardware failure or some other error.  This can be confirmed by listening for an audible noise or by datalogging the "Velocity tracking error" (DataID 12321) for the axis in question and looking for high frequency oscillations.
  An axis may have crashed into an obstacle and is unable to move to the specified position.
  The "Software envelope error limit" (DataID 10302) may be set to too small of a value.""",
  },
  -3123: {
    "text": "Cannot switch serial encoder mode",
    "description": "When an absolute or incremental serial encoder is employed, it can operate in either sync or async mode.  In order to switch between the two modes the axis motor power must be turned OFF.   If it's not then this error is issued.",
  },
  -3124: {
    "text": "Serial encoder busy",
    "description": """During communication with a serial absolute or incremental encoder, if the encoder takes too long to process a command, this error is issued. When the encoder is in its normal synchronous mode, this error can be generated when the encoder is periodically returning position data.  During asynchronous mode , this error can be generated when the host controller issues a specific encoder command to perform a diagnostic function.

  If this error persists, please check the encoder connections and power cycle the encoder.""",
  },
  -3125: {
    "text": "Illegal encoder command",
    "description": "The serial command issued from the controller is not supported by the encoder. Normally, this error should never occur.  However, if it is generated, it indicates that there is an internal implementation error. Please inform Precise.",
  },
  -3126: {
    "text": "Encoder operation error",
    "description": """This indicates that a serial encoder is rotating at too high a speed before motor power is turned on or an error has been detected in the encoder position data. This error is generated when the encoder signals the following alarms conditions:

  For Panasonic and Tamagawa serial encoders, this error is generated when "Over-speed" (bit 0) and/or "Counter Error" (bit 2) is set in the "Encoder alarm" field (DataID 12251).
  For Yaskawa serial encoders, this error is generated when "Absolute Error" (bit 3), "Over-speed" (bit 4) and/or "Reset Complete" (bit 6) is set in the "Encoder alarm" field (DataID 12251).
  This is a standard error and requires the encoder to be re-initialization and/or power cycled.

  See the Panasonic, Tamagawa and Yaskawa encoder alarm documentation for more details.""",
  },
  -3127: {
    "text": "Encoder battery low",
    "description": "Many serial absolute encoders require a connection to an external battery. If the battery voltage is too low, this error is issued.  When this error is generated, the encoder is still operational and its internal data, e.g. multi-turn value, will still be valid. However, the battery should be replaced as soon as possible before the internal data is lost.",
  },
  -3128: {
    "text": "Encoder battery down",
    "description": """Many serial absolute encoders require a connection to an external battery. If the battery is dead or this backup power is disconnected (even momentarily), this error is issued and will be latched until cleared. When this error occurs, the encoder's internal multi-turn data is no longer valid and the encoder position must be re-calibrated.  The battery must be replaced or reconnected and the factory setup for the encoder must be executed again.

  If this error occurs, verify that the battery voltage is adequate (typically 3.6V or above) and is connected to the encoder via the controller.  Once the battery power has been restored, execute the factory calibration program to clear this latched error and reset the encoder's multiple turn counter.""",
  },
  -3129: {
    "text": "Invalid encoder multi-turn data",
    "description": """During run-time, this error is triggered when an encoder's multi-turn counter either over-flows or under-flows or the encoder itself detects a read error of the multi-turn data.

  The over-flow or under-flow error should not occur so long as the encoder is not continuously turned in a single direction and the homing setup is done properly.

  If the error is generated when the controller is restarted or during homing, the error is most likely due to a read error and the encoder should be power cycled to clear this condition.

  For Panasonic and Tamagawa serial absolute encoders, this error is generated when the "Multi-turn Counter Overflow" bit (bit 3) and/or "Multi-turn read error" bit (bit 5) is set in the "Encoder alarm" field (DataID 12251). See the Panasonic/Tamagawa encoder alarm documentation for more details.

  This is a standard error and requires the encoder to be re-initialization and/or power cycled""",
  },
  -3130: {
    "text": "Illegal encoder operation mode",
    "description": """During normal run-time operation, serial absolute and serial incremental encoders should be in synchronous communication mode. If an encoder is not in this mode when motor power is enabled, this error is issued. Normally, this error should not be generated.

  If this error persists, use the Absolute Encoder Diagnostics page in the web interface to re-initialize the serial encoder or power cycle the encoder.""",
  },
  -3131: {
    "text": "Encoder not supported or mis-matched",
    "description": """The parameter "Encoder type" (DataID 10027) is set to a value not supported by the servos or that is inconsistent with the ID code returned by a serial encoder.  This can occur if:

  The Encode type is not set to the proper value
  When the controller first communicates with the encoder, the encoder communication is corrupted and the wrong encoder ID is received
  For bus line absolute encoders, one or more of the encoders did not properly boot and the encoder message received by the controller did not include the response from all of the expected encoders

  This error is fatal and prevents robot power from being turned on until the controller is rebooted.""",
  },
  -3132: {
    "text": "Trajectory extrapolation limit exceeded",
    "description": """This error occurs in systems with slave controllers or GSB boards that are networked to a master controller via Ethernet or RS485.  If a set point transmission is lost, the servo code on the slave controller or GSB extrapolates from the previous trajectory set points.  If the number of sequential missed set points exceeds the "Number of consecutive extrapolations allowed" (DataID 10424), the servo generates this severe level error and disables motor power.

  If this error occurs, verify that the value of DataID 10424 is not set too low.  Typically, this value should be set to 8.

  If this error is generated by an Ethernet slave controller, there is probably noise in the Ethernet network.  Ensure that shielded twisted pair Ethernet cables are used to interconnect the master and slave controllers and in any other part of the network that could inject noise.

  If this error is generated by a GSB slave, there is probably noise on the RS485 bus.  Verify that the termination jumpers are installed correctly and that the RS485 connectors are firmly seated on all boards, and ensure that shielded twisted pair wire is used for all of the RS485 signals.  View the GSB error statistics to identify what GSB board is experiencing noise.

  To minimize noise generation in a custom high voltage robot mechanism, verify that the recommended ferrite beads are installed on all motor power wires and that the communication cables are not routed next to the high voltage signal lines.

  If this error is generated by servos on the master controller, or in systems that are not part of a servo network, it indicates that the controller's CPU is overloaded.  If the problem persists, please contact Precise technical support.""",
  },
  -3133: {
    "text": "Amplifier fault, DC bus stuck",
    "description": "This error is generated if an amplifier is in a fault state and the user tries to re-enable motor power while the DC bus voltage is still not below 18VDC.  If an amplifier fault has occurred, the high power relay to the motor power supply must be disengaged before motor power is re-enabled.",
  },
  -3134: {
    "text": "Encoder data or accel/decel limit error",
    "description": """This error indicates that either invalid position data has been received from a serial encoder or a serial encoder's position reading changed by too large of a value in a very short period of time.  Most often, this means that six or more consecutive "Absolute encoder bad readings" (DataID 12269) or "Absolute encoder communication errors" (DataID 12259) have occurred.  If the controller detects a single error of these types, it will usually automatically correct the error and continue normal operation.

  When this error code is generated, the robot must be homed again to re-sample the encoder's full absolute position information.  Also, the encoder may be disabled.  To restart the encoder's operation, use the "Reset" function in the "Absolute Encoder Diagnostics" page of the web interface.

  If the mechanism is expected to operate at very high accelerations and decelerations, increase the limit used to detect bad encoder readings by reducing the value defined by the "Min. accel time to 5000 RPM, msec" DataID 10252.

  If DataID 10252 is properly set for the expected operation of the axis and the axis is not moving exceeding fast and this problem persists, it typically indicates that there is a hardware problem.  The possible hardware defects (starting with the most likely cause) are:  a poor connection in an encoder cable (please ensure all contacts are high compression with gold plating); a damaged encoder cable; electronic noise in the encoder cable; a defective encoder; a defective controller.""",
  },
  -3135: {
    "text": "Phase offset too large",
    "description": "The detected amplifier phase offset is too large to be corrected automatically. To perform phase offset correction manually, disable the automatic phase offset adjustment using DataID 10695.",
  },
  -3136: {
    "text": "Excessive movement during phase offset adjustment",
    "description": "Automatic amplifier phase offset correction (DataID 10695) can only be performed on Precise integrated amplifiers and when the motor is not in motion. If this error continues to persist even when the motor is stopped and you have Precise amplifiers, disable this adjustment by setting DataID 10695 to 1 and contact Precise support.",
  },
  -3137: {
    "text": "Amplifier hardware failure or invalid configuration",
    "description": """This error will be reported in the following situations:

     Amplifiers are being enabled and the controller does not have any integrated amplifiers but a Precise amplifier has been specified in the configuration database.
  The motor DC bus voltage is too high or low for the configured Precise amplifiers.  Most likely, this indicates a software configuration error.""",
  },
  -3138: {
    "text": "Encoder position not ready",
    "description": """The accuracy of the absolute encoder position data or the single turn position data of a serial encoder is reduced due to excessive rotational speed when the controller is turned on.

  For Panasonic and Tamagawa serial encoders, this error is generated when the "Reduced encoder resolution" (bit 1) is set in the "Encoder alarm" field (DataID 12251). See the Panasonic/Tamagawa encoder alarm documentation for more details.

  This alarm bit will be reset automatically by the encoder. However it is sometimes necessary to perform a re-initialization to clear the alarm condition.""",
  },
  -3139: {
    "text": "Encoder not ready",
    "description": """A serial encoder is not ready to operate. This error is generated in the following situations:

  The configuration parameter specifies a serial encoder but the encoder is not physically connected to the controller.
  The servo code failed to initialize the serial encoder.
  The servo detects the serial encoder model (Panasonic and Tamagawa only), but the model is different from the specified "Encoder type" (DataID 10027).
  An attempt was made to enable motor power after a serial encoder communication error (-3140) occurred without re-initialize the encoder.
  If a serial encoder is successfully initialized and is operated normally, the "Serial encoder ready" (bit 2) of "Encoder software status word" (DataID 12200) will be set to 1.""",
  },
  -3140: {
    "text": "Encoder communication error",
    "description": """The controller hardware has failed to establish communication with a serial encoder or communication was lost after the encoder was initialized. This typically indicates that the FPGA firmware has timed out while waiting for a communication packet from the encoder.  The servo code may also issue an "Encoder not ready" error (-3139) depending upon the failure situation.

  In addition to issuing this error, the "Serial encoder communication error" bit (bit 26) of the "Encoder software status word" (DataID 12200) will be set to 1. If the communication error is detected during the normal synchronized operation, the "Serial encoder ready" bit (bit 2) of the status word will be set to 0.

  This is a severe error and requires the encoder to be re-initialization and/or power cycled.""",
  },
  -3141: {
    "text": "Encoder overheated",
    "description": """A serial encoder has overheated. This error is generated in the following situations.

  For a Yaskawa serial encoder, this error is generated when the "Overheat" bit (bit 5) is set in the "Encoder alarm" field (DataID 12251). See the Yaskawa encoder alarm documentation for more details.

  This is a severe error and requires the encoder to be re-initialization and/or power cycled.""",
  },
  -3142: {
    "text": "Encoder hall sensor error",
    "description": """A serial incremental encoder has detected an error in its hall effect data.

  For a Panasonic serial incremental encoder (type 41), this error is generated when the "Count error between phase" bit (bit 4) and/or the "Illegal Hall Data bit (bit 6) is set in the "Encoder alarm" field (DataID 12251).
  This is a severe error and requires the encoder to be re-initialization and/or power cycled.""",
  },
  -3143: {
    "text": "General serial bus encoder error",
    "description": """This error is generated by some serial encoders that pass back a limited amount of status information while the robot is running.  When this error occurs, it means that an encoder has signaled an error, but no specific information about the nature of the error is known.

  It may be possible to obtain more information on the error if you cycle the AC power on the controller.  For example, if this error was due to a low battery voltage condition, cycling AC power and re-homing the robot will generate an "Encoder battery low" (-3127) error.

  To reset this error, go to the Absolute Encoder maintenance panel in the Settings section of the controller's web interface.  If the encoder error persists after the encoder is reset, the Operator Control Panel will display the detailed error information.


  Currently, this error only occurs with the daisy-chained serial bus Panasonic encoders that are utilized in the Denso line of robots.""",
  },
  -3144: {
    "text": "Amplifier overheating",
    "description": 'The indicated power amplifier has exceeded its permitted operating temperature. Normally this error is followed by the generic error -1610 "Controller overheating". For amplifiers of the G3xxx or G1xxxA/B controllers (except for the G3x3xA 30A version), the limit is 80C.  For the amplifiers of the G3x3xA 30A version, the limit is 100C. See Amplifier temperature (DataID 12605) for the actual amplifier temperatures. The G2xxx controller power amplifier chips are equipped with internal temperature monitoring to protect the power modules, but they do not have temperature sensors that can be read.',
  },
  -3145: {
    "text": "Motor overheating",
    "description": 'The indicated motor has exceeded its permitted operating temperature. Normally this error is followed by the generic error -1610 "Controller overheating". The parameter "Max motor temperature" (DataID 10110) determines the maximum allowed temperature. See "Motor temperature" (DataID 12110) for the actual motor temperature. Motor temperature monitoring is configurable and requires special temperature sensors in the motors and special signal conditioning electronics.',
  },
  -3146: {
    "text": "Earlier encoder error inhibiting power",
    "description": "An attempt to enable motor power failed because a severe encoder error previously occurred.  Consequently, the encoder is not operational and permitting motor power to be enabled could result in the motor being unstable.  Typically, the encoder in question is a serial absolute or incremental type and is either not communicating properly or must be reset.  Please go to the following web page to view the serial encoder status and to clear any error conditions:  Setup > Hardware Tuning and Diagnostics > Absolute Encoder.",
  },
  -3147: {
    "text": "Abnormal envelope error",
    "description": """This error indicates a more severe instance of the condition signaled by the "Hard envelope error" (-3100).  Like the "Hard" error, this error indicates that there was a significant difference betortween an axis' commanded position and its actual position.  And, like the "Hard" error, this error is generated when the value of the "Position tracking error, mcnt" (DataID 12320) for an axis exceeds its "Hard envelope error limit, mcnt" (DataID 10303) for a sufficient period of time.


  However, the "Abnormal" error is generated in place of the "Hard" error when the command velocity is lower than 33% of the Manual mode speed limit (DataID 10209). So, the "Abnormal" error indicates that a significant position error occurred when an axis was not supposed to be moving fast.  This error normally indicates a collision occurred when the robot was moving at a slow speed or one of the following motor configuration parameters are incorrect.

  Encoder sign (DataID 10202)
  Torque sign (DataID 10609)
  Commutation sign (DataID 10650)
  Hard envelope error (DataID 10303)
  Commutation offset (DataID 10775)
  Commutation position at zero index (16653)""",
  },
  -3148: {
    "text": "Encoder hardware related warning",
    "description": "This indicates that an internal encoder warning bit is ON. Currently this warning is only reported by BiSS encoders. Please consult the documentation for the specific encoder model to determine the nature of the error.\n\nThis is only a warning message. This error will not stop program execution or turn Off robot/motor power.",
  },
  -3149: {
    "text": "Velocity restrict limit exceeded",
    "description": """(CAT-3, GPL 4.2 or later) The low-level control that advances the commutation angle for a BLDC motor has detected that the motor is attempting to turn faster than the Run-time or Manual mode speed limits (DataIDs 10208/10209) permit. The motor is immediately shut down and an error is signaled.

  Since a BLDC motor cannot generate torque if the commutation angle is not properly set and cannot rotate unless the commutation angle is properly advanced, this check provides a low level independent test to ensure that a motor is not rotating faster than permitted. This is sometimes referred to as an independent "Velocity Restrict" test.

  This error will only be reported in controllers with FPGA firmware that supports CAT-3 safety capability, and the CAT-3 safety feature is enabled in software.

  This error may indicate that:

  DataIDs 10208/10209 are set too low
  An application program is trying to drive the motor faster than allowed
  An encoder read error has occurred due to noise on the encoder lines or bad data has been sent by an encoder. For non-CAT-3 systems, these types of errors typically generate "Encoder data or accel/decel limit errors" (-3134) or "Encoder operation errors" (-3126) or "Encoder communication errors" (-3140).
  A system hardware failure or a system software error has occurred that attempted to drive the motor faster than allowed.""",
  },
  -3150: {"text": "Position compare not enabled", "description": ""},
  -3151: {"text": "Position compare memory allocation failed", "description": ""},
  -3152: {"text": "Position compare buffer empty", "description": ""},
  -3153: {"text": "Failed to start position compare task", "description": ""},
  -3154: {"text": "Position compare buffer full", "description": ""},
  -3155: {"text": "Invalid DOUT for position compare", "description": ""},
  -3156: {"text": "Motor moving away from compare position", "description": ""},
  -3157: {"text": "Position compare internal inconsistence error", "description": ""},
  -3160: {
    "text": "Dump circuit duty cycle exceeded",
    "description": "The motor power dump circuit has been turn on too long. The dump circuit has been switched off to avoid overheating the dump resistor.\n\nNOTE: If you load GPL versions 4.1J1 and later or 4.2E and later into a PreciseFlex™400 Rev B or earlier robot, this error may be erroneously generated. If this occurs, loading GPL 4.2H or later will properly detect the dump board in the robot and eliminate this error.",
  },
  -3161: {"text": "No position updated in Fpga", "description": ""},
  -4000: {
    "text": "Cannot connect to vision server",
    "description": 'GPL cannot establish an Ethernet TCP connection with the Precise Vision software on the vision host PC. If the web interface is not working, check the basic Ethernet connectivity. In addition, verify that the "Vision Server IP address" (DataID 424) is set properly for your vision host PC. Make sure that Precise Vision is active on that PC.',
  },
  -4001: {
    "text": "Invalid vision protocol",
    "description": "GPL is unable to decode a message received from PreciseVision. Verify that the versions of GPL and PreciseVision are compatible. If so, please report this error to customer service.",
  },
  -4002: {
    "text": "Vision interlocked",
    "description": "The communications link to PreciseVision is being used by a different GPL thread. Only one thread may access vision at a time. Stop any other threads that may be accessing PreciseVision.",
  },
  -4003: {"text": "Vision interlocked", "description": ""},
  -4010: {
    "text": "Vision invalid protocol",
    "description": "PreciseVision is unable to decode a message received from GPL. Verify that the versions of GPL and PreciseVision are compatible. If so, please report this error to customer service.",
  },
  -4011: {
    "text": "Vision internal error",
    "description": "An unexpected error has occurred within PreciseVision. Please report this error to customer service",
  },
  -4012: {
    "text": "Vision unknown process",
    "description": "A GPL vision method has specified a vision process that is not defined in the current PreciseVision project. Verify that the correct GPL project and PreciseVision project are loaded.",
  },
  -4013: {
    "text": "Vision unknown tool",
    "description": "A GPL vision method has specified a vision tool that is not defined in the current PreciseVision project. Verify that the correct GPL project and PreciseVision project are loaded.",
  },
  -4014: {
    "text": "Vision invalid index",
    "description": "A GPL vision Result method has specified an index for a result that does not exist. Verify that the correct GPL project and PreciseVision project are loaded. Verify the number of results returned by the current vision process.",
  },
  -4016: {
    "text": "Vision invalid arguments",
    "description": "The argument values specified in a vision ToolProperty method are not valid for that property.",
  },
  -4017: {
    "text": "Vision property not found",
    "description": "The property name specified in a vision ToolProperty method does not exist. Verify that the correct GPL project and PreciseVision project are loaded.",
  },
  -4018: {
    "text": "Vision property protected",
    "description": "An attempt has been made to change a vision tool property than cannot be modified.",
  },
  -4019: {
    "text": "Vision process failed",
    "description": "Execution of a selected process within PreciseVision has failed. This is normally due to the acquisition operation failing.",
  },
  -4020: {
    "text": "Vision invalid calibration type",
    "description": "A remote request to execute a vision calibration procedure failed because an invalid calibration type was specified. Set the calibration type to a valid type and try again.",
  },
  -4021: {
    "text": "Vision invalid project name",
    "description": "A remote request to load a vision project failed. Probably the project name was not valid. Verify that the name specified is correct and that the file exists in the correct location.",
  },
  -4022: {
    "text": "Vision calibration file not found",
    "description": "A remote request to load a vision calibration file failed because the calibration file could not be found. Verify that the file name specified is correct and that the file exists in the correct location.",
  },
  -4023: {
    "text": "Vision project not saved",
    "description": "A remote request to load a new vision project has failed because the current project has not been saved. Save the current project before attempting to load a new one.",
  },
}
