| @@ -0,0 +1,14 @@ | |||||
| fStart = 2.7; | |||||
| fStop = 4; | |||||
| fStep = 25; | |||||
| frequency = logspace(fStart,fStop,fStep); | |||||
| amplitude = 10; | |||||
| scopeIP = '10.0.0.7'; | |||||
| outputarray = NaN(fStep,1); | |||||
| for i = 1:fStep | |||||
| prologix_function_generator_waveform(1,frequency(i),amplitude); | |||||
| outputarray(i) = keysight_measure_vpp(1,scopeIP); | |||||
| end | |||||
| semilogx(frequency,outputarray) | |||||
| grid on | |||||
| @@ -0,0 +1,15 @@ | |||||
| function [ ipaddress ] = getLocalIP() | |||||
| %GETLOCALIP returns the ipaddress of the current windows machine | |||||
| [status,result]=system('ipconfig'); | |||||
| if ~(status == 0) | |||||
| error('Failed to find local IP address'); | |||||
| end | |||||
| [startIndex,endIndex] = regexp(result,'(?<=\n IPv4 Address[ \.]*: )([0-9]{1,3}\.?){4}'); | |||||
| if isempty(startIndex) | |||||
| error('Failed to find local IP address'); | |||||
| end | |||||
| for i = 1:length(startIndex) | |||||
| ipaddress{i} = result(startIndex(i):endIndex(i)); | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,11 @@ | |||||
| function [ t ] = keysight_connect( ipaddress ) | |||||
| %KEYSIGHT_CONNECT Summary of this function goes here | |||||
| % Detailed explanation goes here | |||||
| if nargin < 1 | |||||
| ipaddress = [hostname '.local.']; | |||||
| end | |||||
| t = tcpip(ipaddress,5025); | |||||
| fopen(t); | |||||
| end | |||||
| @@ -0,0 +1,10 @@ | |||||
| function keysight_disconnect(t) | |||||
| %KEYSIGHT_DISCONNECT Summary of this function goes here | |||||
| % Detailed explanation goes here | |||||
| fclose(t); | |||||
| delete(t); | |||||
| clear t | |||||
| end | |||||
| @@ -0,0 +1,22 @@ | |||||
| function [ msg ] = keysight_measure_vpp(channel,ipaddress) | |||||
| %KEYSIGHT_MEASURE_VPP Summary of this function goes here | |||||
| % Detailed explanation goes here | |||||
| if nargin < 2 | |||||
| t = keysight_connect(); | |||||
| else | |||||
| t = keysight_connect(ipaddress); | |||||
| if nargin < 1 | |||||
| channel = 1; | |||||
| end | |||||
| end | |||||
| fprintf(t,':autoscale'); | |||||
| fprintf(t,'*OPC?'); | |||||
| fscanf(t); | |||||
| fprintf(t,[':meas:vamp? chan' num2str(channel)]); | |||||
| msg = str2double(fscanf(t)); | |||||
| if msg > 9e+37 | |||||
| msg = NaN; | |||||
| end | |||||
| keysight_disconnect(t); | |||||
| end | |||||
| @@ -1,4 +1,4 @@ | |||||
| function ipaddress = prologix_discovery() | |||||
| function ipaddress = prologix_discovery(localhost) | |||||
| %% PROLOGIX_DISCOVERY Find your prologix GPIB device. | %% PROLOGIX_DISCOVERY Find your prologix GPIB device. | ||||
| % ipaddress = PROLOGIX_DISCOVERY() finds prologix on your | % ipaddress = PROLOGIX_DISCOVERY() finds prologix on your | ||||
| % local network. When your prologix device is detected | % local network. When your prologix device is detected | ||||
| @@ -10,6 +10,11 @@ function ipaddress = prologix_discovery() | |||||
| %% setup correct variables. | %% setup correct variables. | ||||
| % if location of prologix is known: just return stored ip address | % if location of prologix is known: just return stored ip address | ||||
| if nargin < 1 | |||||
| localhostcellarray = getLocalIP(); | |||||
| else | |||||
| localhostcellarray{1} = localhost; | |||||
| end | |||||
| persistent stored_ipaddress; | persistent stored_ipaddress; | ||||
| if ~isempty(stored_ipaddress) | if ~isempty(stored_ipaddress) | ||||
| ipaddress = stored_ipaddress; | ipaddress = stored_ipaddress; | ||||
| @@ -19,26 +24,37 @@ local_port = randi([49152 65535]); | |||||
| remote_port = 3040; | remote_port = 3040; | ||||
| %% setup dsp to send and recieve udp packets. | %% setup dsp to send and recieve udp packets. | ||||
| hudpr = dsp.UDPReceiver('LocalIPPort',local_port); | |||||
| hudps = dsp.UDPSender('RemoteIPAddress','255.255.255.255','RemoteIPPort',remote_port,'LocalIPPortSource','Property','LocalIPPort',local_port); | |||||
| % start recieving udp packets | |||||
| setup(hudpr); | |||||
| for ipIndex = 1:length(localhostcellarray) | |||||
| udpconnection = udp('10.255.255.255',3040); | |||||
| %hudpr = dsp.UDPReceiver('LocalIPPort',local_port); | |||||
| % hudps = dsp.UDPSender('RemoteIPAddress','255.255.255.255','RemoteIPPort',remote_port,'LocalIPPortSource','Property','LocalIPPort',local_port); | |||||
| % start recieving udp packets | |||||
| % setup(hudpr); | |||||
| fopen(udpconnection); | |||||
| %% Discover prologix. | |||||
| % magic string to request ipaddress from prologix: ['5a' '00' '5b' 'db' 'ff' 'ff' 'ff' 'ff' 'ff' 'ff' '00' '00'] | |||||
| magic_msg = uint8([90 0 91 219 255 255 255 255 255 255 00 00]); | |||||
| % Sending packet. | |||||
| step(hudps,magic_msg); | |||||
| % Recieving packet or resend. | |||||
| for i = 1:100 | |||||
| pause(0.1); | |||||
| msg = step(hudpr); | |||||
| if numel(msg)>0 | |||||
| %% Discover prologix. | |||||
| % magic string to request ipaddress from prologix: ['5a' '00' '5b' 'db' 'ff' 'ff' 'ff' 'ff' 'ff' 'ff' '00' '00'] | |||||
| magic_msg = uint8([90 0 91 219 255 255 255 255 255 255 00 00]); | |||||
| % Sending packet. | |||||
| % hudps(magic_msg); | |||||
| fwrite(udpconnection,magic_msg); | |||||
| % Recieving packet or resend. | |||||
| for i = 1:100 | |||||
| pause(0.1); | |||||
| msg = fread(udpconnection); | |||||
| if numel(msg)>0 | |||||
| break; | |||||
| elseif mod(i,10) == 0 | |||||
| %waiting dot and resending of string | |||||
| fprintf('.') | |||||
| fwrite(udpconnection,magic_msg); | |||||
| % step(hudps,magic_msg); | |||||
| end | |||||
| end | |||||
| fclose(udpconnection); | |||||
| if ~isempty(msg) | |||||
| break; | break; | ||||
| elseif mod(i,10) == 0 | |||||
| %waiting dot and resending of string | |||||
| fprintf('.') | |||||
| step(hudps,magic_msg); | |||||
| end | end | ||||
| end | end | ||||
| if isempty(msg) | if isempty(msg) | ||||
| @@ -47,7 +63,4 @@ end | |||||
| %ipaddress string is extracted from recieved UDP message. array position 21 | %ipaddress string is extracted from recieved UDP message. array position 21 | ||||
| %till 24. | %till 24. | ||||
| ipaddress = num2str(msg(21:24)','%d.%d.%d.%d'); | ipaddress = num2str(msg(21:24)','%d.%d.%d.%d'); | ||||
| stored_ipaddress = ipaddress; | |||||
| %% releasing connection. | |||||
| release(hudps); | |||||
| release(hudpr); | |||||
| stored_ipaddress = ipaddress; | |||||
| @@ -0,0 +1,97 @@ | |||||
| classdef Equipment < handle | |||||
| %EQUIPMENT Summary of this class goes here | |||||
| % Detailed explanation goes here | |||||
| properties (SetAccess=private) | |||||
| name | |||||
| tcp | |||||
| channel | |||||
| end | |||||
| methods | |||||
| function DMM = equipment(name,connection,channel) | |||||
| DMM.name = name; | |||||
| DMM.tcp = tcpip(connection,1234); | |||||
| DMM.channel = channel; | |||||
| end | |||||
| function idn(DMM) | |||||
| fprintf(DMM.tcp,['++addr ',num2str(DMM.channel)]); | |||||
| fprintf(DMM.tcp,'*idn?'); | |||||
| fprintf(DMM.tcp,'++read'); | |||||
| fprintf(fscanf(DMM.tcp)); | |||||
| end | |||||
| function starttcp(DMM) | |||||
| fopen(DMM.tcp); | |||||
| end | |||||
| end | |||||
| methods (Static) | |||||
| function getTCP(ipAddress) | |||||
| persistent stored_ipaddress; | |||||
| if ~isempty(stored_ipaddress) | |||||
| ipaddress = stored_ipaddress; | |||||
| return | |||||
| end | |||||
| end | |||||
| end | |||||
| end | |||||
| % classdef BankAccount < handle | |||||
| % properties (Access = ?AccountManager) | |||||
| % AccountStatus = 'open' | |||||
| % end | |||||
| % properties (SetAccess = private) | |||||
| % AccountNumber | |||||
| % AccountBalance | |||||
| % end | |||||
| % properties (Transient) | |||||
| % AccountListener | |||||
| % end | |||||
| % events | |||||
| % InsufficientFunds | |||||
| % end | |||||
| % methods | |||||
| % function BA = BankAccount(accNum,initBal) | |||||
| % BA.AccountNumber = accNum; | |||||
| % BA.AccountBalance = initBal; | |||||
| % BA.AccountListener = AccountManager.addAccount(BA); | |||||
| % end | |||||
| % function deposit(BA,amt) | |||||
| % BA.AccountBalance = BA.AccountBalance + amt; | |||||
| % if BA.AccountBalance > 0 | |||||
| % BA.AccountStatus = 'open'; | |||||
| % end | |||||
| % end | |||||
| % function withdraw(BA,amt) | |||||
| % if (strcmp(BA.AccountStatus,'closed')&& BA.AccountBalance <= 0) | |||||
| % disp(['Account ',num2str(BA.AccountNumber),' has been closed.']) | |||||
| % return | |||||
| % end | |||||
| % newbal = BA.AccountBalance - amt; | |||||
| % BA.AccountBalance = newbal; | |||||
| % if newbal < 0 | |||||
| % notify(BA,'InsufficientFunds') | |||||
| % end | |||||
| % end | |||||
| % function getStatement(BA) | |||||
| % disp('-------------------------') | |||||
| % disp(['Account: ',num2str(BA.AccountNumber)]) | |||||
| % ab = sprintf('%0.2f',BA.AccountBalance); | |||||
| % disp(['CurrentBalance: ',ab]) | |||||
| % disp(['Account Status: ',BA.AccountStatus]) | |||||
| % disp('-------------------------') | |||||
| % end | |||||
| % end | |||||
| % methods (Static) | |||||
| % function obj = loadobj(s) | |||||
| % if isstruct(s) | |||||
| % accNum = s.AccountNumber; | |||||
| % initBal = s.AccountBalance; | |||||
| % obj = BankAccount(accNum,initBal); | |||||
| % else | |||||
| % obj.AccountListener = AccountManager.addAccount(s); | |||||
| % end | |||||
| % end | |||||
| % end | |||||
| % end | |||||
| @@ -0,0 +1,12 @@ | |||||
| classdef function_generator | |||||
| %FUNCTION_GENERATOR Summary of this class goes here | |||||
| % Detailed explanation goes here | |||||
| properties | |||||
| end | |||||
| methods | |||||
| end | |||||
| end | |||||