mirror of
https://github.com/Binary-Coalescence/motorDSM.git
synced 2025-08-04 21:55:40 -05:00
Reordered sections.
This commit is contained in:
162
README.md
162
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.
|
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
|
Compiling motorDSM
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
@@ -179,6 +98,87 @@ In ``motorDSM/iocs/dsmIOC/configure``, copy ``EXAMPLE_RELEASE.local`` to ``RELEA
|
|||||||
$ make
|
$ 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
|
Example usage
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
Reference in New Issue
Block a user