浏览代码

veel

publish
Wouter Horlings 8 年前
父节点
当前提交
370fe834c3
共有 4 个文件被更改,包括 154 次插入15 次删除
  1. +103
    -9
      OOequipment/Channel.m
  2. +15
    -4
      OOequipment/Equipment.m
  3. +8
    -2
      OOequipment/Oscilloscope.m
  4. +28
    -0
      OOequipment/Trigger.m

+ 103
- 9
OOequipment/Channel.m 查看文件

@@ -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

+ 15
- 4
OOequipment/Equipment.m 查看文件

@@ -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;


+ 8
- 2
OOequipment/Oscilloscope.m 查看文件

@@ -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


+ 28
- 0
OOequipment/Trigger.m 查看文件

@@ -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


正在加载...
取消
保存