# Semi-ATE
**Semi**conductor **A**utomated **T**est **E**quipment
[![GitHub](https://img.shields.io/github/license/Semi-ATE/Semi-ATE?color=black)](https://github.com/Semi-ATE/Semi-ATE/blob/master/LICENSE.txt)
[![Conda](https://img.shields.io/conda/pn/conda-forge/starz?color=black)](https://www.lifewire.com/what-is-noarch-package-2193808)
[![Supported Python versions](https://img.shields.io/badge/python-%3E%3D3.8-black)](https://www.python.org/downloads/)
[![CI-CD](https://github.com/Semi-ATE/Semi-ATE/workflows/CI-CD/badge.svg)](https://github.com/Semi-ATE/Semi-ATE/actions/workflows/CICD.yml?query=workflow%3ACD)
[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/Semi-ATE/Semi-ATE?color=blue&label=GitHub&sort=semver)](https://github.com/Semi-ATE/Semi-ATE/releases/latest)
[![GitHub commits since latest release (by date)](https://img.shields.io/github/commits-since/Semi-ATE/Semi-ATE/latest)](https://github.com/Semi-ATE/Semi-ATE)
[![GitHub issues](https://img.shields.io/github/issues/Semi-ATE/Semi-ATE)](https://github.com/Semi-ATE/Semi-ATE/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/Semi-ATE/Semi-ATE)](https://github.com/Semi-ATE/Semi-ATE/pulls)
`Semi-ATE` is a tester- and instruments **AGNOSTIC** framework for **Semi**conductor **ATE** ASIC testing projects.
This means that the system is **not** build around a specific instrument (let's consider an ATE tester for a moment as a super instrument), it rather focuses on
organizing semiconductor testing in such a way that **all** use- (and special) corner cases have their well known place. This enables the users (read: DE's, TCE's, TE's & PE's) to focus on the **REAL** work, being the writing of good, fast and stable tests. Organizing tests into test-programs and test-programs in to flows is handled by wizards, so the only code that needs writing is the actual test! (motto: [Code is our enemy](http://www.skrenta.com/2007/05/code_is_our_enemy.html))
The `Semi-ATE` package is written purely in Python (noarch) and provides besides libraries also a plugin to the [Spyder](https://www.spyder-ide.org/) IDE.
## Packages
The Semi-ATE project is maintained in this single repository, however it is released as a set of packages (all with the same version number) to accomodate the different use-cases.
| Package Name | PyPI Version | conda Version | feedstock |
|:------------------------- |:----:|:-----------:|:---------:|
| [Semi-ATE-common](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_common) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-Common?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-common/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-Common?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-common) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-Common-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-Common-feedstock) |
| [Semi-ATE-project-database](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_projectdatabase) |[![PyPI](https://img.shields.io/pypi/v/Semi-ATE-project-database?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-project-database/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-project-database?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-project-database) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-project-database-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-project-database-feedstock) |
| [Semi-ATE-sammy](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_sammy) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-sammy?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-sammy/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-sammy?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-sammy) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-sammy-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-sammy-feedstock) |
| [Semi-ATE-plugins](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_semiateplugins) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-plugins?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-plugins/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-plugins?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-plugins) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-plugins-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-plugins-feedstock) |
| [Semi-ATE-testers](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Plugins/semi_ate_testers) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-testers?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-testers/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-testers?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-testers) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-testers-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-testers-feedstock) |
| [Semi-ATE-spyder](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_spyder) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-spyder?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-spyder/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-spyder?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-spyder) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-spyder-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-spyder-feedstock) |
| [Semi-ATE-apps-common](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Apps/common) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-apps-common?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-apps-common/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-apps-common?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-apps-common) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-apps-common-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-apps-common-feedstock) |
| [Semi-ATE-control-app](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Apps/control_app) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-control-app?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-control-app/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-control-app?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-control-app) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-control-app-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-control-app-feedstock) |
| [Semi-ATE-master-app](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Apps/master_app) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-master-app?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-master-app/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-master-app?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-master-app) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/semi-ate-master-app-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-master-app-feedstock) |
| [Semi-ATE-test-app](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Apps/test_app) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-test-app?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-test-app/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-test-app?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-test-app) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-test-app-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-test-app-feedstock) |
| [Semi-ATE-installer](https://github.com/Semi-ATE/Semi-ATE-Installer) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-installer?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-installer/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-installer?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-installer) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-Installer-feedstock?label=feedstock)](https://github.com/conda-forge/semi-ate-installer-feedstock) |
3rd party packages needed:
[mosquitto](https://github.com/conda-forge/staged-recipes/pull/18387) : [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/mosquitto?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/mosquitto) [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/mosquitto-feedstock?label=feedstock)](https://github.com/conda-forge/mosquitto-feedstock)
## Installation (on a MiniSCT)
1. login as sct/sct
2. in the home directory there should be a directory `repos`
3. in `repos` there is a `Semi-ATE` directory (holding the relevant Semi-ATE git repositories)
- `TCC_actuators` : git clone
5.
## Run (on a MiniSCT)
1. Make sure you have a "test cell" configured as follows :
![image](https://user-images.githubusercontent.com/3516972/197773673-df64bc5f-b9aa-4166-a585-014dad2d617d.png)
---
===
Installation of the packages can be achieved via `conda` or [pip](https://packaging.python.org/en/latest/tutorials/installing-packages/#use-pip-for-installing).
### Installation using pip
Each package can be installed using `python -m pip install <package-name>`:
```Console
python -m pip install semi-ate-common
python -m pip install semi-ate-project-database
python -m pip install semi-ate-sammy
python -m pip install semi-ate-plugins
python -m pip install semi-ate-testers
python -m pip install semi-ate-spyder
python -m pip install semi-ate-apps-common
python -m pip install semi-ate-control-app
python -m pip install semi-ate-master-app
python -m pip install semi-ate-test-app
```
Or all at once:
```Console
python -m pip install semi-ate-common semi-ate-project-database semi-ate-sammy semi-ate-plugins semi-ate-testers semi-ate-spyder semi-ate-apps-common semi-ate-control-app semi-ate-master-app semi-ate-test-app
```
### Installation via Conda
To be defined
### Development Process
Test program development process documentation can be found [here](docs/project/SemiATEDevelopment)
## The semi-ate-master-app package
This package provides a command line tool (`launch_master`). In order to use this application you have to configure it first. This tool should be run on host that either runs the control application from the `semi-ate-control-app` package or that is connected via ethernet to further hosts running the control application.
The master application controls the so-called control applications, i.e. test nodes. To do so the master sends commands to the different test nodes using MQTT messages. Among others these commands
include commands for loading and unloading test programs and starting the test execution.
The muster application can be controlled using a web interface or it is controlled by some handler application.
### Configuration
Configuration of the master application is done by writing a JSON file called **master_config_file.json**. The following key-value-pairs have to be defined:
```JSON
{
"broker_host": "127.0.0.1",
"broker_port": 1883,
"device_id": "SCT-82-1F",
"sites": [
"0"
],
"Handler": "HTO92-20F",
"environment": "F1",
"webui_host": "127.0.0.1",
"webui_port": "8081",
"jobsource": "filesystem",
"jobformat": "xml.semi-ate",
"skip_jobdata_verification": false,
"filesystemdatasource_path": ".",
"filesystemdatasource_jobpattern": "le#jobname#.xml",
"enable_timeouts": true,
"user_settings_filepath": "master_user_settings.json",
"site_layout": { "0": [0, 0]},
"tester_type": "Semi-ATE Master Single Tester",
"loglevel": 10,
"web_root_folder": "./",
"develop_mode": false
}
```
* `broker_host` defines the ip address of the mqtt broker.
* `broker_port` defines the prot of the mqtt broker.
* `site_layout` defines the site layout of the different test sites.
* `device_id` defines the name of the test site
* `sites` defines an array containing the test node ids running the control application
* `Handler` defines the name of some device handler or wafer handler, i.e. prober
* `environment` defines the test environment (F1, F2, F3, P1, P2, P3)
* `webui_host` defines the ip of the web interface for controlling he master application manually
* `webui_port` defines the port number of the web interface
* `webui_root_path` defines the URI of the web-resources, i.e. the folder containing the index.html of some web application.
* `jobsource` defines the location where to find test job definitions
* `jobformat` defines the format of the job definitions
* `skip_jobdata_verification` defines whether the job definition has to be verified
* `filesystemdatasource_path` defines the path where to find job definitions
* `filesystemdatasource_jobpattern` defines the pattern for the name of the test job file. This is done by replacing _#jobname#_ by the job id, i.e. the lot id.
* `enable_timeouts` defines whether or not timeouts are enabled. If enabled the system will produce some error message if certain things like becomming ready, loading or undloading a test program etc. take to much time.
* `user_settings_filepath` defines where the user specific settings are stored. These settings are set via the web interface.
* `site_layout` defines for each site the layout. The layout is the start coordinate of some site
* `tester_type` defines the type of he tester. This provided by the tester plugin.
* `loglevel` defines the log-level of the control application
* `develop_mode` defines wether the master application shall start in develop mode, such that it's possible to debug a test program within spyder (possible value: true or false)
### Starting the Master Application
We assume that the semi-ate-master-app package has been installed in the current python environment. Further the configuration file **master_config_file.json** is located in the current folder.
**IMPORTANT**: The configuration file has to be named **master_config_file.json**
```Console
(environment)> launch_master
======== Running on http://127.0.0.1:8081 ========
(Press CTRL+C to quit)
master |22/03/2022 04:45:37 PM |INFO |mqtt connected
master |22/03/2022 04:45:37 PM |INFO |Master state is connecting
```
### Starting the Master Application in Develop Mode
Setting the develop mode to 'true' shall start the master application in a different mode and different state
```Console
(environment)> launch_master
======== Running on http://127.0.0.1:8081 ========
(Press CTRL+C to quit)
master |21/06/2022 02:31:58 PM |INFO |mqtt connected
master |21/06/2022 02:31:58 PM |INFO |Master state is connecting
master |21/06/2022 02:31:58 PM |INFO |Master state is loading
```
In Loading state, master application will wait till a test program started and is ready to accept further commands
__note__: the `device_id` value will be overridden to match the default value consumed by the test app (`device_id`='developmode')
Raw data
{
"_id": null,
"home_page": "",
"name": "semi-ate-master-app",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "Semiconductor ATE Automatic Test Equipment Spyder Plugin",
"author": "The Semi-ATE Project Contributors",
"author_email": "ate.organization@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/60/d2/84a189dd405dedc2dc9fffe991ead17b1040e2f7e779ab8c8984f5bc77e0/semi-ate-master-app-1.0.15.tar.gz",
"platform": "Windows",
"description": "# Semi-ATE\n\n**Semi**conductor **A**utomated **T**est **E**quipment\n\n[![GitHub](https://img.shields.io/github/license/Semi-ATE/Semi-ATE?color=black)](https://github.com/Semi-ATE/Semi-ATE/blob/master/LICENSE.txt)\n[![Conda](https://img.shields.io/conda/pn/conda-forge/starz?color=black)](https://www.lifewire.com/what-is-noarch-package-2193808)\n[![Supported Python versions](https://img.shields.io/badge/python-%3E%3D3.8-black)](https://www.python.org/downloads/)\n[![CI-CD](https://github.com/Semi-ATE/Semi-ATE/workflows/CI-CD/badge.svg)](https://github.com/Semi-ATE/Semi-ATE/actions/workflows/CICD.yml?query=workflow%3ACD)\n\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/Semi-ATE/Semi-ATE?color=blue&label=GitHub&sort=semver)](https://github.com/Semi-ATE/Semi-ATE/releases/latest)\n[![GitHub commits since latest release (by date)](https://img.shields.io/github/commits-since/Semi-ATE/Semi-ATE/latest)](https://github.com/Semi-ATE/Semi-ATE)\n[![GitHub issues](https://img.shields.io/github/issues/Semi-ATE/Semi-ATE)](https://github.com/Semi-ATE/Semi-ATE/issues)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr/Semi-ATE/Semi-ATE)](https://github.com/Semi-ATE/Semi-ATE/pulls)\n\n`Semi-ATE` is a tester- and instruments **AGNOSTIC** framework for **Semi**conductor **ATE** ASIC testing projects.\n\nThis means that the system is **not** build around a specific instrument (let's consider an ATE tester for a moment as a super instrument), it rather focuses on\norganizing semiconductor testing in such a way that **all** use- (and special) corner cases have their well known place. This enables the users (read: DE's, TCE's, TE's & PE's) to focus on the **REAL** work, being the writing of good, fast and stable tests. Organizing tests into test-programs and test-programs in to flows is handled by wizards, so the only code that needs writing is the actual test! (motto: [Code is our enemy](http://www.skrenta.com/2007/05/code_is_our_enemy.html))\n\nThe `Semi-ATE` package is written purely in Python (noarch) and provides besides libraries also a plugin to the [Spyder](https://www.spyder-ide.org/) IDE.\n\n## Packages\n\nThe Semi-ATE project is maintained in this single repository, however it is released as a set of packages (all with the same version number) to accomodate the different use-cases.\n\n| Package Name | PyPI Version | conda Version | feedstock |\n|:------------------------- |:----:|:-----------:|:---------:|\n| [Semi-ATE-common](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_common) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-Common?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-common/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-Common?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-common) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-Common-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-Common-feedstock) | \n| [Semi-ATE-project-database](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_projectdatabase) |[![PyPI](https://img.shields.io/pypi/v/Semi-ATE-project-database?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-project-database/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-project-database?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-project-database) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-project-database-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-project-database-feedstock) |\n| [Semi-ATE-sammy](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_sammy) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-sammy?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-sammy/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-sammy?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-sammy) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-sammy-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-sammy-feedstock) |\n| [Semi-ATE-plugins](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_semiateplugins) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-plugins?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-plugins/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-plugins?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-plugins) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-plugins-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-plugins-feedstock) |\n| [Semi-ATE-testers](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Plugins/semi_ate_testers) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-testers?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-testers/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-testers?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-testers) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-testers-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-testers-feedstock) |\n| [Semi-ATE-spyder](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/ATE_spyder) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-spyder?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-spyder/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-spyder?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-spyder) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-spyder-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-spyder-feedstock) |\n| [Semi-ATE-apps-common](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Apps/common) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-apps-common?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-apps-common/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-apps-common?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-apps-common) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-apps-common-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-apps-common-feedstock) |\n| [Semi-ATE-control-app](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Apps/control_app) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-control-app?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-control-app/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-control-app?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-control-app) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-control-app-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-control-app-feedstock) |\n| [Semi-ATE-master-app](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Apps/master_app) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-master-app?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-master-app/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-master-app?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-master-app) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/semi-ate-master-app-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-master-app-feedstock) |\n| [Semi-ATE-test-app](https://github.com/Semi-ATE/Semi-ATE/tree/master/src/Apps/test_app) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-test-app?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-test-app/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-test-app?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-test-app) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-test-app-feedstock?label=feedstock)](https://github.com/conda-forge/Semi-ATE-test-app-feedstock) |\n| [Semi-ATE-installer](https://github.com/Semi-ATE/Semi-ATE-Installer) | [![PyPI](https://img.shields.io/pypi/v/Semi-ATE-installer?color=blue&label=PyPI)](https://pypi.org/project/Semi-ATE-installer/) | [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/Semi-ATE-installer?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/semi-ate-installer) | [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/Semi-ATE-Installer-feedstock?label=feedstock)](https://github.com/conda-forge/semi-ate-installer-feedstock) |\n\n3rd party packages needed:\n\n[mosquitto](https://github.com/conda-forge/staged-recipes/pull/18387) : [![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/mosquitto?color=blue&label=conda-forge)](https://anaconda.org/conda-forge/mosquitto) [![conda-forge feedstock](https://img.shields.io/github/issues-pr/conda-forge/mosquitto-feedstock?label=feedstock)](https://github.com/conda-forge/mosquitto-feedstock) \n\n\n\n\n\n\n\n\n## Installation (on a MiniSCT)\n\n1. login as sct/sct\n2. in the home directory there should be a directory `repos`\n3. in `repos` there is a `Semi-ATE` directory (holding the relevant Semi-ATE git repositories)\n - `TCC_actuators` : git clone \n5. \n\n## Run (on a MiniSCT)\n\n1. Make sure you have a \"test cell\" configured as follows :\n![image](https://user-images.githubusercontent.com/3516972/197773673-df64bc5f-b9aa-4166-a585-014dad2d617d.png)\n\n\n\n\n\n\n\n\n\n---\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n===\nInstallation of the packages can be achieved via `conda` or [pip](https://packaging.python.org/en/latest/tutorials/installing-packages/#use-pip-for-installing).\n\n\n\n\n\n\n\n### Installation using pip\n\nEach package can be installed using `python -m pip install <package-name>`:\n\n```Console\npython -m pip install semi-ate-common\npython -m pip install semi-ate-project-database\npython -m pip install semi-ate-sammy\npython -m pip install semi-ate-plugins\npython -m pip install semi-ate-testers\npython -m pip install semi-ate-spyder\npython -m pip install semi-ate-apps-common\npython -m pip install semi-ate-control-app\npython -m pip install semi-ate-master-app\npython -m pip install semi-ate-test-app\n```\n\nOr all at once:\n\n```Console\npython -m pip install semi-ate-common semi-ate-project-database semi-ate-sammy semi-ate-plugins semi-ate-testers semi-ate-spyder semi-ate-apps-common semi-ate-control-app semi-ate-master-app semi-ate-test-app\n```\n\n### Installation via Conda\n\nTo be defined\n\n### Development Process\n\nTest program development process documentation can be found [here](docs/project/SemiATEDevelopment)\n## The semi-ate-master-app package\n\nThis package provides a command line tool (`launch_master`). In order to use this application you have to configure it first. This tool should be run on host that either runs the control application from the `semi-ate-control-app` package or that is connected via ethernet to further hosts running the control application.\nThe master application controls the so-called control applications, i.e. test nodes. To do so the master sends commands to the different test nodes using MQTT messages. Among others these commands\ninclude commands for loading and unloading test programs and starting the test execution.\n\nThe muster application can be controlled using a web interface or it is controlled by some handler application.\n\n### Configuration\n\nConfiguration of the master application is done by writing a JSON file called **master_config_file.json**. The following key-value-pairs have to be defined:\n\n```JSON\n{\n \"broker_host\": \"127.0.0.1\",\n \"broker_port\": 1883,\n \"device_id\": \"SCT-82-1F\",\n \"sites\": [\n \"0\"\n ],\n \"Handler\": \"HTO92-20F\",\n \"environment\": \"F1\",\n \"webui_host\": \"127.0.0.1\",\n \"webui_port\": \"8081\",\n \"jobsource\": \"filesystem\",\n \"jobformat\": \"xml.semi-ate\",\n \"skip_jobdata_verification\": false,\n \"filesystemdatasource_path\": \".\",\n \"filesystemdatasource_jobpattern\": \"le#jobname#.xml\",\n \"enable_timeouts\": true,\n \"user_settings_filepath\": \"master_user_settings.json\",\n \"site_layout\": { \"0\": [0, 0]},\n \"tester_type\": \"Semi-ATE Master Single Tester\",\n \"loglevel\": 10,\n \"web_root_folder\": \"./\",\n \"develop_mode\": false\n}\n```\n\n* `broker_host` defines the ip address of the mqtt broker.\n* `broker_port` defines the prot of the mqtt broker.\n* `site_layout` defines the site layout of the different test sites.\n* `device_id` defines the name of the test site\n* `sites` defines an array containing the test node ids running the control application\n* `Handler` defines the name of some device handler or wafer handler, i.e. prober\n* `environment` defines the test environment (F1, F2, F3, P1, P2, P3)\n* `webui_host` defines the ip of the web interface for controlling he master application manually\n* `webui_port` defines the port number of the web interface\n* `webui_root_path` defines the URI of the web-resources, i.e. the folder containing the index.html of some web application.\n* `jobsource` defines the location where to find test job definitions\n* `jobformat` defines the format of the job definitions\n* `skip_jobdata_verification` defines whether the job definition has to be verified\n* `filesystemdatasource_path` defines the path where to find job definitions\n* `filesystemdatasource_jobpattern` defines the pattern for the name of the test job file. This is done by replacing _#jobname#_ by the job id, i.e. the lot id.\n* `enable_timeouts` defines whether or not timeouts are enabled. If enabled the system will produce some error message if certain things like becomming ready, loading or undloading a test program etc. take to much time.\n* `user_settings_filepath` defines where the user specific settings are stored. These settings are set via the web interface.\n* `site_layout` defines for each site the layout. The layout is the start coordinate of some site\n* `tester_type` defines the type of he tester. This provided by the tester plugin.\n* `loglevel` defines the log-level of the control application\n* `develop_mode` defines wether the master application shall start in develop mode, such that it's possible to debug a test program within spyder (possible value: true or false)\n\n### Starting the Master Application\n\nWe assume that the semi-ate-master-app package has been installed in the current python environment. Further the configuration file **master_config_file.json** is located in the current folder.\n\n**IMPORTANT**: The configuration file has to be named **master_config_file.json**\n\n```Console\n(environment)> launch_master\n======== Running on http://127.0.0.1:8081 ========\n(Press CTRL+C to quit)\nmaster |22/03/2022 04:45:37 PM |INFO |mqtt connected\nmaster |22/03/2022 04:45:37 PM |INFO |Master state is connecting\n```\n\n### Starting the Master Application in Develop Mode\nSetting the develop mode to 'true' shall start the master application in a different mode and different state\n\n\n```Console\n(environment)> launch_master\n======== Running on http://127.0.0.1:8081 ========\n(Press CTRL+C to quit)\nmaster |21/06/2022 02:31:58 PM |INFO |mqtt connected\nmaster |21/06/2022 02:31:58 PM |INFO |Master state is connecting\nmaster |21/06/2022 02:31:58 PM |INFO |Master state is loading\n```\n\nIn Loading state, master application will wait till a test program started and is ready to accept further commands\n\n__note__: the `device_id` value will be overridden to match the default value consumed by the test app (`device_id`='developmode')\n",
"bugtrack_url": null,
"license": "GPL-2.0-only",
"summary": "Master application used for steering the control applications in an ATE test environment.",
"version": "1.0.15",
"split_keywords": [
"semiconductor",
"ate",
"automatic",
"test",
"equipment",
"spyder",
"plugin"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "60d284a189dd405dedc2dc9fffe991ead17b1040e2f7e779ab8c8984f5bc77e0",
"md5": "6da1c4be56259adc3bc72991551cea87",
"sha256": "eadfd549532072f129b7b1a448829a0dc429470b7b9434fdc450250f36755e4d"
},
"downloads": -1,
"filename": "semi-ate-master-app-1.0.15.tar.gz",
"has_sig": false,
"md5_digest": "6da1c4be56259adc3bc72991551cea87",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 51596,
"upload_time": "2023-01-30T16:49:42",
"upload_time_iso_8601": "2023-01-30T16:49:42.173322Z",
"url": "https://files.pythonhosted.org/packages/60/d2/84a189dd405dedc2dc9fffe991ead17b1040e2f7e779ab8c8984f5bc77e0/semi-ate-master-app-1.0.15.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-01-30 16:49:42",
"github": false,
"gitlab": false,
"bitbucket": false,
"lcname": "semi-ate-master-app"
}