Skip to content

Commit 1da03ff

Browse files
fix: fix Blocks components
1 parent b34ea40 commit 1da03ff

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

src/Blocks/continuous.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,7 @@ See also [`StateSpace`](@ref) which handles MIMO systems, as well as [ControlSys
620620

621621
x = collect(x)
622622
x_scaled = collect(x_scaled)
623+
bb = collect(bb)
623624

624625
sts = [x; x_scaled; y; u]
625626

src/Blocks/sources.jl

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ function Base.show(io::IO, m::MIME"text/plain", p::Parameter)
521521
end
522522

523523
get_sample_time(memory::Parameter) = memory.ref
524-
Symbolics.@register_symbolic get_sample_time(memory)
524+
Symbolics.@register_symbolic get_sample_time(memory::Parameter)
525525

526526
Base.convert(::Type{T}, x::Parameter{T}) where {T <: Real} = x.ref
527527
function Base.convert(::Type{<:Parameter{T}}, x::Number) where {T <: Real}
@@ -603,8 +603,9 @@ end
603603
function get_sampled_data(t, buffer)
604604
get_sampled_data(t, buffer.data, buffer.ref, buffer.circular_buffer)
605605
end
606-
Symbolics.@register_symbolic get_sampled_data(t, buffer)
607-
Symbolics.@register_symbolic get_sampled_data(t, buffer, dt, circular_buffer) false
606+
Symbolics.@register_symbolic Parameter(data::Vector, ref, circular_buffer::Bool)
607+
Symbolics.@register_symbolic get_sampled_data(t, buffer::Parameter)
608+
Symbolics.@register_symbolic get_sampled_data(t, buffer::Vector, dt, circular_buffer) false
608609

609610
function Symbolics.derivative(::typeof(get_sampled_data), args::NTuple{2, Any}, ::Val{1})
610611
t = @inbounds args[1]
@@ -655,21 +656,23 @@ data input component.
655656
buffer,
656657
sample_time,
657658
circular_buffer = true)
659+
T = eltype(buffer)
658660
pars = @parameters begin
659-
buffer = buffer #::Vector{Real}
660-
sample_time = sample_time #::Real
661-
circular_buffer = circular_buffer #::Bool
661+
buffer::Vector{T} = buffer #::Vector{Real}
662+
sample_time::T = sample_time #::Real
663+
circular_buffer::Bool = circular_buffer #::Bool
662664
end
665+
@parameters p::Parameter{T} = Parameter(buffer, sample_time, circular_buffer)
663666
vars = []
664667
systems = @named begin
665668
output = RealOutput()
666669
end
667670
eqs = [
668-
output.u ~ get_sampled_data(t, buffer, sample_time, circular_buffer)
671+
output.u ~ get_sampled_data(t, p)
669672
]
670-
return ODESystem(eqs, t, vars, pars; name, systems,
673+
return ODESystem(eqs, t, vars, [pars; p]; name, systems,
671674
defaults = [
672-
output.u => get_sampled_data(0.0, buffer, sample_time, circular_buffer)
675+
output.u => get_sampled_data(0.0, p)
673676
])
674677
end
675678

@@ -684,9 +687,10 @@ data input component.
684687
# Connectors:
685688
- `output`
686689
"""
687-
@component function SampledData(::Val{SampledDataType.struct_based}; name, buffer)
690+
@component function SampledData(
691+
::Val{SampledDataType.struct_based}; name, buffer::Parameter)
688692
pars = @parameters begin
689-
buffer = buffer #::Parameter
693+
buffer::typeof(buffer) = buffer #::Parameter
690694
end
691695
vars = []
692696
systems = @named begin

0 commit comments

Comments
 (0)