Hello,
it works but if I use the OUT field in the Calc record I have a problem.
record(ao, "SetVolt") { field(DESC, "VoltOut") field(EGU, "V")â€ژ }
record(calcout, "Calc") { field(DESC, "Counter") field(SCAN, "1 second") field(CALC, "A:=(C<(A-B)&&C!=D)?(A-B):((A+B)>C?C:A+B);A") field(INPA, "0") field(INPB, "1") field(INPC, "SetVolt") field(OUT, "writeOut PP") }
The record writeOut has a field OUT = proto writeout... device and works if I set a value. But if I use this record with the calc record I have a problem.
After starting the ioc the LED-value is wrong and jumps between a and c. â€ژBut in the Shell the value is stop from increasing.
Von: Mooney, Tim M. Gesendet: Donnerstag, 27. August 2015 19:32â€ژ Betreff: RE: Records for slow control |
You don't actually have to stop the calc record. You could just stop the value from increasing.
The following _expression_ holds the increasing value in the 'a' field, and increases it by 'b' until
it reaches 'c'. Then it returns the value of 'a' as the _expression_ result.
a:=((a+b)>c?c:a+b); a
Tim Mooney ( [email protected]) (630)252-5417
Beamline Controls Group (www.aps.anl.gov)
Advanced Photon Source, Argonne National Lab
Hello,
and how can I stop a calc record?
I want to set a new value like 100, 200, 300 V.... then I want to compare this value with the current value and increase or decrease this value
every 10 seconds in 5V-steps. â€ژMaybe someone have an idea. One problem is to stop the calc record if current value = new value.
Thanks.
Von: Mooney, Tim M.
Gesendet: Mittwoch, 26. August 2015 17:20
Betreff: RE: Records for slow control
|
There are two databases in the synApps std module that demonstrate different ways of doing this with EPICS records:
std/stdApp/Db/timer.*
std/stdApp/op/adl/timer.*
std/stdApp/Db/countDownTmer.*
std/stdApp/op/adl/countDownTimer.*
Tim Mooney ( [email protected]) (630)252-5417
Beamline Controls Group (www.aps.anl.gov)
Advanced Photon Source, Argonne National Lab
Hello,
but I want to increase the value for example every hour. The time have to be variable so I need a calcout timer to count for example every 10 second from 0 to â€ژ50 and then to increase the value step by step. My problem is how to realise this with two records.
One have to increase +1, then go to the timer record and wait for example one hour set value and again: increase +1, then process timer or counter for slowly periodic scan, set value.
Thanks.
Von: Ralph Lange
Gesendet: Mittwoch, 26. August 2015 11:58
An: EPICS Tech-Talk
Betreff: Re: Records for slow control
|
On 26/08/2015 11:39,
[email protected] wrote:
Hello,
I want to set a value like 200 ampere and increase the current value slowly but how?
I have a timer-record with a PROC field with the option "transition to zero". A second record increase the value every time. Is it possible to create records like this:
• Calcout1 timer: scan every second from 1 to 10
• -آ» then process Calcout2 (via PROC field, without SCAN field) from 1 to 3
• Calcout2 have to wait, process Calcout1 again...
In the ao record that is setting your value, set the field SCAN to "1 second" (or how often you want to "slowly" update) and the field OROC to the step size that you want to the value to change every time (e.g. 0.1).
No other records needed.
Now, when you write a value like 200 to that record, the output will step up by 0.1 every second. (Or whatever step size and update rate you configured.)
Hope this helps,
~Ralph
|