JProfibus

un framework per lo sviluppo di applicazioni Java per il Profibus

 

 

di

Gianluca Finocchiaro


Sommario

 

Introduzione 5

Architettura di JProfibus 5

VisualProfibus 7

L'interfaccia utente. 7

Lavorare con i beans. 8

Disegnare la rete. 8

Configurazione della rete. 9

Scambio informativo. 11

La generazione del codice. 12

 


Introduzione

 

JProfibus è un framework per lo sviluppo di applicazioni Java per rete Profibus DP, basato sul supporto fornito dall’interfaccia Applicom.

 

Tramite JProfibus è possibile:

 

·        controllare e testare direttamente una connessione Profibus DP

·        sviluppare codice Java per un completo controllo dello scambio informativo fra i dispositivi connessi alla rete

 

Il framework è scritto in Java, anche se parte del codice è stato realizzato in C per consentire l’utilizzo delle funzioni native fornite dal software a corredo dell’interfaccia.

Architettura di JProfibus

Il framework è costituito da due componenti:

 

JProfibus API, la libreria che permettere l'interfacciamento con la scheda. E' stata scritta quasi totalmente in Java, tranne per una piccola parte (Java_applicom_bridge.dll, realizzata in C) che si occupa di interagire con la libreria Applicom.dll che fornisce, invece, le funzioni profibus. L'interfacciamento tra l’Api e la libreria in C si è realizzata mediante le JNI di Java, il supporto nativo ai metodi.

 

 

VisualProfibus, ambiente di sviluppo visuale per la definizione, il test e il controllo della connessione e la generazione automatica del codice sorgente. Utilizza dei JavaBeans come mattoni fondamentali per la costruzione delle reti.

 

La figura 1 mostra l’architettura generale del framework.

 

Le applicazioni Java possono essere realizzate semplicemente utilizzando l’Api (in collaborazione, eventualmente, con i beans), oppure all’interno dell’ambiente VisualProfibus. E’ possibile, infine, avviare un progetto tramite l’ambiente visuale e completarlo in seguito manualmente.

 

Figura 1 L'architettura generale del framework

 


VisualProfibus

Durante una sessione di lavoro con VisualProfibus è possibile:

 

·        definire in maniera parziale o totale, mediante un approccio visuale, i moduli slaves presenti sul bus

 

·        effettuare degli scambi informativi fra i vari moduli

 

·        caricare moduli realizzati con l’Api JProfibus

 

·        generare automaticamente il codice sorgente relativo sia alla connessione definita sul piano di lavoro, sia alle funzioni che realizzano lo scambio informativo

L'interfaccia utente

Una volta lanciato, VisualProfibus si presenterà come mostrato in figura 2. L'interfaccia utente è suddivisa in quattro parti: il Menu, il NetEditor, il CodeEditor, la ToolBox, e il PropertySheet.

 

Figura 2 L'interfaccia utente di VisualProfibus

 

Menu

Tramite il menu è possibile accedere alle varie funzionalità di VisualProfibus:

 

·        il sottomenu File è utilizzato per salvare la definizione della rete, caricarla in un momento successivo, salvare e caricare un modulo con i parametri preimpostati, esportare il codice sorgente Java prodotto;

 

·        il sottomenu Edit permette di cancellare e di disconnettere dal bus un modulo;

 

·        il sottomenu View abilita o disabilita la visualizzazione del PropertySheet e della Toolbox.

 

NetEditor

Il NetEditor è il cuore di VisualProfibus. E' un piano di lavoro su cui si dispongono i vari elementi per definire la rete su cui si vuole lavorare.

 

CodeEditor

Il CodeEditor (non direttamente visibile dalla figura) è un editor di testo all'interno del quale è possibile inserire o modificare il codice sorgente relativo alla definizione del bus e dei moduli sul NetEditor. La sua caratteristica principale è quella di essere "sensibile" ai cambiamenti effettuati sul NetEditor o tramite il sottomenu Edit, perché si riflettono direttamente sul codice sorgente.

 

Toolbox

La Toolbox contiene gli oggetti che costituiscono gli elementi del bus. Vengono caricati all'avvio del programma come dei normali JavaBeans e, una volta trascinati col mouse sul NetEditor, sono pronti ad essere utilizzati. Gli oggetti possono essere caricati nella Toolbox anche in un secondo momento, tramite l’opzione Load Jars del sottomenu File.

 

