{ "info": { "author": "Robert Heath", "author_email": "rob@robheath.me.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Operating System :: Microsoft :: Windows", "Programming Language :: Python :: 3" ], "description": "# pyjanssen\n\nAn object-oriented Python library for interfacing with the MCM module by Janssen Precision Engineering via cacli.exe (provided on [the Janssen website](https://www.janssenprecisionengineering.com/page/cryo-positioning-systems-controller/)). Implements all functions except autocalibration (as it is interactive).\n\n## Usage\n\nLinear positioner import syntax: `from pyjanssen import MCM, FORWARD, BACKWARD`\n\nRotational positioner import syntax: `from pyjanssen import MCM, CW, CCW`\n\nClass MCM provides an object-oriented wrapper for `cacli.exe` provided by Janssen Precision Engineering for control of their low temperature piezoelectric positioners\n\nExample usage:\n\n```python\nfrom pyjanssen import MCM, FORWARD, BACKWARD\n\nm = MCM() # connect to the Janssen MCM using cacli.exe in current directory\nm.move(1, FORWARD) # moves in positive direction\nm.move(2, BACKWARD, frequency=10, step_size=50, temperature=293, steps=100, profile='PROFILE1') # moves in negative direction; sets new frequency, step_size, temperature, steps, and profile config\nprint(m.get_position(1)) # ask the MCM for the position of axis 1 (requires OEM2 module)\n```\n\n## API Reference\n\n### MCM(device=None, \\*\\*kwargs)\n\narguments: \\*device (default None) to specify specific MCM module if multiple\nreturns: MCM instance\n\nkwargs: exe (string) to specify path to cacli.exe if not in current directory\n server (bool) to specify use of cacli.exe in server mode (good for fast command responses)\n verbose (bool) to output commands and responses from cacli.exe for debugging\n\n#### autocalibrate(self, address, channel, \\*\\*kwargs)\n\n*Not implemented (needs input/output)*\n\n#### disable_servodrive(self)\n\nreturns: dictionary of STATUS\n\n#### enable_servodrive(self, pgain=300, \\*\\*kwargs)\n\narguments: \\*pgain (default 300)\nreturns: dictionary of STATUS\n\nuses values from channel 1 when setting TEMP, TYPE\n\n#### frequency(self, address)\n\narguments: address\nreturns: frequency for given address\n\n#### get_description(self, address, \\*\\*kwargs)\narguments: address\nreturns: dictionary of Version and Available Channels\n\nkwargs: `force` command to run ignoring servodrive\ngets module information\n\n#### get_information(self, address, channel='1', \\*\\*kwargs)\n\narguments: address, \\*channel (default 1)\nreturns: dictionary of TYPE and TAG\n\nkwargs: force command to run ignoring servodrive\n\ngets positioner information\n\n#### get_position(self, address, channel=1, \\*\\*kwargs)\n\narguments: address, \\*channel (default 1)\nreturns: position (integer)\n\nkwargs: force command to run ignoring servodrive\n\n#### get_position_raw(self, address, channel=1, \\*\\*kwargs)\narguments: address, \\*channel (default 1)\nreturns: raw encoder value (integer)\n\nkwargs: force command to run ignoring servodrive\n\nreturns 'rvl' value from POS command\n\n#### get_status(self, address, \\*\\*kwargs)\n\narguments: address\nreturns: dictionary of FAILSAFE STATE and STATUS\n\nkwargs: force command to run ignoring servodrive\n\ngets status of address\n\n#### move(self, address, direction, channel=1, \\*\\*kwargs)\n\narguments: address, direction, \\*channel (default 1), \\*\\*kwargs\nreturns: dictionary of STATUS\n\nkwargs: frequency, step_size, temperature, steps, profile\n\ntakes address of module to move and direction (FORWARD, BACKWARD)\nas well as optional channel if using CADM module (not CADM2!)\nplus optional kwargs to set frequency/step size/temperature\n(these values are retained)\n\n#### profile(self, address)\n\narguments: address\nreturns: profile for given address\nreset_position(self, address, channel=1, \\*\\*kwargs)\narguments: address, \\*channel (default 1)\nreturns: string\n\nkwargs: force command to run ignoring servodrive\n\nresets the position counter to 0\n\n#### select_analogue_input(self, address, direction, channel=1, \\*\\*kwargs)\n\narguments: address, direction, \\*channel (default 1), \\*\\*kwargs\nreturns: dictionary of STATUS\n\nkwargs: frequency, step_size, temperature, steps, profile\n\n!! NOTE !! From the manual:\nThe CADM2 module will perform an \u00e2\u20ac\u02dcautomatic zero calibration\u00e2\u20ac\u2122 upon power on to make sure the connected actuator will not move at an input voltage of o (zero) [V]14. However, this means that it is required to hold the input at 0 (zero) [V] during power on of the module (do not let the input float).\n\n#### servodrive_emergency_stop(self, \\*\\*kwargs)\n\nreturns: dictionary of STATUS\nservodrive_find_end_stops(self, direction, filter, zero, \\*\\*kwargs)\narguments: direction, filter, zero\nreturns: dictionary of STATUS\n\ndirection: FORWARD or BACKWARD \nfilter: integer, 1-20, velocity polling delay (relative)\nzero: boolean, reset position after completion\n\n#### servodrive_go_to(self, pos1=0, pos2=0, pos3=0, \\*\\*kwargs)\n\narguments: \\*pos1, \\*pos2, \\*pos3 (set 0 if not connected)\nreturns: dictionary of STATUS\nservodrive_status_position(self, \\*\\*kwargs)\nreturns: dictionary of STATUS, ENABLED, BUSY, POS1, POS2, POS3, ERR1, ERR2, ERR3\n\nENABLED is 0 (disabled), 1 (enabled), 2 (find end stop active)\nBUSY is 1 if minimizing error between setpoint and current point\nPOSx is current position information for each\nERRx is the difference between current position and target position\n\n#### set_frequency(self, address, frequency)\n\narguments: address, frequency\n\nin Hz, between 0 and 600\n\n#### set_profile(self, address, profile)\n\narguments: address, profile\n\nname of controller profile\n\n#### set_step_size(self, address, step_size)\n\narguments: address, step_size\n\nin %, between 0 and 100\n\n#### set_steps(self, address, steps)\n\narguments: address, steps\n\nnumber, between 0 and 50000\n\n#### set_temperature(self, address, temperature)\n\narguments: address, temperature\n\nin K, between 0 and 300\n\n#### step_size(self, address)\n\narguments: address\nreturns: step_size for given address\n\n#### steps(self, address)\n\narguments: address\nreturns: steps for given address\n\n#### stop(self, address, \\*\\*kwargs)\n\narguments: address\nreturns: dictionary of STATUS\n\nkwargs: force command to run ignoring servodrive\n\nstops movement (Flexidrive only)\n\n#### temperature(self, address)\n\narguments: address\nreturns: temperature for given address\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Laukei/pyjanssen", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pyjanssen", "package_url": "https://pypi.org/project/pyjanssen/", "platform": "", "project_url": "https://pypi.org/project/pyjanssen/", "project_urls": { "Homepage": "https://github.com/Laukei/pyjanssen" }, "release_url": "https://pypi.org/project/pyjanssen/0.1.2/", "requires_dist": null, "requires_python": "", "summary": "Wrapper for cacli.exe for Janssen Precision Engineering MCM module", "version": "0.1.2" }, "last_serial": 4682420, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "dea2cffdc8c987167c8bdef5c232a25e", "sha256": "31065be6e52cf4abdb31877983f9aaec8f94451dd51553ad06156db90297b01f" }, "downloads": -1, "filename": "pyjanssen-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dea2cffdc8c987167c8bdef5c232a25e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8977, "upload_time": "2018-12-04T09:21:16", "url": "https://files.pythonhosted.org/packages/e2/0b/a005304ce1cbb707d9adb52168ff16bfdea3b0cb9b08e859991697e20256/pyjanssen-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f2d99faabfcad51e4e3f9fcfcbf1131d", "sha256": "6ca84013bc8de32ea4e27d945f584a898e4a87ba2a923cf343128180821b1df8" }, "downloads": -1, "filename": "pyjanssen-0.1.tar.gz", "has_sig": false, "md5_digest": "f2d99faabfcad51e4e3f9fcfcbf1131d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7684, "upload_time": "2018-12-04T09:21:18", "url": "https://files.pythonhosted.org/packages/42/c4/556edc2ad83595f2cd01d8b9cc9c50b6d47728d56a6036154086bc8c4e81/pyjanssen-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "270b633c96dea62e2da4039e24cabde0", "sha256": "ae26320505530a75f62a2bb912c7b487f3cac8e67b42ad8018289a915afe0ef3" }, "downloads": -1, "filename": "pyjanssen-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "270b633c96dea62e2da4039e24cabde0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9048, "upload_time": "2019-01-10T19:36:14", "url": "https://files.pythonhosted.org/packages/77/a0/24408ae4010c6eaf922baf56787541cdb3f2f2224c25053bdda8710958e0/pyjanssen-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "965c66815b5d7f77987cb3d15f0bf8d3", "sha256": "d50b30023707e5d2ce1469ba92b2bc718eb39a5e5300d2bb04df270fc5407c47" }, "downloads": -1, "filename": "pyjanssen-0.1.1.tar.gz", "has_sig": false, "md5_digest": "965c66815b5d7f77987cb3d15f0bf8d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7748, "upload_time": "2019-01-10T19:36:16", "url": "https://files.pythonhosted.org/packages/2d/9c/40b6fce48c675e6747b7c5eb4d48b2eb21b1d957930e7fe15487d067c37c/pyjanssen-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "8cc664f9de799acbaa9ddd5898891fee", "sha256": "06ddd6ddf0739e0077bb3c86bb7ac2f3d822ca2dceab3e29368f4df0bcb3c4af" }, "downloads": -1, "filename": "pyjanssen-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8cc664f9de799acbaa9ddd5898891fee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9004, "upload_time": "2019-01-10T19:39:32", "url": "https://files.pythonhosted.org/packages/a8/5d/e31f9cf38f636418cc619406316b911533d813990649389e537382a4c25b/pyjanssen-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac0dd18b4c2ef8a251bc65652c180947", "sha256": "41f635365dc06139d6ed7eacace318660e72179fa57cca6ab119aa325f1a4147" }, "downloads": -1, "filename": "pyjanssen-0.1.2.tar.gz", "has_sig": false, "md5_digest": "ac0dd18b4c2ef8a251bc65652c180947", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7701, "upload_time": "2019-01-10T19:39:34", "url": "https://files.pythonhosted.org/packages/33/fc/036b3b7f98d32fd80fd6e8b05c7c3a1169dce856c84a0e6d1e7a6d0d50d2/pyjanssen-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8cc664f9de799acbaa9ddd5898891fee", "sha256": "06ddd6ddf0739e0077bb3c86bb7ac2f3d822ca2dceab3e29368f4df0bcb3c4af" }, "downloads": -1, "filename": "pyjanssen-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8cc664f9de799acbaa9ddd5898891fee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9004, "upload_time": "2019-01-10T19:39:32", "url": "https://files.pythonhosted.org/packages/a8/5d/e31f9cf38f636418cc619406316b911533d813990649389e537382a4c25b/pyjanssen-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac0dd18b4c2ef8a251bc65652c180947", "sha256": "41f635365dc06139d6ed7eacace318660e72179fa57cca6ab119aa325f1a4147" }, "downloads": -1, "filename": "pyjanssen-0.1.2.tar.gz", "has_sig": false, "md5_digest": "ac0dd18b4c2ef8a251bc65652c180947", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7701, "upload_time": "2019-01-10T19:39:34", "url": "https://files.pythonhosted.org/packages/33/fc/036b3b7f98d32fd80fd6e8b05c7c3a1169dce856c84a0e6d1e7a6d0d50d2/pyjanssen-0.1.2.tar.gz" } ] }