%% dpo3000 raw socket demo % 1/18/2013 % function tcpip() requires Instrument Control Toolbox % http://www.mathworks.com/help/instrument/tcpip.html % instrument commands are from the % MSO3000 and DPO3000 Series Programmer Manual % (077-0301-02) % developed and tested on firmware v2.50 %% variables % buffer must be large enough to contain record, header, % and termination characters ip_address = '192.168.1.2'; record = 1e6; buffer = record + 13; %% instrument communication dpo3k = tcpip(ip_address, 4000, 'InputBufferSize', buffer, ... 'OutputBufferSize', buffer, 'TransferDelay', 'off'); fopen(dpo3k); r = query(dpo3k, '*idn?'); fprintf(1, 'instrument: %s', r); r = fread(dpo3k, 1); % discard termination character %% setup acquisition % default scope fprintf(dpo3k, '*rst'); fprintf(dpo3k, 'header off'); % reduce buffer overhead % stop acq fprintf(dpo3k, 'acquire:state off'); % turn on ch2 fprintf(dpo3k, 'select:ch2 on'); % set 200 ms/div fprintf(dpo3k, 'horizontal:scale 200e-3'); % set 500 mv/div fprintf(dpo3k, 'ch1:scale 1.0'); % volt/div fprintf(dpo3k, 'ch1:position -2.5'); % set ch1 ground to -2.5 divs below center fprintf(dpo3k, 'ch2:scale 1.0'); fprintf(dpo3k, 'ch2:position -2.5'); fprintf(dpo3k, 'ch3:scale 1.0'); % this affects trigger level settings fprintf(dpo3k, 'ch3:position -2.5'); % this affects trigger level settings % set record fprintf(dpo3k, sprintf('horizontal:recordlength %e', record)); % set 90% pre-trig fprintf(dpo3k, 'horizontal:delay:mode off'); fprintf(dpo3k, 'horizontal:position 90'); % set trigger ch3 fprintf(dpo3k, 'trigger:a:edge:source ch3'); fprintf(dpo3k, 'trigger:a:level 2.5'); % volts fprintf(dpo3k, 'trigger:a:mode normal'); % set single shot fprintf(dpo3k, 'acquire:stopafter sequence'); % set curve data encoding fprintf(dpo3k, 'data:encdg fastest'); fprintf(dpo3k, 'data:start 1'); fprintf(dpo3k, 'data:stop 1e6'); fprintf(dpo3k, 'data:width 1'); fprintf(1, 'instrument setup complete\n'); %% error check r = query(dpo3k, '*esr?'); fprintf(1, 'event status register: %s', r); r = fread(dpo3k, 1); r = query(dpo3k, 'allev?'); fprintf(1, 'all event messages: %s', r); r = fread(dpo3k, 1); %% acquisition % create space for waveform data ch1_data = zeros(record, 1, 'int8'); ch2_data = zeros(record, 1, 'int8'); % arm oscilloscope fprintf(dpo3k, 'acquire:state 1'); % wait for trigger and acq finish dpo3k.Timeout = 60; % seconds r = query(dpo3k, '*opc?'); % replies with 1 after acq finished r = fread(dpo3k, 1); fprintf(1, 'acq complete\n'); dpo3k.Timeout = 10; % transfer data tic fprintf(dpo3k, 'data:source ch1'); fprintf(dpo3k, 'curve?'); ch1_data(:) = binblockread(dpo3k, 'int8'); r = fread(dpo3k, 2); % discard termination characters fprintf(dpo3k, 'data:source ch2'); fprintf(dpo3k, 'curve?'); ch2_data(:) = binblockread(dpo3k, 'int8'); r = fread(dpo3k, 2); r = toc; fprintf(1, 'sample data transfer complete: %f seconds\n', r); %% error check r = query(dpo3k, '*esr?'); fprintf(1, 'event status register: %s', r); r = fread(dpo3k, 1); r = query(dpo3k, 'allev?'); fprintf(1, 'all event messages: %s', r); r = fread(dpo3k, 1); %% end connection to instrument fclose(dpo3k); % close session delete(dpo3k); % remove tcpip object clear dpo3k; % remove handle %% plot data stairs([ch1_data ch2_data]);