From e6c553070330cbbc47647eb4514177b073547fc3 Mon Sep 17 00:00:00 2001
From: Lorenzo Pivetta <lorenzo.pivetta@elettra.eu>
Date: Mon, 29 May 2023 15:13:48 +0200
Subject: [PATCH] First import

---
 gen_seq_mimofb_on.m      | 149 ++++++++++++++++++++++++++++++++++++++
 gen_seq_mimofb_on_fast.m | 150 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 299 insertions(+)
 create mode 100644 gen_seq_mimofb_on.m
 create mode 100644 gen_seq_mimofb_on_fast.m

diff --git a/gen_seq_mimofb_on.m b/gen_seq_mimofb_on.m
new file mode 100644
index 0000000..4860a48
--- /dev/null
+++ b/gen_seq_mimofb_on.m
@@ -0,0 +1,149 @@
+clear all;
+
+for num_sequences=1:32
+
+seq_name = sprintf('seq_mimofb_on_%d.txt',num_sequences);
+
+header{1} = '#';
+header{2} = '# Description: $description';
+header{3} = '# Author: Sequencer Library';
+header{4} = '# Date: 2019/05/31';
+header{5} = '#';
+header{6} = sprintf('# This sequence switches ON %d mimo feedbacks',num_sequences);
+header{7} = '#';
+
+cnt = 0;
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;(write(this/TimeoutError) = 0) && (write(this/CommunicationError) = 0) && (write(this/StateError) = 0) && (write(this/MonitorError) = 0) && (write(this/MonitorErrorCnt) = read($devmon_attr)) && goto(%d);Reading dcct monitor error counter;Error reading dcct monitor error counter;-1',cnt,cnt+1);
+
+% Turn feedbacks ON
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;(read(this/EnableFb%d) == 1) && (read($devfb%d$/State) != ON) && (read($devfb%d$/State) != MOVING) ? command($devfb%d$/On) && goto(%d) : goto(%d);Starting $devfb%d$ local feedback;Error starting $devfb%d$ local feedback;-1;tangoerror=goto(%d)',cnt,seq,seq,seq,seq,cnt+1,cnt+1,seq,seq,num_sequences*2+6);
+end
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;sleep($sleep_wait_refresh_state) && goto(%d);Waiting after reset ;Error waiting after reset;-1',cnt,cnt+1);
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;sleep($sleep_monitor_state) && (write(this/ActiveCounter) = 0) && read($devmon_attr) > read(this/MonitorErrorCnt) ? goto(%d) : goto(%d);Checking $devmon_attr monitor counter;Error checking $devmon_attr monitor counter;$correction_timeout000;tangoerror=goto(%d),timeouterror=goto(%d)',cnt,num_sequences*2+5,cnt+1,num_sequences*2+6,num_sequences*2+7);
+
+% Check feedback target distance error threshold
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;(read(this/EnableFb%d) == 1) && (read($devfb%d$/State) == ON) && (read($devfb%d$/TargetDistance) >= read(this/TargetDistanceThreshold)) ? (write(this/ActiveCounter) = (read(this/ActiveCounter) + 1)) && goto(%d) : goto(%d) ;Checking $devfb%d$ running state;Error checking $devfb%d$ running;-1;tangoerror=goto(%d)',cnt,seq,seq,seq,cnt+1,cnt+1,seq,seq,num_sequences*2+6); 
+end
+
+% check the number of active loops (loops that run and out of target
+% threshold
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;read(this/ActiveCounter) == 0 ? goto(%d) : goto(%d);Checking active feedback counter;Error checking active feedback counter;-1;tangoerror=goto(%d)',cnt,cnt+4,num_sequences+3,cnt+1);
+
+% Monitor error alarm
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;(write(this/MonitorError) = read(this/MonitorError) + 1) && goto(%d);Incrementing monitor error counter;Failed to increment monitor error counter;-1',cnt,cnt+3);
+
+% Communication error alarm
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;(write(this/CommunicationError) = read(this/CommunicationError) + 1) && goto(%d);Incrementing communication error counter;Failed to increment communication error counter;-1',cnt,cnt+2);
+
+% Timeout error alarm
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;(write(this/TimeoutError) = read(this/TimeoutError) + 1) && goto(%d);Incrementing timeout error counter;Failed to increment timeout error counter;-1',cnt,cnt+1);
+
+% Turn feedbacks in STANDBY
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    if seq == 1
+        blk{cnt} = sprintf('step%d;read(this/EnableFb%d) == 1 ? command($devfb%d$/Standby) && goto(%d) : goto(%d);Setting $devfb%d$ in STANDBY;Error setting $devfb%d$ in STANDBY;-1;tangoerror=goto(%d),exit',cnt,seq,seq,cnt+1,cnt+1,seq,seq,cnt+1);
+    else
+        blk{cnt} = sprintf('step%d;read(this/EnableFb%d) == 1 ? command($devfb%d$/Standby) && goto(%d) : goto(%d);Setting $devfb%d$ in STANDBY;Error setting $devfb%d$ in STANDBY;-1;tangoerror=goto(%d)',cnt,seq,seq,cnt+1,cnt+1,seq,seq,cnt+1);
+    end
+end
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;sleep($sleep_wait_refresh_state) && goto(%d);Waiting after standby ;Error waiting after standby;-1',cnt,cnt+1);
+
+% Turn feedbacks in OFF
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;read(this/EnableFb%d) == 1 ? command($devfb%d$/Off) && goto(%d) : goto(%d);Setting $devfb%d$ in OFF;Error setting $devfb%d$ in OFF;-1;tangoerror=goto(%d)',cnt,seq,seq,cnt+1,cnt+1,seq,seq,cnt+1);
+end
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;sleep($sleep_wait_refresh_state) && goto(%d);Waiting after off;Error waiting after off;-1',cnt,cnt+1);
+
+% Check feedback state
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;((read(this/EnableFb%d) == 1) && (read($devfb%d$/State) == OFF)) ? goto(%d) : (write(this/StateError) = read(this/StateError) + 1) && goto(%d);Checking $devfb%d$ state;$devfb%d$ state is not OFF;-1 ',cnt,seq,seq,cnt+1,cnt+1,seq,seq);
+end
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;read(this/CommunicationError) == 0 ? goto(%d) : goto(-1);Checking communication error;Communication error;-1',cnt,cnt+1);
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;read(this/StateError) == 0 ? goto(%d) : goto(-1);Checking feedback state error;Feedback in FAULT;-1',cnt,cnt+1);
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;read(this/MonitorError) == 0 ? goto(%d) : goto(-1);Checking monitor error;Monitor error;-1',cnt,cnt+1);
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;read(this/TimeoutError) == 0 ? goto(%d) : goto(-1);Checking timeout error;Timeout error;-1',cnt,cnt+1);
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;goto(%d);Success;Success;-1',cnt,cnt+1);
+
+
+% dynamic attributes
+cnt = 0; 
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    footer{cnt} = sprintf('attr;EnableFb%d;bool;1',seq);
+end
+cnt = cnt + 1;
+footer{cnt} = 'attr;TargetDistanceThreshold;double;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;CommunicationError;long;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;StateError;long;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;MonitorError;long;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;TimeoutError;long;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;MonitorErrorCnt;long;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;ActiveCounter;long;0';
+
+fileID = fopen(seq_name,'w');
+for i=1:size(header,2)
+    fprintf(fileID,'%s\n',header{i});
+end
+for i=1:size(blk,2)
+    fprintf(fileID,'%s\n',blk{i});
+end
+for i=1:size(footer,2)
+    fprintf(fileID,'%s\n',footer{i});
+end
+
+fclose(fileID);
+
+end
+
+% Dynamic R/W attributes
+% Internal
+% attr;ErrorCnt;long;0
+% attr;MonitorErrorCnt;long;0
+
+% Wildcards
+% $description=
+% $devmon_attr=seq/monitor/dcct_sr/ErrorCount
+% sleep_monitor_state=1
+% $sleep_wait_refresh_state=3
+% $correction_timeout=120
+% $devfb1=
+% $devfb2=
+% $devfb3=
+% .........
+
diff --git a/gen_seq_mimofb_on_fast.m b/gen_seq_mimofb_on_fast.m
new file mode 100644
index 0000000..fae7ad7
--- /dev/null
+++ b/gen_seq_mimofb_on_fast.m
@@ -0,0 +1,150 @@
+clear all;
+
+for num_sequences=1:32
+
+seq_name = sprintf('seq_mimofb_on_fast_%d.txt',num_sequences);
+
+header{1} = '#';
+header{2} = '# Description: $description';
+header{3} = '# Author: Sequencer Library';
+header{4} = '# Date: 2019/05/31';
+header{5} = '#';
+header{6} = sprintf('# This sequence switches fastly ON/STANDBY/OFF %d mimo feedbacks',num_sequences);
+header{7} = '#';
+
+
+standby_step = 4 + num_sequences * 3;
+off_step = standby_step + num_sequences * 2 + 3;
+final_check_step = off_step +num_sequences * 2 + 2;
+
+cnt = 0;
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;(write(this/FbDone) = 0) && (write(this/ErrCountStart) = read($devmon_attr)) &&  (read(this/ImmediateOff) == 1) ? goto(%d) : goto(%d);Reset variables;Error resetting variables;-1',cnt,off_step,cnt+1);
+
+% Turn feedbacks ON
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;((read(this/EnableFb%d) == 1) && (read($devfb%d$/State) != ON) && (read($devfb%d$/State) != MOVING)) ? command($devfb%d$/On) && goto(%d) : goto(%d);Starting $devfb%d$ local feedback;Error starting $devfb%d$ local feedback;-1;tangoerror=goto(%d)',cnt,seq,seq,seq,seq,cnt+1,cnt+1,seq,seq,cnt+1);
+end
+
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;sleep($sleep_monitor_state) && sleep($sleep_wait_refresh_state) && (write(this/FbDone) = 0) && goto(%d);Waiting feedback convergence;Error waiting feedback convergence;$correction_timeout000;timeouterror=goto(%d)',cnt,cnt+1,standby_step);
+
+% Wait feedback going under error threshold
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;((read($devfb%d$/TargetDistance) < read(this/TargetDistanceThreshold)) || (read(this/EnableFb%d) == 0)) ? (write(this/FbDone) = (read(this/FbDone) + 1)) && goto(%d) : goto(%d);Checking $devfb%d$ error;Error checking $devfb%d$ error;-1;tangoerror=goto(%d)',cnt,seq,seq,cnt+1,cnt+1,seq,seq,standby_step);
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;read(this/ErrCountStart) < read($devmon_attr) ? goto(%d) : goto(%d);Checking external error condition;Error checking external error condition;-1',cnt,standby_step,cnt+1);
+end
+
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;read(this/FbDone) >= %d ? goto(%d) : goto(%d);Check all feedback converged;Error checking all feedback converged;-1',cnt,num_sequences,cnt+1,cnt-num_sequences*2-1);
+
+% Turn feedbacks in STANDBY
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    % exit condition in the first line 
+    if seq == 1
+        blk{cnt} = sprintf('step%d;((read(this/EnableFb%d) == 1) && ((read($devfb%d$/State) == ON) || (read($devfb%d$/State) == MOVING))) ? command($devfb%d$/Standby) && goto(%d) : goto(%d);Standbying $devfb%d$ feedback;Error standbying $devfb%d$ feedbacks;-1;tangoerror=goto(%d),exit',cnt,seq,seq,seq,seq,cnt+1,cnt+1,seq,seq,cnt+1);
+    else
+        blk{cnt} = sprintf('step%d;((read(this/EnableFb%d) == 1) && ((read($devfb%d$/State) == ON) || (read($devfb%d$/State) == MOVING))) ? command($devfb%d$/Standby) && goto(%d) : goto(%d);Standbying $devfb%d$ feedback;Error standbying $devfb%d$ feedbacks;-1;tangoerror=goto(%d)',cnt,seq,seq,seq,seq,cnt+1,cnt+1,seq,seq,cnt+1);
+    end
+end
+
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;sleep($sleep_wait_refresh_state) && (write(this/FbDone) = 0) && goto(%d);Reset variables;Error resetting variables;$wait_timeout_state000;timeouterror=goto(%d)',cnt,cnt+1,off_step);
+
+% Wait feedback going in STANDBY state
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;((read($devfb%d$/State) == OFF) || (read($devfb%d$/State) == STANDBY) || (read(this/EnableFb%d) == 0)) ? (write(this/FbDone) = (read(this/FbDone) + 1)) && goto(%d) : goto(%d);Checking $devfb%d$ error;Error checking $devfb%d$ error;-1;tangoerror=goto(%d)',cnt,seq,seq,seq,cnt+1,cnt+1,seq,seq,off_step);
+end
+
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;read(this/FbDone) >= %d ? goto(%d) : goto(%d);Check all feedback in STANDBY;Error checking all feedback in STANDBY;-1',cnt,num_sequences,cnt+1,cnt-num_sequences-1);
+
+% exit on standby
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;read(this/ExitOnStandby) == 1 ? goto(%d) : goto(%d);Exiting on STANDBY;Error exiting on STANDBY;-1',cnt,final_check_step,cnt+1);
+
+% Turn feedbacks in OFF
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;((read(this/EnableFb%d) == 1) && ((read($devfb%d$/State) == STANDBY) || (read($devfb%d$/State) == FAULT))) ? command($devfb%d$/Off) && goto(%d) : goto(%d);Turning off $devfb%d$ feedback;Error turning off $devfb%d$ feedbacks;-1;tangoerror=goto(%d)',cnt,seq,seq,seq,seq,cnt+1,cnt+1,seq,seq,cnt+1);
+end
+
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;(write(this/FbDone) = 0) && sleep($sleep_wait_refresh_state) &&  goto(%d);Reset variables;Error resetting variables;$wait_timeout_state000;timeouterror=goto(%d)',cnt,cnt+1,final_check_step);
+
+% Wait feedback going in STANDBY state
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;((read($devfb%d$/State) == OFF) || (read(this/EnableFb%d) == 0))? (write(this/FbDone) = (read(this/FbDone) + 1)) && goto(%d) : goto(%d);Checking $devfb%d$ OFF state;Error checking $devfb%d$ OFF state;-1;tangoerror=goto(%d)',cnt,seq,seq,cnt+1,cnt+1,seq,seq,cnt+1);
+end
+
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;read(this/FbDone) >= %d ? (write(this/FbDone) = 0) && goto(%d) : goto(%d);Check all feedback in OFF state;Error checking all feedback in OFF state;-1',cnt,num_sequences,cnt+1,cnt-num_sequences-1);
+
+% Wait feedback going in STANDBY state
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;read(this/EnableFb%d) == 0 ? (write(this/FbDone) = (read(this/FbDone) + 1)) && goto(%d) : goto(%d);Checking $devfb%d$ OFF state(1);Error checking $devfb%d$ OFF state(1);-1',cnt,seq,cnt+2,cnt+1,seq,seq);
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;(((((read($devfb%d$/State) == STANDBY) && (read(this/ExitOnStandby) == 1)) || (read($devfb%d$/State) == OFF)) && (read($devfb%d$/TargetDistance) <= (read(this/TargetDistanceThreshold)*10))) || (read(this/EnableFb%d) == 0)) ? (write(this/FbDone) = (read(this/FbDone) + 1)) && goto(%d) : goto(%d);Checking $devfb%d$ OFF state(1);Error checking $devfb%d$ OFF state(1);-1',cnt,seq,seq,seq,seq,cnt+1,cnt+1,seq,seq);
+end
+
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;((read(this/FbDone) >= %d) || (read(this/ImmediateOff) == 1)) ? goto(%d) : goto(-1);Exit;Exit on error;-1',cnt,num_sequences,cnt+1);
+
+
+
+% dynamic attributes
+cnt = 0; 
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    footer{cnt} = sprintf('attr;EnableFb%d;bool;1',seq);
+end
+cnt = cnt + 1;
+footer{cnt} = 'attr;ExitOnStandby;bool;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;ImmediateOff;bool;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;TargetDistanceThreshold;double;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;FbDone;long;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;ErrCountStart;long;0';
+
+
+fileID = fopen(seq_name,'w');
+for i=1:size(header,2)
+    fprintf(fileID,'%s\n',header{i});
+end
+for i=1:size(blk,2)
+    fprintf(fileID,'%s\n',blk{i});
+end
+for i=1:size(footer,2)
+    fprintf(fileID,'%s\n',footer{i});
+end
+
+fclose(fileID);
+
+end
+
+% Dynamic R/W attributes
+% Internal
+% attr;ErrorCnt;long;0
+% attr;MonitorErrorCnt;long;0
+
+% Wildcards
+% $description=
+% $sleep_wait_refresh_state=4
+% $timeout_wait_state=10
+% $correction_timeout=120
+% $devfb1=
+% $devfb2=
+% $devfb3=
+% .........
+
+
-- 
GitLab