From 78b4d76e0e2a0861245c1451dafc16d7d8b23fce Mon Sep 17 00:00:00 2001 From: Anders Blomdell <anders.blomdell@control.lth.se> Date: Wed, 29 Apr 2020 16:11:44 +0200 Subject: [PATCH] Improved AUTO handling. Made safe-cell logic auto generated --- robotlab_safety/pluto_auto.py | 29 ++++++++++++++++------------- robotlab_safety/safety_2020.sps | Bin 36900 -> 37380 bytes 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/robotlab_safety/pluto_auto.py b/robotlab_safety/pluto_auto.py index aad70ac..1c509d0 100755 --- a/robotlab_safety/pluto_auto.py +++ b/robotlab_safety/pluto_auto.py @@ -17,23 +17,26 @@ class PlutoVariables: pass def codegen(self, expr): - m = re.match('([^=]+)=AND\{(.*),(.*)\}', expr) + m = re.match('([^=]+)=(AND|OR)\{(.*),(.*)\}', expr) if m: lh = m.group(1) - regexp = m.group(2).replace('*', '.*') - rh = [ m.group(3).format(v, pluto=self.by_name[v][0]) - for v in self.by_name if re.match(regexp, v)] - return("%s=%s" % (lh, '*'.join(rh))) - m = re.match('([^=]+)=OR\{(.*),(.*)\}', expr) - if m: - lh = m.group(1) - regexp = m.group(2).replace('*', '.*') - rh = [ m.group(3).format(v, pluto=self.by_name[v][0]) - for v in self.by_name if re.match(regexp, v)] - return("%s=%s" % (lh, '+'.join(rh))) + op = m.group(2) + regexp = m.group(3).replace('*', '.*') + expr = m.group(4) + rh = [] + for k,v in sorted(self.by_name.items()): + rh_m = re.match(regexp, k) + if rh_m: + matches = (k,)+rh_m.groups() + rh.append(expr.format(*matches, pluto=v[0])) + pass + pass + if op == 'AND': + return("%s=%s" % (lh, '*'.join(rh))) + elif op == 'OR': + return("%s=%s" % (lh, '+'.join(rh))) raise Exception('Invalid expression', expr) - class SPS: def __init__(self, path): diff --git a/robotlab_safety/safety_2020.sps b/robotlab_safety/safety_2020.sps index ee34758432839b35543cfa953662fb5b4fbd4fc9..d99544cff6b84fd63ddda81b2e6ef2fde151cff0 100644 GIT binary patch delta 582 zcmZ3ofT?8((}oMYlO5F9ChPFoOcvr3nS6oQX>$f&Uov|zLn1>OL+a#M4oP7xh5!a* zhIj@?hIj^;xM`7MG7_JGmw}7Hn!%AFlp%z{pTUYDfWeT#0HL12mcgGPh@l!Tp2$$b z5YM2&5Wt|tpvj=aP|aY#P|KjjP|aY-P>awv`FUZaq$5KqLkUAZ1IQgHrf#k;`pye? zYG8u!<aeqZf|!mq)DfP%A(3P9g$A}{XN2Kc9c_ptkL+lWII)gSZ$Ni6NH;X-Hvez< z&C3bpFxXDkSCbURa597T<o&$j^&lUcFvK%BAvp?LNE;!^BRd)-PNbt5YQez)iZ_rh YSB78)+sXg?T+u=wBnNf-<mUc`0H+CbR{#J2 delta 117 zcmZo!!n9-o(}oMYlN%<mP1fPFnJmO7GWi0p)8-7mzU0Y!io7P96p2mNh~b(1fthFW zp**3@3dP@eC*NuGnrx%PF?mBG$7H1#xyg&_gf=@g{o<W8(Q9(W1c-))XdXc=h5!ab V1|x=e21kZch7yMS$;lHJ0sv|hDv|&I -- GitLab