How to assign several D.Work Vectors?

I am working with Level 2 S function. In my code I need to get measurements of 10seconds. I am using 10 D.work vectors to assign 10 discrete values. But the code is only showing measurement of 10th second.From 1 to 9 second measurement is zero. How can I find exactly 10 measurements of 10 seconds.
function inpcall(block)
setup(block);
function setup(block)
block.NumInputPorts = 0;
block.NumOutputPorts = 1;
block.OutputPort(1).SamplingMode = 'sample';
%%Setup functional port to default
block.SetPreCompPortInfoToDefaults;
%%Setup output port
block.SampleTimes = [10 0];
block.SimStateCompliance = 'DefaultSimState';
block.RegBlockMethod('Start', @Start);
block.RegBlockMethod('Outputs', @Outputs); % Required
block.RegBlockMethod('Update', @Update);
block.RegBlockMethod('Terminate', @Terminate); % Required
block.RegBlockMethod('SetInputPortSamplingMode', @SetInpPortFrameData);
block.RegBlockMethod('PostPropagationSetup', @DoPostPropSetup);
function DoPostPropSetup(block)
% Setup Dwork
block.NumDworks = 10;
block.Dwork(1).Name = 'x1';
block.Dwork(1).Dimensions = 1;
block.Dwork(1).DatatypeID = 0;
block.Dwork(1).Complexity = 'Real';
block.Dwork(1).UsedAsDiscState = true;
block.Dwork(2).Name = 'x2';
block.Dwork(2).Dimensions = 1;
block.Dwork(2).DatatypeID = 0;
block.Dwork(2).Complexity = 'Real';
block.Dwork(2).UsedAsDiscState = true;
block.Dwork(3).Name = 'x3';
block.Dwork(3).Dimensions = 1;
block.Dwork(3).DatatypeID = 0;
block.Dwork(3).Complexity = 'Real';
block.Dwork(3).UsedAsDiscState = true;
block.Dwork(4).Name = 'x4';
block.Dwork(4).Dimensions = 1;
block.Dwork(4).DatatypeID = 0;
block.Dwork(4).Complexity = 'Real';
block.Dwork(4).UsedAsDiscState = true;
block.Dwork(5).Name = 'x5';
block.Dwork(5).Dimensions = 1;
block.Dwork(5).DatatypeID = 0;
block.Dwork(5).Complexity = 'Real';
block.Dwork(5).UsedAsDiscState = true;
block.Dwork(6).Name = 'x6';
block.Dwork(6).Dimensions = 1;
block.Dwork(6).DatatypeID = 0;
block.Dwork(6).Complexity = 'Real';
block.Dwork(6).UsedAsDiscState = true;
block.Dwork(7).Name = 'x7';
block.Dwork(7).Dimensions = 1;
block.Dwork(7).DatatypeID = 0;
block.Dwork(7).Complexity = 'Real';
block.Dwork(7).UsedAsDiscState = true;
block.Dwork(8).Name = 'x8';
block.Dwork(8).Dimensions = 1;
block.Dwork(8).DatatypeID = 0;
block.Dwork(8).Complexity = 'Real';
block.Dwork(8).UsedAsDiscState = true;
block.Dwork(9).Name = 'x9';
block.Dwork(9).Dimensions = 1;
block.Dwork(9).DatatypeID = 0;
block.Dwork(9).Complexity = 'Real';
block.Dwork(9).UsedAsDiscState = true;
block.Dwork(10).Name = 'x10';
block.Dwork(10).Dimensions = 1;
block.Dwork(10).DatatypeID = 0;
block.Dwork(10).Complexity = 'Real';
block.Dwork(10).UsedAsDiscState = true;
%endfunction
function Start(block)
fullpathToDll = 'Z:\Farha\2015_02_26_photometer_Datenlogger\PC-Software\CGMultChan.dll';
fullpathToHeader = 'Z:\Farha\2015_02_26_photometer_Datenlogger\PC-Software\CGMultChan.h';
fullpathToHeader;
fullpathToDll;
loadlibrary(fullpathToDll, fullpathToHeader);
libfunctions ('CGMultChan');
delete(instrfindall);
serialPort = 'COM1';
IP = calllib('CGMultChan','CGMultChan_Connect','192.168.100.158');%Connect to Data Loger
if (IP == 0)
end
out = instrfind('Port','COM1');
%Open Serial COM Port
s = serial(serialPort);
set(s,'BaudRate',57600,'DataBits', 8, 'Parity', 'none','StopBits', 1, 'FlowControl', 'none','Terminator','CR');
set(s,'Timeout',10);
fopen(s);
TI_ms = calllib('CGMultChan','CGMultChan_SetIntTime',.02*100);
tic
block.Dwork(1).Data = 1;
function Outputs(block)
block.OutputPort(1).Data = block.Dwork(1).Data; %+ %block.InputPort(1).Data;
count=0;
function Update(block)
nsamples=10
count=0
while (count < nsamples )
BufferSize=16;
pBuffer = libpointer('singlePtr',zeros(BufferSize,1));
data2 = calllib('CGMultChan','CGMultChan_MeasureAll',pBuffer);%Measurement
output = pBuffer.Value
count = count + 1;
time(count) = toc; %Extract Elapsed Time
data(count) = output(1)
end
%data(1:10) = output(1:10);
%block.Dwork(1).Data=double(data(1:10));
for i=1:10
block.Dwork(i).Data=double(data(i));
end
%end Update
function SetInpPortFrameData(block,idx,fd)
block.InputPort(idx).SamplingMode=fd;
for i=1:block.NumOutputPorts
block.OutputPort(i).SamplingMode=fd;
end
function Terminate(block)
serialPort = 'COM1';
s = serial(serialPort);
fclose(s);
clear pBuffer;
calllib('CGMultChan','CGMultChan_Disconnect');%Disconnect from Data Logger

Réponses (0)

Cette question est clôturée.

Clôturé :

le 20 Août 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by