diff --git a/OOequipment/subfiles/Equipment.m b/OOequipment/subfiles/Equipment.m index 4f0e174..d7112ef 100644 --- a/OOequipment/subfiles/Equipment.m +++ b/OOequipment/subfiles/Equipment.m @@ -7,6 +7,10 @@ classdef Equipment < handle tcp channel locked + manufacturer + model + serialnumber + firmwarelevel end properties (Dependent, SetAccess=private) error @@ -30,6 +34,11 @@ classdef Equipment < handle if channel >= 0 ecq.setPrologix; end + splitname = strsplit(ecq.name,','); + ecq.manufacturer = splitname{1}; + ecq.model = splitname{2}; + ecq.serialnumber = splitname{3}; + ecq.firmwarelevel = splitname{4}; end function id = idn(ecq) @@ -236,6 +245,15 @@ classdef Equipment < handle ecq.write_unsafe(message); output = read(ecq); end + + function disableEOI(ecq) + ecq.tcp.Terminator = ''; + end + + function enableEOI(ecq) + ecq.tcp.Terminator = 'LF'; + end + end methods (Access = protected, Hidden) @@ -277,6 +295,7 @@ classdef Equipment < handle tcpconnection.(ipname).tcp = tcpip(ipAddress,port); %Make TCP-connection tcpconnection.(ipname).nopen = 1; %Set number of connections in use to 1 tcpconnection.(ipname).tcp.InputBufferSize = 2^24; %make really large buffer size 64MB. To acquire complete waveforms. + tcpconnection.(ipname).tcp.OutputBufferSize = 2^24; %make really large buffer size 64MB. To acquire complete waveforms. tcpconnection.(ipname).tcp.Timeout = 5; %set timeout to 5 seconds. fopen(tcpconnection.(ipname).tcp); %Open the TCP-connection else %If connection already exist. Increase number of connections in use by 1. @@ -324,6 +343,14 @@ classdef Equipment < handle end end + function output = optionnum2str(input) + if isnum(input) + output = num2str(input); + else + output = input; + end + end + function [structname,cleanip] = ip2structname(ipAddress,port) %IP2STRUCTNAME Returns a structname and ip w/out leading zeros. %structname to store stuff in struct (especially for GETTCP). diff --git a/OOequipment/subfiles/FunctionGenerator.m b/OOequipment/subfiles/FunctionGenerator.m index d17bfa2..3824268 100644 --- a/OOequipment/subfiles/FunctionGenerator.m +++ b/OOequipment/subfiles/FunctionGenerator.m @@ -16,6 +16,7 @@ classdef FunctionGenerator < Equipment unit offset load + output end methods @@ -28,6 +29,7 @@ classdef FunctionGenerator < Equipment % % See also EQUIPMENT, OSCILLOSCOPE, DIGITALMULTIMETER. fg@Equipment(ipAddress,port,channel); + end function w = get.waveform(fg) @@ -64,7 +66,15 @@ classdef FunctionGenerator < Equipment %Get function generator load setting on load variable % access, using the corresponding SCPI command. l = FunctionGenerator.getLoad(fg.query('OUTPut:LOAD?')); - end + end + + function out = get.output(fg) + if strcmp(fg.model(1:3),'335') || strcmp(fg.model(1:3),'332') + out = fg.query('OUTP?'); + else + warning('This generator does not support this function'); + end + end function fg = set.waveform(fg,w) %Set function generator waveform setting on waveform variable @@ -104,6 +114,30 @@ classdef FunctionGenerator < Equipment % using the corresponding SCPI command. fg.write(['OUTPut:LOAD ' FunctionGenerator.getLoad(l)]); end + + function fg = set.output(fg,out) + if strcmp(fg.model(1:3),'335') || strcmp(fg.model(1:3),'332') + fg.write(['OUTP ' Equipment.optionnum2str(out)]) + end + end + + function downloadwaveform(fg,waveform,name) + fg.disableEOI; + fg.write_unsafe(['data:arb ' name ',']); + fg.enableEOI; + binblockwrite(fg.tcp,waveform,'float') + fg.error; + fg.write(['func:arb ' name]) + fg.write(['MMEM:STORE:DATA "INT:\' name '.arb"']) + end + + function scintilla(fg,periods) + periods = round(periods); + x = linspace(-periods*pi,periods*pi,1600); + y = exp(-abs(x./6)).*sin(x)./0.8; + fg.downloadwaveform(y,'scintilla'); + + end end methods (Static)