PropertySheet.

Il PropertySheet serve ad impostare i parametri degli oggetti che si trovano sul NetEditor La sua interfaccia muta in base all'oggetto su cui si sta lavorando.

Lavorare con i beans

Come si è già detto, gli oggetti che compaiono per la prima volta nella Toolbox sono dei JavaBeans. Nell'ordine sono:

 

·        ProfibusBean, è il bean che incapsula il comportamento del profibus vero e proprio; si può utilizzare un ProfibusBean alla volta e risulta indispensabile per la definizione del bus;

 

·        IBean, è il bean che rappresenta un modulo di ingresso; su questo bean si possono effettuare solo operazioni di lettura;

 

·        OBean, è il bean che rappresenta un modulo di uscita; su questo bean si possono effettuare sia operazioni di lettura (delle uscite) che di scrittura (sulle uscite).

 

Degli ultimi due moduli si possono utilizzate tante istanze quanti sono gli slaves effettivamente connessi al profibus reale.

 

IBean e OBean insieme costituiscono gli IOBeans illustrati nella figura 1.

Disegnare la rete

Per procedere al controllo del profibus e di tutti i suoi componenti è necessario, dapprima, trascinare i beans sul NetEditor, come mostrato in figura 3.

 

Figura 3 Beans disposti sul NetEditor

 

Sicuramente si avrà bisogno del ProfibusBean, senza il quale ogni operazione sarebbe impossibile; inoltre, servono moduli di ingresso e di uscita, in base alla configurazione del bus.

 

Disposti gli elementi sul NetEditor, occorre interconnetterli fra di loro per riprodurre la connessione reale. La figura 4 mostra una semplice connessione fra il profibus e un modulo.

 

Figura 4 Esempio di connessione

Configurazione della rete

Disegnata la rete, è necessario configurare i parametri di tutti i componenti che la costituiscono.

 

In figura 5 sono mostrati  i campi che bisogna inserire per la corretta configurazione del ProfibusBean.

 

·        Name, identifica il bean durante la generazione del codice

·        Channel, il canale della scheda Applicom cui è collegato il profibus

 

Figura 5 Modifica dei parametri del ProfibusBean

 

L’IBean, oltre al campo Name (sempre presente in ogni bean), consente la modifica e/o l’inserimento per i seguenti campi (figura 6):

 

Figura 6 Inserimento dei parametri per l'IBean

 

·        Number, identifica il dispositivo; bisogna copiare il numero assegnato in sede di configurazione del profibus tramite il programma PCCONF

 

·        Inputs, indica il numero di ingressi del modulo; ogni ingresso gestisce un singolo bit di dato

 

I campi appena descritti, Name, Number, Inputs, costituiscono i parametri statici del modulo e, una volta impostati, non dovrebbero essere più modificati. Lo stesso discorso vale per i campi Name e Channel del ProfibusBean.

 

I parametri dinamici, invece, sono quelli che variano in base all'esigenza di effettuare determinate operazioni sul modulo stesso. Essi sono:

 

·        Function, indica il tipo di funzione che si intende effettuare sul modulo. In particolare, per il modulo di ingresso, seguendo le specifiche definite dall'Applicom, è possibile eseguire le funzioni:

 

1.      READPACKIBIT, lettura di bits

2.      READPACKIBYTE, lettura di bytes

3.      READIWORD, lettura di words

 

·        Variables, indica il numero di elementi coinvolti nella funzione selezionata. Gli elementi saranno bits, bytes o words in base al tipo di operazione da effettuare. Per questo campo vale il vincolo:

 

0<= Variables<=Inputs

 

·        Address, indica l'indirizzo iniziale da cui incomincia la lettura. Si riferisce al numero di canale di input da cui scandire la lettura dei dati. Ovviamente, vale il vincolo:

 

0<= Address < (Inputs - Variables*factor)

 

dove factor vale 1, 8, o 16 a seconda se gli Items sono rispettivamente bits, bytes o words.

 

La configurazione dei parametri per l'OBean è del tutto analoga a quella dell'IBean ad eccezione di due varianti:

 

