Master
Daten die vom Master erzeugt werden
Statusinfo
Topic: <device-id>/Master/status
Feld |
Bedeutung/Zulässige Werte |
---|---|
Command |
status |
interface_version |
Bezeichnet die Version der Schnittstelle Master -> TestApp, die von dieser Version des Masters implementiert wird. |
Beispiel:
{
"type": "status",
"interface_version": "1",
"payload": {"state": "idle", "message": ""}
}
Job
Topic: <device-id>/Master/job In diesem Topic findet sich eine Reihe von Key-Value Paaren, die die Konfiguration für den aktuellen Testjob darstellen. Der Master ermittelt sie anhand der Losnummer und einer kofigurierten Quelle (z.B. Networkshare für Job.xml).
PeripheryState
ToDo: Überarbeiten, gilt so nicht mehr!
Topic: <device-id>/Master/peripherystate
Im diesem Topic teilt der Master den Zustand von Peripheriegeräten mit, die durch den Master kontrolliert werden, d.h. solche für die nur eine Instanz existiert. Die konkret verwendeten Peripheriegeräte sind noch offen. Die Daten in diesem Topic werden wie folgt organisiert: “<PeripheryName>.<Attribute>” : <Value> Somit besteht die Möglichkeit sowohl einfache “an/aus” Zustände als auch komplexere Zustände zu modellieren.
Ende Todo
Befehle die vom Master verstanden werden
Der Master empfängt Befehle im Topic Master/command. Alle Befehle, auf die eine Antwort geschickt wird postet der Master im Topic Master/response
Geteilte Peripherie steuern
TODO - Abschnitt überarbeiten
Feld |
Bedeutung/Zulässige Werte |
---|---|
Command |
„togglesharedperiphery“ |
peripheryType |
< name > |
param<0-n> |
Parameter für Peripherie |
Weist den Master an ein Stück Peripherie anzusteuern, das für alle Testprogramme gleich ist (z.B. Magnetfeldgenerator). Der Master meldet Vollzug, indem das korrespondierende Feld im Topic “<device-id>/Master/peripherystate” auf den geforderten Wert gesetzt wird. Das Parameterfeld ist als Beispiel zu verstehen. Je nach konkreter Peripherie werden unterschiedliche Parameter gebraucht. Hierzu muss eine seperate Dokumentation geschrieben werden.
Ende ToDo
Beispiel: Im Test wird gefordert, dass der Fluxkompensator auf 100 bozos geschaltet wird.
Der aktuelle Peripheriestatus ist:
{
"fluxcompensator": 0,
...
}
TestApp postet:
{
"type": "io-control-request",
"periphery_type": "fluxcompensator",
"ioctl_name": "set_output",
"parameters":
{
"param0": 100,
"timeout": 5.0
}
}
Nach Empfang der Nachricht der Testapp steuert der Master den Fluxkompensator an.
:information_source: Der Master stellt sicher, dass die angeforderte Peripherie im korrekten Zustand ist, wenn der Vollzug meldet, d.h. etwaige Einschwingzeiten sind vom Testprogramm nicht seperat zu berücksichtigen, sondern wurden zum Zeitpunkt der Vollzugsmeldung durch den Master (bzw. das Plugin, welches die Ressourcensteuerung implementiert!) bereits berückstichtigt.
:warning: Wird eine Ressource angefordert, die nicht existiert, so geht der Master in den Fehlerzustand.
:warning: Erhält der Master verschiedene Befehle für die gleiche Peripherie (z.B. Site A fordert “Magnetfeld an”, Site B fordert “Magnetfeld aus”), während noch eine Zustandsänderung pendent ist, so geht er in den Fehlerzustand über.
:warning: Zu einem Zeitpunkt kann nur genau eine Ressourcenanforderung aktiv sein. Werden zwei verschiedene Ressourcen angefordert, so geht der Master in den Fehlerzustand über.
:warning: Der Master synchronisiert den Zugriff auf die geteilten Peripherien derart, dass eine Änderung erst durchgeführt wird, wenn dieselbe Anfrage von allen aktiven Sites gesendet wurde. Es wird davon ausgegangen, dass auf allen Sites dasselbe Programm läuft und demnach auch immer zum gleichen Zeitpunkt während des Testablaufs von allen Sites dieselbe gemeinsame Ressource verwendet wird. Derzeit sind noch keine Timeouts für diesen Vorgang definiert.
Auflösen von geteilten Peripherien: Der Master verwendet Pluggy um für geteilte Peripherien das richtige Businessobjekt zu ermitteln, dabei wird der Peripherytype als Aktuatorfähigkeit interpretiert. Der Master instanziert sich ein Aktuatorobjekt mit dem Call “get_actuator” aus den installierten Plugins. Er verwendet die erste Implementierung, die gemeldet wird. Das bedeutet, dass mehrere Aktuatorimplementierungen für denselben Aktuator (die durchaus aus verschiedenen Plugins kommen können!) zu unvorhersehbarem Verhalten führen.
Handlerbefehle
Topic: <device-id>/Master/cmd
Feld |
Bedeutung/Zulässige Werte |
---|---|
type |
<command_type> |
value |
<payload> |
payload kann mehere key paramters haben. Dies im Falle von load lot informationen über das zu ladene lot (Losnumber, Temperature, etc..). Viele Befehle werden mit dem Zustand des Master quittiert, d.h. die interne Zustandsmaschine des Masters wechselt den Zustand aufgrund eines Befehls, was auf dem Master/status Topic zu beobachten ist. Dementsprechend muss eine Handlersteuerung dieses Topic überwachen.
Unterstützte Befehle
site-layout
Der site-layout Befehl teilt dem Master mit welches physische Layout die Sites des Testers zueinander haben. Der Master ermittelt anhand dieses Layouts, welche Pingpong Konfiguration zu verwenden ist.
{
"type": "site-layout",
"payload":
{
"sites": [
[0, 1],
[1, 0]
]
}
}
[0, 1] are the x and y coordinates
the index of the tuple (x and y) is the sideid from the example above:
siteid 0 ==> (x: 0, y: 1)
Für jede Site des Testers wird ein Eintrag im “sites” Array erwartet.
Die Positionen müssen mit den Positionen, die im Master hinterlegt sind übereinstimmen.
Positionen der Sites im Master:
Der Master speichert die Sitepositionen als vielfaches der Größe einer Site, mit dem 0 Punkt links oben.
Es gibt keine negativen Koordinaten für Sites.
Der Master erlaubt einen Versatz vom 0-Punkt von maximal
- 1, d.h. bei 4 Sites ist die Maximale X Koordinate 3. Es gibt keine Bruchteile von Schritten, sondern nur ganze Zahlen.
Der Nutzer des Interface ist dafür verantwortlich die Sitekoordinaten mittels einer geeigneten Transformation in das Masterkoordinatensystem zu überführen.
Randbedingungen:
Der Master akzeptiert dieses Paket nur, solange noch kein Testprogramm geladen ist.
Sollte ein Testprogramm geladen werden, bevor dieses Paket geladen wurde, so verwendet der Master eine in seiner Konfigurationsdatei hinterlegtes Layout. Hierbei handelt es sich um einen Fallback um es weiterhin zu ermöglichen Lose über das WebUI zu ermöglichen wenn kein Handler verfügbar ist.
load
Der Loadbefehl weist die Masterapplikation an ein Los zu laden. Bei Erfolg wechselt der Master in den Zustand XXX
{
"type": "load",
"payload":
{
"lotnumber": "",
"sublotnumber": "",
"devicetype": "",
"measurementtemperature": ""
}
}
Der Loadbefehl weist die Masterapplikation an ein Los zu laden
lotnumber: Losnummer
sublotnumer: Sublosnummer / Wafernummer
devicetype: Device Type
measurementtemperature: Eingestellte Test-Temperatur
Bei Erfolg wechselt der Master in den Zustand XXX
next
Der Nextbefehl weist die Masterapplikation die Tests für eine gegebene Menge von Sites zu starten. Der Master wechselt während die Tests laufen in den Zustand XXX und nach Testabschluss in den Zustand YYY. Die Handlerapplikation darf keinen neuen Testbefehl schicken, solange der Zustand XXX nicht erreicht wurde, selbst dann nicht, wenn der Master bereits Testergebnisse publiziert hat.
{
"type": "next",
"payload":
{
"sites": [
{
"siteid": "site-id",
"partid": "",
"binning": "",
"logflag": "",
"additionalinfo": "",
},
(mehr sites)
]
}
}
siteid: Siteid einer Site, auf der getestet werden soll. Diese Siteid muss mit einer Site übereinstimmen, die beim Master angemeldet ist.
partid: Bauteilnummer
binning: Bin Ergebnis einer vorherigen Teststation für das Bauteil
logflag: LOG FLAG
additionalinfo: Informationen die Zwischen meherere Tester ausgetauscht werden
Fehlerfälle: Wird ein Testbefehl für eine Unbekannte Site erzeugt, so wechselt der Master in den Zustand “Error”.
end lot
Der Endlotbefehl weist die Masterapplikation ihre Testapplikation zu beenden. Bei Erfolg wechselt der Master in den Zustand XXX
{
"type": "endlot",
"payload": {}
}
identify
Der identifybefehl weist die Masterapplikation sein ID(Name) zu schicken. Die Antwort ist:
{
"type": "identify",
"payload": {}
}
{
"type": "identify",
"payload": {"name": ""}
}
get-state
Der get-state Befehl weist die Masterapplikation seinen Zustand zu schicken. Der Master published daraufhin seinen aktuellen Zustand im status Topic.
{
"type": "get-state",
"payload": {}
}
Antwort durch den Master
{
"type": "get-state",
"payload": {"state": "",
"message": ""
}
}
ToDo: Hier sollten nur die Statemachinezustände des Masters stehen. Der Handler muss sehen, wie er damit klarkommt.
BUSY
LOT = loading
INIT
OK
ERR
CHECKSUM = checksum error
NOT_IMPL
INVAL_LOT
NO_LOT
HAVE_LOT
UN_ERR = unrecorverable error
get-host
Der get-host Befehl weist die Masterapplikation seinen host information zu schicken. Diese werden verwendet, um auf dem Master WebUI zugreifen zu können. Der Master published daraufhin die information in seinem response topic.
{
"type": "get-state",
"payload": {}
}
Antwort durch den Master
{
"type": "get-state",
"payload":
{
"host": "",
"port": /<port-num/>
}
}
Daten die vom Master konsumiert werden
Der Master konsumiert Statusinformationen aus den Topics:
<device-id>/Control/status
<device-id>/TestApp/status
<device-id>/Periphery/status
<handler-id>/Handler/status