mirror of
https://github.com/Binary-Coalescence/motorDSM.git
synced 2025-08-05 14:15:39 -05:00
Compare commits
30 Commits
v0.9.0-alp
...
dev
Author | SHA1 | Date | |
---|---|---|---|
21a553fd3f
|
|||
daf3527a1e
|
|||
39db58a2e9
|
|||
66996c3bf2
|
|||
ffab0885cb
|
|||
b6cdd85d80
|
|||
8be8f42df0
|
|||
cd37aa6d09
|
|||
d225024d69
|
|||
760716f342 | |||
75a1ff060d | |||
c6edb953a5
|
|||
f85ae07d2b | |||
3ecb9676c0 | |||
c4d9507f84
|
|||
5e36582ecc
|
|||
d605ceceae
|
|||
bf680d0c6f
|
|||
03a93101c1 | |||
95c227a553 | |||
ffada72c50
|
|||
3614a806ea
|
|||
b25f608e98
|
|||
![]() |
841b6f5b41 | ||
2379c90d90 | |||
cf26f426df | |||
c1025d711b | |||
8fc33fa14d
|
|||
05a223bd17
|
|||
5d706d4879
|
1
.ci
1
.ci
Submodule .ci deleted from 5764601630
@@ -1,3 +0,0 @@
|
||||
BASE=3.14
|
||||
|
||||
include modules
|
@@ -1,3 +0,0 @@
|
||||
BASE=3.15
|
||||
|
||||
include modules
|
@@ -1,3 +0,0 @@
|
||||
BASE=7.0
|
||||
|
||||
include modules
|
@@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import re
|
||||
|
||||
# Setup ANSI Colors (copied from cue.py)
|
||||
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"
|
||||
|
||||
def cat(filename):
|
||||
'''
|
||||
Print the contents of a file
|
||||
'''
|
||||
with open(filename, 'r') as fh:
|
||||
for line in fh:
|
||||
print(line.strip())
|
||||
|
||||
def sanity_check(filename):
|
||||
'''
|
||||
Include the contents of a file in the github-actions log
|
||||
'''
|
||||
print("{}Contents of {}{}".format(ANSI_BLUE, filename, ANSI_RESET))
|
||||
cat(filename)
|
||||
print("{}End of {}{}".format(ANSI_BLUE, filename, ANSI_RESET))
|
||||
|
||||
if 'HOME' in os.environ:
|
||||
# Linux & OS X
|
||||
cache_dir = os.path.join(os.environ['HOME'], ".cache")
|
||||
else:
|
||||
# Windows
|
||||
cache_dir = os.path.join(os.environ['HOMEDRIVE'], os.environ['HOMEPATH'], ".cache")
|
||||
|
||||
module_dir = os.getenv('GITHUB_WORKSPACE')
|
||||
|
||||
# Copy the github-actions RELEASE.local to the configure dir
|
||||
filename = "configure/RELEASE.local"
|
||||
shutil.copy("{}/RELEASE.local".format(cache_dir), filename)
|
||||
|
||||
# Get the variable from the example release file
|
||||
example = "configure/EXAMPLE_RELEASE.local"
|
||||
fh = open(example, "r")
|
||||
lines = fh.readlines()
|
||||
fh.close()
|
||||
pObj = re.compile('(MOTOR_[^=]+)')
|
||||
module_var = None
|
||||
for line in lines:
|
||||
mObj = pObj.match(line)
|
||||
if mObj != None:
|
||||
module_var = mObj.group()
|
||||
break
|
||||
|
||||
# Add the path to the driver module to the RELEASE.local file, since it is needed by the example IOC
|
||||
fh = open(filename, "a")
|
||||
fh.write("{}={}\n".format(module_var, module_dir))
|
||||
fh.close()
|
||||
sanity_check(filename)
|
||||
|
||||
# Enable the building of example IOCs
|
||||
filename = "configure/CONFIG_SITE.local"
|
||||
fh = open(filename, 'w')
|
||||
fh.write("BUILD_IOCS = YES")
|
||||
fh.close()
|
||||
sanity_check(filename)
|
@@ -1,9 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import pprint
|
||||
|
||||
pprint.pprint(dict(os.environ), width = 1)
|
||||
|
||||
#!print("{}", breakmehere)
|
||||
|
@@ -1,9 +0,0 @@
|
||||
MODULES="sncseq ipac asyn autosave busy motor"
|
||||
|
||||
SNCSEQ=R2-2-9
|
||||
IPAC=master
|
||||
ASYN=R4-42
|
||||
AUTOSAVE=R5-10-2
|
||||
BUSY=R1-7-3
|
||||
MOTOR=master
|
||||
MOTOR_RECURSIVE=NO
|
@@ -1,43 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import shutil
|
||||
|
||||
# ugly hack: copy cue.py so that it can be imported
|
||||
shutil.copy('.ci/cue.py', '.ci-local/travis')
|
||||
from cue import *
|
||||
|
||||
def cat(filename):
|
||||
'''
|
||||
Print the contents of a file
|
||||
'''
|
||||
with open(filename, 'r') as fh:
|
||||
for line in fh:
|
||||
print(line.strip())
|
||||
|
||||
def sanity_check(filename):
|
||||
'''
|
||||
Include the contents of a file in the travis log
|
||||
'''
|
||||
print("{}Contents of {}{}".format(ANSI_BLUE, filename, ANSI_RESET))
|
||||
cat(filename)
|
||||
print("{}End of {}{}".format(ANSI_BLUE, filename, ANSI_RESET))
|
||||
|
||||
# Add the path to the driver module to the RELEASE.local file, since it is needed by the example IOC
|
||||
update_release_local('MOTOR_DSM', os.getenv('TRAVIS_BUILD_DIR'))
|
||||
|
||||
# Copy the travis RELEASE.local to the configure dir
|
||||
filename = "configure/RELEASE.local"
|
||||
shutil.copy("{}/RELEASE.local".format(cachedir), filename)
|
||||
sanity_check(filename)
|
||||
|
||||
# Enable the building of example IOCs
|
||||
filename = "configure/CONFIG_SITE.local"
|
||||
fh = open(filename, 'w')
|
||||
fh.write("BUILD_IOCS = YES")
|
||||
fh.close()
|
||||
sanity_check(filename)
|
||||
|
||||
# Remove cue.py
|
||||
os.remove('.ci-local/travis/cue.py')
|
||||
os.remove('.ci-local/travis/cue.pyc')
|
211
.github/workflows/ci-scripts-build-full.yml
vendored
211
.github/workflows/ci-scripts-build-full.yml
vendored
@@ -1,211 +0,0 @@
|
||||
# .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
|
109
.github/workflows/ci-scripts-build.yml
vendored
109
.github/workflows/ci-scripts-build.yml
vendored
@@ -1,109 +0,0 @@
|
||||
# .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:
|
||||
paths-ignore:
|
||||
- 'documentation/*'
|
||||
- '**/*.html'
|
||||
- '**/*.md'
|
||||
- '.github/workflows/ci-scripts-build-full.yml'
|
||||
|
||||
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
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,3 +0,0 @@
|
||||
[submodule ".ci"]
|
||||
path = .ci
|
||||
url = https://github.com/epics-base/ci-scripts
|
143
.travis.yml
143
.travis.yml
@@ -1,143 +0,0 @@
|
||||
# .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
|
||||
|
||||
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
|
||||
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
|
163
README.md
163
README.md
@@ -3,31 +3,21 @@ motorDSM
|
||||
|
||||
EPICS motor drivers for the following [Dynamic Structures and Materials](https://www.dynamic-structures.com/) motor controllers: MD-90
|
||||
|
||||
[](https://github.com/Binary-Coalescence/motorDSM/actions/workflows/ci-scripts-build.yml)
|
||||
|
||||
motorDSM is a submodule of [motor](https://github.com/epics-modules/motor). When motorDSM is built in the ``motor/modules`` directory, no manual configuration is needed.
|
||||
|
||||
motorDSM can also be built outside of motor by copying it's ``configure/EXAMPLE_RELEASE.local`` file to ``RELEASE.local`` and defining the paths to ``EPICS_BASE``, ``MOTOR``, and itself.
|
||||
|
||||
motorDSM contains an example IOC that is built if ``configure/CONFIG_SITE.local`` sets ``BUILD_IOCS = YES``. The example IOC can be built outside of the driver module. Copy ``iocs/dsmIOC/configure/EXAMPLE_RELEASE.local`` to ``RELEASE.local`` and uncomment and set the paths for the appropriate lines depending on whether motorDSM was built inside the motor module or independently.
|
||||
|
||||
To run the example IOC, in the ``iocs/dsmIOC/iocBoot/iocDsm`` directory, run
|
||||
|
||||
$ ../../bin/linux-x86_64/dsm st.cmd.md90
|
||||
|
||||
for one attached MD-90 controller, or
|
||||
|
||||
$ ../../bin/linux-x86_64/dsm st.cmd.md90.multi
|
||||
|
||||
for eight attached MD-90 controllers. You may need to change the path(s) for the serial port(s) in ``st.cmd.md90`` or ``st.cmd.md90.multi`` if the MD-90 is not attached at ``/dev/ttyUSB0``.
|
||||
|
||||
------------------------
|
||||
-------------------------------------------------
|
||||
Compiling motorDSM
|
||||
-------------------------------------------------
|
||||
|
||||
To set up a full EPICS stack for development and testing, install and configure all of the following dependencies:
|
||||
|
||||
------------------------
|
||||
epics-base
|
||||
------------------------
|
||||
### epics-base
|
||||
|
||||
Install make, gcc, and perl packages if not already installed, then clone and build epics-base:
|
||||
|
||||
@@ -40,8 +30,7 @@ Install make, gcc, and perl packages if not already installed, then clone and bu
|
||||
|
||||
|
||||
------------------------
|
||||
asyn
|
||||
------------------------
|
||||
### asyn
|
||||
|
||||
$ cd $SUPPORT
|
||||
$ git clone git@github.com:epics-modules/asyn.git
|
||||
@@ -62,8 +51,7 @@ if appropriate header files are in ``/usr/include/tirpc/rpc`` instead of ``/usr/
|
||||
|
||||
|
||||
------------------------
|
||||
seq
|
||||
------------------------
|
||||
### seq
|
||||
|
||||
$ cd $SUPPORT
|
||||
$ git clone git@github.com:ISISComputingGroup/EPICS-seq.git seq
|
||||
@@ -80,8 +68,7 @@ Edit ``seq/configure/RELEASE`` to add the missing '-' before the ``include`` for
|
||||
|
||||
|
||||
------------------------
|
||||
motor
|
||||
------------------------
|
||||
### motor
|
||||
|
||||
$ cd $SUPPORT
|
||||
$ git clone git@github.com:epics-modules/motor.git
|
||||
@@ -94,8 +81,7 @@ Create ``motor/configure/RELEASE.local`` and set ``SUPPORT``, ``ASYN``, ``SNCSEQ
|
||||
|
||||
|
||||
------------------------
|
||||
motorDSM (this package)
|
||||
------------------------
|
||||
### motorDSM (this package)
|
||||
|
||||
$ cd $SUPPORT
|
||||
$ git clone git@github.com:Binary-Coalescence/motorDSM.git
|
||||
@@ -110,3 +96,136 @@ In ``motorDSM/iocs/dsmIOC/configure``, copy ``EXAMPLE_RELEASE.local`` to ``RELEA
|
||||
$ cd $SUPPORT/motorDSM
|
||||
$ make distclean
|
||||
$ make
|
||||
|
||||
|
||||
-------------------------------------------------
|
||||
Configuring the IOC server
|
||||
-------------------------------------------------
|
||||
|
||||
The directory `$SUPPORT/motorDSM/iocs/dsmIOC/iocBoot/iocDSM` contains example configurations for the IOC server that runs on the computer the motor controllers are attached to. The `st.cmd.md90` and `motor.substitutions.md90` files provide an example to configure and run one attached MD-90. The `st.cmd.md90.multi` and `motor.substitutions.md90.multi` files provide an example to configure and run eight attached MD-90s connected on ports `dev/ttyUSB0` through `/dev/ttyUSB7`. Add or remove lines from the `*.multi` files as necessary to configure a different number of attached MD-90s.
|
||||
|
||||
The parameters in the IOC startup scripts are detailed here, but the files should contain reasonable defaults to run as-is.
|
||||
|
||||
**1. Define a new serial port named "serial0" and set the location of the physical port**
|
||||
|
||||
`drvAsynSerialPortConfigure("[serial name]", "[device location]", 0, 0, 0)`
|
||||
*e.g., `drvAsynSerialPortConfigure("serial0", "/dev/ttyUSB0", 0, 0, 0)`*
|
||||
|
||||
**2. Configure the port**
|
||||
|
||||
- Baud = 115200
|
||||
- Bits = 8
|
||||
- Parity = none
|
||||
- Stop bits = 1
|
||||
- Input end of message: "\r"
|
||||
- Output end of message: "\r"
|
||||
- Trace IO mask: 2
|
||||
|
||||
```
|
||||
asynSetOption("[serial name]", 0, "baud", "115200")
|
||||
asynSetOption("[serial name]", 0, "bits", "8")
|
||||
asynSetOption("[serial name]", 0, "parity", "none")
|
||||
asynSetOption("[serial name]", 0, "stop", "1")
|
||||
asynOctetSetInputEos("[serial name]", 0, "\r")
|
||||
asynOctetSetOutputEos("[serial name]", 0, "\r")
|
||||
asynSetTraceIOMask("[serial name]", 0, 2)
|
||||
```
|
||||
|
||||
Here `[serial name]` is the name you assigned in step 1.
|
||||
|
||||
**3. Set initial parameters**
|
||||
|
||||
- Power supply enabled (`EPS` command)
|
||||
- Deadband = 10 nm (`SDB 10` command)
|
||||
|
||||
```
|
||||
asynOctetConnect("initConnection", [serial name], 0)
|
||||
asynOctetWrite("initConnection", "EPS")
|
||||
asynOctetWrite("initConnection", "SDB 10")
|
||||
asynOctetDisconnect('initConnection')
|
||||
```
|
||||
|
||||
**4. Create MD-90 Controller object**
|
||||
|
||||
`MD90CreateController([controller name], [serial name], 1, 100, 5000)`
|
||||
|
||||
Here `[controller name]` is the name of the motor to assign. Convention is to use "MD90n", starting with n=0.
|
||||
|
||||
**5. Intialize the IOC**
|
||||
|
||||
After the call to `iocInit` (still in the st.cmd.md90[.multi] file), set up some default values for EPICS process variables for each motor. The example below uses `DSM:m0`, but they should also be set for each motor configured in the IOC startup script if connecting more than one.
|
||||
|
||||
````
|
||||
dbpf("DSM:m0.RTRY", "0") #sets retries to 0; this is automatic on the MD90
|
||||
dbpf("DSM:m0.TWV", "0.1") #Tweak distance
|
||||
dbpf("DSM:m0.VMAX", "1.0") #Sets max velocity to 1 mm/s
|
||||
dbpf("DSM:m0.HVEL", "1.0") #Sets max velocity to 1 mm/s
|
||||
````
|
||||
|
||||
**6. Update the substitutions file**
|
||||
|
||||
In the motor substitutions file (motor.substitutions.md90[.multi]), ensure the values in the `pattern` block's `PORT` field match the names used in the `std.cmd.md90[.multi]` file. Note that, despite this field being called "Port", it usese the names of the MD90 Controller object defined above (by default, MD900, MD901, etc). Do __not__ use the direct serial port names (by default, serial0, serial1, etc.).
|
||||
|
||||
|
||||
-------------------------------------------------
|
||||
Running the example IOC
|
||||
-------------------------------------------------
|
||||
|
||||
To run the example IOC configured above:
|
||||
|
||||
1. Follow the steps in "Configuring the system for attached controllers" below.
|
||||
|
||||
3. In the ``iocs/dsmIOC/iocBoot/iocDsm`` directory, run
|
||||
`$ ../../bin/linux-x86_64/dsm st.cmd.md90`
|
||||
for one attached MD-90 controller, or
|
||||
`$ ../../bin/linux-x86_64/dsm st.cmd.md90.multi`
|
||||
for multiple attached MD-90 controllers. This is set up for eight controllers, so add or remove lines as appropriate if using a different number.
|
||||
|
||||
4. Test using the `caget` and `caput` programs from the `epics-base` package as described in the "Example usage" section below.
|
||||
|
||||
|
||||
-------------------------------------------------
|
||||
Example usage
|
||||
-------------------------------------------------
|
||||
|
||||
1. After building, run the example IOC described above in one terminal window.
|
||||
|
||||
2. Open another terminal window on either the same computer as the IOC or another computer on the LAN and navigate to `[EPICS install directory]/epics-base/bin/linux-x86_64/` (or wherever you built EPICS base). You could alternatively add this directory to your PATH.
|
||||
|
||||
3. Set the "EPICS_CA_ADDR_LIST" environment variable to include the IP address of the server. If it's running on the same computer, you can use the loopback IP address:
|
||||
`$ export EPICS_CA_ADDR_LIST='127.0.0.1'`
|
||||
|
||||
4. Use the `caget` and `caput` programs to read and set process variables, respectively.
|
||||
|
||||
For example, to get the current position (in encoder counts of 10 nm), use:
|
||||
`$ ./caget DSM:m0.REP`
|
||||
This reads the REP variable, which is the "Raw Encoder Position". Additionally, change `m0` to `m1`, `m2`, etc. to read the values from other motors when running more than one.
|
||||
|
||||
Homing the motor (must be done before you can issue position commands):
|
||||
`$ ./caput DSM:m0.HOMF 1`
|
||||
This starts the homing sequence in the forward direction. Alternatively, for homing starting in the reverse direction:
|
||||
`$ ./caput DSM:m0.HOMR 1`
|
||||
|
||||
Moving to a position target:
|
||||
`$ ./caput DSM:m0.VAL 2.345`
|
||||
This moves the motor to 2.345 mm.
|
||||
|
||||
Setting a velocity target:
|
||||
`$ ./caput DSM:m0.VELO 0.5`
|
||||
This sets the velocity target to 0.5 mm/s. (Note that velocity targets are approximate only. They adjust the step rate of the motor and are not guaranteed to be exact.)
|
||||
|
||||
|
||||
-------------------------------------------------
|
||||
A note about velocity targets
|
||||
-------------------------------------------------
|
||||
|
||||
The I-20 motor driven by the MD-90 is a closed loop "step and repeat" motor that takes full steps towards its position target until it is close, then will perform linear extensions to close the loop on the target position. This is handled internally on the MD-90, not by EPICS.
|
||||
|
||||
The velocity target parameter sets the step frequency at which the motor operates on its way to the target position. The speed is not closed loop, and will depend on external loads, environmental conditions, etc. A speed target of 1 mm/s will generate a roughly 1 mm/s motion, but it is not guaranteed.
|
||||
|
||||
Additionally, due to the way EPICS operates, setting `VELO` will not immediately send a command to the MD-90. Instead, EPICS remembers the last value you set, and will set this new velocity target when it sends the next move command. **However, the motor must not be in servo mode to accept a new velocity target.**
|
||||
|
||||
The motor enters servo mode when you send a new position target, and stays in servo mode until you issue a Stop command (by setting the `DSM:m0.STOP` parameter to 1).
|
||||
|
||||
If you do not disable servo prior to issuing a Move command at the new velocity, then `VELO` will become out of sync with the actual motor velocity, and EPICS will return error 3 "Cannot execute while moving" in its console each time you issue a Move command. This is because each Move command internally sends a "Set step frequency" command, which will error if you do not Stop the motor first. Reading the VELO parameter at this point will return the wrong value--it returns the value you requested, not the actual speed setting on the motor. To fix this, you must Stop the motor, then send a new Move command.
|
||||
|
||||
|
@@ -1,4 +1,23 @@
|
||||
# motorDsm Releases
|
||||
# motorDSM Releases
|
||||
|
||||
## __v0.9.0-alpha__
|
||||
|
||||
### Changes since motorAcs R1-1-1
|
||||
|
||||
#### New features
|
||||
* Global rename Acs -> DSM and MCB-4B -> MD-90
|
||||
* Updated motor controller and axis methods to work with the DSM MD-90 controller
|
||||
* Updated example IOC startup scripts for the MD-90
|
||||
|
||||
#### Modifications to existing features
|
||||
* Removed Acs controller interface
|
||||
|
||||
#### Bug fixes
|
||||
* None
|
||||
|
||||
|
||||
|
||||
# motorAcs Releases
|
||||
|
||||
## __R1-1-1 (2023-04-11)__
|
||||
R1-1-1 is a release based on the master branch.
|
||||
@@ -27,22 +46,22 @@ R1-1 is a release based on the master branch.
|
||||
* None
|
||||
|
||||
#### Modifications to existing features
|
||||
* Commit [1bd580a](https://github.com/epics-motor/motorDsm/commit/1bd580a87869fb140939978c0b06856917282da9): ``iocsh`` dir moved into ``dsmApp`` dir; ``DSM_MD90.iocsh`` is now installed at build time
|
||||
* Commit [1bd580a](https://github.com/epics-motor/motorAcs/commit/1bd580a87869fb140939978c0b06856917282da9): ``iocsh`` dir moved into ``acsApp`` dir; ``ACS_MCB4B.iocsh`` is now installed at build time
|
||||
|
||||
#### Bug fixes
|
||||
* Commit [5ab502c](https://github.com/epics-motor/motorDsm/commit/5ab502c53ac81885e2a511ade95f22d0a0db4f43): Include ``$(MOTOR)/modules/RELEASE.$(EPICS_HOST_ARCH).local`` instead of ``$(MOTOR)/configure/RELEASE``
|
||||
* Pull request [#1](https://github.com/epics-motor/motorDsm/pull/1): Eliminated compiler warnings
|
||||
* Commit [5ab502c](https://github.com/epics-motor/motorAcs/commit/5ab502c53ac81885e2a511ade95f22d0a0db4f43): Include ``$(MOTOR)/modules/RELEASE.$(EPICS_HOST_ARCH).local`` instead of ``$(MOTOR)/configure/RELEASE``
|
||||
* Pull request [#1](https://github.com/epics-motor/motorAcs/pull/1): Eliminated compiler warnings
|
||||
|
||||
## __R1-0 (2019-04-18)__
|
||||
R1-0 is a release based on the master branch.
|
||||
|
||||
### Changes since motor-6-11
|
||||
|
||||
motorDsm is now a standalone module, as well as a submodule of [motor](https://github.com/epics-modules/motor)
|
||||
motorAcs is now a standalone module, as well as a submodule of [motor](https://github.com/epics-modules/motor)
|
||||
|
||||
#### New features
|
||||
* motorDsm can be built outside of the motor directory
|
||||
* motorDsm has a dedicated example IOC that can be built outside of motorDsm
|
||||
* motorAcs can be built outside of the motor directory
|
||||
* motorAcs has a dedicated example IOC that can be built outside of motorAcs
|
||||
|
||||
#### Modifications to existing features
|
||||
* None
|
||||
|
@@ -12,6 +12,8 @@ March 1, 2012
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
#include <iocsh.h>
|
||||
#include <epicsThread.h>
|
||||
@@ -183,9 +185,9 @@ asynStatus MD90Axis::sendAccelAndVelocity(double acceleration, double velocity)
|
||||
|
||||
// Send the velocity
|
||||
// Velocity provided in steps/sec
|
||||
// Our unit step size of the encoder is 10 nm, but the motor moves in steps approx. 5 micrometers.
|
||||
// Our unit step size of the encoder is 10 nm, but the motor moves in steps approx. 10 micrometers.
|
||||
// Motor controller accepts step frequency in Hz.
|
||||
freq = NINT(fabs(velocity / 500.));
|
||||
freq = NINT(fabs(velocity / COUNTS_PER_STEP));
|
||||
sprintf(pC_->outString_, "SSF %d", freq);
|
||||
status = pC_->writeReadController();
|
||||
if (!status) {
|
||||
@@ -219,13 +221,46 @@ asynStatus MD90Axis::move(double position, int relative, double minVelocity, dou
|
||||
|
||||
asynStatus MD90Axis::home(double minVelocity, double maxVelocity, double acceleration, int forwards)
|
||||
{
|
||||
int sleepTime;
|
||||
asynStatus status;
|
||||
static const char *functionName = "MD90Axis::home";
|
||||
|
||||
status = sendAccelAndVelocity(acceleration, maxVelocity);
|
||||
|
||||
sprintf(pC_->outString_, "HOM");
|
||||
status = pC_->writeReadController();
|
||||
// The MD-90 will start the home routine in the direction of the last move
|
||||
// Here we first make a small move to set the desired direction before homing
|
||||
|
||||
if (!status) {
|
||||
sprintf(pC_->outString_, "SNS %d", SMALL_NSTEPS);
|
||||
status = pC_->writeReadController();
|
||||
}
|
||||
if (!status) {
|
||||
status = parseReply(functionName, pC_->inString_);
|
||||
}
|
||||
|
||||
if (forwards) {
|
||||
sprintf(pC_->outString_, "ESF");
|
||||
} else {
|
||||
sprintf(pC_->outString_, "ESB");
|
||||
}
|
||||
if (!status) {
|
||||
status = pC_->writeReadController();
|
||||
}
|
||||
if (!status) {
|
||||
status = parseReply(functionName, pC_->inString_);
|
||||
}
|
||||
|
||||
if (!status) {
|
||||
// Wait for the move to complete, then home
|
||||
sleepTime = SLEEP_MARGIN * SMALL_NSTEPS * COUNTS_PER_STEP / maxVelocity;
|
||||
if (sleepTime < HOME_SLEEP_MIN) {
|
||||
sleepTime = HOME_SLEEP_MIN;
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::seconds(sleepTime));
|
||||
|
||||
sprintf(pC_->outString_, "HOM");
|
||||
status = pC_->writeReadController();
|
||||
}
|
||||
if (!status) {
|
||||
status = parseReply(functionName, pC_->inString_);
|
||||
}
|
||||
@@ -356,7 +391,7 @@ asynStatus MD90Axis::poll(bool *moving)
|
||||
if (comStatus) goto skip;
|
||||
// The response string is of the form "0: Power supply enabled state: 1"
|
||||
sscanf(pC_->inString_, "%d: %[^:]: %d", &replyStatus, replyString, &replyValue);
|
||||
driveOn = (replyValue == '1') ? 1:0;
|
||||
driveOn = (replyValue == 1) ? 1:0;
|
||||
setIntegerParam(pC_->motorStatusPowerOn_, driveOn);
|
||||
|
||||
// Read the home status
|
||||
@@ -365,7 +400,7 @@ asynStatus MD90Axis::poll(bool *moving)
|
||||
if (comStatus) goto skip;
|
||||
// The response string is of the form "0: Home status: 1"
|
||||
sscanf(pC_->inString_, "%d: %[^:]: %d", &replyStatus, replyString, &replyValue);
|
||||
homed = (replyValue == '1') ? 1:0;
|
||||
homed = (replyValue == 1) ? 1:0;
|
||||
setIntegerParam(pC_->motorStatusHomed_, homed);
|
||||
|
||||
// Read the moving status of this motor
|
||||
@@ -374,7 +409,7 @@ asynStatus MD90Axis::poll(bool *moving)
|
||||
if (comStatus) goto skip;
|
||||
// The response string is of the form "0: Current status value: 0"
|
||||
sscanf(pC_->inString_, "%d: %[^:]: %d", &replyStatus, replyString, &replyValue);
|
||||
done = (replyValue == '2') ? 0:1;
|
||||
done = (replyValue == 2) ? 0:1;
|
||||
setIntegerParam(pC_->motorStatusDone_, done);
|
||||
*moving = done ? false:true;
|
||||
switch(replyValue) {
|
||||
@@ -446,7 +481,7 @@ asynStatus MD90Axis::poll(bool *moving)
|
||||
if (comStatus) goto skip;
|
||||
// The response string is of the form "0: Current step frequency: 100"
|
||||
sscanf(pC_->inString_, "%d: %[^:]: %d", &replyStatus, replyString, &replyValue);
|
||||
velocity = replyValue * 500.0;
|
||||
velocity = replyValue * COUNTS_PER_STEP;
|
||||
setDoubleParam(pC_->motorVelocity_, velocity);
|
||||
|
||||
// Read the current motor integral gain (range 1-1000)
|
||||
|
@@ -2,9 +2,6 @@
|
||||
FILENAME... MD90Driver.h
|
||||
USAGE... Motor driver support for the DSM MD-90 controller.
|
||||
|
||||
Mark Rivers
|
||||
March 1, 2012
|
||||
|
||||
*/
|
||||
|
||||
#include "asynMotorController.h"
|
||||
@@ -15,6 +12,11 @@ March 1, 2012
|
||||
// No controller-specific parameters yet
|
||||
#define NUM_MD90_PARAMS 0
|
||||
|
||||
#define SLEEP_MARGIN 1.2 // Extra factor to wait after stepping before homing
|
||||
#define HOME_SLEEP_MIN 1 // Minimum amount of time to wait after stepping/before homing
|
||||
#define SMALL_NSTEPS 5 // Number of steps to take to set direction for homing routine
|
||||
#define COUNTS_PER_STEP 1000.0 // Number of encoder counts per motor step (measured by testing)
|
||||
|
||||
class epicsShareClass MD90Axis : public asynMotorAxis
|
||||
{
|
||||
public:
|
||||
|
@@ -2,7 +2,7 @@ file "$(MOTOR)/db/basic_asyn_motor.db"
|
||||
{
|
||||
pattern
|
||||
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, VMAX, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
|
||||
{DSM:, 0, "m$(N)", "asynMotor", MD900, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 0, "m$(N)", "asynMotor", MD900, 0, "MD-90", mm, Pos, 1.0, 0.05, 1.0, 0, 0, 0.05, 0, .00001, 2, 20, -20, ""}
|
||||
}
|
||||
|
||||
# P IOC prefix
|
||||
@@ -19,6 +19,8 @@ pattern
|
||||
# VMAX Maximum velocity (EGU / s) (note: not getting set here with basic_asyn_motor.db)
|
||||
# ACCL Acceleration (time in seconds until VELO)
|
||||
# BDST Backlash distance
|
||||
# BVEL Backlash velocity
|
||||
# BACC Backlash acceleration
|
||||
# MRES Motor step size (EGU)
|
||||
# PREC Display precision number of decimal places
|
||||
# DHLM Dial high travel limit (EGU)
|
||||
|
@@ -2,14 +2,14 @@ file "$(MOTOR)/db/basic_asyn_motor.db"
|
||||
{
|
||||
pattern
|
||||
{P, N, M, DTYP, PORT, ADDR, DESC, EGU, DIR, VELO, VBAS, VMAX, ACCL, BDST, BVEL, BACC, MRES, PREC, DHLM, DLLM, INIT}
|
||||
{DSM:, 0, "m$(N)", "asynMotor", MD900, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 1, "m$(N)", "asynMotor", MD901, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 2, "m$(N)", "asynMotor", MD902, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 3, "m$(N)", "asynMotor", MD903, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 4, "m$(N)", "asynMotor", MD904, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 5, "m$(N)", "asynMotor", MD905, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 6, "m$(N)", "asynMotor", MD906, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 7, "m$(N)", "asynMotor", MD907, 0, "MD-90", mm, Pos, 0.5, 0.025, 0.625, 0, 0, 0.03, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 0, "m$(N)", "asynMotor", MD900, 0, "MD-90", mm, Pos, 1.0, 0.05, 1.0, 0, 0, 0.05, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 1, "m$(N)", "asynMotor", MD901, 0, "MD-90", mm, Pos, 1.0, 0.05, 1.0, 0, 0, 0.05, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 2, "m$(N)", "asynMotor", MD902, 0, "MD-90", mm, Pos, 1.0, 0.05, 1.0, 0, 0, 0.05, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 3, "m$(N)", "asynMotor", MD903, 0, "MD-90", mm, Pos, 1.0, 0.05, 1.0, 0, 0, 0.05, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 4, "m$(N)", "asynMotor", MD904, 0, "MD-90", mm, Pos, 1.0, 0.05, 1.0, 0, 0, 0.05, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 5, "m$(N)", "asynMotor", MD905, 0, "MD-90", mm, Pos, 1.0, 0.05, 1.0, 0, 0, 0.05, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 6, "m$(N)", "asynMotor", MD906, 0, "MD-90", mm, Pos, 1.0, 0.05, 1.0, 0, 0, 0.05, 0, .00001, 2, 20, -20, ""}
|
||||
{DSM:, 7, "m$(N)", "asynMotor", MD907, 0, "MD-90", mm, Pos, 1.0, 0.05, 1.0, 0, 0, 0.05, 0, .00001, 2, 20, -20, ""}
|
||||
}
|
||||
|
||||
# P IOC prefix
|
||||
@@ -26,6 +26,8 @@ pattern
|
||||
# VMAX Maximum velocity (EGU / s) (note: not getting set here with basic_asyn_motor.db)
|
||||
# ACCL Acceleration (time in seconds until VELO)
|
||||
# BDST Backlash distance
|
||||
# BVEL Backlash velocity
|
||||
# BACC Backlash acceleration
|
||||
# MRES Motor step size (EGU)
|
||||
# PREC Display precision number of decimal places
|
||||
# DHLM Dial high travel limit (EGU)
|
||||
|
@@ -35,4 +35,5 @@ iocInit
|
||||
# This IOC does not use save/restore, so set values of some PVs
|
||||
dbpf("DSM:m0.RTRY", "0")
|
||||
dbpf("DSM:m0.TWV", "0.1")
|
||||
dbpf("DSM:m0.VMAX", "0.625")
|
||||
dbpf("DSM:m0.VMAX", "1.0")
|
||||
dbpf("DSM:m0.HVEL", "1.0")
|
||||
|
@@ -147,32 +147,40 @@ iocInit
|
||||
# This IOC does not use save/restore, so set values of some PVs
|
||||
dbpf("DSM:m0.RTRY", "0")
|
||||
dbpf("DSM:m0.TWV", "0.1")
|
||||
dbpf("DSM:m0.VMAX", "0.625")
|
||||
dbpf("DSM:m0.VMAX", "1.0")
|
||||
dbpf("DSM:m0.HVEL", "1.0")
|
||||
|
||||
dbpf("DSM:m1.RTRY", "0")
|
||||
dbpf("DSM:m1.TWV", "0.1")
|
||||
dbpf("DSM:m1.VMAX", "0.625")
|
||||
dbpf("DSM:m1.VMAX", "1.0")
|
||||
dbpf("DSM:m1.HVEL", "1.0")
|
||||
|
||||
dbpf("DSM:m2.RTRY", "0")
|
||||
dbpf("DSM:m2.TWV", "0.1")
|
||||
dbpf("DSM:m2.VMAX", "0.625")
|
||||
dbpf("DSM:m2.VMAX", "1.0")
|
||||
dbpf("DSM:m2.HVEL", "1.0")
|
||||
|
||||
dbpf("DSM:m3.RTRY", "0")
|
||||
dbpf("DSM:m3.TWV", "0.1")
|
||||
dbpf("DSM:m3.VMAX", "0.625")
|
||||
dbpf("DSM:m3.VMAX", "1.0")
|
||||
dbpf("DSM:m3.HVEL", "1.0")
|
||||
|
||||
dbpf("DSM:m4.RTRY", "0")
|
||||
dbpf("DSM:m4.TWV", "0.1")
|
||||
dbpf("DSM:m4.VMAX", "0.625")
|
||||
dbpf("DSM:m4.VMAX", "1.0")
|
||||
dbpf("DSM:m4.HVEL", "1.0")
|
||||
|
||||
dbpf("DSM:m5.RTRY", "0")
|
||||
dbpf("DSM:m5.TWV", "0.1")
|
||||
dbpf("DSM:m5.VMAX", "0.625")
|
||||
dbpf("DSM:m5.VMAX", "1.0")
|
||||
dbpf("DSM:m5.HVEL", "1.0")
|
||||
|
||||
dbpf("DSM:m6.RTRY", "0")
|
||||
dbpf("DSM:m6.TWV", "0.1")
|
||||
dbpf("DSM:m6.VMAX", "0.625")
|
||||
dbpf("DSM:m6.VMAX", "1.0")
|
||||
dbpf("DSM:m6.HVEL", "1.0")
|
||||
|
||||
dbpf("DSM:m7.RTRY", "0")
|
||||
dbpf("DSM:m7.TWV", "0.1")
|
||||
dbpf("DSM:m7.VMAX", "0.625")
|
||||
dbpf("DSM:m7.VMAX", "1.0")
|
||||
dbpf("DSM:m7.HVEL", "1.0")
|
||||
|
Reference in New Issue
Block a user