From 6481930b06833e1e1ca5f170682218fbb03c2228 Mon Sep 17 00:00:00 2001 From: baggepinnen Date: Fri, 7 Dec 2018 16:01:08 +0100 Subject: [PATCH 1/3] updates for julia v1.0 --- README.md | 5 ++++- REQUIRE | 3 ++- src/LabProcesses.jl | 3 ++- src/interface_implementations/define_beam_system.jl | 2 +- src/utilities.jl | 12 ++++++------ 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 2aca568..4870e97 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +## News +2018-12-07: Update to julia v1.0 is ongoing, check branch `julia1` + [![pipeline status](https://gitlab.control.lth.se/processes/LabProcesses.jl/badges/master/pipeline.svg)](https://gitlab.control.lth.se/processes/LabProcesses.jl/commits/master) [![coverage report](https://gitlab.control.lth.se/processes/LabProcesses.jl/badges/master/coverage.svg)](https://gitlab.control.lth.se/processes/LabProcesses.jl/commits/master) @@ -37,4 +40,4 @@ och lägga till tre rader som När .gitlab-ci.yml uppdateras i master triggas en pipline. Om denna lyckas kommer dokumentationen finnas under -http://processes.gitlab.control.lth.se/documentation/myfoldername/ \ No newline at end of file +http://processes.gitlab.control.lth.se/documentation/myfoldername/ diff --git a/REQUIRE b/REQUIRE index d5abd45..ff86b98 100644 --- a/REQUIRE +++ b/REQUIRE @@ -1,3 +1,4 @@ -julia 0.6 +julia 0.7 ControlSystems Parameters +DSP diff --git a/src/LabProcesses.jl b/src/LabProcesses.jl index e193536..bc3b32b 100644 --- a/src/LabProcesses.jl +++ b/src/LabProcesses.jl @@ -1,4 +1,5 @@ # __precompile__() +using Pkg installed_packages = Pkg.installed() if "LabConnections" ∉ keys(installed_packages) Pkg.clone("https://gitlab.control.lth.se/cont-frb/LabConnections.jl") @@ -8,7 +9,7 @@ end module LabProcesses -using ControlSystems, LabConnections.Computer, Parameters +using ControlSystems, LabConnections.Computer, Parameters, DSP include("utilities.jl") diff --git a/src/interface_implementations/define_beam_system.jl b/src/interface_implementations/define_beam_system.jl index 5aba53b..76365fa 100644 --- a/src/interface_implementations/define_beam_system.jl +++ b/src/interface_implementations/define_beam_system.jl @@ -1,4 +1,4 @@ -using ControlSystems +using ControlSystems, DSP """ beammodel, beamcontroller = define_beam_system(;doplot=false) diff --git a/src/utilities.jl b/src/utilities.jl index 3b4d1f2..6ae5a9d 100644 --- a/src/utilities.jl +++ b/src/utilities.jl @@ -9,7 +9,7 @@ macro periodically(h, body) local start_time = time() $(esc(body)) local execution_time = time()-start_time - sleep(max(0,$(esc(h))-execution_time)) + Libc.systemsleep(max(0,$(esc(h))-execution_time)) end end @@ -37,22 +37,22 @@ Create a SysFilter object that can be used to implement control loops and simula with LTI systems, i.e., `U(z) = C(z)E(z)`. To filter a signal `u` through the filter, call like `y = Csf(u)`. Calculates the filtered output `y` in `y = Cx+Du, x'=Ax+Bu` """ -struct SysFilter - sys::StateSpace +struct SysFilter{T<:StateSpace} + sys::T state::Vector{Float64} function SysFilter(sys::StateSpace, state::AbstractVector) @assert !ControlSystems.iscontinuous(sys) "Can not filter using continuous time model." @assert length(state) == sys.nx "length(state) != sys.nx" - new(sys, state) + new{typeof(sys)}(sys, state) end function SysFilter(sys::StateSpace) @assert !ControlSystems.iscontinuous(sys) "Can not filter using continuous time model. Supply sample time." - new(sys, init_sysfilter(sys)) + new{typeof(sys)}(sys, init_sysfilter(sys)) end function SysFilter(sys::StateSpace, h::Real) @assert ControlSystems.iscontinuous(sys) "Sample time supplied byt system model is already in discrete time." sysd = c2d(sys, h)[1] - new(sysd, init_sysfilter(sysd)) + new{typeof(sysd)}(sysd, init_sysfilter(sysd)) end end (s::SysFilter)(input) = sysfilter!(s.state, s.sys, input) -- GitLab From af0cb1b576aab1401cd3bf47c3b8f6258fa2a00d Mon Sep 17 00:00:00 2001 From: baggepinnen Date: Fri, 7 Dec 2018 16:26:19 +0100 Subject: [PATCH 2/3] test passing --- test/runtests.jl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index 20189a9..75039e2 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,5 +1,5 @@ -using LabProcesses, ControlSystems -using Base.Test +using LabProcesses, ControlSystems, DSP +using Test # Reference generators r = PRBSGenerator(Int(4)) @@ -8,14 +8,14 @@ seq = [r() for i = 1:10] foreach(r,1:10_000) function test_sysfilter() - N = 10 - u = randn(N) - b = [1, 1] - a = [1, 0.1, 1] - sys = ss(tf(b,a,1)) + N = 10 + u = randn(N) + b = [1, 1] + a = [1, 0.1, 1] + sys = ss(tf(b,a,1)) state = init_sysfilter(sys) - yf = filt(b,a,u) - yff = similar(yf) + yf = filt(b,a,u) + yff = similar(yf) for i in eachindex(u) yff[i] = sysfilter!(state, sys, u[i])[1] end -- GitLab From 9b59712d4ad53f23a1903ebcb687ca0607570e2f Mon Sep 17 00:00:00 2001 From: baggepinnen Date: Fri, 7 Dec 2018 16:54:59 +0100 Subject: [PATCH 3/3] Updates to julia1 --- src/LabProcesses.jl | 2 +- src/controllers.jl | 8 ++++---- src/interface_implementations/ballandbeam.jl | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/LabProcesses.jl b/src/LabProcesses.jl index bc3b32b..b2f1a68 100644 --- a/src/LabProcesses.jl +++ b/src/LabProcesses.jl @@ -9,7 +9,7 @@ end module LabProcesses -using ControlSystems, LabConnections.Computer, Parameters, DSP +using ControlSystems, LabConnections.Computer, Parameters, DSP, LinearAlgebra include("utilities.jl") diff --git a/src/controllers.jl b/src/controllers.jl index a6d21b1..55eb8c4 100644 --- a/src/controllers.jl +++ b/src/controllers.jl @@ -27,16 +27,16 @@ function run_control_2DOF(P::AbstractProcess,sysFB, sysFF=nothing; duration = 10 rf = sysFF == nothing ? r[:,i] : Gff(r[:,i]) e = rf-y[:,i] ui = Gfb(e) - ui + bias(P) + ui .+ bias(P) end simulation = isa(P, SimulatedProcess) initialize(P) for (i,t) = enumerate(0:h:duration) @periodically h simulation begin - y[:,i] = measure(P) - r[:,i] = reference(t) - u[:,i] = calc_control(i) # y,r must be updated before u + y[:,i] .= measure(P) + r[:,i] .= reference(t) + u[:,i] .= calc_control(i) # y,r must be updated before u control(P, [clamp.(u[j,i], inputrange(P)[j]...) for j=1:nu]) end end diff --git a/src/interface_implementations/ballandbeam.jl b/src/interface_implementations/ballandbeam.jl index 9ae3da6..a9e04e2 100644 --- a/src/interface_implementations/ballandbeam.jl +++ b/src/interface_implementations/ballandbeam.jl @@ -48,7 +48,7 @@ const beam_system, nice_beam_controller = define_beam_system() struct BeamSimulator <: SimulatedProcess h::Float64 s::SysFilter - BeamSimulator(;h::Real = 0.01) = new(Float64(h), SysFilter(beam_system, h)) + BeamSimulator(;h::Real = 0.01, bias=0) = new(Float64(h), SysFilter(beam_system, h)) end struct BallAndBeam <: PhysicalProcess @@ -96,7 +96,7 @@ bias(p::BallAndBeamSimulator) = 0 function control(p::AbstractBeamOrBallAndBeam, u::AbstractArray) length(u) == 1 || error("Process $(typeof(p)) only accepts one control signal, tried to send u=$u.") - send(p.control,u[1]) + control(p,u[1]) end control(p::AbstractBeamOrBallAndBeam, u::Number) = send(p.control,u) control(p::BeamSimulator, u::Number) = p.s(u) @@ -104,7 +104,7 @@ control(p::BallAndBeamSimulator, u::Number) = error("Not yet implemented") measure(p::Beam) = read(p.measure) measure(p::BallAndBeam) = [read(p.measure1), read(p.measure2)] -measure(p::BeamSimulator) = vecdot(p.s.sys.C,p.s.state) +measure(p::BeamSimulator) = dot(p.s.sys.C,p.s.state) measure(p::BallAndBeamSimulator) = error("Not yet implemented") -- GitLab