add circles demo
This commit is contained in:
6
iocBoot/Makefile
Normal file
6
iocBoot/Makefile
Normal file
@ -0,0 +1,6 @@
|
||||
TOP = ..
|
||||
include $(TOP)/configure/CONFIG
|
||||
DIRS += $(wildcard *ioc*)
|
||||
DIRS += $(wildcard as*)
|
||||
include $(CONFIG)/RULES_DIRS
|
||||
|
18
iocBoot/README
Normal file
18
iocBoot/README
Normal file
@ -0,0 +1,18 @@
|
||||
Demo IOCs
|
||||
|
||||
ioccircle and ioccircle together demonstrate PVA groups and links.
|
||||
ioccircle maintains a "phase" counter which counts from 0 to 359
|
||||
then rolls over.
|
||||
|
||||
From this phase are calculated an X and Y which are points on a circule with radius 1.
|
||||
|
||||
A group PVA PV is defined which includes both and X and Y.
|
||||
|
||||
ioccircle2 contains two calc records which subscribe to the X and Y
|
||||
from ioccircle and multiply each by 2.
|
||||
|
||||
A second group PVA PV is defined including the multipled X and Y.
|
||||
|
||||
Due to the atomicity of a group PV it is certain that pairs of
|
||||
X and Y will not be mixed. In this example, the magnitude
|
||||
sqrt(X*X+Y*Y) will never change by more than floating point epsilon.
|
5
iocBoot/ioccircle/Makefile
Normal file
5
iocBoot/ioccircle/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
TOP = ../..
|
||||
include $(TOP)/configure/CONFIG
|
||||
ARCH = linux-x86_64-debug
|
||||
TARGETS = envPaths
|
||||
include $(TOP)/configure/RULES.ioc
|
53
iocBoot/ioccircle/circle.db
Normal file
53
iocBoot/ioccircle/circle.db
Normal file
@ -0,0 +1,53 @@
|
||||
record(ao, "circle:step") {
|
||||
field(VAL , "1.0")
|
||||
field(DRVL, "0.0")
|
||||
field(DRVH, "359")
|
||||
field(PINI, "YES")
|
||||
# field(TPRO, "1")
|
||||
}
|
||||
|
||||
record(ao, "circle:period") {
|
||||
field(VAL , "1.0")
|
||||
field(PINI, "YES")
|
||||
field(OUT , "circle:y.ODLY NPP")
|
||||
# field(TPRO, "1")
|
||||
}
|
||||
|
||||
record(calc, "circle:angle") {
|
||||
field(PINI, "RUNNING")
|
||||
# field(SCAN, "2 second")
|
||||
field(INPA, "circle:angle NPP")
|
||||
field(INPB, "circle:step NPP")
|
||||
field(INPD, "360")
|
||||
field(CALC, "C:=A+B;(C>D)?C-D:C")
|
||||
field(FLNK, "circle:x")
|
||||
field(PREC, "3")
|
||||
# field(TPRO, "1")
|
||||
info(pdbGroup, "circle|angle=VAL")
|
||||
}
|
||||
|
||||
record(calc, "circle:x") {
|
||||
field(INPA, "circle:angle NPP")
|
||||
field(CALC, "cos(A*PI/180)")
|
||||
field(TSEL, "circle:angle.TIME")
|
||||
field(FLNK, "circle:y")
|
||||
field(PREC, "3")
|
||||
info(pdbGroup, "circle|x=VAL")
|
||||
}
|
||||
|
||||
record(calc, "circle:y") {
|
||||
field(INPA, "circle:angle NPP")
|
||||
field(CALC, "sin(A*PI/180)")
|
||||
field(TSEL, "circle:angle.TIME")
|
||||
field(PREC, "3")
|
||||
field(FLNK, "circle:tick")
|
||||
info(pdbGroup, "circle|y=VAL")
|
||||
info(pdbTrigger,"circle|y>*")
|
||||
|
||||
}
|
||||
|
||||
record(calcout, "circle:tick") {
|
||||
field(ODLY, "1.0")
|
||||
field(OUT , "circle:angle.PROC CA") # loop
|
||||
# field(TPRO, "1")
|
||||
}
|
5
iocBoot/ioccircle/st.cmd
Executable file
5
iocBoot/ioccircle/st.cmd
Executable file
@ -0,0 +1,5 @@
|
||||
#!../../bin/linux-x86_64-debug/softIocPVA
|
||||
|
||||
dbLoadRecords("circle.db","")
|
||||
|
||||
iocInit()
|
5
iocBoot/ioccircle2/Makefile
Normal file
5
iocBoot/ioccircle2/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
TOP = ../..
|
||||
include $(TOP)/configure/CONFIG
|
||||
ARCH = linux-x86_64-debug
|
||||
TARGETS = envPaths
|
||||
include $(TOP)/configure/RULES.ioc
|
27
iocBoot/ioccircle2/circle2.db
Normal file
27
iocBoot/ioccircle2/circle2.db
Normal file
@ -0,0 +1,27 @@
|
||||
record(calc, "circle2:x") {
|
||||
field(INPA, "pva://circle.x CP")
|
||||
field(CALC, "2*A")
|
||||
field(FLNK, "circle2:y")
|
||||
info(pdbGroup, "circle2|x=VAL")
|
||||
# field(TPRO, "1")
|
||||
}
|
||||
|
||||
record(calc, "circle2:y") {
|
||||
field(INPA, "pva://circle.y")
|
||||
field(CALC, "2*A")
|
||||
field(TSEL, "circle2:x.TIME")
|
||||
field(FLNK, "circle2:mag")
|
||||
info(pdbGroup, "circle2|y=VAL")
|
||||
# field(TPRO, "1")
|
||||
}
|
||||
|
||||
record(calc, "circle2:mag") {
|
||||
field(INPA, "circle2:x NPP")
|
||||
field(INPB, "circle2:y NPP")
|
||||
field(CALC, "SQRT(A*A+B*B)")
|
||||
field(MDEL, "-1")
|
||||
field(TSEL, "circle2:x.TIME")
|
||||
info(pdbGroup, "circle2|mag=VAL")
|
||||
info(pdbTrigger,"circle2|mag>*")
|
||||
# field(TPRO, "1")
|
||||
}
|
5
iocBoot/ioccircle2/st.cmd
Executable file
5
iocBoot/ioccircle2/st.cmd
Executable file
@ -0,0 +1,5 @@
|
||||
#!../../bin/linux-x86_64-debug/softIocPVA
|
||||
|
||||
dbLoadRecords("circle2.db","")
|
||||
|
||||
iocInit()
|
Reference in New Issue
Block a user