% % Programa de adquisición de datos del multímetro "Protek 506" para Matlab % Creado por M. Marziali Bermúdez (2016) % e-mail: mmarziali@df.uba.ar % % Nota: para habilitar la comunicación por RS232 en el multímetro: % 1) presionar la tecla "MENU" del multímetro hasta % seleccionar "RS232" (que destelle en la pantalla) % 2) presionar la tecla enter del multímetro( <-' ). % % Opciones de adquisición % % Duración (segundos) tTotal = 10; % Intervalo de muestreo (segundos) tMuestreo = 0.75; % Cierra cualquier conexión abierta previamente if length(instrfind) > 0 fclose(instrfind); end % Crea un objeto llamado "protek" para referirse a la comunicación por el % puerto serie, y lo configura con los parámetros que corresponden. % (ver manual, pág. 43) protek = serial('COM1','BaudRate',1200,'Parity','none','DataBits',7,'StopBits',2,'Terminator','CR','InputBufferSize',15); fopen(protek); % Prueba la comunicación. fprintf(protek,'\n'); % cualquier caracter es equivalente (no tiene significado) res = fscanf(protek); % lee la respuesta del instrumento if length(res) == 0 disp( sprintf('¡El multímetro no responde!\n')); fclose(protek); return; end % Determina el modo de operación y las unidades modo = sscanf(res,'%s %*f %*s'); unid = sscanf(res,'%*s %*f %s'); % Determina el nombre del archivo para guardar (YYYY-MM-DD HHMMSS.txt) [Y, M, D, H, MN, S] = datevec(now); nArchivo = sprintf('%04d-%02d-%02d %02d%02d%02d.txt',Y, M, D, H, MN, round(S)); % Abre el archivo. Si no es posible, interrumpe el programa. archivo = fopen(nArchivo,'w+t'); if archivo == -1 disp( sprintf('¡El archivo no se pudo crear!\n')); fclose(protek); return; else disp( sprintf('Guardando en %s\n', nArchivo)); end % Genera un encabezado para el archivo fprintf(archivo, strcat('t,',modo','\n')); fprintf(archivo, strcat('s,',unid','\n')); % Dimensiona vectores para guardar los datos en memoria N = ceil(tTotal/tMuestreo); t = zeros(N,1); y = zeros(N,1); figure(1); clf; % Inicia la medición tic for j = 1:N % Pide datos al instrumento fprintf(protek,char(13)); res = fscanf(protek); % Guarda el tiempo y la medición en memoria t(j) = toc; y(j) = sscanf(res,'%*s %f %*s'); % Guarda el tiempo y la medición en el archivo fprintf(archivo, '%f,%f\n', t(j), y(j)); % Grafica los puntos medidos plot(t(1:j),y(1:j),'o-'); xlabel('t (s)') ylabel(strcat(modo', ' (', unid', ')')) drawnow; % Espera hasta la próxima medición while toc < j * tMuestreo end end % Cierra el puerto y el archivo fclose(protek); fclose(archivo);