315 Commits

Author SHA1 Message Date
a930dc8f6a temporary state at PPMS as of 2024-01-26 2024-01-29 08:29:25 +01:00
416cdd5a88 Autogain function for SR830 lock-in driver
Change-Id: If07ec9182e5153e1237b9818ce555162f54e0ae5
2023-12-11 08:31:43 +01:00
1bd188e326 For the lockin830 get_par/set_par are implemented.
Change-Id: I5b6707a07d936d24528173a2edae49a148081ff9
2023-12-11 08:31:36 +01:00
f7b29ee959 SR830: moved dicts out of class
Change-Id: If056b1bf4e81c3b609ded087dff2b40c7119903f
2023-12-11 08:31:29 +01:00
f6a0ccb38b Changed write_range, write_tc methods
Change-Id: I335f97bd54deaccf0552b27deb3a7dfe73074e4c
2023-12-11 08:31:17 +01:00
b93a0cd87b New driver for lock-in amplifier SR830
Change-Id: I45c5a06460f4b84cade0eae53188b058510c4473
2023-12-11 08:31:11 +01:00
be6ba73c89 workaround for bug in sea
fix double slash in hdb path

Change-Id: I68ab79c5240abb9fcccbbe5f817f740df2bb5ea6
2023-12-05 14:10:03 +01:00
c075738584 ips_mercury: add NOT_FOUND action 2023-12-04 15:47:18 +01:00
0fa2e8332d do not complain when no output module is configured 2023-12-04 15:46:50 +01:00
afb49199a1 fixes in mb11/dil5 cfg files
- add flowpars
- increase om range to -360
- add sea config
2023-12-04 15:45:00 +01:00
416fe6ddc0 frappy.client: fix the case then timestamp is missing
the previous version failed when timestamp was missing

Change-Id: I77e1fb81b19fb4ee2749d731bafacbac46132f8e
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32404
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-11-30 09:17:11 +01:00
e3cb5d2e60 frappy.io: change default to retry_first_idn=True
Looked at this code again, and wondered why the default is not True.
It is far more probable that the programmer just forgets to set
this property to True than it would harm to do so.

Change-Id: I439aedbdfc9c2b12737e3ce1694e90550ddf0e78
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32270
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-11-30 09:16:57 +01:00
998367a727 Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2023-11-23 15:57:17 +01:00
ab918a33ae cc: replace bool by enum in cc.hav and cc.nav 2023-11-23 15:56:23 +01:00
397ec2efbd add pdld laser driver
2 modules: a switch (on/off) and the power (set: target, readback:value)
2023-11-14 09:17:11 +01:00
67032ff59b ma6: set backlash 2023-10-27 15:11:19 +02:00
03c356590b frappy_psi.phytron: implement limit switches 2023-10-02 16:58:09 +02:00
06bec41ed3 ma6: make ts drivable 2023-10-02 16:56:23 +02:00
4cd6929d4b fix ma15 sea config 2023-10-02 16:55:42 +02:00
a89f7a3c44 configs for sample heat stick 2023-10-02 16:54:52 +02:00
a4330081b7 proxy: fix command wrapper
bugfix: return only value of execCommand result, not qualifiers
Change-Id: Iff14779050daa9886e9f7d0396317c5a41695cd1
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32235
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-10-02 13:49:08 +02:00
3b997d7d86 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-09-22 13:29:23 +02:00
612295d360 add ill2 2023-09-22 13:29:04 +02:00
9e39a43193 fix fs config 2023-09-22 13:27:54 +02:00
6adfafaa27 more consistent ori1 stick json file 2023-09-22 13:27:10 +02:00
f6c4090b96 fix simulation
+ some fixed in sim_uniax

Change-Id: Ia8703ed988aa904bb2694339f0d3175b28fcb33e
2023-09-19 16:05:52 +02:00
ecef2b8974 more cfg file fixes
Change-Id: I0ba86cd17bb07f480cac6f20994ee854c6e811ae
2023-09-19 15:04:02 +02:00
96a7e2109b cleanup cfg files 2023-09-19 14:43:48 +02:00
2f3c68a5c5 improvements for flame
- frappy_psi.channelswitcher: use isBusy instead of checking value and target
- frappy_psi.ls372: remove underflow mechanism
- frappy_psi.parmod.SwitchDriv: switch the controlled module also when not buys
2023-09-19 14:17:08 +02:00
e9a195d61e flamedil as of 2023-07-04 2023-09-19 14:17:08 +02:00
6ac3938b78 flamedil as of 2023-07-03 2023-09-19 14:17:08 +02:00
b4cfdcfc1a flame sample combined T 2023-09-19 14:16:21 +02:00
d32fb647a6 frappy_psi.ls372: add TemperatureSensor and TemperatureLoop 2023-09-19 14:14:12 +02:00
abf7859fd6 frappy_psi.cryoltd: fixes after frappy upgrade 2023-09-19 14:14:12 +02:00
55ea2b8cc4 frappy_psi.triton: try to fix channel selection before condense action 2023-09-19 14:14:12 +02:00
27600e3ddf fix bad cfg files
Change-Id: Iacba12a2679777dd4ea2892751d82a63221b1361
2023-09-19 14:07:20 +02:00
6b4244f071 Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2023-09-19 11:01:06 +02:00
1d81fc6fcd frappy_psi.sea: small fixes
- changes in return value of frappy_config command in sea
- do not store sea manager

Change-Id: I5bc1d9a281ad2285b90d3649b4c702a3501d451d
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32166
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-09-19 10:58:07 +02:00
dfce0bdfbc phytron.py: improve status
better analysis of hardware status code

Change-Id: I667b443649db43ff3e572e0a50685aabc9ba2ca2
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32165
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-09-19 10:57:59 +02:00
c39aef10aa Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-09-14 11:10:12 +02:00
45dd87060b improve client shutdown time
in SecopClient.disconnect joinng the reconnect thread may take
up to 10 s, because of the time.sleep(10) call in the reconnect
thread.

change the _shutdown attribute from bool to an Event, and
use Event.wait instead of time.sleep

Change-Id: Icea6a14ad73df0b3d26ef45806f4c05e6bf18492
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32137
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-09-14 09:10:39 +02:00
8019b359c4 change FloatRange arguments minval/maxval to min/max
in the previous version FloatRange(max=100) was neither working
properly nor complaining, because the maxval=None default was
overriding the value for max.

possible fixes:
  - raise an error when min/max used as argument (confusing for
    the programmer, as it is a property)
  - allow both versions minval/maxval and min/max (more code)
  - use min/max and a pylint directive here (the only thing to
    take care is not to use the min/max builtin in __init__)

this change uses the last option for the fix

Change-Id: Iff0e0c4d0d7b165003bdeffa67a93a1cd7f29eea
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31982
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-09-14 09:09:25 +02:00
4c5109e5a3 fix frappy_demo.lakeshore
reading back the target does not work properly, because
  a) the readback value might be delayed
  b) there is no command to read back the target, SETP?1
     is returning the working setpoint, which might be distinct
     in case of a ramp

Change-Id: I0da2dbfc1a8ddbecbae6d0456ff64e008bc56336
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31983
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-09-14 09:09:09 +02:00
bf4b3e5683 psi: improve sea interface
- get return value from teh frappy-config script in order
  to detect failures
- call config_check not more than once within 1 sec

Change-Id: Ibe42e846521206463f2761d452aea7e558a36854
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32139
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-09-14 09:09:00 +02:00
af34fef1e1 fix missing .poll attribute in simulation
using super() in SimBase.__new__ fixes the problem

Change-Id: I18d0ba6ac476c2edb0d973090bcb09508a983d6a
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32136
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-09-14 09:08:50 +02:00
5e1c22ba28 further fixes after change 31470
- get_module is to be called when io is autocreated
- register_module is missing in playground

Change-Id: I28884575b71320667107c494473b0fc5d4363a50
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32123
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-09-14 09:08:36 +02:00
0bc4a63aa7 add parmod.Par
the reasonly class frappy_psi.parmod.Par represents a parameter
or a component of a tuple parameter

Change-Id: I47208c9d7a6fc377cd56b82cc6a9e8cdb433fe8e
2023-09-14 09:05:00 +02:00
cb2c10655c improve shutdown time
on shutdown, time.sleep(10) is blocking the reconnect thread.
change the _shutdown attribute from bool to an Event, and
use Event.wait instead of time.sleep

Change-Id: Icea6a14ad73df0b3d26ef45806f4c05e6bf18492
2023-09-13 17:22:58 +02:00
6c49abea74 fix frappy/playground.py after change 31470
assumptions about dispatcher in playground.py are no longer
valid.

- let Dispatcher class in playground inherit from real dispatcher
+ improve log messages

Change-Id: I2a9a9d532dabadc590543660c445c021dd2f2891
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31967
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-09-11 14:12:14 +02:00
dee8f8929e Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-09-08 10:46:13 +02:00
2e143963df stickmotor addon: add backlash -1 2023-09-08 10:45:18 +02:00
4bc82c2896 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-09-06 08:39:22 +02:00
833a68db51 ma10: improve sea cfg 2023-09-06 08:38:49 +02:00
b9f046a665 hvolt_short stick: make hcp writable 2023-09-06 08:38:06 +02:00
9d9b5b2694 frappy_psi.phytron: further improvements
unfortunaely, sometimes communication errors happen.
workaround: try several times reading the status

Change-Id: I2788c6c9b4145246cdd51c31b246abffee60f93b
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32032
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-08-28 14:17:26 +02:00
255adbf8d9 frappy_psi.phytron: further improvements
unfortunaely, sometimes communication errors happen.
workaround: try several times reading the status

Change-Id: I2788c6c9b4145246cdd51c31b246abffee60f93b
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/32032
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-08-25 08:21:16 +02:00
bc0133f55a add zapf to requirements-dev
Change-Id: I6dddd8d4c590253f1039b89edae561fa90b40811
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31725
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-08-18 16:32:16 +02:00
09e59b93d8 Revert "add zapf to requirements-dev.txt"
This reverts commit e67a46cd015c0a1a32d5a4f114b963dd17a7c266.

Reason for revert: required version available from pypi

Change-Id: Ib4f8b0cf62da58e84545511c7521ea93b7ff1342
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31724
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-08-18 16:32:16 +02:00
2474dc5e72 interactive client: improve keyboard interrupt
- when driving a module with <module>(<target>),
  keyboard interrupt should send stop()

- make sure keyboard interrupt does not only stop
  the current driving, but also skips other code
  on the same command line

Change-Id: Ib4d2c4111dc0f23bf07385065766fb9b4a611454
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31926
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-08-18 16:32:16 +02:00
9dab41441f frappy_mlz: Add Zapf PLC
adds a zapf-based PLC connection scanner.

Change-Id: Icc0ded7e7a8cc5a83d7527d9b26b37c49e9b8674
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31471
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-08-18 16:32:16 +02:00
4af46a0ea2 add zapf to requirements-dev.txt
Change-Id: Ia4de696051cee1e00676e777b7dd2c0a90a0c504
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31719
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-08-18 16:32:16 +02:00
b844b83352 core: do not call register_module on error
Dispatcher.get_module_instance returns None on failure.
If that is the case, the dispatcher should not try to register the
None value as a module.

Change-Id: Ie33b8debc2a829d480d56cafc1eb0ab610181d67
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31713
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
2023-08-18 16:32:16 +02:00
3b63e32395 frappy_mlz: fix one-off error in barcode reader
cut of one byte too much in barcode decode

Change-Id: I5f1f8475f197b13af836d685dc6da5a9ee824dc2
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31728
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-08-18 16:32:16 +02:00
5168e0133d dispatcher: change logging calls to debug
Some logging calls should not have landed as log.info in the dynamic
modules patch. This fixes that.

Change-Id: I666fc7c9b5c65ddbed1c26ea456becce7870e744
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31707
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-08-18 16:32:16 +02:00
9ea6082ed8 frappy_mlz: Zebra fixes after basic test
Some fixes after the device was tested with socat ptys and NICOS.

Change-Id: I3e9dba2be2547d493c435d1da9844c932a2df4e6
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31662
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-08-18 16:32:16 +02:00
f205cf76aa mlz: Add Zebra Barcode Reader
Adds a Barcode reader device (for now, only for ANTARES). Not yet
tested with real hardware.

Change-Id: I25f097466be89d152f47b9d05ece8f562e4b34d6
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31412
Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-08-18 16:32:16 +02:00
db9ce02028 Revert "revert commits done before MZ holidays"
This reverts commit d2885bdd72.
2023-08-18 16:32:16 +02:00
dmc
c4a39306e4 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-08-17 14:10:29 +02:00
dmc
024de0bd32 insert pressure reading into ccrpe_cfg 2023-08-17 14:07:44 +02:00
d2d63c47e1 frappy_psi.phytron: stop motor before restart
restarting the phytron motor without prior stop leads
to funny behaviour.

- send stop before restart
- stop motor when moving but status not busy
- restart when motor drives the wrong way

+ better status text when stopping

Change-Id: I82cd59297b3c79a354a4eeb5ba03fc65bedf755f
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31929
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-08-14 14:32:01 +02:00
565e8e6fd3 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-08-10 14:35:03 +02:00
89bc7f6dfe add ori7 2023-08-10 14:34:51 +02:00
c69fe1571a add hvolt_short 2023-08-09 17:39:19 +02:00
c40033a816 update old cfg files
- change secop_psi to frappy_psi
- remove interface and name in Node

Change-Id: I69242de250c9ecf52e001fce6396347dbf3fedcb
2023-08-09 17:36:02 +02:00
da37175cbb frappy/protocol/interface/tcp.py: use SECoP_DEFAULT_PORT
import SECoP_DEFAULT_PORT instead of defining DEF_PORT

Change-Id: I02ee420d200f90b61f8c79e1cb5ee3e0913955e9
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31913
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-08-07 16:15:30 +02:00
2020928289 improve error message on client when host/port is bad
for host name without port, None was used for the port
leading to a confusing error message

- do not call parse_host_port with None as defaultport argument
- improve error message when connection fails

+ fix an error in last line of parse_ipv6_host_and_port
+ fix some issues breaking PEP 8 rules

