Commit 6eee99e0 authored by Fredrik Bagge Carlson's avatar Fredrik Bagge Carlson
Browse files

Update file structure

parent 74386a8a
module LabProcesses module LabProcesses
export AbstractProcess, PhycicalProcess, SimulatedProcess, BallAndBeam, BallAndBeamSimulator, BallAndBeamType
export num_outputs,
num_inputs,
outputrange,
inputrange,
isstable,
sampletime,
control,
measure
using ControlSystems
include("interface.jl")
include("interface_implementations/ballandbeam.jl")
include("utilities.jl") include("utilities.jl")
include("controllers.jl") include("controllers.jl")
# Interface specification ===================================================================
abstract type AbstractProcess end
abstract type PhycicalProcess <: AbstractProcess end
abstract type SimulatedProcess <: AbstractProcess end
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))")
sampletime(p::AbstractProcess) = error("Function not implemented for $(typeof(p))")
control(p::AbstractProcess, u) = error("Function not implemented for $(typeof(p))")
measure(p::AbstractProcess) = error("Function not implemented for $(typeof(p))")
initialize(p::AbstractProcess) = error("Function not implemented for $(typeof(p))")
finalize(p::AbstractProcess) = error("Function not implemented for $(typeof(p))")
# Interface implementation Ball And Beam ====================================================
struct BallAndBeam <: PhysicalProcess
h::Float64
end
BallAndBeam() = BallAndBeam(0.01)
struct BallAndBeamSimulator <: SimulatedProcess
h::Float64
end
BallAndBeamSimulator() = BallAndBeamSimulator(0.01)
const BallAndBeamType = Union{BallAndBeam, BallAndBeamSimulator}
num_outputs(p::BallAndBeamType) = 2
num_inputs(p::BallAndBeamType) = 1
outputrange(p::BallAndBeamType) = [(-10,10),(-1,1)] # Beam angle, Ball position
inputrange(p::BallAndBeamType) = [(-10,10)]
isstable(p::BallAndBeamType) = false
sampletime(p::BallAndBeamType) = p.h
control(p::BallAndBeam, u) = ccall((:comedi_write, comedipath),Int32,
(Int32,Int32,Int32,Int32),0,1,1,num2io(u[1]))
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
initialize(p::BallAndBeam) = ccall((:comedi_start, comedipath),Int32,(Int32,), 0)
finalize(p::BallAndBeam) = (control(P,0);ccall((:comedi_stop, "../c/comedi_bridge.so"),Int32,(Int32,), 0))
initialize(p::BallAndBeamSimulator) = nothing
finalize(p::BallAndBeamSimulator) = nothing
end # module end # module
export AbstractProcess, PhycicalProcess, SimulatedProcess
export num_outputs,
num_inputs,
outputrange,
inputrange,
isstable,
sampletime,
control,
measure
# Interface specification ===================================================================
abstract type AbstractProcess end
abstract type PhycicalProcess <: AbstractProcess end
abstract type SimulatedProcess <: AbstractProcess end
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))")
sampletime(p::AbstractProcess) = error("Function not implemented for $(typeof(p))")
control(p::AbstractProcess, u) = error("Function not implemented for $(typeof(p))")
measure(p::AbstractProcess) = error("Function not implemented for $(typeof(p))")
initialize(p::AbstractProcess) = error("Function not implemented for $(typeof(p))")
finalize(p::AbstractProcess) = error("Function not implemented for $(typeof(p))")
# Interface implementation Ball And Beam ====================================================
export BallAndBeam, BallAndBeamSimulator, BallAndBeamType
struct BallAndBeam <: PhysicalProcess
h::Float64
end
BallAndBeam() = BallAndBeam(0.01)
struct BallAndBeamSimulator <: SimulatedProcess
h::Float64
end
BallAndBeamSimulator() = BallAndBeamSimulator(0.01)
const BallAndBeamType = Union{BallAndBeam, BallAndBeamSimulator}
num_outputs(p::BallAndBeamType) = 2
num_inputs(p::BallAndBeamType) = 1
outputrange(p::BallAndBeamType) = [(-10,10),(-1,1)] # Beam angle, Ball position
inputrange(p::BallAndBeamType) = [(-10,10)]
isstable(p::BallAndBeamType) = false
sampletime(p::BallAndBeamType) = p.h
control(p::BallAndBeam, u) = ccall((:comedi_write, comedipath),Int32,
(Int32,Int32,Int32,Int32),0,1,1,num2io(u[1]))
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
initialize(p::BallAndBeam) = ccall((:comedi_start, comedipath),Int32,(Int32,), 0)
finalize(p::BallAndBeam) = (control(P,0);ccall((:comedi_stop, "../c/comedi_bridge.so"),Int32,(Int32,), 0))
initialize(p::BallAndBeamSimulator) = nothing
finalize(p::BallAndBeamSimulator) = nothing
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment