Programmazione della strumentazione con MATLAB
Questo articolo della knowledge base introduce la programmazione di un prodotto programmabile Magna-Power utilizzando MATLAB. MATLAB è un ambiente di programmazione ad alto livello rinomato per la sua facilità d'uso nel calcolo numerico, nella visualizzazione e nella programmazione. I suoi robusti toolbox e le sue funzioni lo rendono una scelta eccellente per controllare, misurare e rappresentare graficamente i dati provenienti dalla strumentazione programmabile. Inoltre, l'ampio supporto di Magna-Power per i comandi standard per la strumentazione programmabile (SCPI) garantisce un'integrazione perfetta con MATLAB attraverso comandi semplici e intuitivi.
I prodotti Magna-Power supportano una varietà di interfacce di comunicazione, tra cui RS-232, TCP/IP Ethernet, USB, RS-485 e IEEE-488 GPIB. Nonostante queste diverse interfacce, i comandi SCPI rimangono coerenti per una particolare serie di prodotti, come documentato nel manuale utente della rispettiva serie. Quando si crea un programma MATLAB, l'unica differenza tra le interfacce riguarderà le impostazioni della connessione del dispositivo.
Interfacce di comunicazione
Connessione USB, seriale o RS-485
Per le connessioni USB, seriale o RS-485, MATLAB utilizza la funzione integrata serialport per creare una connessione seriale con lo strumento:
conn = serialport('COM4', 115200);
La velocità di trasmissione seriale (baud rate) per i prodotti xGen è 115200, mentre per i prodotti non xGen è 19200. La posizione della porta è definita dal sistema operativo. In Windows, questa porta si trova in Gestione dispositivi.
L'invio e la ricezione successivi dei comandi tramite la connessione seriale avverranno come segue:
writeline(conn, '*IDN?');
response = readline(conn);
disp(response);
Connessione TCP/IP Ethernet
Per le connessioni TCP/IP Ethernet, MATLAB utilizza la funzione tcpclient:
t = tcpclient('192.168.0.86', 50505);
L'invio e la ricezione successivi dei comandi tramite la connessione TCP/IP Ethernet avverranno come segue:
writeline(t, '*IDN?');
response = read(t);
disp(char(response));
Connessione IEEE-488 GPIB
Per le connessioni IEEE-488 GPIB, MATLAB utilizza la funzione gpib insieme all'Instrument Control Toolbox:
g = gpib('NI', 0, 12);
fopen(g);
L'invio e la ricezione successivi dei comandi tramite la connessione IEEE-488 GPIB avverranno come segue:
fprintf(g, '*IDN?');
response = fscanf(g);
disp(response);
Esempi approfonditi
I seguenti esempi forniscono programmi MATLAB più dettagliati utilizzando un alimentatore xGen MagnaDC. La programmazione di un alimentatore DC programmabile MagnaDC non xGen in MATLAB sarà quasi identica, con lievi modifiche ai comandi SCPI come documentato nel manuale utente della rispettiva serie di prodotti.
Esempio 1: Controllo base tramite TCP/IP Ethernet
Questo esempio base crea una connessione TCP/IP Ethernet, invia alcuni comandi di inizializzazione, abilita l'uscita DC, aumenta il livello di corrente a 5 A, attende 20 secondi e quindi esegue lo spegnimento.
% Create a TCP/IP connection to the instrument
t = tcpclient('192.168.0.86', 50505);
% Send SCPI command requesting the product to identify itself
writeline(t, '*IDN?');
% Receive the product's response and display it in the command window
response = read(t);
disp(char(response));
% Configure the MagnaDC for local control
writeline(t, 'CONF:SOUR 0');
% Set the DC output current to 0 A before enabling DC output
writeline(t, 'CURR 0');
% Enable the MagnaDC power supply output
writeline(t, 'OUTP:START');
% Set the DC output current to 5 A
writeline(t, 'CURR 5');
% Wait for 20 seconds
pause(20);
% Disable the DC output
writeline(t, 'OUTP:STOP');
% Clear the TCP/IP connection
clear t;
Esempio 2: Connessione Seriale con Set Point di Corrente
Questo esempio crea una connessione seriale al prodotto, determina di quale prodotto si tratta, e quindi invia una sequenza di comandi di corrente con 20 secondi tra ciascun livello di corrente. Questo tipo di programma può essere ampliato per ciclare anche attraverso valori di tensione, potenza e resistenza.
% Create a serial connection object with default baud rate for MagnaLOADs
conn = serialport('COM4', 115200);
% Send SCPI command requesting the product to identify itself
writeline(conn, '*IDN?');
% Receive the product's response and display it in the command window
response = readline(conn);
disp(response);
% Create an array of current set points
currSetPoints = [50, 100, 150, 250];
% Configure the MagnaDC power supply for local control
writeline(conn, 'CONF:SOUR 0');
% Enable the MagnaDC power supply output
writeline(conn, 'OUTP:START');
% Loop through each current set point
for currSetpoint = currSetPoints
fprintf('Setting Current to %d A\n', currSetpoint);
writeline(conn, sprintf('CURR %d', currSetpoint));
pause(20);
end
% Disable the MagnaDC power supply output
writeline(conn, 'OUTP:STOP');
% Clear the serial connection
clear conn;
Esempio 3: Scarica di una Batteria e Rappresentazione Grafica dei Dati
In questo esempio, un alimentatore xGen MagnaDC è programmato per scaricare una batteria utilizzando set point e tempi letti da un file di valori separati da virgola (.csv), misurare l'ingresso DC utilizzando i comandi di misura ad alta precisione del prodotto, e quindi fornire un grafico dei dati misurati rispetto al tempo. Questo programma potrebbe essere ulteriormente ampliato per generare un report di test in PDF, integrando i dati misurati, i grafici e le informazioni provenienti da altri strumenti.
% Import data from CSV file
% The CSV file should have two columns:
% Column 1: Current set point in amperes
% Column 2: Time in seconds
data = readmatrix('example_profile.csv');
% Create a serial connection object with default baud rate for xGen products
conn = serialport('COM8', 115200);
% Configure the MagnaDC for local control
writeline(conn, 'CONF:SOUR 0');
% Enable the MagnaDC power supply output
writeline(conn, 'OUTP:START');
% Initialize arrays to store measurements
currents = [];
voltages = [];
times = [];
testStartTime = tic;
% Loop through each set point and duration
for i = 1:size(data, 1)
currSetpoint = data(i, 1);
duration = data(i, 2);
% Set the current set point
writeline(conn, sprintf('CURR %f', currSetpoint));
% Record data for the specified duration
stopTime = toc(testStartTime) + duration;
while toc(testStartTime) < stopTime
% Measure all DC output variables
writeline(conn, 'MEAS:ALL?');
response = readline(conn);
measurements = strsplit(response, ',');
% Store measurements
currents(end+1) = str2double(measurements{1});
voltages(end+1) = str2double(measurements{2});
times(end+1) = toc(testStartTime);
pause(0.5);
end
end
% Disable the MagnaDC power supply output
writeline(conn, 'OUTP:STOP');
% Clear the serial connection
clear conn;
% Plot Current vs. Time
subplot(2,1,1);
plot(times, currents, 'r--');
ylabel('Output Current (A)');
title('I-V Profile');
% Plot Voltage vs. Time
subplot(2,1,2);
plot(times, voltages, 'b--');
xlabel('Time (s)');
ylabel('Output Voltage (V)');
% Display the plots
figure(gcf);
Nota: Assicurarsi che il file CSV example_profile.csv sia formattato correttamente e si trovi nella directory di lavoro di MATLAB. La prima riga deve contenere le intestazioni e i dati devono iniziare dalla seconda riga.
Conclusione
MATLAB offre un ambiente potente per il controllo dei prodotti di alimentazione programmabili Magna-Power. Grazie alle funzioni integrate per la comunicazione seriale, TCP/IP e GPIB, nonché alle ampie capacità di rappresentazione grafica, MATLAB semplifica il processo di automazione dei test, raccolta dei dati e visualizzazione dei risultati. Sfruttando i comandi SCPI e le funzionalità di MATLAB, gli utenti possono sviluppare programmi di controllo sofisticati su misura per le loro applicazioni specifiche.
Per set di comandi SCPI dettagliati e ulteriori personalizzazioni, consultare il manuale utente della specifica serie di prodotti Magna-Power in uso.