Change-Id: I437360be96449c164f0080e3c60f1685825d4780
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31911
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-08-07 16:15:30 +02:00
9df6794678 fix haake_cfg 2023-08-07 16:10:55 +02:00
41f3b7526e fix ma7.config.json 2023-08-07 16:10:30 +02:00
f80624b48d MA7: add unit=T to mf 2023-07-11 15:36:14 +02:00
9e2e6074c8 Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2023-07-11 13:27:57 +02:00
5a13888498 sMA6 encoder mode to CHECK
after Oksana experienced that it works
2023-07-11 11:27:20 +02:00
5a8a6b88ff frappy.client.interactive: bug fixes
- correct behaviour with the following untypical message sequence:
  - send change target
  - receive status idle
  - receive status busy
  - receive changed target

- add 'exception' to Logger

Change-Id: I614b2a2c2e09ef1b43544838ccb2fa43357dd50d
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31632
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-07-11 10:59:42 +02:00
b84b7964e3 frappy_psi.sea: further bug fixes
- in SEA, it is not guaranteed that the is_running state is set
  before the run command returns. as a consequence, we have to
  wait in SeaDrivable.write_target for is_running being set
- syncio has always to be reconnected after asynio

Change-Id: Ia46cff11de86868ce0627faaf6f776282bd7a8f4
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31631
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-07-11 10:59:42 +02:00
6c5dddc449 ma7: sea confg: make ta/tb visible 2023-07-10 10:55:43 +02:00
78fa49ef74 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-07-07 15:46:05 +02:00
d92b154292 frappy_psi.sea: avoid multiple connections
the _connect was sometimes started in parallel from
startModules and the first call to doPoll.
remove the first one, and protect the second one
with a lock

Change-Id: I079439e150efd5d005130cef475f6326f933ecbd
2023-07-07 15:40:20 +02:00
073fe1a08b frappy.io: make error reporting consistent
- fix mechanism to avoid multiple error messages in log files

Change-Id: I688071f9b06da1a81eb12d63adb549042171c7c8
2023-07-07 15:40:20 +02:00
f80c793cd9 consmetic changes to ma6_sample_heat_cfg.py 2023-07-06 14:49:06 +02:00
519e9e2ed7 MA6: set om.encoder_mode to 'NO' 2023-07-06 14:48:09 +02:00
14036160f7 add special configurations m6/ma7 sampleheat 2023-07-06 13:06:06 +02:00
131dc60807 MA7/MA11: make ts drivable 2023-07-06 13:04:36 +02:00
49722a858f update haake + eurotherm cfg 2023-07-06 13:04:11 +02:00
c61b674382 disable encoder for MA11 stick rotation 2023-07-06 12:57:07 +02:00
091543be56 add FW (old power rack, via SEA) 2023-07-06 12:53:19 +02:00
d2885bdd72 revert commits done before MZ holidays
they are all not neccessary for SINQ SE operation

Change-Id: Ic9adcccf685752ab90bb6b86005ac8e04b302855
2023-07-06 08:03:15 +02:00
975593dd6b update to gerrit version
Change-Id: Ifdaa28dd961a529cd9197c4c3639744f108b0a6a
2023-07-05 17:33:05 +02:00
4fe28363d3 server: add option to dynamically create devices
add module which scans a connection and registers new devices depending
on the answer.
* change module initialization to demand-based
* move code from server to dispatcher
- remove intermediate step in Attached __get__

TODO:
  factor out dispatcher (regards to playground)
  discuss factoring out of module creation code from server AND
  dispatcher

Change-Id: I7af959b99a84c291c526aac067a4e2bf3cd741d4
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31470
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-07-05 17:16:41 +02:00
28b19dbf57 frappy_psi.thermofisher: add version through gerrit
Change-Id: I4b89d6ec803ad64c41720bc62493d2e4027df50e
2023-07-05 17:14:07 +02:00
05189d094a add StructParam
adds a generic solution for creating parameters with struct datatype
with their members linked to individual parameters.

main use case: ctrlpars

read_*/write_* methods are either created for the main (structed)
parameter based on the corresponding methods of the individual
parameters or the methods for the individual parameters are created
based on the methods of the main parameter

+ disable pylint use-dict-literal

Change-Id: I7f1d9fb3d3b2226b548c2999bbfebe2ba5ac285e
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31405
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-07-05 17:12:12 +02:00
47da14eef9 pylint: disable use-dict-literal
sometimes it is nicer to use dict(...) instead of {}
an objections against removing this check from pylint?

Change-Id: Ib08d3016b7ec3512111021a82685253cdcd42916
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31505
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-07-05 17:11:40 +02:00
7904f243cb server: add option to dynamically create devices
add module which scans a connection and registers new devices depending
on the answer.
* change module initialization to demand-based
* move code from server to dispatcher
- remove intermediate step in Attached __get__

TODO:
  factor out dispatcher (regards to playground)
  discuss factoring out of module creation code from server AND
  dispatcher

Change-Id: I7af959b99a84c291c526aac067a4e2bf3cd741d4
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31470
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-07-05 17:10:56 +02:00
a2fed8df03 pylint: disable use-dict-literal
sometimes it is nicer to use dict(...) instead of {}
an objections against removing this check from pylint?

Change-Id: Ib08d3016b7ec3512111021a82685253cdcd42916
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31505
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-07-05 17:08:48 +02:00
19f965bced Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-07-03 17:51:43 +02:00
3e4ea2515e add ma15 cfg 2023-07-03 17:51:28 +02:00
714c820115 fixes in ori3 and dil5 config 2023-07-03 17:49:06 +02:00
a8e1d0e1e8 frappy_psi.sea: try to reconnect on failure
both .asynio and .syncio connection should be tried to reopen.
(fix from mlz gerrit)

Change-Id: I0da5bd9927865a1c55afb93a7a5b76c44fc8750e
2023-06-29 11:28:04 +02:00
d7a1604bd5 frappy_psi.sea: auto connect
on both .ssynio and /syncio try to reconnect after failure
2023-06-26 14:45:53 +02:00
b92095974b camea filter addon
Change-Id: I1d80aa3bfc4e441ad8a69930b81d6cc25cee9511
2023-06-20 11:05:15 +02:00
8dc9c57e9d entangle: fix tango guards for pytango 9.3
Change-Id: I666969f9c798971d5cd8a0c2f6564067ac3cde72
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31327
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
2023-06-20 09:00:42 +02:00
7c95f1f8ee config: fix merge_modules
Change-Id: I31d05afe300443e08fb08f9e6645401f52cfae39
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31323
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-06-20 08:05:55 +02:00
3786d2f209 frappy_psi.triton: fix HeaterOutput.limit
+ fix handling of control_active

Change-Id: Ic11933f6c1c4d9df07aa9d06ae4dca40b755e4ed
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31377
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-06-20 08:03:37 +02:00
138b84e84c add a hook for reads to be done initially
inital reads from HW should be done in the thread started by
startModule, not in startModule itself.

- add a hook method 'initialReads' for this
+ add doc for init methods
+ fix some errors in doc

Change-Id: I914e3b7ee05050eea1ee8aff3461030adf08a461
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31374
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-06-20 08:03:37 +02:00
997e8e26e9 frappy_psi.mercury: proper handling of control_active
Change-Id: I31e846fa6fdf6d642184e3736a66ffd53033bccf
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31376
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-06-20 08:03:37 +02:00
644d005dad frappy.mixins.HasOutputModule
add 'set_control_active' method for overriding by subclasses

Change-Id: Ib344319862a4a0bf29efef16a63db09d1f314a82
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31375
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-06-20 08:03:37 +02:00
36dfe968e8 frappy_psi.phytron: rename reset_error to clear_errors
use the command 'clear_errors' to return from an error state

+ make sure target is valid after clear_errors

Change-Id: I3c180500a05836d52bbb9a8ecbdb397adea03d0d
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31337
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-06-20 08:03:37 +02:00
0932228596 frappy_psi.mercury/triton: add control_off command
frappy_psi.triton.TemperatureLoop has not output module to
deactivate control -> add control_off also to loops in
frappy_psi.mercury

Change-Id: I4dc4333134da34a8d3ae0f3c037a1e5b108c95a1
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31341
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-06-20 08:03:37 +02:00
dff0c819de io: followup fix for retry-first-ident
followup fix: no error was raised ever for the first identification
message.

Change-Id: I80f0f431add6dfd7b37d750b9fc661174aa8f217
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31318
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-06-20 08:02:13 +02:00
fd917724d8 io: add option to retry first ident request
Change-Id: I524c15387eaf2461e3dfe690250a55f058467b0b
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31291
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Bjoern Pedersen <bjoern.pedersen@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
2023-06-20 08:02:02 +02:00
bf43858031 GUI bugfix: use isChecked instead of checkState in BoolInput
Change-Id: I4896df13c117c6eeaaaaba80ca3da4b1982c3d9b
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31346
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-06-16 11:09:27 +02:00
f354b19cf0 frappy_psi.sea: fix extra_module_set
Change-Id: If5669fdd60c8505a47414f17cfcd8534cdc2abee
2023-06-06 16:50:48 +02:00
f304ac019e fix cfg files (extra_modules/single_module)
Change-Id: I1821e1e0dc960d48a3e343c53195808798b7f969
2023-06-06 16:49:54 +02:00
9a9a22588f Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-06-06 16:46:31 +02:00
3e26dd49d0 jtccr: fix cfg for extra_modules / single_module 2023-06-06 16:45:31 +02:00
5a456a82b0 fix enum when SEA type is text
Change-Id: I873045a2dac8771b844431ccda70ce1b8ff1aee5
2023-06-05 13:56:00 +02:00
f6868da3b9 fix systemd bug
Change-Id: I8a3f1eddba9525589757d4612a5060267ea0c5db
2023-06-05 13:56:00 +02:00
ee31f8fb45 fix merge_status in HasConvergence 2023-06-05 13:03:38 +02:00
a6a3f80e30 remove sign=-1 from cfg files 2023-06-05 13:02:40 +02:00
ad36ab1067 frappy_psi.thermofisher improvements
- merge Loop with Sensor
- make convergence work

Change-Id: Iba0cafc524ada6d490b7a5c30f4127e77fd163f3
2023-06-05 09:50:35 +02:00
f2d795cfba frappy_psi.convergence: improvments
- merge_status
- empty string instead of 'approaching'
- dif <= tol

Change-Id: I6f10875f7ef5d2109c13d7448ede114b8e30d86e
2023-06-05 09:47:08 +02:00
c04337c3a4 frappy.client: missing exception method in dummy logger
Change-Id: Ie3a574c3060f2ac6833ff44e8074a19db6ea2f0b
2023-06-05 09:45:04 +02:00
57d5298c92 remove secop-server.spec
Change-Id: I8097a2918bc4e786bd270aeb436efebe9a3bd88f
2023-05-31 14:32:04 +02:00
9a6421a54f up to date with develop/mlz
Change-Id: I5ea71bc99a2f0dffc3dbe37e1119eb188ef8a3f0
2023-05-31 14:27:36 +02:00
c5d429346d update 2023-05-30 from gitmlz
Change-Id: I0b1eb2941692fde5c9d98f107fc38315625dcfdb
2023-05-31 14:16:12 +02:00
726665ebd8 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-05-31 08:43:19 +02:00
004533655f frappy_psi.magfield: bug in progress check
must check for self.current (not self.value)

+ fix in mercury: __ramping must be initialized
2023-05-31 08:42:17 +02:00
c4d5d2e284 fix equipment_id in seadesc
Change-Id: Iecf5d3ae815373c0535ee9e1c230b2f48554f5b5
2023-05-30 15:12:36 +02:00
75f156beef improve HasRamp
Change-Id: I0ddabb8b2681712637a18c392da5424d30a05b4b
2023-05-26 16:07:07 +02:00
459a80b4d2 add Drivable with alias value and target
together wih mixins HasConvergence and HasRamp

Change-Id: Ia36a8b44220e93cfeee98400f4276bfd7e40d82f
2023-05-25 17:54:28 +02:00
bef190b77d software ramp mixin
+ fix frappy.lib.merge_status

Change-Id: I550eaeaab460a0d9ac1b027d59d4223dac4c0663
2023-05-25 17:53:36 +02:00
e4dbb90065 lakshore must not import from frappy_psi.mixins
Change-Id: I988bef545f98d5c42d56af3fe4d5aae6dbf19809
2023-05-25 17:52:27 +02:00
0cbaffd4b6 log.exception instead of log.error in callbacks
+ inhibit timestamps in future

Change-Id: Idef463558bf24e891573179474ffbebd4e81468f
2023-05-25 16:16:30 +02:00
1de5455ef6 add haakeuro 2023-05-25 09:56:25 +02:00
db94def694 newest version of okasanas drivers 2023-05-17 16:56:49 +02:00
1407514458 phytron
better handling of restart status

Change-Id: I28f97b49d39ed7c6b781f0d8edb218e63e1b1fc9
2023-05-16 09:39:20 +02:00
050a2dc8dc phytron next version
with adaption of HasStates

Change-Id: I167ac8031bc5f7120c30031e7cfcb7587b42b61d
2023-05-15 11:12:52 +02:00
df4a37085a frappy-cli: fix init(*...)
Change-Id: Iba8106a779ac399e6d72d247ea93e6c1e8cdbf94
2023-05-15 11:12:31 +02:00
6697462f15 phytron: next fix
Change-Id: I72debb43b02f07cf9ff79286293105f052314a35
2023-05-15 09:03:58 +02:00
84d0d44f38 phytron with HasStates
test version

Change-Id: Ifbaa35421a64faad32c87bbcf758c236f900cd0b
2023-05-15 08:33:14 +02:00
fa9525fd4c Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2023-05-11 10:42:38 +02:00
087036922a move more code from bin/frappy-cli to frappy/client/interactive.py 2023-05-11 10:42:10 +02:00
1ce43a567b fixes in sea cfg files
- json_file must be a string, not a list
- rel_path is no longer to be converted to a list
2023-05-10 16:36:32 +02:00
c46947afd4 update phytron driver
offset as storage only (after current draft specs)

Change-Id: I1a005f149a8bd562124e2d40e49416957f66e851
2023-05-10 14:32:26 +02:00
3099c813d1 add unit=s to pollinterval
Change-Id: I6a28fecd4b0d650042f2f031a1b64b801fc2885e
2023-05-10 14:32:11 +02:00
8039351395 mercury, ips, sea, triton, convergence
after gerrit

