--- title: "SECS Definition Language (SDL) File" --- # SECS Definition Language (SDL) File > The SECS Definition Language (SDL) file contains definitions that all SECS messages for that equipment connection are validated against. Any messages that fail to validate against the SDL file will be inserted into the Errors table for the equipment connection instead. The SDL file uses JSON syntax to define datatypes, SECS Items, and SECS Messages. Each equipment connection can accept one SDL file. However, if no file is specified, the default **messages.sdl** file will be used. The SECS message definitions in the default SDL file are based on the definitions in the SECS-II standard (SEMI E5-0712) and the GEM standard (SEMI E30-0307). The SDL files can be edited in the Gateway Webpage using the built in SDL editor, or they can be downloaded from the Equipment Connections page so that they can be edited in a text editor and re-uploaded at a later time. ## SDL File Format The SDL file should be formatted using JSON syntax. It follows a simple structure, which is demonstrated in the example below. There are four main parts to the SDL file: - **doc** - The doc comes first and provides any overall documentation for the file. We recommend good documentation so that it is easy to make changes if needed. - **formats** - The formats list out all of the datatype formats that the items will use. It does not need to include datatypes that are not used by the items. - **items** - The items are used by the messages to relay information to and from the equipment. The items are sorted alphabetically, with each item under its corresponding letter. Each letter can have any number of items under it. - **messages** - The messages handle communication with the equipment. Each message is sorted by stream, with each function listed in order under its corresponding stream. There can be multiple streams under messages, and multiple functions under each stream. ```json title="Example SDL File" { "doc":[ "The doc for the file." ], "formats":{ "A":{ "doc":"ASCII" }, "I2":{ "doc":"Signed Integer Two Bytes" } }, "items":{ "A":{ "ALTX":{ "doc":[ "ALTX, Alarm Text" ], "formats":[ "A" ], "max":120 } }, "C":{ "CCODE":{ "doc":[ "CCODE, Command Code", "Each command code corresponds to a unique process operation the machine is capable of performing." ], "formats":[ "A", "I2", "I4", "U2", "U4" ] } }, "messages":{ "S1":{ "doc":[ "Stream 1 Equipment Status", "This stream provides a means for exchanging information about the status of the", "equipment, including its current mode, depletion of various consumable items, and the status of transfer operations." ], "S1F0":{ "doc":[ "Abort Transaction", "Used in lieu of an expected reply to abort a transaction.", "Function 0 is defined in every stream and has the same meaning in every stream." ], "block":"single", "direction":"h<->e" }, "S1F1":{ "doc":[ "Are You There Request", "Establishes if the equipment is on-line.", "A function 0 response to this message means the communication is inoperative.", "In the equipment, a function 0 is equivalent to a timeout on the receive timer after issuing S1,F1 to the host." ], "block":"single", "direction":"h<->e", "reply":true, "autoReply":{ "header":{ "stream":1, "function":2, "reply":false }, "body":[ ] } } } } } } ``` ## SECS Datatype Formats The formats section should list all datatypes that will be used in the items section. The formats section can be as long as it needs to be, and can even consolidate multiple values into a single value for ease of use. Notice in the example below, the different size integer and floats can all get consolidated into an 'I' and an 'F ', which makes it easier to use when specifying all of those datatypes in the Item Definition. ```json title="SDL Formats Definition Example" { "A":{ "doc":"ASCII" }, "B":{ "doc":"Binary" }, "L":{ "doc":"List" }, "I1":{ "doc":"Signed Integer One Byte" }, "I2":{ "doc":"Signed Integer Two Bytes" }, "I4":{ "doc":"Signed Integer Four Bytes" }, "I8":{ "doc":"Signed Integer Eight Bytes" }, "F4":{ "doc":"Floating Point Four Bytes" }, "F8":{ "doc":"Floating Point Eight Bytes" }, "I":{ "doc":"Signed Integer", "formats":[ "I1", "I2", "I4", "I8" ] }, "F":{ "doc":"Floating Point", "formats":[ "F4", "F8" ] } } ``` ## SDL Item Definitions The SDL Item Definitions list out all possible items that are used in SECS Message definitions. If a SECS Message attempts to use an item that isn't defined in the SDL file, it will throw an error. ```json title="SDL Item Definition Example" { "A":{ "ACKC7":{ "doc":[ "ACKC7, Acknowledge Code" ], "formats":[ "B" ], "bytes":1, "codes":{ "0":"Accepted", "1":"Permission not granted", "2":"Length error", "3":"Matrix overflow", "4":"PPID not found", "5":"Mode unsupported", "6":"Command will be performed with completion signaled later", ">":[ 6, "Other error" ] } } } } ``` Each item has a list of properties that define what the item is. | Property Name | Description | Example Formatting | | ------------- | -------- | ------------- | | doc | Provides information about what the item is along with any other useful information. |
`{` "doc":[ "TIME, Time of day", "12-byte format YYMMDDhhmmss", "16-byte format YYYYMMDDhhmmsscc", ]`}` |
| formats | A list of the possible datatypes that the item can be.Can also be a list of items, as in the second example.The type can be a list of CATTRDATA objects, or any of the other listed objects. | `{` "formats":[ "A", "B", "Bool", "U", "I" ]`}``{` "formats":[ `{` "format":"L", "item":"CATTRDATA" `}`, "B", "Bool", "A", "F", "U", "I" ]`}` |
| bytes | How many bytes the item must have. If bytes is greater than 1, then the item is an array of bytes.Only applies to single byte datatypes such as Binary, Boolean, U1 and I1. | `{` "bytes":1`}`|
| codes | Lists possible values an item can have and what each means.A value of ">" means any value greater than the largest code value. | `{` "0":"Accepted", "1":"Permission not granted", "2":"Length error", "3":"Matrix overflow", "4":"PPID not found", "5":"Mode unsupported", "6":"Command will be performed with completion signaled later", ">":[ 6, "Other error" ]`}` |
| max| The maximum number of characters that a value can have.Only applies to ASCII datatypes. | `{` "max":40`}` |
| pattern| A java regular expression that the ASCII value must match.Only applies to ASCII datatypes. | `{` "pattern":"^[0-9]`{6}`|[0-9]`{8}`$"`}` |
## SDL Message Definitions
The message definitions list out all possible SECS messages that will be used when communicating with the equipment. There can be many streams listed, each with multiple functions.
```json title="SDL Message Definition Example"
{
"S6F1":{
"doc":[
"Trace Data Send",
"This function sends samples to the host according to the trace setup done by S2,F23."
],
"block":"multiple",
"direction":"h<-e",
"or":[
{
"reply":true
},
{
"reply":false
}
],
"CommonID":[
"TRID"
],
"realtime":true,
"SQLTags":true,
"autoReply":{
"header":{
"stream":6,
"function":2,
"reply":false
},
"body":{
"format":"B",
"value":0
}
},
"body":[
"TRID",
"SMPLN",
"STIME",
[
"SV",
"..."
]
]
}
}
```
| Property Name | Description | Example |
| ------------- | ----- | ---- |
| doc | Provides information about what the message is along with any other useful information. | `{` "doc":[ "Are You There Request", "Establishes if the equipment is on-line." ]`}` |
| block | The size in bytes of the entire SECS message. There are two possible values:"single" - The message will not be larger than 254 bytes."multiple" - The message will be larger than 254 bytes.This property is only important for maintaining compatibility with the SECS-I protocol through Serial connection. | `{` "block":"single"`}` |
| direction| Determines whether the message should come from the equipment, the host, or either. Possible values are:"h->e"- The message goes from the host to the equipment."h<-e" - The message goes from the equipment to the host."h<->e" - The message goes either direction. | `{` "direction":"h<->e"`}` |
| reply | True if the message expects a reply, false if not. | `{` "reply":true`}` |
| autoReply | An auto response with a given message when a given message is received. If included in a message, the example will auto reply with a S1F2 message. | `{` "autoReply":`{` "header":`{` "stream":1, "function":2, "reply":false `}`, "body":`[` `]` `}``}` |
| body| A list of items that the stream will implement.The body list can contain lists of items, or the special "...", which signifies a variable list.In the second example, depending on the value of HCACK, any amount of a list of CNAME and CPACK can be returned. | `{` "body":[ "DATAID", "DATALENGTH" ]`}` `{` "body":[ "HCACK", [ [ "CNAME", "CPACK" ], "..." ] ]`}` |
| or | Will list multiple possibilities. Can also exist within a body definition. | `{` "or":[ `{` "direction":"h->e", "body":[ ] `}`, `{` "direction":"h<-e", "body":[ "MDLN", "SOFTREV" ] `}` ]`}` |
| CommonID | Used to identify certain messages, especially when used to group multiple incoming messages together.In the example, a trace will have multiple S6F1 messages as the status variable is traced over time.The CommonID will use the trace ID to link all messages from the same trace together, allowing for easy retrieval from the database. | `{` "S6F1":`{` "doc":[ "Trace Data Send", "This function sends samples to the host according to the trace setup done by S2,F23." ], "block":"multiple", "direction":"h`<-e"`, "CommonID":[ "TRID" ], "realtime":true, "SQLTags":true, "autoReply":`{` "header":`{` "stream":6, "function":2, "reply":false `}` `}` `}``}` |
| realtime | If true, will be processed by a Message Handler script. The message handler must be named onSecsGemRealtimeUpdate.Will use the CommonID for updates. See [SECS/GEM Messages](ignition-modules/secs-gem/sec-gem-messages.md) for more information on the Message Handler. | `{` "realtime":true`}` |
| SQLTags | If true, will create Tags in the SECSGEM provider automatically, using the CommonID as a folder name. Will create Tags in the location as follows:SECSGEM->EquipmentName->Stream and Function->CommonID->message value tagsCan also be overridden to use a folder name other than the CommonID, like in the second example. | `{` "SQLTags":true`}` `{` "SQLTags":[ "SMPLN" ]`}` |
### SDL Message Defaults
The messages section typically starts with a default set of properties before the list of SECS messages. These default property values will be used in the message when the property is not present in the message definition.
```json title="SDL Message Defaults"
{
"defaults":{
"doc":[
"Default values for properties that are missing."
],
"block":"single",
"reply":false,
"direction":"h<->e",
"body":null
}
}
```
## SDL File Editor
In the **Equipment Connections** section, you can make edits to the equipment's SDL file right in the Gateway Webpage by clicking the **More** button and selecting the '**edit sdl file**' option.
:::caution
After editing the SDL File, the equipment connection must be restarted for the changes to take effect.
:::

Once in the SDL file editor, there are a few things that can be done. The six dots to the left  of each row circled in blue above, allow you to change the order of the rows by clicking and dragging a row and dropping it in a new spot.
The buttons near the top circled in green apply to the document as a whole:
| Button | Description |
| :------: | ------------------------------------ |
|  | Expands all nodes. |
|  | Collapses all nodes. |
|  | Undo the last edit made to the file. |
|  | Redo the last Undo. |
Finally, the buttons circled in red  bring up a context menu with a few options that allow you to add and remove rows and change the row type:

| Option | Description |
| --------- | -------- |
| Type | Change the type of the row. Possible options are:Auto - Automatically determines the type based on the value.Array - Contains an ordered collection of values.Object - Contains an unordered set of key/value pairs.String - Determined from the value, but always returned as a string. |
| Sort | Sorts the rows in either ascending or descending order.Ascending - Sort the children of this array in ascending order.Descending - Sort the children of this array in descending order. |
| Insert | Inserts a new row before the selected row. Possible types are:Auto - Automatically determines the type based on the value.Array - Contains an ordered collection of values.Object - Contains an unordered set of key/value pairs.String - Determined from the value, but always returned as a string. |
| Duplicate | Duplicates the row, including all sub elements |
| Remove | Removes the row and all sub elements. |
Each row can be drilled into by clicking on the expand arrow to the left of the element, which allows you to see the sub elements. Many times, these sub elements can also be drilled into to find more sub elements. Once you find the element you want to modify, you can simply edit the text to make a change.

Once all the edits are made, clicking the **Save SDL File** button at the top right of the screen will save your changes. However, the changes won't take effect until the equipment connection is restarted.
### Restart the Equipment
To restart the equipment, click the **More** button next to the Equipment on the Equipment Connections page, and select the **restart** option.
## Default SDL File
The default **message.sdl** file is used when no other SDL file is specified.
```json title="The messages.sdl Default File."
{
"doc":["SECS stream/functions and items are listed and defined in this document."],
"formats":{
"A":{"doc":"ASCII"},
"B":{"doc":"Binary"},
"B64":{"doc":"Binary encoded as Base64 string"},
"J":{"doc":"JIS-8"},
"L":{"doc":"List"},
"Bool":{"doc":"Boolean"},
"Local":{"doc":"Two Byte Character String"},
"U1":{"doc":"Unsigned Integer One Byte"},
"U2":{"doc":"Unsigned Integer Two Bytes"},
"U4":{"doc":"Unsigned Integer Four Bytes"},
"U8":{"doc":"Unsigned Integer Eight Bytes"},
"I1":{"doc":"Signed Integer One Byte"},
"I2":{"doc":"Signed Integer Two Bytes"},
"I4":{"doc":"Signed Integer Four Bytes"},
"I8":{"doc":"Signed Integer Eight Bytes"},
"F4":{"doc":"Floating Point Four Bytes"},
"F8":{"doc":"Floating Point Eight Bytes"},
"I":{"doc":"Signed Integer", "formats":["I1","I2","I4","I8"]},
"U":{"doc":"Unsigned Integer", "formats":["U1","U2","U4","U8"]},
"F":{"doc":"Floating Point", "formats":["F4","F8"]}},
"items":{
"A":{
"ACCESSMODE":{
"doc":["ACCESSMODE, Load Port Access Mode"],
"formats":["U1"],
"codes":{
"0":"Manual",
"1":"Auto"}},
"ACKA":{
"doc":["ACKA, Indicates success of a request"],
"formats":["Bool"],
"codes":{
"0":"False",
"1":"True"}},
"ACKC5":{
"doc":["ACKC5, Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Accepted",
">":[0,"Error, not accepted"]}},
"ACKC6":{
"doc":["ACKC6, Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Accepted",
">":[0,"Error, not accepted"]}},
"ACKC7":{
"doc":["ACKC7, Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Accepted",
"1":"Permission not granted",
"2":"Length error",
"3":"Matrix overflow",
"4":"PPID not found",
"5":"Mode unsupported",
"6":"Command will be performed with completion signaled later",
">":[6,"Other error"]}},
"ACKC10":{
"doc":["ACKC10, Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Accepted for display",
"1":"Message will not be displayed",
"2":"Terminal not available"}},
"ALCD":{
"doc":["ALCD, Alarm Code Byte",
"bit 8 = 1 means alarm set",
"bit 8 = 0 means alarm cleared",
"bit 7-1 is alarm category"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Not Used",
"1":"Alarm Cleared, Personal Safety",
"2":"Alarm Cleared, Equipment Safety",
"3":"Alarm Cleared, Parameter Control Warning",
"4":"Alarm Cleared, Parameter Control Error",
"5":"Alarm Cleared, Irrecoverable Error",
"6":"Alarm Cleared, Equipment Status Warning",
"7":"Alarm Cleared, Attention flags",
"8":"Alarm Cleared, Data integrity",
"><":[8,128,"Alarm Cleared, Other categories"],
"128":"Not Used",
"129":"Alarm Set, Personal Safety",
"130":"Alarm Set, Equipment Safety",
"131":"Alarm Set, Parameter Control Warning",
"132":"Alarm Set, Parameter Control Error",
"133":"Alarm Set, Irrecoverable Error",
"134":"Alarm Set, Equipment Status Warning",
"135":"Alarm Set, Attention flags",
"136":"Alarm Set, Data integrity",
">":[136,"Alarm Cleared, Other categories"]}},
"ALED":{
"doc":["ALED, Alarm Enable/Disable Code"],
"formats":["B"],
"bytes":1,
"codes":{
">":[127,"Enable Alarm"],
"<":[128,"Disable Alarm"]}},
"ALID":{
"doc":["ALID, Alarm Identification"],
"formats":["U"]},
"ALTX":{
"doc":["ALTX, Alarm Text"],
"formats":["A"],
"max":120},
"ATTRDATA":{
"doc":["ATTRDATA, Contains a specific attribute value for a specific object."],
"formats":[{"format":"L","item":"ATTRDATA"},"B","Bool","A","F","U","I"]},
"ATTRID":{
"doc":["ATTRID,Identifier for an attribute for a specific type of object."],
"formats":["A","U"]}},
"C":{
"CAACK":{
"doc":["CAACK, Carrier Action Acknowledge Code"],
"formats":["U1"],
"codes":{
"0":"Acknowledge, command has been performed",
"1":"Invalid command",
"2":"Can not perform now",
"3":"Invalid data or argument",
"4":"Acknowledge, request will be performed with completion signaled later by an event",
"5":"Rejected. Invalid state",
"6":"Command performed with errors"}},
"CARRIERACTION":{
"doc":["CARRIERACTION, Specifies the action requested for a carrier"],
"formats":["A"]},
"CARRIERID":{
"doc":["CARRIERID, The identifier of a carrier"],
"formats":["A"]},
"CATTRDATA":{
"doc":["CATTRDATA, The value of a carrier attribute"],
"formats":[{"format":"L","item":"CATTRDATA"},"B","Bool","A","F","U","I"]},
"CATTRID":{
"doc":["CATTRID, The name of a carrier attribute"],
"formats":["A"]},
"CCODE":{
"doc":["CCODE, Command Code",
"Each command code corresponds to a unique process operation the machine is capable of performing."],
"formats":["A","I2","I4","U2","U4"]},
"CEED":{
"doc":["CEED, Collection event or trace enable/disable code"],
"formats":["Bool"],
"bytes":1,
"codes":{
"0":"Disable",
"1":"Enable"}},
"CEID":{
"doc":["CEID, Collected Event ID"],
"formats":["U"]},
"COMMACK":{
"doc":["COMMACK, Establish Communications Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Accepted",
"1":"Denied, Try Again"}},
"CPACK":{
"doc":["CPACK, Command Parameter Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"1":"Parameter Name (CPNAME) does not exist",
"2":"Illegal Value specified for CPVAL",
"3":"Illegal Format specified for CPVAL",
">":[3,"Other equipment specific error"]}},
"CPNAME":{
"doc":["CPNAME, Command Parameter Name"],
"formats":["A"],
"max":40},
"CPVAL":{
"doc":["CPVAL, Command Parameter Value"],
"formats":["A","B","Bool","U","I"]}},
"D":{
"DATAID":{
"doc":["DATAID, Data ID"],
"formats":["U"]},
"DATALENGTH":{
"doc":["DATALENGTH, Total bytes to be sent"],
"formats":["U"]},
"DRACK":{
"doc":["DRACK, Define Report Acknowledge Code",
"If an error condition is detected the entire message is rejected (i.e., partial changes are not allowed)."],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Accepted",
"1":"Denied. Insufficient space",
"2":"Denied. Invalid format",
"3":"Denied. At least one RPTID already defined",
"4":"Denied. At least VID does not exist",
">":[4,"Other errors"]}},
"DSPER":{
"doc":["DSPER, Data sample period.",
"DSPER has two allowable formats:",
"Format 1: hhmmss, 6 bytes",
"Format 2: hhmmsscc, 8 bytes",
"Where hh is hours, mm is minutes, ss is seconds, and cc is centiseconds.",
"Equipment shall either (1) support only Format 1, or (2) support both Format 1 and Format 2.",
"Equipment shall document which formats it accepts.",
"Equipment which supports Format 2 need not necessarily support a minimum DSPER of 1 centisecond,",
"nor a trace resolution of 1 centisecond, but equipment suppliers shall document its trace performance limits."],
"formats":["A"],
"pattern":"^[0-9]{6}|[0-9]{8}$"}},
"E":{
"EAC":{
"doc":["EAC, Equipment Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Acknowledge",
"1":"Denied. At least one constant does not exist",
"2":"Denied. Busy",
"3":"Denied. At least one constant out of range",
">":[3,"Other equipment specific error"]}},
"ECDEF":{
"doc":["ECDEF, Equipment Constant Default value"],
"formats":[{"format":"L","item":"ECDEF"},"A","B","Bool","J","F","U","I"]},
"ECID":{
"doc":["ECID, Equipment Constant ID"],
"formats":["U"]},
"ECMAX":{
"doc":["ECMAX, Equipment Constant Maximum value"],
"formats":["A","B","Bool","J","F","U","I"]},
"ECMIN":{
"doc":["ECMIN, Equipment Constant Minimum value"],
"formats":["A","B","Bool","J","F","U","I"]},
"ECNAME":{
"doc":["ECNAME, Equipment Constant Name"],
"formats":["A"]},
"ECV":{
"doc":["ECV, Equipment Constant Value"],
"formats":[{"format":"L","item":"ECV"},"A","B","Bool","J","F","U","I"]},
"EDID":{
"doc":["EDID, Expected Data Identification"],
"formats":["A","B","U","I"]},
"ERACK":{
"doc":["ERACK, Enable/Disable Event Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Accepted",
"1":"Denied. At least one CEID does not exist",
">":[1,"Other Errors"]}},
"ERRCODE":{
"doc":["ERRCODE, Code identifying an error"],
"formats":["U"],
"codes":{
"0":"No error",
"1":"Unknown object in Object Specifier",
"2":"Unknown target object type",
"3":"Unknown object instance",
"4":"Unknown attribute name",
"5":"Read-only attribute - access denied",
"6":"Unknown object type",
"7":"Invalid attribute value",
"8":"Syntax error",
"9":"Verification error",
"10":"Validation error",
"11":"Object identifier in use",
"12":"Parameters improperly specified",
"13":"Insufficient parameters specified",
"14":"Unsupported option requested",
"15":"Busy",
"16":"Not available for processing",
"17":"Command not valid for current state",
"18":"No material altered",
"19":"Material partially processed",
"20":"All material processed",
"21":"Recipe specification related error",
"22":"Failed during processing",
"23":"Failed while not processing",
"24":"Failed due to lack of material",
"25":"Job aborted",
"26":"Job stopped",
"27":"Job cancelled",
"28":"Cannot change selected recipe",
"29":"Unknown event",
"30":"Duplicate report ID",
"31":"Unknown data report",
"32":"Data report not linked",
"33":"Unknown trace report",
"34":"Duplicate trace ID",
"35":"Too many data reports",
"36":"Sample period out of range",
"37":"Group size too large",
"38":"Recovery action currently invalid",
"39":"Busy with another recovery currently unable to perform the recovery",
"40":"No active recovery action",
"41":"Exception recovery failed",
"42":"Exception recovery aborted",
"43":"Invalid table element",
"44":"Unknown table element",
"45":"Cannot delete predefined",
"46":"Invalid token",
"47":"Invalid parameter",
"48":"Load port does not exist",
"49":"Load port already in use",
"50":"Missing Carrier",
"32768":"Action will be performed at earliest opportunity",
"32769":"Action can not be performed now",
"32770":"Action failed due to errors",
"32771":"Invalid command",
"32772":"Client Alr",
"32773":"Duplicate ClientID",
"32774":"Invalid ClientType",
"32775":"IncompatibleVersions",
"32776":"Unrecognized ClientID (Client not currently connected)",
"32777":"Failed (Completed Unsuccess-fully)",
"32778":"Failed (Unsafe) — External intervention required",
"32779":"Sensor-Detected Obstacle",
"32780":"Material Not Sent",
"32781":"Material Not Received",
"32782":"Material Lost",
"32783":"Hardware Failure",
"32784":"Transfer Cancelled"}},
"ERRTEXT":{
"doc":["ERRTEXT, Text string describing the error noted in the corresponding ERRCODE"],
"formats":["A"],
"max":120}},
"G":{
"GRANT":{
"doc":["GRANT, Grant code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Permission Granted",
"1":"Busy, Try Again",
"2":"No Space Available",
"3":"Duplicate DATAID",
">":[3,"Equipment Specific Error Code"]}},
"GRANT6":{
"doc":["GRANT6, Permission to send"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Permission granted",
"1":"Busy, try again",
"2":"Not interested",
">":[2,"Other err"]}}},
"H":{
"HCACK":{
"doc":["HCACK, Host Command Parameter Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Acknowledge, command has been performed",
"1":"Command does not exist",
"2":"Cannot perform now",
"3":"At least one parameter is invalid",
"4":"Acknowledge, command will be performed with completion signaled later by an event",
"5":"Rejected, Already in Desired Condition",
"6":"No such object exists"}}},
"L":{
"LENGTH":{
"doc":["LENGTH, Length of the service program or process program in bytes."],
"formats":["U"]},
"LRACK":{
"doc":["LRACK, Link Report Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Accepted",
"1":"Denied. Insufficient space",
"2":"Denied. Invalid format",
"3":"Denied. At least one CEID link already defined",
"4":"Denied. At least one CEID does not exist",
"5":"Denied. At least one RPTID does not exist",
">":[5,"Other errors"]}}},
"M":{
"MDLN":{
"doc":["MDLN, Equipment Model Type"],
"formats":["A"],
"max":20},
"MEXP":{
"doc":["MEXP, Message expected in the form SxxFyy where x is stream and y is function."],
"formats":["A"],
"max":6},
"MF":{
"doc":["MF, Material Format code",
"Items with format A will be a unit identifier for one of the special SECS generic units, as specified in § 12."],
"formats":["B","A"],
"bytes":1,
"codes":{
"1":"Quantities in wafers",
"2":"Quantities in cassette",
"3":"Quantities in die or chips",
"4":"Quantities in boats",
"5":"Quantities in ingots",
"6":"Quantities in leadframes",
"7":"Quantities in lots",
"8":"Quantities in magazines",
"9":"Quantities in packages",
"10":"Quantities in plates",
"11":"Quantities in tubes",
"12":"Quantities in waterframes",
"13":"Quantities in carriers",
"14":"Quantities in substrates"}},
"MHEAD":{
"doc":["MHEAD, SECS message block header associated with message block in error."],
"formats":["B"]},
"MID":{
"doc":["MID, Material ID"],
"formats":["B","A"],
"max":80}},
"O":{
"OBJACK":{
"doc":["OBJACK, Acknowledge code"],
"formats":["U1"],
"codes":{
"0":"Successful completion of requested data",
"1":"Error"}},
"OBJSPEC":{
"doc":["OBJSPEC, A text string that has an internal format and that is used to point to a specific object instance.",
"The string is formed out of a sequence of formatted substrings, each specifying an object’s type and identifier.",
"The substring format has the following four fields:",
"object type, colon character ':', object identifier, greater-than symbol '>'",
"where the colon character ':' is used to terminate an object type and the \"greater than\" symbol '>' is used to terminate an identifier field.",
"The object type field may be omitted where it may be otherwise determined.",
"The final '>' is optional."],
"formats":["A"]},
"OBJTYPE":{
"doc":["OBJTYPE, Identifier for a group or class of objects",
"All objects of the same type must have the same set of attributes available."],
"formats":["A","U"]},
"OFLACK":{
"doc":["OFLACK, Acknowledge code for OFF-LINE request"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"OFF-LINE Acknowledge"}},
"ONLACK":{
"doc":["ONLACK, Acknowledge code for ON-LINE request"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"ON-LINE Accepted",
"1":"ON-LINE Not Allowed",
"2":"Equipment Already ON-LINE"}}},
"P":{
"PARAMNAME":{
"doc":["PARAMNAME, The name of a parameter in a request"],
"formats":["A"]},
"PARAMVAL":{
"doc":["PARAMVAL, The value of the parameter named in PARAMNAME",
"Values that are lists are restricted to lists of single items of the same format type."],
"formats":[{"format":"L","item":"PARAMVAL"},"A","B","Bool","F","U","I"]},
"PORTACTION":{
"doc":["PORTACTION, tThe action to be performed on a port"],
"formats":["A"]},
"PPARM":{
"doc":["PPARM, Process Parameter"],
"formats":["A","Bool","F","U","I"]},
"PPBODY":{
"doc":["PPBODY, Process Program Body",
"The process program describes to the equipment, in its own language, the actions to be taken in processing the material it receives."],
"formats":["A","B","B64","U","I"]},
"PPGNT":{
"doc":["PPGNT, Process Program Grant status"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"OK",
"1":"Already have",
"2":"No space",
"3":"Invalid PPID",
"4":"Busy, try later",
"5":"Will not accept",
">":[5,"Other error"]}},
"PPID":{
"doc":["PPID, Process Program ID",
"The format used in the PPID will be host dependent.",
"For internal use of the equipment, the PPID can be treated as a unique B pattern.",
"If the local equipment is not prepared to display the transmitted code, the display should be in hexadecimal form."],
"formats":["A"],
"max":120},
"PRJOBID":{
"doc":["PRJOBID, Text string which uniquely identifies a process job"],
"formats":["A"]},
"PRPAUSEEVENT":{
"doc":["PRPAUSEEVENT, The list of event identifiers, which may be sent as an attribute value to a process job.",
"When a process job encounters one of these events it will pause, until it receives the PRJobCommand RESUME."],
"formats":[{"format":"L","item":"CEID"}]},
"PRPROCESSSTART":{
"doc":["PRPROCESSSTART, Indicates that the process resource start processing immediately when ready."],
"formats":["Bool"],
"codes":{
"0":"Manual Start",
"1":"Automatic Start"}},
"PRRECIPEMETHOD":{
"doc":["PRRECIPEMETHOD, Indicates the recipe specification type, whether tuning is applied and which method is used."],
"formats":["U1"],
"codes":{
"1":"Recipe only",
"2":"Recipe with variable tuning"}},
"PRSTATE":{
"doc":["PRSTATE, Enumerated value"],
"formats":["U1"]},
"PTN":{
"doc":["PTN, Material Port number"],
"formats":["B","U1"],
"bytes":1}},
"R":{
"RCMD":{
"doc":["RCMD, Remote Command"],
"formats":["A"]},
"RCPPARNM":{
"doc":["RCPPARNM, The name of a recipe variable parameter."],
"formats":["A"],
"max":256},
"RCPPARVAL":{
"doc":["RCPPARVAL, The initial setting assigned to a recipe variable parameter."],
"formats":[{"format":"L","item":"RCPPARVAL"},"A","B","Bool","F","U","I"],
"max":80},
"RCPSPEC":{
"doc":["RCPSEC, Recipe specifier. The object specifier of a recipe."],
"formats":["A"]},
"REPGSZ":{
"doc":["REPGSZ, Reporting Group Size"],
"formats":["U"]},
"RPTID":{
"doc":["RPTID, Report ID"],
"formats":["U"]}},
"S":{
"SHEAD":{
"doc":["SHEAD, Stored header related to the transaction timer."],
"formats":["B"]},
"SLOTID":{
"doc":["SLOTID, Used to reference material by slot (a position that holds material/substrates) in a carrier.",
"This item may be implemented as an array in some messages."],
"formats":["U1"]},
"SMPLN":{
"doc":["SMPLN, Sample Number"],
"formats":["U","I"]},
"SOFTREV":{
"doc":["SOFTREV, Software Revision Code"],
"formats":["A"],
"max":20},
"STIME":{
"doc":["STIME, Sample Time",
"12 or 16 bytes, or Extended format as specified by the TimeFormat equipment constant value setting.",
"12-byte format: YYMMDDhhmmss",
"16-byte format: YYYYMMDDhhmmsscc",
"Extended (max 32 byte) format: format YYYY-MM-DDThh:mm:ss.sTZD (see SEMI E148)"],
"formats":["A"],
"max":32},
"SV":{
"doc":["SV, Status Variable"],
"formats":[{"format":"L","item":"SV"},"B","Bool","A","J","F","U","I"]},
"SVID":{
"doc":["SVID, Status Variable ID",
"Status variables may include any parameter that can be sampled in time such as temperature or quantity."],
"formats":["U"]},
"SVNAME":{
"doc":["SVNAME, Status Variable Name"],
"formats":["A"]}},
"T":{
"TEXT":{
"doc":["TEXT, a single line of characters."],
"formats":["A","B","Local","U","I"]},
"TIACK":{
"doc":["TIACK, Time Acknowledge Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"OK",
"1":"Error, not done"}},
"TIAACK":{
"doc":["TIAACK, Equipment Acknowledgement Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Everything correct",
"1":"Too many SVIDs",
"2":"No more traces allowed",
"3":"Invalid period",
"4":"Unknown SVID specified",
"5":"Invalid REPGSZ",
">":[63,"Equipment specified error"]}},
"TID":{
"doc":["TID, Terminal number"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Single or main terminal",
">":[0,"Additional terminals at the same equipment"]}},
"TIME":{
"doc":["TIME, Time of day",
"12, 16 bytes, or Extended format as specified by the TimeFormat equipment constant value setting.",
"12-byte format YYMMDDhhmmss",
"16-byte format YYYYMMDDhhmmsscc",
"Extended (max 32 byte) format YYYY-MM-DDThh:mm:ss.sTZD (see SEMI E148)"],
"formats":["A"],
"max":32},
"TOTSMP":{
"doc":["TOTSMP, Total Samples"],
"formats":["U"]},
"TRID":{
"doc":["TRID, Trace Request ID."],
"formats":["U"]}},
"U":{
"UNITS":{
"doc":["UNITS, Units Identifier"],
"formats":["A","B"]}},
"V":{
"V":{
"doc":["V, Variable data"],
"formats":[{"format":"L","item":"V"},"A","B","Bool","J","F","U","I"]},
"VID":{
"doc":["VID, Variable ID"],
"formats":["U"]}}},
"messages":{
"defaults":{
"doc":["Default values for properties that are missing."],
"block":"single",
"reply":false,
"direction":"h<->e",
"body":null},
"S1":{
"doc":["Stream 1 Equipment Status",
"This stream provides a means for exchanging information about the status of the",
"equipment, including its current mode, depletion of various consumable items, and the status of transfer operations."],
"S1F0":{
"doc":["Abort Transaction",
"Used in lieu of an expected reply to abort a transaction.",
"Function 0 is defined in every stream and has the same meaning in every stream."],
"block":"single","direction":"h<->e"},
"S1F1":{
"doc":["Are You There Request",
"Establishes if the equipment is on-line.",
"A function 0 response to this message means the communication is inoperative.",
"In the equipment, a function 0 is equivalent to a timeout on the receive timer after issuing S1,F1 to the host."],
"block":"single","direction":"h<->e","reply":true,
"autoReply":{"header":{"stream":1,"function":2,"reply":false},"body":[]}},
"S1F2":{
"doc":["On Line Data",
"Data signifying that the equipment is alive.",
"Exception: The host sends a zero-length list to the equipment."],
"block":"single",
"or":[
{"direction":"h<-e","body":["MDLN","SOFTREV"]},
{"direction":"h->e","body":[]}]},
"S1F3":{
"doc":["Selected Equipment Status Request",
"A request to the equipment to report the values of selected status variables.",
"Exception: A zero-length list means report all SVIDs."],
"block":"single","direction":"h->e","reply":true,
"body":["SVID","..."]},
"S1F4":{
"doc":["Selected Equipment Status Data",
"The equipment reports the value of each status variable requested in the order requested.",
"The host remembers the names of values requested.",
"Exception: A zero-length list item for SV means that SVID does not exist."],
"block":"multiple","direction":"h<-e",
"body":["SV","..."]},
"S1F11":{
"doc":["Status Variable Namelist Request",
"A request to the equipment to report the name and units of selected status variables.",
"Exception: A zero length means report all SVIDs."],
"block":"single","direction":"h->e","reply":true,
"body":["SVID","..."]},
"S1F12":{
"doc":["Status Variable Namelist Reply",
"The equipment reports to the host the name and units of the requested status variables.",
"Exception: Zero-length A items for both SVNAME and UNITS indicates that the SVID does not exist."],
"block":"multiple","direction":"h<-e",
"body":[["SVID","SVNAME","UNITS"],"..."]},
"S1F13":{
"doc":["Establish Communications Request",
"The purpose of this message is to establish communication between an equipment and host at an application level.",
"The purpose of this message is to provide a formal means of initializing communications at a logical application level both on",
"power-up and following a break in communications. It should be the following any period where host and Equipment SECS",
"applications are unable to communicate. An attempt to send an Establish Communications Request (S1,F13) should be repeated",
"at programmable intervals until an Establish Communications Acknowledge (S1,F14) is received within the transaction timeout",
"period with an acknowledgement code accepting the establishment.",
"Exception: The host sends a zero-length list to the equipment."],
"block":"single","reply":true,
"autoReply":{"header":{"stream":1,"function":14,"reply":false},"body":[{"format":"B","value":0},[]]},
"or":[
{"direction":"h->e","body":[]},
{"direction":"h<-e","body":["MDLN","SOFTREV"]}]},
"S1F14":{
"doc":["Establish Communications Request Acknowledge",
"Accept or deny Establish Communications Request (S1F13).",
"MDLN and SOFTREV are on-line data and are valid only if COMMACK = 0.",
"Exception: The host sends a zero-length list for item 2 to the equipment."],
"block":"single",
"or":[
{"direction":"h<-e","body":["COMMACK",["MDLN","SOFTREV"]]},
{"direction":"h->e","body":["COMMACK",[]]}]},
"S1F15":{
"doc":["Request OFF-LINE",
"The host requests that the equipment transition to the OFF-LINE state."],
"block":"single","direction":"h->e","reply":true},
"S1F16":{
"doc":["OFF-LINE Acknowledge"],
"block":"single","direction":"h<-e",
"body":"OFLACK"},
"S1F17":{
"doc":["Request ON-LINE",
"The host requests that the equipment transition to the ON-LINE state"],
"block":"single","direction":"h->e","reply":true},
"S1F18":{
"doc":["ON-LINE Acknowledge"],
"block":"single","direction":"h<-e",
"body":"ONLACK"},
"S1F23":{
"doc":["Collection Event Namelist Request",
"This function allows the host to retrieve information about what collection event IDs are available in the equipment",
"and which data values (DVVALs) are valid for each collection event.",
"Exception: A zero-length list means send information for all CEIDs."],
"block":"single","direction":"h->e","reply":true,
"body":["CEID","..."]},
"S1F24":{
"doc":["Collection Event Namelist",
"The equipment reports to the host the information of the collection events and associated VIDs of the CEIDs",
"requested with the S1F23 message.",
"A listed VID can be conditionally or unconditionally associated with the CEID;",
"it is the responsibility of the equipment supplier to document whether the conditional VIDs are reported with S1F24.",
"Exception: When both CENAME and the list of associated VIDs are zero-length items, this indicates that CEID does not exist."],
"block":"multiple","direction":"h<-e",
"body":[["CEID","CENAME",["VID","..."]],"..."]}},
"S2":{
"doc":["Stream 2 Equipment Control and Diagnostics",
"Messages which deal with control of the equipment from the host.",
"This includes all remote operations and equipment self-diagnostics and calibration but specifically",
"excludes the control operations which are associated with material transfer (see Stream 4),",
"loading of executive and boot programs (Stream 8), and all file and operating system calls",
"(Streams 10, 13). See also continuations in Stream 17."],
"S2F0":{
"doc":["Abort Transaction",
"Used in lieu of an expected reply to abort a transaction.",
"Function 0 is defined in every stream and has the same meaning in every stream."],
"block":"single","direction":"h<->e"},
"S2F13":{
"doc":["Equipment Constant Request",
"A request to the equipment to report the values of selected constants.",
"Constants such as for calibration, servo gain, alarm limits, data collection mode, and other values that are changed infrequently can be obtained using this message.",
"Exception: A zero-length list means report all ECVs according to a predefined order."],
"block":"single","direction":"h->e","reply":true,
"body":["ECID","..."]},
"S2F14":{
"doc":["Equipment Constant Data",
"The equipment reports the value of each constant requested in the order requested.",
"Exception: A zero-length list item for ECV means that ECID does not exist. The list format for this data item is not allowed, except in this case."],
"block":"multiple","direction":"h<-e",
"body":["ECV","..."]},
"S2F15":{
"doc":["New Equipment Constant Send",
"Change one or more equipment constants."],
"block":"single","direction":"h->e","reply":true,
"body":[["ECID","ECV"],"..."]},
"S2F16":{
"doc":["New Equipment Constant Acknowledge",
"Acknowledges or denies modification of equipment constants.",
"If EAC contains a non-zero error code, the equipment should not change any of the ECIDs specified in S2F15."],
"block":"single","direction":"h<-e",
"body":"EAC"},
"S2F17":{
"doc":["Date and Time Request",
"Get the date and time from the equipment.",
"Useful to check equipment time base or for equipment to synchronize with the host time base."],
"block":"single","direction":"h<->e","reply":true},
"S2F18":{
"doc":["Date and Time Data",
"Actual time data from equipment.",
"Exception: A zero-length item means no time exists"],
"block":"single","direction":"h<->e",
"body":"TIME"},
"S2F23":{
"doc":["Trace Initialize Send",
"Report the current values of selected status variables at a regular interval of time.",
"Status variables exist at all times. This function provides a way to sample a subset of those status variables as a function of time.",
"The trace data is returned on S6,F1 and is related to the original request by the TRID Multiple trace requests may be made to",
"that equipment allowing it. If equipment receives S2F23 with the same TRID as a trace function that is currently in progress,",
"the equipment should terminate the old trace and then initiate the new trace. A trace function currently in progress may be",
"terminated by S2,F23 with TRID of that trace and TOTSMP = 0.",
"If S2F23 is multi-block, it must be preceded by the S2F39/S2F40 Inquire/Grant transaction. Some equipment may support",
"only single-Block S6F1, and may refuse a S2F23 message which would cause a multi-block S6F1.",
"Each equipment shall document its trace performance limits. The Host Computer shall not send an S2F23 which exceeds the",
"equipment's performance limits, or the equipment may operate incorrectly.",
"TRID = Trace Request ID, DSPER = Data Sample Period, TOTSMP = Total samples to be made.",
"REPGSZ = Reporting Group Size, SVID = Status Variable ID"],
"block":"multiple","direction":"h->e","reply":true,"CommonID":["TRID"],
"body":["TRID","DSPER","TOTSMP","REPGSZ",["SVID","..."]]},
"S2F24":{
"doc":["Trace Initialize Acknowledge"],
"block":"single","direction":"h<-e",
"body":{
"doc":["Equipment Acknowledgment Code"],
"formats":["B"],
"bytes":1,
"codes":{
"0":"Everything correct",
"1":"Too many SVIDs",
"2":"No more traces allowed",
"3":"Invalid period",
"4":"Unknown SVID specified",
"5":"Invalid REPGSZ",
">":[63,"Equipment specified error"]}}},
"S2F29":{
"doc":["Equipment Constant Namelist Request",
"A request to the equipment to report information about selected constants.",
"This function allows the host to retrieve basic information about what equipment constants are available in the equipment.",
"Exception: A zero-length list means send information for all ECIDs."],
"block":"single","direction":"h->e","reply":true,
"body":["ECID","..."]},
"S2F30":{
"doc":["Equipment Constant Namelist",
"The equipment reports to the host information about certain constants.",
"Exception: Zero-length A items for ECNAME, ECMIN, ECMAX, ECDEF, and UNITS indicates that the ECID does not exist."],
"block":"multiple","direction":"h<-e",
"body":[["ECID","ECNAME","ECMIN","ECMAX","ECDEF","UNITS"],"..."]},
"S2F31":{
"doc":["Date and Time Set Request",
"Set the date and time in the equipment.",
"Useful to synchronize the equipment time with the host time base."],
"block":"single","direction":"h->e","reply":true,
"body":"TIME"},
"S2F32":{
"doc":["Date and Time Set Acknowledge"],
"block":"single","direction":"h<-e",
"body":"TIACK"},
"S2F33":{
"doc":["Define Report",
"The purpose of this message is for the host to define a group of reports for the equipment.",
"The type of report to be transmitted is designated by a BOOLEAN \"Equipment Constant\".",
"An \"Equipment Constant Value\" of \"False\" means that an \"Event Report\" (S6F11) will be sent, and a value of \"True\" means",
"that an \"Annotated Event Report\" (S6F13) will be sent. If S2F33 is Multi-block, it must be preceded by the S2F39/S2F40 Inquire/Grant transaction.",
"Exception 1: A list of zero-length following DATAID deletes all report definitions and associated links. See S2F35 (Link Event/Report).",
"#Exception 2: A list of zero-length following RPTID deletes report type RPTID. All CEID links to this RPTID are also deleted."],
"block":"multiple","direction":"h->e","reply":true,
"body":["DATAID",[["RPTID",["VID","..."]],"..."]]},
"S2F34":{
"doc":["Define Report Acknowledge"],
"block":"single","direction":"h<-e",
"body":"DRACK"},
"S2F35":{
"doc":["Link Event Report",
"The purpose of this message is for the host to link n reports to an event (CEID).",
"These linked event reports will default to 'disabled' upon linking.",
"That is, the occurrence of an event would not cause the report to be sent until enabled.",
"See S2F37 for enabling reports.",
"If S2F35 is Multi-block, it must be preceded by the S2F39/S2F40 Inquire/Grant transaction.",
"#Exception: A list of zero length following CEID deletes all report links to that event."],
"block":"multiple","direction":"h->e","reply":true,
"body":["DATAID",[["CEID",["RPTID","..."]],"..."]]},
"S2F36":{
"doc":["Link Event Report Acknowledge",
"If an error condition is detected the entire message is rejected (i.e., partial changes are not allowed)."],
"block":"single","direction":"h<-e",
"body":"LRACK"},
"S2F37":{
"doc":["Enable/Disable Event Report",
"The purpose of this message is for the host to enable or disable reporting for a group of events (CEIDs).",
"The reporting for unlisted (CEIDs) is not affected.",
"Exception: A list of zero length following