{"id":20687767,"url":"https://github.com/klauer/aerotech","last_synced_at":"2025-10-14T03:15:42.835Z","repository":{"id":72187025,"uuid":"97039609","full_name":"klauer/aerotech","owner":"klauer","description":"Aerotech Ensemble Python utilities","archived":false,"fork":false,"pushed_at":"2023-05-09T17:25:21.000Z","size":126,"stargazers_count":2,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-17T16:52:19.927Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Smalltalk","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/klauer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"support/EnsembleTrajectoryScan.st","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-12T18:21:37.000Z","updated_at":"2023-05-09T17:25:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"f7b40625-34f8-42d6-a585-8aba988320d6","html_url":"https://github.com/klauer/aerotech","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klauer%2Faerotech","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klauer%2Faerotech/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klauer%2Faerotech/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klauer%2Faerotech/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/klauer","download_url":"https://codeload.github.com/klauer/aerotech/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242945840,"owners_count":20210762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T22:58:11.504Z","updated_at":"2025-10-14T03:15:37.782Z","avatar_url":"https://github.com/klauer.png","language":"Smalltalk","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aerotech Ensemble Python utilities\n\nSimple asyncio-based communication module for usage with the Aerotech Ensemble.\n\n## Features\n\n* asyncio-based communication library\n* Pure Python - no dependencies\n* Fast scope data retrieval (optional; requires separate Ensemble task)\n* [PyDM](https://github.com/slaclab/pydm) plugin for creating user interfaces\n\n## Requires\n\n* Python 3.6+\n* Use motorAerotech R1-1-1 or later, preferably (upstream now includes my ``doCommand`` fixes)\n* Configure socket 2 as noted below to allow this Python library to communicate.\n* ``doCommand`` must be running on the Ensemble ([link](https://github.com/epics-motor/motorAerotech/blob/master/aerotechApp/src/doCommand.ab))\n* For fast scope data retrieval, ``scopedata_socket3`` must be running on the Ensemble ([link](support/scopedata_socket3.ab))\n\n## Configuration and example\n\n(Modified instructions from https://github.com/epics-motor/motorAerotech/blob/master/aerotechApp/src/README)\n\n- In the System-\u003eCommunication-\u003eASCII-\u003eCommandSetup Parameter, check the following items (everything else is unchecked);\n    * Ethernet Socket 2\n    * Always Send EOS\n- In the System-\u003eCommunication-\u003eEthernet Sockets section;\n\t- in the -\u003eSocket2Setup Parameter, check the \"TCP server\" setting.\n\t- Enter the IP address in the -\u003eSocket2RemoteIPAddress Parameter\n\t- Leave the -\u003eSocket2Port Parameter at the default \"8000\"\n\t- Set the -\u003eSocket2Timeout Parameter greater than idle polling parameter of\n\t  the EnsembleAsynConfig() call.\n\nRead IGLOBAL(1) with the following:\n\n```python\nimport asyncio\n\nimport aerotech\n\nasync def main(host: str, port: int = 8000):\n    comm = aerotech.EnsembleComm(host, port)\n    global1 = comm.iglobal(1)\n    value = await global1.get()\n    print(f'{global1!r} = {value}')\n\nif __name__ == \"__main__\":\n    asyncio.run(main(\"ip_address\"))\n```\n\nSee example [script](aerotech/examples/read_globals.py)\n\n## Fast scope data retrieval configuration\n\nConfigure Socket 3 to listen on TCP port 8001.\n\n- In the System-\u003eCommunication-\u003eEthernet Sockets section;\n\t- in the -\u003eSocket3Setup Parameter, check the \"TCP server\" setting.\n\t- Enter the IP address in the -\u003eSocket3RemoteIPAddress Parameter\n\t- Leave the -\u003eSocket3Port Parameter at the default \"8001\"\n\nDownload and run ``scopedata_socket3`` on the Ensemble ([link](support/scopedata_socket3.ab))\n\nTry the example [script](aerotech/examples/read_scope_data.py)\n\n## PyDM Configuration\n\nThe provided plugin was tested on a very old version of PyDM and is not guaranteed to work with the latest versions.\nSee [pydm_plugin](pydm_plugin/) for code.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklauer%2Faerotech","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fklauer%2Faerotech","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklauer%2Faerotech/lists"}