Anno Accademico:
1999/2000
Materia:

Informatica Industriale

Professore:

Salvatore Cavalieri

Autore:

 
Giuseppe Pugliares
 
Obiettivi Teorici:
Software Realizzati:



Tools SchedAPP

Questo tools presenta diversi eseguibili:

Toolbox Matlab Campionamento

Questo toolbox, svolge sostanzialmente tre compiti :
Inserendo la directory in cui si trova il toolbox nel path del Matlab, si rende disponibile l’help nel quale sono descritte le funzioni implementate ed i relativi parametri.


In questo Tutorial, viene descritto l’uso dell’interfaccia grafica del programma SchedAPP, per fare ciò verranno utilizzate delle immagini catturate dalla versione compilata per la simulazione (_SchedApp.exe), che sono quasi equivalenti a quella compilata con le librerie Applicom (cambia solo il titolo delle finestre).

Schermata Iniziale

Fig.1 Schermata iniziale SchedAPP
In Fig1. viene mostrata la schermata iniziale di SchedAPP, in questa finestra ci sono solo 3 elementi attivi : il pulsante “Nuovo”, il pulsante “Apri”, e l’icona in alto a destra (che è sempre attiva) detta icona About. Descriviamo ora il funzionamento degli elementi.



Icona About

Fig.2 Finestra “Informazioni Su..”
Cliccando sull’icona About viene aperta una nuova finestra (Fig2.) nella quale vengono riportate informazioni sul programma SchedAPP.



Apertura Progetto

Cliccando sul pulsante “Apri”, viene mostrata una finestra standard di dialogo mediante la quale è possibile scegliere il progetto che si vuole caricare; svolta questa operazione il programma presenta il seguente aspetto (fig3), si nota che nella casella di testo contenuta nel pannello “Progetto” è visualizzato il path assoluto del progetto caricato.
Fig.3 SchedAPP con progetto caricato
Dalla figura 3 è possibile vedere che si sono stati attivati dei nuovi elementi, descriviamo quelli che svolgono una funzione più semplice, gli altri verranno spiegati in seguito:



Modifica Progetto (variabili Periodiche)

Cliccando sul pulsante “Modifica” (vedi Fig.3), viene visualizzata una finestra (vedi Fig 4.) mediante la quale è possibile modificare i parametri del progetto attualmente in memoria.
Fig.4 Parametri Progetto – Definizione variabili Periodiche

Pannello “Tabella Variabili Periodiche”

In questo pannello è contenuta una tabella nella quale vengono descritte le variabili periodiche definite nel progetto, il significato delle colonne è il seguente :
Selezionando una variabile dalla tabella questa viene mostrata in formato esteso nel pannello “Comandi Tabella”.

Pannello “Comandi Tabella”

Questo pannello contiene 2 tipo di oggetti separati da una barra, delle caselle di testo (modificabili dall’utente) che descrivono la variabile corrente, e dei pulsanti che servono per le operazioni di inserimento e modifica dei dati nella tabella, descriviamoli :

Pannello “Parametri Canale Comunicazione”

In questo pannello è possibile definire i parametri del canale di comunicazione definiti nel capitolo Schedulazione – Calcolo Trr.

Pannello “Parametri Canale Comunicazione”

In questo pannello vengono mostrati i risultati del test di schedulabilità del progetto, i parametri mostrati nelle caselle di testo sono definiti nel capitolo Schedulazione – Schedulazione on-line. Facciamo comunque alcune osservazioni:
·Il parametro Na_max, deve essere definito dall’utente prima di eseguire il test.
·La ComboBox commento, presenta 3 elementi:
1.Risultato del Test.
2.Trr massimo, per le variabili periodiche.
3.Trr massimo, per le variabili asincrone.

Pannello Anonimo

Questo pannello (vedi Fig.4 in basso a destra) contiene 3 pulsanti:



Modifica Progetto (variabili Asincrone)

In Fig.5 viene mostrata la finestra utilizzata per la definizione delle variabili asincrone, e del modulo di controllo.
Fig.5 Parametri Progetto – Definizione variabili Asincrone

Pannello “Tabella Variabili Comando”

In questo pannello è contenuta una tabella nella quale vengono descritte le variabili asincrone definite nel progetto, il significato delle colonne è lo stesso di quello visto per le variabili periodiche, con alcune differenze:

Pannello “Comandi Tabella”

Per la descrizione di questo pannello si ci può riferire all’analogo definito nella finestra di configurazione delle variabili periodiche.

Pannello “Modulo Controllo”

