comp.lang.ada
 help / color / mirror / Atom feed
From: "Mr.Spark" <malmanea@gmail.com>
Subject: Re: a slight problem need some help. Simulation Control System
Date: Sat, 14 Nov 2009 01:06:46 -0800 (PST)
Date: 2009-11-14T01:06:46-08:00	[thread overview]
Message-ID: <49caecd5-f0ec-497b-88db-e2ec58f2afdf@k19g2000yqc.googlegroups.com> (raw)
In-Reply-To: 0e354dda-8ba6-498e-a7d9-a577edcc22e3@a21g2000yqc.googlegroups.com

On Nov 13, 4:54 pm, Phil Thornley <phil.jpthorn...@googlemail.com>
wrote:
> On 13 Nov, 16:09, "Mr.Spark" <malma...@gmail.com> wrote:
>
>
>
> > I had a problem when I run examiner to check if the body package is
> > working fine but the problem it gives me:
>
> > Specification Part:
>
> > with Sensor, Pump;
>
> > --# inherit Sensor, Pump;
>
> > package Tank
>
> > --# own Tank_Level;
> > --# initializes Tank_Level;
>
> > is
> >    procedure Control;
>
> >    --# global out Tank_Level;
> >    --#        in Sensor.Level;
> >    --#        in out Pump.Pump_Open;
> >    --# derives Tank_Level from Sensor.Level &
> >    --#         Pump.Pump_Open from Sensor.Level, Pump.Pump_Open;
>
> > end Tank;
>
> > Body Package Is :
>
> > with Sensor, Pump;
>
> > package body Tank
>
> > is
>
> >    Empty: constant Sensor.Level_Type := 10;
> >    Full: constant Sensor.Level_Type := 60;
>
> >    -- this procedure controls the operation of pumps when they should
> > be opened
> >    -- or closed for the safety of the system. The pump will be closed
> > if the
> >    -- Water Level Tank is <= 10 and it will be Opened if the Water
> > Level
> >    -- in Tank >= 60.
>
> >    procedure Control
> >    is
> >       Tank_Level: Sensor.Level_Type;
> >    begin
>
> >       Tank_Level:= Sensor.Get_Level;
> >       if Tank_Level <= Empty then
> >          Pump.Close;
> >       elsif Tank_Level >= Full then
> >          Pump.Open;
> >       end if;
> >    end Control;
>
> > end Tank;
>
> > The errors that it shows are :
>
> > 1.Semantic Error : Ilegal redeclaration of identifier Tank_Level;
> > 2.Semantic Error : The Identifier is either undeclared or not visible
> > at his point
> > 3.Semantic Error : The Identifier is either undeclared or not visible
> > at his point1.
> > 4.Semantic Error : The Identifier is either undeclared or not visible
> > at his point
> > 5.Semantic Error : The own variable Tank_Level does not have a
> > definition
>
> > If you could give me a hint how to solve this problem it would be
> > great.
>
> The main problem is that the 'own' annotation on the spec states that
> the variable Tank_Level will be declared in the package body - as
> permanent data.  But the code only creates it as local data within the
> Control procedure.  So Tank_Level is created as uninitialised data
> each time that the Control procedure is invoked.
>
> If you move the declaration of Tank_Level to the package body then you
> will remove some of the errors.  Alterntively if the data should be
> local to the Control procedure then it should not be declared as 'own'
> data in the package specification.
>
> For more accurate error diagnosis, include at least the specs of all
> the other referenced packages (ie Sensor and Pump in this case) so
> that we can do a complete SPARK run.
>
> Cheers,
>
> Phil

Hi Phil,

Thanks a lot for replying in a short time. I Appreciate your help.
that solved the problem. :)





      reply	other threads:[~2009-11-14  9:06 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-13 16:09 a slight problem need some help. Simulation Control System Mr.Spark
2009-11-13 16:54 ` Phil Thornley
2009-11-14  9:06   ` Mr.Spark [this message]
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox