364 Commits

Author SHA1 Message Date
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
l_samenv
3483c3374d allow pollinterval = 0 2022-12-02 09:10:07 +01:00
l_samenv
d71a512454 new features HasTargetLimits and HasSimpleOffset
according to standard
2022-12-02 09:07:20 +01:00
l_samenv
4405b2b02c new state machine, HasStates mixin 2022-11-21 14:13:52 +01: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
5affb9f31b fix bug in persistent.py
- use dirname instead of basename
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
3ab9821860 improve formatting of values
Change-Id: I4a9290e85ee2071a3f2cfe0d00bc7dc4dcb4caed
2022-09-16 08:06:45 +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
8bfe969a95 HasIO: attached io must not be mandatory
as an uri might be given instead.
2022-09-08 14:55: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
Enrico Faulhaber
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
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
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
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
3e6f1bebf7 added features 2022-05-30 12:07:33 +02:00
f9db90d89b update secop_psi/sea.py
fixes after serveral changes in frappy
2022-04-29 16:30:19 +02:00
cb170bd73b allow a configfile path as single argument to secop-server
when a full path is given as single argument to secop-server,
the server name has to be sanitized

Change-Id: I1d11f076157548e90877f380f0cab3a6a3f96784
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28232
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2022-04-29 14:03:04 +02:00
7316632fa6 improve poller error handling
- repeated errors on poller are only once logged (per poll
  function / read_* method)
- during exception handling, silent=True on a SECoP error indicates
  that the error is already logged
+ fix the name of HardwareError
+ add test for consistency of SECoPErrors
+ catch socket.timeout in AsynTcp

Change-Id: I9df6c775cc19553b22a4d6e39591092adf7ff9a1
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28139
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-04-22 16:35:24 +02:00
2159753398 avoid deadlock in proxy
in secop.proxy the callers modules method announceUpdate is
called from an other thread while the accessLock is locked,
creating a deadlock. solve this by creating an other lock
'updateLock' for the update.

+ add status parameter even to non-Readable proxy modules,
  in order to indicate a failed connection
+ fix an error in secop_psi/softcal.py

Change-Id: Iae7c6d5a74001150a47aa9dc99209c15d972cd5e
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28130
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-04-22 16:35:24 +02:00
8cb3ba7dfc fix error in secop.logging
Implement LogfileHandler.getChild. This is needed to inherit
the configured level from the parent handler.

+ remove redundant assignmet of logfile_handler.max_days

Change-Id: I7277c28221bbb6108d75f2437634e9db9bf6761e
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28140
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-04-22 16:35:24 +02:00
5a553dbdeb motor valve using trinamic motor
This valve needs 8 turns to open. As the encoder forgets
the number if turns on power cycle, a home switch is
mounte, which engages during the last turn when closing.
The final close position is determined by closing the valve
with a defined motor current/torque.

+ fix an issue in StateMachine.start: the first cycle
  must be called after the new state is assigned

Change-Id: I34cd05d10d97b043f9e3126310943b74ee727382
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28030
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-04-22 16:35:24 +02:00
f6f2dd189b use a common poller thread for modules sharing io
When several poller threads are using the same io, the resposivity
of client requests is reduced, as every thread first finishes
its pending communication requests, before it is the turn of the
request thread. This is solved by using one common poller thread
for all modules sharing the same communicator.

+ fix an issue with overriding a property with a parameter, as
  this is the case for pollperiod (cfg was applied to property
  instead of overriding parameter)
+ separate setFastPoll arguments into flag and fast interval
+ fix missing announceUpdate call when read function fails
+ fix mechanism for triggering polls after an io connection
  reconnected again.

Change-Id: I1115a61fae3de80d18416e61f40b52a0eebb637c
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28021
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2022-04-08 15:36:23 +02:00
d5924567da fix statemachine
- fix: calling state.start(<new state>) on restart must ensure
  that the function <new state> is called before state.start()
  returns.
- modify slighly behaviour of cleanup function

Change-Id: I483a3aefa6af4712b3cf13f62c86d4c06edd1d8d
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28020
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-04-08 15:36:23 +02:00
9152ea1d26 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-04-08 15:36:23 +02:00
a124adab97 avoid race conditions in read_*/write_* methods
using one RLock per Module
+ init generalConfig for all tests

