Files
mocha/scripts/mcamon.m
2017-09-19 11:58:36 +02:00

67 lines
2.5 KiB
Matlab

function varargout = mcamon(handle,varargin)
%MCAMON - install or replace monitor on a PV
%
% STS = MCAMON(HANDLE) installs monitor with default callback.
% Default callback updates local copy of the channel data
% every time the data changes on the server.
% This cached data can be read at later time into MATLAB with MCACACHE.
% HANDLE - integer handle to a channel previously opened with MCAOPEN
% Returns 1 on success, 0 on failure
%
% STS = MCAMON(HANDLE,CALLBACKSTRING) installs a monitor and specifies
% a callback string for each. A callback string must be a MATLAB command,
% sequence of commands or a name of a script/function on the MATLAB path.
% It is executed in the 'base' workspace (AFTER the default callback) on
% the next poll of the queue by the MCAMONTIMER command.
% Returns 1 on success, 0 on failure
%
% [HANDLES, CALLBACKSTRINGS]=MCAMON with no arguments returns information
% on all currently installed monitors
%
% Note: Monitors can be installed with MCAMON and cleared with
% MCACLEARMON any number of times. Use MCAMONTIMER to initialise
% the MATLAB timer which polls and processes the outstanding MCA Monitor
% callback queue.
%
% Note: Use of asynchronous features of EPICS (such as monitors)
% with MATLAB requires special care - read MCA notes.
%
% 1.In CA client library (EPICS R3.13.4) asynchronous callbacks run one at a time
% to completion. This means that MATLAB callback string installed with MCAMON
% may not itself contain other MCA functions that call CA library such as MCAGET
% For example MCAMON(H1, 'X=MCAGET(H2);') will not work.
% MCAMON(H1, X='MCACACHE(H2);') is OK since MCACACHE does not use CA library.
%
% See also MCAMONTIMER, MCACACHE, MCAGET, MCACLEARMON.
if nargin ==1
%varargout{1}=mca(100,handle);
monID=mocha('monitor', handle); %return monitorID
status=0;
if (monID > 4095) %1st onid is 0xff (4096)
status=1;
end
varargout{1}=status;
elseif nargin==2
if ischar(varargin{1})
%varargout{1} = mca(100,handle,varargin{1});
monID=mocha('monitor', handle, varargin{1} )
status=0;
if (monID > 4095)
status=1;
end
else
error('Second argument must be a string');
end
elseif nargin == 0
if nargout == 2
%[varargout{1},varargout{2}]=mca(500);
[varargout{1},varargout{2}]=mocha ('getMonitorHandlesAndActions');
else
%varargout{1}=mca(500);
varargout{1}=mocha ('getMonitorHandles');
end
end