In questo pannello è possibile selezionare e configurare un modulo di controllo (che verrà descritto in seguito), che da ora in poi chiameremo CDLL (Controll DLL); notiamo che pannello è diviso in due parti da una barra verticale, nella parte a sinistra sono presenti i seguenti bottoni:
La parte destra del modulo contiene delle caselle di testo, nelle quali vengono visualizzate delle informazioni relative alla CDLL attualmente in memoria.

Modulo di Controllo (CDLL)

In questo capitolo verrà data la risposta alla seguente domanda: Cos’è un Modulo di Controllo (detto CDLL) ?
Un CDLL è un metodo mediante il quale è possibile “iniettare” del codice esterno su SchedAPP, per fare ciò viene utilizzata la tecnologia delle DLL, quindi un CDLL non è altro che una particolare DLL, linkata dinamicamente da SchedAPP, che implementa un’interfaccia (cioè una serie di funzioni) che ne permettono l’aggancio con SchedAPP.
In una CDLL è possibile implementare due tipi di funzioni:
Descriviamo ora brevemente l’interfaccia da implementare per agganciare la CDLL con SchedAPP, per un’analisi più approfondita (in particolare dei parametri delle funzioni, e delle strutture usate) consultate il sorgente delle CDLL fornite negli esempi presenti nella distribuzione di SchedAPP.

Funzioni Generali

Funzioni Simulazione

Esecuzione Progetto

Dopo aver caricato (o creato) un progetto è possibile eseguirlo cliccando sul pulsante Start (vedi Fig.3) presente nel pannello “Monitoraggio Dati” della finestra principale di SchedAPP.I passi che vengono attuati ciclicamente (ogni microciclo) quando un progetto è in fase di esecuzione sono:
  1. Schedulazione variabili periodiche.
  2. Esecuzione dell’algoritmo di controllo.
  3. Schedulazione delle variabili asincrone presenti nella coda di gestione di tali variabili.
Fig.6 Esecuzione di un progetto
Dopo avere avviato l’esecuzione di un progetto, la finestra principale di SchedAPP assume l’aspetto mostrato dalla figura 6, si nota la presenza di due elementi attivi (oltre all’icona About) :
Fig.7 Monitor esecuzione di un progetto
Descrivamo la finestra di Monitor.

Pannello “Schedulazione”

Questo pannello contiene una tabella dove vengono mostrati i valori assunti dalle variabili periodiche (colonna lettura), e la relativa efficienza definita nel seguente modo:
quindi dei valori <1 del parametro efficienza indicano che la variabile è stata affetta da errori di comunicazione (o deadline scaduta).

Pannello “Schedulazione”

Questo pannello contiene una tabella dove vengono mostrati i valori assunti dalle variabili asincrone (colonna Scrittura), l’efficienza, e l’azione svolta sulla variabile (colonna Azione).

Pannello “Controllo Manuale”

Mediante questo pannello è possibile generare manualmente una variabile asincrona (normalmente generata dalla routine di controllo), per fare ciò devono essere eseguiti i seguenti passi:
  1. Selezionare la variabile asincrona che si vuole generare mediante il controllo ListBox.
  2. Associare alla variabile un valore, per fare ciò possono essere usati i valori predefiniti (ON, OFF) oppure dei valori custom definiti dall’utente (è necessario di-selezionare la checkbox predefiniti).
  3. Cliccare sul pulsante Trasmette, così facendo la variabile generata viene messa nella coda della variabili asincrone.

Pannello Anonimo

Questo pannello si trova in basso a destra (vedi Fig.7), contiene 3 elementi attivi:

Export Dati

SchedAPP salva i valori assunti dalle variabili (selezionate) e le temporizzazioni in due files binari, datap.dat e timing.dat che non possono essere direttamente consultati dall’utente, per fare ciò è necessario utilizzare il programma ExportData, la cui finestra principale viene mostrata nella figura 8.
Fig.8 Programma ExportData
Sono presenti due pannelli che descriviamo.

Pannello “File”

In questo pannello sono presenti 3 elementi attivi:

Pannello “Variabili Campionate”

In questo pannello sono presenti 5 elementi attivi:



Struttura File Export Variabili Periodiche

Descriviamo ora struttura della tabella utilizzata per esportare una variabile periodica (vedi Fig.9).
Fig.9 File Export di una variabile Periodica
Le sei colonne hanno il seguente significato:
Zero: Comunicazione Corretta.
Numero Positivo: indica un errore di comunicazione nella primitiva Applicom, questo numero è lo stato restituito.
Numero Negativo: variabile non schedulata, deadline scaduta.



Struttura File Export Variabili Asincrone

