diff --git a/src/LabProcesses.jl b/src/LabProcesses.jl index 1c963b0fa1b205b7bd778c361ef7b6b97732bab8..31f15627660295d7d4d4b54fb7008565033ea8bb 100644 --- a/src/LabProcesses.jl +++ b/src/LabProcesses.jl @@ -1,12 +1,24 @@ module LabProcesses +export AbstractProcess, PhycicalProcess, SimulatedProcess, BallAndBeam, BallAndBeamSimulator, BallAndBeamType +export num_outputs, + num_inputs, + outputrange, + inputrange, + isstable, + sampletime, + control, + measure + + +include("utilities.jl") # Interface specification =================================================================== abstract type AbstractProcess end abstract type PhycicalProcess <: AbstractProcess end abstract type SimulatedProcess <: AbstractProcess end -num_outputs(p::AbstractProcess) = p.ny -num_inputs(p::AbstractProcess) = p.nu +num_outputs(p::AbstractProcess) = error("Function not implemented for $(typeof(p))") +num_inputs(p::AbstractProcess) = error("Function not implemented for $(typeof(p))") outputrange(p::AbstractProcess) = error("Function not implemented for $(typeof(p))") inputrange(p::AbstractProcess) = error("Function not implemented for $(typeof(p))") isstable(p::AbstractProcess) = error("Function not implemented for $(typeof(p))") @@ -39,13 +51,12 @@ control(p::BallAndBeam, u) = ccall((:comedi_write, comedipath),Int32, measure(p::BallAndBeam) = io2num(ccall((:comedi_read,comedipath), Int32, (Int32,Int32,Int32), 0,0,0)) +control(p::BallAndBeamSimulator, u) = error("Not yet implemented") +measure(p::BallAndBeamSimulator) = error("Not yet implemented") + const comedipath = "../c/comedi_bridge.so" const conversion = 65535/20 io2num(x) = x/conversion -10 # Converts from io to float num2io(x) = round(Int32,x*100 + 2050) # Converts from regular number to io -control(p::BallAndBeamSimulator, u) = error("Not yet implemented") -measure(p::BallAndBeamSimulator) = error("Not yet implemented") - - end # module diff --git a/src/utilities.jl b/src/utilities.jl new file mode 100644 index 0000000000000000000000000000000000000000..86be3b8488ed97877433c2d52b430795ec582b03 --- /dev/null +++ b/src/utilities.jl @@ -0,0 +1,14 @@ +export periodically + +""" + @periodically(h, body) +Ensures that the body is run with an interval of `h >= 0.001` seconds. +""" +macro periodically(h, body) + quote + local start_time = time() + $(esc(body)) + local execution_time = time()-start_time + sleep(max(0,$h-execution_time)) + end +end