diff --git a/gen_seq_scan1d_array.m b/gen_seq_scan1d_array.m new file mode 100644 index 0000000000000000000000000000000000000000..58dc4b7f0187f2804f72fc6e339361fe40fe17a2 --- /dev/null +++ b/gen_seq_scan1d_array.m @@ -0,0 +1,113 @@ +clear all; + +for num_sequences=1:30 + +seq_name = sprintf('seq_scan1d_array_%d.txt',num_sequences); + +header{1} = '#'; +header{2} = '# Description: $description'; +header{3} = '# Author: Sequencer Library'; +header{4} = '# Date: 2020/04/12'; +header{5} = '#'; +header{6} = sprintf('# This sequence performs a 1D scan of %d steps of $devactuator_attr optimizing $devtarget_attr',num_sequences); +header{7} = '#'; + +cnt = 0; + +error_step = 1 + 7 * num_sequences + 5; + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/ActuatorStart) = read($devactuator_attr)) && (write(this/ActuatorBest) = read(this/ActuatorStart)) && (write(this/TargetBest) = read($devtarget_attr)) && goto(%d);Initializing variables;Error initializing variables;-1',cnt,cnt+1); + +for seq=1:num_sequences + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;read(this/AbsMode) == 1 ? (write(this/ActuatorSet) = (read(this/Val%d)*read(this/Gain))) && goto(%d) : (write(this/ActuatorSet) = (read(this/ActuatorStart) + (read(this/Val%d)*read(this/Gain)))) && goto(%d);Setting $devactuator_attr;Error setting $devactuator_attr;-1;tangoerror=goto(%d)',cnt,seq,cnt+1,seq,cnt+1,error_step); + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;((read(this/ActuatorSet) < read(this/ActuatorMin)) || (read(this/ActuatorSet) > read(this/ActuatorMax))) ? goto(%d) : (write($devactuator_attr) = read(this/ActuatorSet)) && sleep($sleep_step) && goto(%d);Setting $devactuator_attr;Error setting $devactuator_attr;-1;tangoerror=goto(%d)',cnt,cnt+6,cnt+1,error_step); + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;read(this/EnableSeq) == 1 ? command($devseq/Start) && goto(%d) : goto(%d);Starting $devseq;Error starting $devseq;-1;tangoerror=goto(%d)',cnt,cnt+1,cnt+3,error_step); + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (read($devseq/State) == RUNNING) ? goto(%d) : goto(%d);Waiting $devseq RUNNING;Error waiting $devseq;60000;timeouterror=goto(%d),tangoerror=goto(%d)',cnt,cnt,cnt+1,error_step,error_step); + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;(read($devseq/State) == FAULT) ? goto(%d) : goto(%d);Waiting $devseq RUNNING;Error waiting $devseq;-1;tangoerror=goto(%d)',cnt,error_step,cnt+1,error_step); + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;(write(this/TargetNow) = read($devtarget_attr)) && (abs(read(this/TargetNow) - read(this/TargetReference)) < abs(read(this/TargetBest)-read(this/TargetReference))) ? (write(this/TargetBest) = read(this/TargetNow)) && goto(%d) : goto(%d);Acquring $devtarget_attr;Error acquiring $devtarget_attr;-1;tangoerror=goto(%d)',cnt,cnt+1,cnt+2,error_step); + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;read(this/AbsMode) == 1 ? (write(this/ActuatorBest) = (read(this/Val%d)*read(this/Gain))) && goto(%d) : (write(this/ActuatorBest) = (read(this/ActuatorStart) + (read(this/Val%d)*read(this/Gain)))) && goto(%d);Saving best actuator $devactuator_attr;Error saving best actuator $devactuator_attr;-1;tangoerror=goto(%d)',cnt,seq,cnt+1,seq,cnt+1,error_step); +end + +% set best actuator +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write($devactuator_attr) = read(this/ActuatorBest))&& sleep($sleep_step) && goto(%d);Setting best actuator $devactuator_attr;Error setting best actuator $devactuator_attr;-1;tangoerror=goto(%d)',cnt,cnt+5,error_step); + +% last sequencer step +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/EnableSeq) == 1 ? command($devseq/Start) && goto(%d) : goto(%d);Starting $devseq;Error starting $devseq;-1;tangoerror=goto(%d)',cnt,cnt+1,cnt+4,error_step); +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (read($devseq/State) == RUNNING) ? goto(%d) : goto(%d);Waiting $devseq RUNNING;Error waiting $devseq;60000;timeouterror=goto(%d),tangoerror=goto(%d)',cnt,cnt,cnt+1,error_step,error_step); +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(read($devseq/State) == FAULT) ? goto(%d) : goto(%d);Waiting $devseq RUNNING;Error waiting $devseq;-1;tangoerror=goto(%d)',cnt,error_step,cnt+2,error_step); + +% error step +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write($devactuator_attr) = read(this/ActuatorStart)) && sleep($sleep_step) && ((read(this/EnableSeq) == 1) && (read($devseq/State) == RUNNING)) ? command($devseq/Stop) && goto(-1) : goto(-1);Setting best actuator $devactuator_attr;Error setting best actuator $devactuator_attr;-1',cnt); + + +% dynamic attributes +cnt = 0; + +cnt = cnt + 1; +footer{cnt} = 'attr;TargetReference;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;AbsMode;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;EnableSeq;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;Gain;double;1'; +cnt = cnt + 1; +footer{cnt} = 'attr;ActuatorMin;double;-1000'; +cnt = cnt + 1; +footer{cnt} = 'attr;ActuatorMax;double;1000'; +cnt = cnt + 1; +footer{cnt} = 'attr;ActuatorSet;double;0'; + +% permanent stored attributes +for seq=1:num_sequences + cnt = cnt + 1; + footer{cnt} = sprintf('attr;Val%d;double;0',seq); +end + +cnt = cnt + 1; +footer{cnt} = 'attr;ActuatorStart;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;ActuatorBest;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;TargetBest;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;TargetNow;double;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 + +% Wildcards +% $description= +% $devactuator_attr= +% $devtarget_attr= +% $devseq= +% $sleep_step=1 +% $sleep_monitor=3 +% .........