diff --git a/src/interface_implementations/ballandbeam.jl b/src/interface_implementations/ballandbeam.jl index f42fbe05f98f7fc5a74368aea75a8a13ff827748..77dbe7f7cd7ab2962360e5d63e810699bf9696d8 100644 --- a/src/interface_implementations/ballandbeam.jl +++ b/src/interface_implementations/ballandbeam.jl @@ -24,12 +24,22 @@ Physical beam process - `measure::AnalogInput10V = AnalogInput10V(0)` - `control::AnalogOutput10V = AnalogOutput10V(1)` """ -@with_kw struct Beam <: PhysicalProcess - h::Float64 = 0.01 - bias::Float64 = 0.0 - stream::LabStream = ComediStream() - measure::AnalogInput10V = AnalogInput10V(0) - control::AnalogOutput10V = AnalogOutput10V(1) +struct Beam <: PhysicalProcess + h::Float64 + bias::Float64 + stream::LabStream + measure::AnalogInput10V + control::AnalogOutput10V +end +function Beam(; + h::Float64 = 0.01, + bias::Float64 = 0., + stream::LabStream = ComediStream(), + measure::AnalogInput10V = AnalogInput10V(0), + control::AnalogOutput10V = AnalogOutput10V(1)) + p = new(Float64(h),Float64(bias),stream,measure,control) + init_devices!(p.stream, p.measure, p.control) + p end include("define_beam_system.jl") @@ -41,13 +51,24 @@ struct BeamSimulator <: SimulatedProcess BeamSimulator(;h::Real = 0.01) = new(Float64(h), SysFilter(beam_system, h)) end -@with_kw struct BallAndBeam <: PhysicalProcess - h::Float64 = 0.01 - bias::Float64 = 0.0 - stream::LabStream = ComediStream() - measure1::AnalogInput10V = AnalogInput10V(0) - measure2::AnalogInput10V = AnalogInput10V(1) - control::AnalogOutput10V = AnalogOutput10V(0) +struct BallAndBeam <: PhysicalProcess + h::Float64 + bias::Float64 + stream::LabStream + measure1::AnalogInput10V + measure2::AnalogInput10V + control::AnalogOutput10V +end +function BallAndBeam(; + h = 0.01, + bias = 0., + stream = ComediStream(), + measure1::AnalogInput10V = AnalogInput10V(0), + measure2::AnalogInput10V = AnalogInput10V(1), + control::AnalogOutput10V = AnalogOutput10V(1)) + p = new(h,bias,stream,measure1,measure2,control) + init_devices!(p.stream, p.measure1, p.measure2, p.control) + p end struct BallAndBeamSimulator <: SimulatedProcess @@ -84,10 +105,9 @@ measure(p::BeamSimulator) = vecdot(p.s.sys.C,p.s.state) measure(p::BallAndBeamSimulator) = error("Not yet implemented") -initialize(p::Beam) = init_devices!(p.stream, p.measure, p.control) -initialize(p::BallAndBeam) = init_devices!(p.stream, p.measure1, - p.measure2, p.control) -finalize(p::AbstractBeamOrBallAndBeam) = close(p.stream) +initialize(p::Beam) = nothing +initialize(p::BallAndBeam) = nothing +finalize(p::AbstractBeamOrBallAndBeam) = foreach(close, p.stream.devices) initialize(p::BallAndBeamSimulator) = nothing finalize(p::BallAndBeamSimulator) = nothing initialize(p::BeamSimulator) = p.s.state .*= 0 diff --git a/src/interface_implementations/eth_helicopter.jl b/src/interface_implementations/eth_helicopter.jl index aab34a8a4e192b700a2d6855b2c5ea6c9b411dbf..9606f23328bbf939a5556c33e7d4781773c5fb90 100644 --- a/src/interface_implementations/eth_helicopter.jl +++ b/src/interface_implementations/eth_helicopter.jl @@ -22,13 +22,25 @@ export ETHHelicopter, ETHHelicopterSimulator, AbstractETHHelicopter - `control2::AnalogOutput10V = AnalogOutput10V(1)` """ @with_kw struct ETHHelicopter <: PhysicalProcess - h::Float64 = 0.05 - bias::Float64 = 0.0 - stream::LabStream = ComediStream() - measure1::AnalogInput10V = AnalogInput10V(0) - measure2::AnalogInput10V = AnalogInput10V(1) - control1::AnalogOutput10V = AnalogOutput10V(0) - control2::AnalogOutput10V = AnalogOutput10V(1) + h::Float64 + bias::Float64 + stream::LabStream + measure1::AnalogInput10V + measure2::AnalogInput10V + control1::AnalogOutput10V + control2::AnalogOutput10V +end +function ETHHelicopter(; + h = 0.05, + bias = 0., + stream = ComediStream(), + measure1::AnalogInput10V = AnalogInput10V(0), + measure2::AnalogInput10V = AnalogInput10V(1), + control1::AnalogOutput10V = AnalogOutput10V(0), + control2::AnalogOutput10V = AnalogOutput10V(1)) + p = new(h,bias,stream,measure1,measure2,control1,control2) + init_devices!(p.stream, p.measure1, p.measure2, p.control1, p.control2) + p end @@ -55,15 +67,12 @@ function control(p::ETHHelicopter, u) send(p.control2,u[2]) end -measure(p::ETHHelicopter) = [read(p.measure1), read(p.measure2)] #i=0 for pitch, i=1 for yaw - - +measure(p::ETHHelicopter) = [read(p.measure1), read(p.measure2)] control(p::ETHHelicopterSimulator, u) = error("Not yet implemented") measure(p::ETHHelicopterSimulator) = error("Not yet implemented") - -initialize(p::ETHHelicopter) = init_devices!(p.stream, p.measure1, p.measure2, p.control1, p.control2) -finalize(p::ETHHelicopter) = close(p.stream) +initialize(p::ETHHelicopter) = nothing +finalize(p::ETHHelicopter) = foreach(close, p.stream.devices) initialize(p::ETHHelicopterSimulator) = nothing finalize(p::ETHHelicopterSimulator) = nothing