diff --git a/gen_seq_camera_power_save.m b/gen_seq_camera_power_save.m
new file mode 100644
index 0000000000000000000000000000000000000000..f1c4d869518b442c11739cf7c2044bdb68aad8b5
--- /dev/null
+++ b/gen_seq_camera_power_save.m
@@ -0,0 +1,85 @@
+clear all;
+
+for num_sequences=1:32
+
+seq_name = sprintf('seq_ps_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 power supplies',num_sequences);
+header{7} = '#';
+
+cnt = 0;
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;(write(this/Cnt) = 0) && goto(%d);Reset error counter;Error resetting error counter;-1',cnt,cnt+1);
+
+% Reset power supplies
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;read($devpsc%d$/State) == FAULT ? command($devpsc%d$/Reset) && (write(this/Cnt) = read(this/Cnt) + 1) && sleep($sleep_after_reset_cmd) && goto(%d) : goto(%d);Reset $devpsc%d$ fault state;Error resetting $devpsc%d$ fault 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/Cnt) > 0 ? sleep($sleep_wait_refresh_state) && (write(this/Cnt) = 0) && goto(%d) : goto(%d);Waiting after reset ;Error waiting after reset;-1,exit',cnt,cnt+1,cnt+1);
+
+% Switch on power supplies
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;read($devpsc%d$/State) != ON ? command($devpsc%d$/On) && (write(this/Cnt) = read(this/Cnt) + 1) && sleep($sleep_after_on_cmd) && goto(%d) : goto(%d);Turning $devpsc%d$ on;Error turning $devpsc%d$ on;-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/Cnt) > 0 ? sleep($sleep_wait_refresh_state) && (write(this/Cnt) = 0) && goto(%d) : goto(%d);Waiting after reset ;Error waiting after reset;-1',cnt,cnt+1,cnt+1);
+
+% Waiting power supplies moving
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;(read($devpsc%d$/State) == MOVING) || (read($devpsc%d$/State) == RUNNING) || (read($devpsc%d$/State) == INIT) ? sleep($sleep_wait_refresh_state) && goto(%d) : goto(%d);Waiting $devpsc%d$ on;Error waiting $devpsc%d$ on;60000;timeouterror=goto(%d),tangoerror=goto(%d)',cnt,seq,seq,seq,cnt,cnt+1,seq,seq,cnt+1,cnt+1);
+end
+
+% Check power supplies on
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt} = sprintf('step%d;read($devpsc%d$/State) == ON ? (write(this/Cnt) = read(this/Cnt) + 1) && goto(%d) : command($devpsc%d$/NotOn) && goto(%d);Checking $devpsc%d$ on;Error checking $devpsc%d$ on;-1;tangoerror=goto(%d),exit',cnt,seq,cnt+1,seq,cnt+1,seq,seq,cnt+1);
+end
+
+cnt = cnt + 1;
+blk{cnt} = sprintf('step%d;read(this/Cnt) == %d ? goto(%d) : goto(-1);Success;Some power supplies not ON;-1',cnt,num_sequences,cnt+1);
+
+
+% dynamic attributes
+footer{1} = 'attr;Cnt;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;Cnt;long;0
+
+% Wildcards
+% $description=
+% $sleep_after_reset_cmd=1
+% $sleep_after_on_cmd=1
+% $sleep_wait_refresh_state=4
+% $devpsc1=
+% $devpsc2=
+% $devpsc3=
+% .........
+