From a49631353e6dda10c31c436089efb04517f37984 Mon Sep 17 00:00:00 2001 From: Martin Heyden <martin.heyden@control.lth.se> Date: Wed, 8 May 2019 08:59:38 +0200 Subject: [PATCH] Updated flexible servo --- src/LabProcesses.jl | 1 + src/interface_implementations/flexibleservo.jl | 15 ++++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/LabProcesses.jl b/src/LabProcesses.jl index b2f1a68..49a3e91 100644 --- a/src/LabProcesses.jl +++ b/src/LabProcesses.jl @@ -17,6 +17,7 @@ include("interface.jl") include("interface_documentation.jl") include("interface_implementations/ballandbeam.jl") include("interface_implementations/eth_helicopter.jl") +include("interface_implementations/flexibleservo.jl") include("reference_generators.jl") include("controllers.jl") diff --git a/src/interface_implementations/flexibleservo.jl b/src/interface_implementations/flexibleservo.jl index 9894fdd..2ba12ca 100644 --- a/src/interface_implementations/flexibleservo.jl +++ b/src/interface_implementations/flexibleservo.jl @@ -3,7 +3,7 @@ #TODO export get_states and define process export FlexibleServo, FlexibleServoSimulator, AbstractFlexibleServo, define_flexible_servo - +export num_states, get_state struct FlexibleServo <: PhysicalProcess h::Float64 stream::LabStream @@ -14,7 +14,7 @@ end function FlexibleServo(; h::Float64 = 0.01, - stream:LabStream = ComediStream(), + stream::LabStream = ComediStream(), measure1::AnalogInput10V = AnalogInput10V(0), measure2::AnalogInput10V = AnalogInput10V(1), control::AnalogOutput10V = AnalogOutput10V(1)) @@ -46,17 +46,17 @@ function define_flexible_servo() end struct FlexibleServoSimulator <: SimulatedProcess - x::Array{Float64,1} h::Float64 + x::Array{Float64,2} #TODO Dim 1 or 2? Result of matrix mult is dim 2? Φ::Array{Float64,2} Γ::Array{Float64,2} C::Array{Float64,2} end -function FlexibleServoSimulator (;h::Float64 =0.01) - Gp = ss(A,B,C,D) +function FlexibleServoSimulator(;h::Float64 =0.01) + Gp = define_flexible_servo() Gp_disc = c2d(Gp, h) - return FlexibleServo(h, Gp_disc[1].A, Gp_disc[1].B, Gp_disc[1].C) + return FlexibleServoSimulator(h,zeros(4,1), Gp_disc[1].A, Gp_disc[1].B, Gp_disc[1].C) end const AbstractFlexibleServo = Union{FlexibleServo, FlexibleServoSimulator} @@ -65,6 +65,7 @@ const AbstractFlexibleServo = Union{FlexibleServo, FlexibleServoSimulator} num_outputs(p::AbstractFlexibleServo) = 2 num_inputs(p::AbstractFlexibleServo) = 1 +num_states(P::AbstractFlexibleServo) = 4 #For statefeedback simulation in ak lab3 outputrange(p::AbstractFlexibleServo) = [(-10,10),(-10,10)] #Process has two outputs, only one uses in AK lab3 inputrange(p::AbstractFlexibleServo) = [(-10,10)] isstable(p::AbstractFlexibleServo) = true @@ -79,7 +80,7 @@ end control(p::FlexibleServo, u) = send(p.control,u) function control(p::FlexibleServoSimulator, u) - x = p.Φ*x + p.Γ*u + p.x .= p.Φ*p.x + p.Γ*u nothing end -- GitLab