| @@ -3,20 +3,114 @@ classdef Channel | |||||
| % Detailed explanation goes here | % Detailed explanation goes here | ||||
| properties | properties | ||||
| Property1 | |||||
| scope | |||||
| channelnumber | |||||
| end | |||||
| properties (Dependent) | |||||
| state | |||||
| coupling | |||||
| bandwidth | |||||
| scale | |||||
| offset | |||||
| probe | |||||
| label | |||||
| end | end | ||||
| methods | methods | ||||
| function obj = Channel(inputArg1,inputArg2) | |||||
| %CHANNEL Construct an instance of this class | |||||
| % Detailed explanation goes here | |||||
| obj.Property1 = inputArg1 + inputArg2; | |||||
| function ch = Channel(scope,channelnumber) | |||||
| ch.channelnumber = channelnumber; | |||||
| ch.scope = scope; | |||||
| end | |||||
| function s = get.state(ch) | |||||
| s = ch.scope.query(ch.CHAN('state?')); | |||||
| end | |||||
| function out = get.coupling(ch) | |||||
| out = ch.scope.query(ch.CHAN('coup?')); | |||||
| end | |||||
| function out = get.bandwidth(ch) | |||||
| out = ch.scope.query(ch.CHAN('band?')); | |||||
| end | |||||
| function out = get.offset(ch) | |||||
| out = ch.scope.query(ch.CHAN('offs?')); | |||||
| end | |||||
| function out = get.scale(ch) | |||||
| out = ch.scope.query(ch.CHAN('scal?')); | |||||
| end | |||||
| function out = get.label(ch) | |||||
| out = ch.scope.query(ch.CHAN('lab?')); | |||||
| end | |||||
| function ch = set.state(ch,in) | |||||
| ch.scope.write(ch.CHANsend('state',in)); | |||||
| end | |||||
| function ch = set.coupling(ch,in) | |||||
| ch.scope.write(ch.CHANsend('coup',in)); | |||||
| end | |||||
| function ch = set.bandwidth(ch,in) | |||||
| ch.scope.write(ch.CHANsend('band',in)); | |||||
| end | |||||
| function ch = set.offset(ch,in) | |||||
| ch.scope.write(ch.CHANsend('offs',in)); | |||||
| end | |||||
| function ch = set.scale(ch,in) | |||||
| ch.scope.write(ch.CHANsend('scal',in)); | |||||
| end | |||||
| function ch = set.label(ch,in) | |||||
| ch.scope.write(ch.CHANsend('lab',in)); | |||||
| end | |||||
| function out = frequency(ch) | |||||
| out = str2double(ch.MEAS('freq')); | |||||
| end | |||||
| function out = peak2peak(ch) | |||||
| out = str2double(ch.MEAS('peak')); | |||||
| end | |||||
| function out = period(ch) | |||||
| out = str2double(ch.MEAS('per')); | |||||
| end | |||||
| function out = amplitude(ch) | |||||
| out = str2double(ch.MEAS('ampl')); | |||||
| end | |||||
| function out = mean(ch) | |||||
| out = str2double(ch.MEAS('mean')); | |||||
| end | |||||
| function out = rms(ch) | |||||
| out = str2double(ch.MEAS('rms')); | |||||
| end | |||||
| function out = phase(ch) | |||||
| out = str2double(ch.MEAS('phas')); | |||||
| end | |||||
| end | |||||
| methods (Hidden, Access = private) | |||||
| function c = CHAN(ch,string) | |||||
| c = ['CHAN',num2str(ch.channelnumber),':',string]; | |||||
| end | |||||
| function c = MEAS(ch,string) | |||||
| c = ch.scope.query(['MEAS',num2str(ch.channelnumber),':RES:ACT?',string]); | |||||
| end | end | ||||
| function outputArg = method1(obj,inputArg) | |||||
| %METHOD1 Summary of this method goes here | |||||
| % Detailed explanation goes here | |||||
| outputArg = obj.Property1 + inputArg; | |||||
| function c = CHANsend(ch,string,in) | |||||
| c = ['CHAN',num2str(ch.channelnumber),':',string,' ',in]; | |||||
| end | end | ||||
| end | end | ||||
| end | end | ||||
| @@ -23,6 +23,9 @@ classdef Equipment < handle | |||||
| ecq.locked = false; | ecq.locked = false; | ||||
| ecq.channel = channel; | ecq.channel = channel; | ||||
| ecq.name = ecq.idn(); | ecq.name = ecq.idn(); | ||||
| if channel >= 0 | |||||
| ecq.setPrologix; | |||||
| end | |||||
| end | end | ||||
| function id = idn(ecq) | function id = idn(ecq) | ||||
| @@ -85,9 +88,10 @@ classdef Equipment < handle | |||||
| %This function sends the '++read'-command to the Prologix if | %This function sends the '++read'-command to the Prologix if | ||||
| %needed. Will always read the TCP-buffer in matlab. | %needed. Will always read the TCP-buffer in matlab. | ||||
| if ecq.channel >= 0 | if ecq.channel >= 0 | ||||
| write_unsafe('++read'); | |||||
| ecq.write_unsafe('++read'); | |||||
| end | end | ||||
| output = fscanf(ecq.tcp); | output = fscanf(ecq.tcp); | ||||
| fprintf(['<< ',output]); | |||||
| end | end | ||||
| function output = query(ecq,message) | function output = query(ecq,message) | ||||
| @@ -120,7 +124,7 @@ classdef Equipment < handle | |||||
| if i>1 %check for more than one error message. | if i>1 %check for more than one error message. | ||||
| warning('Error from device: %s %s',ecq.name,reshape(errorlist(1:i-1,:)',1,[])); | warning('Error from device: %s %s',ecq.name,reshape(errorlist(1:i-1,:)',1,[])); | ||||
| end | end | ||||
| ecq.clear; | |||||
| ecq.clear; | |||||
| break; | break; | ||||
| end | end | ||||
| end | end | ||||
| @@ -137,8 +141,10 @@ classdef Equipment < handle | |||||
| %See also WRITE, QUERY | %See also WRITE, QUERY | ||||
| if ecq.channel >= 0 | if ecq.channel >= 0 | ||||
| fprintf(ecq.tcp,['++addr ', num2str(ecq.channel)]); | fprintf(ecq.tcp,['++addr ', num2str(ecq.channel)]); | ||||
| fprintf(['>> ++addr ', num2str(ecq.channel),'\n']); | |||||
| end | end | ||||
| fprintf(ecq.tcp, message); | fprintf(ecq.tcp, message); | ||||
| fprintf(['>> ',message,'\n']); | |||||
| end | end | ||||
| function output = query_unsafe(ecq,message) | function output = query_unsafe(ecq,message) | ||||
| @@ -154,10 +160,15 @@ classdef Equipment < handle | |||||
| end | end | ||||
| methods (Access = protected, Hidden) | methods (Access = protected, Hidden) | ||||
| function setPrologix(ecq) | |||||
| fprintf(ecq.tcp, '++mode 1'); %set device in controller mode | |||||
| fprintf(ecq.tcp, '++auto 0'); %disable automatic datapull. this avoids errors on equipment. | |||||
| end | |||||
| function delete(ecq) | function delete(ecq) | ||||
| %DELETE Destructs the current object. | %DELETE Destructs the current object. | ||||
| ecq.unlock; | ecq.unlock; | ||||
| Equipment.getTCP(ecq.tcp.RemoteHost,-ecp.tcp.RemotePort); | |||||
| Equipment.getTCP(ecq.tcp.RemoteHost,-ecq.tcp.RemotePort); | |||||
| end | end | ||||
| end | end | ||||
| @@ -214,7 +225,7 @@ classdef Equipment < handle | |||||
| function num = forceNum(input) | function num = forceNum(input) | ||||
| %FORCENUM Throws an error if the input is not numeric. | %FORCENUM Throws an error if the input is not numeric. | ||||
| if ~isnum(input) | |||||
| if ~Equipment.isnum(input) | |||||
| error('Input should be a (single) number.'); | error('Input should be a (single) number.'); | ||||
| end | end | ||||
| num = input; | num = input; | ||||
| @@ -1,8 +1,14 @@ | |||||
| classdef Oscilloscope < Equipment | |||||
| classdef Oscilloscope < Equipment & dynamicprops | |||||
| %OSCILLOSCOPE Summary of this class goes here | %OSCILLOSCOPE Summary of this class goes here | ||||
| % Detailed explanation goes here | % Detailed explanation goes here | ||||
| properties | properties | ||||
| nchannels | |||||
| horizontalPosition | |||||
| ch1 | |||||
| ch2 | |||||
| ch3 | |||||
| ch4 | |||||
| end | end | ||||
| methods | methods | ||||
| @@ -11,7 +17,7 @@ classdef Oscilloscope < Equipment | |||||
| % Detailed explanation goes here | % Detailed explanation goes here | ||||
| obj@Equipment(ipAddress,port,-1); | obj@Equipment(ipAddress,port,-1); | ||||
| for i = 1:nchannels | for i = 1:nchannels | ||||
| obj.(['ch',num2str(i)]) = Channel(inputArg1,inputArg2); | |||||
| obj.(['ch',num2str(i)]) = Channel(obj,i); | |||||
| end | end | ||||
| end | end | ||||
| @@ -0,0 +1,28 @@ | |||||
| classdef Trigger | |||||
| %TRIGGER Summary of this class goes here | |||||
| % Detailed explanation goes here | |||||
| properties | |||||
| mode | |||||
| type | |||||
| source | |||||
| slope | |||||
| level | |||||
| coupling | |||||
| end | |||||
| methods | |||||
| function obj = Trigger(inputArg1,inputArg2) | |||||
| %TRIGGER Construct an instance of this class | |||||
| % Detailed explanation goes here | |||||
| obj.Property1 = inputArg1 + inputArg2; | |||||
| end | |||||
| function outputArg = method1(obj,inputArg) | |||||
| %METHOD1 Summary of this method goes here | |||||
| % Detailed explanation goes here | |||||
| outputArg = obj.Property1 + inputArg; | |||||
| end | |||||
| end | |||||
| end | |||||