{"id":20687695,"url":"https://github.com/klauer/mmc100","last_synced_at":"2025-08-22T14:09:05.712Z","repository":{"id":15599907,"uuid":"18336028","full_name":"klauer/mmc100","owner":"klauer","description":"PI miCos MMC-100 (EPICS driver/device support)","archived":false,"fork":false,"pushed_at":"2016-05-31T20:15:24.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-10T23:58:28.167Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","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":null}},"created_at":"2014-04-01T16:17:21.000Z","updated_at":"2021-12-17T12:53:48.000Z","dependencies_parsed_at":"2022-09-06T23:21:34.801Z","dependency_job_id":null,"html_url":"https://github.com/klauer/mmc100","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/klauer/mmc100","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klauer%2Fmmc100","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klauer%2Fmmc100/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klauer%2Fmmc100/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klauer%2Fmmc100/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/klauer","download_url":"https://codeload.github.com/klauer/mmc100/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/klauer%2Fmmc100/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271650860,"owners_count":24796725,"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","status":"online","status_checked_at":"2025-08-22T02:00:08.480Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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:00.871Z","updated_at":"2025-08-22T14:09:05.683Z","avatar_url":"https://github.com/klauer.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"PI MiCos MMC100 EPICS Driver\n============================\n\nMotor record driver (\"model-3\" type) for the PI MiCos MMC100 piezo controller.\n\nUSB Notes\n---------\n\nIf using the MMC100 with a USB cable to a Linux computer, the user that runs this IOC\nmust obviously have access to USB ports -- this could mean adding the user to the 'dialout'\ngroup, adding udev rules, or however the specific Linux distribution does it.\n\nAs it is, the default st.cmd is actually a bash script that looks for a specific vendor/product ID\nby using a simple HAL script. Used in conjunction with procServ, the IOC will die when the device\nis unplugged, but restart automatically when it is detected again.\n\nAn easier, more permanent method, may be to set SYMLINK+= in your udev rules such that \n/dev/mmc100 is created, for example. (TODO examples)\n\nRequirements\n------------\n\nThough it may work on other versions, the driver was tested on these:\n\n1. EPICS base 3.14.12.3 http://www.aps.anl.gov/epics/\n2. asyn 4-18 http://www.aps.anl.gov/epics/modules/soft/asyn/\n3. motor record 6-7 http://www.aps.anl.gov/bcda/synApps/motor/\n\nOptional\n--------\n\n1. EDM http://ics-web.sns.ornl.gov/edm/log/getLatest.php\n2. Autosave http://www.aps.anl.gov/bcda/synApps/autosave/autosave.html\n\nInstallation\n------------\n\n1. Install EPICS\n    1. If using a Debian-based system (e.g., Ubuntu), use the packages here http://epics.nsls2.bnl.gov/debian/\n    2. If no packages are available for your distribution, build from source\n2. Edit configure/RELEASE\n    1. Point the directories listed in there to the appropriate places\n    2. If using the Debian packages, everything can be pointed to /usr/lib/epics\n3. Edit iocBoot/iocmmc100test/st.cmd\n    1. Change the shebang on the top of the script if your architecture is different than linux-x86:\n        #!../../bin/linux-x86/mmc100test\n        (check if the environment variable EPICS_HOST_ARCH is set, or perhaps `uname -a`, or ask someone if\n         you don't know)\n    2. The following line sets the autosave prefix for your MMC100 PVs:\n        ```\n        # Autosave prefix\n        epicsEnvSet(\"AS_PREFIX\", \"MMC100:AS:\")\n        ```\n       Set the second quoted string appropriately.\n    3. If the find_usb.sh script is being used, the $MMC100_PORT environment variable will be automatically set. \n        If the port which the MMC100 is connected to is fixed, you can set it in place of $(MMC100_PORT), on the line\n        `epicsEnvSet(\"MMC100_PORT\", \"$(MMC100_PORT)\")` -- and st1.cmd can then replace st.cmd. \n    4. If necessary, you can change the rate at which the controller is polled for positions and such:\n        ```\n        #MMC100CreateController(portName, MMC100PortName, numAxes, movingPollPeriod, idlePollPeriod)\n        MMC100CreateController(\"$(MMC100_PORT)\", \"$(ASYN_PORT)\", 1, 50, 100)\n        ```\n        The moving and idle poll periods are both in milliseconds. The former rate is used when an axis is in motion, the latter otherwise.\n    5. Set-up the limits and encoder settings for each axis on the controllers (see the example in the file).\n    6.  If using autosave, add lines in auto_positions.req and auto_settings.req for each motor. If not using autosave, comment create_monitor_set lines.\n4.  Edit iocBoot/iocMMC100/MMC100.sub\n    Modify the lines so that there is one motor.db line per axis. Each will be named $(P)$(M).\n5. Go to the top directory and `make`\n6. If all goes well:\n    ```\n    $ cd iocBoot/iocmmc100\n    $ chmod +x st.cmd\n    $ ./st.cmd\n\n    If not using the find_usb.sh script, run ./st1.cmd directly:\n    $ ./st1.cmd\n    ```\n\n7. Run EDM:\n    ```\n    $ export EDMDATAFILES=$TOP/op/edl:$EDMDATAFILES\n    $ edm -x -m \"P=MLL:,M=m1\" motorx_all \u0026\n    ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklauer%2Fmmc100","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fklauer%2Fmmc100","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fklauer%2Fmmc100/lists"}