Change-Id: Iff14047ecc476589aef10c96fae9970133b8bd14
2023-05-09 14:57:34 +02:00
750b5a7794 add empty description to Mod() for Sea classes
Change-Id: I3890782b4e08291f73db0bfc4671c6cbc14f05d6
2023-05-09 08:19:03 +02:00
a9fe8577c3 improve mercury driver
less fancy but more readable commands

Change-Id: Ifcc6a03199167179d984235c9b1bc7e14c60b51b
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31008
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-05-05 13:30:29 +02:00
74729872a8 Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2023-05-05 13:25:10 +02:00
6b78e69dbe add HasOffset feature
+ remove all other unused features

Change-Id: Idff48bdabf51e7fa23547eac761f11320c41861c
2023-05-05 13:23:14 +02:00
3b95013b69 improve and fix errors with parameter limits
- in order to work properly, readonly=True in limit parameters
  has to be set before creating the write_* method
- more explicit: Use e.g. target_max=Limit()
- fix an error in the loop over the base classes when creating
  the check_* method
- more concise error message when a limit is violated
+ fix an error in playground when using persistent parameters

Change-Id: Ibd557b55d6c0d9a2612cda4460b16e3c70e1bc9e
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31017
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-05-05 13:21:37 +02:00
85166344d2 improve interactive client
- remove irrelevant traceback on remote errors
- add run() function to execute scripts
- when started with bin/frappy-cli, use separate namespace

Change-Id: Ic808a76fa76ecd8d814d52b15a6d7d2203c6a2f3
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30957
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-05-05 13:20:54 +02:00
ca6b7a65c0 improve mercury temperature loop
- remove appearance of Done
- add auto flow
- try up to 3 times in 'change' method if read back does not match

Change-Id: I98928307bda87190d34aed663023b157311d4495
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30981
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-05-05 13:20:38 +02:00
f528cc4808 fixes on HasConvergence and HasOutputModule
- HasConvergence must inherit from HasStates
- control_active should have a default

Change-Id: Ic8b430003fdb746bf76782b74fa04e43c700c2e2
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31023
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-05-05 13:18:51 +02:00
3314241631 [WIP] phytron improvements
- Limits
- offset
- power cycle behaviour

Change-Id: Id2f717c362cd7e1e37f180c8130b0e086e724389
2023-05-05 13:16:41 +02:00
3fcd72b189 merge manually with mlz repo
as of 2023-05-04

Change-Id: I5926617c454844927799e20a489db20d538db100
2023-05-04 16:34:09 +02:00
5bc0b94c6d fix mb11 slot for updated mercury driver 2023-05-04 15:25:05 +02:00
bbe70fb3cb add missing files from secop_psi
- all of them have to be checked!

Change-Id: I89d55ca683d0b2710222f14c2c3cd42f8fbf3a1f
2023-05-03 11:24:47 +02:00
31be98c62e MB11: increase persistent_limit to 11.1
Change-Id: I6849877212a8fc2ac16ef80d727581ae7f6c5e94
2023-05-02 16:49:35 +02:00
94070121c7 converted smamor 2023-05-02 16:43:09 +02:00
1961f91567 add switching_sensor 2023-05-02 16:39:34 +02:00
e38139089f add hvolt_long and varioxstick (zebra) 2023-05-02 16:38:27 +02:00
e2c51b3dd1 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-05-02 16:35:50 +02:00
b77c222b72 add setsamp to ma02.config.json 2023-05-02 16:34:23 +02:00
b55af7b20b add ma7two, oventwo and ovenstick (sans) 2023-05-02 16:32:04 +02:00
72add69b65 add rt and sch (from hrpt) 2023-05-02 16:19:07 +02:00
dmc
1a44c2d513 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2023-05-02 16:09:16 +02:00
0fb10a0a10 converted cfg files from camea 2023-05-02 16:07:38 +02:00
748ea1400a improve interactive client
- remove irrelevant traceback on remote errors
- add run() function to execute scripts
- when started with bin/frappy-cli, use separate namespace

Change-Id: Ic808a76fa76ecd8d814d52b15a6d7d2203c6a2f3
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30957
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-05-02 15:54:32 +02:00
5784aa0f5d improve mercury temperature loop
- remove appearance of Done
- add auto flow
- try up to 3 times in 'change' method if read back does not match

Change-Id: I98928307bda87190d34aed663023b157311d4495
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30981
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-05-02 15:54:14 +02:00
6c02f37bbb issues with StructOf
- depending whether client or server side, handling of optional is different
- fix issues when struct is used as keyworded command arguments

Change-Id: I72b347b1a96ee3bce1f67dace4862c313c12c7a9
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30972
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-05-02 15:52:51 +02:00
d6d564f4aa a playground for debugging drivers
playground for trying out drivers by calling methods read_*
and write_* directly without starting a real SECoP server

Change-Id: Ia7d2366920d29794a4eda5d7bfb2b62d4930eb65
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30944
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2023-05-02 15:52:19 +02:00
da15df076a fetched mlz version
- before some chamges in the gerrit pipline

Change-Id: I33eb2d75f83345a7039d0fb709e66defefb1c3e0
2023-05-02 15:25:11 +02:00
dmc
9fc6b6c0fd add ill3 and ori1 stick 2023-05-02 09:31:09 +02:00
b19a8c2e5c converter for creating python config files
+ testmode in server returns errors
+ fix in (old) statemachine

Change-Id: Icdfd6c3d8f70e717fecd61e8a54adad326be6000
2023-01-23 18:00:56 +01:00
68b45978a7 ppms.cfg: add target=0 in mf
Change-Id: Ibccf95b54ba93a0b0648c61b7630ae376bf3e70e
2023-01-23 18:00:20 +01:00
7d4dfdebbd fix bug in k2601b
convert returned float (which is integer) to int

Change-Id: I8363f4d5188f2b1be89f1383da20c76522286424
2023-01-23 18:00:20 +01:00
6c325460f7 make doc when .git is not there
accept failure of secop.version.get_version()

Change-Id: Ia689bd4f56b848bc354c0d68826a3174f0746a97
2023-01-23 18:00:20 +01:00
c70b61e4e5 relax identification check
accept *,SECoP,*

Change-Id: Ieb56e9c57fc5eb18e025fbc2f1d17a9d6e3f0a97
2023-01-23 18:00:20 +01:00
589b857039 add driver for LakeShore 372
- including channelswitcher
2022-12-21 11:05:15 +01:00
ad4a6d2e09 improved cyoltd (flame magnet)
- use a statemachine
- do more control in frappy, switching from persistent to driven
  internally
- a lot of fixes
2022-12-21 11:00:19 +01:00
766f15beee improvements in magfield
- use HasTargetLimits instead of HasLimits
- move ramp_tmo parameter to SompleMagfield
- add last_target method
- fix progress check in SimpleMagfield.ramp_to_target
- better mechanism for setting to persistent mode after restart
- fix switching mode
- fix on_error
- fix condition for shortcut start_field_change -> check_switch_off
- remove direct status updates
- move check for manual switch heater operations to ips_mercury
2022-12-21 10:57:41 +01:00
79b8cd7b2d fix inheritance of status codes attached to state functions 2022-12-21 10:38:11 +01:00
bd0f3a0b07 fixe in triton and mercury 2022-12-19 16:13:06 +01:00
c4f9f2ef4b rename action to dil_action 2022-12-19 16:12:06 +01:00
0820d537c3 Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2022-12-19 16:09:40 +01:00
1a6aa893e4 move persistent_field parameter from magnet.py to ips_magnet.py
'persistent_field' is in principle the same as 'value'.
however, on IPS it might be different, at least it is a seperate
HW parameter
2022-12-19 16:03:44 +01:00
b10c722ff6 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-12-19 15:13:20 +01:00
b7a1f17e5e fix new statemachine with ips magfield
+ add on_error, on_restart etc. to states.py
+ add n_retry argument to mercury change/multichange
2022-12-19 15:12:00 +01:00
a0d14c30be attocube: more robust moving
- try up to 10 times when end of travel or no more progress
- issue WARN instead of ERROR when moving did not work
2022-12-02 10:37:45 +01:00
e668b6a439 attocube: add offset and change to HasTargetLimits 2022-12-02 09:12:51 +01:00
3483c3374d allow pollinterval = 0 2022-12-02 09:10:07 +01:00
d71a512454 new features HasTargetLimits and HasSimpleOffset
according to standard
2022-12-02 09:07:20 +01:00
b1608c4d7f Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2022-12-02 09:00:12 +01:00
e4c1f35e4a add attocube 2022-12-02 08:54:26 +01:00
3ab7eb99ab add flamemag / flamedil config 2022-11-30 14:14:47 +01:00
ef9d89993c new specs of HasOffset and target_limits 2022-11-30 14:14:06 +01:00
9887ba0721 improve Attached
- allow a default value
- make copy method work properly
2022-11-30 14:11:05 +01:00
397ca350f8 add FLAMP furnace 2022-11-24 07:56:09 +01:00
99220400f1 add FS furnace 2022-11-24 07:55:36 +01:00
dmc
4e8636a620 heliox: make temperatures seperate modules 2022-11-24 07:50:24 +01:00
dmc
f14bd553a8 disable closed loop on MA10 rotator 2022-11-24 07:49:36 +01:00
2845a82236 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-11-23 22:41:49 +01:00
4f5cc3059e add FT furnace 2022-11-23 22:41:23 +01:00
d845fedc03 Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2022-11-21 14:38:40 +01:00
1b2e364f70 magfield adapted to new state machine 2022-11-21 14:37:53 +01:00
4405b2b02c new state machine, HasStates mixin 2022-11-21 14:13:52 +01:00
49b9bfa11d improvements for triton
- set cooldown channel befor setting action
- improve max heater setting
2022-11-15 16:57:52 +01:00
df428f4c0c check readback and try up to 3 times when it does not match 2022-11-15 16:57:00 +01:00
0c93ca8c75 add comment "do not use mb11stick" 2022-10-18 16:41:04 +02:00
971c1dcfee Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-10-04 15:13:23 +02:00
498dbd4179 sea.py: fix status datatype
sea status is a string (not a tuple) and needs therefore
special treatment.
interestingly this bug did not yet appear ...
2022-10-04 15:11:57 +02:00
00b0a54f12 ramp unit must be $/min 2022-09-22 17:12:54 +02:00
48076edd99 improve magfield and ips_mercury 2022-09-22 17:12:30 +02:00
485e81bfb0 [deb] Release v0.13.1
Change-Id: Ib038475d75de7b2976bc463423c2493eb531c02a
2022-09-21 16:19:34 +02:00
0df50bb0f9 secop_mlz: minor rework entangle client
Change-Id: Ie406b4220c22cdbf302a1fd36f2d7407d81a47fa
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28951
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
2022-09-21 16:17:01 +02:00
de5f17695c make startup faster in case of errors
When the io of one SECoP module fails, it takes ages to startup
because each parameter poll takes the time to wait for a timeout.
After the first communication error on an io, no more startup polls
are tried on the modules using this io.

Change-Id: I0d250953dfe91a7d68d2d2b108395cc25d471afe
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28588
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2022-09-21 16:16:48 +02:00
e4aa2149f7 phytron: fix warning on repeated comm. error
log only a warning when several retries ware successful

Change-Id: I2f1dfba920b0841914da82229820bcdd4b97c6e9
2022-09-21 11:35:42 +02:00
9f656546df fix undefined status in softcal 2022-09-20 12:07:11 +02:00
5affb9f31b fix bug in persistent.py
- use dirname instead of basename
2022-09-20 12:07:11 +02:00
5e3bf96df1 rework of uniax
- try to deal with anomaly at 17 N
- reduce pid on overshoot
- use new statemachine
2022-09-20 12:07:11 +02:00
07995e2235 fix bug when restarting statemachine
fixed bad if clause
+ better debug message on restart/stop
2022-09-20 12:07:10 +02:00
54f091d0fe disable encoder for ma6 stick motor 2022-09-19 11:38:33 +02:00
14a71427fa jtccr: fix rel_paths 2022-09-19 11:37:56 +02:00
486be9604e [WIP] uniax: removed do_ prefix
Change-Id: I98d56a8ece681515de8f05767c67686715212c09
2022-09-16 14:57:58 +02:00
a8f1495bc8 [WIP] uniax after changing to StateMachine
Change-Id: I0173f8c8eaaeb2526477d05803a615673297667d
2022-09-16 14:53:42 +02:00
3ab9821860 improve formatting of values
Change-Id: I4a9290e85ee2071a3f2cfe0d00bc7dc4dcb4caed
2022-09-16 08:06:45 +02:00
0b9e227669 state after discussion with users
- cirterium for "no substantial forece change" must be improved
2022-09-16 08:16:15 +02:00
befba09acc fix main value unit
Change-Id: I27186e66bf065e015680a6925c5428714444c25e
2022-09-14 14:54:48 +02:00
554f265eb8 fix main value unit
Change-Id: I30c6107fae31b5087bac75d66db6be8dee78a757
2022-09-14 14:53:59 +02:00
4287ec6477 apply main unit also in structured types
Change-Id: I5a3efb167f2b460b847d8e7ac75a21848976b5f8
2022-09-14 14:50:39 +02:00
aad1c33742 improvements on interactive client
- add selective logging
- fix handling of exceptions

Change-Id: I7e2c2d4ed12302874c3bb2cc7bd707aa8e487341
2022-09-14 13:59:51 +02:00
b0315e133b rework switch timing
- specific things in ips_mercury.py
- general things in magfield.py

Change-Id: I7c2bae815b9a80a17803b44b8941ef3dea3adb60
2022-09-14 13:58:12 +02:00
c3f55435da add reading of slave currents and voltages
with fast polling
2022-09-14 10:59:55 +02:00
12cb0cdade Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-09-12 15:16:57 +02:00
7ed7dd7493 add combined mb11 / mb11 stick 2022-09-12 15:16:26 +02:00
031b30a4aa heater slots H2 and H3 are exchanged! 2022-09-12 15:15:24 +02:00
3597adf869 fix code for current framwork version
- remove _iodev, use HasIo instead of HasIodev
- add earlyInit super call
2022-09-08 14:57:06 +02:00
8bfe969a95 HasIO: attached io must not be mandatory
as an uri might be given instead.
2022-09-08 14:55:36 +02:00
5a78a5b258 fix wrong name (uniax.cfg)
Change-Id: I7b132aa9474edd93321c74fa9262917d0766879f
2022-09-08 09:26:01 +02:00
298f94e4d5 update code (remove underscore from attached modules)
Change-Id: I10bd6bec8f5e9459219f3186fd696e053a264604
2022-09-08 09:22:32 +02:00
0fec736886 update code in several drivers
- remove poll arguments
- change from HasIodev to HasIO

