diff --git a/gen_seq_mimofb_on.m b/gen_seq_mimofb_on.m new file mode 100644 index 0000000000000000000000000000000000000000..4860a483269485982cc9803d6fcc32cf45bfee42 --- /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 0000000000000000000000000000000000000000..fae7ad755463cd5531143eceace4cc5a44c1e0b1 --- /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= +% ......... + +