Merge branch 'motor/master' into HEAD

Merge the master branch,
commit 891a66e680,
into torsten/181203_1217_add_ACCS_field

Conflicts:
    motorApp/MotorSrc/motorRecord.dbd
This commit is contained in:
Torsten Bögershausen
2023-05-15 22:16:36 +02:00
848 changed files with 1419733 additions and 302134 deletions
Submodule
+1
Submodule .ci added at 5764601630
+3
View File
@@ -0,0 +1,3 @@
BASE=3.14
include modules
+3
View File
@@ -0,0 +1,3 @@
BASE=3.15
include modules
+3
View File
@@ -0,0 +1,3 @@
BASE=7.0
include modules
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env python
import os
import sys
import subprocess
from util import *
def get_submodule_releases():
#
releases = []
for root, dirs, files in os.walk('modules'):
for submodule in dirs:
if 'motor' in submodule:
release_path = "modules/{}/configure/RELEASE".format(submodule)
if os.path.exists(release_path):
releases.append(release_path)
return releases[:]
# Comment out SUPPORT from motor's RELEASE file
motor_release = "configure/RELEASE"
update_release_file(motor_release, "SUPPORT", '#')
print("{}Updated {}{}".format(ANSI_BLUE, motor_release, ANSI_RESET))
grep_release_file(motor_release, "#SUPPORT")
# Comment out SUPPORT from the driver module RELEASE files
releases = get_submodule_releases()
for release in releases:
updated = update_release_file(release, "SUPPORT", '#')
if updated:
print("{}Updated {}{}".format(ANSI_BLUE, release, ANSI_RESET))
grep_release_file(release, "#SUPPORT")
+9
View File
@@ -0,0 +1,9 @@
#!/usr/bin/env python
import os
import pprint
pprint.pprint(dict(os.environ), width = 1)
#!print("{}", breakmehere)
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env python
from __future__ import print_function
import logging
import fileinput
import os
# Setup ANSI Colors
ANSI_RED = "\033[31;1m"
ANSI_GREEN = "\033[32;1m"
ANSI_YELLOW = "\033[33;1m"
ANSI_BLUE = "\033[34;1m"
ANSI_MAGENTA = "\033[35;1m"
ANSI_CYAN = "\033[36;1m"
ANSI_RESET = "\033[0m"
ANSI_CLEAR = "\033[0K"
logger = logging.getLogger(__name__)
def create_file(filename):
dirname = os.path.dirname(filename)
print(dirname)
if not os.path.exists(dirname):
os.makedirs(dirname, 0o0755)
if not os.path.exists(filename):
fh = open(filename, 'w')
fh.close()
else:
logger.debug("{} already exists".format(filename))
# Update a definition in a release file that already exists
# Append a defintion to a release file that already exists
# Commented out a definition in a release file (location='#')
def update_release_file(filename, var, location):
updated_line = '{0}={1}'.format(var, location.replace('\\', '/'))
found = False
logger.debug("Opening '%s' for adding '%s'", filename, updated_line)
for line in fileinput.input(filename, inplace=1):
output_line = line.strip()
if '{0}='.format(var) in line:
logger.debug("Found '%s=' line, replacing", var)
found = True
if location != '#':
output_line = updated_line
else:
if output_line[0] != '#':
output_line = "#{}".format(output_line)
logger.debug("Writing line to '%s': '%s'", filename, output_line)
print(output_line)
fileinput.close()
if not found and location != '#':
fh = open(release_local, "a")
logger.debug("Adding new definition: '%s'", updated_line)
print(updated_line, file=fh)
fh.close()
return found
def grep_release_file(filename, var):
fh = open(filename, 'r')
for line in fh:
if '{0}='.format(var) in line:
print(line)
fh.close()
+7
View File
@@ -0,0 +1,7 @@
MODULES="sncseq ipac asyn autosave busy"
SNCSEQ=R2-2-9
IPAC=master
ASYN=R4-42
AUTOSAVE=R5-10-2
BUSY=R1-7-3
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env python
import os
import sys
import subprocess
from util import *
def get_submodule_releases():
#
releases = []
for root, dirs, files in os.walk('modules'):
for submodule in dirs:
if 'motor' in submodule:
release_path = "modules/{}/configure/RELEASE".format(submodule)
if os.path.exists(release_path):
releases.append(release_path)
return releases[:]
# Comment out SUPPORT from motor's RELEASE file
motor_release = "configure/RELEASE"
update_release_file(motor_release, "SUPPORT", '#')
print("{}Updated {}{}".format(ANSI_BLUE, motor_release, ANSI_RESET))
grep_release_file(motor_release, "#SUPPORT")
# Comment out SUPPORT from the driver module RELEASE files
releases = get_submodule_releases()
for release in releases:
updated = update_release_file(release, "SUPPORT", '#')
if updated:
print("{}Updated {}{}".format(ANSI_BLUE, release, ANSI_RESET))
grep_release_file(release, "#SUPPORT")
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env python
from __future__ import print_function
import logging
import fileinput
import os
# Setup ANSI Colors
ANSI_RED = "\033[31;1m"
ANSI_GREEN = "\033[32;1m"
ANSI_YELLOW = "\033[33;1m"
ANSI_BLUE = "\033[34;1m"
ANSI_MAGENTA = "\033[35;1m"
ANSI_CYAN = "\033[36;1m"
ANSI_RESET = "\033[0m"
ANSI_CLEAR = "\033[0K"
logger = logging.getLogger(__name__)
def create_file(filename):
dirname = os.path.dirname(filename)
print(dirname)
if not os.path.exists(dirname):
os.makedirs(dirname, 0755)
if not os.path.exists(filename):
fh = open(filename, 'w')
fh.close()
else:
logger.debug("{} already exists".format(filename))
# Update a definition in a release file that already exists
# Append a defintion to a release file that already exists
# Commented out a definition in a release file (location='#')
def update_release_file(filename, var, location):
updated_line = '{0}={1}'.format(var, location.replace('\\', '/'))
found = False
logger.debug("Opening '%s' for adding '%s'", filename, updated_line)
for line in fileinput.input(filename, inplace=1):
output_line = line.strip()
if '{0}='.format(var) in line:
logger.debug("Found '%s=' line, replacing", var)
found = True
if location != '#':
output_line = updated_line
else:
if output_line[0] != '#':
output_line = "#{}".format(output_line)
logger.debug("Writing line to '%s': '%s'", filename, output_line)
print(output_line)
fileinput.close()
if not found and location != '#':
fh = open(release_local, "a")
logger.debug("Adding new definition: '%s'", updated_line)
print(updated_line, file=fh)
fh.close()
return found
def grep_release_file(filename, var):
fh = open(filename, 'r')
for line in fh:
if '{0}='.format(var) in line:
print(line)
fh.close()
-164
View File
@@ -1,164 +0,0 @@
#!/bin/sh
set -e -x
SUPPORT=$HOME/.cache/support
install -d $SUPPORT
# Conditionally build IPAC
if [ -n "$IPAC" ]; then
IPAC_PATH=$SUPPORT/ipac
else
IPAC_PATH=
fi
RELEASE_PATH=$TRAVIS_BUILD_DIR/configure/RELEASE
EPICS_BASE=$SUPPORT/epics-base
cat << EOF > $RELEASE_PATH
IPAC=$IPAC_PATH
SNCSEQ=$SUPPORT/seq
ASYN=$SUPPORT/asyn
EPICS_BASE=$SUPPORT/epics-base
EOF
# use default selection for MSI
sed -i -e '/MSI/d' configure/CONFIG_SITE
if [ ! -e "$EPICS_BASE/built" ]
then
git clone --depth 10 --branch $BASE https://github.com/epics-base/epics-base.git $EPICS_BASE
EPICS_HOST_ARCH=`sh $EPICS_BASE/startup/EpicsHostArch`
case "$STATIC" in
static)
cat << EOF >> "$EPICS_BASE/configure/CONFIG_SITE"
SHARED_LIBRARIES=NO
STATIC_BUILD=YES
EOF
;;
*) ;;
esac
case "$CMPLR" in
clang)
echo "Host compiler is clang"
cat << EOF >> $EPICS_BASE/configure/os/CONFIG_SITE.Common.$EPICS_HOST_ARCH
GNU = NO
CMPLR_CLASS = clang
CC = clang
CCC = clang++
EOF
;;
*) echo "Host compiler is default";;
esac
# requires wine and g++-mingw-w64-i686
if [ "$WINE" = "32" ]
then
echo "Cross mingw32"
sed -i -e '/CMPLR_PREFIX/d' $EPICS_BASE/configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
cat << EOF >> $EPICS_BASE/configure/os/CONFIG_SITE.linux-x86.win32-x86-mingw
CMPLR_PREFIX=i686-w64-mingw32-
EOF
cat << EOF >> $EPICS_BASE/configure/CONFIG_SITE
CROSS_COMPILER_TARGET_ARCHS+=win32-x86-mingw
EOF
fi
# set RTEMS to eg. "4.9" or "4.10"
if [ -n "$RTEMS" ]
then
echo "Cross RTEMS${RTEMS} for pc386"
install -d /home/travis/.cache
curl -L "https://github.com/mdavidsaver/rsb/releases/download/travis-20160306-2/rtems${RTEMS}-i386-trusty-20190306-2.tar.gz" \
| tar -C /home/travis/.cache -xj
sed -i -e '/^RTEMS_VERSION/d' -e '/^RTEMS_BASE/d' $EPICS_BASE/configure/os/CONFIG_SITE.Common.RTEMS
cat << EOF >> $EPICS_BASE/configure/os/CONFIG_SITE.Common.RTEMS
RTEMS_VERSION=$RTEMS
RTEMS_BASE=/home/travis/.cache/rtems${RTEMS}-i386
EOF
cat << EOF >> $EPICS_BASE/configure/CONFIG_SITE
CROSS_COMPILER_TARGET_ARCHS+=RTEMS-pc386
EOF
fi
make -C "$EPICS_BASE" -j2
# get MSI for 3.14
case "$BASE" in
3.14*)
echo "Build MSI"
install -d "$HOME/msi/extensions/src"
curl https://epics.anl.gov/download/extensions/extensionsTop_20120904.tar.gz | tar -C "$HOME/msi" -xvz
curl https://epics.anl.gov/download/extensions/msi1-7.tar.gz | tar -C "$HOME/msi/extensions/src" -xvz
mv "$HOME/msi/extensions/src/msi1-7" "$HOME/msi/extensions/src/msi"
cat << EOF > "$HOME/msi/extensions/configure/RELEASE"
EPICS_BASE=$EPICS_BASE
EPICS_EXTENSIONS=\$(TOP)
EOF
make -C "$HOME/msi/extensions"
cp "$HOME/msi/extensions/bin/$EPICS_HOST_ARCH/msi" "$EPICS_BASE/bin/$EPICS_HOST_ARCH/"
echo 'MSI:=$(EPICS_BASE)/bin/$(EPICS_HOST_ARCH)/msi' >> "$EPICS_BASE/configure/CONFIG_SITE"
cat <<EOF >> configure/CONFIG_SITE
MSI = \$(EPICS_BASE)/bin/\$(EPICS_HOST_ARCH)/msi
EOF
;;
*) echo "Use MSI from Base"
;;
esac
touch $EPICS_BASE/built
else
echo "Using cached epics-base!"
fi
# IPAC
if [ -n "$IPAC" ]; then
if [ ! -e "$SUPPORT/ipac/built" ]; then
echo "Build ipac"
install -d $SUPPORT/ipac
git clone --depth 10 --branch $IPAC https://github.com/epics-modules/ipac.git $SUPPORT/ipac
cat << EOF > $SUPPORT/ipac/configure/RELEASE
EPICS_BASE=$SUPPORT/epics-base
EOF
make -C $SUPPORT/ipac
touch $SUPPORT/ipac/built
else
echo "Using cached ipac"
fi
else
echo "Skipping ipac"
fi
# sequencer
if [ ! -e "$SUPPORT/seq/built" ]; then
echo "Build sequencer"
install -d $SUPPORT/seq
curl -L "http://www-csr.bessy.de/control/SoftDist/sequencer/releases/seq-${SEQ}.tar.gz" | tar -C $SUPPORT/seq -xvz --strip-components=1
cp $RELEASE_PATH $SUPPORT/seq/configure/RELEASE
make -C $SUPPORT/seq
touch $SUPPORT/seq/built
else
echo "Using cached seq"
fi
# asyn
if [ ! -e "$SUPPORT/asyn/built" ]; then
echo "Build asyn"
install -d $SUPPORT/asyn
curl -L "https://epics.anl.gov/download/modules/asyn${ASYN}.tar.gz" | tar -C $SUPPORT/asyn -xvz --strip-components=1
cp $RELEASE_PATH $SUPPORT/asyn/configure/RELEASE
make -C "$SUPPORT/asyn" -j2
touch $SUPPORT/asyn/built
else
echo "Using cached asyn"
fi
+211
View File
@@ -0,0 +1,211 @@
# .github/workflows/ci-scripts-build.yml for use with EPICS Base ci-scripts
# (see: https://github.com/epics-base/ci-scripts)
# This is YAML - indentation levels are crucial
# Set the 'name:' properties to values that work for you (MYMODULE)
name: "GHA full build"
# Only run manually
on:
workflow_dispatch
env:
SETUP_PATH: .ci-local:.ci
# For the sequencer on Linux/Windows/MacOS
APT: re2c
CHOCO: re2c
BREW: re2c
jobs:
build-base:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
# Set environment variables from matrix parameters
env:
CMP: ${{ matrix.cmp }}
BCFG: ${{ matrix.configuration }}
BASE: ${{ matrix.base }}
WINE: ${{ matrix.wine }}
RTEMS: ${{ matrix.rtems }}
RTEMS_TARGET: ${{ matrix.rtems_target }}
EXTRA: ${{ matrix.extra }}
TEST: ${{ matrix.test }}
SET: ${{ matrix.set }}
strategy:
fail-fast: false
matrix:
# Job names also name artifacts, character limitations apply
include:
- os: ubuntu-20.04
cmp: gcc
configuration: default
wine: "64"
base: "7.0"
set: modules
name: "Ub-20 gcc-9 + MinGW"
- os: ubuntu-20.04
cmp: gcc
configuration: static
wine: "64"
base: "7.0"
set: modules
name: "Ub-20 gcc-9 + MinGW, static"
- os: ubuntu-20.04
cmp: gcc
configuration: static
extra: "CMD_CXXFLAGS=-std=c++11"
base: "7.0"
set: modules
name: "Ub-20 gcc-9 C++11, static"
- os: ubuntu-20.04
cmp: clang
configuration: default
extra: "CMD_CXXFLAGS=-std=c++11"
base: "7.0"
set: modules
name: "Ub-20 clang-10 C++11"
### fails building autosave
#!- os: ubuntu-20.04
#! cmp: gcc
#! configuration: default
#! rtems: "4.10"
#! base: "7.0"
#! set: modules
#! name: "Ub-20 gcc-9 + RT-4.10"
- os: ubuntu-20.04
cmp: gcc
configuration: default
rtems: "4.9"
base: "7.0"
set: modules
name: "Ub-20 gcc-9 + RT-4.9"
### fails building asyn
#!- os: ubuntu-20.04
#! cmp: gcc
#! configuration: default
#! rtems: "5"
#! rtems_target: RTEMS-pc686-qemu
#! base: "7.0"
#! set: modules
#! name: "Ub-20 gcc-9 + RT-5.1 pc686"
### fails building autosave
#!- os: ubuntu-20.04
#! cmp: gcc
#! configuration: default
#! rtems: "5"
#! rtems_target: RTEMS-beatnik
#! test: NO
#! base: "7.0"
#! set: modules
#! name: "Ub-20 gcc-9 + RT-5.1 beatnik"
- os: ubuntu-18.04
cmp: gcc
configuration: default
base: "7.0"
set: modules
name: "Ub-18 gcc-7"
### g++-8 not found
#!- os: ubuntu-18.04
#! cmp: gcc-8
#! utoolchain: true
#! configuration: default
#! base: "7.0"
#! set: modules
#! name: "Ub-18 gcc-8"
#!- os: ubuntu-20.04
#! cmp: gcc-8
#! utoolchain: true
#! configuration: default
#! base: "7.0"
#! set: modules
#! name: "Ub-20 gcc-8"
- os: ubuntu-20.04
cmp: clang
configuration: default
base: "7.0"
set: modules
name: "Ub-20 clang-10"
- os: macos-latest
cmp: clang
configuration: default
base: "7.0"
set: modules
name: "MacOS clang-12"
- os: windows-2019
cmp: gcc
configuration: default
base: "7.0"
set: modules
name: "Win2019 MinGW"
- os: windows-2019
cmp: gcc
configuration: static
base: "7.0"
set: modules
name: "Win2019 MinGW, static"
- os: windows-2019
cmp: vs2019
configuration: default
base: "7.0"
set: modules
name: "Win2019 MSC-19"
- os: windows-2019
cmp: vs2019
configuration: static
base: "7.0"
set: modules
name: "Win2019 MSC-19, static"
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Automatic core dumper analysis
uses: mdavidsaver/ci-core-dumper@master
- name: "apt-get install"
run: |
sudo apt-get update
sudo apt-get -y install qemu-system-x86 g++-mingw-w64-x86-64 gdb
if: runner.os == 'Linux'
- name: "apt-get install ${{ matrix.cmp }}"
run: |
sudo apt-get -y install software-properties-common
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get -y install ${{ matrix.cmp }}
if: matrix.utoolchain
- name: Sanity Check
run: python .ci-local/github-actions/sanity-check.py
- name: Prepare and compile dependencies
run: python .ci/cue.py prepare
- name: Patch main module
run: python .ci-local/github-actions/post-prepare.py
- name: Build main module
run: python .ci/cue.py build
- name: Run main module tests
run: python .ci/cue.py test
- name: Upload tapfiles Artifact
uses: actions/upload-artifact@v2
with:
name: tapfiles ${{ matrix.name }}
path: '**/O.*/*.tap'
- name: Collect and show test results
run: python .ci/cue.py test-results
+104
View File
@@ -0,0 +1,104 @@
# .github/workflows/ci-scripts-build.yml for use with EPICS Base ci-scripts
# (see: https://github.com/epics-base/ci-scripts)
# This is YAML - indentation levels are crucial
# Set the 'name:' properties to values that work for you (MYMODULE)
name: "GHA build"
# Trigger on pushes to the master branch and PRs
on:
push:
paths-ignore:
- 'documentation/*'
- '**/*.html'
- '**/*.md'
- '.github/workflows/ci-scripts-build-full.yml'
branches:
- master
pull_request:
env:
SETUP_PATH: .ci-local:.ci
# For the sequencer on Linux/Windows/MacOS
APT: re2c
CHOCO: re2c
BREW: re2c
jobs:
build-base:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
# Set environment variables from matrix parameters
env:
CMP: ${{ matrix.cmp }}
BCFG: ${{ matrix.configuration }}
BASE: ${{ matrix.base }}
WINE: ${{ matrix.wine }}
RTEMS: ${{ matrix.rtems }}
RTEMS_TARGET: ${{ matrix.rtems_target }}
EXTRA: ${{ matrix.extra }}
TEST: ${{ matrix.test }}
SET: ${{ matrix.set }}
strategy:
fail-fast: false
matrix:
# Job names also name artifacts, character limitations apply
include:
- os: ubuntu-20.04
cmp: gcc
configuration: default
base: "7.0"
set: modules
name: "7.0 Ub-20 gcc-9"
- os: macos-latest
cmp: clang
configuration: default
base: "3.15"
set: modules
name: "3.15 MacOS clang-12"
- os: windows-2019
cmp: vs2019
configuration: static
base: "3.15"
set: modules
name: "3.15 Win VS2019, static"
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Automatic core dumper analysis
uses: mdavidsaver/ci-core-dumper@master
- name: "apt-get install"
run: |
sudo apt-get update
sudo apt-get -y install qemu-system-x86 g++-mingw-w64-x86-64 gdb
if: runner.os == 'Linux'
- name: "apt-get install ${{ matrix.cmp }}"
run: |
sudo apt-get -y install software-properties-common
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get -y install ${{ matrix.cmp }}
if: matrix.utoolchain
- name: Sanity Check
run: python .ci-local/github-actions/sanity-check.py
- name: Prepare and compile dependencies
run: python .ci/cue.py prepare
- name: Patch main module
run: python .ci-local/github-actions/post-prepare.py
- name: Build main module
run: python .ci/cue.py build
- name: Run main module tests
run: python .ci/cue.py test
- name: Upload tapfiles Artifact
uses: actions/upload-artifact@v2
with:
name: tapfiles ${{ matrix.name }}
path: '**/O.*/*.tap'
- name: Collect and show test results
run: python .ci/cue.py test-results
+2 -1
View File
@@ -3,7 +3,7 @@ O.*
*.swp
*BAK.adl
bin/
db/
/db/
dbd/
html/
include/
@@ -15,3 +15,4 @@ dllPath.bat
auto_settings.sav*
auto_positions.sav*
.ccfxprepdir/
*.local
+99
View File
@@ -0,0 +1,99 @@
[submodule "modules/motorNewport"]
path = modules/motorNewport
url = https://github.com/epics-motor/motorNewport.git
[submodule "modules/motorOms"]
path = modules/motorOms
url = https://github.com/epics-motor/motorOms.git
[submodule "modules/motorAcsTech80"]
path = modules/motorAcsTech80
url = https://github.com/epics-motor/motorAcsTech80.git
[submodule "modules/motorAttocube"]
path = modules/motorAttocube
url = https://github.com/epics-motor/motorAttocube.git
[submodule "modules/motorDeltaTau"]
path = modules/motorDeltaTau
url = https://github.com/epics-motor/motorDeltaTau.git
[submodule "modules/motorFaulhaber"]
path = modules/motorFaulhaber
url = https://github.com/epics-motor/motorFaulhaber.git
[submodule "modules/motorHytec"]
path = modules/motorHytec
url = https://github.com/epics-motor/motorHytec.git
[submodule "modules/motorKohzu"]
path = modules/motorKohzu
url = https://github.com/epics-motor/motorKohzu.git
[submodule "modules/motorMclennan"]
path = modules/motorMclennan
url = https://github.com/epics-motor/motorMclennan.git
[submodule "modules/motorMicroMo"]
path = modules/motorMicroMo
url = https://github.com/epics-motor/motorMicroMo.git
[submodule "modules/motorOriel"]
path = modules/motorOriel
url = https://github.com/epics-motor/motorOriel.git
[submodule "modules/motorMicronix"]
path = modules/motorMicronix
url = https://github.com/epics-motor/motorMicronix.git
[submodule "modules/motorPiJena"]
path = modules/motorPiJena
url = https://github.com/epics-motor/motorPiJena.git
[submodule "modules/motorSmartMotor"]
path = modules/motorSmartMotor
url = https://github.com/epics-motor/motorSmartMotor.git
[submodule "modules/motorThorLabs"]
path = modules/motorThorLabs
url = https://github.com/epics-motor/motorThorLabs.git
[submodule "modules/motorAcs"]
path = modules/motorAcs
url = https://github.com/epics-motor/motorAcs.git
[submodule "modules/motorMicos"]
path = modules/motorMicos
url = https://github.com/epics-motor/motorMicos.git
[submodule "modules/motorNewFocus"]
path = modules/motorNewFocus
url = https://github.com/epics-motor/motorNewFocus.git
[submodule "modules/motorIms"]
path = modules/motorIms
url = https://github.com/epics-motor/motorIms.git
[submodule "modules/motorOmsAsyn"]
path = modules/motorOmsAsyn
url = https://github.com/epics-motor/motorOmsAsyn.git
[submodule "modules/motorPhytron"]
path = modules/motorPhytron
url = https://github.com/epics-motor/motorPhytron.git
[submodule "modules/motorAerotech"]
path = modules/motorAerotech
url = https://github.com/epics-motor/motorAerotech.git
[submodule "modules/motorScriptMotor"]
path = modules/motorScriptMotor
url = https://github.com/epics-motor/motorScriptMotor.git
[submodule "modules/motorNPoint"]
path = modules/motorNPoint
url = https://github.com/epics-motor/motorNPoint.git
[submodule "modules/motorPI"]
path = modules/motorPI
url = https://github.com/epics-motor/motorPI.git
[submodule "modules/motorAMCI"]
path = modules/motorAMCI
url = https://github.com/epics-motor/motorAMCI.git
[submodule "modules/motorPIGCS2"]
path = modules/motorPIGCS2
url = https://github.com/epics-motor/motorPIGCS2.git
[submodule "modules/motorSmarAct"]
path = modules/motorSmarAct
url = https://github.com/epics-motor/motorSmarAct.git
[submodule "modules/motorMotorSim"]
path = modules/motorMotorSim
url = https://github.com/epics-motor/motorMotorSim.git
[submodule "modules/motorMXmotor"]
path = modules/motorMXmotor
url = https://github.com/epics-motor/motorMXmotor.git
[submodule "modules/motorParker"]
path = modules/motorParker
url = https://github.com/epics-motor/motorParker.git
[submodule ".ci"]
path = .ci
url = https://github.com/epics-base/ci-scripts
[submodule "modules/motorAcsMotion"]
path = modules/motorAcsMotion
url = https://github.com/epics-motor/motorAcsMotion.git
+132 -16
View File
@@ -1,27 +1,143 @@
sudo: false
dist: trusty
language: c
compiler:
- gcc
# .travis.xml for use with EPICS Base ci-scripts
# (see: https://github.com/epics-base/ci-scripts)
language: cpp
compiler: gcc
dist: xenial
cache:
directories:
- $HOME/.cache
- $HOME/.cache
env:
global:
- SETUP_PATH=.ci-local:.ci
# for the sequencer on Windows
- CHOCO=re2c
addons:
apt:
packages:
# for all EPICS builds
- libreadline6-dev
- libncurses5-dev
- perl
# for clang compiler
- clang
# for mingw builds (32bit and 64bit)
- g++-mingw-w64-i686
- g++-mingw-w64-x86-64
# for RTEMS cross builds
- qemu-system-x86
homebrew:
packages:
# for the sequencer
- re2c
env:
- BASE=3.14 STATIC=shared SEQ=2.2.4 ASYN=4-31 IPAC=2.14
- BASE=3.14 STATIC=static SEQ=2.2.4 ASYN=4-31 IPAC=2.14
- BASE=R3.15.5 STATIC=shared SEQ=2.2.4 ASYN=4-31 IPAC=2.14
- BASE=R3.15.5 STATIC=static SEQ=2.2.4 ASYN=4-31 IPAC=2.14
- BASE=3.16 STATIC=shared RTEMS=4.10 SEQ=2.2.4 ASYN=4-31 IPAC=2.14
- BASE=3.16 STATIC=shared CMPLR=clang WINE=32 SEQ=2.2.4 ASYN=4-31 IPAC=
- BASE=3.16 STATIC=static WINE=32 SEQ=2.2.4 ASYN=4-31 IPAC=
install: ./.ci/travis-prepare.sh
script: make
update: true
install:
- python .ci/cue.py prepare
# ugly hacks go here:
- python .ci-local/travis/post-prepare.py
script:
- python .ci/cue.py build
- python .ci/cue.py test
- python .ci/cue.py test-results
# If you need to do more during install and build,
# add a local directory to your module and do e.g.
# - ./.ci-local/travis/install-extras.sh
# Define build jobs
# Well-known variables to use
# SET source setup file
# EXTRA content will be added to make command line
# STATIC set to YES for static build (default: NO)
# TEST set to NO to skip running the tests (default: YES)
# VV set to make build scripts verbose (default: unset)
# Usually from setup files, but may be specified or overridden
# on a job line
# MODULES list of dependency modules
# BASE branch or release tag name of the EPICS Base to use
# <MODULE> branch or release tag for a specific module
# ... see README for setup file syntax description
jobs:
include:
# Older Base releases
- env: SET=base3-14
- env: SET=base3-14 BCFG=static
- env: SET=base3-15
- env: SET=base3-15 BCFG=static
# Default gcc, static build
- env: SET=base7-0
- env: SET=base7-0 BCFG=static
# Default clang build
- env: SET=base7-0
compiler: clang
- env: SET=base7-0 EXTRA="CMD_CXXFLAGS=-std=c++11"
compiler: clang
# Trusty: compiler versions very close to RHEL 7
- env: SET=base7-0
dist: trusty
- env: SET=base7-0 BCFG=debug
dist: trusty
# Other gcc versions (added as an extra package)
- env: SET=base7-0
compiler: gcc-6
addons: { apt: { packages: ["g++-6"], sources: ["ubuntu-toolchain-r-test"] } }
- env: SET=base7-0
compiler: gcc-7
addons: { apt: { packages: ["g++-7"], sources: ["ubuntu-toolchain-r-test"] } }
# Cross-compilations to Windows using MinGW and WINE
- env: SET=base7-0 WINE=32 TEST=NO BCFG=static
- env: SET=base7-0 WINE=64 TEST=NO
# Windows builds
- env: SET=base7-0
os: windows
compiler: vs2017
- env: SET=base7-0 BCFG=static
os: windows
compiler: vs2017
- env: SET=base7-0 BCFG=debug
os: windows
compiler: vs2017
# MacOS build
- env: SET=base7-0
os: osx
compiler: clang
# Cross-compilation to RTEMS
- env: SET=base7-0 RTEMS=4.9
- env: SET=base7-0 RTEMS=4.10
+2 -10
View File
@@ -7,15 +7,7 @@ include $(TOP)/configure/CONFIG
DIRS += configure motorApp
motorApp_DEPEND_DIRS = configure
# To build motor examples;
# 1st - uncomment lines below.
# 2nd - uncomment required support module lines at the bottom of
# <motor>/configure/RELEASE.
# 3rd - make clean uninstall
# 4th - make
#!DIRS += motorExApp iocBoot
#!motorExApp_DEPEND_DIRS = motorApp
#!iocBoot_DEPEND_DIRS = motorExApp
DIRS += modules
modules_DEPEND_DIRS = motorApp
include $(TOP)/configure/RULES_TOP
+39 -4
View File
@@ -1,12 +1,48 @@
# motor
APS BCDA synApps module: motor
[![Build Status](https://github.com/epics-modules/motor/actions/workflows/ci-scripts-build.yml/badge.svg)](https://github.com/epics-modules/motor/actions/workflows/ci-scripts-build.yml)
<!--[![Build Status](https://travis-ci.org/epics-modules/motor.png)](https://travis-ci.org/epics-modules/motor)-->
[![Build Status](https://travis-ci.org/epics-modules/motor.png)](https://travis-ci.org/epics-modules/motor)
This module contains motor support for the Experimental Physics and Industrial Control System (EPICS).
**Note**: Current discussion on future of the *motor* module repository: https://github.com/epics-modules/motor/issues/55
The core motor functionality resides in this respository. Starting with R7-0 the drivers have been moved from motor to standalone github repositories, which have been added to motor as submodules. The driver repositories can be found here: https://github.com/epics-motor
## Getting started
### Updating clones created before 2019-04-02
Use the following procedure to update clones that were created before the beginning of the motor split:
```bash
$ cd motor
$ make distclean
$ git fetch origin
$ git status
<behind by many commits and can be fast-forwarded>
$ git stash
$ git rebase origin/master
$ git stash apply
$ git submodule init
$ git submodule update
```
Failure to 'make distclean' before rebasing will result in many driver source directories in motorApp with "O.*" directories that need to be removed manually.
### Cloning motor with support for all motor controllers
The following command results in a motor directory that contains all of the driver submodules:
```bash
$ git clone --recursive https://github.com/epics-modules/motor.git
```
### Cloning motor with support for a single motor controller
The following procedure allows only required drivers to be built, which can significantly reduce build times:
```bash
$ git clone https://github.com/epics-modules/motor.git
$ cd motor
$ git submodule init
$ git submodule update modules/motorMotorSim
```
## Additional Info
For more information, see:
* [main page](https://epics-modules.github.io/motor)
* [release notes](https://github.com/epics-modules/motor/blob/master/docs/RELEASE.md)
* [motor wiki](https://github.com/epics-modules/motor/wiki)
* http://www.aps.anl.gov/bcda/synApps
* [HTML documentation](https://github.com/epics-modules/motor/blob/master/docs/README.md)
@@ -14,4 +50,3 @@ For more information, see:
[Report an issue with Motor](https://github.com/epics-modules/motor/issues/new?title=%20ISSUE%20NAME%20HERE&body=**Describe%20the%20issue**%0A%0A**Steps%20to%20reproduce**%0A1.%20Step%20one%0A2.%20Step%20two%0A3.%20Step%20three%0A%0A**Expected%20behaivour**%0A%0A**Actual%20behaviour**%0A%0A**Build%20Environment**%0AArchitecture:%0AEpics%20Base%20Version:%0ADependent%20Module%20Versions:&labels=bug)
[Request a feature](https://github.com/epics-modules/motor/issues/new?title=%20FEATURE%20SHORT%20DESCRIPTION&body=**Feature%20Long%20Description**%0A%0A**Why%20should%20this%20be%20added?**%0A&labels=enhancement)
converted from APS SVN repository: Fri Oct 16 12:31:41 CDT 2015
+21 -9
View File
@@ -13,21 +13,33 @@
# Normally CHECK_RELEASE should be set to YES.
# Set CHECK_RELEASE to NO to disable checking completely.
# Set CHECK_RELEASE to WARN to perform consistency checking but
# continue building anyway if conflicts are found.
# continue building even if conflicts are found.
CHECK_RELEASE = YES
# Set this when you only want to compile this application
# for a subset of the cross-compiled target architectures
# that Base is built for.
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32
# To install files into a location other than $(TOP) define
# INSTALL_LOCATION here.
#INSTALL_LOCATION=</path/name/to/install/top>
#INSTALL_LOCATION=</absolute/path/to/install/top>
# Set this when the IOC and build host use different paths
# to the install location. This may be needed to boot from
# a Microsoft FTP server say, or on some NFS configurations.
#IOCS_APPL_TOP = </IOC's/absolute/path/to/install/top>
# For application debugging purposes, override the HOST_OPT and/
# or CROSS_OPT settings from base/configure/CONFIG_SITE
#HOST_OPT = NO
#CROSS_OPT = NO
# Don't build iocs in motor/modules/motorVendor/iocs by default
BUILD_IOCS = NO
# Overrides for the settings above may appear in a CONFIG_SITE.local file
-include $(or $(MOTOR),$(TOP))/configure/CONFIG_SITE.local
-include $(SUPPORT)/configure/CONFIG_SITE
# Set this when your IOC and the host use different paths
# to access the application. This will be needed to boot
# from a Microsoft FTP server or with some NFS mounts.
# You must rebuild in the iocBoot directory for this to
# take effect.
#IOCS_APPL_TOP = </IOC/path/to/application/top>
+2
View File
@@ -0,0 +1,2 @@
# Uncomment the following line to build iocs in motor/modules/motorVendor/iocs
BUILD_IOCS = YES
+26 -22
View File
@@ -9,37 +9,41 @@
#
# Add your declarations here
SUPPORT=
-include $(TOP)/../configure/SUPPORT.$(EPICS_HOST_ARCH)
SUPPORT=/path/to/support
# If any motor controller communication mechanism besides the VME backplane is
# required, then ASYN must be defined.
# Recommended ASYN release: R4-23
ASYN=$(SUPPORT)/asyn/R4-23
# If any motor controller communication mechanism besides
# the VME backplane is required, then ASYN must be defined.
# Recommended ASYN release: R4-35
ASYN=$(SUPPORT)/asyn-R4-35
# Need the sequencer and the busy record for the MM4005 and XPS trajectory scanning
# Recommended SNCSEQ release: R2.1.16
SNCSEQ=$(SUPPORT)/seq/seq-2-1-16
# Recommended BUSY release: R1-6
BUSY=$(SUPPORT)/busy/R1-6
# Need the sequencer and the busy record for trajectory scanning
# Recommended SNCSEQ release: R2.2.6
SNCSEQ=$(SUPPORT)/seq-2-2-6
# Recommended BUSY release: R1-7-1
BUSY=$(SUPPORT)/busy-R1-7-1
# Recommended EPICS release: R3.14.12.4
EPICS_BASE=
-include $(TOP)/../configure/EPICS_BASE.$(EPICS_HOST_ARCH)
# Recommended EPICS release: R3.15.6
EPICS_BASE=/path/to/base
# The following must be defined for the MXmotor device driver.
# The following must be defined for motorMXmotor
#!MX=$(SUPPORT)/mx/mx
# The following support modules are required for the Hytec driver and for the examples in
# <motor>/motorExApp. To build examples, the top Makefile,
# <motor>/Makefile must also be edited.
# IPAC is required to build motorHytec
# Recommended IPAC release: R2-15
IPAC=$(SUPPORT)/ipac-R2-15
# Recommended IPAC release: R2-12
IPAC=$(SUPPORT)/ipac/R2-12
# Script module needed to build motorScriptMotor
#!LUA=$(SUPPORT)/lua-R1-3
# Script module needed to build ScriptMotorController
#!LUA=$(SUPPORT)/lua
# Modbus module needed to build motorAMCI's example IOC
# Required MODBUS release: R2-11 or later
#!MODBUS=$(SUPPORT)/modbus-R2-11
# The following is only needed for the motor examples in iocBoot.
#!MOTOR=$(TOP)
# These lines allow developers to override these RELEASE settings
# without having to modify this file directly.
-include $(TOP)/../RELEASE.local
-include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local
-include $(TOP)/configure/RELEASE.local
+3
View File
@@ -1,3 +1,6 @@
#RULES_TOP
ifeq ($(INSTALL_LOCATION),$(MOTOR))
INSTALL_CONFIG =
endif
include $(CONFIG)/RULES_TOP
-97
View File
@@ -1,97 +0,0 @@
EnsemblePSOFly.db supports fly scans of a single motor controlled by an Aerotech
Ensemble controller. It uses the motor record to move the motor, and read
position, and to read control fields such as offset and direction. It uses an
asyn port to talk to the controller about capabilities that the motor record
doesn't support, such as the control of PSO (position synchronized output)
pulses.
Commands to tell the Aerotech Ensemble to output pulses every scanDelta units,
beginning at startPos and ending at scan_end. Note that the Ensemble fires
pulses at positions n*delta from the position at which the PSOCONTROL X ARM
command was invoked. Thus, the pre-fly ("taxi") position of the motor must be
an integer multiple of scanDelta.
{start} = startPos - scanDelta
{end} = scan_end + scanDelta/2
PSOCONTROL X RESET ' Reset PSO.
PSOPULSE X TIME 50,25 ' Define a pulse of width
' 50 usec, with 25 usec
' on time.
PSOOUTPUT X PULSE WINDOW MASK ' Set PSO output type to PULSE.
' PSO pulses are masked by
' the window.
PSOTRACK X INPUT 1 ' Track primary encoder for
' axis.
PSODISTANCE X FIXED scanDelta UNITS ' Set the incremental firing
' distance ((units).
PSOWINDOW X 1 INPUT 1 ' Track primary encoder for
' Window 1.
PSOWINDOW X 1 RANGE {start},{end} UNITS ' Set the fixed range (in units) for
' the window.
' Note that the following command establishes the origin for
' distance-based output pulses as the motor's current position.
' (i.e., it simply clears a counter that will be clocked by encoder pulses.)
PSOCONTROL X ARM ' Enable PSO and start tracking.
<user moves the motor from start to end>
PSOWINDOW X 1 OFF ' Turn off window.
PSOCONTROL X OFF ' Stop PSO tracking.
------------------------------------------------------------------------------
Start, end positions, etc.
Before the motor's fly motion begins, the motor is moved to the "taxi" position,
which is chosen so that the motor can accelerate to constant speed before data
acquisition begins. For constant acceleration from a possibly nonzero base
speed, the acceleration distance is given by
accelDist = accelTime * (baseSpeed + slewSpeed)/2
In EPICS motorRecord PVs, this is
accelDist = motor.ACCL * (motor.VBAS + M.VELO)/2
Data acquisition occurs at N locations during the motor motion, where
N = (endPos - startPos) / scanDelta
The locations are given by
dataStart + i*scanDelta*dir
where i is an integer in the range [0, N-1], and
dir = (endPos-startPos)>0 ? 1 : -1
Because of the way the Ensemble motor controller's position-synchronized output
is implemented, dataStart is determined by the taxi position and the
pulse-window open and close positions, such that the taxi position must be an
integer multiple, M, of scanDelta away from dataStart.
The taxi position must also be at least accelDist away from dataStart, giving a
lower limit on M:
taxi = dataStart - M*scanDelta*dir <= dataStart - accelDist*dir
M >= accelDist/scanDelta
M = ceil(accelDist/scanDelta)
-------------------------------------------------------------------------------
The Ensemble PSO output is RS422, via an interface cable that ends with a female
DB9 connector with an entirely custom pinout that includes 5V power. If
conversion to TTL is needed, the following chips and boards seem useful:
Analog Devices ADM483E chip
Linear Technology LTC485 chip
Microbotics SLC10422-TTL board
-------------------------------------------------------------------------------
+323
View File
@@ -0,0 +1,323 @@
# Motor Releases
## __R7-3 (2023-05-XX)__
R7-3 is a release based on the master branch.
### Changes since R7-2-2
#### New features
* Added motorAcsMotion as a submodule
* TBD
#### Modifications to existing features
* TBD
#### Bug fixes
* TBD
#### Driver submodules (and noteworthy changes)
All driver modules now use Github Actions for CI builds.
| Module | Release | Changes |
| ---------------- | ------- | ------- |
| **motorAcs** | [R1-1-1](https://github.com/epics-motor/motorAcs/releases/tag/R1-1-1) | |
| **motorAcsMotion** | [R2-1](https://github.com/epics-motor/motorAcsMotion/releases/tag/R2-1) | Added as a motor submodule |
| **motorAcsTech80** | [R1-0-2](https://github.com/epics-motor/motorAcsTech80/releases/tag/R1-0-2) | |
| **motorAerotech** | [R1-1-1](https://github.com/epics-motor/motorAerotech/releases/tag/R1-1-1) | Ensemble driver and doCommand.ab bug fixes |
| **motorAMCI** | [R1-0-2](https://github.com/epics-motor/motorAMCI/releases/tag/R1-0-2) | Replaced printf calls with asynPrint calls in ANG1Driver.cpp |
| **motorAttocube** | [R1-0-2](https://github.com/epics-motor/motorAttocube/releases/tag/R1-0-2) | |
| **motorDeltaTau** | [R1-0-2](https://github.com/epics-motor/motorDeltaTau/releases/tag/R1-0-2) | |
| **motorFaulhaber** | [R1-0-2](https://github.com/epics-motor/motorFaulhaber/releases/tag/R1-0-2) | |
| **motorHytec** | [R1-0-3](https://github.com/epics-motor/motorHytec/releases/tag/R1-0-3) | |
| **motorIms** | [R1-0-2](https://github.com/epics-motor/motorIms/releases/tag/R1-0-2) | |
| **motorKohzu** | [R1-0-2](https://github.com/epics-motor/motorKohzu/releases/tag/R1-0-2) | |
| **motorMclennan** | [R1-1-1](https://github.com/epics-motor/motorMclennan/releases/tag/R1-1-1) | |
| **motorMicos** | [R2-1](https://github.com/epics-motor/motorMicos/releases/tag/R2-1) | Added support for the SMC Taurus |
| **motorMicroMo** | [R1-0-2](https://github.com/epics-motor/motorMicroMo/releases/tag/R1-0-2) | |
| **motorMicronix** | [R1-1](https://github.com/epics-motor/motorMicronix/releases/tag/R1-1) | |
| **motorMotorSim** | [R1-2](https://github.com/epics-motor/motorMotorSim/releases/tag/R1-2) | Added motorSim8x.iocsh. Multiple improvements to example IOC. |
| **motorMXmotor** | [R1-0-2](https://github.com/epics-motor/motorMXmotor/releases/tag/R1-0-2) | |
| **motorNewFocus** | [R1-2](https://github.com/epics-motor/motorNewFocus/releases/tag/R1-2) | Improved example newfocus8742 configuration |
| **motorNewport** | [R1-2](https://github.com/epics-motor/motorNewport/releases/tag/R1-2) | Added support for the FCL200. ESP300 driver now supports UEIP=Yes. |
| **motorNPoint** | [R1-1](https://github.com/epics-motor/motorNPoint/releases/tag/R1-1) | |
| **motorOms** | [R1-2](https://github.com/epics-motor/motorOms/releases/tag/R1-2) | Enabled non-VxWorks IOCs & epicsMutexTryLock bug fix |
| **motorOmsAsyn** | [R1-0-3](https://github.com/epics-motor/motorOmsAsyn/releases/tag/R1-0-3) | Type fixes |
| **motorOriel** | [R1-0-2](https://github.com/epics-motor/motorOriel/releases/tag/R1-0-2) | |
| **motorParker** | [R1-1-1](https://github.com/epics-motor/motorParker/releases/tag/R1-1-1) | |
| **motorPhytron** | [R1-2](https://github.com/epics-motor/motorPhytron/releases/tag/R1-2) | Added encoder options. Bug fixes for deceleration and homing to limts. |
| **motorPI** | [R1-1](https://github.com/epics-motor/motorPI/releases/tag/R1-1) | Added E-816 example configuration |
| **motorPIGCS2** | [R1-2](https://github.com/epics-motor/motorPIGCS2/releases/tag/R1-2) | Added support for E-518 & E-873.3QTU controllers. Added closed loop commands for the E-727. Bug fixes. |
| **motorPiJena** | [R1-0-2](https://github.com/epics-motor/motorPiJena/releases/tag/R1-0-2) | |
| **motorScriptMotor** | [R1-2](https://github.com/epics-motor/motorScriptMotor/releases/tag/R1-2) | Added Attocube AMC support |
| **motorSmarAct** | [R2-0](https://github.com/epics-motor/motorSmarAct/releases/tag/R2-0) | Too many new features to list here; see [motorSmarAct release notes](https://github.com/epics-motor/motorSmarAct/releases/tag/R2-0) |
| **motorSmartMotor** | [R1-0-2](https://github.com/epics-motor/motorSmartMotor/releases/tag/R1-0-2) | |
| **motorThorLabs** | [R1-0-2](https://github.com/epics-motor/motorThorLabs/releases/tag/R1-0-2) | Added support for Kinesis KDC101 and KST101 |
## __R7-2-2 (2021-02-02)__
R7-2-2 is a release based on the R7-2-1-bugfix branch.
### Changes since R7-2-1
#### Bug fixes
* Added shareLib.h to asynMotorController.h and asynMotorAxis.h to allow building against asyn R4-41
#### Driver submodules (and noteworthy changes)
| Module | Release | Changes |
| ---------------- | ------- | ------- |
| **motorNewport** | [070c93e](https://github.com/epics-motor/motorNewport/commits/070c93e1aa1a4dea39829f7dcb21489cfde582a1) | Added epicsExport.h to testSFTPUpload.cpp |
| **motorOms** | [5219f8c](https://github.com/epics-motor/motorOms/commit/5219f8ceee352ec2a459f1bde316621af9c293a4) | Fixed epicsMutexTryLock problem described [here](https://github.com/epics-modules/motor/issues/172#issuecomment-758139901) |
## __R7-2-1 (2020-05-14)__
R7-2-1 is a release based on the master branch.
### Changes since R7-2
#### Bug fixes
* Motor drivers have been updated to resolve build problems for Windows and VxWorks
#### Driver submodules (and noteworthy changes)
| Module | Release | Changes |
| ---------------- | ------- | ------- |
| motorAcs | [R1-1](https://github.com/epics-motor/motorAcs/releases/tag/R1-1) | |
| motorAcsTech80 | [R1-0-1](https://github.com/epics-motor/motorAcsTech80/releases/tag/R1-0-1) | |
| motorAerotech | [R1-1](https://github.com/epics-motor/motorAerotech/releases/tag/R1-1) | |
| motorAMCI | [R1-0-1](https://github.com/epics-motor/motorAMCI/releases/tag/R1-0-1) | |
| motorAttocube | [R1-0-1](https://github.com/epics-motor/motorAttocube/releases/tag/R1-0-1) | |
| motorDeltaTau | [R1-0-1](https://github.com/epics-motor/motorDeltaTau/releases/tag/R1-0-1) | |
| motorFaulhaber | [R1-0-1](https://github.com/epics-motor/motorFaulhaber/releases/tag/R1-0-1) | |
| **motorHytec** | [R1-0-2](https://github.com/epics-motor/motorHytec/releases/tag/R1-0-2) | Only build the example IOC on Linux and VxWorks |
| motorIms | [R1-0-1](https://github.com/epics-motor/motorIms/releases/tag/R1-0-1) | |
| motorKohzu | [R1-0-1](https://github.com/epics-motor/motorKohzu/releases/tag/R1-0-1) | |
| motorMclennan | [R1-1](https://github.com/epics-motor/motorMclennan/releases/tag/R1-1) | |
| motorMicos | [R2-0](https://github.com/epics-motor/motorMicos/releases/tag/R2-0) | |
| motorMicroMo | [R1-0-1](https://github.com/epics-motor/motorMicroMo/releases/tag/R1-0-1) | |
| motorMicronix | [R1-0-1](https://github.com/epics-motor/motorMicronix/releases/tag/R1-0-1) | |
| motorMotorSim | [R1-1](https://github.com/epics-motor/motorMotorSim/releases/tag/R1-1) | |
| motorMXmotor | [R1-0-1](https://github.com/epics-motor/motorMXmotor/releases/tag/R1-0-1) | |
| motorNewFocus | [R1-1-1](https://github.com/epics-motor/motorNewFocus/releases/tag/R1-1-1) | |
| motorNewport | [R1-1](https://github.com/epics-motor/motorNewport/releases/tag/R1-1) | |
| motorNPoint | [R1-0-1](https://github.com/epics-motor/motorNPoint/releases/tag/R1-0-1) | |
| motorOms | [R1-1](https://github.com/epics-motor/motorOms/releases/tag/R1-1) | |
| **motorOmsAsyn** | [R1-0-2](https://github.com/epics-motor/motorOmsAsyn/releases/tag/R1-0-2) | Exclude MAXv support when building example IOC on Windows |
| motorOriel | [R1-0-1](https://github.com/epics-motor/motorOriel/releases/tag/R1-0-1) | |
| motorParker | [R1-1](https://github.com/epics-motor/motorParker/releases/tag/R1-1) | |
| motorPhytron | [R1-1](https://github.com/epics-motor/motorPhytron/releases/tag/R1-1) | |
| motorPI | [R1-0-1](https://github.com/epics-motor/motorPI/releases/tag/R1-0-1) | |
| motorPIGCS2 | [R1-1](https://github.com/epics-motor/motorPIGCS2/releases/tag/R1-1) | |
| motorPiJena | [R1-0-1](https://github.com/epics-motor/motorPiJena/releases/tag/R1-0-1) | |
| motorScriptMotor | [R1-1](https://github.com/epics-motor/motorScriptMotor/releases/tag/R1-1) | |
| **motorSmarAct** | [R1-2-1](https://github.com/epics-motor/motorSmarAct/releases/tag/R1-2-1) | Include a local definition of rint on fewer platforms |
| motorSmartMotor | [R1-0-1](https://github.com/epics-motor/motorSmartMotor/releases/tag/R1-0-1) | |
| motorThorLabs | [R1-0-1](https://github.com/epics-motor/motorThorLabs/releases/tag/R1-0-1) | |
## __R7-2 (2020-05-13)__
R7-2 is a release based on the master branch.
### Changes since R7-1
#### Modifications to existing features
* ``CONFIG_SITE`` now includes ``$(SUPPORT)/configure/CONFIG_SITE``, which overrides ``CONFIG_SITE.local``
* ``modules/RELEASE.$(EPICS_HOST_ARCH).local`` is now rebuilt every time the build get into the ``modules`` directory
* User displays have been autoconverted
#### Bug fixes
* asynMotorAxis parameters (``motorPowerAutoOnOff_``, ``motorPowerOffDelay_``, ``motorPowerOnDelay_``) are now initialized to avoid errors
* The layout of ``motorxU.adl`` has been improved
#### Driver submodules (and noteworthy changes)
| Module | Release | Changes |
| ---------------- | ------- | ------- |
| **motorAcs** | [R1-1](https://github.com/epics-motor/motorAcs/releases/tag/R1-1) | iocsh files are now installed at build time |
| **motorAcsTech80** | [R1-0-1](https://github.com/epics-motor/motorAcsTech80/releases/tag/R1-0-1) | |
| **motorAerotech** | [R1-1](https://github.com/epics-motor/motorAerotech/releases/tag/R1-1) | motorAxisHomed bit is now set in the Ensemble poller |
| **motorAMCI** | [R1-0-1](https://github.com/epics-motor/motorAMCI/releases/tag/R1-0-1) | |
| **motorAttocube** | [R1-0-1](https://github.com/epics-motor/motorAttocube/releases/tag/R1-0-1) | |
| **motorDeltaTau** | [R1-0-1](https://github.com/epics-motor/motorDeltaTau/releases/tag/R1-0-1) | |
| **motorFaulhaber** | [R1-0-1](https://github.com/epics-motor/motorFaulhaber/releases/tag/R1-0-1) | |
| **motorHytec** | [R1-0-1](https://github.com/epics-motor/motorHytec/releases/tag/R1-0-1) | |
| **motorIms** | [R1-0-1](https://github.com/epics-motor/motorIms/releases/tag/R1-0-1) | |
| **motorKohzu** | [R1-0-1](https://github.com/epics-motor/motorKohzu/releases/tag/R1-0-1) | |
| **motorMclennan** | [R1-1](https://github.com/epics-motor/motorMclennan/releases/tag/R1-1) | iocsh files are now installed at build time |
| **motorMicos** | [R2-0](https://github.com/epics-motor/motorMicos/releases/tag/R2-0) | Added support for the SMC Corvus Eco |
| **motorMicroMo** | [R1-0-1](https://github.com/epics-motor/motorMicroMo/releases/tag/R1-0-1) | |
| **motorMicronix** | [R1-0-1](https://github.com/epics-motor/motorMicronix/releases/tag/R1-0-1) | |
| **motorMotorSim** | [R1-1](https://github.com/epics-motor/motorMotorSim/releases/tag/R1-1) | iocsh files are now installed at build time |
| **motorMXmotor** | [R1-0-1](https://github.com/epics-motor/motorMXmotor/releases/tag/R1-0-1) | |
| **motorNewFocus** | [R1-1-1](https://github.com/epics-motor/motorNewFocus/releases/tag/R1-1-1) | |
| **motorNewport** | [R1-1](https://github.com/epics-motor/motorNewport/releases/tag/R1-1) | Added support for the XPS-D |
| **motorNPoint** | [R1-0-1](https://github.com/epics-motor/motorNPoint/releases/tag/R1-0-1) | |
| **motorOms** | [R1-1](https://github.com/epics-motor/motorOms/releases/tag/R1-1) | User displays can now be autoconverted at build time |
| **motorOmsAsyn** | [R1-0-1](https://github.com/epics-motor/motorOmsAsyn/releases/tag/R1-0-1) | |
| **motorOriel** | [R1-0-1](https://github.com/epics-motor/motorOriel/releases/tag/R1-0-1) | |
| **motorParker** | [R1-1](https://github.com/epics-motor/motorParker/releases/tag/R1-1) | User displays can now be autoconverted at build time |
| **motorPhytron** | [R1-1](https://github.com/epics-motor/motorPhytron/releases/tag/R1-1) | Error messages are now only printed on status changes |
| **motorPI** | [R1-0-1](https://github.com/epics-motor/motorPI/releases/tag/R1-0-1) | |
| **motorPIGCS2** | [R1-1](https://github.com/epics-motor/motorPIGCS2/releases/tag/R1-1) | Added support for the E-754 and C-885 controllers |
| **motorPiJena** | [R1-0-1](https://github.com/epics-motor/motorPiJena/releases/tag/R1-0-1) | |
| **motorScriptMotor** | [R1-1](https://github.com/epics-motor/motorScriptMotor/releases/tag/R1-1) | User displays can now be autoconverted at build time |
| **motorSmarAct** | [R1-2](https://github.com/epics-motor/motorSmarAct/releases/tag/R1-2) | Added support for the SCU controllers |
| **motorSmartMotor** | [R1-0-1](https://github.com/epics-motor/motorSmartMotor/releases/tag/R1-0-1) | |
| **motorThorLabs** | [R1-0-1](https://github.com/epics-motor/motorThorLabs/releases/tag/R1-0-1) | |
## __R7-1 (2019-08-13)__
R7-1 is a release based on the master branch.
### Changes since R7-0
#### Bug fixes
* Req files are now installed to motor's top-level db directory when building against EPICS base 3.14
* RELEASE now allows RELEASE.local files to override settings
#### Driver submodules (and noteworthy changes)
| Module | Release | Changes |
| ---------------- | ------- | ------- |
| motorAcs | R1-0 | |
| motorAcsTech80 | R1-0 | |
| **motorAerotech** | **R1-0-1** | [Improvements to EnsembleTrajectoryScan](https://github.com/epics-motor/motorAerotech/releases/tag/R1-0-1) |
| motorAMCI | R1-0 | |
| motorAttocube | R1-0 | |
| motorDeltaTau | R1-0 | |
| motorFaulhaber | R1-0 | |
| motorHytec | R1-0 | |
| motorIms | R1-0 | |
| motorKohzu | R1-0 | |
| motorMclennan | R1-0 | |
| **motorMicos** | **R1-1** | [Improvements to SMC Hydra driver](https://github.com/epics-motor/motorMicos/releases/tag/R1-1) |
| motorMicroMo | R1-0 | |
| motorMicronix | R1-0 | |
| motorMotorSim | R1-0 | |
| motorMXmotor | R1-0 | |
| **motorNewFocus** | **R1-1** | [Improvements to 874xMotorDriver](https://github.com/epics-motor/motorNewFocus/releases/tag/R1-1) |
| **motorNewport** | **R1-0-1** | [Corrected typo that prevented template installation](https://github.com/epics-motor/motorNewport/releases/tag/R1-0-1) |
| motorNPoint | R1-0 | |
| motorOms | R1-0 | |
| motorOmsAsyn | R1-0 | |
| motorOriel | R1-0 | |
| motorParker | R1-0 | |
| motorPhytron | R1-0 | |
| motorPI | R1-0 | |
| motorPIGCS2 | R1-0 | |
| motorPiJena | R1-0 | |
| motorScriptMotor | R1-0 | |
| **motorSmarAct** | **R1-1** | [Added support for MCS2 controller](https://github.com/epics-motor/motorSmarAct/releases/tag/R1-1) |
| motorSmartMotor | R1-0 | |
| motorThorLabs | R1-0 | |
## __R7-0 (2019-04-19)__
R7-0 is a release based on the master branch.
### Changes since R6-11
Stand-alone repositories have been created for most of the support that previously resided in ``motorApp``. These new respositories can be found in [epics-motor](https://github.com/epics-motor). The core motor functionality remains in this module.
The new driver repositories have been added to motor as submodules, which reside in the ``modules`` subdirectory. When the driver modules are built as submodules, their build products are installed into motor's top-level directories: ``db``, ``dbd``, ``lib``. **The locations of vendor-specific files that aren't installed (iocsh scripts, user displays) will differ from previous versions of motor.** These files will remain in the vendor's submodule.
The new driver modules can be built outside of the motor module, which results in the installation of the build products into the top-level directory of the driver module.
The recommended EPICS base version is 3.15.6 or later. Submodules that install template files will fail to build against EPICS base 3.14.
#### Bug fixes
* Multiple fixes for motor displays
#### Driver submodules (and noteworthy changes)
| Module | Release | Changes |
| ---------------- | ------- | ------- |
| motorAcs | R1-0 | |
| motorAcsTech80 | R1-0 | |
| motorAerotech | R1-0 | |
| motorAMCI | R1-0 | |
| motorAttocube | R1-0 | |
| motorDeltaTau | R1-0 | |
| motorFaulhaber | R1-0 | |
| motorHytec | R1-0 | |
| motorIms | R1-0 | |
| motorKohzu | R1-0 | |
| motorMclennan | R1-0 | |
| motorMicos | R1-0 | |
| motorMicroMo | R1-0 | |
| motorMicronix | R1-0 | |
| motorMotorSim | R1-0 | |
| motorMXmotor | R1-0 | |
| motorNewFocus | R1-0 | |
| motorNewport | R1-0 | [HXP driver updated](https://github.com/epics-motor/motorNewport/releases/tag/R1-0) |
| motorNPoint | R1-0 | |
| motorOms | R1-0 | |
| motorOmsAsyn | R1-0 | |
| motorOriel | R1-0 | |
| motorParker | R1-0 | |
| motorPhytron | R1-0 | [phytron.dbd renamed](https://github.com/epics-motor/motorPhytron/releases/tag/R1-0) |
| motorPI | R1-0 | |
| motorPIGCS2 | R1-0 | |
| motorPiJena | R1-0 | |
| motorScriptMotor | R1-0 | |
| motorSmarAct | R1-0 | |
| motorSmartMotor | R1-0 | |
| motorThorLabs | R1-0 | |
## __R6-11 (2018-12-12)__
R6-11 is a release based on the master branch.
### Changes since R6-10-1
#### Modifications to existing features
* Pull request [#109](https://github.com/epics-modules/motor/pull/109) motorRecord: Don't stop motor if driver sets RA_PROBLEM true
* Pull request [#108](https://github.com/epics-modules/motor/pull/108) motorRecord: Set LVIO=1 if DLLM > DHLM
* Pull request [#36](https://github.com/epics-modules/motor/pull/36) motorRecord: Update status of limit switches regardless of movement direction
* Pull request [#99](https://github.com/epics-modules/motor/pull/99) motorRecord: Reset the JOGF/JOGR fields when a limit violation occurs
* Pull request [#56](https://github.com/epics-modules/motor/pull/56) motorRecord: Recognize stopped motor while jogging
* Pull request [#84](https://github.com/epics-modules/motor/pull/84) motorRecord: Keep the sign information of the components of the encoder ratio (MRES and ERES). Drivers made consistent in pull request #98
* Pull request [#93](https://github.com/epics-modules/motor/pull/93) OmsAsyn: Synchronize motor position with encoder position before every move
* Pull request [#103](https://github.com/epics-modules/motor/pull/103) Aerotech Ensemble: If disabling torque due to a fault, clear motorAxisProblem so that user can jog off limit switch
* Commit [74a8ced](https://github.com/epics-modules/motor/commit/74a8cedc283c6f53042dea867b4e6a1363c74479) Aerotech Ensemble: update CountsPerUnit every time torque is enabled to reduce the need for a reboot after parameter file change
* Commit [c0c5b5b](https://github.com/epics-modules/motor/commit/c0c5b5b351c33549437cffbd4233edb15a9361c2) Multiple changes to Aerotech A3200 driver:
* restored "task number" argument
* don't check limit switches of virtual axes
* added single/multi axis move argument
#### New features
* Pull request [#114](https://github.com/epics-modules/motor/pull/114) motorRecord: Added Set Point Deadband field (SPDB) enabling deadbands greater than the MRES
* Pull request [#95](https://github.com/epics-modules/motor/pull/95) Added support for AMCI ANF-series controllers (depends on the modbus module: https://github.com/epics-modules/modbus, R2-11 or later)
* Pull request [#79](https://github.com/epics-modules/motor/pull/79) Added support for Scriptable Motor Controller (depends on the lua module: https://github.com/epics-modules/lua)
#### Bug fixes
* Pull request [#105](https://github.com/epics-modules/motor/pull/105) Fix for segfault when XPSConfigAxis isn't called before using a motor
* Commit [df11f3e](https://github.com/epics-modules/motor/commit/df11f3e153e2aa6c6cb605cbc1392e0a9e663d93) Corrected a typo in motorSim.iocsh that prevented any motion by setting the DLLM and DHLM to the same value
#### Documentation updates
* Pull request [#101](https://github.com/epics-modules/motor/pull/101), commit [58976fa](https://github.com/epics-modules/motor/commit/58976fa2885660b753ab84003667638934fdd557) Made motor documentation compatible with github pages
## __R6-10-1 (2018-06-07)__
R6-10-1 is a bugfix release based on the R6-10-bugfix branch.
### Changes since R6-10
The following commits to the master branch have been cherry-picked for this release.
#### Bug fixes
* pull request [#60](https://github.com/epics-modules/motor/pull/60) motor record DLY and STOP fix
* pull request [#83](https://github.com/epics-modules/motor/pull/83) asynMotor autoPower fix
* pull request [#94](https://github.com/epics-modules/motor/pull/94) Micronix MMC-x00 I/O flush
* commit [7493d50](https://github.com/epics-modules/motor/commit/7493d50bc818bb56440525f71a4ca31c9a28ee29) Don't start a new move if URIP=Yes & RDBL link error
#### Code fixes
* commit [4938a51](https://github.com/epics-modules/motor/commit/4938a51ce459e6b213ac3e157112892c86e629a8) Fixed casts
* commit [23b8c5f](https://github.com/epics-modules/motor/commit/23b8c5f528416def6ee8329caf4f0fe8331e434c) Fix for URLS in travis script
* commit [75162d1](https://github.com/epics-modules/motor/commit/75162d1fefc2aa1c3009a3bbbde7fac69345213b) Fix for example substitutions file
* commit [6998c37](https://github.com/epics-modules/motor/commit/6998c3716317e725d123c77844dfb3da84ed9768) Fix typos
* commit [c1c4407](https://github.com/epics-modules/motor/commit/c1c440764414627237580c2642bf5542aee623b2) Corrected EPICS version test
* commit [60aa414](https://github.com/epics-modules/motor/commit/60aa414b373b48e96db2bd010492ae6b29577f35) Added header files for EPICS 7.0 compatiblity
* commit [8409249](https://github.com/epics-modules/motor/commit/840924984945a3454cd114ef8391952158151308) Added header files for EPICS 7.0 compatiblity
#### Documentation updates
* commit [6529abb](https://github.com/epics-modules/motor/commit/6529abb0cfccc08a1c4ea6f0c7a3d326b48bd81b) Added R6-10-1 links
* commit [acf0d00](https://github.com/epics-modules/motor/commit/acf0d00496ce7b4edf953991ecc3037b236e37ea) Added home-search documentation to Aerotech README
* commit [4bbba98](https://github.com/epics-modules/motor/commit/4bbba98bd51f65a5efea30fa647e9d914c99d50b) Minor improvements to documentation
* commit [2cfd494](https://github.com/epics-modules/motor/commit/2cfd494c1631c9af287fde3d93de650b0de2a3b2) Added R6-10 documentation
## __R6-10 and older__
Release notes can be found here: https://epics-modules.github.io/motor/motor_release.html
Details relevant to developers can be found here: https://github.com/epics-modules/motor/blob/master/docs/RELEASE.txt
+14 -2
View File
@@ -3,8 +3,7 @@ Notice
This file was historically used to document changes to the motor module that
were relevant to developers. It is largely obsolete now that the motor module
has moved github. It will not be updated in the future and is likely to move
to the documentation directory.
has moved github. It will not be updated in the future.
Motor Module R6-10 Release Notes
@@ -220,6 +219,19 @@ Modification Log for R6-10
File modified: OmsSrc/drvMAXv.cc
8) Changed axis names from 'char *' to 'const char*' to avoid compiler warnings.
(Assigning literal string to char* is deprecated).
This affects driver_table.axis_names and driver_table.sendmsg used in
every motor driver.
*** THIS CHANGE BREAKS BACKWARD COMPATIBILITY! ***
All external motor drivers need to change their send_mess() function
to use 'const char*' as the last argument:
RTN_STATUS send_mess(int, const char *, const char *);
Files modified: motorApp/MotorSrc/motordrvCom.h
motorApp/MotorSrc/motordrvCom.cc
motorApp/*Src/drv*.cc
Modification Log for R6-9
=========================
+119 -36
View File
@@ -14,23 +14,21 @@
<dl>
<dt>Module Owners: <a href="mailto:kmpeters@anl.gov">Kevin Peterson</a></i></dt>
</dl>
<p>
<br />
This is the home page for both the motor record and various motor controllers
supported by motor record device/drivers.
</p>
<p>
GitHub repository: <a href="https://github.com/epics-modules/motor">https://github.com/epics-modules/motor</a>
</p>
<p>
This is the home page for the motor record. The device/driver support for various motor controllers
reside in submodules, starting in R7-0, and can be found here: <a href="https://github.com/epics-motor">epics-motor</a>
</p>
<p>
Please email any comments to <i><a href="mailto:kmpeters@anl.gov">Kevin Peterson</a></i> who
is responsible for coordinating development and releases. Bug reports can be created on
<a href="https://github.com/epics-modules/motor/issues">github</a>.
</p>
<h2>Where to Find it</h2> You can download the software by anonymous ftp from
the links in the table below: <br />
<h2>Where to Find it</h2> You can download the software using
the links in the table below: <br />
&nbsp;
<table border="1">
<tbody>
@@ -45,21 +43,57 @@ the links in the table below: <br />
</tr>
<tr>
<td>Latest</td>
<td>R3.15.5-3.14.12.5</td>
<td>R3.15.7 or later</td>
<td><a href="https://github.com/epics-modules/motor/archive/master.zip">master.zip</a></td>
<td><a href="motorRecord.html">motorRecord.html</a></td>
<td><a href="motor_release.html">motor_release.html</a></td>
<td><a href="Problems.html">Problems</a></td>
<td><a href="https://github.com/epics-modules/motor/blob/master/docs/RELEASE.md">RELEASE.md</a></td>
<td><a href="https://github.com/epics-modules/motor/issues">github issues</a></td>
<td>n/a</td>
</tr>
<tr>
<td>R7-2</td>
<td>R3.15.7 or later</td>
<td><a href="https://github.com/epics-modules/motor/archive/R7-2-1.tar.gz">motorR7-2-1.tar.gz</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R7-2-1/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://github.com/epics-modules/motor/releases/tag/R7-2-1">release notes</a></td>
<td><a href="https://github.com/epics-modules/motor/issues?utf8=%E2%9C%93&q=milestone%3AR7-2-1">github issues</a></td>
<td>2020-05-13</td>
</tr>
<tr>
<td>R7-1</td>
<td>R3.15.6 or later</td>
<td><a href="https://github.com/epics-modules/motor/archive/R7-1.tar.gz">motorR7-1.tar.gz</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R7-1/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://github.com/epics-modules/motor/releases/tag/R7-1">release notes</a></td>
<td><a href="https://github.com/epics-modules/motor/issues?utf8=%E2%9C%93&q=milestone%3AR7-1">github issues</a></td>
<td>2019-08-13</td>
</tr>
<tr>
<td>R7-0</td>
<td>R3.15.6 or later</td>
<td><a href="https://github.com/epics-modules/motor/archive/R7-0.tar.gz">motorR7-0.tar.gz</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R7-0/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://github.com/epics-modules/motor/releases/tag/R7-0">release notes</a></td>
<td><a href="https://github.com/epics-modules/motor/issues?utf8=%E2%9C%93&q=milestone%3AR7-0">github issues</a></td>
<td>2019-04-19</td>
</tr>
<tr>
<td>R6-11</td>
<td>R3.15.5-3.14.12.5</td>
<td><a href="https://github.com/epics-modules/motor/archive/R6-11.tar.gz">motorR6-11.tar.gz</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-11/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://github.com/epics-modules/motor/releases/tag/R6-11">release notes</a></td>
<td><a href="https://github.com/epics-modules/motor/issues?utf8=%E2%9C%93&q=milestone%3AR6-11">github issues</a></td>
<td>2018-12-12</td>
</tr>
<tr>
<td>R6-10</td>
<td>R3.15.5-3.14.12.5</td>
<td><a href="https://github.com/epics-modules/motor/archive/R6-10-1.tar.gz">motorR6-10-1.tar.gz</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-10/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-10/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-10/Problems.html">Problems</a></td>
<td>11/30/2017</td>
<td><a href="https://github.com/epics-modules/motor/issues?utf8=%E2%9C%93&q=milestone%3AR6-10-1">github issues</a></td>
<td>2017-11-30</td>
</tr>
<tr>
<td>R6-9</td>
@@ -68,7 +102,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-9/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-9/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-9/Problems.html">Problems</a></td>
<td>01/07/2015</td>
<td>2015-01-07</td>
</tr>
<tr>
<td>R6-8</td>
@@ -77,7 +111,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-8/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-8/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-8/Problems.html">Problems</a></td>
<td>06/16/2014</td>
<td>2014-06-16</td>
</tr>
<tr>
<td>R6-7</td>
@@ -86,7 +120,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-7/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-7/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-7/Problems.html">Problems</a></td>
<td>03/06/2012</td>
<td>2012-03-06</td>
</tr>
<tr>
<td>R6-5</td>
@@ -95,7 +129,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-5/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-5/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-5/Problems.html">Problems</a></td>
<td>10/14/2010</td>
<td>2010-10-14</td>
</tr>
<tr>
<td>R6-4</td>
@@ -104,7 +138,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-4/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-4/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-4/Problems.html">Problems</a></td>
<td>06/22/2009</td>
<td>2009-06-22</td>
</tr>
<tr>
<td>R6-3</td>
@@ -113,7 +147,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-3/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-3/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-3/Problems.html">Problems</a></td>
<td>12/10/2008</td>
<td>2008-12-10</td>
</tr>
<tr>
<td>R6-2</td>
@@ -122,7 +156,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-2/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-2/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-2/Problems.html">Problems</a></td>
<td>04/04/2007</td>
<td>2007-04-04</td>
</tr>
<tr>
<td>R6-1</td>
@@ -131,7 +165,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-1/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-1/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-1/Problems.html">Problems</a></td>
<td>12/18/2006</td>
<td>2006-12-18</td>
</tr>
<tr>
<td>R6-0</td>
@@ -140,7 +174,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-0/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-0/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R6-0/Problems.html">Problems</a></td>
<td>09/22/2006</td>
<td>2006-09-22</td>
</tr>
<tr>
<td>R5-9</td>
@@ -149,7 +183,7 @@ the links in the table below: <br />
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R5-9/motorRecord.html">motorRecord.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R5-9/motor_release.html">motor_release.html</a></td>
<td><a href="https://epics.anl.gov/bcda/synApps/motor/R5-9/Problems.html">Problems</a></td>
<td>08/21/2006</td>
<td>2006-08-21</td>
</tr>
<tr>
<td>R5-8</td>
@@ -290,6 +324,59 @@ the links in the table below: <br />
<td><b>Required modules</b></td>
<td><b>Release needed</b></td>
</tr>
<tr>
<td>R7-2</td>
<td><a href="https://epics.anl.gov/modules/soft/asyn/">ASYN</a> &nbsp; <br />
<a href="https://github.com/epics-modules/ipac/wiki">IPAC</a> &nbsp;(for motorHytec &amp; VME-based serial and GPIB examples) <br />
<a href="https://github.com/epics-modules/lua">LUA</a> &nbsp;(for motorScriptMotor) <br />
<a href="https://github.com/epics-modules/modbus">MODBUS</a> &nbsp;(for motorAMCI IOCs)
</td>
<td>R4-37<br />
R2-15<br />
R2-0<br />
R3-0
</td>
</tr>
<tr>
<td>R7-1</td>
<td><a href="https://epics.anl.gov/modules/soft/asyn/">ASYN</a> &nbsp; <br />
<a href="https://github.com/epics-modules/ipac/wiki">IPAC</a> &nbsp;(for motorHytec &amp; VME-based serial and GPIB examples) <br />
<a href="https://github.com/epics-modules/lua">LUA</a> &nbsp;(for motorScriptMotor) <br />
<a href="https://github.com/epics-modules/modbus">MODBUS</a> &nbsp;(for motorAMCI IOCs)
</td>
<td>R4-35<br />
R2-15<br />
R1-3<br />
R2-11
</td>
</tr>
<tr>
<td>R7-0</td>
<td><a href="https://epics.anl.gov/modules/soft/asyn/">ASYN</a> &nbsp; <br />
<a href="https://github.com/epics-modules/ipac/wiki">IPAC</a> &nbsp;(for motorHytec &amp; VME-based serial and GPIB examples) <br />
<a href="https://github.com/epics-modules/lua">LUA</a> &nbsp;(for motorScriptMotor) <br />
<a href="https://github.com/epics-modules/modbus">MODBUS</a> &nbsp;(for motorAMCI IOCs)
</td>
<td>R4-35<br />
R2-15<br />
R1-3<br />
R2-11
</td>
</tr>
<tr>
<td>R6-11</td>
<td><a href="https://epics.anl.gov/modules/soft/asyn/">ASYN</a> &nbsp; <br />
<a href="https://github.com/epics-modules/ipac/wiki">IPAC</a> &nbsp;(for serial
or GPIB communication and Hytec support) <br />
<a href="https://github.com/epics-modules/lua">LUA</a> &nbsp;(for ScriptMotor support) <br />
<a href="https://github.com/epics-modules/modbus">MODBUS</a> &nbsp;(for IOCs using AMCI support)
</td>
<td>R4-33<br />
R2-15<br />
R1-3<br />
R2-11
</td>
</tr>
<tr>
<td>R6-10</td>
<td><a href="https://epics.anl.gov/modules/soft/asyn/">ASYN</a> &nbsp; <br />
@@ -371,7 +458,7 @@ the links in the table below: <br />
R2-8</td>
</tr>
<tr>
<td>R5-9-1</td>
<td>R5-9</td>
<td><a href="https://epics.anl.gov/modules/soft/asyn/">ASYN</a> &nbsp; <br />
<a href="https://github.com/epics-modules/ipac/wiki">IPAC</a> &nbsp;(for serial
or GPIB communication only)</td>
@@ -559,28 +646,27 @@ different releases of EPICS and/or the other required modules are needed).
Create an installation directory for the module, usually this will end with
</li>
<pre><tt>.../support/motor/</tt></pre>
<pre><tt>.../support</tt></pre>
<li>
Place the distribution file in this directory. Then issue the commands (Unix
style)
</li>
<pre>gunzip motor&lt;rel&gt;.tar.gz<br />tar xvf motor&lt;rel&gt;.tar</pre>
<pre>tar xzvf motor&lt;rel&gt;.tar.gz</pre>
where &lt;rel&gt; is the release. For example.
<pre>motor4-1.tar.gz</pre>
<pre>motor-7-2-1.tar.gz</pre>
<li>
This creates a &lt;top&gt; application.
</li>
<pre>.../support/motor/motor&lt;rel&gt;</pre>
<pre>.../support/motor&lt;rel&gt;</pre>
<li>
Edit the <tt>config/RELEASE</tt> file and set the paths to your installation of
EPICS base (i.e., define SUPPORT and EPICS_BASE).
</li>
<li>
Edit&nbsp; .../support/motor/motor&lt;rel&gt;/motorApp/Makefile.&nbsp; Define
which device/driver modules to build.
Edit&nbsp; .../support/motor&lt;rel&gt;/modules/Makefile&nbsp; to comment out submodules that aren't needed.
</li>
<li>
Run <tt>gnumake</tt> in the top level directory and check for any compilation
@@ -589,21 +675,18 @@ different releases of EPICS and/or the other required modules are needed).
</ol>
<h2>Documentation</h2> The following documentation is available:
<!--h2>Documentation</h2> The following documentation is available:
<ul>
<li>
&nbsp;Consult the README file in the motor distribution for configuration
details.
</li>
</ul>
</ul-->
<hr width="100%" />
<br />
Page Last Modified: 05/01/2018 <br />
Page Last Modified: 2020-05-14 <br />
<i><a href="mailto:kmpeters@anl.gov">Kevin Peterson</a></i> <br />
<br />
<br />
<br />
</body>
</html>
+147 -434
View File
@@ -21,7 +21,7 @@
<a href="#Fields">Field Descriptions</a>
</li>
<li>
<a href="#Files">Files, device-support</a>
<a href="#Files">Files</a>
</li>
<li>
<a href="#Restrictions">Restrictions</a>
@@ -35,92 +35,113 @@
</ul>
<a name="Overview"></a>
<h2>Overview</h2> This documentation describes version R6-10 of the EPICS motor
<h2>Overview</h2> This documentation describes version R7-2-1 of the EPICS motor
record, and related EPICS software required to build and use it.&nbsp; Version
R6-10 of the motor record is compatible with EPICS base R3.14.12.2 and above.
R7-2-1 of the motor record is compatible with EPICS base R3.15.7 and above.
<p>
The motor record is intended to support positioning motors of all kinds, but currently
supports only the following variety of motor controllers (in addition to Soft
supports motor controllers from the following manufacturers:
</p>
<ul>
<li>
ACS Motion Control: <a href="https://github.com/epics-motor/motorAcsTech80">motorAcsTech80</a>
</li>
<li>
Advanced Control Systems, Corp: <a href="https://github.com/epics-motor/motorAcs">motorAcs</a>
</li>
<li>
Aerotech: <a href="https://github.com/epics-motor/motorAerotech">motorAerotech</a>
</li>
<li>
AMCI: <a href="https://github.com/epics-motor/motorAMCI">motorAMCI</a>
</li>
<li>
Animatics Corporation: <a href="https://github.com/epics-motor/motorSmartMotor">motorSmartMotor</a>
</li>
<li>
attocube systems: <a href="https://github.com/epics-motor/motorAttocube">motorAttocube</a>
</li>
<li>
Delta Tau: <a href="https://github.com/epics-motor/motorDeltaTau">motorDeltaTau</a>
</li>
<li>
Faulhaber: <a href="https://github.com/epics-motor/motorFaulhaber">motorFaulhaber</a>
</li>
<li>
Hytec: <a href="https://github.com/epics-motor/motorHytec">motorHytec</a>
</li>
<li>
Kohzu: <a href="https://github.com/epics-motor/motorKohzu">motorKohzu</a>
</li>
<li>
Mclennan: <a href="https://github.com/epics-motor/motorMclennan">motorMclennan</a>
</li>
<li>
Micos: <a href="https://github.com/epics-motor/motorMicos">motorMicos</a>
</li>
<li>
MicroMo: <a href="https://github.com/epics-motor/motorMicroMo">motorMicroMo</a>
</li>
<li>
New Focus: <a href="https://github.com/epics-motor/motorNewFocus">motorNewFocus</a>
</li>
<li>
Newport: <a href="https://github.com/epics-motor/motorNewport">motorNewport</a>
</li>
<li>
Micronix: <a href="https://github.com/epics-motor/motorMicronix">motorMicronix</a>
</li>
<li>
nPoint: <a href="https://github.com/epics-motor/motorNPoint">motorNPoint</a>
</li>
<li>
Oregon Micro Systems: <a href="https://github.com/epics-motor/motorOms">motorOms</a> &amp; <a href="https://github.com/epics-motor/motorOmsAsyn">motorOmsAsyn</a>
</li>
<li>
Parker Hannifin: <a href="https://github.com/epics-motor/motorParker">motorParker</a>
</li>
<LI>
Physik Instrumente (PI) GmbH &amp; Co. models: <a href="https://github.com/epics-motor/motorPI">motorPI</a> &amp; <a href="https://github.com/epics-motor/motorPIGCS2">motorPIGCS2</a>
</LI>
<li>
Phytron: <a href="https://github.com/epics-motor/motorPhytron">motorPhytron</a>
</li>
<li>
piezosystem jena GmbH: <a href="https://github.com/epics-motor/motorPiJena">motorPiJena</a>
</li>
<li>
Schneider Electric (formally IMS): <a href="https://github.com/epics-motor/motorIms">motorIms</a>
</li>
<li>
SmarAct GmbH: <a href="https://github.com/epics-motor/motorSmarAct">motorSmarAct</a>
</li>
<li>
Spectra-Physics: <a href="https://github.com/epics-motor/motorOriel">motorOriel</a>
</li>
<li>
Thorlabs: <a href="https://github.com/epics-motor/motorThorLabs">motorThorLabs</a>
</li>
</ul>
<p>
The motor record also supports the following software-based motor drivers (in addition to Soft
Channel support):
</p>
<ul>
<li>
Pro-Dex, Inc. (Oregon Micro Systems) models; VME8/44/58, VS4, VX2, PC68/78, MAXv and MAXnet.
Simulated: <a href="https://github.com/epics-motor/motorMotorSim">motorMotorSim</a>
</li>
<li>
Newport models MM3000, MM4000/5/6, PM500, ESP300/301/100, XPSC8, HXP100-ELEC, AG_CONEX and AG_UC.
Lua Script: <a href="https://github.com/epics-motor/motorScriptMotor">motorScriptMotor</a>
</li>
<li>
Schneider Electric (formally IMS) models IM483, MDrive and MForce.
</li>
<li>
Advanced Control Systems, Corp. model MCB-4B.
</li>
<li>
Mclennan models PM304 and PM600.
</li>
<LI>
Physik Instrumente (PI) GmbH & Co. models; C-630/662/663/844/848/862/863, E-516/517/710/816, micos SMC hydra and all GCS2 (General Command Set) compatible controllers.
</LI>
<li>
MicroMo model MVP 2001 B02.
</li>
<li>
Micos model MoCo dc controller, SMC hydra controller.
</li>
<li>
Faulhaber MCDC2805 servo controller.
</li>
<li>
Parker Hannifin, Compumotor Division, 6K Series controllers.
</li>
<li>
New Focus, models; 8750, 8752, &amp 874x.
</li>
<li>
ACS Motion Control, SPiiPlus model.
</li>
<li>
Spectra-Physics, Encoder Mike Controller, Model 18011.
</li>
<li>
Thorlabs, Piezo Controller, Model MDT695.
</li>
<li>
Animatics Corporation SmartMotor.
</li>
<li>
piezosystem jena GmbH EDS data interface module.
</li>
<li>
Kohzu SC-200, SC-400, SC-800 stepper motor controllers.
</li>
<li>
attocube systems AG ANC150 Piezo Step Controller.
</li>
<li>
Aerotech A3200, Ensemble and Soloist controllers.
</li>
<li>
Hytec 8601 Industry Pack based 4-channel Stepper Motor Controller.
</li>
<li>
nPoint C300 piezo controller
</li>
<li>
Micronix MMC-100 and MMC-200
</li>
<li>
SmarAct GmbH Modular Control System (MCS) Controller.
</li>
<li>
Phytron I1AM01 Stepper Motor Controller.
</li>
<li>
AMCI ANG1 Stepper Motor Controller/Driver, ANF1E/ANF1/ANF2E/ANF2 Stepper Motor Controllers.
MX: <a href="https://github.com/epics-motor/motorMXmotor">motorMXmotor</a>
</li>
</ul>
<p>
The record maintains two coordinate systems for motor position ("user" and "dial
" coordinates); displays drive and readback values; enforces limits to motor
motion and maintains those limits in both coordinate systems; displays the
@@ -131,6 +152,7 @@ system. The record also supports "tweak", "jog", and "home" motions, and
supports both absolute and relative motions in user coordinates. Two "stop"
switches are provided: a simple one for use by other records and by channel-access
clients, and a more versatile one for interactive use.
</p>
<p>
Except where specified otherwise, fields associated with the motor position and
its derivatives take values in user-specified "engineering units", such as
@@ -441,7 +463,7 @@ below.
<td><a href="#Fields_motion">FRAC</a></td>
<td>R/W</td>
<td>Move Fraction</td>
<td>DOUBLE</td>
<td>FLOAT</td>
<td><br>
</td>
</tr>
@@ -662,7 +684,7 @@ below.
<td><a href="#Fields_private">LRVL</a></td>
<td>R</td>
<td>Last Raw Des Val</td>
<td>DOUBLE</td>
<td>LONG</td>
<td><br>
</td>
</tr>
@@ -875,6 +897,22 @@ below.
<td><br>
</td>
</tr>
<tr>
<td><a href="#Fields_res">RSTM</a></td>
<td>R/W</td>
<td>Restore Mode</td>
<td>RECCHOICE</td>
<td>(0:"Never", 1:"Always", 2:"NearZero", 3:"Conditional")<br>
</td>
</tr>
<tr>
<td><a href="#Fields_motion">SPDB</a></td>
<td>R/W</td>
<td>Set Point Deadband (EGU)</td>
<td>DOUBLE</td>
<td><br>
</td>
</tr>
<tr>
<td><a href="#Fields_link">RDBL</a></td>
<td>R</td>
@@ -895,7 +933,7 @@ below.
<td><a href="#Fields_status">REP</a></td>
<td>R</td>
<td>Raw Encoder Position</td>
<td>DOUBLE</td>
<td>LONG</td>
<td><br>
</td>
</tr>
@@ -951,7 +989,7 @@ below.
<td><a href="#Fields_status">RMP</a></td>
<td>R</td>
<td>Raw Motor Position</td>
<td>DOUBLE</td>
<td>LONG</td>
<td><br>
</td>
</tr>
@@ -959,7 +997,7 @@ below.
<td><a href="#Fields_status">RRBV</a></td>
<td>R</td>
<td>Raw Readback Value</td>
<td>DOUBLE</td>
<td>LONG</td>
<td><br>
</td>
</tr>
@@ -983,7 +1021,7 @@ below.
<td><a href="#Fields_drive">RVAL</a></td>
<td>R/W*</td>
<td>Raw Desired Value</td>
<td>DOUBLE</td>
<td>LONG</td>
<td><br>
</td>
</tr>
@@ -1179,7 +1217,7 @@ below.
<td><a href="#Fields_misc">VERS</a></td>
<td>R</td>
<td>Code Version</td>
<td>DOUBLE</td>
<td>FLOAT</td>
<td>e.g., "1.95"</td>
</tr>
<tr>
@@ -1798,7 +1836,7 @@ below.
<td>FRAC</td>
<td>R/W</td>
<td>Move Fraction</td>
<td>DOUBLE</td>
<td>FLOAT</td>
</tr>
<tr>
<td colspan="5">This field supports closed-loop control of pathological devices
@@ -1839,6 +1877,16 @@ below.
performed (see RTRY).&nbsp;</td>
</tr>
<tr valign="top">
<td>SPDB</td>
<td>R/W</td>
<td>Set Point Deadband (EGU)</td>
<td>DOUBLE</td>
<td>Before the motor is commanded a move, a check is done if the move is to small.
It is to small when the distance is less the the step size defined in MRES.
When a bigger deadband is wanted than MRES, set the value into SPDB.
</td>
</tr>
<tr valign="top">
<td>RTRY</td>
<td>R/W</td>
<td>Max retry count</td>
@@ -2387,7 +2435,7 @@ below.
<td>RVAL</td>
<td>R/W*</td>
<td>Raw Desired Value</td>
<td>DOUBLE</td>
<td>LONG</td>
<td>This is the desired position in raw coordinates. When this field is written
to, VAL and DVAL will be changed correspondingly, and the motor will move (with
backlash takeout if BDST is nonzero) to the newly written position.&nbsp;</td>
@@ -2494,7 +2542,7 @@ below.
<td>RRBV</td>
<td>R</td>
<td>Raw Readback Value</td>
<td>DOUBLE</td>
<td>LONG</td>
<td>The current position of the motor, encoder, or readback link, as received
from whatever source has been selected to provide position information. The
units associated with this field depend on the source.&nbsp;</td>
@@ -2503,7 +2551,7 @@ below.
<td>RMP</td>
<td>R</td>
<td>Raw Motor Position</td>
<td>DOUBLE</td>
<td>LONG</td>
<td>The contents of the hardware's step-count register. This field contains the
same information as the dial value, but in steps, rather than in engineering
units.&nbsp;</td>
@@ -2512,7 +2560,7 @@ below.
<td>REP</td>
<td>R</td>
<td>Raw Encoder Position</td>
<td>DOUBLE</td>
<td>LONG</td>
<td>The contents of the hardware's encoder-count register. Ideally, this field
contains the same information as the dial value, but in encoder counts, rather
than in engineering units.&nbsp;</td>
@@ -2913,7 +2961,7 @@ below.
<td>VERS</td>
<td>R</td>
<td>Code Version</td>
<td>DOUBLE</td>
<td>FLOAT</td>
<td>Version number of the recMotor.c code.</td>
</tr>
<tr valign="top">
@@ -3147,7 +3195,7 @@ below.
<td>LRVL</td>
<td>R</td>
<td>Last Raw Des Val</td>
<td>DOUBLE</td>
<td>LONG</td>
</tr>
<tr valign="top">
<td>LRLV</td>
@@ -3204,20 +3252,14 @@ below.
<a name="Files"></a>
</p>
<h2>Files, device support</h2> The following table briefly describes all of the
files required to implement and use the motor record. The reader is assumed to
be familiar with the <a href="http://www.aps.anl.gov/asd/controls/epics/EpicsDocumentation/WWWPages/EpicsDocs/AppDevManuals/AppSrcRelControl/AppSRControl.html">EPICS
Application Source/Release Control document</a> which describes how to build an
EPICS application tree into which these files are to be placed, and how to run
"makesdr" and "gnumake" to build the record support. These files can all be
obtained from the <a href="http://www.aps.anl.gov/xfd/WWW/xfd/SoftDist/Welcome.html">EPICS
Software Distribution</a> (in the <a href="http://www.aps.anl.gov/xfd/WWW/xfd/SoftDist/Welcome.html#Custom_EPICS">custom-software
section</a> ).
<h2>Files</h2>
<p>
The following tables briefly describe some of the files in the motor module.<br>
</p>
<table border="1" cellpadding="5">
<tbody>
<tr>
<th colspan="2">SOURCE CODE <br>
files to be placed in <tt>&amp;lttop&gt;/&amp;ltapp&amp;gtApp/src/</tt></th>
<th colspan="2">SOURCE CODE</th>
</tr>
<tr valign="top">
<td>motorRecord.dbd</td>
@@ -3269,134 +3311,6 @@ section</a> ).
<td><br>
</td>
</tr>
<tr>
<td>devOmsCom.c</td>
<td>Device support common to all Oregon Micro Systems device drivers.</td>
</tr>
<tr>
<td>devOmsCom.h</td>
<td>Device support header file common to all Oregon Micro Systems device drivers.</td>
</tr>
<tr>
<td>drvOmsCom.h</td>
<td>Driver support header file common to all Oregon Micro Systems device drivers.</td>
</tr>
<tr>
<td><br>
</td>
<td>NOTE: The above files are required for any and all Oregon Micro Systems
device drivers.</td>
</tr>
<tr>
<td><br>
</td>
<td><br>
</td>
</tr>
<tr valign="top">
<td>devOms.c</td>
<td>Device support for Oregon Micro Systems VME8 and VME44 series boards</td>
</tr>
<tr valign="top">
<td>drvOms.c</td>
<td>Driver for Oregon Micro Systems VME8 and VME44 series boards</td>
</tr>
<tr valign="top">
<td>drvOms.h</td>
<td>Header included by devOms.c and drvOms.c</td>
</tr>
<tr>
<td><br>
</td>
<td><br>
</td>
</tr>
<tr valign="top">
<td>devOms58.c</td>
<td>Device support for Oregon Micro Systems VME58 series boards</td>
</tr>
<tr valign="top">
<td>drvOms58.c</td>
<td>Driver for Oregon Micro Systems VME58 series boards</td>
</tr>
<tr valign="top">
<td>drvOms58.h</td>
<td>Header included by devOms58.c and drvOms58.c</td>
</tr>
<tr>
<td><br>
</td>
<td><br>
</td>
</tr>
<tr valign="top">
<td>devV544.c</td>
<td>Device support for Highland Technology boards.</td>
</tr>
<tr valign="top">
<td>drvV544.c</td>
<td>Driver for Highland Technology boards.</td>
</tr>
<tr valign="top">
<td>drvV544.h</td>
<td>Header included by devV544.c and drvV544.c</td>
</tr>
<tr>
<td><br>
</td>
<td><br>
</td>
</tr>
<tr>
<td>drvMMCom.h</td>
<td>Common header included by all Newport Motion Master device drivers.</td>
</tr>
<tr>
<td><br>
</td>
<td>NOTE: The above files are required for any and all Newport Motion Master
device drivers.</td>
</tr>
<tr>
<td>devMM3000.c</td>
<td>Device support for Newport MM3000.</td>
</tr>
<tr>
<td>drvMM3000.c</td>
<td>Driver for Newport MM3000.</td>
</tr>
<tr>
<td>devMM4000.c</td>
<td>Device support for Newport MM4000/40005.</td>
</tr>
<tr>
<td>drvMM4000.c</td>
<td>Driver for Newport MM4000/40005.</td>
</tr>
<tr>
<td>devPM500.c</td>
<td>Device support for Newport PM500.</td>
</tr>
<tr>
<td>drvPM500.c</td>
<td>Driver for Newport PM500.</td>
</tr>
<tr>
<td>devESP300.c<br>
</td>
<td>Device support for Newport ESP300.</td>
</tr>
<tr>
<td valign="top">drvESP300.c<br>
</td>
<td>Driver for Newport ESP300.</td>
</tr>
<tr>
<td><br>
</td>
<td><br>
</td>
</tr>
<tr>
<td>devSoft.c</td>
<td>Soft Channel device support.</td>
@@ -3412,68 +3326,13 @@ section</a> ).
<td>devSoft.h</td>
<td>Header included by devSoft.c and devSoftAux.c</td>
</tr>
<tr>
<td><br>
</td>
<td><br>
</td>
</tr>
<tr>
<td>gpibIO.h</td>
<td>GPIB communication include file.</td>
</tr>
<tr>
<td>gpibIO.c</td>
<td>GPIB interface via Hideos.</td>
</tr>
<tr>
<td>serialIO.h</td>
<td>Serial communication include file.</td>
</tr>
<tr>
<td>serialIOMPF.cc</td>
<td>Serial communication interface via MPF.</td>
</tr>
<tr>
<td><br>
</td>
<td><br>
</td>
</tr>
<tr>
<td>drvIM483.h</td>
<td>Common header included by all IMS device drivers.</td>
</tr>
<tr>
<td>devIM483PL.c</td>
<td>Device support for IM483 in <i>party line</i> communication mode.</td>
</tr>
<tr>
<td>devIM483SM.c</td>
<td>Device support for IM483 in <i>single mode</i> communication mode.</td>
</tr>
<tr>
<td>drvIM483PL.c</td>
<td>Driver for IM483 in <i>party line</i> communication mode.</td>
</tr>
<tr>
<td>drvIM483SM.c</td>
<td>Driver for IM483 in <i>single mode </i>communication mode.</td>
</tr>
<tr>
<td><br>
</td>
<td><br>
</td>
</tr>
</tbody>
</table>
<table border="1" cellpadding="5">
<tbody>
<tr>
<th colspan="2">MEDM DISPLAY SCREENS <br>
files to be placed in <tt>&amp;lttop&gt;/&amp;ltapp&amp;gtApp/op/adl/</tt></th>
<th colspan="2">MEDM DISPLAY SCREENS</th>
</tr>
<tr valign="top">
<td>motorx.adl</td>
@@ -3516,151 +3375,10 @@ section</a> ).
<tbody>
<tr>
<th colspan="2"><br>
EPICS STARTUP FILES <br>
files to be placed in <tt>&amp;lttop&gt;/ioc/ioc&amp;ltname&gt;/</tt></th>
</tr>
<tr valign="top">
<td>st.cmdmv167&nbsp;</td>
<td>Startup script</td>
EPICS STARTUP FILES</th>
</tr>
<tr>
<td colspan="2">A sample startup script, containing excerpts relevant to motors,
is included in the distribution. Here is an annotated copy:
<pre>#######################################################################<br>
# vxWorks startup script to load and execute system (iocCore) software.</pre>
<b><font color="#ffffff">Load standard EPICS software</font></b>
<pre># the following should be loaded first - BEGIN<br>ld &lt; targetmv167/
iocCore<br>ld &lt; targetmv167/drvSup<br>ld &lt; targetmv167/devSup<br>ld &lt;
targetmv167/recSup<br># the following should be loaded first - END</pre>
<b><font color="#ffffff">Load custom EPICS software (including motor support)</font></b>
<pre>ld &lt; ../../stdApp/src/O.mv167/stdlib.o</pre>
<b><font color="#ffffff">Motor-related debug switches&nbsp;</font></b>
<pre>recMotordebug = 0<br><br>#OMS vme8/vme44 debug switches<br>devOMSdebug = 0<br>
drvOMSdebug = 0<br><br>#OMS vme58 debug switches<br>devOms58debug = 0<br>
drvOms58debug = 0<br><br>#Highland Technology V544 debug switches<br>devV544ebug
= 0<br>drvV544debug = 0</pre>
<b><font color="#ffffff">Motor-related databases&nbsp;</font></b>
<pre># load this before loading any databases<br>dbLoad "../../default.dctsdr"<br><br>
#allstop<br>dbLoadRecords("../../stdApp/gDb/allstop.db","P=tmm:")<br>#motors<br>
dbLoadRecords("../../stdApp/gDb/m16.db","P=tmm:")</pre>
<b><font color="#ffffff">Specify motor-controller board address, interrupt
vector, etc.</font></b>
<table border="1" cellpadding="5">
<tbody>
<TR>
<TD colspan="2"><TT>&nbsp; omsSetup(nCards, baseAddress, intVectBase,
intLevel, pollRate)</TT> <BR>
<TT>oms58Setup(nCards, baseAddress, intVectBase, intLevel, pollRate)</TT> <BR>
<P>
<TT>MM3000Setup(nCards, pollRate)</TT> <BR>
<TT>MM3000Config(card#, portName, GPIB#)</TT>
</P>
<P>
<TT>MM4000Setup(nCards, pollRate)</TT> <BR>
<TT>MM4000Config(card#, portName, GPIB#)</TT>
</P>
<P>
<TT>IM483SMSetup(nCards, pollRate)&nbsp;</TT> <BR>
<TT>IM483SMConfig(card#, portName)&nbsp;</TT>
</P>
<P>
<TT>IM483PLSetup(nCommNet, pollRate)&nbsp;</TT> <BR>
<TT>IM483PLConfig(CommNet#, portName)&nbsp;</TT> <BR>
</P>
<P>
ESP300Setup(<TT>nCards, pollRate</TT>)<BR>
ESP300Config(<TT>card#, portName, GPIB#</TT>)<BR>
<BR>
<BR>
</P>
</TD>
</TR>
<tr valign="top">
<td>nCards</td>
<td>the number of cards or controllers; may be less, but not greater than this
value.</td>
</tr>
<tr>
<td>nCommNet</td>
<td>the number of Communication networks&nbsp; (e.g., the number of RS-422
networks for a IM483PL device).</td>
</tr>
<tr valign="top">
<td>baseAddress</td>
<td>the base address of the first card of a series. This must agree with address
jumpers on the actual card(s).
<p>
OMS VME8, VME44, and VMEX cards are all of one series, with a base address in
the short address space, on a 16-byte (0x10) boundary. (I.e., these cards
require 16 bytes each, and must all be addressed contiguously as, e.g., 0xFC00,
0xFC10).
</p>
<p>
OMS VME58-x cards are in their own series, also in the short address space, on
a 4k-byte (0x1000) boundary.
</p>
<p>
Highland Technology V544 cards are in their own series, in the short address
space, on a 128-byte (0x80) boundary.
</p>
</td>
</tr>
<tr valign="top">
<td>intVectBase</td>
<td>the interrupt vector that will be loaded into the first card of a series.
Succeeding cards will be loaded with intVectBase+1, intVectBase+2, etc. Set to "0
" to disable interrupt generation; otherwise, stay in the range [64..255].</td>
</tr>
<tr valign="top">
<td>intLevel</td>
<td>the VME-interrupt level (in [1..6]) the cards will use. This must agree
with jumper settings on the cards.</td>
</tr>
<tr valign="top">
<td>pollRate</td>
<td>the rate (in Hz.) at which the driver will interrogate a card when one of
its motors is moving. This is also the rate at which channel-access monitors
will be posted; to avoid saturating the network with motor-readback information,
don't set pollRate much higher than 10 Hz. pollRate must be in the range [1..60].</td>
</tr>
<tr>
<td>portName</td>
<td>ASYN port name.</td>
</tr>
<tr>
<td valign="top">link<br>
</td>
<td valign="top">GPIB link or MPF server CPU location<br>
</td>
</tr>
<tr>
<td valign="top">GPIB#<br>
</td>
<td valign="top">GPIB address.<br>
</td>
</tr>
</tbody>
</table>
<P>
# OMS VME8, VME44, VMEX driver setup parameters:<BR>omsSetup(5, 0xFC00, 180, 5,
10)<BR><BR># OMS VME58 driver setup parameters:<BR>oms58Setup(5, 0x2000, 190, 5,
10)
</P>
<P>#Start EPICS<BR>iocInit</P>
<td colspan="2">Example startup scripts can be found in the example IOCs in the <a href="https://github.com/epics-motor">driver modules</a>
</td>
</tr>
@@ -3670,15 +3388,11 @@ section</a> ).
<table border="1" cellpadding="5">
<tbody>
<tr>
<th colspan="2">BACKUP/RESTORE (BURT) REQUEST FILES <br>
files to be placed in <tt>&amp;lttop&gt;/&amp;ltapp&amp;gtApp/op/burt/</tt></th>
<th colspan="2">BACKUP/RESTORE (BURT) REQUEST FILES</th>
</tr>
<tr valign="top">
<td>settings.req</td>
<td>sample request file to save settings of all motors. Edit this file,
supplying names of the motor records whose settings you want saved. (The sample
file also saves the states of other records in the sample database, m16.db, that
enable or disable the motor records.)</td>
<td>A file that could be created to save settings from multiple motors.</td>
</tr>
<tr valign="top">
<td>yyMotorSettings.req&nbsp;</td>
@@ -3687,8 +3401,7 @@ section</a> ).
</tr>
<tr valign="top">
<td>positions.req&nbsp;</td>
<td>sample request file to save positions of all motors. Edit this file,
supplying names of the motor records whose positions you want saved.</td>
<td>A file that could be created to save positions from multiple motors.</td>
</tr>
<tr valign="top">
<td>yyMotorPositions.req&nbsp;</td>
@@ -3927,6 +3640,6 @@ specific value (e.g., kV) that is not supported by the motor controller. <br>
<hr>
<address>Suggestions and comments to:</address> <br>
<a href="mailto:kmpeters@anl.gov">Kevin Peterson</a> : (kmpeters@anl.gov) <br>
Last modified: May 1, 2018
Last modified: 2020-05-14
</body>
</html>
+9 -3
View File
@@ -12,12 +12,18 @@
<body>
<div style="text-align: center">
<h1>
<b>Motor Record Version 6-10-1 Release Notice</b></h1>
<b>Motor Record Version 6-11 Release Notice</b></h1>
</div>
<div style="text-align: left">
<p>
See release notes on github: <a href="https://github.com/epics-modules/motor/releases/tag/R6-11">https://github.com/epics-modules/motor/releases/tag/R6-11</a>
</p>
</div>
<div style="text-align: center">
<h4>
Modifications to Existing Features</h4>
<h1>
<b>Motor Record Version 6-10-1 Release Notice</b></h1>
</div>
<div style="text-align: left">
Binary file not shown.
-6
View File
@@ -1,6 +0,0 @@
TOP = ..
include $(TOP)/configure/CONFIG
DIRS += $(wildcard *ioc*)
DIRS += $(wildcard as*)
include $(CONFIG)/RULES_DIRS
-8
View File
@@ -1,8 +0,0 @@
TOP = ../..
include $(TOP)/configure/CONFIG
ARCH = vxWorks-ppc32-debug
#!ARCH = linux-x86_64
TARGETS = cdCommands
TARGETS += envPaths
include $(TOP)/configure/RULES.ioc
@@ -1,8 +0,0 @@
file "$(MOTOR)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, C, S, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "X", "asynMotor", L1, 0, 0, 0, "X", mm, Pos, 100, 25, 1, 0, 0, 50, 0.0004, 5, 380, -10, ""}
{IOC:, 2, "Y", "asynMotor", L1, 1, 0, 0, "Y", mm, Pos, 100, 25, 1, 0, 0, 50, 0.0004, 5, 380, -10, ""}
}
@@ -1,46 +0,0 @@
# The is the ASYN example for communication to an Aerotech A3200
# "#!" marks lines that can be uncommented.
< envPaths
dbLoadDatabase("$(TOP)/dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("a3.asyn.motor.substitutions")
# Configure to use Ethernet
#############################################################################################
# #
# Replace the IP Address and Port on the next line with the IP/Port of your A3200 #
# #
#############################################################################################
drvAsynIPPortConfigure("L0","10.101.2.221:8001",0,0,0)
A3200AsynSetup(1) /* number of A3200 controllers in system. */
# Aerotech A3200 asyn motor driver configure parameters.
# (1) Controller number being configured
# (2) ASYN port name
# (3) ASYN address (GPIB only)
# (4) Number of axes to control
# (5) Task number to use for motion commands
# (6) Time to poll (msec) when an axis is in motion
# (7) Time to poll (msec) when an axis is idle. 0 for no polling
A3200AsynConfig(0, "L0", 0, 2, 1, 1000, 2500)
# Asyn-based Motor Record support
# (1) Asyn port
# (2) Driver name
# (3) Controller index
# (4) Max. number of axes
#!drvAsynMotorConfigure("MM4", "motorMM4000", 0, 4)
#!drvAsynMotorConfigure("ANC150","motorANC150", 0, 1)
drvAsynMotorConfigure("L1","motorA3200", 0, 2)
iocInit
# motorUtil (allstop & alldone)
motorUtilInit("IOC:")
-6
View File
@@ -1,6 +0,0 @@
TOP = ../..
include $(TOP)/configure/CONFIG
ARCH = linux-x86_64
TARGETS += envPaths
include $(TOP)/configure/RULES.ioc
@@ -1,8 +0,0 @@
file "$(MOTOR)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, C, S, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "X", "asynMotor", M0, 1, 0, 0, "X", counts, Pos, 100, 25, 1, 0, 0, 50, 1, 0, 0, 0, ""}
{IOC:, 2, "Y", "asynMotor", M0, 2, 0, 0, "Y", counts, Pos, 100, 25, 1, 0, 0, 50, 1, 0, 0, 0, ""}
}
@@ -1,67 +0,0 @@
#!../../bin/linux-x86_64/picoctl
## You may have to change picoctl to something else
## everywhere it appears in this file
< envPaths
epicsEnvSet("EPICS_CA_AUTO_ADDR_LIST", "NO")
epicsEnvSet("EPICS_CA_ADDR_LIST", "10.28.0.255")
epicsEnvSet("Sys", "Sys")
epicsEnvSet("Port", "P0")
epicsEnvSet("ControllerPort", "M0")
epicsEnvSet("MC", "MC:10")
epicsEnvSet("CT", "CT")
epicsEnvSet("IOC_PREFIX", "$(CT){IOC:MC10}")
epicsEnvSet("MC_PREFIX", "$(CT){$(MC)}")
cd ${TOP}
## Register all support components
dbLoadDatabase "dbd/picoctl.dbd"
picoctl_registerRecordDeviceDriver pdbbase
# Setup IP port for 8742
drvAsynIPPortConfigure("$(Port)", "10.28.2.111:23")
asynOctetSetInputEos("$(Port)",0,"\r\n")
asynOctetSetOutputEos("$(Port)",0,"\r")
#db asyn debug traces
asynSetTraceMask("$(Port)",-1,0x1)
asynSetTraceIOMask("$(Port)",-1,0x1)
# New Focus Picomotor Network Controller (model 87xx) configuration parameters:
# (1) IP asyn port name (string)
# (2) Controller asyn port name (string)
# (3) Number of axes
# (4) Moving poll period (ms)
# (5) Idle poll period (ms)
nf874xCreateController("$(ControllerPort)", "$(Port)", 4, 200, 1000)
## Load record instances
dbLoadTemplate("iocBoot/iocNewFocus874x/newfocus8742.asyn.motor.substitutions")
dbLoadRecords("${ASYN}/db/asynRecord.db", "P=$(MC_PREFIX),R=Asyn,PORT=$(Port),ADDR=,OMAX=80,IMAX=80")
## autosave/restore machinery
save_restoreSet_Debug(0)
save_restoreSet_IncompleteSetsOk(1)
save_restoreSet_DatedBackupFiles(1)
set_savefile_path("${TOP}/as","/save")
set_requestfile_path("${TOP}/as","/req")
set_pass0_restoreFile("info_positions.sav")
set_pass0_restoreFile("info_settings.sav")
set_pass1_restoreFile("info_settings.sav")
iocInit()
## more autosave/restore machinery
cd ${TOP}/as/req
makeAutosaveFiles()
create_monitor_set("info_positions.req", 5 , "")
create_monitor_set("info_settings.req", 15 , "")
-17
View File
@@ -1,17 +0,0 @@
d_spacing variable inline double "" "" 1 1 3.13555
Io device scaler soft_scaler "" "" 0 0 0 timer1 energy 101 ./i0.dat 0
It device scaler soft_scaler "" "" 0 0 0 timer1 energy 101 ./it.dat 0
#rls:m2 device motor soft_motor "" "" 250000 0 -20000000 20000000 0 -1 -1 5e-05 0 deg 10000 0 2000
energy device motor energy_motor "" "" 0 0 0 1e+08 0 -1 -1 1 0 eV rls:m1 d_spacing 0.017453
timer1 device timer soft_timer "" ""
#
# Newport test records
#
newport_rs232 interface rs232 tty "" "" 9600 8 N 1 N 0x0d 0x0d /dev/ttyb
newport interface generic mm4000 "" "" newport_rs232
rls:m1 device motor mm4000_motor "" "" 0 0 -1.0e38 1.0e38 0 -1 -1 1 0 deg newport 1
#
# IMS test records
#
#ims_rs232 interface rs232 tty "" "" 9600 8 N 1 N 0x0d0a 0x0d0a /dev/ttyS0
#rls:m3 device motor panther_hi "" "" 0 0 -10000000 10000000 0 -1 -1 1 0 steps ims_rs232 0 18340 2001 5 5 8 F 1 6 50 -1
-8
View File
@@ -1,8 +0,0 @@
TOP = ../..
include $(TOP)/configure/CONFIG
ARCH = vxWorks-68040
#!ARCH = vxWorks-ppc604_long
TARGETS = cdCommands
TARGETS += envPaths
include $(TOP)/configure/RULES.ioc
-29
View File
@@ -1,29 +0,0 @@
To build any examples;
- in <motor>/configure/RELEASE: EPICS_BASE must be defined and,
#!MOTOR=$(TOP) must be uncommented.
- in <motor>/Makefile: the following two lines must be uncommented;
#!DIRS := $(DIRS) $(filter-out $(DIRS), motorExApp)
#!DIRS := $(DIRS) $(filter-out $(DIRS), iocBoot)
To build the OMS example in this directory;
- in <motor>/motorApp/Makefile: #!DIRS += OmsSrc must be uncommented.
- in <motor>/motorExApp/Makefile: #!DIRS += NoAsyn must be uncommented.
- in <motor>/motorExApp/NoAsyn/Makefile: #!NoAsynVx_LIBS += oms must be
uncommented.
Finally, cd <motor>; gnumake clean uninstall; gnumake
To run the MX example, uncomment the following;
in <motor>/motorExApp/NoAsyn/Makefile: #NoAsyn_LIBS += MXmotor
in <motor>/motorExApp/NoAsyn/NoAsynInclude.dbd: #include "devMXmotor.dbd"
and rebuild.
Assuming the EPICS_HOST_ARCH environment variable is set correctly,
start the ioc from this directory by executing the following command.
../../bin/${EPICS_HOST_ARCH}/NoAsyn st.cmd.mx
-101
View File
@@ -1,101 +0,0 @@
8950 157555
8951 157823
8952 158170
8953 158333
8954 158463
8955 158458
8956 158788
8957 159070
8958 159189
8959 159292
8960 159053
8961 159275
8962 159347
8963 159396
8964 159627
8965 159326
8966 159460
8967 159690
8968 159627
8969 159682
8970 159745
8971 159840
8972 160053
8973 160313
8974 160410
8975 160762
8976 160887
8977 160988
8978 161028
8979 161064
8980 160984
8981 161161
8982 161015
8983 161069
8984 161088
8985 161018
8986 161200
8987 161327
8988 161337
8989 161322
8990 161497
8991 161496
8992 161410
8993 161410
8994 161614
8995 161683
8996 161831
8997 161831
8998 161877
8999 161999
9000 162046
9001 162095
9002 161911
9003 162190
9004 162038
9005 162164
9006 162293
9007 162129
9008 162230
9009 162170
9010 161890
9011 162286
9012 162331
9013 162317
9014 162374
9015 162483
9016 162509
9017 162320
9018 162310
9019 162430
9020 162345
9021 162376
9022 162439
9023 162552
9024 162582
9025 162625
9026 162761
9027 162845
9028 162663
9029 162692
9030 162701
9031 162561
9032 162617
9033 162586
9034 162531
9035 162564
9036 162557
9037 162583
9038 162535
9039 162504
9040 162304
9041 161609
9042 159694
9043 160016
9044 162222
9045 162759
9046 162825
9047 162820
9048 162698
9049 162699
9050 162860
-101
View File
@@ -1,101 +0,0 @@
8950 395527
8951 397385
8952 399842
8953 400917
8954 401645
8955 401494
8956 403659
8957 405675
8958 406268
8959 406722
8960 404554
8961 405881
8962 405794
8963 405550
8964 406522
8965 403507
8966 403562
8967 404049
8968 402105
8969 400442
8970 398177
8971 394713
8972 389458
8973 377355
8974 345928
8975 280021
8976 213430
8977 187933
8978 188234
8979 193119
8980 188754
8981 178281
8982 166890
8983 156640
8984 143264
8985 127337
8986 112287
8987 99609
8988 89420
8989 83563
8990 82755
8991 85219
8992 88971
8993 92543
8994 95141
8995 95149
8996 92518
8997 87593
8998 83236
8999 81763
9000 83340
9001 86828
9002 89978
9003 93541
9004 95689
9005 98596
9006 101057
9007 101874
9008 102134
9009 101552
9010 100100
9011 99666
9012 98004
9013 95900
9014 93743
9015 91861
9016 89868
9017 87733
9018 85903
9019 84462
9020 82911
9021 82220
9022 82327
9023 83211
9024 84657
9025 86522
9026 88822
9027 91046
9028 92728
9029 94292
9030 95520
9031 96048
9032 96604
9033 96630
9034 96310
9035 95917
9036 95300
9037 94749
9038 94274
9039 94140
9040 93972
9041 93150
9042 89742
9043 89947
9044 93355
9045 93570
9046 92953
9047 92474
9048 92023
9049 91978
9050 92163
-14
View File
@@ -1,14 +0,0 @@
file "$(MOTOR)/db/basic_motor.db"
{
pattern
{P, N, M, DTYP, C, S, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "PMAC", 0, 0, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 2, "m$(N)", "PMAC", 0, 1, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 3, "m$(N)", "PMAC", 0, 2, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 4, "m$(N)", "PMAC", 0, 3, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 5, "m$(N)", "PMAC", 0, 4, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 6, "m$(N)", "PMAC", 0, 5, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 7, "m$(N)", "PMAC", 0, 6, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 8, "m$(N)", "PMAC", 0, 7, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 9, "m$(N)", "PMAC", 0, 8, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
}
-85
View File
@@ -1,85 +0,0 @@
# This example if for OMS VME8/44 controllers. Since OMS controllers
# communicate across the VME backplane, this example does not require
# ASYN.
# "#!" marks lines that can be uncommented.
#The following must be added for many board support packages
#!cd "... IOC st.cmd complete directory path ... "
< cdCommands
#!< ../nfsCommands
cd topbin
ld < NoAsynVx.munch
cd startup
dbLoadDatabase("$(TOP)/dbd/NoAsynVx.dbd")
NoAsynVx_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("motor.substitutions")
dbLoadRecords("$(MOTOR)/db/motorUtil.db", "P=IOC:")
#!dbLoadRecords("$(TOP)/motorApp/Db/SoftMotorEx.db","user=IOC,motor=m1", startup)
# OMS VME driver setup parameters:
# (1)cards, (2)base address(short, 16-byte boundary),
# (3)interrupt vector (0=disable or 64 - 255), (4)interrupt level (1 - 6),
# (5)motor task polling rate (min=1Hz,max=60Hz)
#!omsSetup(1, 0xFC00, 180, 5, 10)
#!drvOMSdebug = 4
# OMS VME58 driver setup parameters:
# (1)cards, (2)base address(short, 4k boundary),
# (3)interrupt vector (0=disable or 64 - 255), (4)interrupt level (1 - 6),
# (5)motor task polling rate (min=1Hz,max=60Hz)
#!oms58Setup(1, 0x1000, 190, 5, 10)
#!drvOms58debug = 4
# OMS MAXv driver setup parameters:
# (1)number of cards in array.
# (2)VME Address Space - A(16,24,32).
# (3)Base Address (see README file).
# (4)interrupt vector (0=disable or 64 - 255).
# (5)interrupt level (2 - 6).
# (6)motor task polling rate (min=1Hz,max=60Hz).
#!MAXvSetup(1, 16, 0xF000, 200, 5, 10)
#!MAXvSetup(1, 24, 0xFF0000, 200, 5, 10)
#!MAXvSetup(1, 32, 0xFF000000, 200, 5, 10)
#!drvMAXvdebug=4
# OMS MAXv configuration string:
# (1) number of card being configured (0-14).
# (2) configuration string; axis type (PSO/PSE/PSM) MUST be set here.
# For example, set which TTL signal level defines
# an active limit switch. Set X,Y,Z,T to active low and set U,V,R,S
# to active high. Set all axes to open-loop stepper (PSO). See MAXv
# User's Manual for LTL/LTH and PSO/PSE/PSM commands.
# (3) SSI based absolute encoder bit flag. Bit #0 for Axis X, bit #1 for
# Axis Y, etc.. Set a bit flag to '1' for absolute encoder values; '0'
# for the standard incremental encoder values.
# (4) SSI based absolute encoder grey code flags (0/1 - yes/no, 0x12 -> UY)
#!str = malloc(200);
#!strcpy str, "AA; LMH,H,H,H,H,H,H,H;"
#!strcat str, "AX LTH PSO; AY LTH PSO; AZ LTL PSO; AT LTL PSO; AU LTL PSO; AV LTL PSO; AR LTL PSO; AS LTL PSO;"
#!MAXvConfig(0, str, 0, 0)
#!free(str)
# PMAC VME driver setup parameters:
# (1)cards, (2) VME Address Type (24,32)
# (3)Mailbox base address, (4)DPRAM base address,
# (5)interrupt vector (0=disable or 64 - 255),
# (6)interrupt level (1 - 6),
# (7)motor task polling rate (min=1Hz,max=60Hz)
#!PmacSetup(1, 32, 0xB07FA000, 0xB0700000, 0, 5, 2)
#!PmacSetup(1, 24, 0x7FA000, 0x700000, 0, 5, 2)
#!drvPmacdebug = 4
iocInit
# motorUtil (allstop & alldone)
motorUtilInit("IOC:")
-13
View File
@@ -1,13 +0,0 @@
# This example if for running a motor record that uses the MX device
# driver support on a Unix host. This example does not require Asyn.
# Start errlog Task before any possible error messsage to prevent
# erroneous "Interrupted system call" message on Linux OS host.
errlogInit(0)
dbLoadDatabase("../../dbd/NoAsyn.dbd",0,0)
registerRecordDeviceDriver(pdbbase)
dbLoadRecords("../../db/NoAsyn_MX.db","user=rls")
MXmotorSetup(1, "MXexample.dat", 10)
iocInit()
-9
View File
@@ -1,9 +0,0 @@
TOP = ../..
include $(TOP)/configure/CONFIG
ARCH = linux-x86
#ARCH = linux-x86_64
#ARCH = vxWorks-ppc604
TARGETS = cdCommands
TARGETS += envPaths
include $(TOP)/configure/RULES.ioc
-24
View File
@@ -1,24 +0,0 @@
To build any examples;
- in <motor>/configure/RELEASE: EPICS_BASE and MOTOR must be defined.
- in <motor>/Makefile: the following three lines must be uncommented;
#!DIRS += motorExApp iocBoot
#!motorExApp_DEPEND_DIRS = motorApp
#!iocBoot_DEPEND_DIRS = motorExApp
To build this simulation example;
- in <motor>/configure/RELEASE: ASYN must be defined.
- in <motor>/iocBoot/iocSim/Makefile set the target architecture
Finally, cd <motor>; gnumake clean uninstall; gnumake
To run this simulation example on a Unix OS;
- Set the EPICS_HOST_ARCH environment variable correctly.
- Edit the st.cmd.unix file for either sun or linux.
- Start the ioc from this directory by executing the following command.
../../bin/${EPICS_HOST_ARCH}/WithAsyn st.cmd.unix
-14
View File
@@ -1,14 +0,0 @@
file "../../db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", motorSim1, 0, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 2, "m$(N)", "asynMotor", motorSim1, 1, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 3, "m$(N)", "asynMotor", motorSim1, 2, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 4, "m$(N)", "asynMotor", motorSim1, 3, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 5, "m$(N)", "asynMotor", motorSim2, 0, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 6, "m$(N)", "asynMotor", motorSim2, 1, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 7, "m$(N)", "asynMotor", motorSim2, 2, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 8, "m$(N)", "asynMotor", motorSim2, 3, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
}
-27
View File
@@ -1,27 +0,0 @@
# The is the ASYN example for communication to 4 simulated motors
# "#!" marks lines that can be uncommented.
# The following must be added for many board support packages
#!cd "... IOC st.cmd complete directory path ... "
< cdCommands
#!< ../nfsCommands
cd topbin
# If the VxWorks kernel was built using the project facility, the following must
# be added before any C++ code is loaded (see SPR #28980).
sysCplusEnable=1
ld(0,0,"WithAsynVx.munch")
cd startup
dbLoadDatabase("$(TOP)/dbd/WithAsynVx.dbd")
WithAsynVx_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("motor.substitutions")
# Create simulated motors: ( start card , start axis , low limit, high limit, home posn, # cards, # axes to setup)
motorSimCreate( 0, 0, -32000, 32000, 0, 1, 4 )
# Setup the Asyn layer (portname, low-level driver drvet name, card, number of axes on card)
drvAsynMotorConfigure("motorSim1", "motorSim", 0, 4)
iocInit
-24
View File
@@ -1,24 +0,0 @@
# The is the ASYN example for communication to 4 simulated motors
# "#!" marks lines that can be uncommented.
< envPaths
dbLoadDatabase("$(TOP)/dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("motor.substitutions")
# Create simulated motors: ( start card , start axis , low limit, high limit, home posn, # cards, # axes to setup)
motorSimCreate( 0, 0, -32000, 32000, 0, 1, 4 )
# Setup the Asyn layer (portname, low-level driver drvet name, card, number of axes on card)
drvAsynMotorConfigure("motorSim1", "motorSim", 0, 4)
motorSimCreateController("motorSim2", 8)
#asynSetTraceIOMask("motorSim2", 0, 4)
#asynSetTraceMask("motorSim2", 0, 255)
# motorSimConfigAxis(port, axis, lowLimit, highLimit, home, start)
motorSimConfigAxis("motorSim2", 0, 20000, -20000, 500, 0)
motorSimConfigAxis("motorSim2", 1, 20000, -20000, 1500, 0)
motorSimConfigAxis("motorSim2", 2, 20000, -20000, 2500, 0)
motorSimConfigAxis("motorSim2", 3, 20000, -20000, 3000, 0)
iocInit
-14
View File
@@ -1,14 +0,0 @@
# The is the ASYN example for communication to 4 simulated motors
# "#!" marks lines that can be uncommented.
< envPaths
dbLoadDatabase("$(TOP)/dbd/WithMPFWin32.dbd")
WithMPFWin32_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("motor.substitutions")
# Create simulated motors: ( start card , start axis , low limit, high limit, home posn, # cards, # axes to setup)
motorSimCreate( 0, 0, -32000, 32000, 0, 1, 4 )
# Setup the Asyn layer (portname, low-level driver drvet name, card, number of axes on card)
drvAsynMotorConfigure("motorSim1", "motorSim", 0, 4)
iocInit
-1
View File
@@ -1 +0,0 @@
medm -x -macro "P=IOC:, M1=m1, M2=m2, M3=m3, M4=m4, M5=m5, M6=m6, M7=m7, M8=m8" motor8x.adl &
-11
View File
@@ -1,11 +0,0 @@
TOP = ../..
include $(TOP)/configure/CONFIG
ARCH = linux-x86
#ARCH = win32-x86
#ARCH = vxWorks-ppc604
#ARCH = windows-x64
TARGETS = cdCommands
TARGETS += envPaths
TARGETS += dllPath.bat
include $(TOP)/configure/RULES.ioc
-22
View File
@@ -1,22 +0,0 @@
To build any examples;
- in <motor>/configure/RELEASE: EPICS_BASE and MOTOR must be defined.
- in <motor>/Makefile: the following two lines must be uncommented;
#DIRS := $(DIRS) $(filter-out $(DIRS), motorExApp)
#DIRS := $(DIRS) $(filter-out $(DIRS), iocBoot)
To build the iocWithAsyn example;
- in <motor>/configure/RELEASE: IPAC and ASYN must be defined.
Finally, cd <motor>; gnumake clean uninstall; gnumake
To run this Newport MM4000/5, "asyn" example on a Unix OS;
- Set the EPICS_HOST_ARCH environment variable correctly.
- Edit the st.cmd.unix file for either sun or linux.
- Start the ioc from this directory by executing the following command.
../../bin/${EPICS_HOST_ARCH}/WithAsyn st.cmd.unix
-118
View File
@@ -1,118 +0,0 @@
file "$(TOP)/db/XPSAuxLi.db"
{
pattern
{P, R, PORT, CHAN, SCAN}
{IOC:, XPSAux1Li, XPS_AUX1, 0, "I/O Intr"}
{IOC:, XPSAux2Li, XPS_AUX1, 1, "I/O Intr"}
{IOC:, XPSAux3Li, XPS_AUX1, 2, "I/O Intr"}
{IOC:, XPSAux4Li, XPS_AUX1, 3, "I/O Intr"}
}
file "$(TOP)/db/XPSAuxBi.db"
{
pattern
{P, R, PORT, CHAN, MASK, SCAN}
{IOC:, XPSAux1Bi0, XPS_AUX1, 0, 0x000001, "I/O Intr"}
{IOC:, XPSAux1Bi1, XPS_AUX1, 0, 0x000002, "I/O Intr"}
{IOC:, XPSAux1Bi2, XPS_AUX1, 0, 0x000004, "I/O Intr"}
{IOC:, XPSAux1Bi3, XPS_AUX1, 0, 0x000008, "I/O Intr"}
{IOC:, XPSAux1Bi4, XPS_AUX1, 0, 0x000010, "I/O Intr"}
{IOC:, XPSAux1Bi5, XPS_AUX1, 0, 0x000020, "I/O Intr"}
{IOC:, XPSAux1Bi6, XPS_AUX1, 0, 0x000040, "I/O Intr"}
{IOC:, XPSAux1Bi7, XPS_AUX1, 0, 0x000080, "I/O Intr"}
{IOC:, XPSAux2Bi0, XPS_AUX1, 1, 0x000001, "I/O Intr"}
{IOC:, XPSAux2Bi1, XPS_AUX1, 1, 0x000002, "I/O Intr"}
{IOC:, XPSAux2Bi2, XPS_AUX1, 1, 0x000004, "I/O Intr"}
{IOC:, XPSAux2Bi3, XPS_AUX1, 1, 0x000008, "I/O Intr"}
{IOC:, XPSAux2Bi4, XPS_AUX1, 1, 0x000010, "I/O Intr"}
{IOC:, XPSAux2Bi5, XPS_AUX1, 1, 0x000020, "I/O Intr"}
{IOC:, XPSAux3Bi0, XPS_AUX1, 2, 0x000001, "I/O Intr"}
{IOC:, XPSAux3Bi1, XPS_AUX1, 2, 0x000002, "I/O Intr"}
{IOC:, XPSAux3Bi2, XPS_AUX1, 2, 0x000004, "I/O Intr"}
{IOC:, XPSAux3Bi3, XPS_AUX1, 2, 0x000008, "I/O Intr"}
{IOC:, XPSAux3Bi4, XPS_AUX1, 2, 0x000010, "I/O Intr"}
{IOC:, XPSAux3Bi5, XPS_AUX1, 2, 0x000020, "I/O Intr"}
{IOC:, XPSAux4Bi0, XPS_AUX1, 3, 0x000001, "I/O Intr"}
{IOC:, XPSAux4Bi1, XPS_AUX1, 3, 0x000002, "I/O Intr"}
{IOC:, XPSAux4Bi2, XPS_AUX1, 3, 0x000004, "I/O Intr"}
{IOC:, XPSAux4Bi3, XPS_AUX1, 3, 0x000008, "I/O Intr"}
{IOC:, XPSAux4Bi4, XPS_AUX1, 3, 0x000010, "I/O Intr"}
{IOC:, XPSAux4Bi5, XPS_AUX1, 3, 0x000020, "I/O Intr"}
{IOC:, XPSAux4Bi6, XPS_AUX1, 3, 0x000040, "I/O Intr"}
{IOC:, XPSAux4Bi7, XPS_AUX1, 3, 0x000080, "I/O Intr"}
{IOC:, XPSAux4Bi8, XPS_AUX1, 3, 0x000100, "I/O Intr"}
{IOC:, XPSAux4Bi9, XPS_AUX1, 3, 0x000200, "I/O Intr"}
{IOC:, XPSAux4Bi10, XPS_AUX1, 3, 0x000400, "I/O Intr"}
{IOC:, XPSAux4Bi11, XPS_AUX1, 3, 0x000800, "I/O Intr"}
{IOC:, XPSAux4Bi12, XPS_AUX1, 3, 0x001000, "I/O Intr"}
{IOC:, XPSAux4Bi13, XPS_AUX1, 3, 0x002000, "I/O Intr"}
{IOC:, XPSAux4Bi14, XPS_AUX1, 3, 0x004000, "I/O Intr"}
{IOC:, XPSAux4Bi15, XPS_AUX1, 3, 0x008000, "I/O Intr"}
}
file "$(TOP)/db/XPSAuxBo.db"
{
pattern
{P, R, PORT, CHAN, MASK}
{IOC:, XPSAux1Bo0, XPS_AUX1, 0, 0x000001}
{IOC:, XPSAux1Bo1, XPS_AUX1, 0, 0x000002}
{IOC:, XPSAux1Bo2, XPS_AUX1, 0, 0x000004}
{IOC:, XPSAux1Bo3, XPS_AUX1, 0, 0x000008}
{IOC:, XPSAux1Bo4, XPS_AUX1, 0, 0x000010}
{IOC:, XPSAux1Bo5, XPS_AUX1, 0, 0x000020}
{IOC:, XPSAux1Bo6, XPS_AUX1, 0, 0x000040}
{IOC:, XPSAux1Bo7, XPS_AUX1, 0, 0x000080}
{IOC:, XPSAux3Bo0, XPS_AUX1, 1, 0x000001}
{IOC:, XPSAux3Bo1, XPS_AUX1, 1, 0x000002}
{IOC:, XPSAux3Bo2, XPS_AUX1, 1, 0x000004}
{IOC:, XPSAux3Bo3, XPS_AUX1, 1, 0x000008}
{IOC:, XPSAux3Bo4, XPS_AUX1, 1, 0x000010}
{IOC:, XPSAux3Bo5, XPS_AUX1, 1, 0x000020}
{IOC:, XPSAux4Bo0, XPS_AUX1, 2, 0x000001}
{IOC:, XPSAux4Bo1, XPS_AUX1, 2, 0x000002}
{IOC:, XPSAux4Bo2, XPS_AUX1, 2, 0x000004}
{IOC:, XPSAux4Bo3, XPS_AUX1, 2, 0x000008}
{IOC:, XPSAux4Bo4, XPS_AUX1, 2, 0x000010}
{IOC:, XPSAux4Bo5, XPS_AUX1, 2, 0x000020}
{IOC:, XPSAux4Bo6, XPS_AUX1, 2, 0x000040}
{IOC:, XPSAux4Bo7, XPS_AUX1, 2, 0x000080}
{IOC:, XPSAux4Bo8, XPS_AUX1, 2, 0x000100}
{IOC:, XPSAux4Bo9, XPS_AUX1, 2, 0x000200}
{IOC:, XPSAux4Bo10, XPS_AUX1, 2, 0x000400}
{IOC:, XPSAux4Bo11, XPS_AUX1, 2, 0x000800}
{IOC:, XPSAux4Bo12, XPS_AUX1, 2, 0x001000}
{IOC:, XPSAux4Bo13, XPS_AUX1, 2, 0x002000}
{IOC:, XPSAux4Bo14, XPS_AUX1, 2, 0x004000}
{IOC:, XPSAux4Bo15, XPS_AUX1, 2, 0x008000}
}
file "$(TOP)/db/XPSAuxLo.db"
{
pattern
{P, R, PORT, CHAN}
{IOC:, XPSAux1Lo, XPS_AUX1, 0}
{IOC:, XPSAux3Lo, XPS_AUX1, 1}
{IOC:, XPSAux4Lo, XPS_AUX1, 2}
}
file "$(TOP)/db/XPSAuxAi.db"
{
pattern
{P, R, PORT, CHAN, LOPR, HOPR, PREC, SCAN}
{IOC:, XPSAuxAi0, XPS_AUX1, 0, -10.0, 10.0, 4, "1 second"}
{IOC:, XPSAuxAi1, XPS_AUX1, 1, -10.0, 10.0, 4, "1 second"}
{IOC:, XPSAuxAi2, XPS_AUX1, 2, -10.0, 10.0, 4, "1 second"}
{IOC:, XPSAuxAi3, XPS_AUX1, 3, -10.0, 10.0, 4, "1 second"}
}
file "$(TOP)/db/XPSAuxAo.db"
{
pattern
{P, R, PORT, CHAN, DRVL, LOPR, DRVH, HOPR, PREC}
{IOC:, XPSAuxAo0, XPS_AUX1, 0, -10.0, -10.0, 10.0, 10.0, 4}
{IOC:, XPSAuxAo1, XPS_AUX1, 1, -10.0, -10.0, 10.0, 10.0, 4}
{IOC:, XPSAuxAo2, XPS_AUX1, 2, -10.0, -10.0, 10.0, 10.0, 4}
{IOC:, XPSAuxAo3, XPS_AUX1, 3, -10.0, -10.0, 10.0, 10.0 4}
}
-2
View File
@@ -1,2 +0,0 @@
sudo modprobe -v ftdi_sio vendor=0x104d product=0x3006
sudo chmod o+rw /dev/ttyUSB*
-2
View File
@@ -1,2 +0,0 @@
sudo modprobe -v ftdi_sio vendor=0x104d product=0x3000
sudo chmod o+rw /dev/ttyUSB*
-107
View File
@@ -1,107 +0,0 @@
# ANF2 motors command file example (run in iocsh)
#
### Note: Modbus support (the EPICS modbus module) is required to be included in the
### EPICS application where the ANF2 support will be loaded. This file is an
### example of how to load the ANF2 support, in an ioc that is built with the
### EPICS modbus module.
epicsEnvSet("PORT1", "ANF2_C1")
epicsEnvSet("PORT2", "ANF2_C2")
# drvAsynIPPortConfigure("portName", "hostInfo", priority, noAutoConnect, noProcessEos);
drvAsynIPPortConfigure("$(PORT1)_IP","192.168.0.50:502",0,0,1)
drvAsynIPPortConfigure("$(PORT2)_IP","192.168.0.51:502",0,0,1)
# modbusInterposeConfig("portName", linkType, timeoutMsec, writeDelayMsec)
modbusInterposeConfig("$(PORT1)_IP",0,2000,0)
modbusInterposeConfig("$(PORT2)_IP",0,2000,0)
# NOTE: modbusLength = 10 * number of axes
# drvModbusAsynConfigure("portName", "tcpPortName", slaveAddress, modbusFunction,
# modbusStartAddress, modbusLength, dataType, pollMsec, "plcType")
drvModbusAsynConfigure("$(PORT1)_In", "$(PORT1)_IP", 0, 4, 0, 120, 0, 100, "ANF2_stepper")
drvModbusAsynConfigure("$(PORT2)_In", "$(PORT2)_IP", 0, 4, 0, 60, 0, 100, "ANF2_stepper")
# NOTE: modbusLength = 10 * number of axes
# drvModbusAsynConfigure("portName", "tcpPortName", slaveAddress, modbusFunction,
# modbusStartAddress, modbusLength, dataType, pollMsec, "plcType")
drvModbusAsynConfigure("$(PORT1)_Out", "$(PORT1)_IP", 0, 16, 1024, 120, 6, 1, "ANF2_stepper")
drvModbusAsynConfigure("$(PORT2)_Out", "$(PORT2)_IP", 0, 16, 1024, 60, 6, 1, "ANF2_stepper")
# Asyn traces for debugging
#!asynSetTraceIOMask "$(PORT1)_In",0,4
#!asynSetTraceMask "$(PORT1)_In",0,9
#!asynSetTraceIOMask "$(PORT1)_Out",0,4
#!asynSetTraceMask "$(PORT1)_Out",0,9
#!asynSetTraceInfoMask "$(PORT1)_Out",0,15
# Asyn records for debugging
#!dbLoadRecords("$(ASYN)/db/asynRecord.db","P=IOC:,R=asyn:c1ip,PORT=$(PORT1)_IP,ADDR=0,OMAX=256,IMAX=256")
#!dbLoadRecords("$(ASYN)/db/asynRecord.db","P=IOC:,R=asyn:c1in,PORT=$(PORT1)_In,ADDR=0,OMAX=256,IMAX=256")
#!dbLoadRecords("$(ASYN)/db/asynRecord.db","P=IOC:,R=asyn:c1out,PORT=$(PORT1)_Out,ADDR=0,OMAX=256,IMAX=256")
#!dbLoadRecords("$(ASYN)/db/asynRecord.db","P=IOC:,R=asyn:c1,PORT=$(PORT1),ADDR=0,OMAX=256,IMAX=256")
# Load the motor records
dbLoadTemplate("templates/motor.substitutions.ANF2")
# AMCI ANF2 stepper controller driver support
#
# ANF2CreateController(
# portName, The name of the asyn port that will be created by this driver
# ANF2InPortName, The name of the In drvAsynIPPPort to read from the ANF2 controller
# ANF2OutPortName, The name of the Out drvAsynIPPPort to write to the ANF2 controller
# numAxes) The number of axes in the stack (max=12)
#
# ANF2CreateAxis(
# ANF2Name, The controller's asyn port
# axis, The axis to be configured (zero-based numbering)
# hexConfig, The desired hex configuration (see manual & AMCI Net Configurator for details)
# baseSpeed, The base speed (steps/second; min=1, max=1,000,000)
# homingTimeout) The homing timeout (integer number of seconds; min=0, max=300)
#
# Note: The base speed can't be changed using the VBAS field of the motor record, but the driver
# does correct the acceleration sent by the motor record to give the desired acceleration time.
# Controller 1 (One ANF2E, Five ANF2's)
ANF2CreateController("$(PORT1)", "$(PORT1)_In", "$(PORT1)_Out", 12)
# Axes for Controller 1
ANF2CreateAxis("$(PORT1)", 0, "0x86280000", 100, 0)
ANF2CreateAxis("$(PORT1)", 1, "0x86000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 2, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 3, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 4, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 5, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 6, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 7, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 8, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 9, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 10, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT1)", 11, "0x84000000", 100, 0)
# Controller 2 (One ANF1E, Five ANF1's)
ANF2CreateController("$(PORT2)", "$(PORT2)_In", "$(PORT2)_Out", 6)
# Axes for Controller 2
ANF2CreateAxis("$(PORT2)", 0, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT2)", 1, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT2)", 2, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT2)", 3, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT2)", 4, "0x84000000", 100, 0)
ANF2CreateAxis("$(PORT2)", 5, "0x84000000", 100, 0)
# NOTE: the poller needs to be started after iocInit
##########
# iocInit
##########
# ANF2StartPoller(
# portName, The controller's asyn port
# movingPollPeriod, The time in ms between polls when any axis is moving
# idlePollPeriod) The time in ms between polls when no axis is moving
#
ANF2StartPoller("$(PORT1)", 200, 1000)
ANF2StartPoller("$(PORT2)", 200, 1000)
-44
View File
@@ -1,44 +0,0 @@
### motor.cmd.SMChydra
#
# This file is designed to be sourced:
# * after the communication port has been configured
# * before iocInit
#
# Example ethernet port configuration:
# drvAsynIPPortConfigure("hydraEth","192.168.1.17:400", 0, 0, 0)
#
# Ethernet
HydraPort = "hydraEth"
# Serial
#!HydraPort = "serial5"
# Show communication
#asynSetTraceMask(HydraPort, 0, 3)
# Only show errors
asynSetTraceMask(HydraPort, 0, 1)
# Leave ascii selected so traces can be turned on with a single click
asynSetTraceIOMask(HydraPort, 0, 1)
# Set end-of-string terminators
asynOctetSetInputEos(HydraPort,0,"\r\n")
asynOctetSetOutputEos(HydraPort,0,"\r\n")
dbLoadTemplate("motor.substitutions.SMChydra")
# SMChydraCreateController(
# port name,
# asyn port name,
# num axes,
# moving poll period (ms),
# idle poll period (ms) )
SMChydraCreateController("Hydra1", HydraPort, 2, 100, 500)
# Use the following line to disable idle polling
#!SMChydraCreateController("Hydra1", HydraPort, 2, 100, 0)
# This sleep is useful when asyn traces are enabled
#!epicsThreadSleep(3.0)
# Include an asyn record for each motor to make it easy to enable diagnostic messages
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=IOC:,R=hydraAsyn1,PORT=Hydra1,ADDR=0,OMAX=256,IMAX=256")
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=IOC:,R=hydraAsyn2,PORT=Hydra1,ADDR=1,OMAX=256,IMAX=256")
-11
View File
@@ -1,11 +0,0 @@
dbLoadTemplate("motor.substitutions.hxp")
HXPCreateController("HXP1", "192.168.1.42", 5001, 200, 1000)
# A shorter, idle-poll period is desirable if the motors
# are moved using HXP_moveAll.adl, since this period determines
# how long it takes for the motor records to see that an
# external move has been initiated.
#!HXPCreateController("HXP1", "192.168.1.42", 5001, 200, 200)
#asynSetTraceIOMask("HXP1", 0, 2)
#asynSetTraceMask("HXP1", 0, 255)
-30
View File
@@ -1,30 +0,0 @@
dbLoadTemplate("motor.substitutions.mmc200")
### RS-232 with RS-485 adpater (serial6)
#!PORT="serial6"
### RS-485 (rs485p1)
PORT="rs485p1"
#!asynOctetSetInputEos(PORT,0,"\n\r")
#!asynOctetSetOutputEos(PORT,0,"\r")
# Turn on asyn traces
#!asynSetTraceIOMask(PORT,0,0x1)
#!asynSetTraceMask(PORT,0,0x3)
###
# MMC200CreateController(
# motor port (will be created),
# asyn port (must already exist),
# num axes,
# moving poll period (ms),
# idle poll period (ms),
# ignore limit flag)
###
#!MMC200CreateController("mmc200_1", PORT, 2, 500, 2000, 1)
MMC200CreateController("mmc200_1", PORT, 2, 500, 0, 1)
# Turn off asyn traces
#!asynSetTraceIOMask(PORT,0,0x0)
#!asynSetTraceMask(PORT,0,0x1)
-9
View File
@@ -1,9 +0,0 @@
file "$(MOTOR)/db/basic_motor.db"
{
pattern
{P, N, M, DTYP, C, S, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "MM4000", 0, 0, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 2, "m$(N)", "MM4000", 0, 1, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 3, "m$(N)", "MM4000", 0, 2, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 4, "m$(N)", "MM4000", 0, 3, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
}
@@ -1,6 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", Agilis1, 0, "Horizontal", mm, Pos, .5, 0.1, .25, 0, 1, .2, .0001, 4, 28, -1, ""}
}
@@ -1,7 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", Agilis1, 0, "Horizontal", mm, Pos, .5, 0.1, .25, 0, 1, .2, .001, 3, 3, -3, ""}
{IOC:, 2, "m$(N)", "asynMotor", Agilis1, 1, "Vertical", mm, Pos, .5, 0.1, .25, 0, 1, .2, .001, 3, 3, -3, ""}
}
@@ -1,54 +0,0 @@
file "$(MOTOR)/motorApp/Db/asyn_motor.db"
{
pattern
{P, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT, RTRY}
{IOC:, "m1", "asynMotor", "ANF2_C1", 0, "ANF2 C1 M1", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m2", "asynMotor", "ANF2_C1", 1, "ANF2 C1 M2", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m3", "asynMotor", "ANF2_C1", 2, "ANF2 C1 M3", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m4", "asynMotor", "ANF2_C1", 3, "ANF2 C1 M4", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m5", "asynMotor", "ANF2_C1", 4, "ANF2 C1 M5", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m6", "asynMotor", "ANF2_C1", 5, "ANF2 C1 M6", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m7", "asynMotor", "ANF2_C1", 6, "ANF2 C1 M7", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m8", "asynMotor", "ANF2_C1", 7, "ANF2 C1 M8", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m9", "asynMotor", "ANF2_C1", 8, "ANF2 C1 M9", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m10", "asynMotor", "ANF2_C1", 9, "ANF2 C1 M10", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m11", "asynMotor", "ANF2_C1", 10, "ANF2 C1 M11", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m12", "asynMotor", "ANF2_C1", 11, "ANF2 C1 M12", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m13", "asynMotor", "ANF2_C2", 0, "ANF2 C2 M1", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m14", "asynMotor", "ANF2_C2", 1, "ANF2 C2 M2", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m15", "asynMotor", "ANF2_C2", 2, "ANF2 C2 M3", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m16", "asynMotor", "ANF2_C2", 3, "ANF2 C2 M4", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m17", "asynMotor", "ANF2_C2", 4, "ANF2 C2 M5", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, "m18", "asynMotor", "ANF2_C2", 5, "ANF2 C2 M6", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
}
file "$(MOTOR)/motorApp/Db/ANF2Aux.template"
{
pattern
{P, R, PORT, ADDR}
{IOC:, m1:, "ANF2_C1", 0}
{IOC:, m2:, "ANF2_C1", 1}
{IOC:, m3:, "ANF2_C1", 2}
{IOC:, m4:, "ANF2_C1", 3}
{IOC:, m5:, "ANF2_C1", 4}
{IOC:, m6:, "ANF2_C1", 5}
{IOC:, m7:, "ANF2_C1", 6}
{IOC:, m8:, "ANF2_C1", 7}
{IOC:, m9:, "ANF2_C1", 8}
{IOC:, m10:, "ANF2_C1", 9}
{IOC:, m11:, "ANF2_C1", 10}
{IOC:, m12:, "ANF2_C1", 11}
{IOC:, m13:, "ANF2_C2", 0}
{IOC:, m14:, "ANF2_C2", 1}
{IOC:, m15:, "ANF2_C2", 2}
{IOC:, m16:, "ANF2_C2", 3}
{IOC:, m17:, "ANF2_C2", 4}
{IOC:, m18:, "ANF2_C2", 5}
}
@@ -1,17 +0,0 @@
file "$(MOTOR)/motorApp/Db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT, RTRY}
{IOC:, 1, "m$(N)", "asynMotor", "ANG1_1_1", 0, "AMCI ANG1 1", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
{IOC:, 2, "m$(N)", "asynMotor", "ANG1_1_2", 0, "AMCI ANG1 2", steps, Pos, 100, 0, .2, 0, 50, .2, 1, 5, 1e9, -1e9, ""}
}
file "$(MOTOR)/motorApp/Db/ANG1Aux.template"
{
pattern
{P, R, PORT, ADDR}
{IOC:, m1:, ANG1_1_1, 0}
{IOC:, m2:, ANG1_1_2, 0}
}
@@ -1,9 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
# Newport NSA12 stage, 6.35 microns/full step, 128 micro-steps/s
{IOC:, 1, "m$(N)", "asynMotor", CONEX1, 0, "X", mm, Pos, 1., 0.1, .25, 0, 1, .2, 4.9609375e-5, 4, 28, -1, ""}
{IOC:, 2, "m$(N)", "asynMotor", CONEX2, 0, "Y", mm, Pos, 1., 0.1, .25, 0, 1, .2, 4.9609375e-5, 4, 28, -1, ""}
{IOC:, 3, "m$(N)", "asynMotor", CONEX3, 0, "Z", mm, Pos, 1., 0.1, .25, 0, 1, .2, 4.9609375e-5, 4, 28, -1, ""}
}
@@ -1,6 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT, RTRY}
{IOC:, 1, "m$(N)", "asynMotor", "SMC100_1", 0, "GTS30V", mm, Pos, 1, 0, .2, 0, .5, .2, 0.00001, 6, 25, -5, ""}
}
@@ -1,8 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VMAX, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, m1, "asynMotor", Hydra1, 0, "m1", degrees, Pos, 15., 3., .05, .5, 0, 1.0, 2, 0.01, 2, 175, -175, ""}
{IOC:, m2, "asynMotor", Hydra1, 1, "m2", degrees, Pos, 15., 3., .05, .5, 0, 1.0, 2, 0.01, 2, 175, -175, ""}
}
-245
View File
@@ -1,245 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", ACR1, 0, "motor $(N)", mm, Pos, .05, .01, .5, 0, 1, .2, 1.25e-7, 5, 200, -2, ""}
{IOC:, 2, "m$(N)", "asynMotor", ACR2, 0, "motor $(N)", mm, Pos, .05, .01, .5, 0, 1, .2, 1.25e-7, 5, 200, -2, ""}
}
file "$(TOP)/db/ACRAux.template"
{
pattern
{P, R, PORT, ADDR}
{IOC:, m1:, ACR1, 0}
{IOC:, m2:, ACR2, 0}
}
file "$(TOP)/db/ACRAuxLi.template"
{
pattern
{P, R, PORT, SCAN}
{IOC:ACR1:, li, ACR1, "I/O Intr"}
{IOC:ACR2:, li, ACR2, "I/O Intr"}
}
file "$(TOP)/db/ACRAuxRead.template"
{
pattern
{P, R, PORT, SCAN}
{IOC:ACR1:, Read, ACR1, "1 second"}
{IOC:ACR2:, Read, ACR2, "1 second"}
}
file "$(TOP)/db/ACRAuxBi.template"
{
pattern
{P, R, PORT, MASK, SCAN}
{IOC:ACR1:, bi0, ACR1, 0x00000001, "I/O Intr"}
{IOC:ACR1:, bi1, ACR1, 0x00000002, "I/O Intr"}
{IOC:ACR1:, bi2, ACR1, 0x00000004, "I/O Intr"}
{IOC:ACR1:, bi3, ACR1, 0x00000008, "I/O Intr"}
{IOC:ACR1:, bi4, ACR1, 0x00000010, "I/O Intr"}
{IOC:ACR1:, bi5, ACR1, 0x00000020, "I/O Intr"}
{IOC:ACR1:, bi6, ACR1, 0x00000040, "I/O Intr"}
{IOC:ACR1:, bi7, ACR1, 0x00000080, "I/O Intr"}
{IOC:ACR1:, bi8, ACR1, 0x00000100, "I/O Intr"}
{IOC:ACR1:, bi9, ACR1, 0x00000200, "I/O Intr"}
{IOC:ACR1:, bi10, ACR1, 0x00000400, "I/O Intr"}
{IOC:ACR1:, bi11, ACR1, 0x00000800, "I/O Intr"}
{IOC:ACR1:, bi12, ACR1, 0x00001000, "I/O Intr"}
{IOC:ACR1:, bi13, ACR1, 0x00002000, "I/O Intr"}
{IOC:ACR1:, bi14, ACR1, 0x00004000, "I/O Intr"}
{IOC:ACR1:, bi15, ACR1, 0x00008000, "I/O Intr"}
{IOC:ACR1:, bi16, ACR1, 0x00010000, "I/O Intr"}
{IOC:ACR1:, bi17, ACR1, 0x00020000, "I/O Intr"}
{IOC:ACR1:, bi18, ACR1, 0x00040000, "I/O Intr"}
{IOC:ACR1:, bi19, ACR1, 0x00080000, "I/O Intr"}
{IOC:ACR1:, bi20, ACR1, 0x00100000, "I/O Intr"}
{IOC:ACR1:, bi21, ACR1, 0x00200000, "I/O Intr"}
{IOC:ACR1:, bi22, ACR1, 0x00400000, "I/O Intr"}
{IOC:ACR1:, bi23, ACR1, 0x00800000, "I/O Intr"}
{IOC:ACR1:, bi24, ACR1, 0x01000000, "I/O Intr"}
{IOC:ACR1:, bi25, ACR1, 0x02000000, "I/O Intr"}
{IOC:ACR1:, bi26, ACR1, 0x04000000, "I/O Intr"}
{IOC:ACR1:, bi27, ACR1, 0x08000000, "I/O Intr"}
{IOC:ACR1:, bi28, ACR1, 0x10000000, "I/O Intr"}
{IOC:ACR1:, bi29, ACR1, 0x20000000, "I/O Intr"}
{IOC:ACR1:, bi30, ACR1, 0x40000000, "I/O Intr"}
{IOC:ACR1:, bi31, ACR1, 0x80000000, "I/O Intr"}
#
{IOC:ACR2:, bi0, ACR2, 0x00000001, "I/O Intr"}
{IOC:ACR2:, bi1, ACR2, 0x00000002, "I/O Intr"}
{IOC:ACR2:, bi2, ACR2, 0x00000004, "I/O Intr"}
{IOC:ACR2:, bi3, ACR2, 0x00000008, "I/O Intr"}
{IOC:ACR2:, bi4, ACR2, 0x00000010, "I/O Intr"}
{IOC:ACR2:, bi5, ACR2, 0x00000020, "I/O Intr"}
{IOC:ACR2:, bi6, ACR2, 0x00000040, "I/O Intr"}
{IOC:ACR2:, bi7, ACR2, 0x00000080, "I/O Intr"}
{IOC:ACR2:, bi8, ACR2, 0x00000100, "I/O Intr"}
{IOC:ACR2:, bi9, ACR2, 0x00000200, "I/O Intr"}
{IOC:ACR2:, bi10, ACR2, 0x00000400, "I/O Intr"}
{IOC:ACR2:, bi11, ACR2, 0x00000800, "I/O Intr"}
{IOC:ACR2:, bi12, ACR2, 0x00001000, "I/O Intr"}
{IOC:ACR2:, bi13, ACR2, 0x00002000, "I/O Intr"}
{IOC:ACR2:, bi14, ACR2, 0x00004000, "I/O Intr"}
{IOC:ACR2:, bi15, ACR2, 0x00008000, "I/O Intr"}
{IOC:ACR2:, bi16, ACR2, 0x00010000, "I/O Intr"}
{IOC:ACR2:, bi17, ACR2, 0x00020000, "I/O Intr"}
{IOC:ACR2:, bi18, ACR2, 0x00040000, "I/O Intr"}
{IOC:ACR2:, bi19, ACR2, 0x00080000, "I/O Intr"}
{IOC:ACR2:, bi20, ACR2, 0x00100000, "I/O Intr"}
{IOC:ACR2:, bi21, ACR2, 0x00200000, "I/O Intr"}
{IOC:ACR2:, bi22, ACR2, 0x00400000, "I/O Intr"}
{IOC:ACR2:, bi23, ACR2, 0x00800000, "I/O Intr"}
{IOC:ACR2:, bi24, ACR2, 0x01000000, "I/O Intr"}
{IOC:ACR2:, bi25, ACR2, 0x02000000, "I/O Intr"}
{IOC:ACR2:, bi26, ACR2, 0x04000000, "I/O Intr"}
{IOC:ACR2:, bi27, ACR2, 0x08000000, "I/O Intr"}
{IOC:ACR2:, bi28, ACR2, 0x10000000, "I/O Intr"}
{IOC:ACR2:, bi29, ACR2, 0x20000000, "I/O Intr"}
{IOC:ACR2:, bi30, ACR2, 0x40000000, "I/O Intr"}
{IOC:ACR2:, bi31, ACR2, 0x80000000, "I/O Intr"}
}
file "$(TOP)/db/ACRAuxBo.template"
{
pattern
{P, R, PORT, MASK}
{IOC:ACR1:, bo0, ACR1, 0x00000001}
{IOC:ACR1:, bo1, ACR1, 0x00000002}
{IOC:ACR1:, bo2, ACR1, 0x00000004}
{IOC:ACR1:, bo3, ACR1, 0x00000008}
{IOC:ACR1:, bo4, ACR1, 0x00000010}
{IOC:ACR1:, bo5, ACR1, 0x00000020}
{IOC:ACR1:, bo6, ACR1, 0x00000040}
{IOC:ACR1:, bo7, ACR1, 0x00000080}
{IOC:ACR1:, bo8, ACR1, 0x00000100}
{IOC:ACR1:, bo9, ACR1, 0x00000200}
{IOC:ACR1:, bo10, ACR1, 0x00000400}
{IOC:ACR1:, bo11, ACR1, 0x00000800}
{IOC:ACR1:, bo12, ACR1, 0x00001000}
{IOC:ACR1:, bo13, ACR1, 0x00002000}
{IOC:ACR1:, bo14, ACR1, 0x00004000}
{IOC:ACR1:, bo15, ACR1, 0x00008000}
{IOC:ACR1:, bo16, ACR1, 0x00010000}
{IOC:ACR1:, bo17, ACR1, 0x00020000}
{IOC:ACR1:, bo18, ACR1, 0x00040000}
{IOC:ACR1:, bo19, ACR1, 0x00080000}
{IOC:ACR1:, bo20, ACR1, 0x00100000}
{IOC:ACR1:, bo21, ACR1, 0x00200000}
{IOC:ACR1:, bo22, ACR1, 0x00400000}
{IOC:ACR1:, bo23, ACR1, 0x00800000}
{IOC:ACR1:, bo24, ACR1, 0x01000000}
{IOC:ACR1:, bo25, ACR1, 0x02000000}
{IOC:ACR1:, bo26, ACR1, 0x04000000}
{IOC:ACR1:, bo27, ACR1, 0x08000000}
{IOC:ACR1:, bo28, ACR1, 0x10000000}
{IOC:ACR1:, bo29, ACR1, 0x20000000}
{IOC:ACR1:, bo30, ACR1, 0x40000000}
{IOC:ACR1:, bo31, ACR1, 0x80000000}
#
{IOC:ACR2:, bo0, ACR2, 0x00000001}
{IOC:ACR2:, bo1, ACR2, 0x00000002}
{IOC:ACR2:, bo2, ACR2, 0x00000004}
{IOC:ACR2:, bo3, ACR2, 0x00000008}
{IOC:ACR2:, bo4, ACR2, 0x00000010}
{IOC:ACR2:, bo5, ACR2, 0x00000020}
{IOC:ACR2:, bo6, ACR2, 0x00000040}
{IOC:ACR2:, bo7, ACR2, 0x00000080}
{IOC:ACR2:, bo8, ACR2, 0x00000100}
{IOC:ACR2:, bo9, ACR2, 0x00000200}
{IOC:ACR2:, bo10, ACR2, 0x00000400}
{IOC:ACR2:, bo11, ACR2, 0x00000800}
{IOC:ACR2:, bo12, ACR2, 0x00001000}
{IOC:ACR2:, bo13, ACR2, 0x00002000}
{IOC:ACR2:, bo14, ACR2, 0x00004000}
{IOC:ACR2:, bo15, ACR2, 0x00008000}
{IOC:ACR2:, bo16, ACR2, 0x00010000}
{IOC:ACR2:, bo17, ACR2, 0x00020000}
{IOC:ACR2:, bo18, ACR2, 0x00040000}
{IOC:ACR2:, bo19, ACR2, 0x00080000}
{IOC:ACR2:, bo20, ACR2, 0x00100000}
{IOC:ACR2:, bo21, ACR2, 0x00200000}
{IOC:ACR2:, bo22, ACR2, 0x00400000}
{IOC:ACR2:, bo23, ACR2, 0x00800000}
{IOC:ACR2:, bo24, ACR2, 0x01000000}
{IOC:ACR2:, bo25, ACR2, 0x02000000}
{IOC:ACR2:, bo26, ACR2, 0x04000000}
{IOC:ACR2:, bo27, ACR2, 0x08000000}
{IOC:ACR2:, bo28, ACR2, 0x10000000}
{IOC:ACR2:, bo29, ACR2, 0x20000000}
{IOC:ACR2:, bo30, ACR2, 0x40000000}
{IOC:ACR2:, bo31, ACR2, 0x80000000}
}
file "$(TOP)/db/ACRAuxBoRBV.template"
{
pattern
{P, R, PORT, MASK, SCAN}
{IOC:ACR1:, boRBV0, ACR1, 0x00000001, "I/O Intr"}
{IOC:ACR1:, boRBV1, ACR1, 0x00000002, "I/O Intr"}
{IOC:ACR1:, boRBV2, ACR1, 0x00000004, "I/O Intr"}
{IOC:ACR1:, boRBV3, ACR1, 0x00000008, "I/O Intr"}
{IOC:ACR1:, boRBV4, ACR1, 0x00000010, "I/O Intr"}
{IOC:ACR1:, boRBV5, ACR1, 0x00000020, "I/O Intr"}
{IOC:ACR1:, boRBV6, ACR1, 0x00000040, "I/O Intr"}
{IOC:ACR1:, boRBV7, ACR1, 0x00000080, "I/O Intr"}
{IOC:ACR1:, boRBV8, ACR1, 0x00000100, "I/O Intr"}
{IOC:ACR1:, boRBV9, ACR1, 0x00000200, "I/O Intr"}
{IOC:ACR1:, boRBV10, ACR1, 0x00000400, "I/O Intr"}
{IOC:ACR1:, boRBV11, ACR1, 0x00000800, "I/O Intr"}
{IOC:ACR1:, boRBV12, ACR1, 0x00001000, "I/O Intr"}
{IOC:ACR1:, boRBV13, ACR1, 0x00002000, "I/O Intr"}
{IOC:ACR1:, boRBV14, ACR1, 0x00004000, "I/O Intr"}
{IOC:ACR1:, boRBV15, ACR1, 0x00008000, "I/O Intr"}
{IOC:ACR1:, boRBV16, ACR1, 0x00010000, "I/O Intr"}
{IOC:ACR1:, boRBV17, ACR1, 0x00020000, "I/O Intr"}
{IOC:ACR1:, boRBV18, ACR1, 0x00040000, "I/O Intr"}
{IOC:ACR1:, boRBV19, ACR1, 0x00080000, "I/O Intr"}
{IOC:ACR1:, boRBV20, ACR1, 0x00100000, "I/O Intr"}
{IOC:ACR1:, boRBV21, ACR1, 0x00200000, "I/O Intr"}
{IOC:ACR1:, boRBV22, ACR1, 0x00400000, "I/O Intr"}
{IOC:ACR1:, boRBV23, ACR1, 0x00800000, "I/O Intr"}
{IOC:ACR1:, boRBV24, ACR1, 0x01000000, "I/O Intr"}
{IOC:ACR1:, boRBV25, ACR1, 0x02000000, "I/O Intr"}
{IOC:ACR1:, boRBV26, ACR1, 0x04000000, "I/O Intr"}
{IOC:ACR1:, boRBV27, ACR1, 0x08000000, "I/O Intr"}
{IOC:ACR1:, boRBV28, ACR1, 0x10000000, "I/O Intr"}
{IOC:ACR1:, boRBV29, ACR1, 0x20000000, "I/O Intr"}
{IOC:ACR1:, boRBV30, ACR1, 0x40000000, "I/O Intr"}
{IOC:ACR1:, boRBV31, ACR1, 0x80000000, "I/O Intr"}
#
{IOC:ACR2:, boRBV0, ACR2, 0x00000001, "I/O Intr"}
{IOC:ACR2:, boRBV1, ACR2, 0x00000002, "I/O Intr"}
{IOC:ACR2:, boRBV2, ACR2, 0x00000004, "I/O Intr"}
{IOC:ACR2:, boRBV3, ACR2, 0x00000008, "I/O Intr"}
{IOC:ACR2:, boRBV4, ACR2, 0x00000010, "I/O Intr"}
{IOC:ACR2:, boRBV5, ACR2, 0x00000020, "I/O Intr"}
{IOC:ACR2:, boRBV6, ACR2, 0x00000040, "I/O Intr"}
{IOC:ACR2:, boRBV7, ACR2, 0x00000080, "I/O Intr"}
{IOC:ACR2:, boRBV8, ACR2, 0x00000100, "I/O Intr"}
{IOC:ACR2:, boRBV9, ACR2, 0x00000200, "I/O Intr"}
{IOC:ACR2:, boRBV10, ACR2, 0x00000400, "I/O Intr"}
{IOC:ACR2:, boRBV11, ACR2, 0x00000800, "I/O Intr"}
{IOC:ACR2:, boRBV12, ACR2, 0x00001000, "I/O Intr"}
{IOC:ACR2:, boRBV13, ACR2, 0x00002000, "I/O Intr"}
{IOC:ACR2:, boRBV14, ACR2, 0x00004000, "I/O Intr"}
{IOC:ACR2:, boRBV15, ACR2, 0x00008000, "I/O Intr"}
{IOC:ACR2:, boRBV16, ACR2, 0x00010000, "I/O Intr"}
{IOC:ACR2:, boRBV17, ACR2, 0x00020000, "I/O Intr"}
{IOC:ACR2:, boRBV18, ACR2, 0x00040000, "I/O Intr"}
{IOC:ACR2:, boRBV19, ACR2, 0x00080000, "I/O Intr"}
{IOC:ACR2:, boRBV20, ACR2, 0x00100000, "I/O Intr"}
{IOC:ACR2:, boRBV21, ACR2, 0x00200000, "I/O Intr"}
{IOC:ACR2:, boRBV22, ACR2, 0x00400000, "I/O Intr"}
{IOC:ACR2:, boRBV23, ACR2, 0x00800000, "I/O Intr"}
{IOC:ACR2:, boRBV24, ACR2, 0x01000000, "I/O Intr"}
{IOC:ACR2:, boRBV25, ACR2, 0x02000000, "I/O Intr"}
{IOC:ACR2:, boRBV26, ACR2, 0x04000000, "I/O Intr"}
{IOC:ACR2:, boRBV27, ACR2, 0x08000000, "I/O Intr"}
{IOC:ACR2:, boRBV28, ACR2, 0x10000000, "I/O Intr"}
{IOC:ACR2:, boRBV29, ACR2, 0x20000000, "I/O Intr"}
{IOC:ACR2:, boRBV30, ACR2, 0x40000000, "I/O Intr"}
{IOC:ACR2:, boRBV31, ACR2, 0x80000000, "I/O Intr"}
}
@@ -1,27 +0,0 @@
file "$(MOTOR)/motorApp/Db/asyn_motor.db"
{
pattern
{P, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VMAX, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT, RTRY}
{xxx:hxp:c0:, m1, "asynMotor", HXP1, 0, "X", mm, Pos, 15., 3., .05, .5, 0, 1.0, 2, 0.00001, 5, 0, 0, "", 0}
{xxx:hxp:c0:, m2, "asynMotor", HXP1, 1, "Y", mm, Pos, 15., 3., .05, .5, 0, 1.0, 2, 0.00001, 5, 0, 0, "", 0}
{xxx:hxp:c0:, m3, "asynMotor", HXP1, 2, "Z", mm, Pos, 15., 3., .05, .5, 0, 1.0, 2, 0.00001, 5, 0, 0, "", 0}
{xxx:hxp:c0:, m4, "asynMotor", HXP1, 3, "U", degrees, Pos, 15., 3., .05, .5, 0, 1.0, 2, 0.00001, 5, 0, 0, "", 0}
{xxx:hxp:c0:, m5, "asynMotor", HXP1, 4, "V", degrees, Pos, 15., 3., .05, .5, 0, 1.0, 2, 0.00001, 5, 0, 0, "", 0}
{xxx:hxp:c0:, m6, "asynMotor", HXP1, 5, "W", degrees, Pos, 15., 3., .05, .5, 0, 1.0, 2, 0.00001, 5, 0, 0, "", 0}
}
# Extra HXP controller support (moveAll, status and error PVs)
file "$(MOTOR)/motorApp/Db/HXP_extra.db"
{
pattern
{P, R, PORT, CHAN}
{xxx:, hxp:c0:, HXP1, 0}
}
# HXP coordinate-system support (reading and redefining)
file "$(MOTOR)/motorApp/Db/HXP_coords.db"
{
pattern
{P, R, PORT, CHAN, M1, M2, M3, M4, M5, M6}
{xxx:, hxp:c0:, HXP1, 0, m1, m2, m3, m4, m5, m6}
}
@@ -1,60 +0,0 @@
# ImsMDrivePlus asyn model 3 substitutions file
# SREV (not shown) is the number of steps per revolution is 200 by
# default
#
# There are three pivot points to which the six motors are attached.
# Three provide vertical motion: M0Y, M1Y, and M2Y. One provides
# horizontal motion in the Z direction (along beamline): M2Z. Two
# provide horizontal motion in the X direction (perpendicular to
# beamline): M0X, M2X.
#
#
# For SREV:
# 2048 = internal encoder (EQ)
# 250 = external encoder, NUMERIK-JENA
# 200 = external encoder, Renishaw
# 51200 = no encoder
# CXI DG4 Support Motion Stand (DG4) Substitution file
file "$(MOTOR)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, DESC, ADDR, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, DHLM, DLLM, MRES, PREC, INIT}
{IMS:, 1, 1, "asynMotor", IMS1, "MDrive23", 0, mm, Pos, 3.0, 0.017, 2.0, 0, 0.017, 2.0, 100, -100, 0.000083, 4, ""}
}
file "$(MOTOR)/db/IMS_extra.db"
{
pattern
{DEV, AREA, LOC, PORT, ADDR, TIMEOUT}
{IMS, IOC, 1, IMS1, 0, 1}
}
# field(DESC,"Y DG4 DS North Motor") # same
# field(DTYP,"ImsMDrivePlus") # same
# field(OUT, "#C0 S0 @") # same
# field(DIR, "Pos") # same
# field(SREV,"2048") # SREV [steps/rev], MRES = UREV/SREV
# field(UREV,"0.017") # UREV [egu/rev], MRES = UREV/SREV
# field(UEIP,"No")
# field(S, "10") # no equivalent
# field(SMAX,"20") # SMAX[rev/s], VELO = SMAX * UREV
# field(SBAS,"1") # VBAS = SBAS * UREV
# field(ACCL,"2.0") # same
# field(BDST,"0") # same
# field(RDBD,"0.0005")
# field(RTRY,"1")
# field(SBAK,"1") # BVEL = SBAK * UREV
# field(BACC,"2.0") # same
# field(DLY, "0")
# field(PREC,"4") # same
# field(EGU, "mm") # same
# field(DHLM,"200.0") # same
# field(DLLM,"-200.0") # same
# field(INIT,"") # same
# field(TWV, "1") # same
@@ -1,9 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", MCB4B1, 0, "Bottom", mm, Pos, 2.0, 0.1, .2, 0, 1, .2, -.001, 3, 16, 0, ""}
{IOC:, 2, "m$(N)", "asynMotor", MCB4B1, 1, "Top", mm, Pos, 2.0, 0.1, .2, 0, 1, .2, -.001, 3, 16, 0, ""}
{IOC:, 3, "m$(N)", "asynMotor", MCB4B1, 2, "Inboard", mm, Pos, 2.0, 0.1, .2, 0, 1, .2, -.001, 3, 16, 0, ""}
{IOC:, 4, "m$(N)", "asynMotor", MCB4B1, 3, "Outboard", mm, Pos, 2.0, 0.1, .2, 0, 1, .2, -.001, 3, 16, 0, ""}
}
@@ -1,7 +0,0 @@
file "$(MOTOR)/motorApp/Db/asyn_motor.db"
{
pattern
{P, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VMAX, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, m1, "asynMotor", mmc200_1, 0, "m1", mm, Pos, 15., 3., .05, .5, 0, 1.0, 2, 2.44140625e-6, 5, 0, 0, ""}
{IOC:, m2, "asynMotor", mmc200_1, 1, "m2", mm, Pos, 15., 3., .05, .5, 0, 1.0, 2, 2.44140625e-6, 5, 0, 0, ""}
}
@@ -1,50 +0,0 @@
################################################################################
# PORT - asynPort created for the Phytron controller
# ADDR - Address of the axis - right digit represents the index of the axis
# of a I1AM01 module, the remaining digit(s) on the lef represent the
# index of the I1AM01 module
################################################################################
file "../../db/Phytron_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, VMAX, ACCL, BDST, BVEL, BACC, MRES, ERES, PREC, DHLM, DLLM, INIT}
{PHYIOC:, 1, "m$(N)", "asynMotor", phyMotionPort, 11, "motor $(N)", Deg, Pos, 360, 180, 720, .5, 0, 180, .2, 1.8, 0.18, 5, 1440, -1440, ""}
{PHYIOC:, 2, "m$(N)", "asynMotor", phyMotionPort, 21, "motor $(N)", Deg, Pos, 360, 180, 720, .5, 0, 180, .2, 1.8, 0.18, 5, 1440, -1440, ""}
}
################################################################################
# P - MUST MATCH Controller specific name in Phytron_MCM01.db substitution
# pattern (below)
# PORT - asynPort created for the Phytron controller
# ADDR - Address of the axis - right digit represents the index of the axis
# of a I1AM01 module, the remaining digit(s) on the lef represent the
# index of the I1AM01 module
# TIMEOUT - asyn timeout
# SCAN - Periodic scan rate of Power stage temperature and Motor temperature
# records
# INIT - If set to YES, ao records will be initialized with the values defined
# in the macros that follow INIT. If set to NO, records will not be
# initialized - this option is useful if auto save/restore is used
################################################################################
file "../../db/Phytron_I1AM01.db"
{
pattern
{P, N, M, PORT, ADDR, SCAN, TIMEOUT, INIT, HOMING, MODE, POS_OFFSET, NEG_OFFSET, INIT_TIME, POS_TIME, BOOST, SWITCH_TYP, PWR_STAGE, ENC_TYP, ENC_SFI, ENC_DIR, STOP_CURR, RUN_CURR, BOOST_CURR, CURRENT_DELAY, STEP_RES, PS_MON }
{PHYIOC, 1, ":m$(N)", phyMotionPort, 11, "1 second", 3, YES, 0, 1, 0, 0, 20, 20, 0, 0, 1, 1, 0, 1 20, 400, 500, 20, 0, 1}
{PHYIOC, 2, ":m$(N)", phyMotionPort, 21, "1 second", 3, YES, 0, 1, 0, 0, 20, 20, 0, 0, 1, 1, 0, 1 20, 400, 500, 20, 0, 1}
}
################################################################################
# P - Controller specific name
# PORT - asynPort created for the Phytron controller
# ADDR - Arbitrary value between 0 and 255
# TIMEOUT - asyn timeout
################################################################################
file "../../db/Phytron_MCM01.db"
{
pattern
{P, DTYP, PORT, ADDR, TIMEOUT}
{PHYIOC, "asynMotor", phyMotionPort, 0, 10 }
}
@@ -1,15 +0,0 @@
file "$(TOP)/db/asyn_motor.db"
{
pattern
{P, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VMAX, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, m1, "asynMotor", VMC_MOTOR, 0, "VMCMotor", mm, Pos, 15., 3., .05, .5, 0, 1.0, 2, .025, 5, 0, 0, ""}
{IOC:, m2, "asynMotor", SOFT_MOTOR, 0, "SoftMotor", mm, Pos, 15., 3., .05, .5, 0, 1.0, 2, .025, 5, 0, 0, ""}
}
file "$(TOP)/db/ScriptMotorReload.db"
{
pattern
{P, PORT}
{IOC:, SOFT_MOTOR}
{IOC:, VMC_MOTOR}
}
@@ -1,9 +0,0 @@
file "../../db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", motorSim1, 0, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 2, "m$(N)", "asynMotor", motorSim1, 1, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 3, "m$(N)", "asynMotor", motorSim1, 2, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
{IOC:, 4, "m$(N)", "asynMotor", motorSim1, 3, "motor $(N)", degrees, Pos, 1, .1, .2, 0, 1, .2, 0.01, 5, 100, -100, ""}
}
@@ -1,6 +0,0 @@
file "$(MOTOR)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{MOTR:B034:, 1, 100, "asynMotor", "P0", 0, "channel1", mm, Pos, 1, 0, 0.2, 0, 1, 0.2, 1e-6, 2, 3, -3, ""}
}
@@ -1,16 +0,0 @@
file "$(MOTOR)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", XPS1, 0, "motor $(N)", mm, Pos, .3, .1, .2, 0, 1, .2, 0.000048828, 5, 62.5, 50, ""}
{IOC:, 2, "m$(N)", "asynMotor", XPS1, 1, "motor $(N)", mm, Pos, .3, .1, .2, 0, 1, .2, 0.000147750, 5, 10, 0, ""}
{IOC:, 3, "m$(N)", "asynMotor", XPS1, 2, "motor $(N)", mm, Pos, .3, .1, .2, 0, 1, .2, 0.000048828, 5, 62.5, 50, ""}
}
file "$(MOTOR)/db/XPS_extra.db"
{
pattern
{P, R, PORT, ADDR}
{IOC:, m1, XPS1, 0}
{IOC:, m2, XPS1 1}
{IOC:, m3, XPS1 2}
}
@@ -1,61 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", XPS1, 0, "scanX", mm, Neg, 5., 1, 0.5, 0, 1, .2, 0.000001, 5, 12.4, -12.4, ""}
{IOC:, 2, "m$(N)", "asynMotor", XPS1, 1, "scanY", mm, Pos, 5., 1, 0.5, 0, 1, .2, 0.00002, 5, 2.4, -2.4, ""}
{IOC:, 3, "m$(N)", "asynMotor", XPS1, 2, "theta", degrees, Pos, 20., 1, 0.5, 0, 1, .2, 0.0005, 4, 150.0, -150.0, ""}
{IOC:, 4, "m$(N)", "asynMotor", XPS1, 3, "stageX", mm, Neg, 5., 1, 1.0, 0, 1, .5, 0.0005, 4, 100.0, -100.0, ""}
{IOC:, 5, "m$(N)", "asynMotor", XPS1, 4, "stageZ", mm, Neg, 5., 1, 1.0, 0, 1, .5, 0.0005, 4, 100.0, -100.0, ""}
{IOC:, 6, "m$(N)", "asynMotor", XPS1, 5, "stageY", mm, Pos, 5., 1, 1.0, 0, 2, .2, 0.0002, 4, 292.0, -8.0, ""}
}
file "$(TOP)/db/XPS_extra.db"
{
pattern
{P, R, PORT, ADDR}
{IOC:, m1, XPS1, 0}
{IOC:, m2, XPS1 1}
{IOC:, m3, XPS1 2}
{IOC:, m4, XPS1 3}
{IOC:, m5, XPS1 4}
{IOC:, m6, XPS1 5}
}
file "$(TOP)/db/profileMoveController.template"
{
pattern
{P, R, PORT, NAXES, NPOINTS, NPULSES, TIMEOUT}
{IOC:, Prof1:, XPS1, 6, 2000, 2000, 1}
}
file "$(TOP)/db/profileMoveControllerXPS.template"
{
pattern
{P, R, PORT, NAXES, NPOINTS, NPULSES, TIMEOUT}
{IOC:, Prof1:, XPS1, 6, 2000, 2000, 1}
}
file "$(TOP)/db/profileMoveAxis.template"
{
pattern
{P, R, N, M, PORT, ADDR,NPOINTS, NREADBACK, DIR_LINK, OFF_LINK, RES_LINK, PREC, TIMEOUT}
{IOC:, Prof1:, 1, "m$(N)", XPS1, 0, 2000, 2000, "IOC:$(M).DIR", "IOC:$(M).OFF", "IOC:$(M).MRES", 5, 1}
{IOC:, Prof1:, 2, "m$(N)", XPS1, 1, 2000, 2000, "IOC:$(M).DIR", "IOC:$(M).OFF", "IOC:$(M).MRES", 5, 1}
{IOC:, Prof1:, 3, "m$(N)", XPS1, 2, 2000, 2000, "IOC:$(M).DIR", "IOC:$(M).OFF", "IOC:$(M).MRES", 4, 1}
{IOC:, Prof1:, 4, "m$(N)", XPS1, 3, 2000, 2000, "IOC:$(M).DIR", "IOC:$(M).OFF", "IOC:$(M).MRES", 4, 1}
{IOC:, Prof1:, 5, "m$(N)", XPS1, 4, 2000, 2000, "IOC:$(M).DIR", "IOC:$(M).OFF", "IOC:$(M).MRES", 4, 1}
{IOC:, Prof1:, 6, "m$(N)", XPS1, 5, 2000, 2000, "IOC:$(M).DIR", "IOC:$(M).OFF", "IOC:$(M).MRES", 4, 1}
}
file "$(TOP)/db/profileMoveAxisXPS.template"
{
pattern
{P, R, N, M, PORT, ADDR,NPOINTS, NREADBACK, PREC, TIMEOUT}
{IOC:, Prof1:, 1, "m$(N)", XPS1, 0, 2000, 2000, 5, 1}
{IOC:, Prof1:, 2, "m$(N)", XPS1, 1, 2000, 2000, 5, 1}
{IOC:, Prof1:, 3, "m$(N)", XPS1, 2, 2000, 2000, 4, 1}
{IOC:, Prof1:, 4, "m$(N)", XPS1, 3, 2000, 2000, 4, 1}
{IOC:, Prof1:, 5, "m$(N)", XPS1, 4, 2000, 2000, 4, 1}
{IOC:, Prof1:, 6, "m$(N)", XPS1, 5, 2000, 2000, 4, 1}
}
@@ -1,62 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", XPS1, 0, "Phi", degrees, Pos, 15.9, 0.1, 1, 0, 1, .2, .001, 5, 180, -180, ""}
{IOC:, 2, "m$(N)", "asynMotor", XPS1, 1, "Kappa", degrees, Pos, 15.9, 0.1, 1, 0, 1, .2, .0002, 5, 180, -180, ""}
{IOC:, 3, "m$(N)", "asynMotor", XPS1, 2, "Omega", degrees, Pos, 15.9, 0.1, 1, 0, 1, .2, .0002, 5, 360, -180, ""}
{IOC:, 4, "m$(N)", "asynMotor", XPS1, 3, "Psi", degrees, Pos, 3.9, 0.1, .5, 0, 1, .2, .00025, 5, 230, -230, ""}
{IOC:, 5, "m$(N)", "asynMotor", XPS1, 4, "2theta", degrees, Pos, 7.9, 0.1, 1, 0, 1, .2, .0001, 5, 190, -10, ""}
{IOC:, 6, "m$(N)", "asynMotor", XPS1, 5, "Nu", degrees, Pos, 3.9, 0.1, .5, 0, 1, .2, .00025, 5, 230, -230, ""}
}
file "$(TOP)/db/XPS_extra.db"
{
pattern
{P, R, PORT, ADDR}
{IOC:, m1, XPS1, 0}
{IOC:, m2, XPS1 1}
{IOC:, m3, XPS1 2}
{IOC:, m4, XPS1 3}
{IOC:, m5, XPS1 4}
{IOC:, m6, XPS1 5}
}
file "$(TOP)/db/profileMoveController.template"
{
pattern
{P, R, PORT, NAXES, NPOINTS, NPULSES, TIMEOUT}
{IOC:, Prof1:, XPS1, 6, 2000, 2000, 1}
}
file "$(TOP)/db/profileMoveControllerXPS.template"
{
pattern
{P, R, PORT, NAXES, NPOINTS, NPULSES, TIMEOUT}
{IOC:, Prof1:, XPS1, 6, 2000, 2000, 1}
}
file "$(TOP)/db/profileMoveAxis.template"
{
pattern
{P, R, M, PORT, ADDR,NPOINTS, NREADBACK, MOTOR, PREC, TIMEOUT}
{IOC:, Prof1:, 1, XPS1, 0, 2000, 2000, IOC:m1, 5, 1}
{IOC:, Prof1:, 2, XPS1, 1, 2000, 2000, IOC:m2, 5, 1}
{IOC:, Prof1:, 3, XPS1, 2, 2000, 2000, IOC:m3, 4, 1}
{IOC:, Prof1:, 4, XPS1, 3, 2000, 2000, IOC:m4, 4, 1}
{IOC:, Prof1:, 5, XPS1, 4, 2000, 2000, IOC:m5, 4, 1}
{IOC:, Prof1:, 6, XPS1, 5, 2000, 2000, IOC:m6, 4, 1}
}
file "$(TOP)/db/profileMoveAxisXPS.template"
{
pattern
{P, R, M, PORT, ADDR,NPOINTS, NREADBACK, PREC, TIMEOUT}
{IOC:, Prof1:, 1, XPS1, 0, 2000, 2000, 5, 1}
{IOC:, Prof1:, 2, XPS1, 1, 2000, 2000, 5, 1}
{IOC:, Prof1:, 3, XPS1, 2, 2000, 2000, 4, 1}
{IOC:, Prof1:, 4, XPS1, 3, 2000, 2000, 4, 1}
{IOC:, Prof1:, 5, XPS1, 4, 2000, 2000, 4, 1}
{IOC:, Prof1:, 6, XPS1, 5, 2000, 2000, 4, 1}
}
@@ -1,68 +0,0 @@
file "$(TOP)/db/basic_asyn_motor.db"
{
pattern
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
{IOC:, 1, "m$(N)", "asynMotor", XPS1, 0, "Phi", degrees, Neg, 4.0, 0.1, .25, 0, 1, .2, .001, 3, 180, -180, ""}
{IOC:, 2, "m$(N)", "asynMotor", XPS1, 1, "Kappa", degrees, Neg, 6.0, 0.1, .88, 0, 1, .2, .0001, 4, 180, -180, ""}
{IOC:, 3, "m$(N)", "asynMotor", XPS1, 2, "Omega", degrees, Neg, 7.0, 0.1, 1.5, 0, 1, .2, .0001, 4, 360, -180, ""}
{IOC:, 4, "m$(N)", "asynMotor", XPS1, 3, "Psi", degrees, Neg, 4.0, 0.1, .5, 0, 1, .2, .00025, 4, 190, -190, ""}
{IOC:, 5, "m$(N)", "asynMotor", XPS1, 4, "2theta", degrees, Neg, 4.0, 0.1, 1.0, 0, 1, .2, .0001, 4, 196, -17, ""}
{IOC:, 6, "m$(N)", "asynMotor", XPS1, 5, "Nu", degrees, Neg, 4.0, 0.1, .5, 0, 1, .2, .00025, 4, 190, -190, ""}
{IOC:, 7, "m$(N)", "asynMotor", XPS1, 6, "Dummy1", degrees, Neg, 4.0, 0.1, .5, 0, 1, .2, .00025, 4, 190, -190, ""}
{IOC:, 8, "m$(N)", "asynMotor", XPS1, 7, "Dummy2", degrees, Neg, 4.0, 0.1, .5, 0, 1, .2, .00025, 4, 190, -190, ""}
}
file "$(TOP)/db/XPS_extra.db"
{
pattern
{P, R, PORT, ADDR}
{IOC:, m1, XPS1, 0}
{IOC:, m2, XPS1 1}
{IOC:, m3, XPS1 2}
{IOC:, m4, XPS1 3}
{IOC:, m5, XPS1 4}
{IOC:, m6, XPS1 5}
}
file "$(TOP)/db/profileMoveController.template"
{
pattern
{P, R, PORT, NAXES, NPOINTS, NPULSES, TIMEOUT}
{IOC:, Prof1:, XPS1, 6, 2000, 2000, 1}
}
file "$(TOP)/db/profileMoveControllerXPS.template"
{
pattern
{P, R, PORT, NAXES, NPOINTS, NPULSES, TIMEOUT}
{IOC:, Prof1:, XPS1, 6, 2000, 2000, 1}
}
file "$(TOP)/db/profileMoveAxis.template"
{
pattern
{P, R, M, PORT, ADDR,NPOINTS, NREADBACK, MOTOR, PREC, TIMEOUT}
{IOC:, Prof1:, 1, XPS1, 0, 2000, 2000, IOC:m1, 3, 1}
{IOC:, Prof1:, 2, XPS1, 1, 2000, 2000, IOC:m2, 4, 1}
{IOC:, Prof1:, 3, XPS1, 2, 2000, 2000, IOC:m3, 4, 1}
{IOC:, Prof1:, 4, XPS1, 3, 2000, 2000, IOC:m4, 4, 1}
{IOC:, Prof1:, 5, XPS1, 4, 2000, 2000, IOC:m5, 4, 1}
{IOC:, Prof1:, 6, XPS1, 5, 2000, 2000, IOC:m6, 4, 1}
{IOC:, Prof1:, 7, XPS1, 6, 2000, 2000, IOC:m6, 4, 1}
{IOC:, Prof1:, 8, XPS1, 7, 2000, 2000, IOC:m6, 4, 1}
}
file "$(TOP)/db/profileMoveAxisXPS.template"
{
pattern
{P, R, M, PORT, ADDR,NPOINTS, NREADBACK, PREC, TIMEOUT}
{IOC:, Prof1:, 1, XPS1, 0, 2000, 2000, 3, 1}
{IOC:, Prof1:, 2, XPS1, 1, 2000, 2000, 4, 1}
{IOC:, Prof1:, 3, XPS1, 2, 2000, 2000, 4, 1}
{IOC:, Prof1:, 4, XPS1, 3, 2000, 2000, 4, 1}
{IOC:, Prof1:, 5, XPS1, 4, 2000, 2000, 4, 1}
{IOC:, Prof1:, 6, XPS1, 5, 2000, 2000, 4, 1}
{IOC:, Prof1:, 7, XPS1, 6, 2000, 2000, 4, 1}
{IOC:, Prof1:, 8, XPS1, 7, 2000, 2000, 4, 1}
}
-67
View File
@@ -1,67 +0,0 @@
IdlePollPeriod = 1.00
MovingPollPeriod = 0.25
lastPos = 0
targetPos = 0
function move(position, relative, minVel, maxVel, accel)
local MRES = asyn.getDoubleParam( DRIVER, AXIS, "MOTOR_REC_RESOLUTION")
if (relative) then
local prev = asyn.getDoubleParam( DRIVER, AXIS, "MOTOR_POSITION")
targetPos = prev + (position * MRES)
else
targetPos = (position * MRES)
end
epics.put(DRIVE_PV, targetPos)
if (position > 0) then
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_DIRECTION", 1)
else
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_DIRECTION", 0)
end
asyn.callParamCallbacks(DRIVER, AXIS)
end
function poll()
local MRES = asyn.getDoubleParam( DRIVER, AXIS, "MOTOR_REC_RESOLUTION")
if (MRES == 0.0) then
return true
end
local curr = epics.get(READBACK_PV)
asyn.setDoubleParam( DRIVER, AXIS, "MOTOR_POSITION", curr / MRES)
local done = 0
local moving = 1
if (curr == targetPos) then
done = 1
moving = 0
elseif (math.abs(curr - targetPos) <= MRES and lastPos == curr) then
done = 1
moving = 0
end
lastPos = curr
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_DONE", done)
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_MOVING", moving)
asyn.callParamCallbacks(DRIVER, AXIS)
return (done ~= 1)
end
function stop(acceleration)
local curr = asyn.getDoubleParam( DRIVER, AXIS, "MOTOR_POSITION")
epics.put(DRIVE_PV, curr)
targetPos = curr
end
-66
View File
@@ -1,66 +0,0 @@
IdlePollPeriod = 1.0
MovingPollPeriod = 0.25
ForcedFastPolls = 2
InTerminator = "\r\n"
OutTerminator = "\r\n"
function sendAccelAndVelocity(minVel, maxVel, accel)
asyn.writeread( string.format( "%d BAS %f", AXIS + 1, minVel) , PORT);
asyn.writeread( string.format( "%d VEL %f", AXIS + 1, maxVel) , PORT);
asyn.writeread( string.format( "%d ACC %f", AXIS + 1, accel ) , PORT);
end
function move(position, relative, minVel, maxVel, accel)
sendAccelAndVelocity( minVel, maxVel, accel)
if (relative) then
asyn.writeread( string.format( "%d MR %d", AXIS + 1, math.floor(position) ) , PORT)
else
asyn.writeread( string.format( "%d MV %d", AXIS + 1, math.floor(position) ) , PORT)
end
end
function moveVelocity(minVel, maxVel, accel)
sendAccelAndVelocity( minVel, maxVel, accel)
asyn.writeread( string.format( "%d JOG %f", AXIS + 1, maxVel) , PORT);
end
function poll()
asyn.write( string.format( "%d POS?", AXIS + 1) , PORT)
asyn.setDoubleParam( DRIVER, AXIS, "MOTOR_POSITION", tonumber( asyn.read(PORT) ) )
asyn.write( string.format( "%d ST?", AXIS + 1) , PORT)
local status = tonumber( asyn.read(PORT) )
local direction = (status & 1)
local done = (status & 2) >> 1
local limit_high = (status & 8) >> 3
local limit_low = (status & 16) >> 4
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_DIRECTION", direction)
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_DONE", done)
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_MOVING", done ~ 1)
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_HIGH_LIMIT", limit_high)
asyn.setIntegerParam( DRIVER, AXIS, "MOTOR_STATUS_LOW_LIMIT", limit_low)
asyn.callParamCallbacks(DRIVER, AXIS)
return (done ~= 1)
end
function stop(acceleration)
asyn.writeread( string.format( "%d AB", AXIS + 1) , PORT);
end
function setPosition(position)
asyn.writeread( string.format( "%d POS %d", AXIS + 1, math.floor(position) ) , PORT);
end
-39
View File
@@ -1,39 +0,0 @@
#errlogInit(5000)
< envPaths
# Tell EPICS all about the record types, device-support modules, drivers,
# etc.
dbLoadDatabase("../../dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
### Motors
dbLoadTemplate "motor.substitutions.AG_CONEX"
# For Windows
#drvAsynSerialPortConfigure("serial1", "COM3", 0, 0, 0)
# For Linux
drvAsynSerialPortConfigure("serial1", "/dev/ttyUSB0", 0, 0, 0)
asynOctetSetInputEos("serial1",0,"\r\n")
asynOctetSetOutputEos("serial1",0,"\r\n")
asynSetOption("serial1",0,"baud","921600")
asynSetOption("serial1",0,"bits","8")
asynSetOption("serial1",0,"stop","1")
asynSetOption("serial1",0,"parity","none")
asynSetOption("serial1",0,"clocal","Y")
asynSetOption("serial1",0,"crtscts","N")
asynSetTraceIOMask("serial1", 0, 2)
#asynSetTraceMask("serial1", 0, 9)
# Load asyn record
dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=IOC:,R=serial1,PORT=serial1, ADDR=0,OMAX=256,IMAX=256")
# AG_CONEXCreateController(asyn port, serial port, controllerID,
# active poll period (ms), idle poll period (ms))
AG_CONEXCreateController("Agilis1", "serial1", 1, 50, 500)
asynSetTraceIOMask("Agilis1", 0, 2)
#asynSetTraceMask("Agilis1", 0, 255)
iocInit
dbpf IOC:m1.RTRY 0
dbpf IOC:m1.NTM 0
-40
View File
@@ -1,40 +0,0 @@
#errlogInit(5000)
< envPaths
# Tell EPICS all about the record types, device-support modules, drivers,
# etc.
dbLoadDatabase("../../dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
### Motors
dbLoadTemplate "motor.substitutions.AG_UC"
# For Windows
#drvAsynSerialPortConfigure("serial1", "COM3", 0, 0, 0)
# For Linux
drvAsynSerialPortConfigure("serial1", "/dev/ttyUSB0", 0, 0, 0)
asynOctetSetInputEos("serial1",0,"\r\n")
asynOctetSetOutputEos("serial1",0,"\r\n")
asynSetOption("serial1",0,"baud","921600")
asynSetOption("serial1",0,"bits","8")
asynSetOption("serial1",0,"stop","1")
asynSetOption("serial1",0,"parity","none")
asynSetOption("serial1",0,"clocal","Y")
asynSetOption("serial1",0,"crtscts","N")
asynSetTraceIOMask("serial1", 0, 2)
#asynSetTraceMask("serial1", 0, 9)
# Load asynRecord records
dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=IOC:,R=serial1,PORT=serial1, ADDR=0,OMAX=256,IMAX=256")
# AG_UCCreateController(asyn port, serial port, number of axes,
# active poll period (ms), idle poll period (ms))
AG_UCCreateController("Agilis1", "serial1", 2, 50, 500)
asynSetTraceIOMask("Agilis1", 0, 2)
#asynSetTraceMask("Agilis1", 0, 255)
# AG_UCCreateAxis((AG_UC controller port, axis, hasLimits, forwardAmplitude, reverseAmplitude)
AG_UCCreateAxis("Agilis1", 0, 0, 50, -30)
AG_UCCreateAxis("Agilis1", 1, 0, 40, -50)
iocInit
-74
View File
@@ -1,74 +0,0 @@
# ANG1 motors Command file Example
#
### Note: Modbus support (the EPICS modbus module) is required to be included in the
### EPICS application where the ANG1 support will be loaded. This file is an
### example of how to load the ANG1 support, in an ioc that is built with the
### EPICS modbus module.
# Use the following commands for TCP/IP
#drvAsynIPPortConfigure(const char *portName,
# const char *hostInfo,
# unsigned int priority,
# int noAutoConnect,
# int noProcessEos);
# One per controller. One controller can support up to six drivers.
drvAsynIPPortConfigure("ang1_1","164.54.53.107:502",0,0,1)
#drvAsynIPPortConfigure("ang1_2","164.54.53.23:502",0,0,1)
#drvAsynIPPortConfigure("ang1_3","164.54.xxx.xxx:502",0,0,1)
#modbusInterposeConfig(const char *portName,
# modbusLinkType linkType,
# int timeoutMsec,
# int writeDelayMsec)
# One per controller. One controller can support up to six drivers.
modbusInterposeConfig("ang1_1",0,2000,0)
#modbusInterposeConfig("ang1_2",0,2000,0)
# Word access at Modbus address 0
# Access 1 words as inputs.
# Function code=3
# default data type unsigned integer.
# drvModbusAsynConfigure("portName", "tcpPortName", slaveAddress, modbusFunction, modbusStartAddress, modbusLength, dataType, pollMsec, "plcType")
# One per axis. Note: "ANG1" is the AMCI model. "ANG1_1" is the controller. "ANG1_1_1" is the axis.
drvModbusAsynConfigure("ANG1_1_1_In_Word", "ang1_1", 0, 4, 0, 10, 0, 100, "ANG1_stepper")
drvModbusAsynConfigure("ANG1_1_2_In_Word", "ang1_1", 0, 4, 10, 10, 0, 100, "ANG1_stepper")
#drvModbusAsynConfigure("ANG1_1_3_In_Word", "ang1_1", 0, 3, 20, 10, 0, 100, "ANG1_stepper")
#drvModbusAsynConfigure("ANG1_1_4_In_Word", "ang1_1", 0, 3, 30, 10, 0, 100, "ANG1_stepper")
#drvModbusAsynConfigure("ANG1_1_5_In_Word", "ang1_1", 0, 3, 40, 10, 0, 100, "ANG1_stepper")
#drvModbusAsynConfigure("ANG1_1_6_In_Word", "ang1_1", 0, 3, 50, 10, 0, 100, "ANG1_stepper")
# Access 1 words as outputs.
# Either function code=6 (single register) or 16 (multiple registers) can be used, but 16
# is better because it is "atomic" when writing values longer than 16-bits.
# Default data type unsigned integer.
# drvModbusAsynConfigure("portName", "tcpPortName", slaveAddress, modbusFunction, modbusStartAddress, modbusLength, dataType, pollMsec, "plcType")
# Not sure why the outputs can't be configured for Modbus data type 4?
drvModbusAsynConfigure("ANG1_1_1_Out_Word", "ang1_1", 0, 6, 1024, 10, 0, 1, "ANG1_stepper")
drvModbusAsynConfigure("ANG1_1_2_Out_Word", "ang1_1", 0, 6, 1034, 10, 0, 1, "ANG1_stepper")
#drvModbusAsynConfigure("ANG1_1_3_Out_Word", "ang1_1", 0, 6, 1044, 10, 0, 1, "ANG1_stepper")
#drvModbusAsynConfigure("ANG1_1_4_Out_Word", "ang1_1", 0, 6, 1054, 10, 0, 1, "ANG1_stepper")
#drvModbusAsynConfigure("ANG1_1_5_Out_Word", "ang1_1", 0, 6, 1064, 10, 0, 1, "ANG1_stepper")
#drvModbusAsynConfigure("ANG1_1_6_Out_Word", "ang1_1", 0, 6, 1074, 10, 0, 1, "ANG1_stepper")
# Second ANG1 controller...
#drvModbusAsynConfigure("ANG1_2_1_Out_Word_0", "ang1_2", 0, 6, 1024, 1, 0, 1, "ANG1_stepper")
dbLoadTemplate("ANG1_motors.substitutions")
# AMCI ANG1 stepper controller/driver support
# portName The name of the asyn port that will be created for this driver
# ANG1InPortName The name of the In drvAsynIPPPort that was created previously to connect to the ANG1 controller
# ANG1OutPortName The name of the Out drvAsynIPPPort that was created previously to connect to the ANG1 controller
# numAxes The number of axes that this controller supports
# movingPollPeriod The time in ms between polls when any axis is moving
# idlePollPeriod The time in ms between polls when no axis is moving
#
# One per axis. Note: "ANG1" is the AMCI model. "ANG1_1" is the controller. "ANG1_1_1" is the axis.
# Also, ANG1_1_1 is the port name needed for motor.substitutions.
ANG1CreateController(ANG1_1_1, ANG1_1_1_In_Word, ANG1_1_1_Out_Word, 1, 100, 0)
ANG1CreateController(ANG1_1_2, ANG1_1_2_In_Word, ANG1_1_2_Out_Word, 1, 100, 0)
#ANG1CreateController(ANG1_1, ANG1_1_3_In_Word, ANG1_1_3_Out_Word, 1, 100, 0)
#ANG1CreateController(ANG1_1, ANG1_1_4_In_Word, ANG1_1_4_Out_Word, 1, 100, 0)
#ANG1CreateController(ANG1_1, ANG1_1_5_In_Word, ANG1_1_5_Out_Word, 1, 100, 0)
#ANG1CreateController(ANG1_1, ANG1_1_6_In_Word, ANG1_1_6_Out_Word, 1, 100, 0)
-45
View File
@@ -1,45 +0,0 @@
#errlogInit(5000)
< envPaths
# Tell EPICS all about the record types, device-support modules, drivers,
# etc.
dbLoadDatabase("../../dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
### Motors
dbLoadTemplate "motor.substitutions.CONEX-PP"
# For Windows
drvAsynSerialPortConfigure("serial1", "COM8", 0, 0, 0)
# For Linux
#drvAsynSerialPortConfigure("serial1", "/dev/ttyUSB0", 0, 0, 0)
asynOctetSetInputEos("serial1",0,"\r\n")
asynOctetSetOutputEos("serial1",0,"\r\n")
asynSetOption("serial1",0,"baud","115200")
asynSetOption("serial1",0,"bits","8")
asynSetOption("serial1",0,"stop","1")
asynSetOption("serial1",0,"parity","none")
asynSetOption("serial1",0,"clocal","Y")
asynSetOption("serial1",0,"crtscts","N")
asynSetTraceIOMask("serial1", 0, 2)
#asynSetTraceMask("serial1", 0, 9)
# Load asyn record
dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=IOC:,R=serial1,PORT=serial1, ADDR=0,OMAX=256,IMAX=256")
# AG_CONEXCreateController(asyn port, serial port, controllerID,
# active poll period (ms), idle poll period (ms))
AG_CONEXCreateController("CONEX1", "serial1", 1, 50, 500)
asynSetTraceIOMask("CONEX1", 0, 2)
#asynSetTraceMask("CONEX1", 0, 255)
AG_CONEXCreateController("CONEX2", "serial1", 2, 50, 500)
asynSetTraceIOMask("CONEX2", 0, 2)
#asynSetTraceMask("CONEX2", 0, 255)
AG_CONEXCreateController("CONEX3", "serial1", 3, 50, 500)
asynSetTraceIOMask("CONEX3", 0, 2)
#asynSetTraceMask("CONEX3", 0, 255)
iocInit
dbpf IOC:m1.RTRY 0
dbpf IOC:m1.NTM 0
-15
View File
@@ -1,15 +0,0 @@
### Motors
dbLoadTemplate "motor.substitutions.SMC100"
### Serial port setup
drvAsynSerialPortConfigure("serial1", "/dev/ttyS0", 0, 0, 0)
asynSetOption(serial1,0,baud,57600)
asynOctetSetInputEos("serial1",0,"\r\n")
asynOctetSetOutputEos("serial1",0,"\r\n")
### Newport SMC100 support
# (driver port, serial port, axis num, ms mov poll, ms idle poll, egu per step)
SMC100CreateController("SMC100_1", "serial1",1, 100, 0, "0.00005")
iocInit
-349
View File
@@ -1,349 +0,0 @@
# The is the "ASYN" example for communication to either a Newport MM4000/5 or an
# IMS483 controller. The examples must be configured by including or omitting
# comment characters (i.e., #'s) from this file.
# "#!" marks lines that can be uncommented.
# The following must be added for many board support packages
#!cd "... IOC st.cmd complete directory path ... "
< cdCommands
#!< ../nfsCommands
cd topbin
# If the VxWorks kernel was built using the project facility, the following must
# be added before any C++ code is loaded (see SPR #28980).
sysCplusEnable=1
ld < WithAsynVx.munch
cd startup
dbLoadDatabase("$(TOP)/dbd/WithAsynVx.dbd")
WithAsynVx_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("motor.substitutions")
dbLoadRecords("$(MOTOR)/db/motorUtil.db", "P=IOC:")
# Configure the ASYN server code. This MUST be configured too!
< st_asynserver.cmd.Vx
# Newport MM3000 and MM4000/5/6 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!MM3000Setup(1, 10)
#!MM4000Setup(1, 10)
# Newport MM3000 and MM4000/5/6 driver configuration parameters:
# (1) controller# being configured
# (2) ASYN port name
# (3) address (GPIB only)
#!MM3000Config(0, "a-Serial[0]")
#!drvMM3000debug=4
#!MM4000Config(0, "a-Serial[0]")
#!drvMM4000debug=4
# The MM4000 driver does not set end of string (EOS).
# for RS232 serial,
#!asynOctetSetInputEos( "a-Serial[0]",0,"\r")
#!asynOctetSetOutputEos("a-Serial[0]",0,"\r")
# for GPIB,
#!asynInterposeEosConfig("L0", 10, 1, 1)
#!asynOctetSetInputEos( "L0",10,"\r")
#!asynOctetSetOutputEos("L0",10,"\r")
# Newport PM500 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!PM500Setup(1, 10)
# Newport PM500 configuration parameters:
# (1) controller# being configured
# (2) ASYN port name
# (3) address (GPIB only)
#!PM500Config(0, "a-Serial[0]")
#!drvPM500debug=4
# IMS IM483 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
# SM - single mode PL - party mode
#!IM483SMSetup(1, 10)
#!IM483PLSetup(1, 10)
# IMS IM483 configuration parameters:
# (1) controller# (chain#) being configured,
# (2) ASYN port name
# SM - single mode PL - party mode
#!IM483SMConfig(0, "a-Serial[0]")
#!drvIM483SMdebug=4
#!IM483PLConfig(0, "a-Serial[0]")
#!drvIM483PLdebug=4
# MCB-4B driver setup parameters:
# (1) maximum # of controllers,
# (2) motor task polling rate (min=1Hz, max=60Hz)
#!MCB4BSetup(1, 10)
# MCB-4B driver configuration parameters:
# (1) controller
# (2) ASYN port name
#!MCB4BConfig(0, "a-Serial[0]")
#!asynOctetSetInputEos("a-Serial[0]",0,"\r")
#!asynOctetSetOutputEos("a-Serial[0]",0,"\r")
#!drvMCB4BDebug=4
# Newport ESP300 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!ESP300Setup(1, 10)
# Newport ESP300 driver configuration parameters:
# (1) controller# being configured
# (2) ASYN port name
# (3) address (GPIB only)
#!ESP300Config(0, "a-Serial[0]")
#!drvESP300debug = 4
# MicroMo MVP2001 driver setup parameters:
#
# NOTE: The 1st controller on each chain should have it's address = 1.
# The rest of the controllers on a chain should follow sequentially.
#
#
# int MVP2001Setup(int num_cards, /* number of CHAINS of controllers */
# int scan_rate) /* polling rate (Min=1Hz, max=60Hz) */
#!MVP2001Setup(1, 10)
# int MVP2001Config(int card, /* CHAIN being configured */
# (2) ASYN port name
#!MVP2001Config(0, "a-Serial[0]")
#!drvMVP2001debug=4
# PI C-844 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!PIC844Setup(1, 10)
# PI C-844 driver configuration parameters:
# (1) controller# being configured
# (2) ASYN port name
# (3) address (GPIB only)
#!PIC844Config(0, "a-Serial[0]")
#!drvPIC844debug = 4
# PI C-848 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!PIC848Setup(1, 2)
# PI C-848 driver configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
#!PIC848Config(0, "a-Serial[0]")
#!drvPIC848debug = 4
# PI E-662 Piezo driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz, max=60Hz)
#!PIC662Setup(1, 60)
# PI E-662 Piezo driver configuration parameters:
# (1) controller being configured
# (2) asyn port name (string)
#!PIC662Config(0, "serial1")
#!drvPIC662debug = 4
# PI C-862 DC-motor driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz, max=60Hz)
#!PIC862Setup(1, 60)
# PI C-862 DC-motor driver configuration parameters:
# (1) controller being configured
# (2) asyn port name (string)
#!PIC862Config(0, "serial1")
#!drvPIC862debug = 4
# New Focus Picomotor Network Controller (model 8750/2) (setup parameters:
# (1) maximum number of controllers in system
# (2) maximum number of drivers per controller (1 - 3)
# (3) motor task polling rate (min=1Hz,max=60Hz)
#!PMNC87xxSetup(1, 2, 10)
# New Focuc Picomotor Network Controller (model 8750/2) configuration parameters:
# (1) controller# being configured,
# (2) asyn port name (string)
#!PMNC87xxConfig(0, "serial2")
#!drvPMNC87xxdebug=4
# Micos MoCo driver setup parameters:
# Load MicosSetup once.
# (1) max # of controller groups. Controller groups are per serial
# port.
# (2) max # axes per controller group. Maximum 16. (addr 0-15)
# (3) motor task polling rate (min=1Hz, max=60Hz, 10Hz works well)
# Example:
# MicosSetup(1, 2, 10) 1 group. 2 axes (controllers) in the group.
# 10Hz poll.
#!MicosSetup(1, 2, 10)
# Micos MoCo driver configuration parameters:
# Load one MicosConfig for each group of Micos drivers.
# (1) "Controller group" number
# (2) ASYN port name
#!MicosConfig(0, "a-Serial[0]")
#!drvMicosDebug = 4
# Micos SMC hydra
#!< motor.cmd.SMChydra
# IMS MDrive driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!MDriveSetup(1, 10)
# IMS MDrive driver configuration parameters:
# (1) controller# being configured
#!MDriveConfig(0, "a-Serial[0]")
#!drvMDrivedebug = 4
# Newport XPS driver setup parameters:
# (1) maximum number of controllers in system
#!XPSSetup(2)
# Newport XPS driver configuration parameters:
# (1) Controller # being configured
# (2) IP address or IP name
# (3) IP port number that XPS is listening on
# (4) Number of axes this controller supports
# (5) Time to poll (msec) when an axis is in motion
# (6) Time to poll (msec) when an axis is idle. 0 for no polling
#!XPSConfig(0, "xxx.xx.xxx.1", 5001, 5, 100, 500)
#!XPSConfig(1, "xxx.xx.xxx.2", 5001, 4, 100, 500)
# Newport XPS group and positioner name configuration:
# (1) Controller # being configured
# (2) axis number 0-7
# (3) groupName.positionerName e.g. Diffractometer.Phi
# (4) steps per user unit
#!XPSConfigAxis(0, 0, "GROUP1.PHI", 10000)
#!XPSConfigAxis(0, 1, "GROUP1.KAPPA", 10000)
#!XPSConfigAxis(1, 0, "GROUP1.Y1_BASE", 1000)
#!XPSConfigAxis(1, 1, "GROUP2.Y2_BASE", 1000)
#!XPSConfigAxis(1, 2, "GROUP3.Y3_BASE", 1000)
# OMS PC68/78 stand-alone serial driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!OmsPC68Setup(1, 10)
# OMS PC68/78 stand-alone serial driver configuration parameters:
# (1) Card# being configured
# (2) asyn port name
#!OmsPC68Config(0, "L0")
#!drvOmsPC68debug=4
# Kohzu SC-800 motor controller setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!SC800Setup(1, 5)
# Kohzu SC-800 motor controller configuration parameters:
# (1) controller# being configured
# (2) ASYN port name
# (3) address (GPIB only)
#!SC800Config(0, "L0", 0)
#!drvSC800debug=4
# Faulhaber MCDC2805 driver setup parameters:
# (1)Max. controller count
# (2)Polling rate
#!MCDC2805Setup(1, 10)
# Faulhaber MCDC2805 driver configuration parameters:
# (1)Card being configured
# (2)# modules on this serial port
# (3)asyn port name
#!MCDC2805Config(0, 1, "L0")
#!drvMCDC2805debug=4
# The MCDC2805 driver does not set end of string (EOS).
#!asynOctetSetInputEos("L0",0,"\r")
#!asynOctetSetOutputEos("L0",0,"\r")
# attocube ANC 150 asyn motor driver setup parameter.
#!ANC150AsynSetup(1) /* number of ANC150 controllers in system. */
# attocube ANC 150 asyn motor driver configure parameters.
# (1) Controller number being configured
# (2) ASYN port name
# (3) Number of axes this controller supports
# (4) Time to poll (msec) when an axis is in motion
# (5) Time to poll (msec) when an axis is idle. 0 for no polling
#!ANC150AsynConfig(0, "a-Serial[1]", 3, 250, 2000)
# Aerotech Ensemble digital servo controller Setup
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!EnsembleSetup(1, 10)
# Aerotech Ensemble digital servo controller Configure
# (1) controller# being configured,
# (2) asyn port name (string)
#!EnsembleConfig(0, "a-Serial[0]")
# Aerotech Ensemble digital servo controller asyn motor Setup
# (1) maximum number of controllers in system
#!EnsembleAsynSetup(1)
# The Ensemble driver does not set end of string (EOS).
#!asynOctetSetInputEos(EnsemblePort,0,"\n")
#!asynOctetSetOutputEos(EnsemblePort,0,"\n")
# Aerotech Ensemble digital servo controller asyn motor Config
# (1) Controller number being configured
# (2) ASYN port name
# (3) ASYN address (GPIB only)
# (4) Number of axes this controller supports
# (5) Time to poll (msec) when an axis is in motion
# (6) Time to poll (msec) when an axis is idle. 0 for no polling
#!EnsembleAsynConfig(0, EnsemblePort, 0, 1, 100, 1000)
# Newport MM4000/5/6 asyn motor driver setup parameter.
#!MM4000AsynSetup(1) /* number of MM4000 controllers in system. */
# Newport MM4000/5/6 asyn motor driver configure parameters.
# (1) Controller number being configured
# (2) ASYN port name
# (3) ASYN address (GPIB only)
# (4) Number of axes this controller supports
# (5) Time to poll (msec) when an axis is in motion
# (6) Time to poll (msec) when an axis is idle. 0 for no polling
#!MM4000AsynConfig(0, "a-Serial[1]", 0, 1, 100, 250)
# Asyn-based Motor Record support
# (1) Asyn port
# (2) Driver name
# (3) Controller index
# (4) Max. number of axes
#!drvAsynMotorConfigure("MM4", "motorMM4000", 0, 4)
#!drvAsynMotorConfigure("ANC150","motorANC150", 0, 2 )
#!drvAsynMotorConfigure("XPS1", "motorXPS", 0, 5)
#!drvAsynMotorConfigure("XPS2", "motorXPS", 1, 5)
#!drvAsynMotorConfigure("AeroE1","motorEnsemble", 0, 1)
#!drvAsynMotorConfigure("AeroE2","motorEnsemble", 1, 1)
iocInit
# motorUtil (allstop & alldone)
motorUtilInit("IOC:")
-43
View File
@@ -1,43 +0,0 @@
#errlogInit(5000)
< envPaths
# Tell EPICS all about the record types, device-support modules, drivers,
# etc. in this build from CARS
dbLoadDatabase("../../dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
### Motors
dbLoadTemplate "motor.substitutions.acr"
drvAsynIPPortConfigure("ARIES1", "gse-aries1:5002", 0, 0, 0)
#asynSetTraceMask("ARIES1", 0, 3)
asynSetTraceIOMask("ARIES1", 0, 2)
asynOctetSetInputEos("ARIES1",0,"\r")
asynOctetSetOutputEos("ARIES1",0,"\r")
drvAsynIPPortConfigure("ARIES2", "gse-aries2:5002", 0, 0, 0)
#asynSetTraceMask("ARIES2", 0, 3)
asynSetTraceIOMask("ARIES2", 0, 2)
asynOctetSetInputEos("ARIES2",0,"\r")
asynOctetSetOutputEos("ARIES2",0,"\r")
dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=IOC:, R=asyn1, PORT=ARIES1, ADDR=0, OMAX=256, IMAX=256")
dbLoadRecords("$(ASYN)/db/asynRecord.db", "P=IOC:, R=asyn2, PORT=ARIES1, ADDR=0, OMAX=256, IMAX=256")
# PORT, ACR_PORT, number of axes, active poll period (ms), idle poll period (ms)
ACRCreateController("ACR1", "ARIES1", 1, 20, 1000)
ACRCreateController("ACR2", "ARIES2", 1, 20, 1000)
#asynSetTraceMask("ACR1", 0, 255)
asynSetTraceIOMask("ACR1", 0, 2)
#asynSetTraceMask("ACR2", 0, 255)
asynSetTraceIOMask("ACR2", 0, 2)
iocInit
# This IOC does not use save/restore, so set values of some PVs
dbpf("IOC:m1.RTRY", "0")
dbpf("IOC:m1.TWV", "0.1")
dbpf("IOC:m2.RTRY", "0")
dbpf("IOC:m2.TWV", "0.1")
-29
View File
@@ -1,29 +0,0 @@
< envPaths
# Tell EPICS all about the record types, device-support modules, drivers,
# etc. in this build from CARS
dbLoadDatabase("../../dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
### Motors
# Motors substitutions, customize this for your motor
dbLoadTemplate "motor.substitutions.ims"
# Configure asyn communication port, first
# drvAsynIPPortConfigure(IOPortName, port, priority, disable auto-connect, no process EOS)
drvAsynIPPortConfigure("M06", "ts-b34-nw09:2101", 0, 0, 0 )
# Configure one controller per motor, each controller just has 1 axis
# motorPortName, portName, deviceName, movingPollPeriod, idlePollPeriod
ImsMDrivePlusCreateController("IMS1", "M06", "1", 200, 5000)
# Optional: Enable tracing
#asynSetTraceIOMask("IMS1",0,0)
asynSetTraceMask("IMS1",0,9)
# Initialize the IOC and start processing records
iocInit()
-31
View File
@@ -1,31 +0,0 @@
#errlogInit(5000)
< envPaths
# Tell EPICS all about the record types, device-support modules, drivers,
# etc. in this build from CARS
dbLoadDatabase("../../dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
drvAsynIPPortConfigure("serial1", "164.54.160.36:4002",0,0,0)
asynOctetSetInputEos("serial1",0,"\r")
asynOctetSetOutputEos("serial1",0,"\r")
asynSetTraceIOMask("serial1", 0, 2)
#asynSetTraceMask("serial1", 0, 255)
MCB4BCreateController("MCB4B1", "serial1", 4, 100, 5000)
### Motors
dbLoadTemplate "motor.substitutions.mcb4b"
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=IOC:,R=serial1,PORT=serial1,ADDR=0,OMAX=80,IMAX=80")
iocInit
# This IOC does not use save/restore, so set values of some PVs
dbpf("IOC:m1.RTRY", "0")
dbpf("IOC:m1.TWV", "0.1")
dbpf("IOC:m2.RTRY", "0")
dbpf("IOC:m2.TWV", "0.1")
dbpf("IOC:m3.RTRY", "0")
dbpf("IOC:m3.TWV", "0.1")
dbpf("IOC:m4.RTRY", "0")
dbpf("IOC:m4.TWV", "0.1")
-24
View File
@@ -1,24 +0,0 @@
#!../../bin/linux-x86_64/phytronAxis
## You may have to change phytronAxis to something else
## everywhere it appears in this file
< envPaths
## Register all support components
dbLoadDatabase("../../dbd/WithAsyn.dbd",0,0)
WithAsyn_registerRecordDeviceDriver(pdbbase)
#drvAsynIPPortConfigure("testPort","localhost:8000",0,0,1)
drvAsynIPPortConfigure("testRemote","10.5.1.181:22222",0,0,1)
#phytronCreateController (phytronPort, asynPort, movingPollPeriod, idlePollPeriod, timeout)
phytronCreateController ("phyMotionPort", "testRemote", 100, 100, 1000)
#phytronCreateAxis(phytronPort, module, axis)
phytronCreateAxis("phyMotionPort", 1, 1)
phytronCreateAxis("phyMotionPort", 2, 1)
dbLoadTemplate "motor.substitutions.phytron"
iocInit()
-18
View File
@@ -1,18 +0,0 @@
< envPaths
dbLoadDatabase("$(TOP)/dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
epicsEnvSet("LUA_SCRIPT_PATH", "./scripts")
# Connect to virtual motor controller server
drvAsynIPPortConfigure("VMC","127.0.0.1:31337", 0, 0, 0)
#ScriptControllerConfig( "PORT_NAME", num_axes, "lua_script", "PARAMS=")
ScriptControllerConfig("VMC_MOTOR", 1, "vmc.lua", "PORT=VMC")
ScriptControllerConfig("SOFT_MOTOR", 1, "softMotor.lua", "DRIVE_PV='IOC:m1.VAL', READBACK_PV='IOC:m1.RBV'")
dbLoadTemplate("motor.substitutions.script")
iocInit
-19
View File
@@ -1,19 +0,0 @@
# The is the ASYN example for communication to 4 simulated motors
# "#!" marks lines that can be uncommented.
< envPaths
dbLoadDatabase("$(TOP)/dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("motor.substitutions.sim")
motorSimCreateController("motorSim1", 4)
#asynSetTraceIOMask("motorSim1", 0, 4)
#asynSetTraceMask("motorSim1", 0, 255)
# motorSimConfigAxis(port, axis, lowLimit, highLimit, home, start)
motorSimConfigAxis("motorSim1", 0, 20000, -20000, 500, 0)
motorSimConfigAxis("motorSim1", 1, 20000, -20000, 1500, 0)
motorSimConfigAxis("motorSim1", 2, 20000, -20000, 2500, 0)
motorSimConfigAxis("motorSim1", 3, 20000, -20000, 3000, 0)
iocInit
-27
View File
@@ -1,27 +0,0 @@
< envPaths
# Tell EPICS all about the record types, device-support modules, drivers,
# etc. in this build from CARS
dbLoadDatabase("../../dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
### Motors
# Motors substitutions, customize this for your motor
dbLoadTemplate "motor.substitutions.smaractmcs"
# Configure each controller
drvAsynIPPortConfigure("TSP2","ts-b34-nw08:2102",0,0,0)
# Controller port, asyn port, number of axis, moving poll period, idle poll period
# smarActMCSCreateController(const char *motorPortName, const char *ioPortName, int numAxes, double movingPollPeriod, double idlePollPeriod);
smarActMCSCreateController("P0", "TSP2", 1, 0.020, 1.0)
# Controller port, axis number, controller channel
# smarActMCSCreateAxis(const char *motorPortName, int axisNumber, int channel)
smarActMCSCreateAxis("P0", 0, 1);
smarActMCSCreateAxis("P0", 0, 0);
asynSetTraceIOMask("XPS1", 0, 2)
iocInit()
-246
View File
@@ -1,246 +0,0 @@
# The is the ASYN example for communication to a Newport MM4000/5/6.
# "#!" marks lines that can be uncommented.
< envPaths
dbLoadDatabase("$(TOP)/dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("motor.substitutions")
dbLoadRecords("$(MOTOR)/db/motorUtil.db", "P=IOC:")
# The following commands are for a local serial line
# Configure the asyn server code for either sun or linux.
#!Sun Solaris !drvAsynSerialPortConfigure("L0","/dev/ttya" ,0,0,0)
#!Redhat Linux!drvAsynSerialPortConfigure("L0","/dev/ttyS0",0,0,0)
asynSetOption("L0", -1, "baud", "9600")
asynSetOption("L0", -1, "bits", "8")
asynSetOption("L0", -1, "parity", "none")
asynSetOption("L0", -1, "stop", "1")
asynSetOption("L0", -1, "clocal", "Y")
asynSetOption("L0", -1, "crtscts", "N")
# Newport MM3000 and MM4000/5/6 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!MM3000Setup(1, 10)
MM4000Setup(1, 10)
# Newport MM3000 and MM4000/5/6 driver configuration parameters:
# (1) controller# being configured
# (2) ASYN port name
# (3) address (GPIB only)
#!MM3000Config(0, "a-Serial[0]")
#!drvMM3000debug=4
MM4000Config(0, "L0")
#!var drvMM4000debug 4
# The MM4000 driver does not set end of string (EOS).
# for RS232 serial,
#!asynOctetSetInputEos( "a-Serial[0]",0,"\r")
#!asynOctetSetOutputEos("a-Serial[0]",0,"\r")
# for GPIB,
#!asynInterposeEosConfig("L0", 10, 1, 1)
#!asynOctetSetInputEos( "L0",10,"\r")
#!asynOctetSetOutputEos("L0",10,"\r")
# Newport PM500 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!PM500Setup(1, 10)
# Newport PM500 configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
# (3) address (GPIB only)
#!PM500Config(0, "L0")
#!var drvPM500debug 4
# IMS IM483 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
# SM - single mode PL - party mode
#!IM483SMSetup(1, 10)
#!IM483PLSetup(1, 10)
# IMS IM483 configuration parameters:
# (1) controller# (chain#) being configured,
# (2) ASYN port name
# SM - single mode PL - party mode
#!IM483SMConfig(0, "L0")
#!var drvIM483SMdebug 4
#!IM483PLConfig(0, "L0")
#!var drvIM483PLdebug 4
# MCB-4B driver setup parameters:
# (1) maximum # of controllers,
# (2) motor task polling rate (min=1Hz, max=60Hz)
#!MCB4BSetup(1, 10)
# MCB-4B driver configuration parameters:
# (1) controller
# (2) ASYN port name
#!MCB4BConfig(0, "L0")
#!asynOctetSetInputEos("L0",0,"\r")
#!asynOctetSetOutputEos("L0",0,"\r")
#!var drvMCB4BDebug 4
# Newport ESP300 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!ESP300Setup(1, 10)
# Newport ESP300 driver configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
# (3) address (GPIB only)
#!ESP300Config(0, "L0")
#!var drvESP300debug 4
# MicroMo MVP2001 driver setup parameters:
#
# NOTE: The 1st controller on each chain should have it's address = 1.
# The rest of the controllers on a chain should follow sequentially.
#
#
# int MVP2001Setup(int num_cards, /* number of CHAINS of controllers */
# int scan_rate) /* polling rate (Min=1Hz, max=60Hz) */
#!MVP2001Setup(1, 10)
# int MVP2001Config(int card, /* CHAIN being configured */
# (2) ASYN port name
#!MVP2001Config(0, "L0")
#!drvMVP2001debug=4
# PI C-844 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!PIC844Setup(1, 10)
# PI C-844 driver configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
# (3) address (GPIB only)
#!PIC844Config(0, "L0")
#!var drvPIC844debug 4
# PI C-848 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!PIC848Setup(1, 2)
# PI C-848 driver configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
#!PIC848Config(0, "L0")
#!drvPIC848debug = 4
# Micos MoCo driver setup parameters:
# Load MicosSetup once.
# (1) max # of controller groups. Controller groups are per serial
# port.
# (2) max # axes per controller group. Maximum 16. (addr 0-15)
# (3) motor task polling rate (min=1Hz, max=60Hz, 10Hz works well)
# Example:
# MicosSetup(1, 2, 10) 1 group. 2 axes (controllers) in the group.
# 10Hz poll.
#!MicosSetup(1, 2, 10)
# Micos MoCo driver configuration parameters:
# Load one MicosConfig for each group of Micos drivers.
# (1) "Controller group" number
# (2) ASYN port name
#!MicosConfig(0, "L0")
#!var drvMicosDebug 4
# IMS MDrive driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!MDriveSetup(1, 10)
# IMS MDrive driver configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
#!MDriveConfig(0, "L0")
#!var drvMDrivedebug 4
# Kohzu SC-800 motor controller setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!SC800Setup(1, 5)
# Kohzu SC-800 motor controller configuration parameters:
# (1) controller# being configured
# (2) ASYN port name
# (3) address (GPIB only)
#!SC800Config(0, "L0", 0)
#!var drvSC800debug 4
# Faulhaber MCDC2805 driver setup parameters:
# (1)Max. controller count
# (2)Polling rate
#!MCDC2805Setup(1, 10)
# Faulhaber MCDC2805 driver configuration parameters:
# (1)Card being configured
# (2)# modules on this serial port
# (3)asyn port name
#!MCDC2805Config(0, 1, "L0")
#!var drvMCDC2805debug 4
# The MCDC2805 driver does not set end of string (EOS).
#!asynOctetSetInputEos("L0",0,"\r")
#!asynOctetSetOutputEos("L0",0,"\r")
# attocube ANC 150 asyn motor driver setup parameter.
#!ANC150AsynSetup(1) /* number of ANC150 controllers in system. */
# attocube ANC 150 asyn motor driver configure parameters.
# (1) Controller number being configured
# (2) ASYN port name
# (3) Number of axes this controller supports
# (4) Time to poll (msec) when an axis is in motion
# (5) Time to poll (msec) when an axis is idle. 0 for no polling
#!ANC150AsynConfig(0, "a-Serial[1]", 3, 250, 2000)
# Aerotech Ensemble digital servo controller Setup
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!EnsembleSetup(1, 10)
# Aerotech Ensemble digital servo controller Configure
# (1) controller# being configured,
# (2) asyn port name (string)
#!EnsembleConfig(0, "a-Serial[0]")
# Newport MM4000/5/6 asyn motor driver setup parameter.
#!MM4000AsynSetup(1) /* number of MM4000 controllers in system. */
# Newport MM4000/5/6 asyn motor driver configure parameters.
# (1) Controller number being configured
# (2) ASYN port name
# (3) ASYN address (GPIB only)
# (4) Number of axes this controller supports
# (5) Time to poll (msec) when an axis is in motion
# (6) Time to poll (msec) when an axis is idle. 0 for no polling
#!MM4000AsynConfig(0, "a-Serial[1]", 0, 1, 100, 250)
# Asyn-based Motor Record support
# (1) Asyn port
# (2) Driver name
# (3) Controller index
# (4) Max. number of axes
#!drvAsynMotorConfigure("MM4", "motorMM4000", 0, 4)
#!drvAsynMotorConfigure("ANC150","motorANC150", 0, 1)
iocInit
# motorUtil (allstop & alldone)
motorUtilInit("IOC:")
-177
View File
@@ -1,177 +0,0 @@
# The is the ASYN example for communication to a Newport MM4000/5/6.
# "#!" marks lines that can be uncommented.
< envPaths
dbLoadDatabase("$(TOP)/dbd/WithAsynWin32.dbd")
WithAsynWin32_registerRecordDeviceDriver(pdbbase)
dbLoadTemplate("motor.substitutions")
dbLoadRecords("$(MOTOR)/db/motorUtil.db", "P=IOC:")
# This is for WIN32, local serial ports not supported. Must use IP terminal server.
# Newport MM3000 and MM4000/5/6 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!MM3000Setup(1, 10)
MM4000Setup(1, 10)
# Newport MM3000 and MM4000/5/6 driver configuration parameters:
# (1) controller# being configured
# (2) ASYN port name
# (3) address (GPIB only)
#!MM3000Config(0, "a-Serial[0]")
#!drvMM3000debug=4
MM4000Config(0, "L0")
#!var drvMM4000debug 4
# Newport PM500 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!PM500Setup(1, 10)
# Newport PM500 configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
# (3) address (GPIB only)
#!PM500Config(0, "L0")
#!var drvPM500debug 4
# IMS IM483 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
# SM - single mode PL - party mode
#!IM483SMSetup(1, 10)
#!IM483PLSetup(1, 10)
# IMS IM483 configuration parameters:
# (1) controller# (chain#) being configured,
# (2) ASYN port name
# SM - single mode PL - party mode
#!IM483SMConfig(0, "L0")
#!var drvIM483SMdebug 4
#!IM483PLConfig(0, "L0")
#!var drvIM483PLdebug 4
# MCB-4B driver setup parameters:
# (1) maximum # of controllers,
# (2) motor task polling rate (min=1Hz, max=60Hz)
#!MCB4BSetup(1, 10)
# MCB-4B driver configuration parameters:
# (1) controller
# (2) ASYN port name
#!MCB4BConfig(0, "L0")
#!asynOctetSetInputEos("L0",0,"\r")
#!asynOctetSetOutputEos("L0",0,"\r")
#!var drvMCB4BDebug 4
# Newport ESP300 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!ESP300Setup(1, 10)
# Newport ESP300 driver configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
# (3) address (GPIB only)
#!ESP300Config(0, "L0")
#!var drvESP300debug 4
# MicroMo MVP2001 driver setup parameters:
#
# NOTE: The 1st controller on each chain should have it's address = 1.
# The rest of the controllers on a chain should follow sequentially.
#
#
# int MVP2001Setup(int num_cards, /* number of CHAINS of controllers */
# int scan_rate) /* polling rate (Min=1Hz, max=60Hz) */
#!MVP2001Setup(1, 10)
# int MVP2001Config(int card, /* CHAIN being configured */
# (2) ASYN port name
#!MVP2001Config(0, "L0")
#!drvMVP2001debug=4
# PI C-844 driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!PIC844Setup(1, 10)
# PI C-844 driver configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
# (3) address (GPIB only)
#!PIC844Config(0, "L0")
#!var drvPIC844debug 4
# Micos MoCo driver setup parameters:
# Load MicosSetup once.
# (1) max # of controller groups. Controller groups are per serial
# port.
# (2) max # axes per controller group. Maximum 16. (addr 0-15)
# (3) motor task polling rate (min=1Hz, max=60Hz, 10Hz works well)
# Example:
# MicosSetup(1, 2, 10) 1 group. 2 axes (controllers) in the group.
# 10Hz poll.
#!MicosSetup(1, 2, 10)
# Micos MoCo driver configuration parameters:
# Load one MicosConfig for each group of Micos drivers.
# (1) "Controller group" number
# (2) ASYN port name
#!MicosConfig(0, "L0")
#!var drvMicosDebug 4
# IMS MDrive driver setup parameters:
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!MDriveSetup(1, 10)
# IMS MDrive driver configuration parameters:
# (1) controller# being configured,
# (2) ASYN port name
#!MDriveConfig(0, "L0")
#!var drvMDrivedebug 4
# Faulhaber MCDC2805 driver setup parameters:
# (1)Max. controller count
# (2)Polling rate
#!MCDC2805Setup(1, 10)
# Faulhaber MCDC2805 driver configuration parameters:
# (1)Card being configured
# (2)# modules on this serial port
# (3)asyn port name
#!MCDC2805Config(0, 1, "L0")
#!var drvMCDC2805debug 4
# The MCDC2805 driver does not set end of string (EOS).
#!asynOctetSetInputEos("L0",0,"\r")
#!asynOctetSetOutputEos("L0",0,"\r")
# Aerotech Ensemble digital servo controller Setup
# (1) maximum number of controllers in system
# (2) motor task polling rate (min=1Hz,max=60Hz)
#!EnsembleSetup(1, 10)
# Aerotech Ensemble digital servo controller Configure
# (1) controller# being configured,
# (2) asyn port name (string)
#!EnsembleConfig(0, "a-Serial[0]")
# Asyn-based Motor Record support
# (1) Asyn port
# (2) Driver name
# (3) Controller index
# (4) Max. number of axes
#!drvAsynMotorConfigure("ANC150","motorANC150",0,1)
iocInit
# motorUtil (allstop & alldone)
motorUtilInit("IOC:")
-51
View File
@@ -1,51 +0,0 @@
errlogInit(5000)
< envPaths
# Tell EPICS all about the record types, device-support modules, drivers,
# etc. in this build from CARS
dbLoadDatabase("../../dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
### Motors
dbLoadTemplate "motor.substitutions.xps"
dbLoadTemplate "XPSAux.substitutions"
# cards (total controllers)
XPSSetup(1)
# card, IP, PORT, number of axes, active poll period (ms), idle poll period (ms)
XPSConfig(0, "newport-xps3", 5001, 3, 10, 5000)
# asynPort, IP address, IP port, poll period (ms)
XPSAuxConfig("XPS_AUX1", "newport-xps3", 5001, 50)
#asynSetTraceMask("XPS_AUX1", 0, 255)
#asynSetTraceIOMask("XPS_AUX1", 0, 2)
# asyn port, driver name, controller index, max. axes)
drvAsynMotorConfigure("XPS1", "motorXPS", 0, 3)
XPSInterpose("XPS1")
# card, axis, groupName.positionerName
XPSConfigAxis(0,0,"GROUP1.POSITIONER",20480)
XPSConfigAxis(0,1,"GROUP2.POSITIONER1",6768)
XPSConfigAxis(0,2,"GROUP2.POSITIONER2",20480)
#asynSetTraceMask newport-xps3:5001:0 0 255
#asynSetTraceIOMask newport-xps3:5001:0 0 2
#asynSetTraceMask newport-xps3:5001:1 0 255
#asynSetTraceIOMask newport-xps3:5001:1 0 2
#asynSetTraceMask XPS1 0 255
#asynSetTraceIOMask XPS1 0 2
#asynSetTraceMask XPS1 1 255
#asynSetTraceIOMask XPS1 1 2
#asynSetTraceMask XPS1 2 255
#asynSetTraceIOMask XPS1 2 2
#asynSetTraceMask newport-xps3:5001:3 0 255
#asynSetTraceIOMask newport-xps3:5001:3 0 2
dbLoadRecords("$(MOTOR)/motorApp/Db/trajectoryScan.db", "P=IOC:,R=traj1,NAXES=2,NELM=2000,NPULSE=2000,DONPV=13LAB:str:EraseStart,DONV=1,DOFFPV=13LAB:str:StopAll,DOFFV=1")
iocInit
seq(XPS_trajectoryScan,"P=IOC:,R=traj1,M1=m2,M2=m3,IPADDR=164.54.160.34,PORT=5001,GROUP=GROUP2,P1=POSITIONER1,P2=POSITIONER2")
-46
View File
@@ -1,46 +0,0 @@
#errlogInit(5000)
< envPaths
# Tell EPICS all about the record types, device-support modules, drivers,
# etc. in this build from CARS
dbLoadDatabase("../../dbd/WithAsyn.dbd")
WithAsyn_registerRecordDeviceDriver(pdbbase)
### Motors
dbLoadTemplate "motor.substitutions.xps3"
dbLoadTemplate "XPSAux.substitutions"
# asyn port, IP address, IP port, number of axes, active poll period (ms), idle poll period (ms)
XPSConfig("XPS1", "164.54.160.180", 5001, 6, 20, 500)
# asynPort, IP address, IP port, poll period (ms)
XPSAuxConfig("XPS_AUX1", "164.54.160.180", 5001, 50)
#asynSetTraceMask("XPS_AUX1", 0, 255)
#asynSetTraceIOMask("XPS_AUX1", 0, 2)
# XPS asyn port, axis, groupName.positionerName, stepSize
XPSConfigAxis("XPS1",0,"FINE.X", 100000) # VP-25XL
XPSConfigAxis("XPS1",1,"FINE.Y", 50000) # VP-5ZA
XPSConfigAxis("XPS1",2,"THETA.POSITIONER", 2000) # URS75CC
XPSConfigAxis("XPS1",3,"COARSEX.POSITIONER", 2000) # ILS200CC
XPSConfigAxis("XPS1",4,"COARSEY.POSITIONER", 2000) # ILS200CC
XPSConfigAxis("XPS1",5,"COARSEZ.POSITIONER", 5000) # IMS300CC
XPSEnableSetPosition(XPS1, 0)
XPSSetPositionSettlingTime(XPS1, 200)
iocInit
# This IOC does not use save/restore, so set values of some PVs
dbpf("IOC:m1.RTRY", "0")
dbpf("IOC:m1.TWV", "0.1")
dbpf("IOC:m2.RTRY", "0")
dbpf("IOC:m2.TWV", "0.1")
dbpf("IOC:m3.RTRY", "0")
dbpf("IOC:m3.TWV", "0.1")
dbpf("IOC:m4.RTRY", "0")
dbpf("IOC:m4.TWV", "0.1")
dbpf("IOC:m5.RTRY", "0")
dbpf("IOC:m5.TWV", "0.1")
dbpf("IOC:m6.RTRY", "0")
dbpf("IOC:m6.TWV", "0.1")

Some files were not shown because too many files have changed in this diff Show More