Kaynağa Gözat

IP cleaning toegevoegd. Port ondersteuning. veel comments

publish
Wouter Horlings 8 yıl önce
ebeveyn
işleme
094e45f12f
1 değiştirilmiş dosya ile 36 ekleme ve 15 silme
  1. +36
    -15
      OOequipment/Equipment.m

+ 36
- 15
OOequipment/Equipment.m Dosyayı Görüntüle

@@ -90,29 +90,48 @@ classdef Equipment < handle
end
function output = query(ecq,message)
%QUERY Sends command to the device and read the respond.
%The command is send via the WRITE and the respond is collected
%
ecq.opc;
output = ecq.query_unsafe(message);
ecq.error;
end
function errorlist = get.error(ecq)
%ERROR Checks for errors on device. If any, throws a warning.
%The function will pull all errors from the device error stack.
%This is up to a maximum of 20 errors. If errors have occured
%the function will throw a warning with all the error messages.
for i = 1:20
output = ecq.query_unsafe('SYSTem:ERRor?');
errorlist(i,1:(length(output))) = output;
%errorcode = regexp(output,'\d*','match','once');
if str2double(regexp(output,'\d*','match','once'))==0
if i>1
output = ecq.query_unsafe('SYSTem:ERRor?'); %Query error message from device.
errorlist(i,1:(length(output))) = output; %Store the error message in the errorlist array.
%GPIB protocol states that the error code '0' means no
%error. The for loop will break if the last recieved error
%code is zero.
if str2double(regexp(output,'\d*','match','once'))==0 %Check if last recieved error code is '0'
% If the 'no error' message is the only error then no
% warning will be trown. However if there is more than
% one error in the list. The function gives a warning
% with all error messages.
if i>1 %check for more than one error message.
warning('Error from device: %s %s',ecq.name,reshape(errorlist(1:i-1,:)',1,[]));
ecq.clear;
end
ecq.clear;
break;
end
end
end
end
methods (Access = protected, Hidden)
methods (Access = protected)
function write_unsafe(ecq,message)
%WRITE_UNSAFE Sends command to device.
%This function does not check if device is ready or check if an
%error occured after writing. If possible one should always use
%the WRITE function.
%
%See also WRITE
if ecq.channel >= 0
fprintf(ecq.tcp,['++addr ', num2str(ecq.channel)]);
end
@@ -123,11 +142,13 @@ classdef Equipment < handle
ecq.write_unsafe(message);
output = read(ecq);
end
end
methods (Access = protected, Hidden)
function delete(ecq)
%DELETE Destructs the current object.
ecq.unlock;
Equipment.getTCP(ecq.tcp.RemoteHost,-1);
Equipment.getTCP(ecq.tcp.RemoteHost,-ecp.tcp.RemotePort);
end
end
@@ -135,8 +156,8 @@ classdef Equipment < handle
methods (Static)
function tcpobject = getTCP(ipAddress,port)
persistent tcpconnection;
ipname = Equipment.ip2structname(ipAddress);
if port > 0
[ipname,ipAddress] = Equipment.ip2structname(ipAddress,abs(port));
if port > 0
if isempty(tcpconnection)
tcpconnection = struct;
end
@@ -149,7 +170,7 @@ classdef Equipment < handle
tcpconnection.(ipname).nopen = tcpconnection.(ipname).nopen + 1;
end
tcpobject = tcpconnection.(ipname).tcp;
elseif port == -1
elseif port < 0
if tcpconnection.(ipname).nopen > 1
tcpconnection.(ipname).nopen = tcpconnection.(ipname).nopen - 1;
else
@@ -178,10 +199,10 @@ classdef Equipment < handle
error('Invalid IP-address');
end
end
function structname = ip2structname(ipAddress)
Equipment.iptest(ipAddress);
ipmatch = regexprep(ipAddress,'\.','_');
structname = ['ip',ipmatch];
function [structname,cleanIP] = ip2structname(ipAddress,port)
cleanIP = regexprep(ipAddress,'(?:(?<=\.)|^)(?:0+)(?=\d)','');
Equipment.iptest(cleanIP);
structname = matlab.lang.makeValidName(['ip',cleanIP,'_',num2str(port)]);
end
end
end

Yükleniyor…
İptal
Kaydet