Connecting / Getting Started¶
Enabling the remote server¶
Remote communication must be activated in SENTIO's configuration file:
The server configuration lives in the node Configuration / Main / RemoteServer, which has these attributes:
| Attribute | Description |
|---|---|
Type |
One of "TCPIP", "RS232", or "GPIB" |
Config |
A type-specific configuration string (see below) |
Terminator (optional) |
Line-termination symbol used by SENTIO: "LF" (Line Feed), "CR" (Carriage Return), or "CRLF" (Carriage Return + Line Feed). If omitted, "LF" is used. |
Only one communication channel (TCP/IP, GPIB, or RS232) can be active at a time.
TCP/IP setup¶
Set Type="TCPIP" and supply an IP address and port in Config. Example — a server listening on port 35555 of the localhost:
If the connection fails, try turning off the Windows Firewall.
GPIB setup¶
SENTIO supports GPIB communication over either an NI or an ADLINK GPIB card. Set Type="GPIB". The Config string has the form:
| Field | Description |
|---|---|
| Board Name | Set by the card driver tools (e.g. "GPIB0"). Use the vendor's tools to determine the board name. |
| Board Address | Device address, integer 1–31. Must be unique on the GPIB network. |
| Vendor Code | Either "NI" or "ADLINK". |
Example — GPIB card "GPIB0" (National Instruments), device address 11:
RS232 setup¶
Set Type="RS232". The Config string has colon-separated fields:
| Field | Description |
|---|---|
| COM Port | Name of the COM port, e.g. "COM1" |
| Baud Rate | One of 9600, 19200, 38400, 57600, 115200 |
| Parity | One of "NONE", "ODD", "EVEN" |
| Handshake | One of "OFF", "NONE", "XON_XOFF", "XONXOFF" |
Example — COM1, 9600 baud, no parity, no handshake:
RS232 communication requires the terminator CRLF (0D 0A hex) at the end of every command string, e.g. after move_chuck_contact.
Communication protocol¶
Sending commands¶
- The command string starts with the command name (case sensitive).
- If parameters are present, they are separated from the command name by at least one space.
- Multiple parameters are separated from each other by commas (case sensitive unless stated otherwise).
- Neither the command name nor parameters are quoted.
Receiving commands (response format)¶
After a command executes, SENTIO returns a response string containing a comma-separated parameter list:
| # | Field | Description |
|---|---|---|
| 1 | Result code | An integer combining an error code (bits 1–10) and status code (bits 11–12). See the error code table below. |
| 2 | Command ID | Used for asynchronous remote commands; always 0 for synchronous commands. |
| 3…n | Response | Command-dependent — see each command's description in the reference below. |
The first return value encodes both error and status information; a nonzero value does not necessarily indicate an error. To isolate the error code, mask off the lowest 10 bits:
Status bits can be queried independently (stepping status only):
Result / error codes (lower 10 bits of the first response value):
| Code | Meaning |
|---|---|
| 0 | NoError |
| 1 | InternalError |
| 2 | ExecutionError |
| 3 | CommandHandlerNotFound |
| 4 | InvalidCommand |
| 5 | InvalidCommandFormat |
| 6 | InvalidParameter |
| 7 | InvalidNumberOfParameters |
| 8 | ArgumentOutOfBounds |
| 9 | FileNotFound |
| 10 | InvalidFileFormat |
| 11 | EndOfRoute |
| 12 | InvalidOperation |
| 13 | NotSupported |
| 14 | SubsiteNotRoutable |
| 15 | ProjectRequired |
| 16 | SteppingCompensationParameterFailed |
| 17 | PrealignmentFailed |
| 18 | HomePositionNotSet |
| 19 | Timeout |
| Pattern error codes | |
| 20 | PatternNotTrained |
| 21 | PatternNotFound |
| 22 | TooManyPatternsFound |
| 23 | ContactHeightNotSet |
| 24 | AutoFocusFailed |
| 25 | TipFocusFailed |
| 26 | TipNotFound |
| 27 | OffsetOverTolerance |
| Command error codes | |
| 30 | CommandPending |
| 31 | AsyncCommandAborted |
| 32 | UnknownCommandId |
| Camera error codes | |
| 35 | CameraNotCalibrated |
| 36 | CameraDoesNotExist |
| 37 | AlignAccuracyBad (> 10 µm) |
| System error codes | |
| 60 | FrontDoorOpen |
| 61 | LoaderDoorOpen |
| 62 | FrontDoorLockFail |
| 63 | LoaderDoorLockFail |
| 64 | SlotOrStationOccupied |
| 65 | SlotOrStationEmpty |
| 66 | ProbeBackDoorOpen |
| 67 | ProbeSideDoorOpen |
| 68 | VacuumFailed |
| 69 | TrayDoorOpen |
| Loader error codes | |
| 80 | CassetteDoesNotExist |
| 81 | SlotNumberError |
| 83 | PreAlignerAlignAngleError |
| 85 | NoWaferOnPrealigner |
| 86 | NoWaferOnChuck |
| 87 | NoWaferAtSlotOrTray |
| 88 | NoWaferOnRobot |
| 90 | NoIdReader |
| 91 | ReadIdFail |
| 92 | TransferWaferFail |
| 100 | ProbeNotInitialized (also used as Probe error code, see below) |
| 101 | ProbeServoOnOffFail (also used as Probe error code, see below) |
| 120 | OvertravelOutOfAxisLimit |
| 121 | MissingTopographyTable |
| 122 | IndexerDeviceIsNotExisting |
| 150 | WaferOnFork |
| 151 | WaferSlideOutCassette |
| 152 | NoWaferOnFork |
| 153 | WaferTrackerReceivedTimeout |
| 154 | WaferIsOblique |
| 155 | CassetteWithoutScan |
| 156 | PrealignerSensorSwitchSizeTimeOut |
| 157 | CassetteDoorBarOpenTimeout |
| 158 | CassetteDoorBarCloseTimeout |
| 159 | WaferIsCrossOver |
| 160 | WaferOnChuck |
| 161 | PrealignCalOffsetTooLarge |
| 162 | PrealignFailedTooMuchTime |
| 163 | ConnectPrealignerFailed |
| 164 | WaferOnTray |
| 165 | CassetteMappingLagCountTooMuch |
| 166 | TransferSoakingTimeOut |
| 167 | UpdateMappingDataFail |
| 168 | TrayDoorLockTimeout |
| 169 | WaferOnPrealigner |
| Probe error codes | |
| 100 | PositionerNotInitialized |
| 101 | PositionerServoOnOffFail |
| Setting error codes | |
| 120 | OverTravelOverLimit |
| 121 | MissingTopographyTable |
| SiPH error codes | |
| 300 | SiPhMoveHoverFail |
| 301 | SiPhMoveSeparationFail |
| 302 | SiPhGradientSearchFail |
| 303 | SiPhFastAlignFail |
| 304 | SiPhPowerMeasurementFail |
| QAlibria error codes | |
| 450 | QaChuckNotWorkingPosition |
| 451 | QaSubstrateNotSet |
| 452 | QaRemoteModeNotSet |
| 453 | QaStandardsEmpty |
| Status codes (stepping only) | |
| 1024 (Bit 11) | Last die |
| 2048 (Bit 12) | Last subsite |
[table/diagram in source — verify against original PDF: several numeric error codes (e.g. 100, 101, 120, 121) are reused across different error-code categories (Loader vs. Probe vs. Setting); the source PDF layout implies the category context disambiguates the code, but the extracted text could not fully confirm the visual grouping.]
Asynchronous commands¶
Commands marked [asynchronous] execute in the background while other operations (including other remote commands) continue. Procedure:
- Send the command.
- It returns immediately with
0,cid,OK, wherecidis the command ID assigned by SENTIO. - Retrieve the result, either by:
- Polling with
query_command_status cid— while the command is still executing, the result code is30(CommandPending); once finished, the actual command response is returned. - Or sending
wait_complete cid— blocks until the command finishes and returns its response directly. - Once the response has been retrieved, the command is cleared and
cidbecomes invalid. A subsequentquery_command_status cidthen returns result32(UnknownCommandId) and response"Command id not found!".
It is required to retrieve the response of every asynchronous command by one of the methods in step 3 — otherwise responses accumulate in memory.
Example:
Command: status:start_show_message "There is a Situation! Continue?", YesNo, "Question"
Response: 0,1,OK (command returns immediately)
... (do something else while it executes)
Command: wait_complete 2 (wait until a button is pressed)
Response: 0,0,Yes ("Yes" button was pressed)