Change-Id: I2668f1068c17a50d9aff43b1bb3e4fb03c8d840e
2022-09-08 09:13:03 +02:00
38b3a192ab fix move_limit in cfg
Change-Id: Iea99a39155e6172bcc265c350431a438d20f2fc3
2022-09-08 08:31:38 +02:00
4959619d56 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-09-08 08:27:43 +02:00
6caf4fc993 uniax stick 2022-09-08 08:27:17 +02:00
95eb4e969a change safe current to 0.3, set offset to 15 2022-09-07 13:14:51 +02:00
ada4c43ebf change max force to 190 N 2022-09-07 13:14:51 +02:00
9a40d27354 fix bug in ls340res
return value must be converted to float
2022-09-07 13:14:51 +02:00
6929422b94 fox update of param2path dict
Change-Id: Ie8de3d7f549ba29954058f3d516d1c3965932aa0
2022-08-24 17:02:21 +02:00
2cd66c2e08 sea: allow multiple parameters being updated with one hdb path 2022-08-24 16:57:27 +02:00
268ebbe00e Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2022-08-23 17:21:21 +02:00
ea960f2250 fix ln2fill enum 2022-08-23 17:21:01 +02:00
dmc
9673f7b242 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-08-22 15:56:48 +02:00
dmc
292d028fe6 add ill5 p sample stick 2022-08-22 15:55:58 +02:00
boa
aa0c0421c3 add Be-Filter addon for boa 2022-08-19 12:43:36 +02:00
db43a77614 remove some log.debug statements
in order to sync with frappy@mlz

Change-Id: Iab89cb313fb6969c91663b8ebc56bdcb96ed2dd1
2022-08-16 17:17:54 +02:00
21bcc7ce98 an enum with value 0 should be interpreted as False
for example: bool(Enum(off=0, on=1)('off')) is False

Change-Id: Ieb200b4ecf0eed50b657ecc00f73a69810ad828f
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28586
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2022-08-16 17:16:02 +02:00
7b9c099321 default unit to UTF8
Change-Id: Ic958346beb1a3b164c8d7b2826d59cf7e3991e15
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28946
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Tested-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
2022-08-16 17:14:50 +02:00
33a7c56fa2 allow to convert numpy arrays to ArrayOf
accept all sequences instead of just tuple / list
+ change Module.announceUpdate to convert value before
  comparing with previous one (comparing will not work with numpy arrays)

Change-Id: I5eceef4297607107e2dde688af2833d3651a8775
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28525
Tested-by: Markus Zolliker <markus.zolliker@psi.ch>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2022-08-16 17:14:38 +02:00
ab2fe6200a reintroduced individual init of generalConfig.defaults
revert basically the former change
"init generalConfig.defaults only in secop-server"

The problem of import order when setting generalConfig.defaults
has to be solved by not overriding already existing keys when
setting the default.

Change-Id: I82121e346607dd74146279c4241e13ab63c14096
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28011
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2022-08-16 17:11:56 +02:00
d5d04dc82f add simple interactive python client
- SECoP modules are accessible as objects in the main python module
- parameters are accessed as attributes of these objects
- __repr__ is used for listing all parameters
- __call__ is used for 'change target and wait until no more busy'

typically used from a python interpreter or in a jupyter notebook

Change-Id: Idb55684eeff6d1262e5d1517a3ff934f1c1bf208
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28980
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2022-08-16 17:08:18 +02:00
f23e42de1f fix bugs with persistent_limit parameter
take into account that reading the switch heater might be delayed
2022-08-16 16:54:30 +02:00
2f6954c4f3 magfield: add persistent_limit parameter
- use update_switch_heater instead of write_switch_heater
  for detecting switch time
- switch_time split into switch_on_time/switch_off_time

Change-Id: Id90a8b2c2520e24f3ee4a34aee25d41210e5d6d4
2022-08-16 10:05:01 +02:00
dmc
b81fc7b122 remove tm from ill5.cfg
only one SeaDrivable per sea drivable allowed!
2022-08-15 16:22:02 +02:00
704bba292a add mb11 stick 2022-08-12 15:13:07 +02:00
f1e642b1b0 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-08-12 15:12:23 +02:00
8e3cdc80e4 improvements in magfiels/ips_mercury
- read voltage
- fix a bug with ._init name conflict
2022-08-12 15:10:23 +02:00
3496e391f6 check for last_target in conditions for redo 2022-08-02 11:19:30 +02:00
bb40a0820c use flag instead tolerance for redo check
when target is changed, a flag is set, and
this is used to jump back in the sequence to the right step
for redoing
2022-07-29 15:12:44 +02:00
8f739b11dc ILL1 .cfg created and ILL1stick 2022-07-06 16:14:16 +02:00
7ef386424c Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2022-07-06 11:24:56 +02:00
53b3dd2fad fix stick motor port number on ma02-ts 2022-07-06 11:24:27 +02:00
6554e5de47 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-07-05 11:02:15 +02:00
60ec1edb32 fix He-fill enum 2022-07-05 11:00:35 +02:00
131082313d added stick-motor addon 2022-07-05 10:57:43 +02:00
f12b0b3da0 add ill5 gas pressure stick
not yet tested
2022-07-04 14:23:51 +02:00
5ecd9557a3 add lev to ill5 cfg 2022-07-04 14:23:08 +02:00
3769ddca75 Merge branch 'wip' of gitlab.psi.ch:samenv/frappy into wip 2022-06-29 11:51:01 +02:00
a4dec7b832 fix ill5 cfg 2022-06-29 11:49:51 +02:00
390af7eff7 improve general config
for easier configuration of multiple servers on the same machine,
FRAPPY_* env. variables are overriding the values from the
general config file

Change-Id: Ifb00dae482dd366bd4b7951c76164af91cad9fc2
2022-06-29 11:42:33 +02:00
f495313018 dil2/3/4: added more temperatures, added dil3 2022-06-28 08:22:13 +02:00
18ded2159c changed mf from Readable to Drivable 2022-06-28 08:09:00 +02:00
760fc9eb40 added jtccr sea cfg 2022-06-27 11:06:45 +02:00
5d348eb7b1 fix ma6 stick motor port 2022-06-27 11:06:00 +02:00
86767e2fa1 add still and sorb heaters to dil5 2022-06-21 15:32:15 +02:00
8a995aafed fix issue with non matching persistent field 2022-06-21 15:31:44 +02:00
7379ea91e5 fix issue sending numbers in exp. format
numbers must be fixed point, with maximum 8 digits
2022-06-21 15:30:20 +02:00
cf42119f85 fix handling of persistent_field parameter
'persistent_field' parameter should be updated as long as the
switch is turning off

Change-Id: I76b592077ceb0a2a20beb8e6390487c620764650
2022-06-17 08:24:38 +02:00
80d9a790ec fixed proper parameter inheritance 2022-06-15 16:02:38 +02:00
5951312d40 fixes to make pylint happy
Change-Id: I95baf4e585603a640d4ec71076a4d509082775ed
2022-06-14 15:24:42 +02:00
778ac17172 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-06-14 15:08:35 +02:00
dfbc1c757a fixes in mercury an triton
- Valve is now a drivable, as it will check success, and retry,
  which might take around 1 second
+ some more
2022-06-14 15:07:17 +02:00
54b58f2188 step_size instead of speed_factor
no longer need to pre configure a speed_factor,
the proper units of speed and accel are taken from
the hardware
2022-06-14 15:03:53 +02:00
f855b9db40 fixes in convergence and statemachine
- set spent_inside to 0 on set_target
- additional debug log messages in statemachine
2022-06-14 14:07:24 +02:00
6fd365197a sea driver: no events for unexported params
Change-Id: Ia4b5f5f742d0240010218ee24dc147bb535c7c64
2022-06-13 14:09:13 +02:00
8b2abf7044 fix iodev to io in ill4stick.cfg 2022-06-10 14:31:44 +02:00
182a8c7e49 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-06-10 13:22:04 +02:00
6da1a89459 add dil4/variox, fix ma10 in cfg 2022-06-10 13:21:20 +02:00
f1d5e82bb4 remove unneccessary fiels in cfg/sea 2022-06-10 13:20:12 +02:00
e6fdd79df4 start SEA server if not running
before connecting to SEA

Change-Id: I75c02f25e023e0e1769810a180430efd48b9c550
2022-06-08 16:28:39 +02:00
a35231f5bd fixes in mb11/dil5
- no need fro second slot in TemperatureLoop, PressureLoop
- only ValvePos needs two slots
- added testwise heater to mix chamber

Change-Id: Iac4592d037a5e6a4f586041762992d75cc77e3de
2022-06-07 14:26:30 +02:00
9c7b6aeb94 various fixes on mb11/dil5 2022-06-07 11:45:25 +02:00
68e2e06905 fixes in convergence, mercury, phytron, triton 2022-06-01 09:21:47 +02:00
3563a0db16 fix ill4 2022-05-31 16:44:53 +02:00
4cb0031302 Merge branch 'wip' of gitlab.psi.ch-samenv:samenv/frappy into wip 2022-05-30 12:10:51 +02:00
4bfb76ca82 IPS mercury
+ mb11, dil5, dil2, variox configs
2022-05-30 12:09:57 +02:00
3e6f1bebf7 added features 2022-05-30 12:07:33 +02:00
894 changed files with 52870 additions and 55681 deletions

View File

