이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
Use of timer: what's the code to indicate that its period of time is expired?
조회 수: 1 (최근 30일)
이전 댓글 표시
Umberto
2013년 4월 3일
I created a timer with a period of 30 seconds: the program has to execute some tasks if this period is passed. How do i write the code for expressing the fact that the period is passed?
답변 (2개)
Doug Hull
2013년 4월 3일
편집: Doug Hull
2013년 4월 3일
It is not clear what you are asing, but this is a primer on timers.
댓글 수: 1
Umberto
2013년 4월 4일
I didnt't find the answer. Here is my code
V = xlsread('data.xls', 1, 'C2:C1002'); %import data from Excel
t = timer('Period', 30, 'TimerFcn', @(~,~)calculate(V, g, n, Vmin, Vmax));
function calculate(V, g, n, Vmin, Vmax)
for i=1:n
if V(i) < Vmin
start(t);
if %30 seconds have passed
V(i) = V(i)+ g;
end
elseif V(i) > Vmax
start(t);
if %30 seconds have passed
V(i) = V(i)- g;
end
elseif (V(i) >= Vmin && V(i) <= Vmax)
stop(t);
end
end
how do I express in code the sentence "30 seconds have passed"?
Sean de Wolski
2013년 4월 4일
One thing you could be do would be to toc a tic that was started earlier. However, the best approach would be to get the InstantPeriod from the timer object
function timerNSeconds
T = timer('Period',10,... %period
'ExecutionMode','fixedRate',... %{singleShot,fixedRate,fixedSpacing,fixedDelay}
'BusyMode','drop',... %{drop, error, queue}
'TasksToExecute',2,...
'StartDelay',0,...
'TimerFcn',@(src,evt)tfcn(src,evt,pi),...
'StartFcn',[],...
'StopFcn',[],...
'ErrorFcn',[]);
start(T);
end
function tfcn(src,evt,piapprox)
pause(10) %comment this line to have it not exceed
pi
if get(src,'InstantPeriod') > 10
disp('Period exceeded 10');
end
end
Uncomment the pause to see it working with not exceeding the 10s.
댓글 수: 20
Umberto
2013년 4월 5일
Do I need "src" and "evt" parameters in my code instead of @(~,~) to make it work?
Umberto
2013년 4월 5일
I tried but there's another problem with my code. The error message is "the value assigned to variable 't' might be unused". How can I solve it?
Sean de Wolski
2013년 4월 5일
That's just a code analyzer warning telling you it thinks you're doing something weird. (It tends to be right)
Umberto
2013년 4월 8일
I just can't find out where the problem is, why variable t is unused? I tried
function calculate(t, V, g, n, Vmin, Vmax)
but it doesn't work
Jan
2013년 4월 8일
What does "it doesn't work" exactly mean? We cannot guess these details. We want to help, so please let us and explain the occurring problem.
Umberto
2013년 4월 8일
The function "calculate" isn't executed by the program. I know it because i wrote
function calculate(t, V, g, n, Vmin, Vmax)
disp('now executing function');
but i don't see this message in the outputs.
Umberto
2013년 4월 9일
@Sean I changed it because i need to use my algorithm. Now i have this code
function simulation
%%parameters
Vnom = 3850;
s = 0.01;
delay = 30;
g = 50;
n = 1000;
Vmin = Vnom*(1-s);
Vmax = Vnom*(1+s);
V = xlsread('data.xls', 1, 'C2:C1002'); %import data from Excel
t = timer('Period', delay,... %period
'ExecutionMode','fixedRate',... %{singleShot,fixedRate,fixedSpacing,fixedDelay}
'BusyMode','drop',... %{drop, error, queue}
'StartDelay',0,...
'TimerFcn',@(src,evt)calculate(V, g, n, Vmin, Vmax),...
'StartFcn',[],...
'StopFcn',[],...
'ErrorFcn',[]);
end
function calculate(t, src, V, g, n, Vmin, Vmax)
disp('now executing function');
for i=1:n
if V(i) < Vmin
start(t);
if get(src,'InstantPeriod') > delay
V(i) = V(i)+ g;
end
elseif V(i) > Vmax
start(t);
if get(src,'InstantPeriod') > delay
V(i) = V(i)- g;
end
elseif (V(i) >= Vmin && V(i) <= Vmax)
stop(t);
end
end
xlswrite('data.xls', V, 1, 'E2:E1002');
end
Also you put start(t) before the timer function: i need to start the timer only if V(i) < Vmin or if V(i) > Vmax
Sean de Wolski
2013년 4월 9일
The problem looks like the calling syntax for setting up the timerfcn is different than the calling syntax for calculate().
Sean de Wolski
2013년 4월 10일
Use the same calling syntax...
calculate(t, src, V, g, n, Vmin, Vmax)
v.
calculate(V, g, n, Vmin, Vmax),...
Umberto
2013년 4월 11일
I used the same syntax calculate (V, g, n, Vmin, Vmax) but I still have the same problem.
Jan
2013년 4월 11일
@Umberto: Please do not let us guess, what your problem is. Formerly you told us, that there is the message, that "t" is unused. Now you have removed the "t" and get the same message? This is impossible. So please do not assume, that we use crystal balls, but explain the problem exactly and post the relevant part of the code.
Umberto
2013년 4월 11일
function simulation
V = xlsread('data.xls', 1, 'C2:C1002'); %import data from Excel
t = timer('Period', delay,... %period
'ExecutionMode','fixedRate',... %{singleShot,fixedRate,fixedSpacing,fixedDelay}
'BusyMode','drop',... %{drop, error, queue}
'StartDelay',0,...
'TimerFcn',@(src,evt)calculate(V, g, n, Vmin, Vmax),...
'StartFcn',[],...
'StopFcn',[],...
'ErrorFcn',[]);
end
function calculate(V, g, n, Vmin, Vmax)
disp('now executing function');
for i=1:n
if V(i) < Vmin
start(t);
if get(src,'InstantPeriod') > delay
V(i) = V(i)+ g;
end
elseif V(i) > Vmax
start(t);
if get(src,'InstantPeriod') > delay
V(i) = V(i)- g;
end
elseif (V(i) >= Vmin && V(i) <= Vmax)
stop(t);
end
end
I have 2 problems:
1)error message "variable t might be unused"
2)the function calculate isn't executed by the program because I don't see the message 'now executing function' in the outputs.
Sean de Wolski
2013년 4월 11일
So what you're trying to do here isn;t working for a few reasons.
First, t is scoped to the parent function simulation so that is why it does not exist in the subfunction calculate.
Second, I don't understand why you want to start the timer inside of its timerfcn. That doesn't make sense to me.
Third, you are not passing src into calculate(). Thus it will error, you need to pass in src like I did in my original.
Umberto
2013년 4월 11일
Ok I understood what you mean and I made some changes: I passed src into calculate() and started the timer before calculate(). However i need to use t into function calculate and I didn't manage to do it, i get "Undefined function or variable 't'" error message. Is there a way solve this problem?
Umberto
2013년 4월 12일
But if I pass src to calculate() then why I get the "Undefined function or variable 't'" message?
Sean de Wolski
2013년 4월 12일
Because you don't pass t!!!! You've renamed it to src even though it is the same thing. You call it t instead if you wish; it's just a good programming practice to call the handle of the source object of a callback src or similar.
참고 항목
태그
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
아시아 태평양
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)