EDIT. Aug 2020 Massive update to the list. (See below for the PID loop errors).
I’m guessing many of you have used the handy feature in PAC Control under Help > Error Lookup which takes an error code, say:
-9
and converts it into more human understandable text, like:
“Timeout. No response from device. Check hardware connection, address, power, and jumpers.”
You’ll see these same error descriptions when inspecting the message queue.
But have you ever wanted to have this information available from within your strategy, perhaps to display in PAC Display or log to a file? I’ve attached a subroutine to convert the current error values into their corresponding messages (remember that these might be expanded in the future).
Below I’ve included the code if you’d just like to copy it directly. For more info on all of these, see form 1700: PAC Control User’s Guide, appendix B.
switch( nErrorNumber )
//case 0: sName ="Operation performed successfully.";break
case -1: sName ="Undefined command.";break
case -2: sName ="Checksum or CRC mismatch.";break
case -3: sName ="Buffer overrun or invalid length error.";break
case -4: sName ="Device has powered up. ('Powerup clear expected' message received.)";break
case -5: sName ="Operation failed.";break
case -6: sName ="Data field error.";break
case -7: sName ="Watchdog timeout has occurred.";break
case -8: sName ="Invalid data.";break
case -9: sName ="Timeout. No response from device. Check hardware connection address power and jumpers.";break
case -10: sName ="Invalid port number.";break
case -11: sName ="Could not send data.";break
case -12: sName ="Invalid table index.";break
case -13: sName ="Overflow error.";break
case -14: sName ="Invalid number.";break
case -15: sName ="Cannot divide by zero.";break
case -16: sName ="Bus error.";break
case -17: sName ="Port or object is already locked.";break
case -18: sName ="I/O Unit not configured.";break
case -19: sName ="Reading hold for wrong reaction type.";break
case -20: sName ="Device busy. May be in use by another user or another application.";break
case -21: sName ="Had to relock host port in 'QUIT'.";break
case -22: sName ="Command not valid on specified I/O Unit.";break
case -23: sName ="Destination string too short.";break
case -24: sName ="Device does not understand command.";break
case -25: sName ="Port or object is not locked.";break
case -26: sName ="Unknown response from device.";break
case -27: sName ="Invalid limit error. High/Low values may be reversed.";break
case -28: sName ="Object not found.";break
case -29: sName ="Wrong object type. Most likely caused by moving a pointer table element to a pointer of the wrong type.";break
case -30: sName ="Pointer was not initialized.";break
case -31: sName ="Cannot store local subroutine object into a pointer table parameter.";break
case -32: sName ="Device has not been initialized.";break
case -33: sName ="Unable to clear all characters from port.";break
case -34: sName ="Invalid I/O command or invalid memory location.";break
case -35: sName ="I/O point mismatch: a configured channel does not match the type found on the I/O Unit or is a channel type not supported by the I/O Unit's firmware. Check www.opto22.com for firmware updates.";break
case -36: sName ="Invalid command or feature not implemented.";break
case -37: sName ="Timeout on lock.";break
case -38: sName ="Timeout on send.";break
case -39: sName ="Timeout on receive.";break
case -40: sName ="Not enough data returned. (Received less than expected.)";break
case -41: sName ="Invalid return data.";break
case -42: sName ="Invalid limit (on string index task state priority etc.).";break
case -43: sName ="Received a NACK.";break
case -44: sName ="String too short.";break
case -45: sName ="Null string.";break
case -46: sName ="Invalid string.";break
case -47: sName ="Open failed--handle has already been opened.";break
case -48: sName ="No such device available.";break
case -49: sName ="No more connections are available. Maximum number of connections already in use.";break
case -50: sName ="Open connection timeout. Could not establish connection within the timeout period.";break
case -51: sName ="Close connection timeout. Could not close connection within timeout period.";break
case -52: sName ="Invalid connection -- not opened.";break
case -53: sName ="Connection number not valid.";break
case -54: sName ="No active connection for specified port.";break
case -55: sName ="Control engine type is invalid for the function requested.";break
case -56: sName ="Invalid address.";break
case -57: sName ="String not found.";break
case -58: sName ="No data received.";break
case -59: sName ="Could not receive data.";break
case -60: sName ="Empty stack error. Control engine attempted to perform an operation that expected data on the control engine stack.";break
case -61: sName ="Dictionary full error; no more RAM available. Try clearing and re-downloading the strategy using PAC Control or PAC Terminal if appropriate.";break
case -62: sName ="Stack full error. Control engine stack has grown too big.";break
case -63: sName ="Compile-only error. A command or 'word' was encountered that should only be used when compiling commands or 'words'.";break
case -64: sName ="Execute-only error. A command or 'word' was encountered that cannot be used when compiling.";break
case -65: sName ="Definition not finished.";break
case -66: sName ="Requested item in protected dictionary";break
case -67: sName ="Out of memory. To minimize the size of your strategy reduce the number and size of variables (especially tables). You can also shrink your strategy by using subroutines to perform common tasks.";break
case -68: sName ="Conditionals do not match.";break
case -69: sName ="Invalid parameter (null pointer) passed to command.";break
case -70: sName ="Not enough data supplied.";break
case -71: sName ="Out of non-volatile memory. If applicable check length of persistent and initialize-on-download tables.";break
case -72: sName ="Too many nested subroutines (one calls another calls another).";break
case -73: sName ="Invalid subroutine parameters. Too many parameters passed or incorrect subroutine.";break
case -74: sName ="Invalid filename. Check length and special characters.";break
case -75: sName ="No remaining file handles.";break
case -76: sName ="End of file error. Attempted to access data past the end of the file.";break
case -77: sName ="Host task failed. Possible cause: specified host port is already in use or host attempted to load a non-existent strategy file.";break
case -78: sName ="No destination given (the name of the file ftp on the remote server).";break
case -79: sName ="I/O Unit mismatch: the configured I/O Unit type does not match the unit type found. ";break
case -80: sName ="Reboot for changes to the Windows Registry to take effect.";break
case -81: sName ="Error writing to the memory map.";break
case -82: sName ="Error reading from the memory map.";break
case -83: sName ="Invalid severity. Valid values: Info = 4 Warn = 8 Error = 16";break
case -84: sName ="Can't reallocate memory while it is in use by a subroutine.";break
case -85: sName ="TX Semaphore creation error.";break
case -86: sName ="RX Semaphore creation error.";break
case -87: sName ="Open error.";break
case -88: sName ="RX task creation error.";break
case -89: sName ="RX HISR creation error.";break
case -90: sName ="TX HISR creation error.";break
case -91: sName ="LISR registration error.";break
case -92: sName ="Open UART error.";break
case -93: sName ="I/O Unit not enabled. Previous communication failure may have disabled the unit automatically. Reenable it and try again.";break
case -94: sName ="Trying to enable NULL event or bad event command.";break
case -95: sName ="Data stack is not empty";break
case -96: sName ="Data stack critically full; stopping task";break
case -97: sName ="Too many items popped from data stack";break
case -98: sName ="Boot ID from I/O unit doesn't match the controller's stored value; performing full config";break
case -100: sName ="Invalid length for control engine name. Must be 1 to 31 characters.";break
case -101: sName ="Invalid character in control engine name. Valid characters are letters numbers spaces and most other characters except colons and square brackets. Spaces cannot be used as first or last characters.";break
case -102: sName ="First and last characters in control engine name cannot be spaces.";break
case -103: sName ="Could not unlock. The task attempting to do the unlock does not match the task that currently has the lock.";break
case -104: sName ="Bad key data (data missing bad length or corrrupt).";break
case -105: sName ="Decryption failure";break
case -106: sName ="Encryption failure";break
case -107: sName ="The board is offline or disabled; no send / receive attempt made";break
case -108: sName ="An operation was interrupted";break
case -109: sName ="Performed a write to read-only memory or file.";break
case -110: sName ="The microSD card is missing.";break
case -111: sName ="The hardware doesn't support this feature.";break
case -112: sName ="NVRAM does not match the current strategy; it may have been changed by a strategy from uSD or the battery may need to be replaced.";break
case -113: sName ="An unhandled exception was encountered.";break
case -114: sName ="The operation was aborted.";break
case -115: sName ="Search failed.";break
case -116: sName ="Operation would result in an endless loop.";break
case -203: sName ="Driver could not be found or loaded.";break
case -204: sName ="Could not write new entry to Windows Registry. Make sure you have administrative privileges for the operating system.";break
case -205: sName ="Could not read value(s) from Windows Registry.";break
case -206: sName ="Startup data in Windows Registry is invalid or missing.";break
case -207: sName ="Duplicate entry already exists in Windows Registry.";break
case -300: sName ="No response from modem during attempt to dial. Use HyperTerminal to make sure modem responds with 'OK' to the 'AT' command.";break
case -301: sName ="The type of port is invalid for this operation. For example a dialing a modem was attempted on an ARCNET port.";break
case -302: sName ="Error issuing a dial command to modem. Perhaps the dial string is empty.";break
case -303: sName ="Timeout waiting for modem to connect.";break
case -304: sName ="Could not connect. Phone line may be busy.";break
case -305: sName ="Could not find modem handle. Hang up and dial again.";break
case -400: sName ="Control engine previously acquired by another process.";break
case -401: sName ="Authorization failed. More info may be available in a system log.";break
case -403: sName ="Internal control engine handle invalid.";break
case -404: sName ="RPC binding error. NetBios might not be running.";break
case -405: sName ="RPC call error. Verify that all appropriate protocols are installed and running.";break
case -406: sName ="Control engine inaccessible. Cannot acquire lock.";break
case -407: sName ="File not found.";break
case -408: sName ="Error during file access.";break
case -409: sName ="Operation cancelled by user.";break
case -410: sName ="Dictionary is incomplete after flash download.";break
case -411: sName ="Ethernet: Invalid socket";break
case -412: sName ="Ethernet: Cannot connect error. Check IP address and subnet mask.";break
case -413: sName ="Invalid idb file name.";break
case -414: sName ="Out of handles to open.";break
case -415: sName ="Cannot create file.";break
case -416: sName ="Cannot create temporary file.";break
case -417: sName ="Cannot open file.";break
case -418: sName ="Cannot read file.";break
case -419: sName ="Not a valid PAC Control file.";break
case -420: sName ="Invalid handle.";break
case -421: sName ="Write access not allowed.";break
case -422: sName ="Cannot copy temporary .idb file.";break
case -423: sName ="Cannot rename temporary file.";break
case -424: sName ="Cannot delete temporary file.";break
case -425: sName ="Invalid storage format.";break
case -426: sName ="Incorrect number of objects specified.";break
case -427: sName ="Invalid bitmask for binary storage.";break
case -428: sName ="Cannot open dump output file.";break
case -429: sName ="The strategy you're attempting to open was last saved with a newer version of PAC Control than the one you're currently using. You may need to update your version of PAC Control.";break
case -430: sName ="Invalid data range. Verify high value is greater than low value.";break
case -431: sName ="Cannot release object/device (may not be locked).";break
case -432: sName ="Cannot unlock object/device (may not be locked) -- in use by another process.";break
case -433: sName ="Object/device already locked.";break
case -434: sName ="The control engine is in use by another process on this computer or may be unreachable.";break
case -435: sName ="Check the strategy on the control engine.";break
case -436: sName ="Memory exception during a database operation.";break
case -437: sName ="No acceptable socket interface found.";break
case -438: sName ="Could not create socket.";break
case -439: sName ="Not connected.";break
case -440: sName ="Could not bind socket.";break
case -441: sName ="Not listening on socket.";break
case -442: sName ="Could not accept on socket.";break
case -443: sName ="Could not receive on socket.";break
case -444: sName ="Could not send on socket.";break
case -445: sName ="ioCdb: The file format change has been rejected by the user.";break
case -446: sName ="FTP: login failed. Check username password and max login on the server";break
case -447: sName ="FTP: connect failed. Check IP address and port.";break
case -448: sName ="FTP: could not create session. Check IP address and port.";break
case -449: sName ="FTP: error while setting local port number that incoming data connections should use.";break
case -450: sName ="DNS could not resolve host name to an IP address.";break
case -451: sName ="SMTP: Login failed. Check username and password.";break
case -452: sName ="File already exists.";break
case -453: sName ="Invalid pathname or drive specification.";break
case -454: sName ="Unable to connect to DNS server. Check DNS and gateway configuration.";break
case -455: sName ="FTP: Unable to resume download.";break
case -456: sName ="Unrecognized or bad encoding.";break
case -457: sName ="Maximum file size exceeded.";break
case -458: sName ="Local disk is full.";break
case -459: sName ="Remote disk is full.";break
case -460: sName ="File not found on server.";break
case -461: sName ="Passwords do not match";break
case -462: sName ="Do not set to the default value.";break
case -463: sName ="Insufficient permissions to perform the operation.";break
case -464: sName ="Path points outside your accessible address space.";break
case -465: sName ="Not a directory.";break
case -466: sName ="Too many symbolic links encountered in resolving path.";break
case -467: sName ="Path would result in too many symbolic links.";break
case -468: sName ="Specified name is a directory.";break
case -500: sName ="ConnectionDef missing or not defined.";break
case -501: sName ="Could not open recordset.";break
case -502: sName ="DAO exception.";break
case -503: sName ="Invalid database table length.";break
case -504: sName ="Invalid state for database handshake (neither IDLE XFER_REQUEST nor STATE_IN_PROGRESS).";break
case -505: sName ="No database handshake found for the table.";break
case -506: sName ="Could not write to ErrorLog.";break
case -507: sName ="Cannot write to a digital/analog input. Only outputs may be written to.";break
case -508: sName ="Invalid state for control engine handshake (neither IDLE XFER_REQUEST nor STATE_IN_PROGRESS).";break
case -509: sName ="Failure resetting control engine handshake.";break
case -510: sName ="Failure updating control engine handshake.";break
case -511: sName ="Failure writing to database.";break
case -512: sName ="Failure reading from database.";break
case -513: sName ="Failure writing to control engine.";break
case -514: sName ="Failure reading from control engine.";break
case -515: sName ="Runtime tables did not validate or were not created.";break
case -516: sName ="Problem opening recordset for writing.";break
case -517: sName ="Empty record in write table.";break
case -518: sName ="Failure opening runtime database.";break
case -519: sName ="No tags to read/write.";break
case -520: sName ="Failure opening master project database.";break
case -521: sName ="Failure loading project from master project database.";break
case -522: sName ="Could not delete contents of a table.";break
case -523: sName ="Firmware version could not be read. Possible cause: firmware out of date.";break
case -524: sName ="Could not read firmware version. Possible cause: EPROM out of date.";break
case -525: sName ="Strategy time/date stamp mismatch.";break
case -526: sName ="Strategy name mismatch.";break
case -527: sName ="Invalid typemask used.";break
case -528: sName ="Failure deleting records from table.";break
case -529: sName ="Failure writing to table.";break
case -530: sName ="Invalid control engine name. Control engine not configured (name not in Windows Registry). Make sure the control engine name is not misspelled.";break
case -531: sName ="Buffer full.";break
case -532: sName ="Buffer empty.";break
case -533: sName ="Control engine type mismatch. Control engine is not supported by this version of software.";break
case -534: sName ="Attempt(s) to communicate with I/O Unit failed.";break
case -535: sName ="I/O unit has successfully switched to alternate target address.";break
case -536: sName ="All target addresses disabled on I/O unit.";break
case -537: sName ="All target addresses on I/O unit already assigned.";break
case -538: sName ="The address string passed does not match the passed I/O unit's address.";break
case -539: sName ="I/O error; performing retry";break
case -540: sName ="The strategy in RAM has not been burned to flash.";break
case -541: sName ="A bad configuration was detected on an I/O unit";break
case -542: sName ="I/O unit configuration completed";break
case -543: sName ="Communications has been attempted with all configured I/O target addresses";break
case -600: sName ="Redundant controller qualification failed.";break
case -601: sName ="Unable to connect to an active controller.";break
case -602: sName ="Redundant backup controller is not compatible with active controller.";break
case -603: sName ="Redundant controller not yet set as active or backup.";break
case -604: sName ="Redundant backup kernel update failed.";break
case -605: sName ="Redundant backup strategy update failed.";break
case -606: sName ="Redundant command issued on non-redundant or wrong (active vs backup) controller.";break
case -607: sName ="Redundant command received out of order.";break
case -608: sName ="Redundant sync command received with no task ptr.";break
case -609: sName ="Redundant STEP command timeout.";break
case -610: sName ="Redundant message failure.";break
case -611: sName ="Cannot download redundant strategy to non-redundant controller or non-redundant strategy to redundant controller.";break
case -612: sName ="Unable to enqueue sync command";break
case -613: sName ="I/O configuration failed";break
case -614: sName ="Incompatible I/O unit firmware.";break
case -615: sName ="Io monitor can not communicate with I/O unit.";break
case -2002: sName ="PKI: Certificate expired";break
case -2003: sName ="PKI: Certificate unmatched";break
case -2004: sName ="PKI: Unable to add private key";break
case -2005: sName ="PKI: Certificate signed by unknown CA";break
case -2006: sName ="PKI: No root certificates found";break
case -2007: sName ="PKI: Error loading trust store";break
case -2008: sName ="PKI: Self-signed certificate";break
case -2100: sName ="SSL: Client start failure";break
case -2101: sName ="SSL: Client stop failure";break
case -2103: sName ="SSL: Handshake failed";break
case -2104: sName ="SSL: Handshake failed due to invalid or unverifiable certificate";break
case -2105: sName ="SSL: Unspecified asynchronous platform error";break
case -2106: sName ="SSL: SSL session is not open";break
case -2107: sName ="SSL: Crypto engine not found";break
case -2108: sName ="SSL: Cannot set default SSL engine";break
case -2109: sName ="SSL: Couldn't use specified cipher";break
case -2110: sName ="SSL: Server start failure";break
case -2111: sName ="SSL: Server stop failure";break
case -2200: sName ="Image digital signature verification failed";break
case -8607: sName ="Invalid protocol.";break
case -8608: sName ="Port initialization failed.";break
case -8610: sName ="Baud rate is not valid/supported.";break
case -8612: sName ="Old response to new command.";break
case -8613: sName ="Out of memory (in the SerialData global array).";break
case -8614: sName ="Connection type is invalid.";break
case -8615: sName ="Control engine does not have flash EPROM.";break
case -8616: sName ="Invalid control engine firmware version";break
case -8617: sName ="Error occurred while storing to flash EPROM.";break
case -8618: sName ="No B3000 found.";break
case -8619: sName ="NetBios connect error.";break
case -8620: sName ="ioCdb: Unknown error.";break
case -8621: sName ="Ran out of locking objects.";break
case -8622: sName ="Response not from the expected node.";break
case -8623: sName ="WinRT: Mutual Exclusion could not be created.";break
case -8624: sName ="WinRT: Mutual Exclusion could not be deleted.";break
case -8625: sName ="Could not create a handle. Possible cause: port in use by another application.";break
case -8626: sName ="Control engine name does not exist in the controller names repository. Make sure the control engine name is not misspelled.";break
case -10013: sName ="Ethernet socket error:Permission denied.";break
case -10048: sName ="Ethernet socket error:Address already in use.";break
case -10049: sName ="Ethernet socket error:Cannot assign requested address.";break
case -10047: sName ="Ethernet socket error:Address family not supported by protocol family.";break
case -10037: sName ="Ethernet socket error:Operation already in progress.";break
case -10054: sName ="Ethernet socket error:Connection reset by peer.";break
case -10039: sName ="Ethernet socket error:Destination address required.";break
case -10014: sName ="Ethernet socket error:Bad address.";break
case -10064: sName ="Ethernet socket error:Host is down.";break
case -10065: sName ="Ethernet socket error:No route to host.";break
case -10036: sName ="Ethernet socket error:Operation now in progress.";break
case -10004: sName ="Ethernet socket error:Interrupted function call.";break
case -10022: sName ="Ethernet socket error:Invalid argument.";break
case -10056: sName ="Ethernet socket error:Socket is already connected.";break
case -10024: sName ="Ethernet socket error:Too many open files.";break
case -10040: sName ="Ethernet socket error:Message too long.";break
case -10050: sName ="Ethernet socket error:Network is down.";break
case -10052: sName ="Ethernet socket error:Network dropped connection on reset.";break
case -10051: sName ="Ethernet socket error:Network is unreachable.";break
case -10055: sName ="Ethernet socket error:No buffer space available.";break
case -10042: sName ="Ethernet socket error:Bad protocol option.";break
case -10057: sName ="Ethernet socket error:Socket is not connected.";break
case -10038: sName ="Timeout while connecting to device. Check hardware connection address power and jumpers.";break
case -10045: sName ="Ethernet socket error:Operation not supported.";break
case -10046: sName ="Ethernet socket error:Protocol family not supported.";break
case -10067: sName ="Ethernet socket error:Too many processes.";break
case -10043: sName ="Ethernet socket error:Protocol not supported.";break
case -10041: sName ="Ethernet socket error:Protocol wrong type for socket.";break
case -10058: sName ="Ethernet socket error:Cannot send after socket shutdown.";break
case -10044: sName ="Ethernet socket error:Socket type not supported.";break
case -10060: sName ="Ethernet socket error:Connection timed out.";break
case -10109: sName ="Ethernet socket error:Class type not found.";break
case -10035: sName ="Ethernet socket error:Resource temporarily unavailable.";break
case -11001: sName ="Ethernet socket error:Host not found.";break
case -10093: sName ="Ethernet socket error:Successful startup not yet performed.";break
case -11004: sName ="Ethernet socket error:Valid name no data record of requested type.";break
case -11003: sName ="Ethernet socket error:This is a nonrecoverable error.";break
case -10091: sName ="Ethernet socket error:Network subsystem is unavailable.";break
case -11002: sName ="Ethernet socket error:Nonauthoritative host not found.";break
case -10092: sName ="Ethernet socket error:Version out of range.";break
case -10101: sName ="Ethernet socket error:Asynchronous message sent.";break
case -13000: sName ="Controller database file not found.";break
case -13001: sName ="Library does not support requested function.";break
case -13002: sName ="Error in the opening method string.";break
case -13003: sName ="Invalid method argument created.";break
case -13004: sName ="Data sent doesn't match returned value.";break
case -13005: sName ="A driver function was not found.";break
case -13006: sName ="An invalid ioctl function was requested.";break
case -13007: sName ="The serial driver end-of-message (EOM) character was not set.";break
case -13008: sName ="No driver transport modules found.";break
case -13009: sName ="The requested function name not found in module.";break
case -13010: sName ="The named controller was not found in the list.";break
case -13011: sName ="The limit of controllers in the list is reached.";break
case -13012: sName ="Strange error; ever have one of those days.";break
case -13013: sName ="Simple fail flag.";break
case -13014: sName ="Short response received.";break
case -13015: sName ="Library env variable not found.";break
case -13016: sName ="Buffer size is too small for protocol.";break
case -13017: sName ="An opto 22 system environment variable was not found.";break
case -13018: sName ="Setting the socket broadcast option failed.";break
case -13019: sName ="An argument in a string is bad.";break
case -13020: sName ="A misconfigured point error is reported. (Check brain's module configuration)";break
case -13021: sName ="Sequence ID mismatch. Somehow the response sequence ID doen't match the command's.";break
case -13022: sName ="Packet response id was not expected to be received.";break
case -13023: sName ="Failed to acquire the object lock.";break
case -13024: sName ="The signature lengths don't match.";break
case -13025: sName ="The signatures don't match.";break
case -13026: sName ="The object's initialize or open hasn't been called.";break
case -13027: sName ="Function called reports a general timeout";break
case -13028: sName ="The object is not open.";break
case -13029: sName ="Object is already initialized with engine and cannot be modified.";break
case -13030: sName ="Unknown object type. Inspect tag name for error";break
case -13031: sName ="Another object was added to a full list. Inspect the list size.";break
case -13032: sName ="An invalid option data type was referenced.";break
case -13033: sName ="A 4-pass command validation failed.";break
case -13034: sName ="Optomux Brain reports a power up clear was expected. It reset or power cycled since last command.";break
case -13035: sName ="Optomux Brain reports an unknown command was received.";break
case -13036: sName ="Optomux Brain reports a command with a bad checksum was received.";break
case -13037: sName ="Optomux Brain reports that too many characters were received (missing a carriage return).";break
case -13038: sName ="Optomux Brain reports that non-printable ASCII characters were received.";break
case -13039: sName ="Optomux Brain reports that the command received has an out of range data field(s).";break
case -13040: sName ="Optomux Brain reports that the communication watchdog timed out (activated).";break
case -13041: sName ="Optomux Brain reports that the command received has invalid limits.";break
case -13042: sName ="A stream connection is still in progress.";break
case -13043: sName ="The object table is dirty when trying to read the object table.";break
case -13044: sName ="The object table has incompatible data types.";break
case -13045: sName ="The engine read function received an invalid object feature type.";break
case -13046: sName ="The tag inspected is not an object; it might be a dictionary word.";break
case -13047: sName ="A system environment variable (OPTOCONFIG or OPTOUSER) is missing";break
case -13048: sName ="The List is empty no items to return.";break
case -13049: sName ="A remote host closed or shut down a TCP session. Not necessarily an error.";break
case -13050: sName ="The stream being closed was not created by the Accept member function.";break
case -13051: sName ="The operation was aborted by the client application.";break
case -13052: sName ="The operation returned more data than was expected.";break
case -13053: sName ="The command buffer created is too large.";break
case -13054: sName ="Winsock configuration is wrong or missing from the system.";break
case -13055: sName ="Host name or address is invalid.";break
case -13056: sName ="This device is already configured and cannot be reconfigured.";break
case -13057: sName ="A requested device (index name ...) doesn't exist.";break
case -13058: sName ="The response from a device in unrecognizable or changed unexpectedly.";break
case -13059: sName ="Winsock library not initialized.";break
case -13060: sName ="Ethernet connection is down.";break
case -13061: sName ="The buf parameter is not completely contained in a valid part of the user address space.";break
case -13062: sName ="The socket is not connected.";break
case -13063: sName ="The connection has been broken; the keep-alive function detected a failure while the operation was in progress.";break
case -13064: sName ="The file descriptor is not a socket.";break
case -13065: sName ="The socket option is not supported.";break
case -13066: sName ="The socket has been shut down by remote host.";break
case -13067: sName ="The socket is marked as nonblocking and the receive operation would block.";break
case -13068: sName ="The message size of the socket is invalid.";break
case -13069: sName ="The socket is invalid.";break
case -13070: sName ="The connection is aborted.";break
case -13071: sName ="The connection has timed out.";break
case -13072: sName ="The connection has been reset by a remote host.";break
default: NumberToString(nErrorNumber, sName); break
endswitch
I hope that’s useful!
-OptoMary