Descriviamo ora struttura della tabella utilizzata per esportare una variabile asincrona (vedi Fig.10).
Fig.10 File Export di una variabile Asincrona
le sette colonne hanno il seguente significato:
Zero: Comunicazione Corretta.
Numero Positivo: indica un errore di comunicazione nella primitiva Applicom, questo numero è lo stato restituito.



Struttura File Export Variabili Temporizzazione

Descriviamo ora struttura della tabella utilizzata per esportare la variabile temporizzazione (vedi Fig.11).
Fig.11 File Export della variabile Temporizzazione
Le sei colonne hanno il seguente significato:

Problemi e Soluzioni

In questo capitolo vengono trattati i più importanti problemi che sono stato affrontati nella programmazione di SchedAPP, e la relativa soluzione.

Misura Tempo

Uno degli obiettivi di SchedAPP, è quello di valutare le performance del sistema di comunicazione, per fare ciò è necessario potere stimare con elevata precisione la durata degli intervalli temporali. Window offre una API “GetTickCount” che restituisce il numero di millisecondi trascorsi dalla partenza del Sistema Operativo, tale funzione presenta diversi problemi:
Window offre anche una coppia di API “QueryPerformanceFrequency” e “QueryPerformanceCounter” che risolvono i problemi della API GetTickCount.
Comunque in SchedAPP si è preferito utilizzare una soluzione basata sull’istruzione ASM RDTSC, introdotta dall’Intel su tutte le CPU di classe pentium e successive, poiché si hanno i seguenti vantaggi:
In tutte le CPU di classe pentium e successive è presente un contatore a 64 bit che ogni ciclo di clock si incrementa di una unita, eseguendo l’istruzione RDTSC viene letto tale contatore la cui parte bassa viene messa nel registro a 32 bit EAX, mentre la parte alta viene messa nel registro a 32 bit EDX; per ottenere maggiori informazioni è possibile consultare il file (allegato) RDTSCPM.pdf, che contiene il data-sheet fornito da Intel.
Insieme a SchedAPP, viene fornita (nella directory sorgenti) una piccola libreria C “SuperTime.h”, che si basa sull’istruzione RDTSC; in questa libreria sono presenti 3 funzioni:
Per maggiori informazioni consultate il sorgente (ben commentato) della libreria.

Timer

Per effettuare la schedulazione delle variabili è necessario richiamare la funzione che implementa la schedulazione stessa, con una cadenza temporale pari ad un microciclo, per fare ciò inizialmente (nella versione 1.4 di SchedAPP) è stato utilizzato un timer offerto da window, che però presenta diversi problemi. Il timer di Window è una semplice estensione del timer incorporato nell'Hardware del PC, Il BIOS inizializza il chip del timer per generare l'interrupt hardware 08H ogni 54.925 ms (circa 18.2 volte al secondo), quindi il timer del window ha la stessa scansione, ciò comporta che gli intervalli di tempo che il timer riesce realmente a gestire devono essere multipli di 54.925 ms. Quindi, ad esempio settando un timer con un periodo di 10 ms, il periodo reale è di 54.925 ms, settando il timer con un periodo di 80 ms, il periodo reale è di circa 110 ms, ecc... Questo succede perchè l'intervallo di tempo (periodo)  specificato in millisecondi viene sempre arrotondato per difetto a un multiplo integrale di scansioni di clock, cioè di 54.925 ms.
Adottando questa soluzione è possibile gestire con precisione solamente variabili che presentano periodi multipli di 50 ms, per questo motivo ogni volta che viene inserito un periodo, vienearrotondato per difetto a un multiplo integrale di 50 ms, questo comportamento può essere disabilitato attivando il menu popup (premere il tasto destro del mouse) e selezionando l’opzione “periodo libero”.
Nella versione 1.5 di SchedAPP per risolvere tale problema è stato utilizzato un approccio basato sull’uso di un Thread ad alta priorità insieme alla API Sleep, questa soluzione non impone nessun vincolo sui periodi gestibili, quindi teoricamente permetterebbe cicli di scansione di 1 ms.
Purtroppo l’API Sleep, usata per implementare l’attesa passiva, non è precisa quindi il più piccolo microciclo schedulabile in modo accettabile è di 10 ms. Anche nella versione 1.5 di SchedAPP ogni volta che viene inserito un periodo, vienearrotondato per difetto a un multiplo integrale di 10 ms, questa operazione (disattivabile con la procedura descritta in precedenza) è eseguita per garantire che il microciclo sia ³ 10 ms.
Il fatto che la funzione di schedulazione sia eseguita in un Thread ad alta priorità (TIME CRITICAL), comporta 2 benefici :