Change-Id: I88db6cacdb4aaac2ecd56644ccd6a3e5fd2d1cf2
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28005
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
2022-04-08 15:36:23 +02:00
526a182ed7 init generalConfig.defaults only in secop-server
generalConfig.defaults must not be set on import, as this
depends on import order

Change-Id: I00395b40b4281ddc044c196713f6512068011380
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/27985
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-04-08 15:36:23 +02:00
b1ddc01fbb merge until "support write_ method on readonly param and more"
from gerrit

Change-Id: I8d2ad2a381d3a37947d8afc5e17be0428d94df36
2022-03-21 14:00:12 +01:00
7c9296fe2e even more merges from gerrit
Change-Id: I4cfddc8fd4157ceae353789f2f60d834ec05974e
2022-03-08 10:54:04 +01:00
10018b8cad some more merges from gerrit
- removed files
- modified drivers
- fixed READE.md

Change-Id: I47ae486df4dde3d60cc5e0e328194718dd396d87
2022-03-08 08:54:47 +01:00
57e0a2cc72 add statemachine
Change-Id: Icd35d284329a854a9757cb1963a70662b15fb6bb
2022-03-08 08:37:26 +01:00
a2bfe878b6 add handlers
Change-Id: Ia0604ea9e4fd7a226cf6eccb326df003f88cc4b0
2022-03-08 08:36:40 +01:00
bd246c5ca7 result from merge with gerrit
secop subdir only

Change-Id: I65ab7049719b374ae3ec0259483e7e7d16aafcd1
2022-03-07 17:49:08 +01:00
acb3bdad6a varios fixes at psi repo, as of 2022-02-01
Change-Id: I8cdc849126d52ef0f2f27a0faf661830aac6f874
2022-02-02 09:57:30 +01:00
9109170752 logging as of 2022-02-01
Change-Id: I63c681bea9553cd822b214075b163ca6c42fe0cc
2022-02-02 09:54:54 +01:00
05d0cfb193 history, as of 2022-02-01
Change-Id: I725a57546df8f7c9e5ffe04eb98872f2a609efe4
2022-02-02 09:52:01 +01:00
8253fe471b check for missing supercalls to module init methods
Change-Id: I8b7fe5cdd2883fd45532a3e8ac2d7b32945b36a3
2021-12-21 09:46:50 +01:00
245f4f48bf all members optional be default in struct
this apllies only to the argument in frappy - in the case
of all members optional, they are put into the description,
not honouring issue 69

Change-Id: I8e9e4d9ef6bd5b9bb2748f3c6116b7094cd9e927
2021-12-21 09:21:00 +01:00
c523e8f84e [WIP] work on history writer
Change-Id: If8c42091c734fb8c7b386c06429f1b21a7e169ec
2021-12-03 16:50:34 +01:00
483d4c9d6f add doc string to Persistent.factory_reset
this is mandatory for a Command !
2021-12-03 16:26:07 +01:00
77acda840a fix tests from mlz repo
- fix omit_unchanged
- names too short
+ other pylint complains
Change-Id: I3c277b461fad1a5fdf8e76ff1cc42b8742d1de16

Change-Id: I58fb64f91bcc2efef20df68f5c63a64315413286
2021-11-12 17:16:59 +01:00
1eecc93f71 fix feature for removing commands
from a bug introduced in the 'fix parameter inheritance' change

Change-Id: I757c354130077d8838aac864b21b4f81caa9bccf
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/27096
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>
2021-11-12 17:09:29 +01:00
1d9e07edb4 add more tests and fixes for command inheritance
- fix CommandType.__repr__
- secop/modules.py: command properties are allowed to be configured:
   - section 2: remove comment and rename
   - section 3: all accessible properties should be checked
- command description should be inherited also when taken from docstring
- move test for command inheritance to test_modules.py
- added tests to check for valid properties of commands

Change-Id: I5fd04e03be1faec5e54fed9735620bc5dc0f89c0
2021-11-12 17:07:11 +01:00
9058ef054b various small changes
- set default target unit to '$'
- shorten too verbose error message on client
- add shutdown method to server and dispatcher

Change-Id: Ib3a8b26bc31e988e45a3ff2efd734168d723d794
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/27095
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>
2021-11-12 17:00:17 +01:00