diff --git a/gen_seq_minmax.m b/gen_seq_minmax.m new file mode 100644 index 0000000000000000000000000000000000000000..87862a9f372eda2231bcfd6d8276263907fab9b6 --- /dev/null +++ b/gen_seq_minmax.m @@ -0,0 +1,132 @@ +clear all; + +for num_sequences=1:100 + +seq_name = sprintf('seq_minmax_%d.txt',num_sequences); + +header{1} = '#'; +header{2} = '# Description: $description'; +header{3} = '# Author: Giulio Gaio'; +header{4} = '# Date: 2021/02/10'; +header{5} = '#'; +header{6} = sprintf('# This script calculates sum/min/max/average of %d attributes',num_sequences); +header{7} = '#'; + + +cnt = 0; +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/ErrorFlag) = 0) && goto(%d);Initializing variables;Error initializing variables;-1',cnt,cnt+1); + +cnt = cnt + 1; +blk{cnt}=sprintf('step%d;(write(this/RemoveCount) = 0) && (write(this/SumTmp) = 0) && (write(this/MinTmp) = 1000000000) && (write(this/MaxTmp) = -1000000000) && goto(%d);Initializing inloop variables;Error initializing inloop variables;-1',cnt,cnt+1); + +% reset tmp variables +for seq=1:num_sequences + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;(write(this/AttrTmp%03d) = 0) && (write(this/OldAttrTmp%03d) = 0) && goto(%d);Initializing tmp variables;Error initializing tmp variables;-1',cnt,seq,seq,cnt+1); +end + + + +% reset tmp variables +for seq=1:num_sequences + + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;(write(this/AttrTmp%03d) = read($dev_attr%03d)) && (read(this/OldAttrTmp%03d) == read(this/AttrTmp%03d)) ? sleep($sleep_monitor) && goto(%d) : (write(this/OldAttrTmp%03d) = read(this/AttrTmp%03d)) && goto(%d);Reading $dev_attr%03d;Error reading $dev_attr%03d;-1;tangoerror=goto(%d)',cnt,seq,seq,seq,seq,cnt,seq,seq,cnt+1,seq,seq,cnt+5+num_sequences+1+(num_sequences-seq)*5); + + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;(write(this/SumTmp) = (read(this/AttrTmp%03d) + read(this/SumTmp))) && goto(%d);Calculating sum;Error calculating sum;-1',cnt,seq,cnt+1); + + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;read(this/AttrTmp%03d) < read(this/MinTmp) ? (write(this/MinTmp) = read(this/AttrTmp%03d)) && goto(%d) : goto(%d);Calculating minimum;Error calculating minimum;-1',cnt,seq,seq,cnt+1,cnt+1); + + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;read(this/AttrTmp%03d) > read(this/MaxTmp) ? (write(this/MaxTmp) = read(this/AttrTmp%03d)) && goto(%d) : goto(%d);Calculating maximum;Error calculating maximum;-1',cnt,seq,seq,cnt+1,cnt+1); + + if seq < num_sequences + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;read(this/ChainedRead) == 1 ? (write(this/OldAttrTmp%03d) = read(this/AttrTmp%03d)) && goto(%d) : goto(%d);Enabled chained read;Error enabling chained read;-1',cnt,seq+1,seq,cnt+1,cnt+1); + end + +end + +cnt = cnt + 1; +blk{cnt} = sprintf('step%d;(write(this/ErrorFlag) = 0) && (write(this/Sum) = read(this/SumTmp)) && (write(this/Mean) = read(this/SumTmp) / %d) && (write(this/Min) = read(this/MinTmp)) && (write(this/Max) = read(this/MaxTmp)) && goto(%d);Setting counters;Error setting counters;-1',cnt,num_sequences,cnt+1); + +% reset tmp variables +for seq=1:num_sequences + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;((read(this/AttrTmp%03d) == read(this/MinTmp)) || (read(this/AttrTmp%03d) == read(this/MaxTmp))) ? (write(this/SumTmp) = (read(this/SumTmp) - read(this/AttrTmp%03d))) && (write(this/RemoveCount) = (read(this/RemoveCount) + 1)) && goto(%d) : goto(%d);Filtering out min/max values;Error filtering out min/max values;-1',cnt,seq,seq,seq,cnt+1,cnt+1); +end + +cnt = cnt + 1; +blk{cnt} = sprintf('step%d;read(this/RemoveCount) == %d ? (write(this/FiltMean) = read(this/Mean)) && goto(%d) : (write(this/FiltMean) = (read(this/SumTmp) / (%d - read(this/RemoveCount)))) && goto(%d);Calculating FiltMean;Error calculating FiltMean;-1',cnt,num_sequences,cnt+2,num_sequences,cnt+2); + +cnt = cnt + 1; +blk{cnt} = sprintf('step%d;(write(this/Sum) = read(this/ErrorVal)) && (write(this/Mean) = read(this/ErrorVal)) && (write(this/Min) = read(this/ErrorVal)) && (write(this/Max) = read(this/ErrorVal)) && (read(this/LoopEnable) == 0) ? goto(-1) : (write(this/ErrorFlag) = 1) && goto(%d);Resetting counters;Error resetting counters;-1',cnt,cnt+1); + +cnt = cnt + 1; +blk{cnt} = sprintf('step%d;read(this/LoopEnable) == 1 ? sleep($sleep_loop) && goto(2) : goto(%d);Checking loop state;Error checking loop state;-1',cnt,cnt+1); + +% dynamic attributes +cnt = 0; +cnt = cnt + 1; +footer{cnt} = 'attr;LoopEnable;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;ChainedRead;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;ErrorFlag;bool;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;Min;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;Max;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;Mean;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;FiltMean;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;Sum;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;MinTmp;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;MaxTmp;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;SumTmp;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;ErrorVal;double;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;RemoveCount;long;0'; + +% attributes +for seq=1:num_sequences + cnt = cnt + 1; + footer{cnt} = sprintf('attr;AttrTmp%03d;double;0',seq); + cnt = cnt + 1; + footer{cnt} = sprintf('attr;OldAttrTmp%03d;double;0',seq); +end + +% Wildcards +% $description= +% $sleep_monitor=1 +% $sleep_loop=1 +% $dev_attr001= +% $dev_attr002= +% $dev_attr003= + + +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