Opened 16 years ago
Last modified 16 years ago
#1191 closed defect (fixed)
Wrong error message: Error: Variable enumtest.c: Variable one not found in scope Types.EnumTest
| Reported by: | Adrian Pop | Owned by: | Adrian Pop |
|---|---|---|---|
| Priority: | high | Milestone: | |
| Component: | Instantiation | Version: | |
| Keywords: | Cc: | Adrian Pop, Per Östlund |
Description
This model displays a wrong error message:
package Types
model EnumTest
type E = enumeration(e1, e2);
type Size = enumeration(small, medium, large, xlarge);
Size t_shirt_size = Size.medium;
type Size2 = enumeration(small "1st", medium "2nd", large "3rd", xlarge "4th");
type DigitalCurrentChoices = enumeration(zero, one); // Similar to Real, Integer
type DigitalCurrent = DigitalCurrentChoices(quantity="Current", start = one, fixed = true);
DigitalCurrent c(start = DigitalCurrent.one, fixed = true);
DigitalCurrentChoices choice(start = DigitalCurrentChoices.one, fixed = true);
Real x[DigitalCurrentChoices];
Real xx[DigitalCurrentChoices];
Real xxx[DigitalCurrentChoices];
algorithm
// Example using the type name to represent the range
for e in DigitalCurrentChoices loop
x[e] := 0.0;
end for;
for e loop // Equivalent example using short form
xx[e] := 0.0;
end for;
for e in DigitalCurrentChoices.zero : DigitalCurrentChoices.one loop
xxx[e] := 0.0;
end for;
equation
c = DigitalCurrent.one;
choice = if c == DigitalCurrent.zero then DigitalCurrent.one else DigitalCurrent.one;
end EnumTest;
type ResolveInFrameA =
enumeration(world "Resolve in world frame",
frame_a "Resolve in frame_a",
frame_resolve "Resolve in frame_resolve (frame_resolve must be connected)");
model Mixing1 "Mixing of multi-substance flows, alternative 1"
replaceable type E=enumeration(:)"Substances in Fluid";
input Real c1[E], c2[E], mdot1, mdot2;
output Real c3[E], mdot3;
equation
0 = mdot1 + mdot2 + mdot3;
for e in E loop
0 = mdot1*c1[e] + mdot2*c2[e]+ mdot3*c3[e];
end for;
// Array operations on enumerations are NOT (yet) possible:
// zeros(n) = mdot1*c1 + mdot2*c2 + mdot3*c3 // error
end Mixing1;
model Mixing2 "Mixing of multi-substance flows, alternative 2"
replaceable type E=enumeration(:)"Substances in Fluid";
input Real c1[E], c2[E], mdot1, mdot2;
output Real c3[E], mdot3;
protected
// No efficiency loss, since cc1, cc2, cc3
// may be removed during translation
Real cc1[:]=c1, cc2[:]=c2, cc3[:]=c3;
final parameter Integer n = size(cc1,1);
equation
0 = mdot1 + mdot2 + mdot3;
zeros(n) = mdot1*cc1 + mdot2*cc2 + mdot3*cc3;
end Mixing2;
end Types;
type enum = enumeration(a,b,c);
model X
import Types.ResolveInFrameA;
parameter ResolveInFrameA frame_r_in= ResolveInFrameA.frame_a;
parameter Types.ResolveInFrameA frame_r_out=frame_r_in;
Real x;
enum f(quantity="quant_str_enumeration",min = enum.a,max = enum.b,fixed = true,start = enum.c);
Types.EnumTest enumtest;
equation
x = if frame_r_out == frame_r_in then 0 else 1;
f=enum.a;
end X;
wrongly displays error message:
Error: Variable enumtest.c: Variable one not found in scope Types.EnumTest
Note:
See TracTickets
for help on using tickets.

Fixed in revision 5388.