Compare commits
89 Commits
tnmr
...
work_obsol
| Author | SHA1 | Date | |
|---|---|---|---|
| b88750ae2b | |||
| 9c68f582b7 | |||
| c89b4a44bb | |||
| 330aa15400 | |||
| 3435107948 | |||
| 7c0101f6bd | |||
| 6ea97b0012 | |||
| 3dc159a9a4 | |||
| bd14e0a0e5 | |||
|
|
4922f0d664 | ||
| 9b71d3621d | |||
|
|
bec3359069 | ||
| 04692bd1aa | |||
| ffafd7344c | |||
|
|
b1bf5e866d | ||
|
|
e4748ef9c9 | ||
| b4bb172ada | |||
| 4fd9c17bcb | |||
| 76c6ebe92c | |||
| 12b0549cc0 | |||
| 3aa99e2268 | |||
| 72eaeac698 | |||
| d3831b3974 | |||
|
|
f861701fc2 | ||
| 452eb00417 | |||
| 52472acae9 | |||
| fee7c4904b | |||
| 3141e22894 | |||
| fbccd0f9b7 | |||
| 9071a5bcf7 | |||
| 1588703f99 | |||
| fe041bac0a | |||
| 07b758c3dd | |||
| f9a2152883 | |||
| 25891f296d | |||
| 0d1c7ba76f | |||
| 9afcc49430 | |||
| 7895470301 | |||
| 9df43bb940 | |||
|
|
ab558b3390 | ||
|
|
fad330b71d | ||
|
|
3cc8db881e | ||
| fa71b8ee25 | |||
| dbc6f17e5e | |||
| 0c23ee46a1 | |||
| d6cf1f7629 | |||
| 41baf5805f | |||
| bc5edec06f | |||
| e411ded55b | |||
| ad9defab0f | |||
| fbb0d10c55 | |||
| bc33933a1a | |||
| 2d310bc612 | |||
| e0f9b4a858 | |||
|
|
16834f8802 | ||
|
|
d9650d7fc7 | ||
|
|
569c0a3399 | ||
|
|
cab2bb85ba | ||
|
|
2fb05b37f8 | ||
|
|
ad2a79c312 | ||
|
|
82b4af4faa | ||
| ad07ecdd69 | |||
| cf24bbc3c3 | |||
| 29c66fa19a | |||
| 25a887dcab | |||
| 36ffb0a31f | |||
| b544d2af98 | |||
|
|
5db1acb07c | ||
|
|
880327c544 | ||
| 4f1883ba27 | |||
| 3043200012 | |||
|
|
1b4865c608 | ||
|
|
f7576cf541 | ||
|
|
587b170f6a | ||
|
|
1c42859466 | ||
|
|
1f832388d7 | ||
|
|
5f9344109d | ||
|
|
99bdafdd0c | ||
|
|
ab21bb5e3f | ||
|
|
99e32065b1 | ||
|
|
c1ffc160a2 | ||
| 89bf080dab | |||
| 047f3a7606 | |||
| 7f7c1a85ab | |||
|
|
5aff4b9dab | ||
|
|
2bd30c4423 | ||
| 0641968715 | |||
| d9a2045fca | |||
| ab00c45db0 |
@@ -1,2 +1,2 @@
|
|||||||
Frappy framework for implementing SEC-nodes (see SECoP protocol on github).
|
SECoP playground for creating specification and testing one implementation.
|
||||||
|
|
||||||
|
|||||||
10
.gitignore
vendored
10
.gitignore
vendored
@@ -1,15 +1,13 @@
|
|||||||
frappydemo.PID
|
|
||||||
log/*
|
log/*
|
||||||
html/*
|
html/*
|
||||||
*.pyc
|
*.pyc
|
||||||
pid/*
|
pid/*
|
||||||
|
|
||||||
# ide
|
# ide
|
||||||
.idea
|
.idea
|
||||||
|
|
||||||
RELEASE-VERSION
|
RELEASE-VERSION
|
||||||
build
|
build
|
||||||
*.egg-info
|
|
||||||
|
|
||||||
# Sphinx
|
# Sphinx
|
||||||
doc/_build
|
doc/_build
|
||||||
@@ -23,8 +21,4 @@ doc/_build
|
|||||||
._*
|
._*
|
||||||
|
|
||||||
# pyinstaller
|
# pyinstaller
|
||||||
dist/
|
dist/
|
||||||
|
|
||||||
*.cfg
|
|
||||||
*.bk.tnt
|
|
||||||
*.tps
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
[settings]
|
|
||||||
multi_line_output=2
|
|
||||||
combine_as_imports=True
|
|
||||||
|
|
||||||
known_qt=frappy.gui.qt
|
|
||||||
known_core=frappy
|
|
||||||
|
|
||||||
sections=FUTURE,STDLIB,QT,THIRDPARTY,CORE,FIRSTPARTY,LOCALFOLDER
|
|
||||||
33
.pylintrc
33
.pylintrc
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
# Add <file or directory> to the black list. It should be a base name, not a
|
# Add <file or directory> to the black list. It should be a base name, not a
|
||||||
# path. You may set this option multiple times.
|
# path. You may set this option multiple times.
|
||||||
ignore = .git,resources_qt5.py,resources_qt6.py
|
ignore = .git
|
||||||
|
|
||||||
# Pickle collected data for later comparisons.
|
# Pickle collected data for later comparisons.
|
||||||
persistent=yes
|
persistent=yes
|
||||||
@@ -38,23 +38,26 @@ confidence=
|
|||||||
# multiple time.
|
# multiple time.
|
||||||
disable=missing-docstring
|
disable=missing-docstring
|
||||||
,locally-disabled
|
,locally-disabled
|
||||||
|
,locally-enabled
|
||||||
,fixme
|
,fixme
|
||||||
,no-member
|
,no-member
|
||||||
,not-callable
|
,bad-whitespace
|
||||||
,wrong-import-position
|
,wrong-import-position
|
||||||
,ungrouped-imports
|
,ungrouped-imports
|
||||||
,import-self
|
,import-self
|
||||||
|
,bad-continuation
|
||||||
,protected-access
|
,protected-access
|
||||||
,unused-argument
|
,unused-argument
|
||||||
,duplicate-code
|
,duplicate-code
|
||||||
,attribute-defined-outside-init
|
,attribute-defined-outside-init
|
||||||
,access-member-before-definition
|
,access-member-before-definition
|
||||||
|
,no-self-use
|
||||||
,broad-except
|
,broad-except
|
||||||
,unneeded-not
|
,unneeded-not
|
||||||
,unidiomatic-typecheck
|
,unidiomatic-typecheck
|
||||||
,undefined-loop-variable
|
,undefined-loop-variable
|
||||||
,consider-using-f-string
|
,redefined-variable-type
|
||||||
,use-dict-literal
|
,deprecated-lambda
|
||||||
|
|
||||||
[REPORTS]
|
[REPORTS]
|
||||||
|
|
||||||
@@ -64,6 +67,10 @@ disable=missing-docstring
|
|||||||
|
|
||||||
msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
|
msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
|
||||||
|
|
||||||
|
# Put messages in a separate file for each module / package specified on the
|
||||||
|
# command line instead of printing them on stdout. Reports (if any) will be
|
||||||
|
# written in a file name "pylint_global.[txt|html]".
|
||||||
|
files-output=no
|
||||||
|
|
||||||
# Tells whether to display a full report or only the messages
|
# Tells whether to display a full report or only the messages
|
||||||
reports=no
|
reports=no
|
||||||
@@ -86,11 +93,14 @@ dummy-variables-rgx=_|dummy
|
|||||||
|
|
||||||
# List of additional names supposed to be defined in builtins. Remember that
|
# List of additional names supposed to be defined in builtins. Remember that
|
||||||
# you should avoid to define new builtins when possible.
|
# you should avoid to define new builtins when possible.
|
||||||
additional-builtins=Node,Mod,Param,Command,Group
|
additional-builtins=
|
||||||
|
|
||||||
|
|
||||||
[BASIC]
|
[BASIC]
|
||||||
|
|
||||||
|
# List of builtins function names that should not be used, separated by a comma
|
||||||
|
#bad-functions=map,filter,apply,input
|
||||||
|
bad-functions=apply,input
|
||||||
|
|
||||||
# Regular expression which should only match correct module names
|
# Regular expression which should only match correct module names
|
||||||
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9_]+))$
|
module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9_]+))$
|
||||||
@@ -145,8 +155,14 @@ notes=FIXME,XXX,TODO
|
|||||||
# Maximum number of characters on a single line.
|
# Maximum number of characters on a single line.
|
||||||
max-line-length=132
|
max-line-length=132
|
||||||
|
|
||||||
|
# List of optional constructs for which whitespace checking is disabled. `dict-
|
||||||
|
# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
|
||||||
|
# `trailing-comma` allows a space between comma and closing bracket: (a, ).
|
||||||
|
# `empty-line` allows space-only lines.
|
||||||
|
no-space-check=trailing-comma,dict-separator
|
||||||
|
|
||||||
# Maximum number of lines in a module
|
# Maximum number of lines in a module
|
||||||
max-module-lines=1000
|
max-module-lines=1200
|
||||||
|
|
||||||
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
|
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
|
||||||
# tab).
|
# tab).
|
||||||
@@ -202,10 +218,7 @@ max-branches=50
|
|||||||
max-statements=150
|
max-statements=150
|
||||||
|
|
||||||
# Maximum number of parents for a class (see R0901).
|
# Maximum number of parents for a class (see R0901).
|
||||||
max-parents=20
|
max-parents=15
|
||||||
|
|
||||||
# Maximum number of positional arguments
|
|
||||||
max-positional-arguments=10
|
|
||||||
|
|
||||||
# Maximum number of attributes for a class (see R0902).
|
# Maximum number of attributes for a class (see R0902).
|
||||||
max-attributes=50
|
max-attributes=50
|
||||||
|
|||||||
28
Makefile
28
Makefile
@@ -3,18 +3,12 @@
|
|||||||
|
|
||||||
all: clean doc
|
all: clean doc
|
||||||
|
|
||||||
# Make spawns a new shell for each command.
|
|
||||||
# Save each PID in temporary file
|
|
||||||
# sleep in order for "test" to have started reliably
|
|
||||||
demo:
|
demo:
|
||||||
@rm -f frappydemo.PID || true
|
@bin/secop-server -q demo &
|
||||||
@{ bin/frappy-server -q demo & echo $$! >> frappydemo.PID; }
|
@bin/secop-server -q test &
|
||||||
@{ bin/frappy-server -q test & echo $$! >> frappydemo.PID; }
|
@bin/secop-server -q cryo &
|
||||||
@{ bin/frappy-server -q cryo & echo $$! >> frappydemo.PID; }
|
@bin/secop-gui localhost:10767 localhost:10768 localhost:10769
|
||||||
@sleep 0.2
|
@ps aux|grep [s]ecop-server|awk '{print $$2}'|xargs kill
|
||||||
@bin/frappy-gui localhost:10767 localhost:10768 localhost:10769
|
|
||||||
@cat frappydemo.PID | xargs kill || true
|
|
||||||
@rm frappydemo.PID
|
|
||||||
|
|
||||||
build:
|
build:
|
||||||
python3 setup.py build
|
python3 setup.py build
|
||||||
@@ -38,18 +32,18 @@ test-verbose:
|
|||||||
python3 $(shell which pytest) -v test -s
|
python3 $(shell which pytest) -v test -s
|
||||||
|
|
||||||
test-coverage:
|
test-coverage:
|
||||||
python3 $(shell which pytest) -v test --cov=frappy
|
python3 $(shell which pytest) -v test --cov=secop
|
||||||
|
|
||||||
doc:
|
doc:
|
||||||
$(MAKE) -C doc html
|
$(MAKE) -C doc html
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
pylint -f colorized -r n --rcfile=.pylintrc frappy frappy_* test
|
pylint -j 0 -f colorized -r n --rcfile=.pylintrc secop secop_* test
|
||||||
|
|
||||||
isort:
|
isort:
|
||||||
@find test -name '*.py' -print0 | xargs -0 isort -e -m 2 -w 80 -ns __init__.py
|
@find test -name '*.py' -print0 | xargs -0 isort -e -m 2 -w 80 -ns __init__.py
|
||||||
@find frappy -name '*.py' -print0 | xargs -0 isort -e -m 2 -w 80 -ns __init__.py
|
@find secop -name '*.py' -print0 | xargs -0 isort -e -m 2 -w 80 -ns __init__.py
|
||||||
@find . -wholename './frappy_*.py' -print0 | xargs -0 isort -e -m 2 -w 80 -ns __init__.py
|
@find . -wholename './secop_*.py' -print0 | xargs -0 isort -e -m 2 -w 80 -ns __init__.py
|
||||||
|
|
||||||
release-patch:
|
release-patch:
|
||||||
MODE="patch" $(MAKE) release
|
MODE="patch" $(MAKE) release
|
||||||
@@ -61,8 +55,8 @@ release-major:
|
|||||||
MODE="major" $(MAKE) release
|
MODE="major" $(MAKE) release
|
||||||
|
|
||||||
release:
|
release:
|
||||||
ssh jenkins.admin.frm2.tum.de -p 29417 build -v -s -p GERRIT_PROJECT=$(shell git config --get remote.origin.url | rev | cut -d '/' -f -2 | rev) -p ARCH=all -p MODE=$(MODE) ReleasePipeline
|
ssh jenkinsng.admin.frm2 -p 29417 build -v -s -p GERRIT_PROJECT=$(shell git config --get remote.origin.url | rev | cut -d '/' -f -3 | rev) -p ARCH=all -p MODE=$(MODE) ReleasePipeline
|
||||||
|
|
||||||
|
|
||||||
build-pkg:
|
build-pkg:
|
||||||
debocker build --image docker.ictrl.frm2.tum.de:5443/mlzbase/buster
|
debocker build --image jenkinsng.admin.frm2:5000/mlzbase/buster
|
||||||
|
|||||||
75
README.md
75
README.md
@@ -1,33 +1,62 @@
|
|||||||
Frappy: Framework for programming secnodes in Python
|
# Frappy Framework
|
||||||
====================================================
|
|
||||||
|
|
||||||
Frappy is a Python-framework for writing [SECoP](https://github.com/SampleEnvironment/SECoP) servers (called SECNodes or Nodes) and Clients.
|
current running code at SINQ, with newest changes not yet pushed
|
||||||
It comes with its own Graphical client and a collection of example Nodes.
|
through the Gerrit workflow at MLZ
|
||||||
It is able to use TCP and Serial connections.
|
|
||||||
|
|
||||||
To get started, look at the provided demo, the provided examples, or have a look
|
## Branches
|
||||||
at the INTRODUCTION section.
|
|
||||||
|
|
||||||
Main development is done
|
branches:
|
||||||
[here](https://forge.frm2.tum.de/review/q/project:secop%252Ffrappy)
|
|
||||||
and a readonly GitHub-mirror for easier access is available
|
|
||||||
[here](https://github.com/SampleEnvironment/frappy).
|
|
||||||
|
|
||||||
Requirements
|
- mlz: master from forge.frm2.tum.de:29418/sine2020/secop/playground
|
||||||
------------
|
this is not present at git.psi.ch:sinqdev/frappy.git!
|
||||||
|
- master: the last synced state between mlz and wip/work, except an added README.md
|
||||||
|
(this does NOT contain local repo files only, however, all common files work/mlz should match)
|
||||||
|
- core: the modifications of the core frappy parts (to be going through gerrit)
|
||||||
|
- work: current working version, usually in use on /home/l_samenv/frappy (and on neutron instruments)
|
||||||
|
this should be a copy of an earlier state of the wip branch
|
||||||
|
- wip: current test version, usually in use on /home/l_samenv/frappy_wip
|
||||||
|
IMPORTANT: make commits containing either only files to be pushed to Gerrit or only
|
||||||
|
PSI internal files, not mixed. Mark local commits with '[PSI]' in the commit message.
|
||||||
|
|
||||||
See `requirements.txt`.
|
|
||||||
|
|
||||||
Demo
|
master --> mlz # these branches match after a sync step, but they might have a different history
|
||||||
----
|
master --> work --> wip
|
||||||
|
|
||||||
Use the following command after installing the dependencies:
|
apply commits from mlz to master: (rebase ?) or use cherry-pick:
|
||||||
|
|
||||||
```
|
git cherry-pick <sha1>..<sha2>
|
||||||
$ make demo
|
|
||||||
```
|
|
||||||
|
|
||||||
Documentation
|
where sha1 is the last commit already in wip, and sha2 ist the last commit to be applied
|
||||||
-------------
|
(for a single commit <sha1>.. may be omitted)
|
||||||
|
|
||||||
|
the wip branch is also present in an other directory (currently zolliker/switchdrive/gitmlz/frappy),
|
||||||
|
where commits may be cherry picked for input to Gerrit. As generally in the review process some additional
|
||||||
|
changes are done, eventually a sync step should happen:
|
||||||
|
|
||||||
|
1) ideally, this is done when work and wip match
|
||||||
|
2) make sure branches mlz, master, wip and work are in syns with remote, push/pull otherwise
|
||||||
|
3) cherry-pick commits from mlz to master
|
||||||
|
4) make sure master and mlz branches match (git diff --name-only master..wip should only return README.md)
|
||||||
|
5) create branch new_work from master
|
||||||
|
6) go through commits in wip and sort out:
|
||||||
|
- core commits already pushed through gerrit are skipped
|
||||||
|
- all other commits are to be cherry-picked
|
||||||
|
7) when arrived at the point where the new working version should be,
|
||||||
|
copy new_wip branch to work with 'git checkout work;git checkout new_wip .'
|
||||||
|
(note the dot!) and then commit this.
|
||||||
|
8) continue with (6) if wip and work should differ
|
||||||
|
9) do like (7), but for wip branch
|
||||||
|
10) delete new_wip branch, push master, wip and work branches
|
||||||
|
|
||||||
|
|
||||||
|
## Procedure to update PPMS
|
||||||
|
|
||||||
|
1) git checkout wip (or work, whatever state to copy to ppms)
|
||||||
|
2) git checkout -B ppms # local branch ?
|
||||||
|
3) assume PPMSData is mounted on /Volumes/PPMSData
|
||||||
|
|
||||||
|
cp -r secop_psi /Volumes/PPMSData/zolliker/frappy/secop_psi
|
||||||
|
cp -r secop /Volumes/PPMSData/zolliker/frappy/secop
|
||||||
|
|
||||||
|
it may be that additional folder have to copied ...
|
||||||
|
|
||||||
[See here for documentation of Frappy](https://forge.frm2.tum.de/public/doc/frappy/html/)
|
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# *****************************************************************************
|
|
||||||
# Copyright (c) 2015-2024 by the authors, see LICENSE
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 2 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
# Module authors:
|
|
||||||
# Alexander Lenz <alexander.lenz@frm2.tum.de>
|
|
||||||
# Markus Zolliker <markus.zolliker@psi.ch>
|
|
||||||
#
|
|
||||||
# *****************************************************************************
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import argparse
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
# Add import path for inplace usage
|
|
||||||
sys.path.insert(0, str(Path(__file__).absolute().parents[1]))
|
|
||||||
|
|
||||||
from frappy.client.interactive import init, run, clientenv, interact
|
|
||||||
|
|
||||||
|
|
||||||
def parseArgv(argv):
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument('-i', '--include',
|
|
||||||
help='file to execute after connecting to the clients', metavar='file',
|
|
||||||
type=Path, action='append', default=[])
|
|
||||||
parser.add_argument('-o', '--only-execute',
|
|
||||||
help='Do not go into interactive mode after executing files. \
|
|
||||||
Has no effect without --include.', action='store_true')
|
|
||||||
parser.add_argument('node',
|
|
||||||
help='Nodes the client should connect to.\n', metavar='host:port',
|
|
||||||
nargs='*', type=str, default=[])
|
|
||||||
return parser.parse_args(argv)
|
|
||||||
|
|
||||||
|
|
||||||
args = parseArgv(sys.argv[1:])
|
|
||||||
|
|
||||||
success = init(*args.node)
|
|
||||||
|
|
||||||
run_error = ''
|
|
||||||
file_success = False
|
|
||||||
try:
|
|
||||||
for file in args.include:
|
|
||||||
run(file)
|
|
||||||
file_success = True
|
|
||||||
except Exception as e:
|
|
||||||
run_error = f'\n{clientenv.short_traceback()}'
|
|
||||||
|
|
||||||
if success:
|
|
||||||
if args.include and file_success and args.only_execute:
|
|
||||||
print('skipping interactive mode')
|
|
||||||
exit()
|
|
||||||
interact(run_error)
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# pylint: disable=invalid-name
|
|
||||||
# *****************************************************************************
|
|
||||||
# Copyright (c) 2015-2024 by the authors, see LICENSE
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 2 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
# Module authors:
|
|
||||||
# Alexander Lenz <alexander.lenz@frm2.tum.de>
|
|
||||||
#
|
|
||||||
# *****************************************************************************
|
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import argparse
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
# Add import path for inplace usage
|
|
||||||
sys.path.insert(0, str(Path(__file__).absolute().parents[1]))
|
|
||||||
|
|
||||||
import logging
|
|
||||||
from mlzlog import ColoredConsoleHandler
|
|
||||||
|
|
||||||
from frappy.gui.qt import QApplication
|
|
||||||
from frappy.gui.mainwindow import MainWindow
|
|
||||||
|
|
||||||
def parseArgv(argv):
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
loggroup = parser.add_mutually_exclusive_group()
|
|
||||||
loggroup.add_argument('-d', '--debug',
|
|
||||||
help='Enable debug output',
|
|
||||||
action='store_true', default=False)
|
|
||||||
loggroup.add_argument('-q', '--quiet',
|
|
||||||
help='Supress everything but errors',
|
|
||||||
action='store_true', default=False)
|
|
||||||
parser.add_argument('-D', '--detailed',
|
|
||||||
help='Start in detailed mode',
|
|
||||||
action='store_true', default=False)
|
|
||||||
parser.add_argument('node',
|
|
||||||
help='Nodes the GUI should connect to.\n', metavar='host[:port]',
|
|
||||||
nargs='*', type=str, default=[])
|
|
||||||
return parser.parse_args(argv)
|
|
||||||
|
|
||||||
|
|
||||||
def main(argv=None):
|
|
||||||
if argv is None:
|
|
||||||
argv = sys.argv
|
|
||||||
|
|
||||||
args = parseArgv(argv[1:])
|
|
||||||
|
|
||||||
loglevel = logging.DEBUG if args.debug else (logging.ERROR if args.quiet else logging.INFO)
|
|
||||||
logger = logging.getLogger('gui')
|
|
||||||
logger.setLevel(logging.DEBUG)
|
|
||||||
if sys.stdout is not None:
|
|
||||||
console = ColoredConsoleHandler()
|
|
||||||
console.setLevel(loglevel)
|
|
||||||
logger.addHandler(console)
|
|
||||||
|
|
||||||
app = QApplication(argv)
|
|
||||||
|
|
||||||
win = MainWindow(args, logger)
|
|
||||||
app.aboutToQuit.connect(win._onQuit)
|
|
||||||
win.show()
|
|
||||||
|
|
||||||
return app.exec()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main(sys.argv))
|
|
||||||
128
bin/frappy-scan
128
bin/frappy-scan
@@ -1,128 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# *****************************************************************************
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 2 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
# Module authors:
|
|
||||||
# Alexander Zaft <a.zaft@fz-juelich.de>
|
|
||||||
#
|
|
||||||
# *****************************************************************************
|
|
||||||
|
|
||||||
"""SEC node autodiscovery tool."""
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import select
|
|
||||||
import socket
|
|
||||||
import sys
|
|
||||||
from collections import namedtuple
|
|
||||||
from time import time as currenttime
|
|
||||||
|
|
||||||
UDP_PORT = 10767
|
|
||||||
|
|
||||||
Answer = namedtuple('Answer',
|
|
||||||
'address, port, equipment_id, firmware, description')
|
|
||||||
|
|
||||||
|
|
||||||
def decode(msg, addr):
|
|
||||||
msg = msg.decode('utf-8')
|
|
||||||
try:
|
|
||||||
data = json.loads(msg)
|
|
||||||
except Exception:
|
|
||||||
return None
|
|
||||||
if not isinstance(data, dict):
|
|
||||||
return None
|
|
||||||
if data.get('SECoP') != 'node':
|
|
||||||
return None
|
|
||||||
try:
|
|
||||||
eq_id = data['equipment_id']
|
|
||||||
fw = data['firmware']
|
|
||||||
desc = data['description']
|
|
||||||
port = data['port']
|
|
||||||
except KeyError:
|
|
||||||
return None
|
|
||||||
addr, _scanport = addr
|
|
||||||
return Answer(addr, port, eq_id, fw, desc)
|
|
||||||
|
|
||||||
|
|
||||||
def print_answer(answer, *, short=False):
|
|
||||||
if short:
|
|
||||||
# NOTE: keep this easily parseable!
|
|
||||||
print(f'{answer.equipment_id} {answer.address}:{answer.port}')
|
|
||||||
return
|
|
||||||
print(f'Found {answer.equipment_id} at {answer.address}:')
|
|
||||||
print(f' Port: {answer.port}')
|
|
||||||
print(f' Firmware: {answer.firmware}')
|
|
||||||
desc = answer.description.replace('\n', '\n ')
|
|
||||||
print(f' Node description: {desc}')
|
|
||||||
print()
|
|
||||||
|
|
||||||
|
|
||||||
def scan(max_wait=1.0):
|
|
||||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
||||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
|
||||||
# send a general broadcast
|
|
||||||
try:
|
|
||||||
s.sendto(json.dumps(dict(SECoP='discover')).encode('utf-8'),
|
|
||||||
('255.255.255.255', UDP_PORT))
|
|
||||||
except OSError as e:
|
|
||||||
print('could not send the broadcast:', e)
|
|
||||||
# we still keep listening for self-announcements
|
|
||||||
start = currenttime()
|
|
||||||
seen = set()
|
|
||||||
while currenttime() < start + max_wait:
|
|
||||||
res = select.select([s], [], [], 0.1)
|
|
||||||
if res[0]:
|
|
||||||
try:
|
|
||||||
msg, addr = s.recvfrom(1024)
|
|
||||||
except socket.error: # pragma: no cover
|
|
||||||
continue
|
|
||||||
answer = decode(msg, addr)
|
|
||||||
if answer is None:
|
|
||||||
continue
|
|
||||||
if (answer.address, answer.equipment_id, answer.port) in seen:
|
|
||||||
continue
|
|
||||||
seen.add((answer.address, answer.equipment_id, answer.port))
|
|
||||||
yield answer
|
|
||||||
|
|
||||||
|
|
||||||
def listen(*, short=False):
|
|
||||||
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
||||||
if os.name == 'nt':
|
|
||||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
||||||
else:
|
|
||||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
|
|
||||||
s.bind(('0.0.0.0', UDP_PORT))
|
|
||||||
while True:
|
|
||||||
try:
|
|
||||||
msg, addr = s.recvfrom(1024)
|
|
||||||
except KeyboardInterrupt:
|
|
||||||
break
|
|
||||||
answer = decode(msg, addr)
|
|
||||||
if answer:
|
|
||||||
print_answer(answer, short=short)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument('-l', '--listen', action='store_true',
|
|
||||||
help='Print short info. '
|
|
||||||
'Keep listening after the broadcast.')
|
|
||||||
args = parser.parse_args(sys.argv[1:])
|
|
||||||
for answer in scan():
|
|
||||||
print_answer(answer, short=args.listen)
|
|
||||||
if args.listen:
|
|
||||||
listen(short=args.listen)
|
|
||||||
64
bin/make_doc.py
Executable file
64
bin/make_doc.py
Executable file
@@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# *****************************************************************************
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
# Module authors:
|
||||||
|
# Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
|
||||||
|
#
|
||||||
|
# *****************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
import markdown
|
||||||
|
|
||||||
|
BASE_PATH = path.abspath(path.join(path.dirname(__file__), '..'))
|
||||||
|
DOC_SRC = path.join(BASE_PATH, 'doc')
|
||||||
|
DOC_DST = path.join(BASE_PATH, 'html')
|
||||||
|
|
||||||
|
conv = markdown.Markdown()
|
||||||
|
|
||||||
|
for dirpath, dirnames, filenames in os.walk(DOC_SRC):
|
||||||
|
# re-create the dir-structure of DOC_SRC into DOC_DST
|
||||||
|
dst_path = path.join(DOC_DST, path.relpath(dirpath, DOC_SRC))
|
||||||
|
try:
|
||||||
|
os.mkdir(dst_path)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
for fn in filenames:
|
||||||
|
full_name = path.join(dirpath, fn)
|
||||||
|
sub_name = path.relpath(full_name, DOC_SRC)
|
||||||
|
final_name = path.join(DOC_DST, sub_name)
|
||||||
|
|
||||||
|
if not fn.endswith('md'):
|
||||||
|
# just copy everything else
|
||||||
|
with open(full_name, 'rb') as fi:
|
||||||
|
with open(final_name, 'wb') as fo:
|
||||||
|
# WARNING: possible Memory hog!
|
||||||
|
fo.write(fi.read())
|
||||||
|
continue
|
||||||
|
# treat .md files special
|
||||||
|
final_sub_name = path.splitext(sub_name)[0] + '.html'
|
||||||
|
final_name = path.join(DOC_DST, final_sub_name)
|
||||||
|
print("Converting %s to %s" %(sub_name, final_sub_name))
|
||||||
|
# transform one file
|
||||||
|
conv.reset()
|
||||||
|
conv.convertFile(input=full_name,
|
||||||
|
output=final_name,
|
||||||
|
encoding="utf-8")
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# pylint: disable=invalid-name
|
# pylint: disable=invalid-name
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
# *****************************************************************************
|
# *****************************************************************************
|
||||||
# Copyright (c) 2015-2024 by the authors, see LICENSE
|
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
@@ -29,11 +29,8 @@ from os import path
|
|||||||
# Add import path for inplace usage
|
# Add import path for inplace usage
|
||||||
sys.path.insert(0, path.abspath(path.join(path.dirname(__file__), '..')))
|
sys.path.insert(0, path.abspath(path.join(path.dirname(__file__), '..')))
|
||||||
|
|
||||||
import logging
|
from secop.gui.qt import QApplication
|
||||||
from mlzlog import ColoredConsoleHandler
|
from secop.gui.cfg_editor.mainwindow import MainWindow
|
||||||
|
|
||||||
from frappy.gui.qt import QApplication
|
|
||||||
from frappy.gui.cfg_editor.mainwindow import MainWindow
|
|
||||||
|
|
||||||
|
|
||||||
def main(argv=None):
|
def main(argv=None):
|
||||||
@@ -41,13 +38,9 @@ def main(argv=None):
|
|||||||
parser.add_argument('-f', '--file', help='Configuration file to open.')
|
parser.add_argument('-f', '--file', help='Configuration file to open.')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
app = QApplication(argv)
|
app = QApplication(argv)
|
||||||
logger = logging.getLogger('gui')
|
window = MainWindow(args.file)
|
||||||
console = ColoredConsoleHandler()
|
|
||||||
console.setLevel(logging.INFO)
|
|
||||||
logger.addHandler(console)
|
|
||||||
window = MainWindow(args.file, log=logger)
|
|
||||||
window.show()
|
window.show()
|
||||||
return app.exec()
|
return app.exec_()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
71
bin/secop-gui
Executable file
71
bin/secop-gui
Executable file
@@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# pylint: disable=invalid-name
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# *****************************************************************************
|
||||||
|
# Copyright (c) 2015-2016 by the authors, see LICENSE
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
# Module authors:
|
||||||
|
# Alexander Lenz <alexander.lenz@frm2.tum.de>
|
||||||
|
#
|
||||||
|
# *****************************************************************************
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
# Add import path for inplace usage
|
||||||
|
sys.path.insert(0, path.abspath(path.join(path.dirname(__file__), '..')))
|
||||||
|
|
||||||
|
import mlzlog
|
||||||
|
|
||||||
|
from secop.gui.qt import QApplication
|
||||||
|
from secop.gui.mainwindow import MainWindow
|
||||||
|
|
||||||
|
|
||||||
|
def main(argv=None):
|
||||||
|
if argv is None:
|
||||||
|
argv = sys.argv
|
||||||
|
|
||||||
|
if '-h' in argv or '--help' in argv:
|
||||||
|
print("Usage: secop-gui [-d] [-h] [host:[port]]")
|
||||||
|
print()
|
||||||
|
print("Option GNU long option Meaning")
|
||||||
|
print("-h --help Show this message")
|
||||||
|
print("-d --debug Enable debug output")
|
||||||
|
print()
|
||||||
|
print("if not given, host defaults to 'localhost' and port to 10767")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
if '-d' in argv or '--debug' in argv:
|
||||||
|
mlzlog.initLogging('gui', 'debug')
|
||||||
|
else:
|
||||||
|
mlzlog.initLogging('gui', 'info')
|
||||||
|
|
||||||
|
app = QApplication(argv)
|
||||||
|
|
||||||
|
hosts = [host for host in argv[1:] if not host.startswith('-')]
|
||||||
|
if not hosts:
|
||||||
|
hosts = ['localhost:10767']
|
||||||
|
win = MainWindow(hosts)
|
||||||
|
win.show()
|
||||||
|
|
||||||
|
return app.exec_()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main(sys.argv))
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# pylint: disable=invalid-name
|
# pylint: disable=invalid-name
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
# *****************************************************************************
|
# *****************************************************************************
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
@@ -22,28 +23,21 @@
|
|||||||
#
|
#
|
||||||
# *****************************************************************************
|
# *****************************************************************************
|
||||||
|
|
||||||
import argparse
|
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
import argparse
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
import mlzlog
|
||||||
|
|
||||||
# Add import path for inplace usage
|
# Add import path for inplace usage
|
||||||
sys.path.insert(0, str(Path(__file__).absolute().parents[1]))
|
sys.path.insert(0, path.abspath(path.join(path.dirname(__file__), '..')))
|
||||||
|
|
||||||
from frappy.lib import generalConfig
|
from secop.lib import getGeneralConfig
|
||||||
from frappy.logging import logger
|
from secop.server import Server
|
||||||
from frappy.server import Server
|
|
||||||
|
|
||||||
|
|
||||||
def parseArgv(argv):
|
def parseArgv(argv):
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(description="Manage a SECoP server")
|
||||||
description="Manage a SECoP server",
|
|
||||||
epilog="""The server needs some configuration, by default from the
|
|
||||||
generalConfig.cfg file. the keys confdir, logdir and piddir have to
|
|
||||||
be set.
|
|
||||||
Alternatively, one can set the environment variables FRAPPY_CONFDIR
|
|
||||||
FRAPPY_LOGDIR and FRAPPY_PIDDIR to set the required values.
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
loggroup = parser.add_mutually_exclusive_group()
|
loggroup = parser.add_mutually_exclusive_group()
|
||||||
loggroup.add_argument("-v", "--verbose",
|
loggroup.add_argument("-v", "--verbose",
|
||||||
help="Output lots of diagnostic information",
|
help="Output lots of diagnostic information",
|
||||||
@@ -66,27 +60,15 @@ def parseArgv(argv):
|
|||||||
parser.add_argument('-c',
|
parser.add_argument('-c',
|
||||||
'--cfgfiles',
|
'--cfgfiles',
|
||||||
action='store',
|
action='store',
|
||||||
help="comma separated list of cfg files,\n"
|
help="comma separated list of cfg files\n"
|
||||||
"defaults to <name_of_the_instance>.\n"
|
"defaults to <name_of_the_instance>\n"
|
||||||
"If a config file contains a slash, it is treated as a"
|
"cfgfiles given without '.cfg' extension are searched in the configuration directory,"
|
||||||
"path, otherwise the file is searched for in the "
|
"else they are treated as path names",
|
||||||
"configuration directory.",
|
|
||||||
default=None)
|
|
||||||
parser.add_argument('-g',
|
|
||||||
'--gencfg',
|
|
||||||
action='store',
|
|
||||||
help="full path of general config file,\n"
|
|
||||||
"defaults to env. variable FRAPPY_CONFIG_FILE\n",
|
|
||||||
default=None)
|
default=None)
|
||||||
parser.add_argument('-t',
|
parser.add_argument('-t',
|
||||||
'--test',
|
'--test',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help='check cfg files only',
|
help='Check cfg files only',
|
||||||
default=False)
|
|
||||||
parser.add_argument('-r',
|
|
||||||
'--relaxed',
|
|
||||||
action='store_true',
|
|
||||||
help='no checking of problematic behaviour',
|
|
||||||
default=False)
|
default=False)
|
||||||
return parser.parse_args(argv)
|
return parser.parse_args(argv)
|
||||||
|
|
||||||
@@ -98,21 +80,17 @@ def main(argv=None):
|
|||||||
args = parseArgv(argv[1:])
|
args = parseArgv(argv[1:])
|
||||||
|
|
||||||
loglevel = 'debug' if args.verbose else ('error' if args.quiet else 'info')
|
loglevel = 'debug' if args.verbose else ('error' if args.quiet else 'info')
|
||||||
generalConfig.set_default('lazy_number_validation', args.relaxed)
|
mlzlog.initLogging('secop', loglevel, getGeneralConfig()['logdir'])
|
||||||
generalConfig.set_default('legacy_hasiodev', args.relaxed)
|
|
||||||
generalConfig.set_default('tolerate_poll_property', args.relaxed)
|
|
||||||
generalConfig.init(args.gencfg)
|
|
||||||
logger.init(loglevel)
|
|
||||||
|
|
||||||
cfgfiles = [s.strip() for s in args.cfgfiles.split(',')] if args.cfgfiles else None
|
srv = Server(args.name, mlzlog.log, cfgfiles=args.cfgfiles, interface=args.port, testonly=args.test)
|
||||||
|
|
||||||
srv = Server(args.name, logger.log, cfgfiles=cfgfiles,
|
|
||||||
interface=args.port, testonly=args.test)
|
|
||||||
|
|
||||||
if args.daemonize:
|
if args.daemonize:
|
||||||
srv.start()
|
srv.start()
|
||||||
else:
|
else:
|
||||||
srv.run()
|
try:
|
||||||
|
srv.run()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
197
bin/sim-server
197
bin/sim-server
@@ -1,197 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# pylint: disable=invalid-name
|
|
||||||
# *****************************************************************************
|
|
||||||
# This program is free software; you can redistribute it and/or modify it under
|
|
||||||
# the terms of the GNU General Public License as published by the Free Software
|
|
||||||
# Foundation; either version 2 of the License, or (at your option) any later
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
||||||
# details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along with
|
|
||||||
# this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
# Module authors:
|
|
||||||
# Markus Zolliker <markus.zolliker@psi.ch>
|
|
||||||
# *****************************************************************************
|
|
||||||
"""server for a string communicator
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
|
|
||||||
bin/sim-server <communicator class> -p <server port> [-o <option1>=<value> <option2>=<value>]
|
|
||||||
|
|
||||||
open a server on <server port> to communicate with the string based <communicator> over TCP/IP.
|
|
||||||
|
|
||||||
Use cases, mainly for test purposes:
|
|
||||||
|
|
||||||
- relay to a hardware simulation written as a communicator
|
|
||||||
|
|
||||||
> bin/sim-server frappy_psi.ls370sim.Ls370Sim
|
|
||||||
|
|
||||||
- relay to a communicator not using TCP/IP, if Frappy should run on an other host
|
|
||||||
|
|
||||||
> bin/sim-server frappy.io.StringIO -o uri=serial:///dev/tty...
|
|
||||||
|
|
||||||
- as a T, if the hardware allows only one connection, and more than one is needed:
|
|
||||||
|
|
||||||
> bin/sim-server frappy.io.StringIO -o uri=tcp://<host>:<port>
|
|
||||||
|
|
||||||
typically using communicator class frappy.io.StringIO
|
|
||||||
"""
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import argparse
|
|
||||||
from pathlib import Path
|
|
||||||
import socket
|
|
||||||
import time
|
|
||||||
import os
|
|
||||||
from ast import literal_eval
|
|
||||||
from socketserver import BaseRequestHandler, ThreadingTCPServer
|
|
||||||
|
|
||||||
# Add import path for inplace usage
|
|
||||||
sys.path.insert(0, str(Path(__file__).absolute().parents[1]))
|
|
||||||
|
|
||||||
from frappy.lib import get_class, formatException, mkthread
|
|
||||||
|
|
||||||
|
|
||||||
class Logger:
|
|
||||||
def debug(self, *args):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def log(self, level, *args):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def info(self, *args):
|
|
||||||
print(*args)
|
|
||||||
|
|
||||||
exception = error = warn = info
|
|
||||||
|
|
||||||
|
|
||||||
class TcpRequestHandler(BaseRequestHandler):
|
|
||||||
def setup(self):
|
|
||||||
print(f'connection opened from {self.client_address}')
|
|
||||||
self.running = True
|
|
||||||
self.request.settimeout(1)
|
|
||||||
self.data = b''
|
|
||||||
|
|
||||||
def finish(self):
|
|
||||||
"""called when handle() terminates, i.e. the socket closed"""
|
|
||||||
# close socket
|
|
||||||
try:
|
|
||||||
self.request.shutdown(socket.SHUT_RDWR)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
finally:
|
|
||||||
print(f'connection closed from {self.client_address}')
|
|
||||||
self.request.close()
|
|
||||||
|
|
||||||
def poller(self):
|
|
||||||
while True:
|
|
||||||
time.sleep(1.0)
|
|
||||||
self.module.doPoll()
|
|
||||||
|
|
||||||
def handle(self):
|
|
||||||
"""handle a new connection"""
|
|
||||||
# do a copy of the options, as they are consumed
|
|
||||||
self.module = self.server.modulecls(
|
|
||||||
'mod', Logger(), dict(self.server.options), self.server)
|
|
||||||
self.module.earlyInit()
|
|
||||||
|
|
||||||
mkthread(self.poller)
|
|
||||||
while self.running:
|
|
||||||
try:
|
|
||||||
newdata = self.request.recv(1024)
|
|
||||||
if not newdata:
|
|
||||||
return
|
|
||||||
except socket.timeout:
|
|
||||||
# no new data during read, continue
|
|
||||||
continue
|
|
||||||
self.data += newdata
|
|
||||||
while self.running:
|
|
||||||
message, sep, self.data = self.data.partition(b'\n')
|
|
||||||
if not sep:
|
|
||||||
break
|
|
||||||
cmd = message.decode('latin-1')
|
|
||||||
try:
|
|
||||||
reply = self.module.communicate(cmd.strip())
|
|
||||||
if self.server.verbose:
|
|
||||||
print('%-40s | %s' % (cmd, reply))
|
|
||||||
except Exception:
|
|
||||||
print(formatException(verbose=True))
|
|
||||||
return
|
|
||||||
outdata = reply.encode('latin-1') + b'\n'
|
|
||||||
try:
|
|
||||||
self.request.sendall(outdata)
|
|
||||||
except Exception as e:
|
|
||||||
print(repr(e))
|
|
||||||
self.running = False
|
|
||||||
|
|
||||||
|
|
||||||
class Server(ThreadingTCPServer):
|
|
||||||
allow_reuse_address = os.name != 'nt' # False on Windows systems
|
|
||||||
|
|
||||||
class Dispatcher:
|
|
||||||
def announce_update(self, *_):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def announce_update_error(self, *_):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def __init__(self, port, modulecls, options, verbose=False):
|
|
||||||
super().__init__(('', port), TcpRequestHandler,
|
|
||||||
bind_and_activate=True)
|
|
||||||
self.secnode = None
|
|
||||||
self.dispatcher = self.Dispatcher()
|
|
||||||
self.verbose = verbose
|
|
||||||
self.modulecls = get_class(modulecls)
|
|
||||||
self.options = options
|
|
||||||
print(f'started sim-server listening on port {port}')
|
|
||||||
|
|
||||||
|
|
||||||
def parse_argv(argv):
|
|
||||||
parser = argparse.ArgumentParser(description="Relay to a communicator (simulated HW or other)")
|
|
||||||
parser.add_argument("-v", "--verbose",
|
|
||||||
help="output full communication",
|
|
||||||
action='store_true', default=False)
|
|
||||||
parser.add_argument("cls",
|
|
||||||
type=str,
|
|
||||||
help="communicator class.\n",)
|
|
||||||
parser.add_argument('-p',
|
|
||||||
'--port',
|
|
||||||
action='store',
|
|
||||||
help='server port or uri',
|
|
||||||
default=2089)
|
|
||||||
parser.add_argument('-o',
|
|
||||||
'--options',
|
|
||||||
action='store',
|
|
||||||
nargs='*',
|
|
||||||
help='options in the form key=value',
|
|
||||||
default=None)
|
|
||||||
return parser.parse_args(argv)
|
|
||||||
|
|
||||||
|
|
||||||
def main(argv=None):
|
|
||||||
if argv is None:
|
|
||||||
argv = sys.argv
|
|
||||||
|
|
||||||
args = parse_argv(argv[1:])
|
|
||||||
options = {'description': ''}
|
|
||||||
for item in args.options or ():
|
|
||||||
key, eq, value = item.partition('=')
|
|
||||||
if not eq:
|
|
||||||
raise ValueError(f"missing '=' in {item}")
|
|
||||||
try:
|
|
||||||
value = literal_eval(value)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
options[key] = value
|
|
||||||
srv = Server(int(args.port), args.cls, options, args.verbose)
|
|
||||||
srv.serve_forever()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main(sys.argv))
|
|
||||||
154
bin/stringio-server
Executable file
154
bin/stringio-server
Executable file
@@ -0,0 +1,154 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# pylint: disable=invalid-name
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# *****************************************************************************
|
||||||
|
# This program is free software; you can redistribute it and/or modify it under
|
||||||
|
# the terms of the GNU General Public License as published by the Free Software
|
||||||
|
# Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
# version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
#
|
||||||
|
# Module authors:
|
||||||
|
# Markus Zolliker <markus.zolliker@psi.ch>
|
||||||
|
# *****************************************************************************
|
||||||
|
"""server for a string communicator
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
bin/stringio-server <communciator> <server port>
|
||||||
|
|
||||||
|
open a server on <server port> to communicate with the string based <communicator> over TCP/IP.
|
||||||
|
|
||||||
|
Use cases, mainly for test purposes:
|
||||||
|
- as a T, if the hardware allows only one connection, and more than one is needed
|
||||||
|
- relay to a communicator not using TCP/IP, if Frappy should run on an other host
|
||||||
|
- relay to a hardware simulation written as a communicator
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from os import path
|
||||||
|
import asyncore
|
||||||
|
import socket
|
||||||
|
import ast
|
||||||
|
|
||||||
|
# Add import path for inplace usage
|
||||||
|
sys.path.insert(0, path.abspath(path.join(path.dirname(__file__), '..')))
|
||||||
|
|
||||||
|
from secop.lib import get_class, formatException
|
||||||
|
|
||||||
|
class LineHandler(asyncore.dispatcher_with_send):
|
||||||
|
|
||||||
|
def __init__(self, sock):
|
||||||
|
self.buffer = b""
|
||||||
|
asyncore.dispatcher_with_send.__init__(self, sock)
|
||||||
|
self.crlf = 0
|
||||||
|
|
||||||
|
def handle_read(self):
|
||||||
|
data = self.recv(8192)
|
||||||
|
if data:
|
||||||
|
parts = data.split(b"\n")
|
||||||
|
if len(parts) == 1:
|
||||||
|
self.buffer += data
|
||||||
|
else:
|
||||||
|
self.handle_line((self.buffer + parts[0]).decode('latin_1'))
|
||||||
|
for part in parts[1:-1]:
|
||||||
|
if part[-1] == b"\r":
|
||||||
|
self.crlf = True
|
||||||
|
part = part[:-1]
|
||||||
|
else:
|
||||||
|
self.crlf = False
|
||||||
|
self.handle_line(part.decode('latin_1'))
|
||||||
|
self.buffer = parts[-1]
|
||||||
|
|
||||||
|
def send_line(self, line):
|
||||||
|
self.send((line + ("\r\n" if self.crlf else "\n")).encode('latin_1'))
|
||||||
|
|
||||||
|
|
||||||
|
class LineServer(asyncore.dispatcher):
|
||||||
|
|
||||||
|
def __init__(self, host, port, lineHandlerClass):
|
||||||
|
asyncore.dispatcher.__init__(self)
|
||||||
|
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
self.set_reuse_addr()
|
||||||
|
self.bind((host, port))
|
||||||
|
self.listen(5)
|
||||||
|
self.lineHandlerClass = lineHandlerClass
|
||||||
|
|
||||||
|
def handle_accept(self):
|
||||||
|
pair = self.accept()
|
||||||
|
if pair is not None:
|
||||||
|
sock, addr = pair
|
||||||
|
print("Incoming connection from %s" % repr(addr))
|
||||||
|
self.lineHandlerClass(sock)
|
||||||
|
|
||||||
|
def loop(self):
|
||||||
|
asyncore.loop()
|
||||||
|
|
||||||
|
|
||||||
|
class Server(LineServer):
|
||||||
|
|
||||||
|
class Dispatcher:
|
||||||
|
def announce_update(self, *_):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def announce_update_error(self, *_):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwds):
|
||||||
|
super().__init__(*args, **kwds)
|
||||||
|
self.dispatcher = self.Dispatcher()
|
||||||
|
|
||||||
|
|
||||||
|
class Handler(LineHandler):
|
||||||
|
def handle_line(self, line):
|
||||||
|
try:
|
||||||
|
reply = module.do_communicate(line.strip())
|
||||||
|
if verbose:
|
||||||
|
print('%-40s | %s' % (line, reply))
|
||||||
|
except Exception:
|
||||||
|
print(formatException(verbose=True))
|
||||||
|
self.send_line(reply)
|
||||||
|
|
||||||
|
|
||||||
|
class Logger:
|
||||||
|
def debug(self, *args):
|
||||||
|
print(*args)
|
||||||
|
info = exception = debug
|
||||||
|
|
||||||
|
|
||||||
|
opts = {'description': 'simulator'}
|
||||||
|
args = []
|
||||||
|
for arg in sys.argv[1:]:
|
||||||
|
k, sep, v = arg.partition('=')
|
||||||
|
if not k:
|
||||||
|
args.append(v)
|
||||||
|
try:
|
||||||
|
v = ast.literal_eval(v)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
opts[k] = v
|
||||||
|
verbose = opts.pop('verbose', False)
|
||||||
|
opts['cls'] = 'secop_psi.ls370sim.Ls370Sim'
|
||||||
|
opts['port'] = 4567
|
||||||
|
if len(args) > 2:
|
||||||
|
raise ValueError('do not know about: %s' % ' '.join(args[2:]))
|
||||||
|
if len(args) == 2:
|
||||||
|
opts['port'] = int(args[1])
|
||||||
|
if len(args) > 0:
|
||||||
|
opts['cls'] = args[0]
|
||||||
|
args.append(opts)
|
||||||
|
|
||||||
|
cls = opts.pop('cls')
|
||||||
|
port = opts.pop('port')
|
||||||
|
srv = Server('localhost', int(port), Handler)
|
||||||
|
module = get_class(cls)(cls, Logger(), opts, srv)
|
||||||
|
module.earlyInit()
|
||||||
|
srv.loop()
|
||||||
17
cfg/ah2700test.cfg
Normal file
17
cfg/ah2700test.cfg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[node AH2700Test.psi.ch]
|
||||||
|
description = AH2700 capacitance bridge test
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindto = 0.0.0.0
|
||||||
|
bindport = 5000
|
||||||
|
|
||||||
|
[module cap]
|
||||||
|
class = secop_psi.ah2700.Capacitance
|
||||||
|
description = capacitance
|
||||||
|
uri=ldmse3-ts:3015
|
||||||
|
|
||||||
|
#[module ahcom]
|
||||||
|
#class = secop_psi.ah2700.StringIO
|
||||||
|
#uri=ldmse3-ts:3015
|
||||||
|
#description = serial communicator to an AH2700
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
Node('AH2700Test.psi.ch',
|
|
||||||
'AH2700 capacitance bridge test',
|
|
||||||
'tcp://5000',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('cap',
|
|
||||||
'frappy_psi.ah2700.Capacitance',
|
|
||||||
'capacitance',
|
|
||||||
uri='ldmse3-ts:3015',
|
|
||||||
)
|
|
||||||
111
cfg/amagnet.cfg
Normal file
111
cfg/amagnet.cfg
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
[node MLZ_amagnet(Garfield)]
|
||||||
|
description=MLZ-Amagnet
|
||||||
|
.
|
||||||
|
Water cooled magnet from ANTARES@MLZ.
|
||||||
|
.
|
||||||
|
Use module to control the magnetic field.
|
||||||
|
Don't forget to select symmetry first (can be moved only at zero field!).
|
||||||
|
.
|
||||||
|
Monitor T1..T4 (Coil temps), if they get to hot, field will ramp down!
|
||||||
|
.
|
||||||
|
In case of Problems, contact the ANTARES people at MLZ.
|
||||||
|
|
||||||
|
visibility=expert
|
||||||
|
foo=bar
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type=tcp
|
||||||
|
bindto=0.0.0.0
|
||||||
|
bindport=10767
|
||||||
|
|
||||||
|
[module enable]
|
||||||
|
class=secop_mlz.entangle.NamedDigitalOutput
|
||||||
|
tangodevice='tango://localhost:10000/box/plc/_enable'
|
||||||
|
value.datatype=["enum", {'On':1,'Off':0}]
|
||||||
|
target.datatype=["enum", {'On':1,'Off':0}]
|
||||||
|
.description='Enables to Output of the Powersupply'
|
||||||
|
.visibility='advanced'
|
||||||
|
|
||||||
|
[module polarity]
|
||||||
|
class=secop_mlz.entangle.NamedDigitalOutput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_polarity
|
||||||
|
value.datatype=["enum", {'+1':1,'0':0,'-1':-1}]
|
||||||
|
target.datatype=["enum", {'+1':1,'0':0,'-1':-1}]
|
||||||
|
.description=polarity (+/-) switch
|
||||||
|
.
|
||||||
|
there is an interlock in the plc:
|
||||||
|
if there is current, switching polarity is forbidden
|
||||||
|
if polarity is short, powersupply is disabled
|
||||||
|
.visibility=advanced
|
||||||
|
comtries=50
|
||||||
|
|
||||||
|
|
||||||
|
[module symmetry]
|
||||||
|
class=secop_mlz.entangle.NamedDigitalOutput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_symmetric
|
||||||
|
value.datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]
|
||||||
|
target.datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]
|
||||||
|
.description=par/ser switch selecting (a)symmetric mode
|
||||||
|
.
|
||||||
|
symmetric is ser, asymmetric is par
|
||||||
|
.visibility=advanced
|
||||||
|
|
||||||
|
[module T1]
|
||||||
|
class=secop_mlz.entangle.AnalogInput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_t1
|
||||||
|
.description=Temperature1 of the coils system
|
||||||
|
#warnlimits=(0, 50)
|
||||||
|
value.unit='degC'
|
||||||
|
|
||||||
|
[module T2]
|
||||||
|
class=secop_mlz.entangle.AnalogInput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_t2
|
||||||
|
.description=Temperature2 of the coils system
|
||||||
|
#warnlimits=(0, 50)
|
||||||
|
value.unit='degC'
|
||||||
|
|
||||||
|
[module T3]
|
||||||
|
class=secop_mlz.entangle.AnalogInput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_t3
|
||||||
|
.description=Temperature3 of the coils system
|
||||||
|
#warnlimits=(0, 50)
|
||||||
|
value.unit='degC'
|
||||||
|
|
||||||
|
[module T4]
|
||||||
|
class=secop_mlz.entangle.AnalogInput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_t4
|
||||||
|
.description=Temperature4 of the coils system
|
||||||
|
#warnlimits=(0, 50)
|
||||||
|
value.unit='degC'
|
||||||
|
|
||||||
|
[module currentsource]
|
||||||
|
class=secop_mlz.entangle.PowerSupply
|
||||||
|
tangodevice=tango://localhost:10000/box/lambda/curr
|
||||||
|
.description=Device for the magnet power supply (current mode)
|
||||||
|
abslimits=(0,200)
|
||||||
|
speed=1
|
||||||
|
ramp=60
|
||||||
|
precision=0.02
|
||||||
|
current=0
|
||||||
|
voltage=10
|
||||||
|
#unit=A
|
||||||
|
.visibility=advanced
|
||||||
|
|
||||||
|
[module mf]
|
||||||
|
class=secop_mlz.amagnet.GarfieldMagnet
|
||||||
|
.description=magnetic field module, handling polarity switching and stuff
|
||||||
|
subdev_currentsource=currentsource
|
||||||
|
subdev_enable=enable
|
||||||
|
subdev_polswitch=polarity
|
||||||
|
subdev_symmetry=symmetry
|
||||||
|
target.unit='T'
|
||||||
|
value.unit='T'
|
||||||
|
userlimits=(-0.35, 0.35)
|
||||||
|
calibrationtable={'symmetric':[0.00186517, 0.0431937, -0.185956, 0.0599757, 0.194042],
|
||||||
|
'short': [0.0, 0.0, 0.0, 0.0, 0.0],
|
||||||
|
'asymmetric':[0.00136154, 0.027454, -0.120951, 0.0495289, 0.110689]}
|
||||||
|
.meaning=The magnetic field
|
||||||
|
.priority=100
|
||||||
|
.visibility=user
|
||||||
|
|
||||||
|
abslimits.default=-0.4,0.4
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
Node('MLZ_amagnet(Garfield)',
|
|
||||||
'MLZ-Amagnet\n'
|
|
||||||
'\n'
|
|
||||||
'Water cooled magnet from ANTARES@MLZ.\n'
|
|
||||||
'\n'
|
|
||||||
'Use module to control the magnetic field.\n'
|
|
||||||
'Don\'t forget to select symmetry first (can be moved only at zero field!).\n'
|
|
||||||
'\n'
|
|
||||||
'Monitor T1..T4 (Coil temps), if they get to hot, field will ramp down!\n'
|
|
||||||
'\n'
|
|
||||||
'In case of Problems, contact the ANTARES people at MLZ.',
|
|
||||||
'tcp://10767',
|
|
||||||
visibility = 'expert',
|
|
||||||
foo = 'bar',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('enable',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalOutput',
|
|
||||||
'Enables to Output of the Powersupply',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_enable',
|
|
||||||
value = Param(datatype=["enum", {'On':1,'Off':0}]),
|
|
||||||
target = Param(datatype=["enum", {'On':1,'Off':0}]),
|
|
||||||
visibility = 'advanced',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('polarity',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalOutput',
|
|
||||||
'polarity (+/-) switch\n'
|
|
||||||
'\n'
|
|
||||||
'there is an interlock in the plc:\n'
|
|
||||||
'if there is current, switching polarity is forbidden\n'
|
|
||||||
'if polarity is short, powersupply is disabled',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_polarity',
|
|
||||||
value = Param(datatype=["enum", {'+1':1,'0':0,'-1':-1}]),
|
|
||||||
target = Param(datatype=["enum", {'+1':1,'0':0,'-1':-1}]),
|
|
||||||
visibility = 'advanced',
|
|
||||||
comtries = 50,
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('symmetry',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalOutput',
|
|
||||||
'par/ser switch selecting (a)symmetric mode\n'
|
|
||||||
'\n'
|
|
||||||
'symmetric is ser, asymmetric is par',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_symmetric',
|
|
||||||
value = Param(datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]),
|
|
||||||
target = Param(datatype=["enum",{'symmetric':1,'short':0, 'asymmetric':-1}]),
|
|
||||||
visibility = 'advanced',
|
|
||||||
)
|
|
||||||
|
|
||||||
for i in range(1,5):
|
|
||||||
Mod('T%d' % i,
|
|
||||||
'frappy_mlz.entangle.AnalogInput',
|
|
||||||
'Temperature %d of the coils system' % i,
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_t%d' % i,
|
|
||||||
#warnlimits=(0, 50),
|
|
||||||
value = Param(unit='degC'),
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('currentsource',
|
|
||||||
'frappy_mlz.entangle.PowerSupply',
|
|
||||||
'Device for the magnet power supply (current mode)',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/lambda/curr',
|
|
||||||
abslimits = (0,200),
|
|
||||||
speed = 1,
|
|
||||||
ramp = 60,
|
|
||||||
precision = 0.02,
|
|
||||||
current = 0,
|
|
||||||
voltage = 10,
|
|
||||||
#value=Param(unit='A')
|
|
||||||
visibility = 'advanced',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('mf',
|
|
||||||
'frappy_mlz.amagnet.GarfieldMagnet',
|
|
||||||
'magnetic field module, handling polarity switching and stuff',
|
|
||||||
currentsource = 'currentsource',
|
|
||||||
enable = 'enable',
|
|
||||||
polswitch = 'polarity',
|
|
||||||
symmetry = 'symmetry',
|
|
||||||
target = Param(unit='T'),
|
|
||||||
value = Param(unit='T'),
|
|
||||||
userlimits = (-0.35, 0.35),
|
|
||||||
calibrationtable = {'symmetric':[0.00186517, 0.0431937, -0.185956, 0.0599757, 0.194042],
|
|
||||||
'short': [0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
'asymmetric':[0.00136154, 0.027454, -0.120951, 0.0495289, 0.110689]},
|
|
||||||
meaning = ['The magnetic field', 1],
|
|
||||||
#priority=100,
|
|
||||||
visibility = 'user',
|
|
||||||
abslimits = (-0.4,0.4,),
|
|
||||||
)
|
|
||||||
150
cfg/ccr.cfg
Normal file
150
cfg/ccr.cfg
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
[node MLZ_ccr12]
|
||||||
|
description = CCR box of MLZ Sample environment group
|
||||||
|
.
|
||||||
|
Contains a Lakeshore 336 and an PLC controlling the compressor
|
||||||
|
and some valves.
|
||||||
|
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type=tcp
|
||||||
|
bindto=0.0.0.0
|
||||||
|
bindport=10767
|
||||||
|
|
||||||
|
[module automatik]
|
||||||
|
class=secop_mlz.entangle.NamedDigitalOutput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_automatik
|
||||||
|
mapping=dict(Off=0,p1=1,p2=2)
|
||||||
|
description="controls the (simple) pressure regulation
|
||||||
|
.
|
||||||
|
selects between off, regulate on p1 or regulate on p2 sensor"
|
||||||
|
|
||||||
|
[module compressor]
|
||||||
|
class=secop_mlz.entangle.NamedDigitalOutput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_cooler_onoff
|
||||||
|
mapping=dict(Off=0,On=1)
|
||||||
|
description=control the compressor (on/off)
|
||||||
|
|
||||||
|
[module gas]
|
||||||
|
class=secop_mlz.entangle.NamedDigitalOutput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_gas_onoff
|
||||||
|
mapping=dict(Off=0,On=1)
|
||||||
|
description=control the gas inlet into the ccr (on/off)
|
||||||
|
.
|
||||||
|
note: this switches off automatically after 15 min.
|
||||||
|
note: activation de-activates the vacuum inlet
|
||||||
|
note: if the pressure regulation is active, it enslave this device
|
||||||
|
|
||||||
|
[module vacuum]
|
||||||
|
class=secop_mlz.entangle.NamedDigitalOutput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_vacuum_Onoff
|
||||||
|
mapping=dict(Off=0,On=1)
|
||||||
|
description=control the vacuum inlet into the ccr (on/off)
|
||||||
|
.
|
||||||
|
note: activation de-activates the gas inlet
|
||||||
|
note: if the pressure regulation is active, it enslave this device
|
||||||
|
|
||||||
|
[module p1]
|
||||||
|
class=secop_mlz.entangle.AnalogInput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_p1
|
||||||
|
value.unit='mbar'
|
||||||
|
description=pressure sensor 1 (linear scale)
|
||||||
|
|
||||||
|
[module p2]
|
||||||
|
class=secop_mlz.entangle.AnalogInput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_p2
|
||||||
|
value.unit='mbar'
|
||||||
|
description=pressure sensor 2 (selectable curve)
|
||||||
|
|
||||||
|
[module curve_p2]
|
||||||
|
class=secop_mlz.entangle.NamedDigitalInput
|
||||||
|
tangodevice=tango://localhost:10000/box/plc/_curve
|
||||||
|
value.default=0
|
||||||
|
description=calibration curve for pressure sensor 2
|
||||||
|
mapping="{'0-10V':0, '0-1000mbar':1, '1-9V to 0-1 mbar':2,
|
||||||
|
'DI200':3, 'DI2000':4, 'TTR100':7, 'PTR90':8,
|
||||||
|
'PTR225/237':9, 'ITR90':10, 'ITR100-D':11,
|
||||||
|
'ITR100-2':12, 'ITR100-3':13, 'ITR100-4':14,
|
||||||
|
'ITR100-5':15, 'ITR100-6':16, 'ITR100-7':17,
|
||||||
|
'ITR100-8':18, 'ITR100-9':19, 'ITR100-A':20,
|
||||||
|
'CMR361':21, 'CMR362':22, 'CMR363':23,
|
||||||
|
'CMR364':24, 'CMR365':25}"
|
||||||
|
|
||||||
|
# sensors
|
||||||
|
[module T_sample]
|
||||||
|
class=secop_mlz.entangle.Sensor
|
||||||
|
tangodevice=tango://localhost:10000/box/sample/sensora
|
||||||
|
value.unit='K'
|
||||||
|
description=sample temperature
|
||||||
|
|
||||||
|
[module T_stick]
|
||||||
|
class=secop_mlz.entangle.Sensor
|
||||||
|
tangodevice=tango://localhost:10000/box/stick/sensorb
|
||||||
|
value.unit='K'
|
||||||
|
description=temperature at bottom of sample stick
|
||||||
|
|
||||||
|
[module T_coldhead]
|
||||||
|
class=secop_mlz.entangle.Sensor
|
||||||
|
tangodevice=tango://localhost:10000/box/coldhead/sensorc
|
||||||
|
value.unit='K'
|
||||||
|
description=temperature at coldhead
|
||||||
|
|
||||||
|
[module T_tube]
|
||||||
|
class=secop_mlz.entangle.Sensor
|
||||||
|
tangodevice=tango://localhost:10000/box/tube/sensord
|
||||||
|
value.unit='K'
|
||||||
|
description=temperature at thermal coupling tube <-> stick
|
||||||
|
|
||||||
|
|
||||||
|
# regulations
|
||||||
|
|
||||||
|
[module T_stick_regulation]
|
||||||
|
class=secop_mlz.entangle.TemperatureController
|
||||||
|
tangodevice=tango://localhost:10000/box/stick/control2
|
||||||
|
heateroutput.default=0
|
||||||
|
description=regulation of stick temperature
|
||||||
|
ramp.default=6
|
||||||
|
speed.default=0.1
|
||||||
|
setpoint.default=0
|
||||||
|
pid.default=(40,10,1)
|
||||||
|
p.default=40
|
||||||
|
i.default=10
|
||||||
|
d.default=1
|
||||||
|
abslimits=(0,500)
|
||||||
|
value.unit='K'
|
||||||
|
|
||||||
|
# OMG! a NamedDigitalOutput, but with float'ints' 0..3
|
||||||
|
[module T_stick_regulation_heaterrange]
|
||||||
|
class=secop_mlz.entangle.AnalogOutput
|
||||||
|
tangodevice=tango://localhost:10000/box/stick/range2
|
||||||
|
precision.default=1
|
||||||
|
abslimits=(0,3)
|
||||||
|
description=heaterrange for stick regulation
|
||||||
|
|
||||||
|
|
||||||
|
[module T_tube_regulation]
|
||||||
|
class=secop_mlz.entangle.TemperatureController
|
||||||
|
tangodevice=tango://localhost:10000/box/tube/control1
|
||||||
|
description=regulation of tube temperature
|
||||||
|
heateroutput.default=0
|
||||||
|
ramp.default=6
|
||||||
|
speed.default=0.1
|
||||||
|
setpoint.default=0
|
||||||
|
pid.default=(40,10,1)
|
||||||
|
p.default=40
|
||||||
|
i.default=10
|
||||||
|
d.default=1
|
||||||
|
abslimits=(0,500)
|
||||||
|
value.unit='K'
|
||||||
|
|
||||||
|
# OMG! a NamedDigitalOutput, but with float'ints' 0..3
|
||||||
|
#[module T_tube_regulation_heaterrange]
|
||||||
|
#class=secop_mlz.entangle.AnalogOutput
|
||||||
|
#tangodevice=tango://localhost:10000/box/tube/range1
|
||||||
|
#precision.default=1
|
||||||
|
#abslimits=(0,3)
|
||||||
|
|
||||||
|
[module T_tube_regulation_heaterrange]
|
||||||
|
class=secop_mlz.entangle.NamedDigitalOutput
|
||||||
|
tangodevice=tango://localhost:10000/box/tube/range1
|
||||||
|
mapping=dict(Off=0, Low=1, Medium=2, High=3)
|
||||||
|
description=heaterrange for tube regulation
|
||||||
148
cfg/ccr_cfg.py
148
cfg/ccr_cfg.py
@@ -1,148 +0,0 @@
|
|||||||
desc = '''CCR box of MLZ Sample environment group
|
|
||||||
|
|
||||||
Contains a Lakeshore 336 and an PLC controlling the compressor
|
|
||||||
and some valves.'''
|
|
||||||
Node('MLZ_ccr',
|
|
||||||
desc,
|
|
||||||
'tcp://10767',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('automatik',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalOutput',
|
|
||||||
'controls the (simple) pressure regulation\n'
|
|
||||||
'\n'
|
|
||||||
'selects between off, regulate on p1 or regulate on p2 sensor',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_automatik',
|
|
||||||
mapping={'Off':0,'p1':1,'p2':2},
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('compressor',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalOutput',
|
|
||||||
'control the compressor (on/off)',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_cooler_onoff',
|
|
||||||
mapping={'Off':0,'On':1},
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('gas',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalOutput',
|
|
||||||
'control the gas inlet into the ccr (on/off)\n'
|
|
||||||
'\n'
|
|
||||||
'note: this switches off automatically after 15 min.\n'
|
|
||||||
'note: activation de-activates the vacuum inlet\n'
|
|
||||||
'note: if the pressure regulation is active, it enslave this device',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_gas_onoff',
|
|
||||||
mapping={'Off':0,'On':1},
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('vacuum',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalOutput',
|
|
||||||
'control the vacuum inlet into the ccr (on/off)\n'
|
|
||||||
'\n'
|
|
||||||
'note: activation de-activates the gas inlet\n'
|
|
||||||
'note: if the pressure regulation is active, it enslave this device',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_vacuum_onoff',
|
|
||||||
mapping={'Off':0,'On':1},
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('p1',
|
|
||||||
'frappy_mlz.entangle.AnalogInput',
|
|
||||||
'pressure sensor 1 (linear scale)',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_p1',
|
|
||||||
value = Param(unit='mbar')
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('p2',
|
|
||||||
'frappy_mlz.entangle.AnalogInput',
|
|
||||||
'pressure sensor 2 (selectable curve)',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_p2',
|
|
||||||
value = Param(unit='mbar'),
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('curve_p2',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalInput',
|
|
||||||
'calibration curve for pressure sensor 2',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/plc/_curve',
|
|
||||||
value = 0,
|
|
||||||
mapping = {'0-10V':0, '0-1000mbar':1, '1-9V to 0-1 mbar':2,
|
|
||||||
'DI200':3, 'DI2000':4, 'TTR100':7, 'PTR90':8,
|
|
||||||
'PTR225/237':9, 'ITR90':10, 'ITR100-D':11,
|
|
||||||
'ITR100-2':12, 'ITR100-3':13, 'ITR100-4':14,
|
|
||||||
'ITR100-5':15, 'ITR100-6':16, 'ITR100-7':17,
|
|
||||||
'ITR100-8':18, 'ITR100-9':19, 'ITR100-A':20,
|
|
||||||
'CMR361':21, 'CMR362':22, 'CMR363':23,
|
|
||||||
'CMR364':24, 'CMR365':25},
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('T_tube_regulation',
|
|
||||||
'frappy_mlz.entangle.TemperatureController',
|
|
||||||
'regulation of tube temperature',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/tube/control1',
|
|
||||||
value = Param(unit = 'K'),
|
|
||||||
heateroutput = 0,
|
|
||||||
ramp = 6,
|
|
||||||
speed = 0.1,
|
|
||||||
setpoint = 0,
|
|
||||||
pid = (40, 10, 1),
|
|
||||||
p = 40,
|
|
||||||
i = 10,
|
|
||||||
d = 1,
|
|
||||||
abslimits = (0, 500),
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('T_stick_regulation',
|
|
||||||
'frappy_mlz.entangle.TemperatureController',
|
|
||||||
'regualtion of stick temperature',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/stick/control2',
|
|
||||||
value = Param(unit = 'K'),
|
|
||||||
heateroutput = 0,
|
|
||||||
ramp = 6,
|
|
||||||
speed = 0.1,
|
|
||||||
setpoint = 0,
|
|
||||||
pid = (40, 10, 1),
|
|
||||||
p = 40,
|
|
||||||
i = 10,
|
|
||||||
d = 1,
|
|
||||||
abslimits = (0, 500),
|
|
||||||
)
|
|
||||||
Mod('T_sample',
|
|
||||||
'frappy_mlz.entangle.Sensor',
|
|
||||||
'sample temperature',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/sample/sensora',
|
|
||||||
value = Param(unit = 'K'),
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('T_stick',
|
|
||||||
'frappy_mlz.entangle.Sensor',
|
|
||||||
'temperature at bottom of sample stick',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/stick/sensorb',
|
|
||||||
value = Param(unit = 'K'),
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('T_coldhead',
|
|
||||||
'frappy_mlz.entangle.Sensor',
|
|
||||||
'temperature at coldhead',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/coldhead/sensorc',
|
|
||||||
value = Param(unit = 'K'),
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('T_tube',
|
|
||||||
'frappy_mlz.entangle.Sensor',
|
|
||||||
'temperature at thermal coupling tube <-> stick',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/tube/sensord',
|
|
||||||
value = Param(unit = 'K'),
|
|
||||||
)
|
|
||||||
|
|
||||||
# THIS IS A HACK: due to entangle (in controller)
|
|
||||||
Mod('T_tube_regulation_heaterrange',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalOutput',
|
|
||||||
'heaterrange for tube regulation',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/tube/range1',
|
|
||||||
mapping={'Off':0,'Low':1,'Medium':2, 'High':3},
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('T_stick_regulation_heaterrange',
|
|
||||||
'frappy_mlz.entangle.NamedDigitalOutput',
|
|
||||||
'heaterrange for stick regulation',
|
|
||||||
tangodevice = 'tango://localhost:10000/box/stick/range2',
|
|
||||||
mapping={'Off':0,'Low':1,'Medium':2, 'High':3},
|
|
||||||
)
|
|
||||||
50
cfg/cryo.cfg
Normal file
50
cfg/cryo.cfg
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
[node cryo_7]
|
||||||
|
# set SEC-node properties
|
||||||
|
description = short description
|
||||||
|
.
|
||||||
|
This is a very long description providing all the glory details in all the glory details about the stuff we are describing
|
||||||
|
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type=tcp
|
||||||
|
bindto=0.0.0.0
|
||||||
|
bindport=10769
|
||||||
|
|
||||||
|
[module cryo]
|
||||||
|
# some (non-defaut) module properties
|
||||||
|
.group=very important/stuff
|
||||||
|
.description=A simulated cc cryostat with heat-load, specific heat for the sample
|
||||||
|
and a temperature dependend heat-link between sample and regulation.
|
||||||
|
|
||||||
|
# class of module:
|
||||||
|
class=secop_demo.cryo.Cryostat
|
||||||
|
|
||||||
|
# some parameters
|
||||||
|
jitter=0.1
|
||||||
|
T_start=10.0
|
||||||
|
target=10.0
|
||||||
|
looptime=1
|
||||||
|
ramp=6
|
||||||
|
maxpower=20.0
|
||||||
|
heater=4.1
|
||||||
|
p=40
|
||||||
|
i=10
|
||||||
|
d=2
|
||||||
|
mode=pid
|
||||||
|
tolerance=0.1
|
||||||
|
window=30
|
||||||
|
timeout=900
|
||||||
|
|
||||||
|
# some (non-default) parameter properties
|
||||||
|
pollinterval.export=False
|
||||||
|
|
||||||
|
# some parameter grouping
|
||||||
|
p.group=pid
|
||||||
|
i.group=pid
|
||||||
|
d.group=pid
|
||||||
|
|
||||||
|
value.unit=K
|
||||||
|
|
||||||
|
# test custom properties
|
||||||
|
value.test=customized value
|
||||||
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
#####################################################################
|
|
||||||
# Python version of frappy config
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
Node('cryo_7.frappy.demo',
|
|
||||||
'short description\n\n'
|
|
||||||
'This is a very long description providing all the gory details '
|
|
||||||
'about the stuff we are describing.',
|
|
||||||
'tcp://10769',
|
|
||||||
more="blub",
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('cryo',
|
|
||||||
'frappy_demo.cryo.Cryostat',
|
|
||||||
'A simulated cc cryostat with heat-load, specific heat for the sample and a '
|
|
||||||
'temperature dependent heat-link between sample and regulation.',
|
|
||||||
group='very important/stuff',
|
|
||||||
jitter=0.1,
|
|
||||||
T_start=10.0,
|
|
||||||
target=10.0,
|
|
||||||
looptime=1,
|
|
||||||
ramp=6,
|
|
||||||
maxpower=20.0,
|
|
||||||
heater=4.1,
|
|
||||||
mode='pid',
|
|
||||||
tolerance=0.1,
|
|
||||||
window=30,
|
|
||||||
timeout=900,
|
|
||||||
p = Param(40, unit='%/K'), # in case 'default' is the first arg, we can omit 'default='
|
|
||||||
i = 10,
|
|
||||||
d = 2,
|
|
||||||
pid = Group('p', 'i', 'd'),
|
|
||||||
pollinterval = Param(export=False),
|
|
||||||
value = Param(unit = 'K', test = 'customized value'),
|
|
||||||
)
|
|
||||||
43
cfg/demo.cfg
Normal file
43
cfg/demo.cfg
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
[node Equipment_ID_for_demonstration]
|
||||||
|
description = virtual modules to play around with
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
bindto=0.0.0.0
|
||||||
|
bindport=10767
|
||||||
|
|
||||||
|
[module heatswitch]
|
||||||
|
class=secop_demo.modules.Switch
|
||||||
|
switch_on_time=5
|
||||||
|
switch_off_time=10
|
||||||
|
.description="Heatswitch for `mf` device"
|
||||||
|
|
||||||
|
[module mf]
|
||||||
|
class=secop_demo.modules.MagneticField
|
||||||
|
heatswitch = heatswitch
|
||||||
|
.description="simulates some cryomagnet with persistent/non-persistent switching"
|
||||||
|
|
||||||
|
[module ts]
|
||||||
|
class=secop_demo.modules.SampleTemp
|
||||||
|
sensor = 'Q1329V7R3'
|
||||||
|
ramp = 4
|
||||||
|
target = 10
|
||||||
|
value = 10
|
||||||
|
.description = "some temperature"
|
||||||
|
|
||||||
|
[module tc1]
|
||||||
|
class=secop_demo.modules.CoilTemp
|
||||||
|
sensor="X34598T7"
|
||||||
|
.description = "some temperature"
|
||||||
|
|
||||||
|
[module tc2]
|
||||||
|
class=secop_demo.modules.CoilTemp
|
||||||
|
sensor="X39284Q8'
|
||||||
|
.description = "some temperature"
|
||||||
|
|
||||||
|
[module label]
|
||||||
|
class=secop_demo.modules.Label
|
||||||
|
system=Cryomagnet MX15
|
||||||
|
subdev_mf=mf
|
||||||
|
subdev_ts=ts
|
||||||
|
.description = "some label indicating the state of the magnet `mf`."
|
||||||
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
Node('demo.frappy.demo',
|
|
||||||
'Basic demo server for frappy',
|
|
||||||
'tcp://10767',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('heatswitch',
|
|
||||||
'frappy_demo.modules.Switch',
|
|
||||||
'Heatswitch for `mf` device',
|
|
||||||
switch_on_time = 5,
|
|
||||||
switch_off_time = 10,
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('mf',
|
|
||||||
'frappy_demo.modules.MagneticField',
|
|
||||||
'simulates some cryomagnet with persistent/non-persistent switching',
|
|
||||||
heatswitch = 'heatswitch',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('ts',
|
|
||||||
'frappy_demo.modules.SampleTemp',
|
|
||||||
'some temperature',
|
|
||||||
sensor = 'Q1329V7R3',
|
|
||||||
ramp = 4,
|
|
||||||
target = 10,
|
|
||||||
value = 10,
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('tc1',
|
|
||||||
'frappy_demo.modules.CoilTemp',
|
|
||||||
'some temperature',
|
|
||||||
sensor = 'X34598T7',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('tc2',
|
|
||||||
'frappy_demo.modules.CoilTemp',
|
|
||||||
'some temperature',
|
|
||||||
sensor = 'X39284Q8',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('label',
|
|
||||||
'frappy_demo.modules.Label',
|
|
||||||
'some label indicating the state of the magnet `mf`.',
|
|
||||||
system = 'Cryomagnet MX15',
|
|
||||||
mf = 'mf',
|
|
||||||
ts = 'ts',
|
|
||||||
)
|
|
||||||
50
cfg/epics.cfg
Normal file
50
cfg/epics.cfg
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
[node see_demo_equipment]
|
||||||
|
description=Do not use, it needs to be rewritten....
|
||||||
|
|
||||||
|
[interface testing]
|
||||||
|
type=tcp
|
||||||
|
bindto=0.0.0.0
|
||||||
|
bindport=10767
|
||||||
|
|
||||||
|
[module tc1]
|
||||||
|
class=secop_demo.modules.CoilTemp
|
||||||
|
sensor="X34598T7"
|
||||||
|
|
||||||
|
[module tc2]
|
||||||
|
class=secop_demo.modules.CoilTemp
|
||||||
|
sensor="X39284Q8'
|
||||||
|
|
||||||
|
|
||||||
|
[module sensor1]
|
||||||
|
class=secop_ess.epics.EpicsReadable
|
||||||
|
epics_version="v4"
|
||||||
|
.group="Lakeshore336"
|
||||||
|
value_pv="DEV:KRDG1"
|
||||||
|
|
||||||
|
|
||||||
|
[module loop1]
|
||||||
|
class=secop_ess.epics.EpicsTempCtrl
|
||||||
|
epics_version="v4"
|
||||||
|
.group="Lakeshore336"
|
||||||
|
|
||||||
|
value_pv="DEV:KRDG1"
|
||||||
|
target_pv="DEV:SETP_S1"
|
||||||
|
heaterrange_pv="DEV:RANGE_S1"
|
||||||
|
|
||||||
|
|
||||||
|
[module sensor2]
|
||||||
|
class=secop_ess.epics.EpicsReadable
|
||||||
|
epics_version="v4"
|
||||||
|
.group="Lakeshore336"
|
||||||
|
value_pv="DEV:KRDG2"
|
||||||
|
|
||||||
|
|
||||||
|
[module loop2]
|
||||||
|
class=secop_ess.epics.EpicsTempCtrl
|
||||||
|
epics_version="v4"
|
||||||
|
.group="Lakeshore336"
|
||||||
|
|
||||||
|
value_pv="DEV:KRDG2"
|
||||||
|
target_pv="DEV:SETP_S2"
|
||||||
|
heaterrange_pv="DEV:RANGE_S2"
|
||||||
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
Node('see_demo_equipment',
|
|
||||||
'Do not use, it needs to be rewritten....',
|
|
||||||
'tcp://10767',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('tc1',
|
|
||||||
'frappy_demo.modules.CoilTemp',
|
|
||||||
'',
|
|
||||||
sensor="X34598T7",
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('tc2',
|
|
||||||
'frappy_demo.modules.CoilTemp',
|
|
||||||
'',
|
|
||||||
sensor="X39284Q8",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
for i in [1,2]:
|
|
||||||
Mod('sensor%d' % i,
|
|
||||||
'frappy_ess.epics.EpicsReadable',
|
|
||||||
'',
|
|
||||||
epics_version="v4",
|
|
||||||
value_pv="DEV:KRDG%d" % i,
|
|
||||||
group="Lakeshore336",
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('loop%d' % i,
|
|
||||||
'frappy_ess.epics.EpicsTempCtrl',
|
|
||||||
'',
|
|
||||||
epics_version="v4",
|
|
||||||
group="Lakeshore336",
|
|
||||||
value_pv="DEV:KRDG%d" % i,
|
|
||||||
target_pv="DEV:SETP_S%d" % i,
|
|
||||||
heaterrange_pv="DEV:RANGE_S%d" % i,
|
|
||||||
)
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
import frappy.core as fc
|
|
||||||
import TNMRExt.FlexibleModule as mod
|
|
||||||
|
|
||||||
Node('example_TNMR.psi.ch', 'The NMR system running the Scout and controlled with TNMR', interface='tcp://5000')
|
|
||||||
|
|
||||||
Mod('sequence0', mod.flexible_module('D:\\Users\\Garrad\\sequence_0.tps', 's0'), 'The zeroth sequence')
|
|
||||||
Mod('sequence1', mod.flexible_module('D:\\Users\\Garrad\\sequence_1.tps', 's1'), 'The first sequence')
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
[FRAPPY]
|
|
||||||
# general config for running in git repo
|
|
||||||
logdir = ./log
|
|
||||||
piddir = ./pid
|
|
||||||
confdir = ./cfg
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
from os import environ
|
|
||||||
|
|
||||||
# either change the uri or set the environment variable 'LS_URI'
|
|
||||||
lakeshore_uri = environ.get('LS_URI', 'tcp://<host>:7777')
|
|
||||||
|
|
||||||
Node('example_cryo.psi.ch', # a globally unique identification
|
|
||||||
'this is an example cryostat for the Frappy tutorial', # describes the node
|
|
||||||
interface='tcp://10767') # you might choose any port number > 1024
|
|
||||||
Mod('io', # the name of the module
|
|
||||||
'frappy_demo.lakeshore.LakeshoreIO', # the class used for communication
|
|
||||||
'communication to main controller', # a description
|
|
||||||
uri=lakeshore_uri, # the serial connection
|
|
||||||
)
|
|
||||||
Mod('T',
|
|
||||||
'frappy_demo.lakeshore.TemperatureLoop',
|
|
||||||
'Sample Temperature',
|
|
||||||
io='io',
|
|
||||||
channel='A', # the channel on the LakeShore for this module
|
|
||||||
loop=1, # the loop to be used
|
|
||||||
value=Param(max=470), # set the maximum expected T
|
|
||||||
target=Param(max=420), # set the maximum allowed target T
|
|
||||||
heater_range=3, # 5 for model 350
|
|
||||||
)
|
|
||||||
25
cfg/ls370res.cfg
Normal file
25
cfg/ls370res.cfg
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[NODE]
|
||||||
|
id = ls370res.psi.ch
|
||||||
|
description = Lsc370 Test
|
||||||
|
|
||||||
|
[INTERFACE]
|
||||||
|
uri = tcp://5000
|
||||||
|
|
||||||
|
[lsmain_iodev]
|
||||||
|
description = the communication device
|
||||||
|
class = secop_psi.ls370res.StringIO
|
||||||
|
uri = lollypop-ts:3001
|
||||||
|
|
||||||
|
[lsmain]
|
||||||
|
class = secop_psi.ls370res.Main
|
||||||
|
description = main control of Lsc controller
|
||||||
|
uri = lollypop-ts:3001
|
||||||
|
|
||||||
|
[res]
|
||||||
|
class = secop_psi.ls370res.ResChannel
|
||||||
|
iexc = '1mA'
|
||||||
|
channel = 5
|
||||||
|
description = resistivity
|
||||||
|
main = lsmain
|
||||||
|
# the auto created iodev from lsmain:
|
||||||
|
iodev = lsmain_iodev
|
||||||
24
cfg/ls370sim.cfg
Normal file
24
cfg/ls370sim.cfg
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
[node LscSIM.psi.ch]
|
||||||
|
description = Lsc Simulation at PSI
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindto = 0.0.0.0
|
||||||
|
bindport = 5000
|
||||||
|
|
||||||
|
[module res]
|
||||||
|
class = secop_psi.ls370res.ResChannel
|
||||||
|
.channel = 3
|
||||||
|
.description = resistivity
|
||||||
|
.main = lsmain
|
||||||
|
.iodev = lscom
|
||||||
|
|
||||||
|
[module lsmain]
|
||||||
|
class = secop_psi.ls370res.Main
|
||||||
|
.description = main control of Lsc controller
|
||||||
|
.iodev = lscom
|
||||||
|
|
||||||
|
[module lscom]
|
||||||
|
class = secop_psi.ls370sim.Ls370Sim
|
||||||
|
.description = simulated serial communicator to a LS 370
|
||||||
|
.visibility = 3
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
Node('LscSIM.psi.ch',
|
|
||||||
'Lsc Simulation at PSI',
|
|
||||||
'tcp://5000',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('lscom',
|
|
||||||
'frappy_psi.ls370sim.Ls370Sim',
|
|
||||||
'simulated serial communicator to a LS 370',
|
|
||||||
visibility = 3
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('sw',
|
|
||||||
'frappy_psi.ls370res.Switcher',
|
|
||||||
'channel switcher for Lsc controller',
|
|
||||||
io = 'lscom',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('a',
|
|
||||||
'frappy_psi.ls370res.ResChannel',
|
|
||||||
'resistivity',
|
|
||||||
channel = 1,
|
|
||||||
switcher = 'sw',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('b',
|
|
||||||
'frappy_psi.ls370res.ResChannel',
|
|
||||||
'resistivity',
|
|
||||||
channel = 3,
|
|
||||||
switcher = 'sw',
|
|
||||||
)
|
|
||||||
25
cfg/ls370test.cfg
Normal file
25
cfg/ls370test.cfg
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[NODE]
|
||||||
|
id = ls370res.psi.ch
|
||||||
|
description = Lsc370 Test
|
||||||
|
|
||||||
|
[INTERFACE]
|
||||||
|
uri = tcp://5000
|
||||||
|
|
||||||
|
[lsmain_iodev]
|
||||||
|
description = the communication device
|
||||||
|
class = secop_psi.ls370res.StringIO
|
||||||
|
uri = localhost:4567
|
||||||
|
|
||||||
|
[lsmain]
|
||||||
|
class = secop_psi.ls370res.Main
|
||||||
|
description = main control of Lsc controller
|
||||||
|
iodev = lsmain_iodev
|
||||||
|
|
||||||
|
[res]
|
||||||
|
class = secop_psi.ls370res.ResChannel
|
||||||
|
iexc = '1mA'
|
||||||
|
channel = 5
|
||||||
|
description = resistivity
|
||||||
|
main = lsmain
|
||||||
|
# the auto created iodev from lsmain:
|
||||||
|
iodev = lsmain_iodev
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
Node('LscSIM.psi.ch',
|
|
||||||
'Lsc370 Test',
|
|
||||||
'tcp://5000',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('io',
|
|
||||||
'frappy_psi.ls370res.StringIO',
|
|
||||||
'io for Ls370',
|
|
||||||
uri = 'localhost:2089',
|
|
||||||
)
|
|
||||||
Mod('sw',
|
|
||||||
'frappy_psi.ls370res.Switcher',
|
|
||||||
'channel switcher',
|
|
||||||
io = 'io',
|
|
||||||
)
|
|
||||||
Mod('res1',
|
|
||||||
'frappy_psi.ls370res.ResChannel',
|
|
||||||
'resistivity chan 1',
|
|
||||||
vexc = '2mV',
|
|
||||||
channel = 1,
|
|
||||||
switcher = 'sw',
|
|
||||||
)
|
|
||||||
Mod('res2',
|
|
||||||
'frappy_psi.ls370res.ResChannel',
|
|
||||||
'resistivity chn 3',
|
|
||||||
vexc = '2mV',
|
|
||||||
channel = 3,
|
|
||||||
switcher = 'sw',
|
|
||||||
)
|
|
||||||
70
cfg/mb11.cfg
Normal file
70
cfg/mb11.cfg
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
[seaconn]
|
||||||
|
class = secop_psi.sea.SeaClient
|
||||||
|
description = a SEA connection
|
||||||
|
# uri will be automatic
|
||||||
|
|
||||||
|
[ts]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = ts.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[tvs]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tvs.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[tvd]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tvd.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[pstat]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = pstat.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[pdyn]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = pdyn.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[tneck1]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tneck1.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[tneck2]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tneck2.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[tnvs]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tnvs.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[tnvd]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tnvd.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[mf]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = mf.mb11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[tcoil]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tcoil.mb11.config
|
||||||
|
remote_paths = .
|
||||||
8
cfg/multiplexer.cfg
Normal file
8
cfg/multiplexer.cfg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[NODE]
|
||||||
|
class = protocol.router.Router
|
||||||
|
id = multiplexer
|
||||||
|
description = multiplexer node
|
||||||
|
nodes = ['localhost:5000', 'localhost:10769']
|
||||||
|
|
||||||
|
[INTERFACE]
|
||||||
|
uri = tcp://5000
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
Node('multiplexer',
|
|
||||||
'multiplexer node',
|
|
||||||
'tcp://5000',
|
|
||||||
cls = 'protocol.router.Router',
|
|
||||||
nodes = ['localhost:10768', 'localhost:10769'],
|
|
||||||
)
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import frappy.core as fc
|
|
||||||
|
|
||||||
Node('example_NA.psi.ch', 'A demo system showing how to connect network analysers', interface='tcp://5000')
|
|
||||||
|
|
||||||
Mod('ZVLNode', 'frappy_psi.network_analysers.ZVL.ZVLNode.ZVLNode', 'ZVL Network Analyser', analyser_ip=Param('169.254.150.182')) # must be connected on the same ethernet network
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
import frappy.core as fc
|
|
||||||
|
|
||||||
docstring = 'NMR pulse sequence.\
|
|
||||||
Each pulse ``block`` consists of first a pulse with parameters pulse_width (microseconds), pulse_height (amplitude; for the SCOUT, percentage of max), and phase_cycle, and then a delay with parameter delay_time (microseconds).\
|
|
||||||
\
|
|
||||||
Please use the custom commands, ``generate_pulse``, ``scan_sequence``, and ``scan_sequences``. There exist example scripts in your NICOS install location/nicos_sinq/tnmr/example_scripts.\
|
|
||||||
Durations are in microseconds, excepting post_acquisition_time (ms), and frequencies are in MHz.\
|
|
||||||
'
|
|
||||||
|
|
||||||
Node('example_TNMR.psi.ch', 'The NMR system running the Scout and controlled with TNMR', interface='tcp://5000')
|
|
||||||
|
|
||||||
Mod('daq_scout', 'frappy_psi.tnmr.TNMRModule.TNMRModule', 'Tecmag SCOUT-based NMR System')
|
|
||||||
|
|
||||||
print('TNMR Module loaded - please refer to https://www.psi.ch/en/lin/nmr-spectroscopy for help and documentation')
|
|
||||||
5
cfg/ori.cfg
Normal file
5
cfg/ori.cfg
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[seaconn]
|
||||||
|
class = secop_psi.sea.SeaClient
|
||||||
|
description = a SEA connection
|
||||||
|
# uri = tcp://samenv.psi.ch:8642
|
||||||
|
|
||||||
124
cfg/ppms.cfg
Normal file
124
cfg/ppms.cfg
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
[NODE]
|
||||||
|
id = PPMS.psi.ch
|
||||||
|
description = PPMS at PSI
|
||||||
|
|
||||||
|
[INTERFACE]
|
||||||
|
uri = tcp://5000
|
||||||
|
|
||||||
|
[tt]
|
||||||
|
class = secop_psi.ppms.Temp
|
||||||
|
description = main temperature
|
||||||
|
iodev = ppms
|
||||||
|
|
||||||
|
[mf]
|
||||||
|
class = secop_psi.ppms.Field
|
||||||
|
target.min = -9
|
||||||
|
target.max = 9
|
||||||
|
.description = magnetic field
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[pos]
|
||||||
|
class = secop_psi.ppms.Position
|
||||||
|
.description = sample rotator
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[lev]
|
||||||
|
class = secop_psi.ppms.Level
|
||||||
|
.description = helium level
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[chamber]
|
||||||
|
class = secop_psi.ppms.Chamber
|
||||||
|
.description = chamber state
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r1]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r2]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r3]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 3
|
||||||
|
.no = 3
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r4]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 4
|
||||||
|
.no = 4
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i1]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i2]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i3]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 3
|
||||||
|
.no = 3
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i4]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 4
|
||||||
|
.no = 4
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[v1]
|
||||||
|
class = secop_psi.ppms.DriverChannel
|
||||||
|
.description = voltage channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = V
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[v2]
|
||||||
|
class = secop_psi.ppms.DriverChannel
|
||||||
|
.description = voltage channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = V
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[tv]
|
||||||
|
class = secop_psi.ppms.UserChannel
|
||||||
|
.description = VTI temperature
|
||||||
|
enabled = 1
|
||||||
|
value.unit = K
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[ts]
|
||||||
|
class = secop_psi.ppms.UserChannel
|
||||||
|
.description = sample temperature
|
||||||
|
enabled = 1
|
||||||
|
value.unit = K
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[ppms]
|
||||||
|
class = secop_psi.ppms.Main
|
||||||
|
.description = the main and poller module
|
||||||
|
.class_id = QD.MULTIVU.PPMS.1
|
||||||
|
.visibility = 3
|
||||||
|
pollinterval = 2
|
||||||
124
cfg/ppms2.cfg
Normal file
124
cfg/ppms2.cfg
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
[NODE]
|
||||||
|
id = PPMS.psi.ch
|
||||||
|
description = PPMS at PSI
|
||||||
|
|
||||||
|
[INTERFACE]
|
||||||
|
uri = 5000
|
||||||
|
|
||||||
|
[tt]
|
||||||
|
class = secop_psi.ppms.Temp
|
||||||
|
description = main temperature
|
||||||
|
iodev = ppms
|
||||||
|
|
||||||
|
[mf]
|
||||||
|
class = secop_psi.ppms.Field
|
||||||
|
target.min = -9
|
||||||
|
target.max = 9
|
||||||
|
.description = magnetic field
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[pos]
|
||||||
|
class = secop_psi.ppms.Position
|
||||||
|
.description = sample rotator
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[lev]
|
||||||
|
class = secop_psi.ppms.Level
|
||||||
|
.description = helium level
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[chamber]
|
||||||
|
class = secop_psi.ppms.Chamber
|
||||||
|
.description = chamber state
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r1]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r2]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r3]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 3
|
||||||
|
.no = 3
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r4]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 4
|
||||||
|
.no = 4
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i1]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i2]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i3]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 3
|
||||||
|
.no = 3
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i4]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 4
|
||||||
|
.no = 4
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[v1]
|
||||||
|
class = secop_psi.ppms.DriverChannel
|
||||||
|
.description = voltage channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = V
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[v2]
|
||||||
|
class = secop_psi.ppms.DriverChannel
|
||||||
|
.description = voltage channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = V
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[tv]
|
||||||
|
class = secop_psi.ppms.UserChannel
|
||||||
|
.description = VTI temperature
|
||||||
|
enabled = 1
|
||||||
|
value.unit = K
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[ts]
|
||||||
|
class = secop_psi.ppms.UserChannel
|
||||||
|
.description = sample temperature
|
||||||
|
enabled = 1
|
||||||
|
value.unit = K
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[ppms]
|
||||||
|
class = secop_psi.ppms.Main
|
||||||
|
.description = the main and poller module
|
||||||
|
.class_id = QD.MULTIVU.PPMS.1
|
||||||
|
.visibility = 3
|
||||||
|
pollinterval = 2
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
Node('PPMS.psi.ch',
|
|
||||||
'PPMS at PSI',
|
|
||||||
'tcp://5000',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('tt',
|
|
||||||
'frappy_psi.ppms.Temp',
|
|
||||||
'main temperature',
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('mf',
|
|
||||||
'frappy_psi.ppms.Field',
|
|
||||||
'magnetic field',
|
|
||||||
target = Param(min=-9, max=9),
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('pos',
|
|
||||||
'frappy_psi.ppms.Position',
|
|
||||||
'sample rotator',
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('lev',
|
|
||||||
'frappy_psi.ppms.Level',
|
|
||||||
'helium level',
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('chamber',
|
|
||||||
'frappy_psi.ppms.Chamber',
|
|
||||||
'chamber state',
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
for i in range(1,5):
|
|
||||||
Mod('r%d' % i,
|
|
||||||
'frappy_psi.ppms.BridgeChannel',
|
|
||||||
'resistivity channel %d' % i,
|
|
||||||
no = i,
|
|
||||||
value = Param(unit = 'Ohm'),
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
for i in range(1,5):
|
|
||||||
Mod('i%d' % i,
|
|
||||||
'frappy_psi.ppms.Channel',
|
|
||||||
'current channel %d' % i,
|
|
||||||
no = i,
|
|
||||||
value = Param(unit = 'uA'),
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('v1',
|
|
||||||
'frappy_psi.ppms.DriverChannel',
|
|
||||||
'voltage channel 1',
|
|
||||||
no = 1,
|
|
||||||
value = Param(unit = 'V'),
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('v2',
|
|
||||||
'frappy_psi.ppms.DriverChannel',
|
|
||||||
'voltage channel 2',
|
|
||||||
no = 2,
|
|
||||||
value = Param(unit = 'V'),
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('tv',
|
|
||||||
'frappy_psi.ppms.UserChannel',
|
|
||||||
'VTI temperature',
|
|
||||||
enabled = 1,
|
|
||||||
value = Param(unit = 'K'),
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('ts',
|
|
||||||
'frappy_psi.ppms.UserChannel',
|
|
||||||
'sample temperature',
|
|
||||||
enabled = 1,
|
|
||||||
value = Param(unit = 'K'),
|
|
||||||
io = 'ppms',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('ppms',
|
|
||||||
'frappy_psi.ppms.Main',
|
|
||||||
'the main and poller module',
|
|
||||||
class_id = 'QD.MULTIVU.PPMS.1',
|
|
||||||
visibility = 3,
|
|
||||||
pollinterval = 2,
|
|
||||||
)
|
|
||||||
22
cfg/ppms_proxy_test.cfg
Normal file
22
cfg/ppms_proxy_test.cfg
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[node filtered.PPMS.psi.ch]
|
||||||
|
description = filtered PPMS at PSI
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindto = 0.0.0.0
|
||||||
|
bindport = 5002
|
||||||
|
|
||||||
|
[module secnode]
|
||||||
|
class = secop.SecNode
|
||||||
|
description = a SEC node
|
||||||
|
uri = tcp://localhost:5000
|
||||||
|
|
||||||
|
[module mf]
|
||||||
|
class = secop.Proxy
|
||||||
|
remote_class = secop_psi.ppms.Field
|
||||||
|
description = magnetic field
|
||||||
|
iodev = secnode
|
||||||
|
value.min = -0.1
|
||||||
|
value.max = 0.1
|
||||||
|
target.min = -8
|
||||||
|
target.max = 8
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
Node('filtered.PPMS.psi.ch',
|
|
||||||
'filtered PPMS at PSI',
|
|
||||||
'tcp://5002',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
Mod('secnode',
|
|
||||||
'frappy.proxy.SecNode',
|
|
||||||
'a SEC node',
|
|
||||||
uri = 'tcp://localhost:5000',
|
|
||||||
)
|
|
||||||
|
|
||||||
Mod('mf',
|
|
||||||
'frappy.proxy.Proxy',
|
|
||||||
'magnetic field',
|
|
||||||
remote_class = 'frappy_psi.ppms.Field',
|
|
||||||
io = 'secnode',
|
|
||||||
|
|
||||||
value = Param(),
|
|
||||||
target = Param(min=-0.1, max=0.1),
|
|
||||||
)
|
|
||||||
124
cfg/ppmssim.cfg
Normal file
124
cfg/ppmssim.cfg
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
[NODE]
|
||||||
|
id = PPMS.psi.ch
|
||||||
|
description = PPMS at PSI
|
||||||
|
|
||||||
|
[INTERFACE]
|
||||||
|
uri = tcp://5000
|
||||||
|
|
||||||
|
[tt]
|
||||||
|
class = secop_psi.ppms.Temp
|
||||||
|
description = main temperature
|
||||||
|
iodev = ppms
|
||||||
|
|
||||||
|
[mf]
|
||||||
|
class = secop_psi.ppms.Field
|
||||||
|
target.min = -9
|
||||||
|
target.max = 9
|
||||||
|
.description = magnetic field
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[pos]
|
||||||
|
class = secop_psi.ppms.Position
|
||||||
|
.description = sample rotator
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[lev]
|
||||||
|
class = secop_psi.ppms.Level
|
||||||
|
.description = helium level
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[chamber]
|
||||||
|
class = secop_psi.ppms.Chamber
|
||||||
|
.description = chamber state
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r1]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r2]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r3]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 3
|
||||||
|
.no = 3
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r4]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 4
|
||||||
|
.no = 4
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i1]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i2]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i3]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 3
|
||||||
|
.no = 3
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i4]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 4
|
||||||
|
.no = 4
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[v1]
|
||||||
|
class = secop_psi.ppms.DriverChannel
|
||||||
|
.description = voltage channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = V
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[v2]
|
||||||
|
class = secop_psi.ppms.DriverChannel
|
||||||
|
.description = voltage channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = V
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[tv]
|
||||||
|
class = secop_psi.ppms.UserChannel
|
||||||
|
.description = VTI temperature
|
||||||
|
enabled = 1
|
||||||
|
value.unit = K
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[ts]
|
||||||
|
class = secop_psi.ppms.UserChannel
|
||||||
|
.description = sample temperature
|
||||||
|
enabled = 1
|
||||||
|
value.unit = K
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[ppms]
|
||||||
|
class = secop_psi.ppms.Main
|
||||||
|
.description = the main and poller module
|
||||||
|
.class_id = QD.MULTIVU.PPMS.1
|
||||||
|
.visibility = 3
|
||||||
|
pollinterval = 2
|
||||||
126
cfg/ppmswin.cfg
Normal file
126
cfg/ppmswin.cfg
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
[NODE]
|
||||||
|
id = PPMS.psi.ch
|
||||||
|
description = PPMS at PSI
|
||||||
|
|
||||||
|
[INTERFACE]
|
||||||
|
uri = tcp://5000
|
||||||
|
|
||||||
|
[tt]
|
||||||
|
class = secop_psi.ppms.Temp
|
||||||
|
description = main temperature
|
||||||
|
iodev = ppms
|
||||||
|
|
||||||
|
[mf]
|
||||||
|
class = secop_psi.ppms.Field
|
||||||
|
target.min = -9
|
||||||
|
target.max = 9
|
||||||
|
.description = magnetic field
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[pos]
|
||||||
|
class = secop_psi.ppms.Position
|
||||||
|
.description = sample rotator
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[lev]
|
||||||
|
class = secop_psi.ppms.Level
|
||||||
|
.description = helium level
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[chamber]
|
||||||
|
class = secop_psi.ppms.Chamber
|
||||||
|
.description = chamber state
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r1]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r2]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r3]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 3
|
||||||
|
.no = 3
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[r4]
|
||||||
|
class = secop_psi.ppms.BridgeChannel
|
||||||
|
.description = resistivity channel 4
|
||||||
|
.no = 4
|
||||||
|
value.unit = Ohm
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i1]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i2]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i3]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 3
|
||||||
|
.no = 3
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[i4]
|
||||||
|
class = secop_psi.ppms.Channel
|
||||||
|
.description = current channel 4
|
||||||
|
.no = 4
|
||||||
|
value.unit = uA
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[v1]
|
||||||
|
class = secop_psi.ppms.DriverChannel
|
||||||
|
.description = voltage channel 1
|
||||||
|
.no = 1
|
||||||
|
value.unit = V
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[v2]
|
||||||
|
class = secop_psi.ppms.DriverChannel
|
||||||
|
.description = voltage channel 2
|
||||||
|
.no = 2
|
||||||
|
value.unit = V
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[tv]
|
||||||
|
class = secop_psi.ppms.UserChannel
|
||||||
|
.description = VTI temperature
|
||||||
|
enabled = 0
|
||||||
|
linkenable = ts
|
||||||
|
value.unit = K
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[ts]
|
||||||
|
class = secop_psi.ppms.UserChannel
|
||||||
|
.description = sample temperature
|
||||||
|
enabled = 0
|
||||||
|
linkenable = tv
|
||||||
|
value.unit = K
|
||||||
|
.iodev = ppms
|
||||||
|
|
||||||
|
[ppms]
|
||||||
|
class = secop_psi.ppms.Main
|
||||||
|
.description = the main and poller module
|
||||||
|
.class_id = QD.MULTIVU.PPMS.1
|
||||||
|
#.visibility = 3
|
||||||
|
pollinterval = 2
|
||||||
23
cfg/prep2.cfg
Normal file
23
cfg/prep2.cfg
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
[node ori1.psi.ch]
|
||||||
|
description = ori1 over SEA
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindport = 10767
|
||||||
|
|
||||||
|
[module seaconn]
|
||||||
|
class = secop_psi.sea.SeaClient
|
||||||
|
description = a SEA connection
|
||||||
|
uri = tcp://samenv.psi.ch:8642
|
||||||
|
|
||||||
|
[module tt]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tt.ori1.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module nv]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = nv.ori1.config
|
||||||
|
remote_paths = .
|
||||||
119
cfg/prep5.cfg
Normal file
119
cfg/prep5.cfg
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
[node ma11_dil4_ultrasound_sr.psi.ch]
|
||||||
|
description = ma11_dil4_ultrasound_sr over SEA
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindport = 10767
|
||||||
|
|
||||||
|
[module seaconn]
|
||||||
|
class = secop_psi.sea.SeaClient
|
||||||
|
description = a SEA connection
|
||||||
|
uri = tcp://samenv.psi.ch:8645
|
||||||
|
|
||||||
|
[module tt]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tt.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module nv]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = nv.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module ln2fill]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = ln2fill.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module hefill]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = hefill.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module tcoil]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tcoil.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module table]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = table.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module lnv]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = lnv.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module lpr]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = lpr.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module lambdawatch]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = lambdawatch.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module ts]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = ts.dil4.stick
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module treg]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = treg.dil4.stick
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module tmon]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tmon.dil4.stick
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module sorb]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = sorb.dil4.stick
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module ultrasound]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = ultrasound.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module fn]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = fn.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module mirror]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = mirror.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module f]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = f.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module pars]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = pars.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
65
cfg/prep6.cfg
Normal file
65
cfg/prep6.cfg
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
[node varioxB_vb.psi.ch]
|
||||||
|
description = varioxB_vb over SEA
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindport = 10767
|
||||||
|
|
||||||
|
[module seaconn]
|
||||||
|
class = secop_psi.sea.SeaClient
|
||||||
|
description = a SEA connection
|
||||||
|
uri = tcp://samenv.psi.ch:8646
|
||||||
|
|
||||||
|
[module tvs]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tvs.varioxB.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module tvd]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tvd.varioxB.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module pstat]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = pstat.varioxB.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module pdyn]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = pdyn.varioxB.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module tneck1]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tneck1.varioxB.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module tneck2]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tneck2.varioxB.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module tnvs]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tnvs.varioxB.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module tnvd]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tnvd.varioxB.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module ts]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = ts.vb.stick
|
||||||
|
remote_paths = .
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
import frappy.core as fc
|
|
||||||
|
|
||||||
enabled_modules = [ 'TNMR', 'Razorbill', 'Capacitance', 'NetAnalyser' ] # default
|
|
||||||
#enabled_modules = [ 'Capacitance' ]
|
|
||||||
|
|
||||||
Node('uniaxial_nmr.psi.ch',
|
|
||||||
'The NMR system running the Scout and controlled with TNMR. Also contains a uniaxial cell (Razorbill RP100), a network analyser (ZVL), and a capacitance reader (for more direct measurements of the strain cell\'s status) (TSSOP16 with Arduino Nano V3)',
|
|
||||||
interface='tcp://5000')
|
|
||||||
|
|
||||||
# TNMR
|
|
||||||
if('TNMR' in enabled_modules):
|
|
||||||
Mod('tnmr_otf_module', 'frappy_psi.tnmr.OTFModule.ProgrammedSequence', 'NMR Sequence')
|
|
||||||
|
|
||||||
# Razorbill RP100
|
|
||||||
if('Razorbill' in enabled_modules):
|
|
||||||
Mod('io_razorbill',
|
|
||||||
'frappy_psi.uniaxial_cell.RP100.RP100IO',
|
|
||||||
'communication',
|
|
||||||
uri='serial://COM3?baudrate=9600+bytesize=8+parity=none+stopbits=1')
|
|
||||||
Mod('RP100Node_CH1', 'frappy_psi.uniaxial_cell.RP100.VoltageChannel', 'Razorbill RP100 PSU (CH1)', channel=1, io='io_razorbill')
|
|
||||||
Mod('RP100Node_CH2', 'frappy_psi.uniaxial_cell.RP100.VoltageChannel', 'Razorbill RP100 PSU (CH2)', channel=2, io='io_razorbill')
|
|
||||||
|
|
||||||
# Capacitance readings (TSSOP16 with Arduino Nano V3)
|
|
||||||
if('Capacitance' in enabled_modules):
|
|
||||||
Mod('io_capacitance',
|
|
||||||
'frappy_psi.capacitance_readings.TSSOP16.TSSOP16_IO',
|
|
||||||
'communication',
|
|
||||||
uri='serial://COM5?baudrate=9600+bytesize=8+parity=none+stopbits=1')
|
|
||||||
|
|
||||||
Mod('TSSOP16', 'frappy_psi.capacitance_readings.TSSOP16.TSSOP16', 'Capacitance-reading Arduino (with TSSOP16)', io='io_capacitance')
|
|
||||||
|
|
||||||
# ZVL Network Analyser
|
|
||||||
if('NetAnalyser' in enabled_modules):
|
|
||||||
Mod('ZVLNode', 'frappy_psi.network_analysers.ZVL.ZVLNode.ZVLNode', 'ZVL Network Analyser', analyser_ip=Param('129.129.156.201')) # must be connected on the same ethernet network
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
import frappy.core as fc
|
|
||||||
import serial
|
|
||||||
|
|
||||||
Node('example_RP100.psi.ch', 'A demo system showing how to connect the Razorbill PSU', interface='tcp://5000')
|
|
||||||
|
|
||||||
Mod('io1',
|
|
||||||
'frappy_psi.uniaxial_cell.RP100.RP100IO',
|
|
||||||
'communication',
|
|
||||||
uri='serial://COM10?baudrate=9600+bytesize=8+parity=none+stopbits=1')
|
|
||||||
|
|
||||||
Mod('RP100Node_CH1', 'frappy_psi.uniaxial_cell.RP100.VoltageChannel', 'Razorbill RP100 PSU (CH1)', channel=1, io='io1')
|
|
||||||
Mod('RP100Node_CH2', 'frappy_psi.uniaxial_cell.RP100.VoltageChannel', 'Razorbill RP100 PSU (CH2)', channel=2, io='io1')
|
|
||||||
8
cfg/router.cfg
Normal file
8
cfg/router.cfg
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
[NODE]
|
||||||
|
id = router
|
||||||
|
class = protocol.router.Router
|
||||||
|
description = router node
|
||||||
|
node = localhost:5000
|
||||||
|
|
||||||
|
[INTERFACE]
|
||||||
|
uri=tcp://5002
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
Node('router',
|
|
||||||
'router node',
|
|
||||||
'tcp://5002',
|
|
||||||
cls = 'protocol.router.Router',
|
|
||||||
node = 'localhost:5000',
|
|
||||||
)
|
|
||||||
35
cfg/sea.cfg
Normal file
35
cfg/sea.cfg
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
[node seatest.psi.ch]
|
||||||
|
description = SEA test
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindto = 0.0.0.0
|
||||||
|
bindport = 5002
|
||||||
|
|
||||||
|
[module seaconn]
|
||||||
|
class = secop_psi.sea.SeaClient
|
||||||
|
description = a SEA connection
|
||||||
|
uri = tcp://samenv.psi.ch:8645
|
||||||
|
|
||||||
|
#[module t1]
|
||||||
|
#class = secop_psi.sea.SeaDrivable
|
||||||
|
#iodev = seaconn
|
||||||
|
#json_descr = tt.flamp.config
|
||||||
|
#remote_paths = . t1
|
||||||
|
|
||||||
|
#[module tw1]
|
||||||
|
#class = secop_psi.sea.SeaReadable
|
||||||
|
#iodev = seaconn
|
||||||
|
#json_descr = wall.lampovenwall.addon
|
||||||
|
#remote_paths = tw1
|
||||||
|
|
||||||
|
#[module pv]
|
||||||
|
#class = secop_psi.sea.SeaReadable
|
||||||
|
#iodev = seaconn
|
||||||
|
#json_descr = pv.flamp.config
|
||||||
|
|
||||||
|
#[module mf]
|
||||||
|
#class = secop.Proxy
|
||||||
|
#remote_class = secop_psi.ppms.Field
|
||||||
|
#description = magnetic field
|
||||||
|
#iodev = secnode
|
||||||
7
cfg/sea/current.flamp.config.json
Normal file
7
cfg/sea/current.flamp.config.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
["current", [{"path": "", "type": "float", "kids": 6},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "current send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "i1", "type": "float"},
|
||||||
|
{"path": "i2", "type": "float"},
|
||||||
|
{"path": "i3", "type": "float"},
|
||||||
|
{"path": "i4", "type": "float"}]]
|
||||||
17
cfg/sea/f.ultrasound.addon.json
Normal file
17
cfg/sea/f.ultrasound.addon.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
["f", [{"path": "", "type": "float", "description": "frequency@I,q [Hz]", "kids": 16},
|
||||||
|
{"path": "status_text", "type": "text"},
|
||||||
|
{"path": "status_code", "type": "enum", "enum": {"DISABLED": 0, "IDLE": 100, "WARN": 200, "UNSTABLE": 270, "ERROR": 400}, "description": "current status of the Module"},
|
||||||
|
{"path": "basefreq", "type": "float", "readonly": false, "cmd": "f basefreq", "description": "base frequency [Hz]"},
|
||||||
|
{"path": "nr", "type": "int", "description": "number of records"},
|
||||||
|
{"path": "freq", "type": "float", "readonly": false, "cmd": "f freq", "description": "target frequency [Hz]"},
|
||||||
|
{"path": "amp", "type": "float", "readonly": false, "cmd": "f amp", "description": "amplitude [dBm]"},
|
||||||
|
{"path": "control", "type": "bool", "readonly": false, "cmd": "f control", "description": "control loop on?"},
|
||||||
|
{"path": "time", "type": "float", "readonly": false, "cmd": "f time", "description": "pulse start time [nsec]"},
|
||||||
|
{"path": "size", "type": "float", "readonly": false, "cmd": "f size", "description": "pulse length (starting from time) [nsec]"},
|
||||||
|
{"path": "pulselen", "type": "float", "description": "adjusted pulse length (integer number of periods) [nsec]"},
|
||||||
|
{"path": "maxstep", "type": "float", "readonly": false, "cmd": "f maxstep", "description": "max frequency step [Hz]"},
|
||||||
|
{"path": "minstep", "type": "float", "readonly": false, "cmd": "f minstep", "description": "min frequency step for slope calculation [Hz]"},
|
||||||
|
{"path": "slope", "type": "float", "readonly": false, "cmd": "f slope", "description": "inphase/frequency slope"},
|
||||||
|
{"path": "plot", "type": "bool", "readonly": false, "cmd": "f plot", "description": "create plot images"},
|
||||||
|
{"path": "save", "type": "bool", "readonly": false, "cmd": "f save", "description": "save data"},
|
||||||
|
{"path": "pollinterval", "type": "float", "readonly": false, "cmd": "f pollinterval", "description": "sleeptime between polls"}]]
|
||||||
14
cfg/sea/fn.ultrasound.addon.json
Normal file
14
cfg/sea/fn.ultrasound.addon.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
["fn", [{"path": "", "type": "float", "kids": 13},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "fn send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "remote", "type": "bool", "readonly": false, "cmd": "fn remote"},
|
||||||
|
{"path": "waveform", "type": "text", "readonly": false, "cmd": "fn waveform"},
|
||||||
|
{"path": "freq", "type": "float", "readonly": false, "cmd": "fn freq"},
|
||||||
|
{"path": "volt", "type": "float", "readonly": false, "cmd": "fn volt"},
|
||||||
|
{"path": "offset", "type": "float", "readonly": false, "cmd": "fn offset"},
|
||||||
|
{"path": "width", "type": "float", "readonly": false, "cmd": "fn width"},
|
||||||
|
{"path": "burstfreq", "type": "float", "readonly": false, "cmd": "fn burstfreq"},
|
||||||
|
{"path": "burstvolt", "type": "float", "readonly": false, "cmd": "fn burstvolt"},
|
||||||
|
{"path": "burstcycles", "type": "int", "readonly": false, "cmd": "fn burstcycles"},
|
||||||
|
{"path": "burstperiod", "type": "float", "readonly": false, "cmd": "fn burstperiod"},
|
||||||
|
{"path": "burst", "type": "enum", "enum": {"continuous": 0, "burst": 1, "off": 2}, "readonly": false, "cmd": "fn burst"}]]
|
||||||
17
cfg/sea/hefill.ma11.config.json
Normal file
17
cfg/sea/hefill.ma11.config.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
["hefill", [{"path": "", "type": "enum", "enum": {"watching": 0, "fill": 1, "inactive": 2}, "readonly": false, "cmd": "hefill", "kids": 16},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "hefill send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "state", "type": "text"},
|
||||||
|
{"path": "readlevel", "type": "text", "readonly": false, "cmd": "hefill readlevel", "visibility": 3},
|
||||||
|
{"path": "lowlevel", "type": "float", "readonly": false, "cmd": "hefill lowlevel"},
|
||||||
|
{"path": "highlevel", "type": "float", "readonly": false, "cmd": "hefill highlevel"},
|
||||||
|
{"path": "smooth", "type": "float"},
|
||||||
|
{"path": "minfillminutes", "type": "float", "readonly": false, "cmd": "hefill minfillminutes"},
|
||||||
|
{"path": "maxfillminutes", "type": "float", "readonly": false, "cmd": "hefill maxfillminutes"},
|
||||||
|
{"path": "minholdhours", "type": "float", "readonly": false, "cmd": "hefill minholdhours"},
|
||||||
|
{"path": "maxholdhours", "type": "float", "readonly": false, "cmd": "hefill maxholdhours"},
|
||||||
|
{"path": "tolerance", "type": "float", "readonly": false, "cmd": "hefill tolerance"},
|
||||||
|
{"path": "badreadingminutes", "type": "float", "readonly": false, "cmd": "hefill badreadingminutes"},
|
||||||
|
{"path": "tubecoolingminutes", "type": "float", "readonly": false, "cmd": "hefill tubecoolingminutes"},
|
||||||
|
{"path": "vessellimit", "type": "float", "readonly": false, "cmd": "hefill vessellimit"},
|
||||||
|
{"path": "vext", "type": "float"}]]
|
||||||
7
cfg/sea/lambdawatch.ma11.config.json
Normal file
7
cfg/sea/lambdawatch.ma11.config.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
["lambdawatch", [{"path": "", "type": "float", "kids": 6},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "lambdawatch send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "safefield", "type": "float", "readonly": false, "cmd": "lambdawatch safefield"},
|
||||||
|
{"path": "maxfield", "type": "float", "readonly": false, "cmd": "lambdawatch maxfield"},
|
||||||
|
{"path": "safetemp", "type": "float", "readonly": false, "cmd": "lambdawatch safetemp"},
|
||||||
|
{"path": "coiltemp", "type": "text", "readonly": false, "cmd": "lambdawatch coiltemp"}]]
|
||||||
15
cfg/sea/ln2fill.ma11.config.json
Normal file
15
cfg/sea/ln2fill.ma11.config.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
["ln2fill", [{"path": "", "type": "enum", "enum": {"watching": 0, "fill": 1, "inactive": 2}, "readonly": false, "cmd": "ln2fill", "kids": 14},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "ln2fill send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "state", "type": "text"},
|
||||||
|
{"path": "readlevel", "type": "text", "readonly": false, "cmd": "ln2fill readlevel", "visibility": 3},
|
||||||
|
{"path": "lowlevel", "type": "float", "readonly": false, "cmd": "ln2fill lowlevel"},
|
||||||
|
{"path": "highlevel", "type": "float", "readonly": false, "cmd": "ln2fill highlevel"},
|
||||||
|
{"path": "smooth", "type": "float"},
|
||||||
|
{"path": "minfillminutes", "type": "float", "readonly": false, "cmd": "ln2fill minfillminutes"},
|
||||||
|
{"path": "maxfillminutes", "type": "float", "readonly": false, "cmd": "ln2fill maxfillminutes"},
|
||||||
|
{"path": "minholdhours", "type": "float", "readonly": false, "cmd": "ln2fill minholdhours"},
|
||||||
|
{"path": "maxholdhours", "type": "float", "readonly": false, "cmd": "ln2fill maxholdhours"},
|
||||||
|
{"path": "tolerance", "type": "float", "readonly": false, "cmd": "ln2fill tolerance"},
|
||||||
|
{"path": "badreadingminutes", "type": "float", "readonly": false, "cmd": "ln2fill badreadingminutes"},
|
||||||
|
{"path": "tubecoolingminutes", "type": "float", "readonly": false, "cmd": "ln2fill tubecoolingminutes"}]]
|
||||||
39
cfg/sea/lnv.ma11.config.json
Normal file
39
cfg/sea/lnv.ma11.config.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
["lnv", [{"path": "", "type": "enum", "enum": {"off": 5, "fixed": 0, "controlling": 1, "close": 3, "open": 4}, "readonly": false, "cmd": "lnv", "kids": 12},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "lnv send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "lnv set"},
|
||||||
|
{"path": "flowmax", "type": "float", "readonly": false, "cmd": "lnv flowmax"},
|
||||||
|
{"path": "prop", "type": "float", "readonly": false, "cmd": "lnv prop"},
|
||||||
|
{"path": "int", "type": "float", "readonly": false, "cmd": "lnv int"},
|
||||||
|
{"path": "minpulse", "type": "enum", "enum": {"micro": 1, "short": 10, "long": 100}, "readonly": false, "cmd": "lnv minpulse", "description": "micro: 1 ms, short: 10 ms, long: 100 ms"},
|
||||||
|
{"path": "tolerance", "type": "float", "readonly": false, "cmd": "lnv tolerance"},
|
||||||
|
{"path": "speed", "type": "float"},
|
||||||
|
{"path": "flow", "type": "float"},
|
||||||
|
{"path": "pos", "type": "float", "kids": 2},
|
||||||
|
{"path": "pos/norm", "type": "float", "readonly": false, "cmd": "lnv pos/norm"},
|
||||||
|
{"path": "pos/max", "type": "float", "readonly": false, "cmd": "lnv pos/max"},
|
||||||
|
{"path": "autoflow", "type": "none", "kids": 24},
|
||||||
|
{"path": "autoflow/suspended", "type": "bool", "readonly": false, "cmd": "lnv autoflow/suspended"},
|
||||||
|
{"path": "autoflow/prop", "type": "float", "readonly": false, "cmd": "lnv autoflow/prop"},
|
||||||
|
{"path": "autoflow/flowstd", "type": "float", "readonly": false, "cmd": "lnv autoflow/flowstd"},
|
||||||
|
{"path": "autoflow/flowlim", "type": "float", "readonly": false, "cmd": "lnv autoflow/flowlim"},
|
||||||
|
{"path": "autoflow/smooth", "type": "float", "readonly": false, "cmd": "lnv autoflow/smooth"},
|
||||||
|
{"path": "autoflow/difSize", "type": "float", "readonly": false, "cmd": "lnv autoflow/difSize"},
|
||||||
|
{"path": "autoflow/difRange", "type": "float", "readonly": false, "cmd": "lnv autoflow/difRange"},
|
||||||
|
{"path": "autoflow/flowSize", "type": "float", "readonly": false, "cmd": "lnv autoflow/flowSize"},
|
||||||
|
{"path": "autoflow/convTime", "type": "float", "readonly": false, "cmd": "lnv autoflow/convTime"},
|
||||||
|
{"path": "autoflow/Tmin", "type": "float", "readonly": false, "cmd": "lnv autoflow/Tmin"},
|
||||||
|
{"path": "autoflow/script", "type": "text", "readonly": false, "cmd": "lnv autoflow/script"},
|
||||||
|
{"path": "autoflow/getTemp", "type": "text", "readonly": false, "cmd": "lnv autoflow/getTemp"},
|
||||||
|
{"path": "autoflow/getTset", "type": "text", "readonly": false, "cmd": "lnv autoflow/getTset"},
|
||||||
|
{"path": "autoflow/getFlow", "type": "text", "readonly": false, "cmd": "lnv autoflow/getFlow"},
|
||||||
|
{"path": "autoflow/difBuf", "type": "text"},
|
||||||
|
{"path": "autoflow/flowBuf", "type": "text"},
|
||||||
|
{"path": "autoflow/flowset", "type": "float"},
|
||||||
|
{"path": "autoflow/flowmin", "type": "float"},
|
||||||
|
{"path": "autoflow/flowmax", "type": "float"},
|
||||||
|
{"path": "autoflow/difmin", "type": "float"},
|
||||||
|
{"path": "autoflow/difmax", "type": "float"},
|
||||||
|
{"path": "autoflow/setmin", "type": "float"},
|
||||||
|
{"path": "autoflow/setmax", "type": "float"},
|
||||||
|
{"path": "autoflow/flowtarget", "type": "float"}]]
|
||||||
29
cfg/sea/lpr.ma11.config.json
Normal file
29
cfg/sea/lpr.ma11.config.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
["lpr", [{"path": "", "type": "float", "readonly": false, "cmd": "run lpr", "description": "lpr", "kids": 28},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "lpr send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "is_running", "type": "int", "visibility": 3},
|
||||||
|
{"path": "mode", "type": "enum", "enum": {"off": 0, "on": 1}, "readonly": false, "cmd": "lpr mode"},
|
||||||
|
{"path": "reg", "type": "float"},
|
||||||
|
{"path": "output", "type": "float", "readonly": false, "cmd": "lpr output"},
|
||||||
|
{"path": "ramptime", "type": "float", "readonly": false, "cmd": "lpr ramptime", "description": "time for ramping [sec] deltax = 1 or a factor 10"},
|
||||||
|
{"path": "ramptol", "type": "float", "readonly": false, "cmd": "lpr ramptol", "description": "log of max. deviation when ramping"},
|
||||||
|
{"path": "smoothtime", "type": "float", "readonly": false, "cmd": "lpr smoothtime", "description": "time for smoothing ramp near setpoint"},
|
||||||
|
{"path": "invar", "type": "text", "readonly": false, "cmd": "lpr invar", "visibility": 3},
|
||||||
|
{"path": "outvar", "type": "text", "readonly": false, "cmd": "lpr outvar", "visibility": 3},
|
||||||
|
{"path": "prop", "type": "float", "readonly": false, "cmd": "lpr prop", "description": "smaller means more sensitive. a change of 'prop' on input -> a change of 100 % or a factor 10 on output"},
|
||||||
|
{"path": "int", "type": "float", "readonly": false, "cmd": "lpr int", "description": "integration time (sec)"},
|
||||||
|
{"path": "outmin", "type": "float", "readonly": false, "cmd": "lpr outmin", "description": "output for maximal decrease of input var."},
|
||||||
|
{"path": "outmax", "type": "float", "readonly": false, "cmd": "lpr outmax", "description": "output for maximal increase of input var."},
|
||||||
|
{"path": "inpfunction", "type": "enum", "enum": {"linear": 0, "logarithmic": 1}, "readonly": false, "cmd": "lpr inpfunction"},
|
||||||
|
{"path": "inplinear", "type": "float", "readonly": false, "cmd": "lpr inplinear", "description": "function gets linear below about this value"},
|
||||||
|
{"path": "outfunction", "type": "enum", "enum": {"linear": 0, "exponential": 1}, "readonly": false, "cmd": "lpr outfunction"},
|
||||||
|
{"path": "outlinear", "type": "float", "readonly": false, "cmd": "lpr outlinear", "description": "function gets linear below about this value"},
|
||||||
|
{"path": "precision", "type": "float", "readonly": false, "cmd": "lpr precision"},
|
||||||
|
{"path": "deadband", "type": "float", "readonly": false, "cmd": "lpr deadband"},
|
||||||
|
{"path": "maxdelta", "type": "float", "readonly": false, "cmd": "lpr maxdelta"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "lpr set"},
|
||||||
|
{"path": "target", "type": "float"},
|
||||||
|
{"path": "running", "type": "int"},
|
||||||
|
{"path": "tolerance", "type": "float", "readonly": false, "cmd": "lpr tolerance"},
|
||||||
|
{"path": "maxwait", "type": "float", "readonly": false, "cmd": "lpr maxwait"},
|
||||||
|
{"path": "settle", "type": "float", "readonly": false, "cmd": "lpr settle"}]]
|
||||||
119
cfg/sea/ma11_dil4_ultrasound_sr.cfg
Normal file
119
cfg/sea/ma11_dil4_ultrasound_sr.cfg
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
[node ma11_dil4_ultrasound_sr.psi.ch]
|
||||||
|
description = ma11_dil4_ultrasound_sr over SEA
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindport = 10767
|
||||||
|
|
||||||
|
[module seaconn]
|
||||||
|
class = secop_psi.sea.SeaClient
|
||||||
|
description = a SEA connection
|
||||||
|
uri = tcp://samenv.psi.ch:8645
|
||||||
|
|
||||||
|
[module tt]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tt.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module nv]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = nv.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module ln2fill]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = ln2fill.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module hefill]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = hefill.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module tcoil]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tcoil.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module table]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = table.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module lnv]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = lnv.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module lpr]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = lpr.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module lambdawatch]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = lambdawatch.ma11.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module ts]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = ts.dil4.stick
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module treg]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = treg.dil4.stick
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module tmon]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tmon.dil4.stick
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module sorb]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = sorb.dil4.stick
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module ultrasound]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = ultrasound.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module fn]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = fn.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module mirror]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = mirror.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module f]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = f.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module pars]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = pars.ultrasound.addon
|
||||||
|
remote_paths = .
|
||||||
35
cfg/sea/mf.mb11.config.json
Normal file
35
cfg/sea/mf.mb11.config.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
["mf", [{"path": "", "type": "float", "readonly": false, "cmd": "run mf", "kids": 8},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "mf send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "is_running", "type": "int", "visibility": 3},
|
||||||
|
{"path": "statustext", "type": "text"},
|
||||||
|
{"path": "ramp", "type": "float", "readonly": false, "cmd": "mf ramp"},
|
||||||
|
{"path": "persistent_mode", "type": "enum", "enum": {"off": 0, "on": 1}, "readonly": false, "cmd": "mf persistent_mode", "description": "hidden mode -1: completely off"},
|
||||||
|
{"path": "gen", "type": "none", "kids": 13},
|
||||||
|
{"path": "gen/persistent_delay", "type": "float", "readonly": false, "cmd": "mf gen/persistent_delay", "description": "timeout for going automatically into persistent mode"},
|
||||||
|
{"path": "gen/tolerance", "type": "float", "readonly": false, "cmd": "mf gen/tolerance"},
|
||||||
|
{"path": "gen/wait_switch_on", "type": "float", "readonly": false, "cmd": "mf gen/wait_switch_on"},
|
||||||
|
{"path": "gen/wait_switch_off", "type": "float", "readonly": false, "cmd": "mf gen/wait_switch_off"},
|
||||||
|
{"path": "gen/wait_stable_leads", "type": "float", "readonly": false, "cmd": "mf gen/wait_stable_leads"},
|
||||||
|
{"path": "gen/wait_stable_field", "type": "float", "readonly": false, "cmd": "mf gen/wait_stable_field"},
|
||||||
|
{"path": "gen/expectend", "type": "text"},
|
||||||
|
{"path": "gen/trained_pos", "type": "float", "readonly": false, "cmd": "mf gen/trained_pos"},
|
||||||
|
{"path": "gen/trained_neg", "type": "float", "readonly": false, "cmd": "mf gen/trained_neg"},
|
||||||
|
{"path": "gen/profile", "type": "text", "readonly": false, "cmd": "mf gen/profile", "description": "syntax: <field1>:<ramp1> <field2>:<ramp2> ... (<ramp2> is the ramp limit from <field1> to <field2>)"},
|
||||||
|
{"path": "gen/profile_training", "type": "text", "readonly": false, "cmd": "mf gen/profile_training", "description": "syntax: <field1>:<ramp1> <field2>:<ramp2> ... (<ramp2> is the ramp limit from <field1> to <field2>)"},
|
||||||
|
{"path": "gen/limit", "type": "float", "readonly": false, "cmd": "mf gen/limit"},
|
||||||
|
{"path": "gen/bipolar", "type": "bool", "readonly": false, "cmd": "mf gen/bipolar"},
|
||||||
|
{"path": "ips", "type": "float", "kids": 13},
|
||||||
|
{"path": "ips/ramp_slow", "type": "float", "readonly": false, "cmd": "mf ips/ramp_slow", "description": "ramp rate for coils Tesla/min."},
|
||||||
|
{"path": "ips/ramp_fast", "type": "float", "description": "ramp rate for leads Tesla/min."},
|
||||||
|
{"path": "ips/set_field", "type": "float", "readonly": false, "cmd": "mf ips/set_field"},
|
||||||
|
{"path": "ips/heater", "type": "bool", "readonly": false, "cmd": "mf ips/heater"},
|
||||||
|
{"path": "ips/ramp_state", "type": "enum", "enum": {"hold": 0, "to_zero": 1, "to_set": 2, "clamp": 3}, "readonly": false, "cmd": "mf ips/ramp_state"},
|
||||||
|
{"path": "ips/leads_set", "type": "float", "description": "calculated current in the leads, converted to Tesla"},
|
||||||
|
{"path": "ips/show_internals", "type": "bool", "readonly": false, "cmd": "mf ips/show_internals"},
|
||||||
|
{"path": "ips/leads_meas", "type": "float", "description": "measured current in the leads, converted to Tesla"},
|
||||||
|
{"path": "ips/volt", "type": "float"},
|
||||||
|
{"path": "ips/symode", "type": "text"},
|
||||||
|
{"path": "ips/engineering_password", "type": "text", "readonly": false, "cmd": "mf ips/engineering_password"},
|
||||||
|
{"path": "ips/atob", "type": "float", "readonly": false, "cmd": "mf ips/atob", "description": "Amp/Tesla"},
|
||||||
|
{"path": "ips/inductance", "type": "float", "readonly": false, "cmd": "mf ips/inductance", "description": "henries"}]]
|
||||||
3
cfg/sea/mirror.ultrasound.addon.json
Normal file
3
cfg/sea/mirror.ultrasound.addon.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
["mirror", [{"path": "", "type": "text", "readonly": false, "cmd": "mirror", "kids": 2},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "mirror send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3}]]
|
||||||
51
cfg/sea/nv.ma11.config.json
Normal file
51
cfg/sea/nv.ma11.config.json
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
["nv", [{"path": "", "type": "enum", "enum": {"fixed": 0, "controlled": 1, "automatic": 2, "close": 3, "open": 4}, "readonly": false, "cmd": "nv", "kids": 11},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "nv send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "motstat", "type": "enum", "enum": {"idle": 0, "opening": 1, "closing": 2, "opened": 3, "closed": 4, "no_motor": 5}},
|
||||||
|
{"path": "flow", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "nv set"},
|
||||||
|
{"path": "flowmax", "type": "float", "readonly": false, "cmd": "nv flowmax"},
|
||||||
|
{"path": "flowp", "type": "float"},
|
||||||
|
{"path": "span", "type": "float"},
|
||||||
|
{"path": "ctrl", "type": "none", "kids": 13},
|
||||||
|
{"path": "ctrl/regtext", "type": "text"},
|
||||||
|
{"path": "ctrl/prop_o", "type": "float", "readonly": false, "cmd": "nv ctrl/prop_o", "description": "prop [sec/mbar] when opening. above 4 mbar a 10 times lower value is used"},
|
||||||
|
{"path": "ctrl/prop_c", "type": "float", "readonly": false, "cmd": "nv ctrl/prop_c", "description": "prop [sec/mbar] when closing. above 4 mbar a 10 times lower value is used"},
|
||||||
|
{"path": "ctrl/deriv_o", "type": "float", "readonly": false, "cmd": "nv ctrl/deriv_o", "description": "convergence target time [sec] when opening"},
|
||||||
|
{"path": "ctrl/deriv_c", "type": "float", "readonly": false, "cmd": "nv ctrl/deriv_c", "description": "convergence target time [sec] when closing"},
|
||||||
|
{"path": "ctrl/minpulse_o", "type": "float", "readonly": false, "cmd": "nv ctrl/minpulse_o", "description": "minimum close pulse [sec]"},
|
||||||
|
{"path": "ctrl/minpulse_c", "type": "float", "readonly": false, "cmd": "nv ctrl/minpulse_c", "description": "standard close pulse [sec]"},
|
||||||
|
{"path": "ctrl/hystpulse_o", "type": "float", "readonly": false, "cmd": "nv ctrl/hystpulse_o", "description": "motor pulse to overcome hysteresis when opening"},
|
||||||
|
{"path": "ctrl/hystpulse_c", "type": "float", "readonly": false, "cmd": "nv ctrl/hystpulse_c", "description": "motor pulse to overcome hysteresis when closing"},
|
||||||
|
{"path": "ctrl/tol", "type": "float", "readonly": false, "cmd": "nv ctrl/tol", "description": "valid below 3 mbar"},
|
||||||
|
{"path": "ctrl/tolhigh", "type": "float", "readonly": false, "cmd": "nv ctrl/tolhigh", "description": "valid above 4 mbar"},
|
||||||
|
{"path": "ctrl/openpulse", "type": "float", "readonly": false, "cmd": "nv ctrl/openpulse", "description": "time to open from completely closed to a significant opening"},
|
||||||
|
{"path": "ctrl/adjust_minpulse", "type": "bool", "readonly": false, "cmd": "nv ctrl/adjust_minpulse", "description": "adjust minpulse automatically"},
|
||||||
|
{"path": "autoflow", "type": "none", "kids": 24},
|
||||||
|
{"path": "autoflow/suspended", "type": "bool", "readonly": false, "cmd": "nv autoflow/suspended"},
|
||||||
|
{"path": "autoflow/prop", "type": "float", "readonly": false, "cmd": "nv autoflow/prop"},
|
||||||
|
{"path": "autoflow/flowstd", "type": "float", "readonly": false, "cmd": "nv autoflow/flowstd"},
|
||||||
|
{"path": "autoflow/flowlim", "type": "float", "readonly": false, "cmd": "nv autoflow/flowlim"},
|
||||||
|
{"path": "autoflow/smooth", "type": "float", "readonly": false, "cmd": "nv autoflow/smooth"},
|
||||||
|
{"path": "autoflow/difSize", "type": "float", "readonly": false, "cmd": "nv autoflow/difSize"},
|
||||||
|
{"path": "autoflow/difRange", "type": "float", "readonly": false, "cmd": "nv autoflow/difRange"},
|
||||||
|
{"path": "autoflow/flowSize", "type": "float", "readonly": false, "cmd": "nv autoflow/flowSize"},
|
||||||
|
{"path": "autoflow/convTime", "type": "float", "readonly": false, "cmd": "nv autoflow/convTime"},
|
||||||
|
{"path": "autoflow/Tmin", "type": "float", "readonly": false, "cmd": "nv autoflow/Tmin"},
|
||||||
|
{"path": "autoflow/script", "type": "text", "readonly": false, "cmd": "nv autoflow/script"},
|
||||||
|
{"path": "autoflow/getTemp", "type": "text", "readonly": false, "cmd": "nv autoflow/getTemp"},
|
||||||
|
{"path": "autoflow/getTset", "type": "text", "readonly": false, "cmd": "nv autoflow/getTset"},
|
||||||
|
{"path": "autoflow/getFlow", "type": "text", "readonly": false, "cmd": "nv autoflow/getFlow"},
|
||||||
|
{"path": "autoflow/difBuf", "type": "text"},
|
||||||
|
{"path": "autoflow/flowBuf", "type": "text"},
|
||||||
|
{"path": "autoflow/flowset", "type": "float"},
|
||||||
|
{"path": "autoflow/flowmin", "type": "float"},
|
||||||
|
{"path": "autoflow/flowmax", "type": "float"},
|
||||||
|
{"path": "autoflow/difmin", "type": "float"},
|
||||||
|
{"path": "autoflow/difmax", "type": "float"},
|
||||||
|
{"path": "autoflow/setmin", "type": "float"},
|
||||||
|
{"path": "autoflow/setmax", "type": "float"},
|
||||||
|
{"path": "autoflow/flowtarget", "type": "float"},
|
||||||
|
{"path": "calib", "type": "none", "kids": 2},
|
||||||
|
{"path": "calib/ln_per_min_per_mbar", "type": "float", "readonly": false, "cmd": "nv calib/ln_per_min_per_mbar"},
|
||||||
|
{"path": "calib/mbar_offset", "type": "float", "readonly": false, "cmd": "nv calib/mbar_offset"}]]
|
||||||
51
cfg/sea/nv.ori1.config.json
Normal file
51
cfg/sea/nv.ori1.config.json
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
["nv", [{"path": "", "type": "enum", "enum": {"fixed": 0, "controlled": 1, "automatic": 2, "close": 3, "open": 4}, "readonly": false, "cmd": "nv", "kids": 11},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "nv send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "motstat", "type": "enum", "enum": {"idle": 0, "opening": 1, "closing": 2, "opened": 3, "closed": 4, "no_motor": 5}},
|
||||||
|
{"path": "flow", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "nv set"},
|
||||||
|
{"path": "flowmax", "type": "float", "readonly": false, "cmd": "nv flowmax"},
|
||||||
|
{"path": "flowp", "type": "float"},
|
||||||
|
{"path": "span", "type": "float"},
|
||||||
|
{"path": "ctrl", "type": "none", "kids": 13},
|
||||||
|
{"path": "ctrl/regtext", "type": "text"},
|
||||||
|
{"path": "ctrl/prop_o", "type": "float", "readonly": false, "cmd": "nv ctrl/prop_o", "description": "prop [sec/mbar] when opening. above 4 mbar a 10 times lower value is used"},
|
||||||
|
{"path": "ctrl/prop_c", "type": "float", "readonly": false, "cmd": "nv ctrl/prop_c", "description": "prop [sec/mbar] when closing. above 4 mbar a 10 times lower value is used"},
|
||||||
|
{"path": "ctrl/deriv_o", "type": "float", "readonly": false, "cmd": "nv ctrl/deriv_o", "description": "convergence target time [sec] when opening"},
|
||||||
|
{"path": "ctrl/deriv_c", "type": "float", "readonly": false, "cmd": "nv ctrl/deriv_c", "description": "convergence target time [sec] when closing"},
|
||||||
|
{"path": "ctrl/minpulse_o", "type": "float", "readonly": false, "cmd": "nv ctrl/minpulse_o", "description": "minimum close pulse [sec]"},
|
||||||
|
{"path": "ctrl/minpulse_c", "type": "float", "readonly": false, "cmd": "nv ctrl/minpulse_c", "description": "standard close pulse [sec]"},
|
||||||
|
{"path": "ctrl/hystpulse_o", "type": "float", "readonly": false, "cmd": "nv ctrl/hystpulse_o", "description": "motor pulse to overcome hysteresis when opening"},
|
||||||
|
{"path": "ctrl/hystpulse_c", "type": "float", "readonly": false, "cmd": "nv ctrl/hystpulse_c", "description": "motor pulse to overcome hysteresis when closing"},
|
||||||
|
{"path": "ctrl/tol", "type": "float", "readonly": false, "cmd": "nv ctrl/tol", "description": "valid below 3 mbar"},
|
||||||
|
{"path": "ctrl/tolhigh", "type": "float", "readonly": false, "cmd": "nv ctrl/tolhigh", "description": "valid above 4 mbar"},
|
||||||
|
{"path": "ctrl/openpulse", "type": "float", "readonly": false, "cmd": "nv ctrl/openpulse", "description": "time to open from completely closed to a significant opening"},
|
||||||
|
{"path": "ctrl/adjust_minpulse", "type": "bool", "readonly": false, "cmd": "nv ctrl/adjust_minpulse", "description": "adjust minpulse automatically"},
|
||||||
|
{"path": "autoflow", "type": "none", "kids": 24},
|
||||||
|
{"path": "autoflow/suspended", "type": "bool", "readonly": false, "cmd": "nv autoflow/suspended"},
|
||||||
|
{"path": "autoflow/prop", "type": "float", "readonly": false, "cmd": "nv autoflow/prop"},
|
||||||
|
{"path": "autoflow/flowstd", "type": "float", "readonly": false, "cmd": "nv autoflow/flowstd"},
|
||||||
|
{"path": "autoflow/flowlim", "type": "float", "readonly": false, "cmd": "nv autoflow/flowlim"},
|
||||||
|
{"path": "autoflow/smooth", "type": "float", "readonly": false, "cmd": "nv autoflow/smooth"},
|
||||||
|
{"path": "autoflow/difSize", "type": "float", "readonly": false, "cmd": "nv autoflow/difSize"},
|
||||||
|
{"path": "autoflow/difRange", "type": "float", "readonly": false, "cmd": "nv autoflow/difRange"},
|
||||||
|
{"path": "autoflow/flowSize", "type": "float", "readonly": false, "cmd": "nv autoflow/flowSize"},
|
||||||
|
{"path": "autoflow/convTime", "type": "float", "readonly": false, "cmd": "nv autoflow/convTime"},
|
||||||
|
{"path": "autoflow/Tmin", "type": "float", "readonly": false, "cmd": "nv autoflow/Tmin"},
|
||||||
|
{"path": "autoflow/script", "type": "text", "readonly": false, "cmd": "nv autoflow/script"},
|
||||||
|
{"path": "autoflow/getTemp", "type": "text", "readonly": false, "cmd": "nv autoflow/getTemp"},
|
||||||
|
{"path": "autoflow/getTset", "type": "text", "readonly": false, "cmd": "nv autoflow/getTset"},
|
||||||
|
{"path": "autoflow/getFlow", "type": "text", "readonly": false, "cmd": "nv autoflow/getFlow"},
|
||||||
|
{"path": "autoflow/difBuf", "type": "text"},
|
||||||
|
{"path": "autoflow/flowBuf", "type": "text"},
|
||||||
|
{"path": "autoflow/flowset", "type": "float"},
|
||||||
|
{"path": "autoflow/flowmin", "type": "float"},
|
||||||
|
{"path": "autoflow/flowmax", "type": "float"},
|
||||||
|
{"path": "autoflow/difmin", "type": "float"},
|
||||||
|
{"path": "autoflow/difmax", "type": "float"},
|
||||||
|
{"path": "autoflow/setmin", "type": "float"},
|
||||||
|
{"path": "autoflow/setmax", "type": "float"},
|
||||||
|
{"path": "autoflow/flowtarget", "type": "float"},
|
||||||
|
{"path": "calib", "type": "none", "kids": 2},
|
||||||
|
{"path": "calib/ln_per_min_per_mbar", "type": "float", "readonly": false, "cmd": "nv calib/ln_per_min_per_mbar"},
|
||||||
|
{"path": "calib/mbar_offset", "type": "float", "readonly": false, "cmd": "nv calib/mbar_offset"}]]
|
||||||
23
cfg/sea/ori1.cfg
Normal file
23
cfg/sea/ori1.cfg
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
[node ori1.psi.ch]
|
||||||
|
description = ori1 over SEA
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindport = 10767
|
||||||
|
|
||||||
|
[module seaconn]
|
||||||
|
class = secop_psi.sea.SeaClient
|
||||||
|
description = a SEA connection
|
||||||
|
uri = tcp://samenv.psi.ch:8642
|
||||||
|
|
||||||
|
[module tt]
|
||||||
|
class = secop_psi.sea.SeaDrivable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = tt.ori1.config
|
||||||
|
remote_paths = .
|
||||||
|
|
||||||
|
[module nv]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = nv.ori1.config
|
||||||
|
remote_paths = .
|
||||||
5
cfg/sea/pars.ultrasound.addon.json
Normal file
5
cfg/sea/pars.ultrasound.addon.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
["pars", [{"path": "", "type": "none", "kids": 4},
|
||||||
|
{"path": "timestamp", "type": "text", "readonly": false, "cmd": "pars timestamp", "description": "unix timestamp"},
|
||||||
|
{"path": "temperature", "type": "float", "readonly": false, "cmd": "pars temperature", "description": "T [K]"},
|
||||||
|
{"path": "mf", "type": "float", "readonly": false, "cmd": "pars mf", "description": "field [T]"},
|
||||||
|
{"path": "sr", "type": "float", "readonly": false, "cmd": "pars sr", "description": "rotaion angle [deg]"}]]
|
||||||
6
cfg/sea/pdyn.mb11.config.json
Normal file
6
cfg/sea/pdyn.mb11.config.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
["pdyn", [{"path": "", "type": "float", "kids": 5},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "pdyn send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "pdyn set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "pdyn control"},
|
||||||
|
{"path": "pos", "type": "float"}]]
|
||||||
6
cfg/sea/pdyn.varioxB.config.json
Normal file
6
cfg/sea/pdyn.varioxB.config.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
["pdyn", [{"path": "", "type": "float", "kids": 5},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "pdyn send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "pdyn set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "pdyn control"},
|
||||||
|
{"path": "pos", "type": "float"}]]
|
||||||
6
cfg/sea/pstat.mb11.config.json
Normal file
6
cfg/sea/pstat.mb11.config.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
["pstat", [{"path": "", "type": "float", "kids": 5},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "pstat send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "pstat set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "pstat control"},
|
||||||
|
{"path": "pos", "type": "float"}]]
|
||||||
6
cfg/sea/pstat.varioxB.config.json
Normal file
6
cfg/sea/pstat.varioxB.config.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
["pstat", [{"path": "", "type": "float", "kids": 5},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "pstat send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "pstat set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "pstat control"},
|
||||||
|
{"path": "pos", "type": "float"}]]
|
||||||
6
cfg/sea/pv.flamp.config.json
Normal file
6
cfg/sea/pv.flamp.config.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
["pv", [{"path": "", "type": "float", "kids": 5},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "pv send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "sp1", "type": "text"},
|
||||||
|
{"path": "sp2", "type": "text"},
|
||||||
|
{"path": "sps", "type": "text"}]]
|
||||||
3
cfg/sea/secop.test_secop4.config.json
Normal file
3
cfg/sea/secop.test_secop4.config.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
["secop", [{"path": "", "type": "text", "readonly": false, "cmd": "secop", "kids": 2},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "secop send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3}]]
|
||||||
29
cfg/sea/sorb.dil4.stick.json
Normal file
29
cfg/sea/sorb.dil4.stick.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
["sorb", [{"path": "", "type": "float", "readonly": false, "cmd": "run sorb", "description": "sorb", "kids": 28},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "sorb send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "is_running", "type": "int", "visibility": 3},
|
||||||
|
{"path": "mode", "type": "enum", "enum": {"off": 0, "on": 1}, "readonly": false, "cmd": "sorb mode"},
|
||||||
|
{"path": "reg", "type": "float"},
|
||||||
|
{"path": "output", "type": "float", "readonly": false, "cmd": "sorb output"},
|
||||||
|
{"path": "ramptime", "type": "float", "readonly": false, "cmd": "sorb ramptime", "description": "time for ramping [sec] deltax = 1 or a factor 10"},
|
||||||
|
{"path": "ramptol", "type": "float", "readonly": false, "cmd": "sorb ramptol", "description": "log of max. deviation when ramping"},
|
||||||
|
{"path": "smoothtime", "type": "float", "readonly": false, "cmd": "sorb smoothtime", "description": "time for smoothing ramp near setpoint"},
|
||||||
|
{"path": "invar", "type": "text", "readonly": false, "cmd": "sorb invar", "visibility": 3},
|
||||||
|
{"path": "outvar", "type": "text", "readonly": false, "cmd": "sorb outvar", "visibility": 3},
|
||||||
|
{"path": "prop", "type": "float", "readonly": false, "cmd": "sorb prop", "description": "smaller means more sensitive. a change of 'prop' on input -> a change of 100 % or a factor 10 on output"},
|
||||||
|
{"path": "int", "type": "float", "readonly": false, "cmd": "sorb int", "description": "integration time (sec)"},
|
||||||
|
{"path": "outmin", "type": "float", "readonly": false, "cmd": "sorb outmin", "description": "output for maximal decrease of input var."},
|
||||||
|
{"path": "outmax", "type": "float", "readonly": false, "cmd": "sorb outmax", "description": "output for maximal increase of input var."},
|
||||||
|
{"path": "inpfunction", "type": "enum", "enum": {"linear": 0, "logarithmic": 1}, "readonly": false, "cmd": "sorb inpfunction"},
|
||||||
|
{"path": "inplinear", "type": "float", "readonly": false, "cmd": "sorb inplinear", "description": "function gets linear below about this value"},
|
||||||
|
{"path": "outfunction", "type": "enum", "enum": {"linear": 0, "exponential": 1}, "readonly": false, "cmd": "sorb outfunction"},
|
||||||
|
{"path": "outlinear", "type": "float", "readonly": false, "cmd": "sorb outlinear", "description": "function gets linear below about this value"},
|
||||||
|
{"path": "precision", "type": "float", "readonly": false, "cmd": "sorb precision"},
|
||||||
|
{"path": "deadband", "type": "float", "readonly": false, "cmd": "sorb deadband"},
|
||||||
|
{"path": "maxdelta", "type": "float", "readonly": false, "cmd": "sorb maxdelta"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "sorb set"},
|
||||||
|
{"path": "target", "type": "float"},
|
||||||
|
{"path": "running", "type": "int"},
|
||||||
|
{"path": "tolerance", "type": "float", "readonly": false, "cmd": "sorb tolerance"},
|
||||||
|
{"path": "maxwait", "type": "float", "readonly": false, "cmd": "sorb maxwait"},
|
||||||
|
{"path": "settle", "type": "float", "readonly": false, "cmd": "sorb settle"}]]
|
||||||
18
cfg/sea/table.ma11.config.json
Normal file
18
cfg/sea/table.ma11.config.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
["table", [{"path": "", "type": "none", "kids": 17},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "table send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "fix_tt_set_prop", "type": "bool", "readonly": false, "cmd": "table fix_tt_set_prop"},
|
||||||
|
{"path": "val_tt_set_prop", "type": "float"},
|
||||||
|
{"path": "tbl_tt_set_prop", "type": "text", "readonly": false, "cmd": "table tbl_tt_set_prop", "description": "enter value pair separated with colon T1:par1 T2:par2 ..."},
|
||||||
|
{"path": "fix_tt_set_integ", "type": "bool", "readonly": false, "cmd": "table fix_tt_set_integ"},
|
||||||
|
{"path": "val_tt_set_integ", "type": "float"},
|
||||||
|
{"path": "tbl_tt_set_integ", "type": "text", "readonly": false, "cmd": "table tbl_tt_set_integ", "description": "enter value pair separated with colon T1:par1 T2:par2 ..."},
|
||||||
|
{"path": "fix_tt_dblctrl_int2", "type": "bool", "readonly": false, "cmd": "table fix_tt_dblctrl_int2"},
|
||||||
|
{"path": "val_tt_dblctrl_int2", "type": "float"},
|
||||||
|
{"path": "tbl_tt_dblctrl_int2", "type": "text", "readonly": false, "cmd": "table tbl_tt_dblctrl_int2", "description": "enter value pair separated with colon T1:par1 T2:par2 ..."},
|
||||||
|
{"path": "fix_tt_dblctrl_prop_up", "type": "bool", "readonly": false, "cmd": "table fix_tt_dblctrl_prop_up"},
|
||||||
|
{"path": "val_tt_dblctrl_prop_up", "type": "float"},
|
||||||
|
{"path": "tbl_tt_dblctrl_prop_up", "type": "text", "readonly": false, "cmd": "table tbl_tt_dblctrl_prop_up", "description": "enter value pair separated with colon T1:par1 T2:par2 ..."},
|
||||||
|
{"path": "fix_tt_dblctrl_prop_lo", "type": "bool", "readonly": false, "cmd": "table fix_tt_dblctrl_prop_lo"},
|
||||||
|
{"path": "val_tt_dblctrl_prop_lo", "type": "float"},
|
||||||
|
{"path": "tbl_tt_dblctrl_prop_lo", "type": "text", "readonly": false, "cmd": "table tbl_tt_dblctrl_prop_lo", "description": "enter value pair separated with colon T1:par1 T2:par2 ..."}]]
|
||||||
42
cfg/sea/tcoil.ma11.config.json
Normal file
42
cfg/sea/tcoil.ma11.config.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
["tcoil", [{"path": "", "type": "float", "kids": 11},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tcoil send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "excitation", "type": "float", "readonly": false, "cmd": "tcoil excitation", "visibility": 3},
|
||||||
|
{"path": "td", "type": "float", "visibility": 3, "kids": 3},
|
||||||
|
{"path": "td/enable", "type": "bool", "readonly": false, "cmd": "tcoil td/enable"},
|
||||||
|
{"path": "td/r", "type": "float"},
|
||||||
|
{"path": "td/curve", "type": "text", "readonly": false, "cmd": "tcoil td/curve", "kids": 3},
|
||||||
|
{"path": "td/curve/adjust", "type": "text", "readonly": false, "cmd": "tcoil td/curve/adjust"},
|
||||||
|
{"path": "td/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tcoil td/curve/points"},
|
||||||
|
{"path": "td/curve/cpoints", "type": "floatvarar", "readonly": false, "cmd": "tcoil td/curve/cpoints"},
|
||||||
|
{"path": "tc", "type": "float", "visibility": 3, "kids": 3},
|
||||||
|
{"path": "tc/enable", "type": "bool", "readonly": false, "cmd": "tcoil tc/enable"},
|
||||||
|
{"path": "tc/r", "type": "float"},
|
||||||
|
{"path": "tc/curve", "type": "text", "readonly": false, "cmd": "tcoil tc/curve", "kids": 3},
|
||||||
|
{"path": "tc/curve/adjust", "type": "text", "readonly": false, "cmd": "tcoil tc/curve/adjust"},
|
||||||
|
{"path": "tc/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tcoil tc/curve/points"},
|
||||||
|
{"path": "tc/curve/cpoints", "type": "floatvarar", "readonly": false, "cmd": "tcoil tc/curve/cpoints"},
|
||||||
|
{"path": "tb", "type": "float", "visibility": 3, "kids": 3},
|
||||||
|
{"path": "tb/enable", "type": "bool", "readonly": false, "cmd": "tcoil tb/enable"},
|
||||||
|
{"path": "tb/r", "type": "float"},
|
||||||
|
{"path": "tb/curve", "type": "text", "readonly": false, "cmd": "tcoil tb/curve", "kids": 3},
|
||||||
|
{"path": "tb/curve/adjust", "type": "text", "readonly": false, "cmd": "tcoil tb/curve/adjust"},
|
||||||
|
{"path": "tb/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tcoil tb/curve/points"},
|
||||||
|
{"path": "tb/curve/cpoints", "type": "floatvarar", "readonly": false, "cmd": "tcoil tb/curve/cpoints"},
|
||||||
|
{"path": "ta", "type": "float", "visibility": 3, "kids": 3},
|
||||||
|
{"path": "ta/enable", "type": "bool", "readonly": false, "cmd": "tcoil ta/enable"},
|
||||||
|
{"path": "ta/r", "type": "float"},
|
||||||
|
{"path": "ta/curve", "type": "text", "readonly": false, "cmd": "tcoil ta/curve", "kids": 3},
|
||||||
|
{"path": "ta/curve/adjust", "type": "text", "readonly": false, "cmd": "tcoil ta/curve/adjust"},
|
||||||
|
{"path": "ta/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tcoil ta/curve/points"},
|
||||||
|
{"path": "ta/curve/cpoints", "type": "floatvarar", "readonly": false, "cmd": "tcoil ta/curve/cpoints"},
|
||||||
|
{"path": "ref", "type": "float", "visibility": 3, "kids": 3},
|
||||||
|
{"path": "ref/enable", "type": "bool", "readonly": false, "cmd": "tcoil ref/enable"},
|
||||||
|
{"path": "ref/r", "type": "float"},
|
||||||
|
{"path": "ref/curve", "type": "text", "readonly": false, "cmd": "tcoil ref/curve", "kids": 3},
|
||||||
|
{"path": "ref/curve/adjust", "type": "text", "readonly": false, "cmd": "tcoil ref/curve/adjust"},
|
||||||
|
{"path": "ref/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tcoil ref/curve/points"},
|
||||||
|
{"path": "ref/curve/cpoints", "type": "floatvarar", "readonly": false, "cmd": "tcoil ref/curve/cpoints"},
|
||||||
|
{"path": "ext", "type": "float", "visibility": 3},
|
||||||
|
{"path": "com", "type": "float", "visibility": 3},
|
||||||
|
{"path": "gnd", "type": "float", "visibility": 3}]]
|
||||||
4
cfg/sea/tcoil.mb11.config.json
Normal file
4
cfg/sea/tcoil.mb11.config.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
["tcoil", [{"path": "", "type": "float", "kids": 3},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tcoil send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"}]]
|
||||||
17
cfg/sea/test_secop4.cfg
Normal file
17
cfg/sea/test_secop4.cfg
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[node test_secop4.psi.ch]
|
||||||
|
description = test_secop4 over SEA
|
||||||
|
|
||||||
|
[interface tcp]
|
||||||
|
type = tcp
|
||||||
|
bindport = 10767
|
||||||
|
|
||||||
|
[module seaconn]
|
||||||
|
class = secop_psi.sea.SeaClient
|
||||||
|
description = a SEA connection
|
||||||
|
uri = tcp://samenv.psi.ch:8642
|
||||||
|
|
||||||
|
[module secop]
|
||||||
|
class = secop_psi.sea.SeaReadable
|
||||||
|
iodev = seaconn
|
||||||
|
json_descr = secop.test_secop4.config
|
||||||
|
remote_paths = .
|
||||||
107
cfg/sea/tmon.dil4.stick.json
Normal file
107
cfg/sea/tmon.dil4.stick.json
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
["tmon", [{"path": "", "type": "int", "kids": 12},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tmon send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "autoscan", "type": "bool", "readonly": false, "cmd": "tmon autoscan", "kids": 4},
|
||||||
|
{"path": "autoscan/synchronized", "type": "bool", "readonly": false, "cmd": "tmon autoscan/synchronized"},
|
||||||
|
{"path": "autoscan/interval", "type": "text", "readonly": false, "cmd": "tmon autoscan/interval"},
|
||||||
|
{"path": "autoscan/pause", "type": "text", "readonly": false, "cmd": "tmon autoscan/pause"},
|
||||||
|
{"path": "autoscan/dwell", "type": "text", "readonly": false, "cmd": "tmon autoscan/dwell"},
|
||||||
|
{"path": "sorb", "type": "float", "kids": 14},
|
||||||
|
{"path": "sorb/active", "type": "enum", "enum": {"inactive": 0, "active": 1}, "readonly": false, "cmd": "tmon sorb/active"},
|
||||||
|
{"path": "sorb/autorange", "type": "bool", "readonly": false, "cmd": "tmon sorb/autorange", "description": "autorange (common for all channels)"},
|
||||||
|
{"path": "sorb/range", "type": "text", "readonly": false, "cmd": "tmon sorb/range", "description": "resistance range in Ohm"},
|
||||||
|
{"path": "sorb/range_num", "type": "int"},
|
||||||
|
{"path": "sorb/excitation", "type": "text", "readonly": false, "cmd": "tmon sorb/excitation", "description": "excitation with unit, i.e. 2uV or 3pA"},
|
||||||
|
{"path": "sorb/excitation_num", "type": "int"},
|
||||||
|
{"path": "sorb/excitation_mode", "type": "enum", "enum": {"voltage": 0, "current": 1, "off": 2}},
|
||||||
|
{"path": "sorb/pause", "type": "int", "readonly": false, "cmd": "tmon sorb/pause", "description": "pause time [sec] after channel change"},
|
||||||
|
{"path": "sorb/filter", "type": "int", "readonly": false, "cmd": "tmon sorb/filter", "description": "filter average time [sec]"},
|
||||||
|
{"path": "sorb/dwell", "type": "int", "readonly": false, "cmd": "tmon sorb/dwell", "description": "dwell time [sec]. Total time per channel: pause + filter + dwell"},
|
||||||
|
{"path": "sorb/status", "type": "text"},
|
||||||
|
{"path": "sorb/curve", "type": "text", "readonly": false, "cmd": "tmon sorb/curve", "kids": 1},
|
||||||
|
{"path": "sorb/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tmon sorb/curve/points", "visibility": 3},
|
||||||
|
{"path": "sorb/alarm", "type": "float", "readonly": false, "cmd": "tmon sorb/alarm"},
|
||||||
|
{"path": "sorb/raw", "type": "float"},
|
||||||
|
{"path": "onek", "type": "float", "kids": 14},
|
||||||
|
{"path": "onek/active", "type": "enum", "enum": {"inactive": 0, "active": 1}, "readonly": false, "cmd": "tmon onek/active"},
|
||||||
|
{"path": "onek/autorange", "type": "bool", "readonly": false, "cmd": "tmon onek/autorange", "description": "autorange (common for all channels)"},
|
||||||
|
{"path": "onek/range", "type": "text", "readonly": false, "cmd": "tmon onek/range", "description": "resistance range in Ohm"},
|
||||||
|
{"path": "onek/range_num", "type": "int"},
|
||||||
|
{"path": "onek/excitation", "type": "text", "readonly": false, "cmd": "tmon onek/excitation", "description": "excitation with unit, i.e. 2uV or 3pA"},
|
||||||
|
{"path": "onek/excitation_num", "type": "int"},
|
||||||
|
{"path": "onek/excitation_mode", "type": "enum", "enum": {"voltage": 0, "current": 1, "off": 2}},
|
||||||
|
{"path": "onek/pause", "type": "int", "readonly": false, "cmd": "tmon onek/pause", "description": "pause time [sec] after channel change"},
|
||||||
|
{"path": "onek/filter", "type": "int", "readonly": false, "cmd": "tmon onek/filter", "description": "filter average time [sec]"},
|
||||||
|
{"path": "onek/dwell", "type": "int", "readonly": false, "cmd": "tmon onek/dwell", "description": "dwell time [sec]. Total time per channel: pause + filter + dwell"},
|
||||||
|
{"path": "onek/status", "type": "text"},
|
||||||
|
{"path": "onek/curve", "type": "text", "readonly": false, "cmd": "tmon onek/curve", "kids": 1},
|
||||||
|
{"path": "onek/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tmon onek/curve/points", "visibility": 3},
|
||||||
|
{"path": "onek/alarm", "type": "float", "readonly": false, "cmd": "tmon onek/alarm"},
|
||||||
|
{"path": "onek/raw", "type": "float"},
|
||||||
|
{"path": "stillt", "type": "float", "kids": 14},
|
||||||
|
{"path": "stillt/active", "type": "enum", "enum": {"inactive": 0, "active": 1}, "readonly": false, "cmd": "tmon stillt/active"},
|
||||||
|
{"path": "stillt/autorange", "type": "bool", "readonly": false, "cmd": "tmon stillt/autorange", "description": "autorange (common for all channels)"},
|
||||||
|
{"path": "stillt/range", "type": "text", "readonly": false, "cmd": "tmon stillt/range", "description": "resistance range in Ohm"},
|
||||||
|
{"path": "stillt/range_num", "type": "int"},
|
||||||
|
{"path": "stillt/excitation", "type": "text", "readonly": false, "cmd": "tmon stillt/excitation", "description": "excitation with unit, i.e. 2uV or 3pA"},
|
||||||
|
{"path": "stillt/excitation_num", "type": "int"},
|
||||||
|
{"path": "stillt/excitation_mode", "type": "enum", "enum": {"voltage": 0, "current": 1, "off": 2}},
|
||||||
|
{"path": "stillt/pause", "type": "int", "readonly": false, "cmd": "tmon stillt/pause", "description": "pause time [sec] after channel change"},
|
||||||
|
{"path": "stillt/filter", "type": "int", "readonly": false, "cmd": "tmon stillt/filter", "description": "filter average time [sec]"},
|
||||||
|
{"path": "stillt/dwell", "type": "int", "readonly": false, "cmd": "tmon stillt/dwell", "description": "dwell time [sec]. Total time per channel: pause + filter + dwell"},
|
||||||
|
{"path": "stillt/status", "type": "text"},
|
||||||
|
{"path": "stillt/curve", "type": "text", "readonly": false, "cmd": "tmon stillt/curve", "kids": 1},
|
||||||
|
{"path": "stillt/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tmon stillt/curve/points", "visibility": 3},
|
||||||
|
{"path": "stillt/alarm", "type": "float", "readonly": false, "cmd": "tmon stillt/alarm"},
|
||||||
|
{"path": "stillt/raw", "type": "float"},
|
||||||
|
{"path": "sample", "type": "float", "kids": 14},
|
||||||
|
{"path": "sample/active", "type": "enum", "enum": {"inactive": 0, "active": 1}, "readonly": false, "cmd": "tmon sample/active"},
|
||||||
|
{"path": "sample/autorange", "type": "bool", "readonly": false, "cmd": "tmon sample/autorange", "description": "autorange (common for all channels)"},
|
||||||
|
{"path": "sample/range", "type": "text", "readonly": false, "cmd": "tmon sample/range", "description": "resistance range in Ohm"},
|
||||||
|
{"path": "sample/range_num", "type": "int"},
|
||||||
|
{"path": "sample/excitation", "type": "text", "readonly": false, "cmd": "tmon sample/excitation", "description": "excitation with unit, i.e. 2uV or 3pA"},
|
||||||
|
{"path": "sample/excitation_num", "type": "int"},
|
||||||
|
{"path": "sample/excitation_mode", "type": "enum", "enum": {"voltage": 0, "current": 1, "off": 2}},
|
||||||
|
{"path": "sample/pause", "type": "int", "readonly": false, "cmd": "tmon sample/pause", "description": "pause time [sec] after channel change"},
|
||||||
|
{"path": "sample/filter", "type": "int", "readonly": false, "cmd": "tmon sample/filter", "description": "filter average time [sec]"},
|
||||||
|
{"path": "sample/dwell", "type": "int", "readonly": false, "cmd": "tmon sample/dwell", "description": "dwell time [sec]. Total time per channel: pause + filter + dwell"},
|
||||||
|
{"path": "sample/status", "type": "text"},
|
||||||
|
{"path": "sample/curve", "type": "text", "readonly": false, "cmd": "tmon sample/curve", "kids": 1},
|
||||||
|
{"path": "sample/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tmon sample/curve/points", "visibility": 3},
|
||||||
|
{"path": "sample/alarm", "type": "float", "readonly": false, "cmd": "tmon sample/alarm"},
|
||||||
|
{"path": "sample/raw", "type": "float"},
|
||||||
|
{"path": "samplehtr", "type": "float", "kids": 14},
|
||||||
|
{"path": "samplehtr/active", "type": "enum", "enum": {"inactive": 0, "active": 1}, "readonly": false, "cmd": "tmon samplehtr/active"},
|
||||||
|
{"path": "samplehtr/autorange", "type": "bool", "readonly": false, "cmd": "tmon samplehtr/autorange", "description": "autorange (common for all channels)"},
|
||||||
|
{"path": "samplehtr/range", "type": "text", "readonly": false, "cmd": "tmon samplehtr/range", "description": "resistance range in Ohm"},
|
||||||
|
{"path": "samplehtr/range_num", "type": "int"},
|
||||||
|
{"path": "samplehtr/excitation", "type": "text", "readonly": false, "cmd": "tmon samplehtr/excitation", "description": "excitation with unit, i.e. 2uV or 3pA"},
|
||||||
|
{"path": "samplehtr/excitation_num", "type": "int"},
|
||||||
|
{"path": "samplehtr/excitation_mode", "type": "enum", "enum": {"voltage": 0, "current": 1, "off": 2}},
|
||||||
|
{"path": "samplehtr/pause", "type": "int", "readonly": false, "cmd": "tmon samplehtr/pause", "description": "pause time [sec] after channel change"},
|
||||||
|
{"path": "samplehtr/filter", "type": "int", "readonly": false, "cmd": "tmon samplehtr/filter", "description": "filter average time [sec]"},
|
||||||
|
{"path": "samplehtr/dwell", "type": "int", "readonly": false, "cmd": "tmon samplehtr/dwell", "description": "dwell time [sec]. Total time per channel: pause + filter + dwell"},
|
||||||
|
{"path": "samplehtr/status", "type": "text"},
|
||||||
|
{"path": "samplehtr/curve", "type": "text", "readonly": false, "cmd": "tmon samplehtr/curve", "kids": 1},
|
||||||
|
{"path": "samplehtr/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tmon samplehtr/curve/points", "visibility": 3},
|
||||||
|
{"path": "samplehtr/alarm", "type": "float", "readonly": false, "cmd": "tmon samplehtr/alarm"},
|
||||||
|
{"path": "samplehtr/raw", "type": "float"},
|
||||||
|
{"path": "mix", "type": "float", "kids": 14},
|
||||||
|
{"path": "mix/active", "type": "enum", "enum": {"inactive": 0, "active": 1}, "readonly": false, "cmd": "tmon mix/active"},
|
||||||
|
{"path": "mix/autorange", "type": "bool", "readonly": false, "cmd": "tmon mix/autorange", "description": "autorange (common for all channels)"},
|
||||||
|
{"path": "mix/range", "type": "text", "readonly": false, "cmd": "tmon mix/range", "description": "resistance range in Ohm"},
|
||||||
|
{"path": "mix/range_num", "type": "int"},
|
||||||
|
{"path": "mix/excitation", "type": "text", "readonly": false, "cmd": "tmon mix/excitation", "description": "excitation with unit, i.e. 2uV or 3pA"},
|
||||||
|
{"path": "mix/excitation_num", "type": "int"},
|
||||||
|
{"path": "mix/excitation_mode", "type": "enum", "enum": {"voltage": 0, "current": 1, "off": 2}},
|
||||||
|
{"path": "mix/pause", "type": "int", "readonly": false, "cmd": "tmon mix/pause", "description": "pause time [sec] after channel change"},
|
||||||
|
{"path": "mix/filter", "type": "int", "readonly": false, "cmd": "tmon mix/filter", "description": "filter average time [sec]"},
|
||||||
|
{"path": "mix/dwell", "type": "int", "readonly": false, "cmd": "tmon mix/dwell", "description": "dwell time [sec]. Total time per channel: pause + filter + dwell"},
|
||||||
|
{"path": "mix/status", "type": "text"},
|
||||||
|
{"path": "mix/curve", "type": "text", "readonly": false, "cmd": "tmon mix/curve", "kids": 1},
|
||||||
|
{"path": "mix/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tmon mix/curve/points", "visibility": 3},
|
||||||
|
{"path": "mix/alarm", "type": "float", "readonly": false, "cmd": "tmon mix/alarm"},
|
||||||
|
{"path": "mix/raw", "type": "float"},
|
||||||
|
{"path": "analog2", "type": "float", "readonly": false, "cmd": "tmon analog2"},
|
||||||
|
{"path": "remote", "type": "bool"},
|
||||||
|
{"path": "display", "type": "text", "readonly": false, "cmd": "tmon display"}]]
|
||||||
4
cfg/sea/tneck1.mb11.config.json
Normal file
4
cfg/sea/tneck1.mb11.config.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
["tneck1", [{"path": "", "type": "float", "kids": 3},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tneck1 send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"}]]
|
||||||
8
cfg/sea/tneck1.varioxB.config.json
Normal file
8
cfg/sea/tneck1.varioxB.config.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
["tneck1", [{"path": "", "type": "float", "kids": 7},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tneck1 send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "tneck1 set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "tneck1 control"},
|
||||||
|
{"path": "htr", "type": "float"},
|
||||||
|
{"path": "pow", "type": "float"}]]
|
||||||
4
cfg/sea/tneck2.mb11.config.json
Normal file
4
cfg/sea/tneck2.mb11.config.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
["tneck2", [{"path": "", "type": "float", "kids": 3},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tneck2 send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"}]]
|
||||||
8
cfg/sea/tneck2.varioxB.config.json
Normal file
8
cfg/sea/tneck2.varioxB.config.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
["tneck2", [{"path": "", "type": "float", "kids": 7},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tneck2 send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "tneck2 set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "tneck2 control"},
|
||||||
|
{"path": "htr", "type": "float"},
|
||||||
|
{"path": "pow", "type": "float"}]]
|
||||||
4
cfg/sea/tnvd.mb11.config.json
Normal file
4
cfg/sea/tnvd.mb11.config.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
["tnvd", [{"path": "", "type": "float", "kids": 3},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tnvd send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"}]]
|
||||||
8
cfg/sea/tnvd.varioxB.config.json
Normal file
8
cfg/sea/tnvd.varioxB.config.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
["tnvd", [{"path": "", "type": "float", "kids": 7},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tnvd send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "tnvd set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "tnvd control"},
|
||||||
|
{"path": "htr", "type": "float"},
|
||||||
|
{"path": "pow", "type": "float"}]]
|
||||||
4
cfg/sea/tnvs.mb11.config.json
Normal file
4
cfg/sea/tnvs.mb11.config.json
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
["tnvs", [{"path": "", "type": "float", "kids": 3},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tnvs send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"}]]
|
||||||
8
cfg/sea/tnvs.varioxB.config.json
Normal file
8
cfg/sea/tnvs.varioxB.config.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
["tnvs", [{"path": "", "type": "float", "kids": 7},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tnvs send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "tnvs set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "tnvs control"},
|
||||||
|
{"path": "htr", "type": "float"},
|
||||||
|
{"path": "pow", "type": "float"}]]
|
||||||
78
cfg/sea/treg.dil4.stick.json
Normal file
78
cfg/sea/treg.dil4.stick.json
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
["treg", [{"path": "", "type": "int", "kids": 10},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "treg send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "autoscan", "type": "bool", "readonly": false, "cmd": "treg autoscan", "kids": 4},
|
||||||
|
{"path": "autoscan/synchronized", "type": "bool", "readonly": false, "cmd": "treg autoscan/synchronized"},
|
||||||
|
{"path": "autoscan/interval", "type": "text", "readonly": false, "cmd": "treg autoscan/interval"},
|
||||||
|
{"path": "autoscan/pause", "type": "text", "readonly": false, "cmd": "treg autoscan/pause"},
|
||||||
|
{"path": "autoscan/dwell", "type": "text", "readonly": false, "cmd": "treg autoscan/dwell"},
|
||||||
|
{"path": "sample", "type": "float", "kids": 14},
|
||||||
|
{"path": "sample/active", "type": "enum", "enum": {"inactive": 0, "active": 1}, "readonly": false, "cmd": "treg sample/active"},
|
||||||
|
{"path": "sample/autorange", "type": "bool", "readonly": false, "cmd": "treg sample/autorange", "description": "autorange (common for all channels)"},
|
||||||
|
{"path": "sample/range", "type": "text", "readonly": false, "cmd": "treg sample/range", "description": "resistance range in Ohm"},
|
||||||
|
{"path": "sample/range_num", "type": "int"},
|
||||||
|
{"path": "sample/excitation", "type": "text", "readonly": false, "cmd": "treg sample/excitation", "description": "excitation with unit, i.e. 2uV or 3pA"},
|
||||||
|
{"path": "sample/excitation_num", "type": "int"},
|
||||||
|
{"path": "sample/excitation_mode", "type": "enum", "enum": {"voltage": 0, "current": 1, "off": 2}},
|
||||||
|
{"path": "sample/pause", "type": "int", "readonly": false, "cmd": "treg sample/pause", "description": "pause time [sec] after channel change"},
|
||||||
|
{"path": "sample/filter", "type": "int", "readonly": false, "cmd": "treg sample/filter", "description": "filter average time [sec]"},
|
||||||
|
{"path": "sample/dwell", "type": "int", "readonly": false, "cmd": "treg sample/dwell", "description": "dwell time [sec]. Total time per channel: pause + filter + dwell"},
|
||||||
|
{"path": "sample/status", "type": "text"},
|
||||||
|
{"path": "sample/curve", "type": "text", "readonly": false, "cmd": "treg sample/curve", "kids": 1},
|
||||||
|
{"path": "sample/curve/points", "type": "floatvarar", "readonly": false, "cmd": "treg sample/curve/points", "visibility": 3},
|
||||||
|
{"path": "sample/alarm", "type": "float", "readonly": false, "cmd": "treg sample/alarm"},
|
||||||
|
{"path": "sample/raw", "type": "float"},
|
||||||
|
{"path": "mix", "type": "float", "kids": 14},
|
||||||
|
{"path": "mix/active", "type": "enum", "enum": {"inactive": 0, "active": 1}, "readonly": false, "cmd": "treg mix/active"},
|
||||||
|
{"path": "mix/autorange", "type": "bool", "readonly": false, "cmd": "treg mix/autorange", "description": "autorange (common for all channels)"},
|
||||||
|
{"path": "mix/range", "type": "text", "readonly": false, "cmd": "treg mix/range", "description": "resistance range in Ohm"},
|
||||||
|
{"path": "mix/range_num", "type": "int"},
|
||||||
|
{"path": "mix/excitation", "type": "text", "readonly": false, "cmd": "treg mix/excitation", "description": "excitation with unit, i.e. 2uV or 3pA"},
|
||||||
|
{"path": "mix/excitation_num", "type": "int"},
|
||||||
|
{"path": "mix/excitation_mode", "type": "enum", "enum": {"voltage": 0, "current": 1, "off": 2}},
|
||||||
|
{"path": "mix/pause", "type": "int", "readonly": false, "cmd": "treg mix/pause", "description": "pause time [sec] after channel change"},
|
||||||
|
{"path": "mix/filter", "type": "int", "readonly": false, "cmd": "treg mix/filter", "description": "filter average time [sec]"},
|
||||||
|
{"path": "mix/dwell", "type": "int", "readonly": false, "cmd": "treg mix/dwell", "description": "dwell time [sec]. Total time per channel: pause + filter + dwell"},
|
||||||
|
{"path": "mix/status", "type": "text"},
|
||||||
|
{"path": "mix/curve", "type": "text", "readonly": false, "cmd": "treg mix/curve", "kids": 1},
|
||||||
|
{"path": "mix/curve/points", "type": "floatvarar", "readonly": false, "cmd": "treg mix/curve/points", "visibility": 3},
|
||||||
|
{"path": "mix/alarm", "type": "float", "readonly": false, "cmd": "treg mix/alarm"},
|
||||||
|
{"path": "mix/raw", "type": "float"},
|
||||||
|
{"path": "samplehtr", "type": "float", "kids": 14},
|
||||||
|
{"path": "samplehtr/active", "type": "enum", "enum": {"inactive": 0, "active": 1}, "readonly": false, "cmd": "treg samplehtr/active"},
|
||||||
|
{"path": "samplehtr/autorange", "type": "bool", "readonly": false, "cmd": "treg samplehtr/autorange", "description": "autorange (common for all channels)"},
|
||||||
|
{"path": "samplehtr/range", "type": "text", "readonly": false, "cmd": "treg samplehtr/range", "description": "resistance range in Ohm"},
|
||||||
|
{"path": "samplehtr/range_num", "type": "int"},
|
||||||
|
{"path": "samplehtr/excitation", "type": "text", "readonly": false, "cmd": "treg samplehtr/excitation", "description": "excitation with unit, i.e. 2uV or 3pA"},
|
||||||
|
{"path": "samplehtr/excitation_num", "type": "int"},
|
||||||
|
{"path": "samplehtr/excitation_mode", "type": "enum", "enum": {"voltage": 0, "current": 1, "off": 2}},
|
||||||
|
{"path": "samplehtr/pause", "type": "int", "readonly": false, "cmd": "treg samplehtr/pause", "description": "pause time [sec] after channel change"},
|
||||||
|
{"path": "samplehtr/filter", "type": "int", "readonly": false, "cmd": "treg samplehtr/filter", "description": "filter average time [sec]"},
|
||||||
|
{"path": "samplehtr/dwell", "type": "int", "readonly": false, "cmd": "treg samplehtr/dwell", "description": "dwell time [sec]. Total time per channel: pause + filter + dwell"},
|
||||||
|
{"path": "samplehtr/status", "type": "text"},
|
||||||
|
{"path": "samplehtr/curve", "type": "text", "readonly": false, "cmd": "treg samplehtr/curve", "kids": 1},
|
||||||
|
{"path": "samplehtr/curve/points", "type": "floatvarar", "readonly": false, "cmd": "treg samplehtr/curve/points", "visibility": 3},
|
||||||
|
{"path": "samplehtr/alarm", "type": "float", "readonly": false, "cmd": "treg samplehtr/alarm"},
|
||||||
|
{"path": "samplehtr/raw", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "treg set", "kids": 18},
|
||||||
|
{"path": "set/mode", "type": "enum", "enum": {"disabled": -1, "off": 0, "controlling": 1, "manual": 2}, "readonly": false, "cmd": "treg set/mode"},
|
||||||
|
{"path": "set/reg", "type": "float"},
|
||||||
|
{"path": "set/ramp", "type": "float", "readonly": false, "cmd": "treg set/ramp", "description": "maximum ramp in K/min (0: ramp off)"},
|
||||||
|
{"path": "set/wramp", "type": "float", "readonly": false, "cmd": "treg set/wramp"},
|
||||||
|
{"path": "set/smooth", "type": "float", "readonly": false, "cmd": "treg set/smooth", "description": "smooth time (minutes)"},
|
||||||
|
{"path": "set/channel", "type": "text", "readonly": false, "cmd": "treg set/channel"},
|
||||||
|
{"path": "set/limit", "type": "float", "readonly": false, "cmd": "treg set/limit"},
|
||||||
|
{"path": "set/resist", "type": "float", "readonly": false, "cmd": "treg set/resist"},
|
||||||
|
{"path": "set/maxheater", "type": "text", "readonly": false, "cmd": "treg set/maxheater", "description": "maximum heater limit, units should be given without space: W, mW, A, mA"},
|
||||||
|
{"path": "set/linearpower", "type": "float", "readonly": false, "cmd": "treg set/linearpower", "description": "when not 0, it is the maximum effective power, and the power is linear to the heater output"},
|
||||||
|
{"path": "set/maxpowerlim", "type": "float", "description": "the maximum power limit (before any booster or converter)"},
|
||||||
|
{"path": "set/maxpower", "type": "float", "readonly": false, "cmd": "treg set/maxpower", "description": "maximum power [W]"},
|
||||||
|
{"path": "set/maxcurrent", "type": "float", "description": "the maximum current before any booster or converter"},
|
||||||
|
{"path": "set/manualpower", "type": "float", "readonly": false, "cmd": "treg set/manualpower"},
|
||||||
|
{"path": "set/power", "type": "float"},
|
||||||
|
{"path": "set/prop", "type": "float", "readonly": false, "cmd": "treg set/prop", "description": "bigger means more gain"},
|
||||||
|
{"path": "set/integ", "type": "float", "readonly": false, "cmd": "treg set/integ", "description": "[sec] bigger means slower"},
|
||||||
|
{"path": "set/deriv", "type": "float", "readonly": false, "cmd": "treg set/deriv"},
|
||||||
|
{"path": "analog2", "type": "float", "readonly": false, "cmd": "treg analog2"},
|
||||||
|
{"path": "remote", "type": "bool"},
|
||||||
|
{"path": "display", "type": "text", "readonly": false, "cmd": "treg display"}]]
|
||||||
58
cfg/sea/ts.dil4.stick.json
Normal file
58
cfg/sea/ts.dil4.stick.json
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
["ts", [{"path": "", "type": "float", "readonly": false, "cmd": "run ts", "description": "ts", "kids": 19},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "ts send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "is_running", "type": "int", "visibility": 3},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "ts set", "visibility": 3},
|
||||||
|
{"path": "target", "type": "float"},
|
||||||
|
{"path": "running", "type": "int"},
|
||||||
|
{"path": "tolerance", "type": "float", "readonly": false, "cmd": "ts tolerance"},
|
||||||
|
{"path": "maxwait", "type": "float", "readonly": false, "cmd": "ts maxwait"},
|
||||||
|
{"path": "settle", "type": "float", "readonly": false, "cmd": "ts settle"},
|
||||||
|
{"path": "log", "type": "text", "readonly": false, "cmd": "ts log", "visibility": 3, "kids": 4},
|
||||||
|
{"path": "log/mean", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/m2", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/stddev", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/n", "type": "float", "visibility": 3},
|
||||||
|
{"path": "ramp", "type": "float", "readonly": false, "cmd": "ts ramp", "description": "ramp [K/min]"},
|
||||||
|
{"path": "heaterselect", "type": "enum", "enum": {"sample": 0, "mix": 1, "mix(temporarely)": 2}, "readonly": false, "cmd": "ts heaterselect"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"off": 0, "sample": 6, "mix": 5}, "readonly": false, "cmd": "ts control", "description": "click off to reload list"},
|
||||||
|
{"path": "heatermode", "type": "enum", "enum": {"disabled": -1, "off": 0, "on": 1}, "readonly": false, "cmd": "ts heatermode"},
|
||||||
|
{"path": "heaterrange", "type": "enum", "enum": {"2uW": 1, "20uW": 2, "200uW": 3, "2mW": 4, "20mW": 5}, "readonly": false, "cmd": "ts heaterrange"},
|
||||||
|
{"path": "autoheater", "type": "bool", "readonly": false, "cmd": "ts autoheater", "description": "automatic heater range", "kids": 12},
|
||||||
|
{"path": "autoheater/wlp0", "type": "float", "readonly": false, "cmd": "ts autoheater/wlp0", "description": "weak link base temperature (used for auto heater)", "visibility": 3},
|
||||||
|
{"path": "autoheater/wlp1", "type": "float", "readonly": false, "cmd": "ts autoheater/wlp1", "description": "weak link temperature at 1 uW (used for auto heater)", "visibility": 3},
|
||||||
|
{"path": "autoheater/wlp2", "type": "float", "readonly": false, "cmd": "ts autoheater/wlp2", "description": "weak link temperature at 10 uW (used for auto heater)", "visibility": 3},
|
||||||
|
{"path": "autoheater/wlp3", "type": "float", "readonly": false, "cmd": "ts autoheater/wlp3", "description": "weak link temperature at 100 uW (used for auto heater)", "visibility": 3},
|
||||||
|
{"path": "autoheater/wlp4", "type": "float", "readonly": false, "cmd": "ts autoheater/wlp4", "description": "weak link temperature at 1 mW (used for auto heater)", "visibility": 3},
|
||||||
|
{"path": "autoheater/mxp0", "type": "float", "readonly": false, "cmd": "ts autoheater/mxp0", "description": "weak link base temperature (used for auto heater)"},
|
||||||
|
{"path": "autoheater/mxp1", "type": "float", "readonly": false, "cmd": "ts autoheater/mxp1", "description": "mix.ch. temperature at 1 uW (used for auto heater)"},
|
||||||
|
{"path": "autoheater/mxp2", "type": "float", "readonly": false, "cmd": "ts autoheater/mxp2", "description": "mix.ch. temperature at 10 uW (used for auto heater)"},
|
||||||
|
{"path": "autoheater/mxp3", "type": "float", "readonly": false, "cmd": "ts autoheater/mxp3", "description": "mix.ch. temperature at 100 uW (used for auto heater)"},
|
||||||
|
{"path": "autoheater/mxp4", "type": "float", "readonly": false, "cmd": "ts autoheater/mxp4", "description": "mix.ch. temperature at 1 mW (used for auto heater)"},
|
||||||
|
{"path": "autoheater/switchdown", "type": "float", "readonly": false, "cmd": "ts autoheater/switchdown", "description": "percentage for auto heater switch down"},
|
||||||
|
{"path": "autoheater/switchup", "type": "float", "readonly": false, "cmd": "ts autoheater/switchup", "description": "when the calculated power is above this percentage, use higher range"},
|
||||||
|
{"path": "autoprop", "type": "bool", "readonly": false, "cmd": "ts autoprop", "description": "change prop value depending on actual power", "kids": 2},
|
||||||
|
{"path": "autoprop/prop", "type": "float", "readonly": false, "cmd": "ts autoprop/prop", "description": "prop value (maximum prop value when autheater is on)"},
|
||||||
|
{"path": "autoprop/integ", "type": "float", "readonly": false, "cmd": "ts autoprop/integ", "description": "integral value [sec], deriv is set to 0 on change"},
|
||||||
|
{"path": "instructions", "type": "text"},
|
||||||
|
{"path": "auto", "type": "enum", "enum": {"off": 0, "cool_vti": 1, "pipe_pump": 11, "pipes_ready": 12, "ready_for_sorbpump": 2, "sorb_pump": 3, "condense": 4, "circulate": 5, "remove_only": 60, "remove_and_warmup": 62, "remove_and_condense": 61, "remove_and_sorbpump": 63, "finished": 7}, "readonly": false, "cmd": "ts auto", "kids": 20},
|
||||||
|
{"path": "auto/usetrap", "type": "enum", "enum": {"trap_A": 0, "trap_B": 1}, "readonly": false, "cmd": "ts auto/usetrap"},
|
||||||
|
{"path": "auto/hasturbo", "type": "bool"},
|
||||||
|
{"path": "auto/pipes_pumped", "type": "bool", "readonly": false, "cmd": "ts auto/pipes_pumped"},
|
||||||
|
{"path": "auto/cool_crit", "type": "text", "readonly": false, "cmd": "ts auto/cool_crit", "description": "criterium for transition to ready_for_sorbpump"},
|
||||||
|
{"path": "auto/pumptime1", "type": "float", "readonly": false, "cmd": "ts auto/pumptime1", "description": "pump time [sec] while sorb at 40"},
|
||||||
|
{"path": "auto/pumptime2", "type": "float", "readonly": false, "cmd": "ts auto/pumptime2", "description": "pump time [sec] while sorb cools down"},
|
||||||
|
{"path": "auto/condensep", "type": "float", "readonly": false, "cmd": "ts auto/condensep"},
|
||||||
|
{"path": "auto/dumptarget", "type": "float", "readonly": false, "cmd": "ts auto/dumptarget"},
|
||||||
|
{"path": "auto/condenseflow", "type": "float", "readonly": false, "cmd": "ts auto/condenseflow", "description": "VTI flow for condensing and min. flow for cooling"},
|
||||||
|
{"path": "auto/circulateflow", "type": "float", "readonly": false, "cmd": "ts auto/circulateflow", "description": "VTI flow for circulating (may be changed during circulation)"},
|
||||||
|
{"path": "auto/onekstate", "type": "enum", "enum": {"normal": 0, "fill": 1, "optimize": 2}, "readonly": false, "cmd": "ts auto/onekstate"},
|
||||||
|
{"path": "auto/oneklimit", "type": "float", "readonly": false, "cmd": "ts auto/oneklimit"},
|
||||||
|
{"path": "auto/minflow", "type": "float", "readonly": false, "cmd": "ts auto/minflow", "description": "minimum VTI flow (optimize stops at this value)"},
|
||||||
|
{"path": "auto/p1low", "type": "float", "readonly": false, "cmd": "ts auto/p1low", "description": "p1 value indicating a negligible mixture amount"},
|
||||||
|
{"path": "auto/p2low", "type": "float", "readonly": false, "cmd": "ts auto/p2low", "description": "p2 value indicating a good vacuum"},
|
||||||
|
{"path": "auto/warmup_t", "type": "float", "readonly": false, "cmd": "ts auto/warmup_t", "description": "VTI temperature to reach when remove_and_warmup"},
|
||||||
|
{"path": "auto/vti_t", "type": "float", "readonly": false, "cmd": "ts auto/vti_t", "description": "VTI temperature to reach when remove_only"},
|
||||||
|
{"path": "auto/xgas", "type": "enum", "enum": {"pump": 0, "add": 1, "empty": 2}, "readonly": false, "cmd": "ts auto/xgas"},
|
||||||
|
{"path": "auto/xgas_pulse", "type": "float", "readonly": false, "cmd": "ts auto/xgas_pulse", "description": "opening time for xgas capillary [sec]"},
|
||||||
|
{"path": "auto/removephase", "type": "enum", "enum": {"raw_remove": 0, "wait_p1_low": 1, "wait_v6_open": 2, "wait_a_little": 3, "wait_v6_closed": 4, "wait_t_warmup": 5}, "readonly": false, "cmd": "ts auto/removephase"}]]
|
||||||
8
cfg/sea/ts.mb11.config.json
Normal file
8
cfg/sea/ts.mb11.config.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
["ts", [{"path": "", "type": "float", "kids": 7},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "ts send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "ts set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "ts control"},
|
||||||
|
{"path": "htr", "type": "float"},
|
||||||
|
{"path": "pow", "type": "float"}]]
|
||||||
8
cfg/sea/ts.vb.stick.json
Normal file
8
cfg/sea/ts.vb.stick.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
["ts", [{"path": "", "type": "float", "kids": 7},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "ts send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "ts set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "ts control"},
|
||||||
|
{"path": "htr", "type": "float"},
|
||||||
|
{"path": "pow", "type": "float"}]]
|
||||||
58
cfg/sea/tt.flamp.config.json
Normal file
58
cfg/sea/tt.flamp.config.json
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
["tt", [{"path": "", "type": "float", "readonly": false, "cmd": "run tt", "description": "tt", "kids": 37},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tt send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "is_running", "type": "int", "visibility": 3},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "tt set"},
|
||||||
|
{"path": "target", "type": "float"},
|
||||||
|
{"path": "running", "type": "int"},
|
||||||
|
{"path": "tolerance", "type": "float", "readonly": false, "cmd": "tt tolerance"},
|
||||||
|
{"path": "maxwait", "type": "float", "readonly": false, "cmd": "tt maxwait"},
|
||||||
|
{"path": "settle", "type": "float", "readonly": false, "cmd": "tt settle"},
|
||||||
|
{"path": "log", "type": "text", "readonly": false, "cmd": "tt log", "visibility": 3, "kids": 4},
|
||||||
|
{"path": "log/mean", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/m2", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/stddev", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/n", "type": "float", "visibility": 3},
|
||||||
|
{"path": "t1", "type": "float", "kids": 3},
|
||||||
|
{"path": "t1/raw", "type": "float"},
|
||||||
|
{"path": "t1/curve", "type": "text", "readonly": false, "cmd": "tt t1/curve", "kids": 1},
|
||||||
|
{"path": "t1/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt t1/curve/points"},
|
||||||
|
{"path": "t1/valid", "type": "bool"},
|
||||||
|
{"path": "t2", "type": "float", "kids": 3},
|
||||||
|
{"path": "t2/raw", "type": "float"},
|
||||||
|
{"path": "t2/curve", "type": "text", "readonly": false, "cmd": "tt t2/curve", "kids": 1},
|
||||||
|
{"path": "t2/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt t2/curve/points"},
|
||||||
|
{"path": "t2/valid", "type": "bool"},
|
||||||
|
{"path": "t3", "type": "float", "kids": 3},
|
||||||
|
{"path": "t3/raw", "type": "float"},
|
||||||
|
{"path": "t3/curve", "type": "text", "readonly": false, "cmd": "tt t3/curve", "kids": 1},
|
||||||
|
{"path": "t3/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt t3/curve/points"},
|
||||||
|
{"path": "t3/valid", "type": "bool"},
|
||||||
|
{"path": "t4", "type": "float", "kids": 3},
|
||||||
|
{"path": "t4/raw", "type": "float"},
|
||||||
|
{"path": "t4/curve", "type": "text", "readonly": false, "cmd": "tt t4/curve", "kids": 1},
|
||||||
|
{"path": "t4/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt t4/curve/points"},
|
||||||
|
{"path": "t4/valid", "type": "bool"},
|
||||||
|
{"path": "tref", "type": "float"},
|
||||||
|
{"path": "tout", "type": "float"},
|
||||||
|
{"path": "ctrlmode", "type": "enum", "enum": {"ok": 0, "off": 1, "illegal_channel": 2, "no_sensor": 3, "no_flow": 4, "above_alarm": 5, "bad_vacuum": 6}, "readonly": false, "cmd": "tt ctrlmode"},
|
||||||
|
{"path": "ramp", "type": "float", "readonly": false, "cmd": "tt ramp"},
|
||||||
|
{"path": "smooth", "type": "float", "readonly": false, "cmd": "tt smooth"},
|
||||||
|
{"path": "prop", "type": "float", "readonly": false, "cmd": "tt prop"},
|
||||||
|
{"path": "int", "type": "float", "readonly": false, "cmd": "tt int"},
|
||||||
|
{"path": "powerset", "type": "float", "readonly": false, "cmd": "tt powerset"},
|
||||||
|
{"path": "power", "type": "float"},
|
||||||
|
{"path": "resist", "type": "float"},
|
||||||
|
{"path": "maxpower", "type": "float", "readonly": false, "cmd": "tt maxpower"},
|
||||||
|
{"path": "maxheater", "type": "float", "readonly": false, "cmd": "tt maxheater"},
|
||||||
|
{"path": "output", "type": "float", "readonly": false, "cmd": "tt output"},
|
||||||
|
{"path": "manualpower", "type": "bool", "readonly": false, "cmd": "tt manualpower"},
|
||||||
|
{"path": "ctrlchan", "type": "int", "readonly": false, "cmd": "tt ctrlchan"},
|
||||||
|
{"path": "interlock_state", "type": "enum", "enum": {"ok": 0, "no_waterflow": 1, "no_vacuum": 2, "no_water_no_vacuum": 3}},
|
||||||
|
{"path": "interlock_mask", "type": "enum", "enum": {"no_check": 0, "check_water_only": 1, "check_vacuum_only": 2, "check_all": 3}, "readonly": false, "cmd": "tt interlock_mask"},
|
||||||
|
{"path": "sramp", "type": "float"},
|
||||||
|
{"path": "slope", "type": "float"},
|
||||||
|
{"path": "v_htr", "type": "float"},
|
||||||
|
{"path": "i_htr", "type": "float"},
|
||||||
|
{"path": "htr", "type": "float"},
|
||||||
|
{"path": "powerprop", "type": "float"}]]
|
||||||
71
cfg/sea/tt.ma11.config.json
Normal file
71
cfg/sea/tt.ma11.config.json
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
["tt", [{"path": "", "type": "float", "readonly": false, "cmd": "run tt", "description": "tt", "kids": 19},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tt send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "is_running", "type": "int", "visibility": 3},
|
||||||
|
{"path": "target", "type": "float"},
|
||||||
|
{"path": "running", "type": "int"},
|
||||||
|
{"path": "tolerance", "type": "float", "readonly": false, "cmd": "tt tolerance"},
|
||||||
|
{"path": "maxwait", "type": "float", "readonly": false, "cmd": "tt maxwait"},
|
||||||
|
{"path": "settle", "type": "float", "readonly": false, "cmd": "tt settle"},
|
||||||
|
{"path": "log", "type": "text", "readonly": false, "cmd": "tt log", "visibility": 3, "kids": 4},
|
||||||
|
{"path": "log/mean", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/m2", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/stddev", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/n", "type": "float", "visibility": 3},
|
||||||
|
{"path": "dblctrl", "type": "bool", "readonly": false, "cmd": "tt dblctrl", "kids": 9},
|
||||||
|
{"path": "dblctrl/tshift", "type": "float", "readonly": false, "cmd": "tt dblctrl/tshift"},
|
||||||
|
{"path": "dblctrl/mode", "type": "enum", "enum": {"disabled": -1, "inactive": 0, "stable": 1, "up": 2, "down": 3}, "readonly": false, "cmd": "tt dblctrl/mode"},
|
||||||
|
{"path": "dblctrl/shift_up", "type": "float"},
|
||||||
|
{"path": "dblctrl/shift_lo", "type": "float"},
|
||||||
|
{"path": "dblctrl/t_min", "type": "float"},
|
||||||
|
{"path": "dblctrl/t_max", "type": "float"},
|
||||||
|
{"path": "dblctrl/int2", "type": "float", "readonly": false, "cmd": "tt dblctrl/int2"},
|
||||||
|
{"path": "dblctrl/prop_up", "type": "float", "readonly": false, "cmd": "tt dblctrl/prop_up"},
|
||||||
|
{"path": "dblctrl/prop_lo", "type": "float", "readonly": false, "cmd": "tt dblctrl/prop_lo"},
|
||||||
|
{"path": "tm", "type": "float", "kids": 4},
|
||||||
|
{"path": "tm/curve", "type": "text", "readonly": false, "cmd": "tt tm/curve", "kids": 1},
|
||||||
|
{"path": "tm/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt tm/curve/points", "visibility": 3},
|
||||||
|
{"path": "tm/alarm", "type": "float", "readonly": false, "cmd": "tt tm/alarm"},
|
||||||
|
{"path": "tm/stddev", "type": "float"},
|
||||||
|
{"path": "tm/raw", "type": "float"},
|
||||||
|
{"path": "ts", "type": "float", "visibility": 3, "kids": 4},
|
||||||
|
{"path": "ts/curve", "type": "text", "readonly": false, "cmd": "tt ts/curve", "visibility": 3, "kids": 1},
|
||||||
|
{"path": "ts/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt ts/curve/points", "visibility": 3},
|
||||||
|
{"path": "ts/alarm", "type": "float", "readonly": false, "cmd": "tt ts/alarm", "visibility": 3},
|
||||||
|
{"path": "ts/stddev", "type": "float", "visibility": 3},
|
||||||
|
{"path": "ts/raw", "type": "float", "visibility": 3},
|
||||||
|
{"path": "tm_pt", "type": "float", "kids": 4},
|
||||||
|
{"path": "tm_pt/curve", "type": "text", "readonly": false, "cmd": "tt tm_pt/curve", "kids": 1},
|
||||||
|
{"path": "tm_pt/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt tm_pt/curve/points", "visibility": 3},
|
||||||
|
{"path": "tm_pt/alarm", "type": "float", "readonly": false, "cmd": "tt tm_pt/alarm"},
|
||||||
|
{"path": "tm_pt/stddev", "type": "float"},
|
||||||
|
{"path": "tm_pt/raw", "type": "float"},
|
||||||
|
{"path": "ts_2", "type": "float", "visibility": 3, "kids": 4},
|
||||||
|
{"path": "ts_2/curve", "type": "text", "readonly": false, "cmd": "tt ts_2/curve", "visibility": 3, "kids": 1},
|
||||||
|
{"path": "ts_2/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt ts_2/curve/points", "visibility": 3},
|
||||||
|
{"path": "ts_2/alarm", "type": "float", "readonly": false, "cmd": "tt ts_2/alarm", "visibility": 3},
|
||||||
|
{"path": "ts_2/stddev", "type": "float", "visibility": 3},
|
||||||
|
{"path": "ts_2/raw", "type": "float", "visibility": 3},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "tt set", "kids": 18},
|
||||||
|
{"path": "set/mode", "type": "enum", "enum": {"disabled": -1, "off": 0, "controlling": 1, "manual": 2}, "readonly": false, "cmd": "tt set/mode"},
|
||||||
|
{"path": "set/reg", "type": "float"},
|
||||||
|
{"path": "set/ramp", "type": "float", "readonly": false, "cmd": "tt set/ramp", "description": "maximum ramp in K/min (0: ramp off)"},
|
||||||
|
{"path": "set/wramp", "type": "float", "readonly": false, "cmd": "tt set/wramp"},
|
||||||
|
{"path": "set/smooth", "type": "float", "readonly": false, "cmd": "tt set/smooth", "description": "smooth time (minutes)"},
|
||||||
|
{"path": "set/channel", "type": "text", "readonly": false, "cmd": "tt set/channel"},
|
||||||
|
{"path": "set/limit", "type": "float", "readonly": false, "cmd": "tt set/limit"},
|
||||||
|
{"path": "set/resist", "type": "float", "readonly": false, "cmd": "tt set/resist"},
|
||||||
|
{"path": "set/maxheater", "type": "text", "readonly": false, "cmd": "tt set/maxheater", "description": "maximum heater limit, units should be given without space: W, mW, A, mA"},
|
||||||
|
{"path": "set/linearpower", "type": "float", "readonly": false, "cmd": "tt set/linearpower", "description": "when not 0, it is the maximum effective power, and the power is linear to the heater output"},
|
||||||
|
{"path": "set/maxpowerlim", "type": "float", "description": "the maximum power limit (before any booster or converter)"},
|
||||||
|
{"path": "set/maxpower", "type": "float", "readonly": false, "cmd": "tt set/maxpower", "description": "maximum power [W]"},
|
||||||
|
{"path": "set/maxcurrent", "type": "float", "description": "the maximum current before any booster or converter"},
|
||||||
|
{"path": "set/manualpower", "type": "float", "readonly": false, "cmd": "tt set/manualpower"},
|
||||||
|
{"path": "set/power", "type": "float"},
|
||||||
|
{"path": "set/prop", "type": "float", "readonly": false, "cmd": "tt set/prop", "description": "bigger means more gain"},
|
||||||
|
{"path": "set/integ", "type": "float", "readonly": false, "cmd": "tt set/integ", "description": "bigger means faster"},
|
||||||
|
{"path": "set/deriv", "type": "float", "readonly": false, "cmd": "tt set/deriv"},
|
||||||
|
{"path": "display", "type": "text", "readonly": false, "cmd": "tt display"},
|
||||||
|
{"path": "dout", "type": "int", "readonly": false, "cmd": "tt dout"},
|
||||||
|
{"path": "dinp", "type": "int"},
|
||||||
|
{"path": "remote", "type": "bool"}]]
|
||||||
65
cfg/sea/tt.ori1.config.json
Normal file
65
cfg/sea/tt.ori1.config.json
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
["tt", [{"path": "", "type": "float", "readonly": false, "cmd": "run tt", "description": "tt", "kids": 18},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tt send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "is_running", "type": "int", "visibility": 3},
|
||||||
|
{"path": "target", "type": "float"},
|
||||||
|
{"path": "running", "type": "int"},
|
||||||
|
{"path": "tolerance", "type": "float", "readonly": false, "cmd": "tt tolerance"},
|
||||||
|
{"path": "maxwait", "type": "float", "readonly": false, "cmd": "tt maxwait"},
|
||||||
|
{"path": "settle", "type": "float", "readonly": false, "cmd": "tt settle"},
|
||||||
|
{"path": "log", "type": "text", "readonly": false, "cmd": "tt log", "visibility": 3, "kids": 4},
|
||||||
|
{"path": "log/mean", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/m2", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/stddev", "type": "float", "visibility": 3},
|
||||||
|
{"path": "log/n", "type": "float", "visibility": 3},
|
||||||
|
{"path": "dblctrl", "type": "bool", "readonly": false, "cmd": "tt dblctrl", "kids": 9},
|
||||||
|
{"path": "dblctrl/tshift", "type": "float", "readonly": false, "cmd": "tt dblctrl/tshift"},
|
||||||
|
{"path": "dblctrl/mode", "type": "enum", "enum": {"disabled": -1, "inactive": 0, "stable": 1, "up": 2, "down": 3}, "readonly": false, "cmd": "tt dblctrl/mode"},
|
||||||
|
{"path": "dblctrl/shift_up", "type": "float"},
|
||||||
|
{"path": "dblctrl/shift_lo", "type": "float"},
|
||||||
|
{"path": "dblctrl/t_min", "type": "float"},
|
||||||
|
{"path": "dblctrl/t_max", "type": "float"},
|
||||||
|
{"path": "dblctrl/int2", "type": "float", "readonly": false, "cmd": "tt dblctrl/int2"},
|
||||||
|
{"path": "dblctrl/prop_up", "type": "float", "readonly": false, "cmd": "tt dblctrl/prop_up"},
|
||||||
|
{"path": "dblctrl/prop_lo", "type": "float", "readonly": false, "cmd": "tt dblctrl/prop_lo"},
|
||||||
|
{"path": "tm", "type": "float", "kids": 4},
|
||||||
|
{"path": "tm/curve", "type": "text", "readonly": false, "cmd": "tt tm/curve", "kids": 1},
|
||||||
|
{"path": "tm/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt tm/curve/points", "visibility": 3},
|
||||||
|
{"path": "tm/alarm", "type": "float", "readonly": false, "cmd": "tt tm/alarm"},
|
||||||
|
{"path": "tm/stddev", "type": "float"},
|
||||||
|
{"path": "tm/raw", "type": "float"},
|
||||||
|
{"path": "ts", "type": "float", "kids": 4},
|
||||||
|
{"path": "ts/curve", "type": "text", "readonly": false, "cmd": "tt ts/curve", "kids": 1},
|
||||||
|
{"path": "ts/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt ts/curve/points", "visibility": 3},
|
||||||
|
{"path": "ts/alarm", "type": "float", "readonly": false, "cmd": "tt ts/alarm"},
|
||||||
|
{"path": "ts/stddev", "type": "float"},
|
||||||
|
{"path": "ts/raw", "type": "float"},
|
||||||
|
{"path": "ts_2", "type": "float", "visibility": 3, "kids": 4},
|
||||||
|
{"path": "ts_2/curve", "type": "text", "readonly": false, "cmd": "tt ts_2/curve", "visibility": 3, "kids": 1},
|
||||||
|
{"path": "ts_2/curve/points", "type": "floatvarar", "readonly": false, "cmd": "tt ts_2/curve/points", "visibility": 3},
|
||||||
|
{"path": "ts_2/alarm", "type": "float", "readonly": false, "cmd": "tt ts_2/alarm", "visibility": 3},
|
||||||
|
{"path": "ts_2/stddev", "type": "float", "visibility": 3},
|
||||||
|
{"path": "ts_2/raw", "type": "float", "visibility": 3},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "tt set", "kids": 18},
|
||||||
|
{"path": "set/mode", "type": "enum", "enum": {"disabled": -1, "off": 0, "controlling": 1, "manual": 2}, "readonly": false, "cmd": "tt set/mode"},
|
||||||
|
{"path": "set/reg", "type": "float"},
|
||||||
|
{"path": "set/ramp", "type": "float", "readonly": false, "cmd": "tt set/ramp", "description": "maximum ramp in K/min (0: ramp off)"},
|
||||||
|
{"path": "set/wramp", "type": "float", "readonly": false, "cmd": "tt set/wramp"},
|
||||||
|
{"path": "set/smooth", "type": "float", "readonly": false, "cmd": "tt set/smooth", "description": "smooth time (minutes)"},
|
||||||
|
{"path": "set/channel", "type": "text", "readonly": false, "cmd": "tt set/channel"},
|
||||||
|
{"path": "set/limit", "type": "float", "readonly": false, "cmd": "tt set/limit"},
|
||||||
|
{"path": "set/resist", "type": "float", "readonly": false, "cmd": "tt set/resist"},
|
||||||
|
{"path": "set/maxheater", "type": "text", "readonly": false, "cmd": "tt set/maxheater", "description": "maximum heater limit, units should be given without space: W, mW, A, mA"},
|
||||||
|
{"path": "set/linearpower", "type": "float", "readonly": false, "cmd": "tt set/linearpower", "description": "when not 0, it is the maximum effective power, and the power is linear to the heater output"},
|
||||||
|
{"path": "set/maxpowerlim", "type": "float", "description": "the maximum power limit (before any booster or converter)"},
|
||||||
|
{"path": "set/maxpower", "type": "float", "readonly": false, "cmd": "tt set/maxpower", "description": "maximum power [W]"},
|
||||||
|
{"path": "set/maxcurrent", "type": "float", "description": "the maximum current before any booster or converter"},
|
||||||
|
{"path": "set/manualpower", "type": "float", "readonly": false, "cmd": "tt set/manualpower"},
|
||||||
|
{"path": "set/power", "type": "float"},
|
||||||
|
{"path": "set/prop", "type": "float", "readonly": false, "cmd": "tt set/prop", "description": "bigger means more gain"},
|
||||||
|
{"path": "set/integ", "type": "float", "readonly": false, "cmd": "tt set/integ", "description": "bigger means faster"},
|
||||||
|
{"path": "set/deriv", "type": "float", "readonly": false, "cmd": "tt set/deriv"},
|
||||||
|
{"path": "display", "type": "text", "readonly": false, "cmd": "tt display"},
|
||||||
|
{"path": "dout", "type": "int", "readonly": false, "cmd": "tt dout"},
|
||||||
|
{"path": "dinp", "type": "int"},
|
||||||
|
{"path": "remote", "type": "bool"}]]
|
||||||
8
cfg/sea/tvd.mb11.config.json
Normal file
8
cfg/sea/tvd.mb11.config.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
["tvd", [{"path": "", "type": "float", "kids": 7},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tvd send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "tvd set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "tvd control"},
|
||||||
|
{"path": "htr", "type": "float"},
|
||||||
|
{"path": "pow", "type": "float"}]]
|
||||||
8
cfg/sea/tvd.varioxB.config.json
Normal file
8
cfg/sea/tvd.varioxB.config.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
["tvd", [{"path": "", "type": "float", "kids": 7},
|
||||||
|
{"path": "send", "type": "text", "readonly": false, "cmd": "tvd send", "visibility": 3},
|
||||||
|
{"path": "status", "type": "text", "visibility": 3},
|
||||||
|
{"path": "raw", "type": "float"},
|
||||||
|
{"path": "set", "type": "float", "readonly": false, "cmd": "tvd set"},
|
||||||
|
{"path": "control", "type": "enum", "enum": {"OFF": 0, "ON": 1}, "readonly": false, "cmd": "tvd control"},
|
||||||
|
{"path": "htr", "type": "float"},
|
||||||
|
{"path": "pow", "type": "float"}]]
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user