Zad Lab2


Napisać działający kod, w którym...:

Wątek Centralka nadzoruje pracę (wątków) czujników kontrolnych. Nadzorowanie to sprowadza się do:

Wątek Sensor reprezentuje pewien czujnik monitorujący stan (np. temperaturę, odkształcenie, ...) jakiegoś urządzenia/elementu. Wartość liczbowa odczytanego stanu ma być przekazana do Centralki, która na tej podstawie podejmuje decyzję o włączeniu lub wyłączeniu alarmu. Można przyjąć, że liczba jednocześnie obsługiwanych czujników będzie ograniczona - np. nie większa niż 10.

Program główny poniżej ilustruje przykładowe operacje, jakie byłyby wykonywane przy pomocy Centralki. Kod programu głównego nie należy do rozwiązania zadania (ale z pewnością przyda się do testowania).

Sterowanie Centralką nie musi wcale odbywać się przy pomocy komunikatów (tak, jak jest w przykładzie). Musi jednak być jasno sprecyzowane, w jaki sposób program główny może dodać nowy Sensor, wyłączyć pracujący Sensor oraz zakończyć pracę Centralki. Sama Centralka musi właściwie reagować na takie wymuszenia z programu głównego, jak również utrzymywać komunikację z czujnikami i na tej podstawie właściwie sterować włączaniem/wyłączaniem alarmu. Sensory muszą właściwie współpracować z Centralką (w tym - kończyć pracę, gdy Centralka tego zażąda).

Rozwiązanie ma się znaleźć w katalogu nazwanym od swojego nazwiska. Niech w katalogu tym będą również wszystkie wykorzystywane moduły.

W rozwiązaniu warto/należy oprzeć się na poniższym kodzie (tzn. kod ten uzupełnić, i/lub zmodyfikować...) :

with Disp; --modul do wspolbieznego wyswietlania na ekranie + ew.inne pomocne moduly ...??...

procedure tresc is

--zmienne globalne ...??...

task type Sensor is -- + ewentualne obslugiwane komunikaty ...??...

end Sensor;

type Sensor_Ptr is access Sensor;

task Centralka is

entry Dodaj_Czujnik(nowy: in Sensor_Ptr); --dodawanie nowego czujnika do monitorowania

entry Zakoncz_Prace_Czujnika(cz: in Sensor_Ptr);

entry Zakoncz_Prace; --wylacza wszystkie czujniki i siebie + ew. inne wejscia ...??...

end Centralka;

task body Sensor is

stan: integer := 0;

begin

loop

-- ...??...

stan := (stan + 1117) mod 7 + 1; --"odczytywanie" stanu czujnika

delay(duration((stan+7)mod 7) / 50.0); --czas "zuzyty" na odczyt

--komunikacja z Centralka / ew. konczenie pracy Sensora / ... TRZEBA NAPISAC!!!

end loop;

end Sensor;

task body Centralka is

Sredni_Stan : Float := 0.0;

Alarm : Boolean := false;

begin

--funkcjonowanie Centralki nadzorujacej Sensory

-- (w tym wyznaczanie wartosci zmiennej Sredni_Stan) TRZEBA NAPISAC!!!

--alarmowanie wygladaloby jakos tak:

if Sredni_Stan > 3.0 then

Alarm := true;

Disp.Screen.Print("ALARM! Sredni stan = " & Float'Image(Sredni_Stan));

else

if Alarm then

Alarm := false;

Disp.Screen.Print("Koniec alarmu.");

end if;

end if;

-- ...??...

end Centralka;

pom1, pom2: Sensor_Ptr;

begin --program glowny zawiera przykladowe wywolania operacji sterujacych praca centralki:

Centralka.Dodaj_Czujnik(new Sensor); -- * dodawanie nowych czujnikow

pom1 := new Sensor; Centralka.Dodaj_Czujnik(pom1); delay 2.0;

Centralka.Dodaj_Czujnik(new Sensor);

pom2 := new Sensor; Centralka.Dodaj_Czujnik(pom2); delay 1.5;

Centralka.Zakoncz_Prace_Czujnika(pom2); delay 2.0; -- * wylaczenie dodanego wczesniej czujnika

Centralka.Dodaj_Czujnik(new Sensor); -- * znow dodanie czujnika

Centralka.Zakoncz_Prace_Czujnika(pom1); delay 5.0; -- * znow wylaczenie czujnika

Centralka.Zakoncz_Prace; -- * wylaczenie centralki (wraz ze wszystkimi czujnikami)

end tresc;



Wyszukiwarka

Podobne podstrony:
studenci-lab2, Zad 15 (str 36)
lab2-zad, Informatyka
fiz skrypty lab fizyka lab2 zad Nieznany
LAB 2 zad domowe, Lab2
lab2 zad do rozw
zad kolegi (lab2)
wm 2011 zad 2
Instrukcja do zad proj 13 Uklad sterowania schodow ruchom
CAD CAM KWPPWPS Zad graf PDF
I9M1S1 Nawrot Gudanowicz lab2
IWP JP2 Lab2 Struktury
Lab2 OZE id 259328 Nieznany
2009 klucz zad 01 092 u
ALGEBRA zad 2 id 57346 Nieznany (2)
K2 2009 10 zad 2 id 229691
koło 15 zad 1
GIiZK 0809 przydzial tematow zad domowego

więcej podobnych podstron