diff --git a/README.md b/README.md index 12ef41f..e2fe4be 100644 --- a/README.md +++ b/README.md @@ -10,87 +10,6 @@ motorDSM can also be built outside of motor by copying it's ``configure/EXAMPLE_ motorDSM contains an example IOC that is built if ``configure/CONFIG_SITE.local`` sets ``BUILD_IOCS = YES``. The example IOC can be built outside of the driver module. Copy ``iocs/dsmIOC/configure/EXAMPLE_RELEASE.local`` to ``RELEASE.local`` and uncomment and set the paths for the appropriate lines depending on whether motorDSM was built inside the motor module or independently. -------------------------------------------------- -Running an example IOC -------------------------------------------------- - -To run the example IOC, build the packages listed below, then: - -1. Follow the steps in "Configuring the system for attached controllers" below. - -2. Set the "EPICS_CA_ADDR_LIST" environment variable to include the IP address of the server. -If it's running on the same computer, you can use the loopback IP address. -`$ export EPICS_CA_ADDR_LIST='127.0.0.1'` - -3. In the ``iocs/dsmIOC/iocBoot/iocDsm`` directory, run -`$ ../../bin/linux-x86_64/dsm st.cmd.md90` -for one attached MD-90 controller, or -`$ ../../bin/linux-x86_64/dsm st.cmd.md90.multi` -for eight attached MD-90 controllers. Edit this file to use more than one unit; simply comment out the ones you don't need. - -4. Test using the `caget` and `caput` arguments as described in the "Example usage" section below. - - -------------------------------------------------- -Configuring the system for attached controllers -------------------------------------------------- - -The following steps must be used in either st.cmd.md90 (for a single unit) or in st.cmd.md90.multiple (for multiple units). -st.cmd.md90.multiple includes 8 motors predefined on /dev/ttyUSB0 through /dev/ttyUSB7. Comment out all motors you don't need. - -**1. Define a new serial port named "serial0" and set the location of the physical port** -`drvAsynSerialPortConfigure([serial name], [device location], 0, 0, 0)` -*e.g., `drvAsynSerialPortConfigure("serial0", "/dev/ttyUSB0", 0, 0, 0)`* - -**2. Configure the port** -- Baud = 115200 -- Bits = 8 -- Parity = none -- Stop bits = 1 -- Input end of message: "\r" -- Output end of message: "\r" -- Trace IO mask: 2 -``` -asynSetOption([serial name], 0, "baud", "115200") -asynSetOption([serial name], 0, "bits", "8") -asynSetOption([serial name], 0, "parity", "none") -asynSetOption([serial name], 0, "stop", "1") -asynOctetSetInputEos("serial0", 0, "\r") -asynOctetSetOutputEos("serial0", 0, "\r") -asynSetTraceIOMask("serial0", 0, 2) -``` -where `[serial name]` is the name you assigned in step 1, surrounded by double quotes. - -**3. Set initial parameters** -- Power supply enabled (`EPS` command) -- Deadband = 10 nm (`SDB 10` command) -``` -asynOctetConnect("initConnection", [serial name], 0) -asynOctetWrite("initConnection", "EPS") -asynOctetWrite("initConnection", "SDB 10") -asynOctetDisconnect('initConnection') -``` - -**4. Create MD90 Controller object** -`MD90CreateController([controller name], [serial name], 1, 100, 5000)` -where `[controller name]` is the name of the motor to assign. Convention is to use "MD90n", starting with n=0. - -**5. Intialize the IOC** -After the call to `iocInit` (still in the st.cmd.md90[.multiple] file), issue the following commands for each motor. The example below uses `DSM:m0` but it should be run for each line described in motor.substitutions.md90 (or motor.substitutions.md90.multiple). -```` -dbpf("DSM:m0.RTRY", "0") #sets retries to 0; this is automatic on the MD90 -dbpf("DSM:m0.TWV", "0.1") #Tweak distance -dbpf("DSM:m0.VMAX", "1.0") #Sets max velocity to 1 mm/s -dbpf("DSM:m0.HVEL", "1.0") #Sets max velocity to 1 mm/s -```` - -**6. Update the substitutions file** -Save and close the st.cmd file you've been configuring, then open the motor substitutions file (motor.substitutions.md90[.multiple]). -Ensure the values in the `pattern` block's `PORT` field match the names used in the std.cmd file. -Note that, despite this field being called "Port", they use the names of the MD90 Controller object defined above (by default, MD900, MD901, etc. -Do __not__ use the direct serial port names (by default, serial0, serial1, etc.). - - ------------------------------------------------- Compiling motorDSM ------------------------------------------------- @@ -179,6 +98,87 @@ In ``motorDSM/iocs/dsmIOC/configure``, copy ``EXAMPLE_RELEASE.local`` to ``RELEA $ make +------------------------------------------------- +Running an example IOC +------------------------------------------------- + +To run the example IOC, build the packages listed below, then: + +1. Follow the steps in "Configuring the system for attached controllers" below. + +2. Set the "EPICS_CA_ADDR_LIST" environment variable to include the IP address of the server. +If it's running on the same computer, you can use the loopback IP address. +`$ export EPICS_CA_ADDR_LIST='127.0.0.1'` + +3. In the ``iocs/dsmIOC/iocBoot/iocDsm`` directory, run +`$ ../../bin/linux-x86_64/dsm st.cmd.md90` +for one attached MD-90 controller, or +`$ ../../bin/linux-x86_64/dsm st.cmd.md90.multi` +for eight attached MD-90 controllers. Edit this file to use more than one unit; simply comment out the ones you don't need. + +4. Test using the `caget` and `caput` arguments as described in the "Example usage" section below. + + +------------------------------------------------- +Configuring the system for attached controllers +------------------------------------------------- + +The following steps must be used in either st.cmd.md90 (for a single unit) or in st.cmd.md90.multiple (for multiple units). +st.cmd.md90.multiple includes 8 motors predefined on /dev/ttyUSB0 through /dev/ttyUSB7. Comment out all motors you don't need. + +**1. Define a new serial port named "serial0" and set the location of the physical port** +`drvAsynSerialPortConfigure([serial name], [device location], 0, 0, 0)` +*e.g., `drvAsynSerialPortConfigure("serial0", "/dev/ttyUSB0", 0, 0, 0)`* + +**2. Configure the port** +- Baud = 115200 +- Bits = 8 +- Parity = none +- Stop bits = 1 +- Input end of message: "\r" +- Output end of message: "\r" +- Trace IO mask: 2 +``` +asynSetOption([serial name], 0, "baud", "115200") +asynSetOption([serial name], 0, "bits", "8") +asynSetOption([serial name], 0, "parity", "none") +asynSetOption([serial name], 0, "stop", "1") +asynOctetSetInputEos("serial0", 0, "\r") +asynOctetSetOutputEos("serial0", 0, "\r") +asynSetTraceIOMask("serial0", 0, 2) +``` +where `[serial name]` is the name you assigned in step 1, surrounded by double quotes. + +**3. Set initial parameters** +- Power supply enabled (`EPS` command) +- Deadband = 10 nm (`SDB 10` command) +``` +asynOctetConnect("initConnection", [serial name], 0) +asynOctetWrite("initConnection", "EPS") +asynOctetWrite("initConnection", "SDB 10") +asynOctetDisconnect('initConnection') +``` + +**4. Create MD90 Controller object** +`MD90CreateController([controller name], [serial name], 1, 100, 5000)` +where `[controller name]` is the name of the motor to assign. Convention is to use "MD90n", starting with n=0. + +**5. Intialize the IOC** +After the call to `iocInit` (still in the st.cmd.md90[.multiple] file), issue the following commands for each motor. The example below uses `DSM:m0` but it should be run for each line described in motor.substitutions.md90 (or motor.substitutions.md90.multiple). +```` +dbpf("DSM:m0.RTRY", "0") #sets retries to 0; this is automatic on the MD90 +dbpf("DSM:m0.TWV", "0.1") #Tweak distance +dbpf("DSM:m0.VMAX", "1.0") #Sets max velocity to 1 mm/s +dbpf("DSM:m0.HVEL", "1.0") #Sets max velocity to 1 mm/s +```` + +**6. Update the substitutions file** +Save and close the st.cmd file you've been configuring, then open the motor substitutions file (motor.substitutions.md90[.multiple]). +Ensure the values in the `pattern` block's `PORT` field match the names used in the std.cmd file. +Note that, despite this field being called "Port", they use the names of the MD90 Controller object defined above (by default, MD900, MD901, etc. +Do __not__ use the direct serial port names (by default, serial0, serial1, etc.). + + ------------------------------------------------- Example usage -------------------------------------------------