@ -1,2 +1,2 @@
SECoP playground for creating specification and testing one implementation. Frappy framework for implementing SEC-nodes (see SECoP protocol on github).

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
frappydemo.PID
log/* log/*
html/* html/*
*.pyc *.pyc

8
.isort.cfg Normal file
View File

@ -0,0 +1,8 @@
[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

View File

@ -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 ignore = .git,resources_qt5.py,resources_qt6.py
# Pickle collected data for later comparisons. # Pickle collected data for later comparisons.
persistent=yes persistent=yes
@ -38,26 +38,22 @@ confidence=
# multiple time. # multiple time.
disable=missing-docstring disable=missing-docstring
,locally-disabled ,locally-disabled
,locally-enabled
,fixme ,fixme
,no-member ,no-member
,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
,redefined-variable-type ,consider-using-f-string
,deprecated-lambda ,use-dict-literal
[REPORTS] [REPORTS]
@ -67,10 +63,6 @@ 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
@ -93,14 +85,11 @@ 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= additional-builtins=Node,Mod,Param,Command,Group
[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_]+))$
@ -155,12 +144,6 @@ 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=1000
@ -218,7 +201,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=15 max-parents=20
# Maximum number of attributes for a class (see R0902). # Maximum number of attributes for a class (see R0902).
max-attributes=50 max-attributes=50

View File

@ -3,12 +3,18 @@
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:
@bin/secop-server -q demo & @rm -f frappydemo.PID || true
@bin/secop-server -q test & @{ bin/frappy-server -q demo & echo $$! >> frappydemo.PID; }
@bin/secop-server -q cryo & @{ bin/frappy-server -q test & echo $$! >> frappydemo.PID; }
@bin/secop-gui localhost:10767 localhost:10768 localhost:10769 @{ bin/frappy-server -q cryo & echo $$! >> frappydemo.PID; }
@ps aux|grep [s]ecop-server|awk '{print $$2}'|xargs kill @sleep 0.2
@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
@ -32,18 +38,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=secop python3 $(shell which pytest) -v test --cov=frappy
doc: doc:
$(MAKE) -C doc html $(MAKE) -C doc html
lint: lint:
pylint -j 0 -f colorized -r n --rcfile=.pylintrc secop secop_* test pylint -f colorized -r n --rcfile=.pylintrc frappy frappy_* 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 secop -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 . -wholename './secop_*.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
release-patch: release-patch:
MODE="patch" $(MAKE) release MODE="patch" $(MAKE) release
@ -55,7 +61,7 @@ release-major:
MODE="major" $(MAKE) release MODE="major" $(MAKE) release
release: release:
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 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
build-pkg: build-pkg:

View File

@ -60,4 +60,3 @@ changes are done, eventually a sync step should happen:
cp -r secop /Volumes/PPMSData/zolliker/frappy/secop cp -r secop /Volumes/PPMSData/zolliker/frappy/secop
it may be that additional folder have to copied ... it may be that additional folder have to copied ...

View File

@ -29,8 +29,11 @@ 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__), '..')))
from secop.gui.qt import QApplication import logging
from secop.gui.cfg_editor.mainwindow import MainWindow from mlzlog import ColoredConsoleHandler
from frappy.gui.qt import QApplication
from frappy.gui.cfg_editor.mainwindow import MainWindow
def main(argv=None): def main(argv=None):
@ -38,9 +41,13 @@ 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)
window = MainWindow(args.file) logger = logging.getLogger('gui')
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__':

67
bin/frappy-cli Executable file
View File

@ -0,0 +1,67 @@
#!/usr/bin/env python3
# -*- 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>
# Markus Zolliker <markus.zolliker@psi.ch>
#
# *****************************************************************************
import sys
import argparse
from os import path
# Add import path for inplace usage
sys.path.insert(0, path.abspath(path.join(path.dirname(__file__), '..')))
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=str, 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)

View File

@ -26,45 +26,53 @@
from __future__ import print_function from __future__ import print_function
import sys import sys
import argparse
from os import path 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 mlzlog import logging
from mlzlog import ColoredConsoleHandler
from secop.gui.qt import QApplication from frappy.gui.qt import QApplication
from secop.gui.mainwindow import MainWindow 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('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): def main(argv=None):
if argv is None: if argv is None:
argv = sys.argv argv = sys.argv
if '-h' in argv or '--help' in argv: args = parseArgv(argv[1:])
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: loglevel = logging.DEBUG if args.debug else (logging.ERROR if args.quiet else logging.INFO)
mlzlog.initLogging('gui', 'debug') logger = logging.getLogger('gui')
else: logger.setLevel(logging.DEBUG)
mlzlog.initLogging('gui', 'info') console = ColoredConsoleHandler()
console.setLevel(loglevel)
logger.addHandler(console)
app = QApplication(argv) app = QApplication(argv)
hosts = [host for host in argv[1:] if not host.startswith('-')] win = MainWindow(args.node, logger)
if not hosts: app.aboutToQuit.connect(win._onQuit)
hosts = ['localhost:10767']
win = MainWindow(hosts)
win.show() win.show()
return app.exec_() return app.exec()
if __name__ == '__main__': if __name__ == '__main__':

39
secop/gui/util.py → bin/frappy-play Normal file → Executable file
View File

@ -1,3 +1,4 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# ***************************************************************************** # *****************************************************************************
# Copyright (c) 2015-2016 by the authors, see LICENSE # Copyright (c) 2015-2016 by the authors, see LICENSE
@ -17,38 +18,22 @@
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# #
# Module authors: # Module authors:
# Alexander Lenz <alexander.lenz@frm2.tum.de> # Markus Zolliker <markus.zolliker@psi.ch>
# #
# ***************************************************************************** # *****************************************************************************
import sys
from os import path from os import path
from secop.gui.qt import uic # Add import path for inplace usage
sys.path.insert(0, path.abspath(path.join(path.dirname(__file__), '..')))
uipath = path.dirname(__file__) from frappy.client.interactive import Console
from frappy.playground import play, USAGE
if len(sys.argv) > 1:
play(sys.argv[1])
else:
print(USAGE)
def loadUi(widget, uiname, subdir='ui'): Console('play', sys.modules['__main__'].__dict__)
uic.loadUi(path.join(uipath, subdir, uiname), widget)
class Value:
def __init__(self, value, timestamp=None, readerror=None):
self.value = value
self.timestamp = timestamp
self.readerror = readerror
def __str__(self):
"""for display"""
if self.readerror:
return str('!!' + str(self.readerror) + '!!')
return str(self.value)
def __repr__(self):
args = (self.value,)
if self.timestamp:
args += (self.timestamp,)
if self.readerror:
args += (self.readerror,)
return 'Value%s' % repr(args)

View File

@ -1,6 +1,5 @@
#!/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
@ -23,16 +22,16 @@
# #
# ***************************************************************************** # *****************************************************************************
import sys
import argparse import argparse
import sys
from os import path 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__), '..')))
from secop.lib import generalConfig from frappy.lib import generalConfig
from secop.logging import logger from frappy.logging import logger
from secop.server import Server from frappy.server import Server
def parseArgv(argv): def parseArgv(argv):
@ -61,8 +60,9 @@ def parseArgv(argv):
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"
"cfgfiles given without '.cfg' extension are searched in the configuration directory, " "cfgfiles given without '.cfg' extension are searched"
"else they are treated as path names", " in the configuration directory,"
" else they are treated as path names",
default=None) default=None)
parser.add_argument('-g', parser.add_argument('-g',
'--gencfg', '--gencfg',
@ -90,20 +90,19 @@ 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.defaults = {k: args.relaxed for k in ( generalConfig.set_default('lazy_number_validation', args.relaxed)
'lazy_number_validation', 'disable_value_range_check', 'legacy_hasiodev', 'tolerate_poll_property')} generalConfig.set_default('legacy_hasiodev', args.relaxed)
generalConfig.set_default('tolerate_poll_property', args.relaxed)
generalConfig.init(args.gencfg) generalConfig.init(args.gencfg)
logger.init(loglevel) logger.init(loglevel)
srv = Server(args.name, logger.log, cfgfiles=args.cfgfiles, interface=args.port, testonly=args.test) srv = Server(args.name, logger.log, cfgfiles=args.cfgfiles,
interface=args.port, testonly=args.test)
if args.daemonize: if args.daemonize:
srv.start() srv.start()
else: else:
try: srv.run()
srv.run()
except KeyboardInterrupt:
pass
if __name__ == '__main__': if __name__ == '__main__':

174
bin/secop-convert Executable file
View File

@ -0,0 +1,174 @@
#!/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:
# Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
# Alexander Lenz <alexander.lenz@frm2.tum.de>
#
# *****************************************************************************
import sys
from os import path
# Add import path for inplace usage
sys.path.insert(0, path.abspath(path.join(path.dirname(__file__), '..')))
from secop.lib import generalConfig
from secop.logging import logger
from secop.server import Server
from secop.core import Attached
from secop.lib.enum import EnumMember
def rep(value):
if isinstance(value, EnumMember):
return repr(value.name)
return repr(value)
def guess(value):
try:
return '%.16g' % float(value)
except (TypeError, ValueError):
return rep(value)
def triplequote(description):
if '\n' in description:
return "'''%s'''" % '\n '.join(description.split('\n'))
else:
return repr(description)
def get_value(modobj, pname, value):
prop = modobj.propertyDict.get(pname)
if isinstance(prop, Attached):
return value
clsname = type(modobj).__qualname__
if pname in {'extra_modules', 'single_module', 'rel_paths', 'json_file'} and clsname.startswith('Sea'):
return value.split()
if pname == 'extra_params' and clsname.startswith('Sim'):
return [v.strip() for v in value.split(',')]
if pname == 'remote_class' and type(modobj).__bases__[0].__name__.startswith('Proxy'):
return value
return getattr(modobj, pname)
generalConfig.defaults = {k: True for k in (
'lazy_number_validation', 'disable_value_range_check', 'legacy_hasiodev', 'tolerate_poll_property')}
generalConfig.init()
logger.init('off')
def main(cfgs):
stats = {}
for name in cfgs:
try:
content = []
srv = Server(name, logger.log, cfgfiles=name, interface=5000, testonly=True)
if srv.node_cfg.get('class') is not None:
stats[name] = 'skip router'
continue
if 'FRAPPY' in srv.module_cfg:
stats[name] = 'skip genconfig'
continue
for modname, params in srv.module_cfg.items():
classname = params['class']
if classname == 'secop_psi.sea.SeaClient':
params['uri'] = 'none'
if 'iodev' in params:
params['io'] = params.pop('iodev')
if '.iodev' in params:
params['io'] = params.pop('.iodev')
node = dict(srv.node_cfg)
if 'description' in node:
content.append('Node(%r,\n %s,' % (node.pop('id'), triplequote(node.pop('description'))))
interface = srv.interface_cfg.get('uri')
if interface:
content.append(' interface=%r,' % interface)
for k, v in node.items():
content.append(' %s=%s,' % (k, guess(v)))
content.append(')\n')
errors = srv._processCfg()
if errors:
content = ['# %s' % e[:120] for e in errors] + content
stats[name] = ', '.join(errors[:2])
for modname, modcfg in srv.module_cfg.items():
modobj = srv.dispatcher._modules.get(modname)
classname = modcfg.pop('class')
content.append('Mod(%r,\n %r,' % (modname, classname))
description = modcfg.pop('description', None)
if description is not None:
content.append(' %s,' % triplequote(description))
result = {}
for key, value in modcfg.items():
pname, _, prop = key.partition('.')
if not pname:
pname, prop = prop, ''
elif pname == 'uri' and value == 'none':
continue
if prop:
pobj = modobj.parameters[pname] if modobj else None
if pobj:
try:
propvalue = rep(getattr(pobj, prop))
except AttributeError:
propvalue = rep(getattr(pobj.datatype, prop))
else:
propvalue = guess(value)
else:
prop = 'value'
if modobj:
propvalue = rep(get_value(modobj, pname, value))
else:
propvalue = guess(value)
result.setdefault(pname, {})[prop] = propvalue
undef = object()
for pname, cfg in result.items():
value = cfg.pop('value', undef)
if not cfg:
content.append(' %s=%s,' % (pname, value))
else:
args = ['%s=%s' % kv for kv in cfg.items()]
if value is not undef:
args.insert(0, value)
joined = ' '.join(args)
head = ' %s=Param(' % pname
if len(joined) < 8:
content.append('%s%s),' % (head, ', '.join(args)))
else:
content.append('%s\n %s,\n ),' % (head, ',\n '.join(args)))
content.append(')\n')
with open('%s' % name.replace('.cfg', '_cfg.py'), 'w') as f:
f.write('\n'.join(content))
stats[name] = '*' if name in stats else ''
except KeyboardInterrupt:
break
except BaseException as e:
stats[name] = repr(e)
if len(cfgs) == 1:
raise
if len(cfgs) > 1:
with open('convert.log', 'w') as f:
f.write('\n'.join('%s: %s' % kv for kv in stats.items())+'\n')
if __name__ == '__main__':
main(sys.argv[1:])

View File

@ -34,15 +34,17 @@ Use cases, mainly for test purposes:
""" """
import sys import sys
import argparse
from os import path from os import path
import asyncore import asyncore
import socket import socket
import ast import time
# 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__), '..')))
from secop.lib import get_class, formatException from frappy.lib import get_class, formatException, mkthread
class LineHandler(asyncore.dispatcher_with_send): class LineHandler(asyncore.dispatcher_with_send):
@ -51,6 +53,9 @@ class LineHandler(asyncore.dispatcher_with_send):
asyncore.dispatcher_with_send.__init__(self, sock) asyncore.dispatcher_with_send.__init__(self, sock)
self.crlf = 0 self.crlf = 0
def handle_line(self, line):
raise NotImplementedError
def handle_read(self): def handle_read(self):
data = self.recv(8192) data = self.recv(8192)
if data: if data:
@ -74,20 +79,22 @@ class LineHandler(asyncore.dispatcher_with_send):
class LineServer(asyncore.dispatcher): class LineServer(asyncore.dispatcher):
def __init__(self, host, port, lineHandlerClass): def __init__(self, port, line_handler_cls, handler_args):
asyncore.dispatcher.__init__(self) asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr() self.set_reuse_addr()
self.bind((host, port)) self.bind(('0.0.0.0', port))
self.listen(5) self.listen(5)
self.lineHandlerClass = lineHandlerClass print('accept connections at port', port)
self.line_handler_cls = line_handler_cls
self.handler_args = handler_args
def handle_accept(self): def handle_accept(self):
pair = self.accept() pair = self.accept()
if pair is not None: if pair is not None:
sock, addr = pair sock, addr = pair
print("Incoming connection from %s" % repr(addr)) print("Incoming connection from %s" % repr(addr))
self.lineHandlerClass(sock) self.line_handler_cls(sock, self.handler_args)
def loop(self): def loop(self):
asyncore.loop() asyncore.loop()
@ -108,47 +115,73 @@ class Server(LineServer):
class Handler(LineHandler): class Handler(LineHandler):
def __init__(self, sock, handler_args):
super().__init__(sock)
self.module = handler_args['module']
self.verbose = handler_args['verbose']
def handle_line(self, line): def handle_line(self, line):
try: try:
reply = module.do_communicate(line.strip()) reply = self.module.communicate(line.strip())
if verbose: if self.verbose:
print('%-40s | %s' % (line, reply)) print('%-40s | %s' % (line, reply))
except Exception: except Exception:
print(formatException(verbose=True)) print(formatException(verbose=True))
return
self.send_line(reply) self.send_line(reply)
class Logger: class Logger:
def debug(self, *args): 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 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') def log(self, level, *args):
port = opts.pop('port') pass
srv = Server('localhost', int(port), Handler)
module = get_class(cls)(cls, Logger(), opts, srv) def info(self, *args):
module.earlyInit() print(*args)
srv.loop()
exception = error = warn = info
def parse_argv(argv):
parser = argparse.ArgumentParser(description="Simulate HW with a serial interface")
parser.add_argument("-v", "--verbose",
help="output full communication",
action='store_true', default=False)
parser.add_argument("cls",
type=str,
help="simulator class.\n",)
parser.add_argument('-p',
'--port',
action='store',
help='server port or uri',
default=2089)
return parser.parse_args(argv)
def poller(pollfunc):
while True:
time.sleep(1.0)
pollfunc()
def main(argv=None):
if argv is None:
argv = sys.argv
args = parse_argv(argv[1:])
opts = {'description': 'simulator'}
handler_args = {'verbose': args.verbose}
srv = Server(int(args.port), Handler, handler_args)
module = get_class(args.cls)(args.cls, Logger(), opts, srv)
handler_args['module'] = module
module.earlyInit()
mkthread(poller, module.doPoll)
srv.loop()
if __name__ == '__main__':
sys.exit(main(sys.argv))

24
cfg/QnwTC1_cfg.py Normal file
View File

@ -0,0 +1,24 @@
Node('QnwTC1test.psi.ch',
'QnwTC1 test',
'tcp://5000',
)
Mod('io',
'frappy_psi.qnw.QnwIO',
'connection for Quantum northwest',
uri='tcp://ldmcc01-ts:3004',
)
Mod('T',
'frappy_psi.qnw.TemperatureLoopTC1',
'holder temperature',
channel='CT',
io='io',
)
Mod('Th',
'frappy_psi.qnw.SensorTC1',
'heat exch. temperature',
channel='HT',
io='io',
)

19
cfg/TFA10_cfg.py Normal file
View File

@ -0,0 +1,19 @@
Node('TFA10.psi.ch',
'TFA10 test',
'tcp://5000',
)
Mod('io',
'frappy_psi.thermofisher.ThermFishIO',
'connection for ThermoFisher A10',
uri='tcp://ldmse-d910-ts:3001',
)
Mod('T',
'frappy_psi.thermofisher.TemperatureLoopA10',
'holder temperature',
io='io',
target=Param(max=100),
tolerance=0.5,
settling_time=20,
)

View File

@ -1,13 +0,0 @@
[NODE]
description = Andeen Hagerlin 2700 Capacitance Bridge
id = ah2700.frappy.psi.ch
[module cap]
class = secop_psi.ah2700.Capacitance
description = capacitance
uri=lollypop-ts:3002
#[module ahcom]
#class = secop_psi.ah2700.StringIO
#uri=ldmse3-ts:3015
#description = serial communicator to an AH2700

9
cfg/addons/ah2700_cfg.py Normal file
View File

@ -0,0 +1,9 @@
Node('ah2700.frappy.psi.ch',
'Andeen Hagerlin 2700 Capacitance Bridge',
)
Mod('cap',
'frappy_psi.ah2700.Capacitance',
'capacitance',
uri='lollypop-ts:3002',
)

View File

@ -1,20 +0,0 @@
[NODE]
description = Andeen Hagerlin 2700 Capacitance Bridge using SEA
id = ah2700.addon.sea.psi.ch
[sea_addons]
class = secop_psi.sea.SeaClient
description = SEA connection to mbe_ah2700
config = ah2700.addon
export = False
service = addons
[cap]
class = secop_psi.sea.SeaReadable
io = sea_addons
sea_object = cap
[capslope]
class = secop_psi.sea.SeaReadable
io = sea_addons
sea_object = capslope

View File

@ -0,0 +1,23 @@
Node('ah2700.addon.sea.psi.ch',
'Andeen Hagerlin 2700 Capacitance Bridge using SEA',
)
Mod('sea_addons',
'frappy_psi.sea.SeaClient',
'SEA connection to mbe_ah2700',
config='ah2700.addon',
export=False,
service='addons',
)
Mod('cap',
'frappy_psi.sea.SeaReadable', '',
io='sea_addons',
sea_object='cap',
)
Mod('capslope',
'frappy_psi.sea.SeaReadable', '',
io='sea_addons',
sea_object='capslope',
)

View File

@ -0,0 +1,16 @@
Node('be-filter-boa.addon.sea.psi.ch',
'CryoTel be-filter BOA',
)
Mod('sea_addons',
'frappy_psi.sea.SeaClient',
'addons sea connection for be-filter-boa.addon',
config='be-filter-boa.addon',
service='addons',
)
Mod('befilter',
'frappy_psi.sea.SeaReadable', '',
sea_object='befilter',
io='sea_addons',
)

View File

@ -0,0 +1,17 @@
Node('cfg/sea/camea-be-filter.cfg',
'Camea Be-Filter',
)
Mod('sea_addons',
'frappy_psi.sea.SeaClient',
'addons sea connection for camea-be-filter.addon',
config='camea-be-filter.addon',
service='addons',
)
Mod('t_be_filter',
'frappy_psi.sea.SeaReadable',
'Be filter T',
io='sea_addons',
sea_object='t_be_filter',
)

View File

@ -0,0 +1,51 @@
Node('flamesample.psi.ch',
'flame sample thermometers and heater',
interface = 'tcp://5000',
)
Mod('lscio',
'frappy_psi.ls372.StringIO',
'sample channels LS372 io',
uri = 'flamedil-ls.psi.ch:7777',
)
Mod('lsc_channel',
'frappy_psi.ls372.Switcher',
'channel switcher sample ls372',
io='lscio',
value = 3,
)
Mod('ts_low',
'frappy_psi.ls372.TemperatureLoop',
'sample RuOX',
channel = 3,
switcher = 'lsc_channel',
minrange=13,
range=22,
tolerance = 0.1,
htrrng=4,
)
Mod('ts_high',
'frappy_psi.ls372.TemperatureLoop',
'sample Cernox',
channel = 1,
switcher = 'lsc_channel',
minrange=9,
range=22,
tolerance = 0.1,
htrrng=5,
minheater=5e-4,
)
Mod('ts',
'frappy_psi.parmod.SwitchDriv',
'automatically switching between ts_low and ts_high',
value=Param(unit='K'),
low='ts_low',
high='ts_high',
min_high=0.6,
max_low=1.7,
tolerance=0.1,
)

View File

@ -1,14 +0,0 @@
[NODE]
description = FOCUS Beryllium filter with cryotel closed cycle
id = focus-be-filter.addon.sea.psi.ch
[sea_addons]
class = secop_psi.sea.SeaClient
description = SEA connection to addons
config = focus-be-filter.addon
service = addons
[befilter]
class = secop_psi.sea.SeaReadable
io = sea_addons
sea_object = cryo

View File

@ -0,0 +1,16 @@
Node('focus-be-filter.addon.sea.psi.ch',
'FOCUS Beryllium filter with cryotel closed cycle',
)
Mod('sea_addons',
'frappy_psi.sea.SeaClient',
'SEA connection to addons',
config='focus-be-filter.addon',
service='addons',
)
Mod('befilter',
'frappy_psi.sea.SeaReadable', '',
io='sea_addons',
sea_object='cryo',
)

26
cfg/addons/ls372_cfg.py Normal file
View File

@ -0,0 +1,26 @@
Mod('lsc',
'frappy.io.StringIO',
'',
wait_before=0.05,
uri='flamedil-ls:7777',
)
Mod('r1',
'frappy_psi.ls372.ResChannel',
'resistivity from LS 372',
switcher='channel',
channel=1,
)
Mod('r3',
'frappy_psi.ls372.ResChannel',
'resistivity from LS 372',
switcher='channel',
channel=3,
)
Mod('channel',
'frappy_psi.ls372.Switcher',
'LS 372 channel switcher',
io='lsc',
)

View File

@ -0,0 +1,17 @@
Node('stickmotor.linse.psi.ch',
'mobile rotation stage (from MA02)',
)
Mod('stick_io',
'frappy_psi.phytron.PhytronIO',
'dom motor IO',
uri='ldmcc08-ts:3006',
)
Mod('stickrot',
'frappy_psi.phytron.Motor',
'stick rotation, typically not used as omega',
io='stick_io',
encoder_mode='CHECK',
backlash=-1,
)

View File

@ -1,17 +0,0 @@
[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

10
cfg/ah2700test_cfg.py Normal file
View File

@ -0,0 +1,10 @@
Node('AH2700Test.psi.ch',
'AH2700 capacitance bridge test',
'tcp://5000',
)
Mod('cap',
'frappy_psi.ah2700.Capacitance',
'capacitance',
uri='ldmse3-ts:3015',
)

View File

@ -1,111 +0,0 @@
[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

91
cfg/amagnet_cfg.py Normal file
View File

@ -0,0 +1,91 @@
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',
subdev_currentsource = 'currentsource',
subdev_enable = 'enable',
subdev_polswitch = 'polarity',
subdev_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,),
)

View File

@ -1,150 +0,0 @@
[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 Normal file
View File

@ -0,0 +1,148 @@
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},
)

View File

@ -1,50 +0,0 @@
[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

35
cfg/cryo_cfg.py Normal file
View File

@ -0,0 +1,35 @@
#####################################################################
# 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'),
)

View File

@ -1,43 +0,0 @@
[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`."

46
cfg/demo_cfg.py Normal file
View File

@ -0,0 +1,46 @@
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',
subdev_mf = 'mf',
subdev_ts = 'ts',
)

View File

@ -1,8 +0,0 @@
[NODE]
description = sea client (communication only)
id = comm.sea.psi.ch
[seaconn]
class = secop_psi.sea.SeaClient
description = a SEA connection
visibility = 1

9
cfg/develop/sea_cfg.py Normal file
View File

@ -0,0 +1,9 @@
Node('comm.sea.psi.ch',
'sea client (communication only)',
)
Mod('seaconn',
'frappy_psi.sea.SeaClient',
'a SEA connection',
visibility='expert',
)

View File

@ -1,8 +0,0 @@
[NODE]
description = sea client (tool for creating cfg)
id = comm.sea.psi.ch
[seaconn]
class = secop_psi.sea.SeaConfigCreator
description = a SEA connection. will shut down after getting the description
visibility = 1

View File

@ -0,0 +1,11 @@
# error creating module seaconn:
# missing sea port for seadesc
Node('comm.sea.psi.ch',
'sea client (tool for creating cfg)',
)
Mod('seaconn',
'frappy_psi.sea.SeaConfigCreator',
'a SEA connection. will shut down after getting the description',
visibility=1,
)

View File

@ -1,15 +0,0 @@
[NODE]
description = DPM driver for pressure cell
id = dpm.psi.ch
[INTERFACE]
uri = tcp://5000
[force]
description = DPM driver to read out the transducer value, write and read the offset and scale factor
class = secop_psi.dpm.DPM3
# uri = ldmse-d910-ts.psi.ch:3001
uri = serial:///dev/ttyUSB1
digits = 2
scale_factor = 0.0156

12
cfg/dpm_cfg.py Normal file
View File

@ -0,0 +1,12 @@
Node('dpm.psi.ch',
'DPM driver for pressure cell',
interface='tcp://5000',
)
Mod('force',
'frappy_psi.dpm.DPM3',
'DPM driver to read out the transducer value, write and read the offset and scale factor',
uri='serial:///dev/ttyUSB1',
digits=2,
scale_factor=0.0156,
)

View File

@ -1,50 +0,0 @@
[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"

36
cfg/epics_cfg.py Normal file
View File

@ -0,0 +1,36 @@
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,
)

16
cfg/lockin_cfg.py Normal file
View File

@ -0,0 +1,16 @@
Node('lockintest.psi.ch',
'lockin test',
'tcp://5000',
)
Mod('io',
'frappy_psi.SR.SR_IO',
'lockin communication',
uri='10105266.psi.ch:50000',
)
Mod('XY',
'frappy_psi.SR.XY',
'XY channels',
io='io',
)

View File

@ -1,17 +0,0 @@
[NODE]
id = ls240.psi.ch
description = ls240 test
[INTERFACE]
uri = tcp://5000
[T]
description = temperature on uniax stick
class = secop_psi.ls240.Ls240
io = T_io
[T_io]
class = secop.bytesio.BytesIO
description = IO device for LS240
uri = serial:///dev/ttyUSB0?baudrate=9600+parity=EVEN
timeout = 0.2

20
cfg/ls240_cfg.py Normal file
View File

@ -0,0 +1,20 @@
# error importing secop.bytesio.BytesIO
# module T, attached io: Module 'T_io' does not exist on this SEC-Node!
# error initializing T: AttributeError("'NoneType' object has no attribute 'polledModules'")
Node('ls240.psi.ch',
'ls240 test',
interface='tcp://5000',
)
Mod('T',
'frappy_psi.ls240.Ls240',
'temperature on uniax stick',
io='T_io',
)
Mod('T_io',
'frappy.bytesio.BytesIO',
'IO device for LS240',
uri='serial:///dev/ttyUSB0?baudrate=9600+parity=EVEN',
timeout=0.2,
)

23
cfg/ls336_cfg.py Normal file
View File

@ -0,0 +1,23 @@
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
)

36
cfg/ls340_cfg.py Normal file
View File

@ -0,0 +1,36 @@
Node('ls340test.psi.ch',
'ls340 test',
'tcp://5000'
)
Mod('io',
'frappy_psi.lakeshore.Ls340IO',
'communication to ls340',
uri='tcp://ldmprep56-ts:3002'
)
Mod('T',
'frappy_psi.lakeshore.TemperatureLoop340',
'sample temperature',
output_module='Heater',
target=Param(max=470),
io='io',
channel='B'
)
Mod('T_cold_finger',
'frappy_psi.lakeshore.Sensor340',
'cold finger temperature',
io='io',
channel='A'
)
Mod('Heater',
'frappy_psi.lakeshore.HeaterOutput',
'heater output',
channel='B',
io='io',
resistance=25,
max_power=50,
current=1
)

View File

@ -1,25 +0,0 @@
[NODE]
id = ls370res.psi.ch
description = Lsc370 Test
[INTERFACE]
uri = tcp://5000
[lsmain_io]
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:
io = lsmain_io

25
cfg/ls370res_cfg.py Normal file
View File

@ -0,0 +1,25 @@
Node('ls370res.psi.ch',
'Lsc370 Test',
interface='tcp://5000',
)
Mod('lsmain_io',
'frappy_psi.ls370res.StringIO',
'the communication device',
uri='lollypop-ts:3001',
)
Mod('lsmain',
'frappy_psi.ls370res.Main',
'main control of Lsc controller',
uri='lollypop-ts:3001',
)
Mod('res',
'frappy_psi.ls370res.ResChannel',
'resistivity',
iexc='1mA',
channel=5,
main='lsmain',
io='lsmain_io',
)

View File

@ -1,23 +0,0 @@
[NODE]
id = LscSIM.psi.ch
description = Lsc Simulation at PSI
[INTERFACE]
uri = tcp://5000
[res]
class = secop_psi.ls370res.ResChannel
channel = 3
description = resistivity
main = lsmain
io = lscom
[lsmain]
class = secop_psi.ls370res.Main
description = main control of Lsc controller
io = lscom
[lscom]
class = secop_psi.ls370sim.Ls370Sim
description = simulated serial communicator to a LS 370
visibility = 3

30
cfg/ls370sim_cfg.py Normal file
View File

@ -0,0 +1,30 @@
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',
)

View File

@ -1,21 +0,0 @@
[node LscSIM.psi.ch]
description = Lsc370 Test
[interface tcp]
type = tcp
bindto = 0.0.0.0
bindport = 5000
[module lsmain]
class = secop_psi.ls370res.Main
description = main control of Lsc controller
uri = localhost:4567
[module res]
class = secop_psi.ls370res.ResChannel
vexc = '2mV'
channel = 3
description = resistivity
main = lsmain
# the auto created iodev from lsmain:
io = lsmain_io

29
cfg/ls370test_cfg.py Normal file
View File

@ -0,0 +1,29 @@
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',
)

View File

@ -1,20 +0,0 @@
[NODE]
description = sumitomo 4 K closed cycle refrigerator (FOCUS)
id = ccr2.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = SEA connection to main
config = ccr2.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
#[tscreen]
#class = secop_psi.sea.SeaReadable
#io = sea_main
#sea_object = tt
#rel_paths = te

16
cfg/main/ccr2_cfg.py Normal file
View File

@ -0,0 +1,16 @@
Node('ccr2.config.sea.psi.ch',
'sumitomo 4 K closed cycle refrigerator (FOCUS)',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'SEA connection to main',
config='ccr2.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)

View File

@ -1,27 +0,0 @@
[NODE]
description = sumitomo 4 K closed cycle refrigerator with hot stage (FOCUS)
id = ccr2ht.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main SEA connection
config = ccr2ht.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
#[tscreen]
#class = secop_psi.sea.SeaReadable
#io = sea_main
#sea_object = tt
#rel_paths = te
[tcoldfinger]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = tt
rel_paths = tk

23
cfg/main/ccr2ht_cfg.py Normal file
View File

@ -0,0 +1,23 @@
Node('ccr2ht.config.sea.psi.ch',
'sumitomo 4 K closed cycle refrigerator with hot stage (FOCUS)',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main SEA connection',
config='ccr2ht.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('tcoldfinger',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='tt',
rel_paths=['tk'],
)

View File

@ -1,14 +0,0 @@
[NODE]
description = 4 K closed cycle cryostat (ZEBRA)
id = ccr3.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for ccr3.config
config = ccr3.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt

16
cfg/main/ccr3_cfg.py Normal file
View File

@ -0,0 +1,16 @@
Node('ccr3.config.sea.psi.ch',
'4 K closed cycle cryostat (ZEBRA)',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ccr3.config',
config='ccr3.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)

39
cfg/main/ccrpe_cfg.py Normal file
View File

@ -0,0 +1,39 @@
Node('ccrpe.config.sea.psi.ch',
'''4 K closed cycle cryostat (PE cell)''',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ccrpe.config',
config = 'ccrpe.config',
service = 'main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['.', 'tm'],
)
Mod('ts',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='tt',
rel_paths=['ts'],
)
Mod('te',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='tt',
rel_paths=['te'],
)
Mod('warmup',
'frappy_psi.sea.SeaDrivable', '',
io = 'sea_main',
sea_object = 'warmup',
)
Mod('p',
'frappy_psi.sea.SeaReadable', '',
io = 'sea_main',
sea_object = 'p',
)

View File

@ -0,0 +1,37 @@
Node('cfg/main/ccrpe_lowT.cfg',
'4 K closed cycle cryostat (PE cell)',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ccrpe_lowT.config',
config='ccrpe_lowT.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['.', 'tm'],
)
Mod('ts',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='tt',
rel_paths=['ts'],
)
Mod('te',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='tt',
rel_paths=['te'],
)
Mod('warmup',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='warmup',
)

View File

@ -1,43 +0,0 @@
[NODE]
id = cyrosim.psi.ch
description = cryo simulation (similar ppms simulation)
[INTERFACE]
uri = tcp://5000
[tt]
class = secop_psi.ppms.Temp
description = main temperature
meaning = ['temperature_regulation', 10]
ramp = 20
io = ppms
[lev]
class = secop_psi.ppms.Level
description = helium level
io = ppms
[ts]
class = secop_psi.ppms.UserChannel
description = sample temperature
enabled = 1
linkenable = tv
value.unit = K
meaning = ['temperature', 10]
io = ppms
[tv]
class = secop_psi.ppms.UserChannel
description = exchanger temperature
enabled = 1
linkenable = ts
value.unit = K
io = ppms
[ppms]
class = secop_psi.ppms.Main
description = the main and poller module
class_id = QD.MULTIVU.PPMS.1
visibility = 3
pollinterval = 2
export = False

49
cfg/main/cryosim_cfg.py Normal file
View File

@ -0,0 +1,49 @@
Node('cyrosim.psi.ch',
'cryo simulation (similar ppms simulation)',
)
Mod('tt',
'frappy_psi.ppms.Temp',
'main temperature',
meaning=('temperature_regulation', 10),
ramp=20.0,
io='ppms',
)
Mod('lev',
'frappy_psi.ppms.Level',
'helium level',
io='ppms',
)
Mod('ts',
'frappy_psi.ppms.UserChannel',
'sample temperature',
enabled=True,
linkenable='tv',
value=Param(
unit='K',
),
meaning=('temperature', 10),
io='ppms',
)
Mod('tv',
'frappy_psi.ppms.UserChannel',
'exchanger temperature',
enabled=True,
linkenable='ts',
value=Param(
unit='K',
),
io='ppms',
)
Mod('ppms',
'frappy_psi.ppms.Main',
'the main and poller module',
class_id='QD.MULTIVU.PPMS.1',
visibility='expert',
pollinterval=2.0,
export=False,
)

View File

@ -1,14 +0,0 @@
[NODE]
description = 15 K closed cycle cryostat
id = cti5.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for cti5.config
config = cti5.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt

16
cfg/main/cti5_cfg.py Normal file
View File

@ -0,0 +1,16 @@
Node('cti5.config.sea.psi.ch',
'15 K closed cycle cryostat',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for cti5.config',
config='cti5.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)

View File

@ -1,14 +0,0 @@
[NODE]
description = 30 K - 475 K closed cycle cryostat
id = cti7.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for cti7.config
config = cti7.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt

16
cfg/main/cti7_cfg.py Normal file
View File

@ -0,0 +1,16 @@
Node('cti7.config.sea.psi.ch',
'30 K - 475 K closed cycle cryostat',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for cti7.config',
config='cti7.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)

View File

@ -1,14 +0,0 @@
[NODE]
description = 30 K - 475 K closed cycle cryostat with hot stagge
id = cti7ht.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for cti7ht.config
config = cti7ht.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt

16
cfg/main/cti7ht_cfg.py Normal file
View File

@ -0,0 +1,16 @@
Node('cti7ht.config.sea.psi.ch',
'30 K - 475 K closed cycle cryostat with hot stagge',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for cti7ht.config',
config='cti7ht.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)

15
cfg/main/eurotherm_cfg.py Normal file
View File

@ -0,0 +1,15 @@
Node('eurotherm.config.sea.psi.ch',
'Eurotherm controller',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for haakeuro.config',
config = 'eurotherm.config',
service = 'main',
meaning=('temperature', 11),
)
Mod('te',
'frappy_psi.sea.SeaDrivable', '',
io = 'sea_main',
sea_object = 'te',
)

View File

@ -1,36 +0,0 @@
[NODE]
description = thin film oven for AMOR
id = fftf.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for fftf.config
config = fftf.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
[p]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = p
extra_modules = vacuumpump gasflow tlimit tlimit_without_vacuum
[gasflow]
class = secop_psi.sea.SeaWritable
io = sea_main
single_module = p.gasflow
[vacuumpump]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = p
rel_paths = vacuumpump tlimit tlimit_without_vacuum
[table]
class = secop_psi.sea.SeaModule
io = sea_main
sea_object = table

42
cfg/main/fftf_cfg.py Normal file
View File

@ -0,0 +1,42 @@
Node('fftf.config.sea.psi.ch',
'thin film oven for AMOR',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for fftf.config',
config='fftf.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('p',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='p',
extra_modules=['vacuumpump', 'gasflow', 'tlimit', 'tlimit_without_vacuum'],
)
Mod('gasflow',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='p.gasflow',
)
Mod('vacuumpump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='p',
rel_paths=['vacuumpump', 'tlimit', 'tlimit_without_vacuum'],
)
Mod('table',
'frappy_psi.sea.SeaModule', '',
io='sea_main',
sea_object='table',
)

224
cfg/main/flamemag_cfg.py Normal file
View File

@ -0,0 +1,224 @@
Node('flamemag.psi.ch',
'flame magnet',
interface='tcp://5000'
)
Mod('cio',
'frappy_psi.cryoltd.IO',
'IO to cryo ltd software',
uri='tcp://flamedil:3128',
)
Mod('main',
'frappy_psi.cryoltd.Main',
'master module',
io='cio',
)
Mod('B',
'frappy_psi.cryoltd.MainField',
'magnetic field',
channel='Main',
main='main',
constraint=80000.0,
target=Param(
max=35000.0,
),
mode='PERSISTENT',
hw_units='T',
A_to_G=285.73,
ramp=Param(
max=412.0,
),
overshoot={'o': 1.0, 't': 180.0},
degauss={'s': 500.0, 'd': 30.0, 'f': 5.0, 't': 120.0},
tolerance=5.0,
wait_switch_on = 30,
wait_switch_off = 30,
wait_stable_field=180.0,
)
Mod('Bx',
'frappy_psi.cryoltd.ComponentField',
'magnetic field x component',
channel='VMX',
main='main',
check_against='B',
target=Param(
max=200.0,
),
hw_units='A',
A_to_G=4.134,
ramp=Param(
max=23.0,
),
tolerance=1.0,
)
Mod('By',
'frappy_psi.cryoltd.ComponentField',
'magnetic field y component',
channel='VMY',
main='main',
check_against='B',
target=Param(
max=100.0,
),
hw_units='A',
A_to_G=4.1117,
ramp=Param(
max=22.9,
),
tolerance=1.0,
)
Mod('Bz',
'frappy_psi.cryoltd.ComponentField',
'magnetic field z component',
channel='VMZ',
main='main',
check_against='B',
target=Param(
max=100.0,
),
hw_units='A',
A_to_G=5.74,
ramp=Param(
max=33.6,
),
tolerance=1.0,
)
Mod('compressorA',
'frappy_psi.cryoltd.Compressor',
'compressor A',
channel='A',
main='main',
)
Mod('compressorB',
'frappy_psi.cryoltd.Compressor',
'compressor B',
channel='B',
main='main',
)
Mod('T_stage1_A',
'frappy_psi.cryoltd.Temperature', '',
channel='1st Stage A',
main='main',
)
Mod('T_stage2_A',
'frappy_psi.cryoltd.Temperature', '',
channel='2nd Stage A',
main='main',
)
Mod('T_stage1_B',
'frappy_psi.cryoltd.Temperature', '',
channel='1st Stage B',
main='main',
)
Mod('T_stage2_B',
'frappy_psi.cryoltd.Temperature', '',
channel='2nd Stage B',
main='main',
)
Mod('T_top_A',
'frappy_psi.cryoltd.Temperature', '',
channel='Inner Magnet A (Top)',
main='main',
)
Mod('T_bottom_A',
'frappy_psi.cryoltd.Temperature', '',
channel='Inner Magnet A (Bottom)',
main='main',
)
Mod('T_top_B',
'frappy_psi.cryoltd.Temperature', '',
channel='Inner Magnet B (Top)',
main='main',
)
Mod('T_bottom_B',
'frappy_psi.cryoltd.Temperature', '',
channel='Inner Magnet B (Bottom)',
main='main',
)
Mod('T_Z_shim',
'frappy_psi.cryoltd.Temperature', '',
channel='Z Shim Former',
main='main',
)
Mod('T_XY_shim',
'frappy_psi.cryoltd.Temperature', '',
channel='XY Shim Former',
main='main',
)
Mod('T_XY_vector',
'frappy_psi.cryoltd.Temperature', '',
channel='XY Vector Former',
main='main',
)
Mod('T_radiation_shield',
'frappy_psi.cryoltd.Temperature', '',
channel='Radiation Shield',
main='main',
)
Mod('T_persistent_joints',
'frappy_psi.cryoltd.Temperature', '',
channel='Persistent Joints',
main='main',
)
Mod('T_outer_A',
'frappy_psi.cryoltd.Temperature', '',
channel='Outer Magnet A',
main='main',
)
Mod('T_outer_B',
'frappy_psi.cryoltd.Temperature', '',
channel='Outer Magnet B',
main='main',
)
Mod('T_shim_B',
'frappy_psi.cryoltd.Temperature', '',
channel='Z Shim Former B',
main='main',
)
Mod('T_bore_shield',
'frappy_psi.cryoltd.Temperature', '',
channel='Bore Radiation Shield',
main='main',
)
Mod('T_XYZ_shim',
'frappy_psi.cryoltd.Temperature', '',
channel='XYZ Shim Plate',
main='main',
)
Mod('T_Z_shim_switch',
'frappy_psi.cryoltd.Temperature', '',
channel='Z Shim Switch',
main='main',
)
Mod('T_main_switch',
'frappy_psi.cryoltd.Temperature', '',
channel='Main Coil Switch',
main='main',
)

61
cfg/main/flamp_cfg.py Normal file
View File

@ -0,0 +1,61 @@
Node('flamp.config.sea.psi.ch',
'lamp oven control (from manuel knecht)',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for flamp.config',
config='flamp.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['.', 't1'],
)
Mod('t2',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='tt',
rel_paths=['t2'],
)
Mod('current',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='current',
extra_modules=['i1,', 'i2,', 'i3,', 'i4'],
)
Mod('i1',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='current.i1',
)
Mod('i2',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='current.i2',
)
Mod('i3',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='current.i3',
)
Mod('i4',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='current.i4',
)
Mod('pv',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='pv',
)

24
cfg/main/fs_cfg.py Normal file
View File

@ -0,0 +1,24 @@
Node('fs.config.sea.psi.ch',
'small furnace',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for fs.config',
config='fs.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['tm'],
)
Mod('ts',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['ts'],
)

24
cfg/main/ft_cfg.py Normal file
View File

@ -0,0 +1,24 @@
Node('ft.config.sea.psi.ch',
'FT tantalum furnace (1400 K)',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for fw.config',
config='ft.config',
service='main',
)
Mod('ts',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['.', 'ts'],
)
Mod('t2',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='tt',
rel_paths=['tm'],
)

21
cfg/main/haake_cfg.py Normal file
View File

@ -0,0 +1,21 @@
Node('haakeuro.config.sea.psi.ch',
'Haake thermostat + Eurotherm controller',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for haakeuro.config',
config = 'haake.config',
service = 'main',
)
Mod('th',
'frappy_psi.sea.SeaDrivable', '',
meaning = ('temperature', 10),
io = 'sea_main',
sea_object = 'th',
extra_modules=['t2'],
)
Mod('ts',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='th.t2',
)

19
cfg/main/haakeuro_cfg.py Normal file
View File

@ -0,0 +1,19 @@
Node('haakeuro.config.sea.psi.ch',
'Haake thermostat + Eurotherm controller',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for haakeuro.config',
config = 'haakeuro.config',
service = 'main',
)
Mod('th',
'frappy_psi.sea.SeaDrivable', '',
io = 'sea_main',
sea_object = 'th',
)
Mod('te',
'frappy_psi.sea.SeaDrivable', '',
io = 'sea_main',
sea_object = 'te',
)

66
cfg/main/ill1_cfg.py Normal file
View File

@ -0,0 +1,66 @@
Node('ill1.config.sea.psi.ch',
'orange cryostat with 50 mm sample space',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ill1.config',
config='ill1.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
extra_modules=['h'],
visibility=2,
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='cc.h',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('table',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='table',
)

66
cfg/main/ill2_cfg.py Normal file
View File

@ -0,0 +1,66 @@
Node('ill2.config.sea.psi.ch',
'orange cryostat with 70 mm sample space',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ill2.config',
config='ill2.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
extra_modules=['h'],
visibility=2,
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='cc.h',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('table',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='table',
)

72
cfg/main/ill3_cfg.py Normal file
View File

@ -0,0 +1,72 @@
Node('cfg/main/ill3.cfg',
'orange cryofurnace with 70 mm sample space (low T)',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ill3.config',
config='ill3.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
extra_modules=['h'],
visibility=2,
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='cc.h',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('nvflow',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='nvflow',
)
Mod('table',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='table',
)

View File

@ -1,57 +0,0 @@
[NODE]
description = orange cryostat with 70 mm sample space (FOCUS)
id = ill4.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for ill4.config
config = ill4.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
iodev = sea_main
sea_object = tt
[cc]
class = secop_psi.sea.SeaReadable
iodev = sea_main
sea_object = cc
extra_modules = h
visibility = 3
[lev]
class = secop_psi.sea.SeaReadable
iodev = sea_main
single_module = cc.h
[nv]
class = secop_psi.sea.SeaWritable
iodev = sea_main
sea_object = nv
[ln2fill]
class = secop_psi.sea.SeaWritable
iodev = sea_main
sea_object = ln2fill
[hefill]
class = secop_psi.sea.SeaWritable
iodev = sea_main
sea_object = hefill
[hepump]
class = secop_psi.sea.SeaWritable
iodev = sea_main
sea_object = hepump
[hemot]
class = secop_psi.sea.SeaDrivable
iodev = sea_main
sea_object = hemot
visibility = 3
[table]
class = secop_psi.sea.SeaModule
iodev = sea_main
sea_object = table

66
cfg/main/ill4_cfg.py Normal file
View File

@ -0,0 +1,66 @@
Node('ill4.config.sea.psi.ch',
'orange cryostat with 70 mm sample space (FOCUS)',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ill4.config',
config='ill4.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
extra_modules=['h'],
visibility=2,
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='cc.h',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('table',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='table',
)

View File

@ -1,55 +0,0 @@
[NODE]
description = orange cryostat with 100 mm sample space
id = ill5.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main SEA connection to ill5.config
config = ill5.config
service = main
[t]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
[tm]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
rel_paths = tm
[cc]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = cc
[nv]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = nv
[ln2fill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = ln2fill
[hefill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hefill
[hepump]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hepump
[hemot]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = hemot
[table]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = table

66
cfg/main/ill5_cfg.py Normal file
View File

@ -0,0 +1,66 @@
Node('ill5.config.sea.psi.ch',
'orange cryostat with 100 mm sample space',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main SEA connection to ill5.config',
config='ill5.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
extra_modules=['h'],
visibility=2,
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='cc.h',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('table',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='table',
)

102
cfg/main/ill5pgas5_cfg.py Normal file
View File

@ -0,0 +1,102 @@
Node('ill5pgas5.config.sea.psi.ch',
'orange cryostat with 100 mm sample space and pgas5 pressure cell',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ill5pgas5.config',
config='ill5pgas5.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('pauto',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='pauto',
)
Mod('T_capillary',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tc',
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
extra_modules=['h'],
visibility=2,
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
single_module='cc.h',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('nvflow',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='nvflow',
)
Mod('table',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='table',
)
Mod('pccu',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='pccu',
)
Mod('p',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='p',
)
Mod('i1',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='i1',
)

133
cfg/main/jtccr_cfg.py Normal file
View File

@ -0,0 +1,133 @@
Node('jtccr.config.sea.psi.ch',
'CCR with JT-stage',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for jtccr.config',
config='jtccr.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['.', 'tt'],
)
Mod('T_ccr',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='tt',
rel_paths=['ccr'],
)
Mod('jtccr',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='jtccr',
extra_modules=['v1','v2','v3','v4','v5','v6','v7','v8','v9','v10','vm'],
)
Mod('v1',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v1',
)
Mod('v2',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v2',
)
Mod('v3',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v3',
)
Mod('v4',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v4',
)
Mod('v5',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v5',
)
Mod('v6',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v6',
)
Mod('v7',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v7',
)
Mod('v8',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v8',
)
Mod('v9',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v9',
)
Mod('v10',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.v10',
)
Mod('vm',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
single_module='jtccr.vm',
)
Mod('p1',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='p1',
)
Mod('p2',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='p2',
)
Mod('p3',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='p3',
)
Mod('p4',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='p4',
)
Mod('pressreg',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='pressreg',
)
Mod('epc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='epc',
)

View File

@ -1,67 +0,0 @@
[NODE]
description = 1.8 Tesla horizontal cryomagnet
id = ma02.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for ma02.config
config = ma02.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
[cc]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = cc
[nv]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = nv
[ln2fill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = ln2fill
[hepump]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hepump
[hemot]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = hemot
[mf]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = mf
[lev]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = lev
[hefill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hefill
[stick_io]
description = dom motor IO
class = secop_psi.phytron.PhytronIO
uri = ma02-ts.psi.ch:300x
[stickrot]
description = stick rotation, typically not used as omega
class = secop_psi.phytron.Motor
io = stick_io
encoder_mode = CHECK

77
cfg/main/ma02_cfg.py Normal file
View File

@ -0,0 +1,77 @@
Node('ma02.config.sea.psi.ch',
'1.8 Tesla horizontal cryomagnet',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ma02.config',
config='ma02.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('mf',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='mf',
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='lev',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('stick_io',
'frappy_psi.phytron.PhytronIO',
'dom motor IO',
uri='ma02-ts.psi.ch:3003',
)
Mod('stickrot',
'frappy_psi.phytron.Motor',
'stick rotation, typically not used as omega',
io='stick_io',
encoder_mode='CHECK',
)

View File

@ -1,72 +0,0 @@
[NODE]
description = 10 Tesla vertical cryomagnet
id = ma10.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for ma10.config
config = ma10.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
[cc]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = cc
[nv]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = nv
[hepump]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hepump
[hemot]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = hemot
[mf]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = mf
[lev]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = lev
[ln2fill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = ln2fill
[hefill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hefill
[table]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = table
[om_io]
description = dom motor IO
class = secop_psi.phytron.PhytronIO
uri = ma10-ts.psi.ch:3004
[om]
description = stick rotation, typically used for omega
class = secop_psi.phytron.Motor
io = om_io
sign = -1
encoder_mode = CHECK

86
cfg/main/ma10_cfg.py Normal file
View File

@ -0,0 +1,86 @@
Node('ma10.config.sea.psi.ch',
'10 Tesla vertical cryomagnet',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ma10.config',
config='ma10.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('mf',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='mf',
rel_paths=['.', 'gen', 'ips'],
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='lev',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('table',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='table',
)
Mod('om_io',
'frappy_psi.phytron.PhytronIO',
'dom motor IO',
uri='ma10-ts.psi.ch:3004',
)
Mod('om',
'frappy_psi.phytron.Motor',
'stick rotation, typically used for omega',
io='om_io',
target_min = -180,
target_max = 360,
encoder_mode='READ',
)

View File

@ -1,97 +0,0 @@
[NODE]
description = MA11 cryomagnet for SANS
id = ma11.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for ma11.config
config = ma11.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
rel_paths = . tm
[cc]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = cc
[nv]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = nv
[hepump]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hepump
[hemot]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = hemot
[ln2fill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = ln2fill
[hefill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hefill
[lev]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = lev
[mf]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = mf
[tcoil]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = tcoil
[table]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = table
[ccu2]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = ccu2
[lnv]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = lnv
[lpr]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = lpr
[lambdawatch]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = lambdawatch
[stick_io]
description = dom motor IO
class = secop_psi.phytron.PhytronIO
uri = ma11-ts.psi.ch:3005
[stickrot]
description = stick rotation, typically not used as omega
class = secop_psi.phytron.Motor
io = stick_io
encoder_mode = CHECK

114
cfg/main/ma11_cfg.py Normal file
View File

@ -0,0 +1,114 @@
Node('ma11.config.sea.psi.ch',
'MA11 cryomagnet for SANS',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ma11.config',
config='ma11.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['.', 'tm'],
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='lev',
)
Mod('mf',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='mf',
)
Mod('tcoil',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='tcoil',
)
Mod('table',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='table',
)
Mod('ccu2',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ccu2',
)
Mod('lnv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='lnv',
)
Mod('lpr',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='lpr',
)
Mod('lambdawatch',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='lambdawatch',
)
Mod('stick_io',
'frappy_psi.phytron.PhytronIO',
'dom motor IO',
uri='ma11-ts.psi.ch:3005',
)
Mod('stickrot',
'frappy_psi.phytron.Motor',
'stick rotation, typically not used as omega',
io='stick_io',
encoder_mode='NO',
)

97
cfg/main/ma15_cfg.py Normal file
View File

@ -0,0 +1,97 @@
Node('ma15.config.sea.psi.ch',
'''14.9 Tesla superconducting cryomagnet''',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ma15.config',
config = 'ma15.config',
service = 'main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io = 'sea_main',
sea_object = 'tt',
rel_paths = ['.', 'tm']
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io = 'sea_main',
sea_object = 'cc',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io = 'sea_main',
sea_object = 'nv',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io = 'sea_main',
sea_object = 'hefill',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io = 'sea_main',
sea_object = 'hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io = 'sea_main',
sea_object = 'hemot',
)
Mod('nvflow',
'frappy_psi.sea.SeaReadable', '',
io = 'sea_main',
sea_object = 'nvflow',
)
Mod('mf',
'frappy_psi.sea.SeaDrivable', '',
io = 'sea_main',
sea_object = 'mf',
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io = 'sea_main',
sea_object = 'lev',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io = 'sea_main',
sea_object = 'ln2fill',
)
Mod('tcoil',
'frappy_psi.sea.SeaReadable', '',
io = 'sea_main',
sea_object = 'tcoil',
)
Mod('ccu2',
'frappy_psi.sea.SeaWritable', '',
io = 'sea_main',
sea_object = 'ccu2',
)
Mod('lnv',
'frappy_psi.sea.SeaWritable', '',
io = 'sea_main',
sea_object = 'lnv',
)
Mod('lpr',
'frappy_psi.sea.SeaDrivable', '',
io = 'sea_main',
sea_object = 'lpr',
)
Mod('table',
'frappy_psi.sea.SeaReadable', '',
io = 'sea_main',
sea_object = 'table',
)
Mod('stick_io',
'frappy_psi.phytron.PhytronIO',
'om motor IO',
uri='ma15-ts.psi.ch:3005',
)
Mod('om',
'frappy_psi.phytron.Motor',
'stick rotation, typically used as omega',
io='stick_io',
encoder_mode='CHECK',
)

View File

@ -1,67 +0,0 @@
[NODE]
description = compact 6 Tesla vertical cryomagnet
id = ma6.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for ma6.config
config = ma6.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
rel_paths = . tm
[cc]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = cc
[nv]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = nv
[hepump]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hepump
[hemot]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = hemot
[ln2fill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = ln2fill
[hefill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hefill
[mf]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = mf
[lev]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = lev
[om_io]
description = dom motor IO
class = secop_psi.phytron.PhytronIO
uri = ma6-ts.psi.ch:3001
[om]
description = stick rotation, typically used for omega
class = secop_psi.phytron.Motor
io = om_io
encoder_mode = CHECK

81
cfg/main/ma6_cfg.py Normal file
View File

@ -0,0 +1,81 @@
Node('ma6.config.sea.psi.ch',
'compact 6 Tesla vertical cryomagnet',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ma6.config',
config='ma6.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['.', 'tm'],
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('mf',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='mf',
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='lev',
)
Mod('om_io',
'frappy_psi.phytron.PhytronIO',
'dom motor IO',
uri='ma6-ts.psi.ch:3003',
)
Mod('om',
'frappy_psi.phytron.Motor',
'stick rotation, typically used for omega',
io='om_io',
encoder_mode='CHECK',
target_min=-180,
target_max=360,
backlash=-1,
)

View File

@ -0,0 +1,109 @@
Node('ma6_sampleheat.config.sea.psi.ch',
'compact 6 Tesla vertical cryomagnet',
)
Mod('sea_main',
'frappy_psi.sea.SeaClient',
'main sea connection for ma6_sampleheat.config',
config='ma6_sampleheat.config',
service='main',
)
Mod('tt',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='tt',
rel_paths=['tm', 'set'],
)
Mod('th',
'frappy_psi.sea.SeaReadable',
'sample heater temperature',
io='sea_main',
sea_object='tt',
rel_paths=['ts', 'setsamp']
)
Mod('ts0',
'frappy_psi.sea.SeaReadable',
'sample stick exch. temperature',
io='sea_main',
sea_object='tt',
rel_paths=['ts_2']
)
Mod('ts',
'frappy_psi.parmod.Converging',
'test for parmod',
unit='K',
read='th.value',
write='th.setsamp',
meaning=['temperature', 20],
settling_time=20,
tolerance=1,
)
Mod('cc',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='cc',
)
Mod('nv',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='nv',
)
Mod('hepump',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hepump',
)
Mod('hemot',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='hemot',
)
Mod('ln2fill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='ln2fill',
)
Mod('hefill',
'frappy_psi.sea.SeaWritable', '',
io='sea_main',
sea_object='hefill',
)
Mod('mf',
'frappy_psi.sea.SeaDrivable', '',
io='sea_main',
sea_object='mf',
)
Mod('lev',
'frappy_psi.sea.SeaReadable', '',
io='sea_main',
sea_object='lev',
)
Mod('om_io',
'frappy_psi.phytron.PhytronIO',
'dom motor IO',
uri='ma6-ts.psi.ch:3003',
)
Mod('om',
'frappy_psi.phytron.Motor',
'stick rotation, typically used for omega',
io='om_io',
encoder_mode='CHECK',
target_min=-180,
target_max=360,
)

View File

@ -1,84 +0,0 @@
[NODE]
description = 6.8 Tesla horizontal cryomagnet
id = ma7.config.sea.psi.ch
[sea_main]
class = secop_psi.sea.SeaClient
description = main sea connection for ma7.config
config = ma7.config
service = main
[tt]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = tt
rel_paths = . tm
[cc]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = cc
[nv]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = nv
[hefill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hefill
[hepump]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = hepump
[hemot]
class = secop_psi.sea.SeaDrivable
io = sea_main
sea_object = hemot
[ln2fill]
class = secop_psi.sea.SeaWritable
io = sea_main
sea_object = ln2fill
[mf]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = mf
[lev]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = lev
[tcoil1]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = tcoil
rel_paths = ta
[tcoil2]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = tcoil
rel_paths = tb
[table]
class = secop_psi.sea.SeaReadable
io = sea_main
sea_object = table
[stick_io]
description = dom motor IO
class = secop_psi.phytron.PhytronIO
uri = ma7-ts.psi.ch:3007
[stickrot]
description = stick rotation, typically not used as omega
class = secop_psi.phytron.Motor
io = stick_io
encoder_mode = CHECK

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