97 lines
4.1 KiB
Markdown
97 lines
4.1 KiB
Markdown
# turboPmac
|
|
|
|
## <span style="color:red">Please read the documentation of sinqMotor first: https://gitea.psi.ch/lin-epics-modules/sinqMotor</span>
|
|
|
|
## Overview
|
|
|
|
This is a driver for the Turbo PMAC motion controller with the SINQ
|
|
communication protocol. It is based on the sinqMotor shared library
|
|
(https://gitea.psi.ch/lin-epics-modules/sinqMotor). The header files contain
|
|
detailed documentation for all public functions. The headers themselves are
|
|
exported when building the library to allow other drivers to depend on this one.
|
|
|
|
## User guide
|
|
|
|
This driver is a standard sinqMotor-derived which however uses a special low
|
|
level IP Port driver (`pmacAsynIPPortConfigure`) instead of the standard
|
|
`drvAsynIPPortConfigure`. For the general configuration, please see
|
|
https://gitea.psi.ch/lin-epics-modules/sinqMotor/src/branch/main/README.md.
|
|
|
|
The folder "utils" contains utility scripts for working with pmac motor
|
|
controllers. To read their manual, run the scripts without any arguments.
|
|
- writeRead.py: Allows sending commands to and receiving commands from a pmac
|
|
controller over an ethernet connection.
|
|
- analyzeTcpDump.py: Parse the TCP communication between an IOC and a MCU and
|
|
format it into a dictionary. "demo.py" shows how this data can be easily
|
|
visualized for analysis.
|
|
|
|
### IOC startup script
|
|
|
|
turboPmac exports the following IOC shell functions:
|
|
- `turboPmacController`: Create a new controller object.
|
|
- `turboPmacAxis`: Create a new axis object.
|
|
|
|
The full turboPmacX.cmd file looks like this:
|
|
|
|
```bash
|
|
# Define the name of the controller and the corresponding port
|
|
epicsEnvSet("DRIVER_PORT","turboPmacX")
|
|
epicsEnvSet("IP_PORT","p$(DRIVER_PORT)")
|
|
|
|
# Create the TCP/IP socket used to talk with the controller. The socket can be
|
|
# adressed from within the IOC shell via the port name.
|
|
# We do not use the standard asyn port driver here, but a PMAC-specific one
|
|
# which enables the usage of StreamDevices for
|
|
# communicating with the controller directly.
|
|
pmacAsynIPPortConfigure("$(IP_PORT)","172.28.101.24:1025")
|
|
|
|
# Create the controller object with the defined name and connect it to the socket via the port name.
|
|
# The other parameters are as follows:
|
|
# 8: Maximum number of axes
|
|
# 0.05: Busy poll period in seconds
|
|
# 1: Idle poll period in seconds
|
|
# 1: Socket communication timeout in seconds
|
|
turboPmacController("$(DRIVER_PORT)", "$(IP_PORT)", 8, 0.05, 1, 1);
|
|
|
|
# Define some axes for the specified MCU at the given slot (1, 2 and 5). No slot may be used twice!
|
|
turboPmacAxis("$(DRIVER_PORT)",1);
|
|
turboPmacAxis("$(DRIVER_PORT)",2);
|
|
turboPmacAxis("$(DRIVER_PORT)",5);
|
|
|
|
# Set the number of subsequent timeouts
|
|
setMaxSubsequentTimeouts("$(DRIVER_PORT)", 20);
|
|
|
|
# Configure the timeout frequency watchdog: A maximum of 10 timeouts are allowed
|
|
# in 300 seconds before an alarm message is sent.
|
|
setThresholdComTimeout("$(DRIVER_PORT)", 300, 10);
|
|
|
|
# Parametrize the EPICS record database with the substitution file named after the MCU.
|
|
epicsEnvSet("SINQDBPATH","$(turboPmac_DB)/sinqMotor.db")
|
|
dbLoadTemplate("$(TOP)/$(DRIVER_PORT).substitutions", "INSTR=$(INSTR)$(DRIVER_PORT):,CONTROLLER=$(DRIVER_PORT)")
|
|
epicsEnvSet("SINQDBPATH","$(turboPmac_DB)/turboPmac.db")
|
|
dbLoadTemplate("$(TOP)/$(DRIVER_PORT).substitutions", "INSTR=$(INSTR)$(DRIVER_PORT):,CONTROLLER=$(DRIVER_PORT)")
|
|
dbLoadRecords("$(turboPmac_DB)/asynRecord.db","P=$(INSTR)$(DRIVER_PORT),PORT=$(IP_PORT)")
|
|
```
|
|
|
|
### Additional records
|
|
|
|
`turboPmac` provides a variety of additional records. See `db/turboPmac.db` for
|
|
the complete list and the documentation.
|
|
|
|
## Developer guide
|
|
|
|
### Versioning
|
|
|
|
Please see the documentation for the module sinqMotor:
|
|
https://gitea.psi.ch/lin-epics-modules/sinqMotor/src/branch/main/README.md.
|
|
|
|
### How to build it
|
|
|
|
This driver can be compiled and installed by running `make install` from the
|
|
same directory where the Makefile is located. However, since it uses the git
|
|
submodule sinqMotor, make sure that the correct version of the submodule
|
|
repository is checked out AND the change is commited (`git status` shows no
|
|
non-committed changes). Please see the section "Usage as static dependency" in
|
|
https://gitea.psi.ch/lin-epics-modules/sinqMotor/src/branch/main/README.md for
|
|
more details.
|