diff --git a/gen_seq_optdir.m b/gen_seq_optdir.m new file mode 100644 index 0000000000000000000000000000000000000000..03f3d57f4f8ba431464d82646a23f72fe2ed1133 --- /dev/null +++ b/gen_seq_optdir.m @@ -0,0 +1,166 @@ +clear all; + +for num_sequences=1:32 + +seq_name = sprintf('seq_optdir_%d.txt',num_sequences); + +header{1} = '#'; +header{2} = '# Description: $description'; +header{3} = '# Author: Giulio Gaio'; +header{4} = '# Date: 2020/12/22'; +header{5} = '#'; +header{6} = sprintf('# This sequence executes direction optimization looking %d sensors',num_sequences); +header{7} = '#'; + +start_step = 1; +error_step = 15 + num_sequences; +correction_step = 9; + +cnt = 0; +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/SleepCnt) = 0) && (write(this/Direction) = 0) && (write(this/CorrectionVal) = 0) && goto(%d);Resetting variables;Error resetting variables;-1',cnt,cnt+1); + +% sleep +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (write(this/SleepCnt) = (read(this/SleepCnt) + 1)) && (read(this/SleepCnt) >= read(this/MaxSleepCnt)) ? goto(%d) : goto(%d);Sleeping;Error sleeping;-1',cnt,cnt+1,cnt); + +% start condition +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(($condition_run) && ($condition_corr)) ? (write(this/ActuatorStartValue) = read($devactuator_rr_attr)) && (write(this/RunErrorFlag) = 0) && goto(%d) : (write(this/RunErrorFlag) = 1) && (write(this/CorrectionErrorFlag) = 0) && goto(%d);Evaluating run condition;Error evaluating run condition;-1;tangoerror=goto(%d)', cnt, cnt+1, start_step, error_step); + + +% positive kick +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/SleepCnt) = 0) && (read(this/RandomMode) == 1) ? (write($devactuator_w_attr) = (read(this/ActuatorStartValue) + (read(this/KickVal) * $random))) && goto(%d) : (write($devactuator_w_attr) = (read(this/ActuatorStartValue) + read(this/KickVal))) && goto(%d);Positive excitation;Error executing positive excitation;-1;tangoerror=goto(%d)',cnt,cnt+1,cnt+1,error_step); + +% sleep +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (write(this/SleepCnt) = (read(this/SleepCnt) + 1)) && (read(this/SleepCnt) >= read(this/MaxSleepCnt)) ? goto(%d) : goto(%d);Sleeping;Error sleeping;-1',cnt,cnt+1,cnt); + +% negative kick +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/SleepCnt) = 0) && (read(this/RandomMode) == 1) ? (write($devactuator_w_attr) = (read(this/ActuatorStartValue) - (read(this/KickVal) * $random))) && goto(%d) : (write($devactuator_w_attr) = (read(this/ActuatorStartValue) + read(this/KickVal))) && goto(%d);Negative excitation;Error executing negative excitation;-1;tangoerror=goto(%d)',cnt,cnt+1,cnt+1,error_step); + +% sleep +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (write(this/SleepCnt) = (read(this/SleepCnt) + 1)) && (read(this/SleepCnt) >= read(this/MaxSleepCnt)) ? goto(%d) : goto(%d);Sleeping;Error sleeping;-1',cnt,cnt+1,cnt); + + +% set starting value +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write($devactuator_w_attr) = read(this/ActuatorStartValue)) && (write(this/TangoErrorFlag) = 0) && goto(%d);Initializing $devactuator_attr;Error initializing $devactuator_attr;-1;tangoerror=goto(%d)',cnt,cnt+1,error_step); + +% resetting timing counter +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/SleepCnt) = 0) && goto(%d);Resetting variables;Error resetting variables;-1',cnt,cnt+1); + +% sleep +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (write(this/SleepCnt) = (read(this/SleepCnt) + 1)) && (read(this/SleepCnt) >= read(this/MaxSleepCnt)) ? goto(%d) : goto(%d);Sleeping;Error sleeping;-1',cnt,cnt+1,cnt); + +% check run condition and correction condition +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(($condition_run) && ($condition_corr)) ? (write(this/CorrectionErrorFlag) = 0) && goto(%d) : (write(this/CorrectionErrorFlag) = 1) && goto(%d);Checking correction condition;Error checking correction condition;-1;tangoerror=goto(%d)',cnt,cnt+1,start_step,error_step); + +% start sequences +for seq=1:num_sequences + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;(((read(this/TargetSelectorMask) & 0x%x) > 0) && (read($devdir_attr%02d$) != 0)) ? (write(this/Direction) = read($devdir_attr%02d$)) && goto(%d) : (write(this/Direction) = 0) && goto(%d);tangoerror=goto(%d)',cnt,2^(seq-1),seq,seq,cnt+num_sequences+2-seq,cnt+1,error_step); +end + +% error in the target +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;goto(%d);Checking target selector;Invalid target selector or target fault;-1',cnt,start_step); + +% calculate correction +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/CorrectionVal) = (read(this/Direction) * read(this/KickVal))) && (read(this/RandomMode) == 1) ? (write(this/CorrectionVal) = (read(this/CorrectionVal)* $random)) && goto(%d) : goto(%d);Calculating correction kick;Error calculating correction kick;-1;tangoerror=goto(%d)',cnt,cnt+1,cnt+1,error_step); + +% apply correction +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/CorrectionVal) == 0 ? (write(this/DataErrorFlag) = 1) && goto(%d) : (write($devactuator_w_attr) = (read($devactuator_wr_attr) + read(this/CorrectionVal))) && (write(this/DataErrorFlag) = 0) && (write(this/TangoErrorFlag) = 0) && goto(%d);-1;tangoerror=goto(%d)',cnt,start_step,cnt+2,error_step); + +% error step +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/TangoErrorFlag) = 1) && goto(%d);Setting tango error flag;Error setting Tango error flag;-1',cnt,start_step); + +% explore +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/ExploreMode) == 1 ? goto(%d) : goto(%d);Check kick mode;Error checking kick mode;-1',cnt,start_step,correction_step); + + +% +% Dynamic attributes +% +cnt = 0; +cnt = cnt + 1; +footer{cnt} = 'attr;TargetSelectorMask;long;1'; +cnt = cnt + 1; +footer{cnt} = 'attr;KickVal;double;1'; +cnt = cnt + 1; +footer{cnt} = 'attr;RandomMode;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;ExploreMode;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;MaxSleepCnt;long;10'; +% +% R/o dynamic attributes +% +cnt = cnt + 1; +footer{cnt} = 'attr;RunErrorFlag;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;CorrectionErrorFlag;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;DataErrorFlag;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;TangoErrorFlag;bool;0'; +% +% Internal dynamic attributes +% +cnt = cnt + 1; +footer{cnt} = 'attr;ActuatorStartValue;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;ActuatorCurValue;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;Direction;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;CorrectionVal;double;1'; +cnt = cnt + 1; +footer{cnt} = 'attr;SleepCnt;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 + +% +% Wildcards +% +% $description= +% $devactuator_rr_attr= +% $devactuator_wr_attr= +% $devactuator_w_attr= +% $condition_run= +% $condition_corr= +% $random= +% $direction01$= +% $direction02$= +% $direction03$= +% $direction04$= +% $direction05$= +% $direction06$= +% $direction07$= +% $direction08$= +% $direction09$= +% $direction10$= +% $sleep_monitor= diff --git a/gen_seq_optwait.m b/gen_seq_optwait.m new file mode 100644 index 0000000000000000000000000000000000000000..ad2140ad8bceefef9c65a92c2bc880460f0f5f23 --- /dev/null +++ b/gen_seq_optwait.m @@ -0,0 +1,148 @@ +clear all; + +for num_sequences=1:32 + +seq_name = sprintf('seq_optwait_%d.txt',num_sequences); + +header{1} = '#'; +header{2} = '# Description: $description'; +header{3} = '# Author: Giulio Gaio'; +header{4} = '# Date: 2020/12/22'; +header{5} = '#'; +header{6} = sprintf('# This sequence waits optimization looking %d sensors',num_sequences); +header{7} = '#'; + +start_step = 1; +error_step = 14 + num_sequences; +correction_step = 9; + +cnt = 0; +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/ImproveFlag) = 0) && (write(this/OptimizationElapsedTime) = 0) && (write(this/StartTime) = read($devtime_attr)) && (write(this/BestTime) = read(this/StartTime)) && (write(this/TargetStartVal) = 0) && (write(this/TargetCurVal) = 0) && (write(this/TargetEndVal) = 0) && goto(%d);Initializing start time;Error initializing start time;-1',cnt,cnt+1); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/MinimizationMode) == 0 ? (write(this/TargetBestVal) = -1000000000) && goto(%d) : (write(this/TargetBestVal) = 1000000000) && goto(%d);Initializing best value;Error initializing best value;-1',cnt,cnt+1,cnt+1); + + +for seq=1:num_sequences + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;(((read(this/TargetSelectorMask) & 0x%x) > 0) && (read($devtarget_attr%02d$) != 0)) ? (write(this/TargetStartVal) = read($devtarget_attr%02d$)) && (write(this/LastTargetSelector) = 0x%x) && goto(%d) : goto(%d);Reading $devtarget_attr%02d$;Error reading $devtarget_attr%02d$;-1;tangoerror=goto(%d)',cnt,2^(seq-1),seq,seq,2^(seq-1),cnt+1+num_sequences-seq+1,cnt+1,seq,seq,cnt+1); +end + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;sleep(1) && (write(this/CurTime) = read($devtime_attr)) && goto(%d);Checking target selector;Invalid target selector or target fault;-1',cnt,cnt+2+num_sequences+5); +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (write(this/CurTime) = read($devtime_attr)) && goto(%d);Reading current time;Error reading current time;-1',cnt,cnt+1); + +for seq=1:num_sequences + cnt = cnt + 1; + blk{cnt}=sprintf('step%d;(((read(this/TargetSelectorMask) & 0x%x) > 0) && (read($devtarget_attr%02d$) != 0)) ? (write(this/TargetCurVal) = read($devtarget_attr%02d$)) && (write(this/LastTargetSelector) = 0x%x) && goto(%d) : goto(%d);Reading $devtarget_attr%02d$;Error reading $devtarget_attr%02d$;-1;tangoerror=goto(%d)',cnt,2^(seq-1),seq,seq,2^(seq-1),cnt+1+num_sequences-seq+1,cnt+1,seq,seq,cnt+1); +end + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;sleep(1) && goto(%d);Checking sensor selector;Invalid sensor selector;-1',cnt,cnt+5); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/MinimizationMode) == 0 ? goto(%d) : goto(%d);Checking wait logic,Error checking wait logic;-1',cnt,cnt+1,cnt+2); +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/TargetCurVal) > read(this/TargetBestVal) ? goto(%d) : goto(%d);Checking max best value;Error checking max best value;-1',cnt,cnt+2,cnt+3); +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/TargetCurVal) < read(this/TargetBestVal) ? goto(%d) : goto(%d);Checking min best value;Error checking min best value;-1',cnt,cnt+1,cnt+2); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/BestTime) = read($devtime_attr)) && (write(this/TargetBestVal) = read(this/TargetCurVal)) && goto(%d);Setting new best val;Error setting new best val;-1',cnt,cnt+1); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(((read(this/CurTime)-read(this/StartTime)) < read(this/MaxWaitTime)) && ((read(this/CurTime)-read(this/BestTime)) < read(this/MaxStabilityTime))) ? goto(%d) : goto(%d);Check wait condition;Error checking wait condition;-1',cnt,cnt+1,cnt+2); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/OptimizationElapsedTime) = (read(this/CurTime) - read(this/StartTime))) && (read(this/LastTargetSelector) != read(this/TargetSelector)) ? goto(2) : (write(this/LastTargetSelector) = read(this/TargetSelector)) && goto(%d);Checking taget change;Error checking target change;-1',cnt,4+seq); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/TargetEndVal) = read(this/TargetCurVal)) && goto(%d);Save last val;Error saving last val;-1',cnt,cnt+1); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/MinimizationMode) == 0 ? goto(%d) : goto(%d);Check minimization mode;Error checking minimization mode;-1',cnt,cnt+1,cnt+2); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/TargetEndVal) < (read(this/TargetStartVal) + ((read(this/TargetBestVal) - read(this/TargetStartVal)) / 2)) ? (write(this/ImproveFlag) = 0) && goto(%d) : (write(this/ImproveFlag) = 1) && goto(%d);Setting Improve flag;Error setting improve flag;-1',cnt,cnt+2,cnt+2); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/TargetEndVal) > (read(this/TargetBestVal) + ((read(this/TargetStartVal) - read(this/TargetBestVal)) / 2)) ? (write(this/ImproveFlag) = 0) && goto(%d) : (write(this/ImproveFlag) = 1) && goto(%d);Setting Improve flag;Error setting improve flag;-1',cnt,cnt+1,cnt+1); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/EnableRollback) == 1 ? command($devseqrollback/Start) && goto(%d) : goto(%d);Setting improve flag;Error setting improve flag;-1', cnt, cnt+1, cnt+4); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (read($devseqrollback/State) == RUNNING) ? goto(%d) : goto(%d);Waiting $devseqrollback rollback;Error waiting $devseqrollback rollback;-1', cnt, cnt, cnt+1); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read($devseqrollback/State) == FAULT ? goto(-1) : goto(%d);Checking $devseqrollback state;$devseqrollback in FAULT state;-1', cnt, cnt+1); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;read(this/FaultOnRollback) == 1 ? goto(-1) : goto(%d);Exit;Rollback exit in FAULT state;-1', cnt, cnt+1); + + +% +% Dynamic attributes +% +cnt = 0; +cnt = cnt + 1; +footer{cnt} = 'attr;MaxStabilityTime;long;20'; +cnt = cnt + 1; +footer{cnt} = 'attr;MaxWaitTime;long;180'; +cnt = cnt + 1; +footer{cnt} = 'attr;TargetSelectorMask;long;1'; +cnt = cnt + 1; +footer{cnt} = 'attr;MinimizationMode;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;EnableRollback;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;FaultOnRollback;bool;0'; +% +cnt = cnt + 1; +footer{cnt} = 'attr;ImproveFlag;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;StartTime;long;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;CurTime;long;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;BestTime;long;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;OptimizationElapsedTime;long;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;TargetBestVal;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;TargetCurVal;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;TargetStartVal;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;TargetEndVal;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;LastTargetSelector;long;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;TargetSelector;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 + +% +% Wildcards +% +% $devtime_attr=sr/utils/time_rand.01/Date[0] +% $description=Wait SR injection efficiency maximization +% $devtarget_attr01$=seq/calc/topup_efficiency/InjEfficiencyLongTerm +% $devtarget_attr02$=seq/calc/topup_efficiency/InjEfficiencyShortTerm +% $sleep_monitor=1