timer doesn't work

6 Ansichten (letzte 30 Tage)
roberto
roberto am 20 Feb. 2023
Kommentiert: roberto am 22 Feb. 2023
hello everybody,with this timer I wonder why stops and don't carry on to execute. what's wrong? I want webread to be refreshed every 60 secs. tks
t = timer('TimerFcn', 'stat=false; disp(''Timer!'')',...
'StartDelay',60);
start(t)
stat=true;
while(stat==true)
webread('https://www..etc...');
pause(1)
end

Akzeptierte Antwort

Benjamin Kraus
Benjamin Kraus am 21 Feb. 2023
Bearbeitet: Benjamin Kraus am 21 Feb. 2023
@Walter Roberson already pointed you to the documentation on how to Share Data Between Workspaces, which provides several ways to achieve your goal. I suggest reading that doc page.
One quick and dirty way to do this is using assignin (the last thing listed on that doc page).
function doStuff()
intervalInS=60;
everyNowAndThen = timer("Period",intervalInS,"ExecutionMode","fixedRate","TimerFcn",@refresh);
everyNowAndThen.start();
function refresh(~,~)
assignin('base','tbl',webread('https://api........CSV'))
end
end
The function webread('https://api........CSV') will be executed, and the result will be stored in the variable named tbl in the base workspace (i.e. workspace available at the command line).
Keep in mind that this means that as you are working, and as long as the timer is running, the variable tbl will continually be overwritten with the new data. Any other changes you make will be lost every time the timer executes.
Also keep in mind that if you are running other code when the timer is due to execute, your timer will wait until the other code is done. The reverse is also true, if your timer is running the webread command, no other MATLAB code will execute.
If your call to webread takes more than a fraction of a section, MATLAB will appear to hang every minute while webread is executing, which could be a pretty unplesant experience. I'm not sure if webread works with backgroundPool, but if you find yourself in this situation, you may want to look into backgroundPool to allow this code to run independently of your main MATLAB thread.
  2 Kommentare
roberto
roberto am 22 Feb. 2023
tks very much Benjamin ,
the code works and I don't mind if tbl is overwritten , this is exactly what I want, since tbl every 60 sec. returns refreshed data.
tks to Walter, your suggestion about backgroundPool is useful.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Sulaymon Eshkabilov
Sulaymon Eshkabilov am 20 Feb. 2023
Here it shows that it is working. An alternative way is to use [tic .. toc] to count time if this is the objective:
Tspan = 10; % Time span 10 seconds
t = timer('TimerFcn', 'stat=false; disp(''Timer!'')', 'StartDelay',Tspan);
start(t)
tic
stat=true;
while(stat==true)
webread('https://www.mathworks.com');
pause(1)
end
Tend = toc;
fprintf('Total time with [tic...toc]: %f \n', Tend)
Total time with [tic...toc]: 10.636126
  3 Kommentare
Walter Roberson
Walter Roberson am 20 Feb. 2023
pause(60) to delay 1 minute.

Melden Sie sich an, um zu kommentieren.


Sulaymon Eshkabilov
Sulaymon Eshkabilov am 20 Feb. 2023
Here is how it can be attained:
Tspan = 240; % Time span 240 seconds
t = timer('TimerFcn', 'stat=false; disp(''Timer!'')', 'StartDelay', Tspan);
start(t)
Tupdated = 60;
tic
stat=true;
ii = 0;
while(stat==true)
ii=ii+1;
fprintf('WEB is read for %d time \n', ii);
DT={webread('https://www.mathworks.com')};
pause(Tupdated)
end
Tend = toc;
fprintf('Total time with [tic...toc]: %f \n', Tend)
  12 Kommentare
Walter Roberson
Walter Roberson am 21 Feb. 2023
No there is not.

Melden Sie sich an, um zu kommentieren.


roberto
roberto am 21 Feb. 2023
Bearbeitet: roberto am 21 Feb. 2023
with little changes the code works and refreshes on command window.
ans =
1000×5 table (this is the answer on command window).
but the problem is that the workspace is empty..no ans in table format.
how add the table (ans) from command window to workspace?
here the code to call webread:
function doStuff()
intervalInS=60;
everyNowAndThen = timer("Period",intervalInS,"ExecutionMode","fixedRate","TimerFcn",@refresh);
everyNowAndThen.start();
function refresh(~,~)
webread('https://api........CSV')
end
end
  1 Kommentar
roberto
roberto am 21 Feb. 2023
Bearbeitet: roberto am 21 Feb. 2023
any kind help?

Melden Sie sich an, um zu kommentieren.

Kategorien

Find more on Debugging and Analysis in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by