·        il campo Outputs al posto di Inputs, si riferisce al numero di uscite del modulo

 

·        il valore assunto dal campo Function, che per questo modulo possono essere:

 

1.      READPACKQBIT, lettura di bits dalle uscite

2.      READPACKQBYTE, lettura di bytes dalle uscite

3.      READQWORD, lettura di words dalle uscite

4.      WRITEPACKQBIT, scrittura di bits sulle uscite

5.      WRITEPACKQBYTE, scrittura di bytes sulle uscite

6.      WRITEQWORD, scrittura di words sulle uscite

Scambio informativo

Per realizzare lo scambio delle informazioni occorre rivolgere la propria attenzione su uno dei moduli a disposizione. Ad esempio l'IBean.

 

Figura 7 Il componente grafico dell'IBean

 

Analizzando con cura il bean di figura 7 si può notare che esso presenta una finestrella di testo e un pulsante etichettato con Execute. La finestra di testo serve per visualizzare il risultato delle operazioni, mentre il pulsante avvia l'operazione precedentemente selezionate dal PropertySheet.

 

Supponiamo che l'IBean oggetto della nostra attenzione sia il "rappresentate" di un modulo di ingresso a 8 bit del profibus. Se vogliamo leggere, per esempio 6 bit, basta selezionare la funzione "READPACKIBIT", inserire "6" nel campo "Items" e 0 nel campo "Address". Appena premuto il pulsante "Execute", se tutto va bene, compariranno sei cifre binarie sulla finestra di testo, a testimoniare che tutto è andato per il verso giusto (figura 8).

 

Figura 8 Lettura dei dati del modulo

 

Il modulo OBean (figura 9), invece, presenta due finestre di testo: quella superiore, detta finestra di output, visualizza il risultato dell'operazione di lettura; quella inferiore, detta finestra di input, permette l'inserimento dei valori da scrivere mediante una delle funzioni "WRITEPACK..". L'esecuzione dell'operazione avviene in maniera simile a quella per il modulo di ingresso

 

Figura 9 Il componente grafico dell'OBean

La generazione del codice

Mediante il CodeEditor è possibile scrivere del codice per creare vere e proprie applicazioni che si basano sul profibus.

 

Durante la configurazione della rete, quando si trascina il ProfibusBean sul NetEditor, si avvia la generazione automatica del codice. Infatti, cliccando sulla parte inferiore del Menu sull'etichetta CodeEditor, il desktop di VisualProfibus passa a visualizzare quest'ultimo e si può notare come il testo sia cambiato (figura 10). Si tratta del codice di inizializzazione del ProfibusBean. Il codice si basa sulla JProfibus API, ed è possibile notare come, ad ogni cambiamento di uno dei parametri del ProfibusBean, corrisponda la modifica del codice sorgente (proprio come avviene negli ambienti di sviluppo visuali quali il Visual Basic, lo JBuilder, seppure con le dovute differenze...).

 

Figura 10 Il CodeEditor e il codice sorgente e generato

 

Se proviamo, poi, a connettere qualche modulo al ProfibusBean e a cambiarne i parametri, il CodeEditor si adatta dinamicamente alla situazione corrente rilevata dal NetEditor.

 

Alla configurazione della rete  corrisponde, quindi, la generazione di codice sul CodeEditor compreso fra le due righe di testo in blu che avvertono di modificare il testo.

 

Inoltre, è possibile auto-produrre anche il codice relativo all'esecuzione delle funzioni di ogni modulo e all'impostazioni dei relativi argomenti. Per fare ciò bisogna spostare il cursore sul punto esatto in cui vogliamo che il nuovo codice appaia (qualunque punto va bene, basta che si trovi al di fuori del codice di inizializzazione), riportarci sul NetEditor e impostare gli argomenti della funzione desiderata. A questo punto è sufficiente cliccare sull'unico pulsante di cui non ci siamo ancora occupati, Transfer code, ed ecco che il codice si trasferisce sul CodeEditor.

 

Completato il codice, è possibile esportarlo con l'opzione Export Code del sottomenu File. In un momento successivo, è possibile compilarlo ed eseguirlo utilizzando i normali strumenti di sviluppo e di esecuzione del JDK.