software:qpaint:qpaint30

QPAINT 3.0

QPaint 3.0 é un ambiente di sviluppo grafico per la programmazione del terminale o del sistema integrato. In questo documento sono riportate le caratteristiche principali del programma QPaint. Esso é stato progettato per lavorare in stretta relazione con un sistema QMove e per questo motivo durante la descrizione del prodotto si faranno molti riferimenti ai concetti della programmazione in QCL.
I due strumenti terminale e sistema integrato sono dispositivi in grado interagire con applicativi diversi. Per questo essi devono conoscere le informazioni relative a ciascuna delle variabili dell'applicativo QCL con il quale dovranno colloquiare. Tali informazioni si trovano in un particolare file (con estensione SYM) generato dalla compilazione dell'applicativo QMove utilizzando l'ambiente di sviluppo Qview. QPaint utilizza queste informazioni che una volta trasferite al terminale o al sistema integrato rendono possibile la connessione con il programma QCL.
I cablaggi e collegamenti dell'apparecchiatura descritta nel presente manuale, devono rispettare la Normativa Europea EN60204-1.

Con i termini “oggetto” ed “oggetto grafico” ci si riferisce alla stessa cosa. Con il termine “font” si intende font utente“. Con il termine “font terminale o sistema integrato” o “font interno” si intende il font memorizzato nella ROM del terminale o del sistema integrato. Con il termine “font utente” si intende il font creato dall'utente e memorizzato nei file QTF e FNT. Con il termine “font file” si intendono i file QTF e FNT in cui sono memorizzate le immagini dei font terminale o sistema integrato ed utente.

L'installazione, come per tutti i recenti prodotti QEM, é stata affidata al programma InstallShield 5.0. Essa si occupa di creare una directory in cui depositare i files del programma, creare una cartella in cui porre le varie icone di collegamento, preparare le operazioni per la disinstallazione del pacchetto e associare il programma QPaint30.EXE ai file con estensione QT3. Informazioni più dettagliate inerenti l'installazione sono fornite nel file README.TXT presente nel primo floppy disk del pacchetto. A fine installazione avremo per default in C:\Programmi la directory QPaint30 cosí formata:

C:\Programmi\QPaint3.0\ qpaint3.0 exe eseguibile readme txt documento uninst isu informazioni per disinstallazione

C:\Programmi\QPaint3.0\Help <directory lasciata volutamente vuota>

C:\Programmi\QPaint3.0\Examples tutorial qt3 progetto esempio uso QPaint

C:\Programmi\QPaint3.0\Fonts qem system large font bmp file bitmap sorgente utilizzato per creare il font qem system large font fnt font di Windows® per QPaint qem system large font qtf font sistema integratoJ125501 per QPaint qem system medium font bmp file bitmap sorgente utilizzato per creare il font qem system medium font fnt font di Windows® per QPaint qem system medium font qtf font sistema integratoJ125501 per QPaint qem system small font bmp file bitmap sorgente utilizzato per creare il font qem system small font fnt font di Windows® per QPaint qem system small font qtf font sistema integratoJ125501 per QPaint

L'associazione dell'estensione QT3 al programma QPaint30.EXE permetterà di avviare un progetto, tramite il doppio clic sull'icona dello stesso, direttamente dalla finestra di Explorer (Gestione Risorse nella versione italiana).

L'avvio del programma QPaint avviene come per qualsiasi altro programma Windows in uno dei seguenti modi:

1. tramite clic sull'icona QPaint 3.0 con Avvio > Programmi > QPaint 3.0
2. tramite doppio clic sull?icona QPaint30.exe con Explorer in C:\Programmi\QPaint30
3. tramite linea di comando in una sessione MS-DOS o in Avvio > Esegui…

Quando si avvia QPaint tramite linea di comando é possibile specificare le seguenti opzioni:

/ nosplash Disabilita la visualizzazione della finestra di Logo (splash screen).

<nome_file_QT3> Nome del file di progetto QT3 da caricare.Esso é composto da: percorso + nome file progetto + estensione QT3.

Esempio da sessione MS-DOS:

C:\>Programmi\QPaint30\QPaint30.exe/nosplash C:\Lavori\Marmo\LevigatriceModUTC27A.QT3

Una volta avviato QPaint, sullo schermo apparirà la seguente finestra:

Figura 1: desktop di QPaint

La finestra di Logo, comunemente chiamata splash screen, ha lo scopo di intrattenere l'utilizzatore durante le operazioni di avvio del programma. Il tempo di permanenza va da un minimo fisso di 3 secondi ad un massimo che varia in funzione delle caratteristiche hardware del PC utilizzato e dal numero di font da caricare. Inoltre se viene specificato nella linea di comando anche il nome di un progetto, al normale tempo di avvio, viene aggiunto anche il tempo di caricamento del progetto stesso.

Nella fase di stesura delle specifiche di programma si é cercato di delineare quali fossero le caratteristiche funzionali indispensabili per rendere il QPaint un prodotto valido ed efficiente. Grazie all'esperienza accumulata nel tempo, per mezzo di prodotti come QView, si é giunti a definire la seguente lista di argomenti:

1. Eventuali nuove versioni del programma dovranno assicurare la piena compatibilità dei progetti sviluppati con le versioni precedenti. Per ottenere ciò si é adottato un nuovo standard di memorizzazione delle informazioni in protocollo binario con cui risulta mol to semplice gestire la compatibilitá di versione.

2. Per rendere portabile e facilmente mantenibile un progetto non vi dovranno essere collegamenti a file esterni. Lo standard di memorizzazione adottato permette di archiviare, nello stesso file, dati di qualsiasi formato come ad esempio testi, immagini grafiche, data base, etc. Il programma QPaint memorizza nel file di progetto QT3 tutto ció di cui abbisogna. In questo modo per archiviare, trasportare su floppy o distribuire un pro getto, sará sufficiente operare con il solo file QT3.

Per limitare significativamente la dimensione dei file di progetto si é ritenuto utile non inserire nello stesso tutte le informazioni dei font utilizzati, perció bisogna assicurarsi che nella directory C:\Programmi\QPaint30\Fonts del proprio PC siano presenti tutti i font file QT3 richiesti. I tre font distribuiti con il programma QPaint, QEM System Small, Medium e Large Font, corrispondono ai font interni del terminale o del sistema integrato per cui sono sempre disponibili ed utilizzabili. Ulteriori informazioni sui font sono disponibili nella sezione dedicata.

3. L'interfacciamento grafico all'utente dovrá essere semplice ed intuitivo, rispettando soprattutto le convenzioni e gli standards dettati dai piú diffusi programmi per Windows®. Un'analisi approfondita di prodotti Windows® di largo consumo e l'uso attento degli oggetti di costruzione standard ha reso il QPaint un programma dall'interfaccia utente immediata ed intuitiva.

4. Il programma dovrá rappresentare con la maggior corrispondenza possibile il risultato finale nel terminale o nel sistema integrato. In questo caso si potrebbe parlare di “What You See is What You Get”, ció che vedi é ció che ottieni. L'uso delle capacitá grafiche fornite da Windows® combinate con gli algoritmi utilizzati nel terminale o nel sistema integrato ha fatto sí che quanto visualizzato sul monitor sia perfettamente corrispondente a quello che apparirá nel display del terminale o del sistema integrato. Funzionalitá grafiche aggiuntive come zoom dell'immagine e cambio del colore di sfondo permettono inoltre di semplificare le operazioni di gestione del progetto.

5. La funzionalitá del programma non dovrá essere vincolata dalle dimensioni dell'attuale display del terminale o del sistema integrato. Attualmente il terminale o il sistema inte grato utilizzano un display grafico monocromatico da 240×128 pixel. In futuro vi potreb bero essere nuove versioni con altri modelli di display. Il programma dovrá poter essere facilmente modificato per lavorare con ognuno di essi.

Come si puó vedere nella figura, il desktop di QPaint é composto dalle seguenti componenti: 1. Barra dei menú.
2. Barra di gestione della pagina.
3. Barra di impostazione della password di pagina.
4. Barra delle funzioni di progetto.
5. Barra delle funzioni di disegno.
6. Barra degli strumenti di disegno.
7. Barra di stato.
8. Area di disegno rappresentante il display del sistema integrato J125501.

Tramite la barra dei menú é possibile accedere a gran parte delle operazioni disponibili in QPaint. Segue ora una descrizione dettagliata delle funzionalitá fornite dalle voci presenti nei vari menú.

0.5.1.1 File | New Project

Con questa voce di menú si richiede a QPaint di abbandonare il progetto eventualmente attivo per crearne uno di nuovo. Se durante la creazione del nuovo progetto si riscontra che quello precedente é stato modificato verrá visualizzata una finestra di dialogo con il testo “Save changes to “nome file”?” e i bottoni “Yes”, “No” e “Cancel”. Se si conferma l'operazione con “Yes”, verrá automaticamente richiamata la finestra di dialogo “Save Project” o “Save Project As…”. La pressione di “No” fará proseguire l'operazione senza salvare niente, mentre “Cancel” abortirà l'intera operazione. Il nuovo progetto avrá per default il nome “Untitled.QT3” ed il suo percorso di memorizzazione sará quello della directory corrente.

0.5.1.2 File | Open Project...

Con questa voce di menú si richiede a QPaint di aprire un progetto precedentemente salvato. Per far ció viene richiesto di segnalare la posizione ed il nome del progetto tramite l'utilizzo della finestra di dialogo standard di Windows® per l'apertura dei files. Sul display comparirá la seguente finestra di dialogo:

Figura 2 : finestra di dialogo Open Project

Le funzionalitá espletate dalla finestra di dialogo sono quelle standard normalmente fornite dallo stesso sistema operativo Windows®. In “Nome file:” comparirá il nome del progetto attualmente in uso. A conferma dell'operazione con il tasto “Apri” verrá caricato il progetto specificato. Se durante il caricamento del progetto si riscontra che quello precedente é stato modificato verrá visualizzata una finestra di dialogo con il testo “Save changes to “nome file” ?” e i bottoni “Yes”, “No” e “Cancel”. Se si conferma l'operazione con “Yes”, verrá automaticamente richiamata la finestra di dialogo “Save Project” o “Save Project As…”. La pressione di “No” fará proseguire l'operazione senza salvare niente, mentre “Cancel” abortirá l'intera operazione.

0.5.1.3 File | Save Project

Con questa voce di menú si richiede a QPaint di salvare il progetto attualmente in uso. Se il progetto non era mai stato salvato verrá automaticamente richiamata la finestra di dialogo “Save Project As…”.

0.5.1.4 File | Save Project As...

Con questa voce di menú si richiede a QPaint di salvare il progetto attualmente in uso. Per far ció viene richiesto di segnalare la posizione ed il nome del progetto tramite l'utilizzo della finestra di dialogo standard di Windows® per il salvataggio di files. Sul display comparirá la seguente finestra di dialogo:

Figura 3 : finestra di dialogo Save Project As

Le funzionalitá espletate dalla finestra di dialogo sono quelle standard normalmente fornite dallo stesso sistema operativo Windows®. In “Nome file:” comparirá il nome del progetto attualmente in uso. A conferma dell'operazione con il tasto “Salva” il progetto specificato verrá salvato.

0.5.1.5 File | Create Project's Document

Con questa voce di menú si richiede a QPaint di fare una stampa della documentazione di progetto che verrà poi utilizzata dal costruttore della macchina per fare il manuale di istruzioni. Sul display comparirá la seguente finestra di dialogo:

Figura 4 : finestra di dialogo Create Project's Document

Nella finestra generale, il programma da la possibilità di stampare solamente su file le seguenti informazioni:
- Immagini del display
- Eventi e azioni di pagina
- Eventi ed azioni globali
- Disegni
- Una combinazione tra le voci sopracitate oppure tutti

Figura 5 : finestra di dialogo Create Project's Document

Nella finestra di opzioni, il programma da la possibilità di inserire nel documento le immagini del display con dimensioni grandi, medie oppure piccole inserite su sfondo bianco oppure verde. Alla pressione del tasto Continue, il programma richiede la path dove salvare i file contenenti i dati richiesti.

Figura 6 : finestra di dialogo Save Project's Document

Il comando creerà nella directory indicata una serie di file:

  • Un file *.jpg per ogni pagina contenente l'immagine del display.
  • Elenco puntatoUn file *.htm per ogni pagina contenente i dati richiesti nella finestra generale.
  • Elenco puntatoUn file *.htm del progetto generale.

0.5.1.6 File | Recent Files 1, 2, 3 e 4

QPaint mantiene traccia degli ultimi quattro progetti aperti mettendo il loro nome, completo di percorso nella barra dei menú subito sotto alla voce “File | Save Project As…”. Tale operazione é chiamata gestione dei “Recent Files” e segue le stesse modalitá di funzionamento adottate da tutti i programmi Windows® che la implementano. Selezionando e confermando, con il mouse o la tastiera, un recent file, si richiede a QPaint di riaprire il progetto associato. I recent files sono utili per velocizzare le operazioni di apertura dei progetti usati piú frequentemente o ancora in fase di sviluppo. Nel caso si tenti di aprire un recent file che non esiste piú o che é memorizzato su un disco non disponibile apparirá il messaggio “Error in opening file “nome file” !” e i bottoni “OK” e “Cancel”. Alla pressione di “OK” QPaint ritenterá l'apertura del file, mentre “Cancel” abortirá l'intera operazione. Prima di aprire il recent file selezionato, se si riscontra che il progetto attualmente in uso é stato modificato, verrá visualizzata una finestra di dialogo con il testo “Save changes to “nome file” ?” e i bottoni “Yes”, “No” e “Cancel”. Se si conferma l'operazione con “Yes”, verrá automaticamente richiamata la finestra di dialogo “Save Project” o “Save Project As…”. La pressione di “No” fará proseguire il programma senza salvare niente, mentre “Cancel” abortirá l'intera operazione.

0.5.1.7 File | Exit

Con questa voce di menú si richiede a QPaint di concludere la propria esecuzione. Se si riscontra che il progetto attualmente in uso é stato modificato verrá visualizzata una finestra di dialogo con il testo “Save changes to “nome file” ?” e i bottoni “Yes”, “No” e “Cancel”. Se si conferma l'operazione con “Yes”, verrá automaticamente richiamata la finestra di dialogo “Save Project” o “Save Project As…”. La pressione di “No” terminerá il programma senza salvare niente, mentre “Cancel” abortirá l'intera operazione.

0.5.1.8 Edit | New Object : Value

Fare riferimento al paragrafo dedicato nella sezione “Barra degli strumenti di disegno”

0.5.1.9 Edit | New Object : String

Fare riferimento al paragrafo dedicato nella sezione “Barra degli strumenti di disegno”

0.5.1.10 Edit | New Object : Valstring

Fare riferimento al paragrafo dedicato nella sezione “Barra degli strumenti di disegno”

0.5.1.11 Edit | New Object : Image

Fare riferimento al paragrafo dedicato nella sezione “Barra degli strumenti di disegno”

0.5.1.12 Edit | New Object : ValImage

Fare riferimento al paragrafo dedicato nella sezione “Barra degli strumenti di disegno”

0.5.1.13 Edit | New Object : Box

Fare riferimento al paragrafo dedicato nella sezione “Barra degli strumenti di disegno”

0.5.1.14 Edit | Copy

Con questa voce di menú si richiede a QPaint di copiare gli oggetti selezionati nell'area di disegno. Al termine della copia resteranno selezionati gli oggetti.
Condizioni di attivazione: almeno un oggetto selezionato nell'area di disegno.

0.5.1.15 Edit | Paste

Con questa voce di menú si richiede a QPaint di incollare gli oggetti copiati nell'area di disegno. Al termine del comando verranno automaticamente selezionati gli oggetti incollati.
Condizioni di attivazione: almeno un oggetto copiato.

0.5.1.16 Edit | Delete Object

Con questa voce di menú si richiede a QPaint di cancellare l'oggetto selezionato nell'area di disegno. Al termine della cancellazione, se vi sono ancora oggetti a disposizione, verrá automaticamente selezionato l'oggetto successivo.
Condizioni di attivazione: un oggetto selezionato nell'area di disegno.

0.5.1.17 Edit | Align Objects

Con questa voce di menú si richiede a QPaint di allineare gli oggetti selezionati nell'area di disegno secondo la legge impostata in figura 7. Al termine dell'allineamento resteranno selezionati gli oggetti. Vi è la possibilità di allineare gli oggetti in orizzontale rispetto al lato destro del primo oggetto selezionato, oppure rispetto al lato sinistro del primo oggetto selezionato, oppure rispetto al lato centro del primo oggetto selezionato. Vi è la possibilità di allineare gli oggetti in verticale rispetto alla parte alta del primo oggetto selezionato, oppure rispetto alla parte bassa del primo oggetto selezionato, oppure rispetto al lato centro del primo oggetto selezionato. Vi è inoltre la possibilità di allineare contemporaneamente gli oggetti sia in verticale che in orizzontale utilizzando le combinazioni desiderate.
N.B. Per selezionare più di un oggetto, si deve tener premuto il tasto shift e cliccare con il tasto sinistro del mouse.
Condizioni di attivazione: più di un oggetto selezionato nell'area di disegno.

Figura 7 : finestra di allineamento oggetti

0.5.1.18 Edit | Property Object

Con questa voce di menú si richiede a QPaint di visualizzare l'editor delle proprietá dell'oggetto selezionato nell'area di disegno. Ulteriori informazioni sugli oggetti e i relativi editor delle proprietá sono disponibili nella sezione dedicata.
Condizioni di attivazione: un oggetto selezionato nell'area di disegno.

0.5.1.19 Edit | Bring Up Object

Con questa voce di menú si richiede a QPaint di portare ad un livello superiore di vista l'oggetto selezionato nell'area di disegno. Ulteriori informazioni sugli oggetti e le loro caratteristiche di disegno sono disponibili nella sezione dedicata.
Condizioni di attivazione: un oggetto selezionato nell'area di disegno di livello superiore a 1/n ed almeno due oggetti nella pagina.

0.5.1.20 Edit | Bring Down Object

Con questa voce di menú si richiede a QPaint di portare ad un livello inferiore di vista l'oggetto selezionato nell'area di disegno. Ulteriori informazioni sugli oggetti e le loro caratteristiche di disegno sono disponibili nella sezione dedicata.
Condizioni di attivazione: un oggetto selezionato nell'area di disegno di livello inferiore a n/ n ed almeno due oggetti nella pagina.

0.5.1.21 Edit | Find Symbol

Con questa voce di menù si richiede a QPaint di ricercare un simbolo all'interno della pagina o del progetto intero. Per facilitare la ricerca, si può selezionare la ricerca di una parola intera oppure controllando le lettere maiuscole/minuscole. Sul display comparirá la seguente finestra di dialogo:

Figura 8 : finestra di ricerca simbolo

Nel caso in cui la ricerca trovi in uno o più punti del programma il simbolo, si apre la finestra sottoriportata:

Figura 9 : finestra di report ricerca

Cliccando con il mouse sull'oggetto voluto, Qpaint apre direttamente l'editor delle propriet à dell'oggetto. Ulteriori informazioni sugli oggetti e i relativi editor delle proprietá sono disponibili nella sezione dedicata.
Condizioni di attivazione: avere importato un file simboli.

0.5.1.22 View | Zoom In

Con questa voce di menú si richiede a QPaint di incrementare il fattore di zoom utilizzato per la visualizzazione dell'area di disegno. I fattori disponibili sono X1, X2, X3 e X4. Se l'area di disegno risultasse essere piú grande dell'area visualizzabile sará possibile agire solo sulla parte visualizzata.
Condizioni di attivazione: fattore di zoom attuale inferiore a 4.

0.5.1.23 View | Zoom Out

Con questa voce di menú si richiede a QPaint di decrementare il fattore di zoom utilizzato per la visualizzazione dell'area di disegno. I fattori disponibili sono X1, X2, X3 e X4. Se l'area di disegno risultasse essere piú grande dell'area visualizzabile sará possibile agire solo sulla parte visualizzata.
Condizioni di attivazione: fattore di zoom attuale maggiore di uno.

0.5.1.24 View | Previous Page

Con questa voce di menú si richiede a QPaint di visualizzare la pagina precedente a quella attualmente visualizzata. A cambio pagina avvenuto nessun oggetto comparirá selezionato nell'area di disegno.
Condizioni di attivazione: numero della pagina attuale maggiore di 1.

0.5.1.25 View | Next Page

Con questa voce di menú si richiede a QPaint di visualizzare la pagina successiva a quella attualmente visualizzata. A cambio pagina avvenuto nessun oggetto comparirá selezionato nell'area di disegno. Condizioni di attivazione: numero della pagina attuale inferiore al numero totale pagine.

0.5.1.26 View | Background Mode

Con questa voce di menú si richiede a QPaint di cambiare il colore di sfondo utilizzato nell'area di disegno. Il terminale o il sistema integrato utilizzano il bianco come colore di sfondo ed il nero per i testi, rettangoli ed altro. Per migliorare le operazioni di composizione delle pagine QPaint permette di scegliere il colore di sfondo utilizzabile tra bianco e verde. Quando il colore di sfondo selezionato é il bianco la pagina visualizzata da QPaint rispecchierá fedelmente ció che apparirá sul terminale o sul sistema integrato. Quando il colore di sfondo é verde si potranno individuare piú facilmente gli oggetti depositati sulla pagina. Il colore di sfondo utilizzato nell'area di disegno non influenzerá in alcun modo quanto inviato al terminale o al sistema integrato. Il colore di default all'avvio di QPaint é il verde. Questa informazione non viene memorizzata nel file del progetto e nelle impostazioni del programma. Vediamo ora un esempio di Background Mode:

Figura 10 : esempio Background Mode con risultato nel terminale dopo il download

Come si puó vedere nella fig.10, quando il Background Mode é verde, risulta molto piú facile individuare il campo di competenza (area) di ogni singolo oggetto. In questo modo si possono selezionare piú agevolmente gli oggetti, trascinarli, ed evitare sovrapposizioni indesiderate. Impostando il Background Mode su bianco si ha invece la rappresentazione di come apparirá la pagina quando sará visualizzata sul terminale o sul sistema integrato. Si puó inoltre notare che indipendentemente dal Background mode utilizzato, il risultato sul terminale o sul sistema integrato sará lo stesso.

0.5.1.27 View | Report Window

Con questa voce di menú si richiede a QPaint di visualizzare la finestra di Report, che é una finestra di tool e quindi come tale presenta alcune caratteristiche intrinseche : ha una barra del titolo ridotta, non puó essere ridotta ad icona o ingrandita a tutto schermo, é sempre sovrapposta alla finestra principale del programma e condivide con essa il flusso di input della tastiera e del mouse. All'avvio di QPaint é sempre invisibile e presenta posizione e dimensioni di default. Puó quindi essere visualizzata, spostata, ridimensionata e nascosta. Alla sua riattivazione la posizione e le dimensioni precedenti verranno ripristinate. Alla chiusura di un progetto viene sempre ripulita del suo contenuto e nascosta. La posizione e le dimensioni non vengono memorizzate nel file del progetto e nelle impostazioni del programma.
In essa sono rappresentati i risultati ottenuti dalla procedura di controllo del progetto. Ulteriori informazioni inerenti ai contenuti della Report Window sono disponibili nella sezione dedicata al Check Project.

0.5.1.28 Project | Symbol Reference

Con questa voce di menú si richiede a QPaint di aprire la finestra di dialogo Symbol Reference dalla quale é possibile importare nel progetto un nuovo file simboli o visualizzare le informazioni di quello attualmente caricato. Nella Symbol Reference é possibile visualizzare i valori di checksum e l'originaria posizione con nome del file simboli importato precedentemente. Nel caso di un progetto nuovo o di un progetto in cui non é mai stato importato un file simboli la dialog visualizzata sará la seguente :

Figura 11 : finestra di dialog Symbol Reference di un progetto senza file simboli

Come si puó vedere nella fig.11, nel gruppo “Actual Checksums” compaiono rispettivamente i checksum registrati nel file simboli importato ed inerenti al progetto QView che lo ha generato. Queste informazioni sono utili per verificare la validità del file simboli. Nel gruppo “Loaded Symbol File” compaiono il nome del file simboli e il percorso da cui é stato prelevato. Per visualizzare il percorso bisogna portare e mantenere il puntatore mouse sopra all'oggetto Path. Dopo alcuni istanti comparirá la finestra di tool tip con il percorso originario del file simboli. La tool tip rimarrà visibile per circa un secondo. In questo caso, non essendo mai stato importato un file simboli, i checksum avranno tutti valore zero, mentre “Not loaded file !” verrá visualizzata sia nel nome che nel percorso dello stesso. Nel caso di un progetto in cui é già stato importato un file simboli la dialog visualizzata sará la seguente:

Figura 12 : finestra di dialog Symbol Reference di un progetto con file simboli

La pressione del pulsante “Import New” fará comparire la seguente finestra di dialogo:

Figura 13 : finestra di dialogo Import Symbol Reference

Le funzionalitá espletate dalla finestra di dialogo sono quelle standard normalmente fornite dallo stesso sistema operativo Windows®. Se nel progetto é giá stato importato un file simboli, la dialog tenterá di riposizionare il percorso ed il nome del file ai valori originari. A conferma dell'operazione con il tasto “Apri” il nuovo file simboli verrá importato e ne verranno visualizzate le nuove informazioni nella dialog Symbol Reference. A questo punto il pulsante “Cancel” verrá rinominato con “OK” e focalizzato.

Se si modificano solamente i moduli task MOD non é necessaria nessuna operazione di sincronizzazione!

Il file simboli contiene tutte le informazioni necessarie per poter eseguire le operazioni di interfacciamento con l'applicativo QMove presente nella CPU collegata al terminale. Esso viene creato da QView nella fase di compilazione. Ogni compilazione comporta un aggiornamento di tale file per cui é necessario effettuare un aggiornamento dei simboli ogni qual volta si sono apportate delle modifiche al file di configurazione CNF dell'applicativo o alla struttura dell'applicativo (aggiunta di un task). La sequenza corretta per essere sempre sincronizzati tra QView, QMove e QPaint é la seguente

  1. QView: modificare il file di configurazione CNF dell'applicativo.
  2. QView: compilare l'applicativo.
  3. QView: effettuare il download dell'applilcativo nella CPU del QMove.
  4. QView: salvare l'applicativo.
  5. QPaint: con “Project | Symbol Reference” importare dalla directory dell'applicativo il nuovo file simboli SYM creato da QView durante la compilazione.

0.5.1.29 Project | Check Project

Con questa voce di menú si richiede a QPaint di eseguire il controllo del progetto. Vediamo ora cosa si intende per controllo del progetto e perché sia necessaria questa operazione. QPaint é stato progettato per lasciare ampia libertá nell'impostazione delle proprietá dei vari oggetti presenti in un progetto, come eventi, azioni ed oggetti grafici. Ció a beneficio di una maggiore flessibilitá nella realizzazione dello stesso. É infatti possibile impostare gli oggetti con simboli ancora da definire, con immagini ancora da importare o creare ed altro ancora. Puó anche accadere che simboli presenti inizialmente, nel file simboli importato, cambino di tipo, gruppo di appartenenza o vengano eliminati durante lo sviluppo stesso del progetto. Bene, in qualsiasi momento é possibile eseguire un controllo su quanto scritto e verificare che tutto sia coerente con le regole fissate. Tramite Check Project viene effettuato un controllo su tutti gli oggetti di un progetto e creata nella Report Window una lista con la descrizione dettagliata degli eventuali errori incontrati. Ogni linea identifica un errore rilevato in un determinato oggetto. Lo stesso oggetto puó presentare piú linee di errore consecutive. Ma questo non é tutto. Per semplificare le operazioni di correzione degli errori la linea selezionata sulla lista della Report Window é sensibile alla pressione del tasto Enter o al doppio clic sul tasto sinistro del mouse, di modo che venga aperto l'editor di proprietá dell'oggetto interessato con il fuoco posto automaticamente sulla causa dell'errore. Inoltre, sulla barra di stato del programma compare un estratto esplicativo dell'errore in correzione. Alla richiesta di controllo del progetto la Report Window viene posta automaticamente in visualizzazione. Il controllo del progetto viene automaticamente eseguito anche durante la fase di download. Ulteriori informazioni a riguardo sono disponibili nella sezione dedicata al download del progetto.
Nel caso in cui il controllo del progetto non riscontri alcun errore comparirá la seguente finestra:

Figura 14: finestra Report Window

Come si puó vedere in fig.14, nella lista della Report Window compare una sola linea che notifica il buon esito del controllo sul progetto. La pressione del tasto Enter o il doppio clic sul tasto sinistro del mouse su questa linea non comporterá alcun effetto.

Nel caso in cui il controllo del progetto riscontri degli errori comparirá la seguente finestra:

Figura 15 : finestra Report Window con segnalazione di alcuni errori

Come si puó vedere nella fig.15, la Report Window é composta da una lista a scorrimento verticale contenente gli errori rilevati dal controllo del progetto. Ad ogni linea corrisponde un errore. Ogni oggetto puó avere piú errori e quindi piú linee. In ogni caso gli errori di un determinato oggetto sono sempre raggruppati. Una linea della lista é composta delle seguenti parti: [<causa>] <collocazione> (<codice errore>): <descrizione>.

causaDefinisce il motivo della linea di rapporto. In questo caso [Error] sta per errore nel progetto
collocazioneDefinisce la collocazione dell'errore. Puó valere
Event in global eventsEvento globale
Action in global eventsAzione globale
Event on page nEvento sulla pagina, dove n é il numero della pagina
Action on page nAzione sulla pagina, dove n é il numero della pagina
Object on page nOggetto grafico sulla pagina, dove n é il numero della pagina
codice erroreCodice identificativo dell'errore. Puó valere
12001Nell'evento On Key non é stato definito il tasto di attivazione
12002Nell'evento On Press non é stato definito il tasto di attivazione
12003Nell'evento On Release non é stato definito il tasto di attivazione
12004Nell'evento On Time non é stato definito il tempo di attivazione
12005Nell'azione Goto Page non é stata definita la pagina a cui saltare
12006Nell'azione Goto Page é stato impostato il nome di una pagina inesistente
12007Nell'azione Send Command non é stato definito il comando da eseguire
12008Nell'azione Send Command é stato definito un comando non riconosciuto
12009Nell'azione Led On non é stato definito il led interessato all'operazione
12010Nell'azione Led Off non é stato definito il led interessato all'operazione
12011Nell'azione Led Blink non é stato definito il led interessato all'operazione
12012Nella variabile di riferimento il campo Base non é stato definito
12013Nella variabile di riferimento il campo Base contiene un simbolo sconosciuto
12014Nella variabile di riferimento il campo Base contiene un simbolo di un gruppo dati non valido
12015Nella variabile di riferimento il campo Base contiene un simbolo di un tipo dati non valido
12016Nella variabile di riferimento il campo Base contiene un simbolo con accesso a sola lettura
12017Nella variabile di riferimento il campo First Index non é stato definito
12018Nella variabile di riferimento il campo First Index contiene un simbolo sconosciuto
12019Nella variabile di riferimento il campo First Index contiene un simbolo di un gruppo dati non valido
12020Nella variabile di riferimento il campo First Index contiene un simbolo di un tipo dati non valido
12021Nella variabile di riferimento il campo First Index é impostato anche se non richiesto
12022Nella variabile di riferimento il campo Second Index non é stato definito
12023Nella variabile di riferimento il campo Second Index contiene un simbolo sconosciuto
12024Nella variabile di riferimento il campo Second Index contiene un simbolo di un gruppo dati non valido
12025Nella variabile di riferimento il campo Second Index contiene un simbolo di un tipo dati non valido
12026Nella variabile di riferimento il campo Second Index é impostato anche se non richiesto
descrizioneDescrive in modo dettagliato l'errore riscontrato. Vedere descrizione del campo codice errore per una migliore comprensione dell'errore.

Quando la Report Window é attiva, é possibile tramite i tasti cursore eseguire lo scroll dell'intera lista e utilizzare il tasto Enter per attivare l'editor proprietá dell'oggetto descritto nella linea selezionata. Tramite il mouse si possono ottenere gli stessi risultati piú agevolmente. Una volta attivato, l'editor proprietá dell'oggetto posizionerá automaticamente il fuoco sul campo dati che ha generato l'errore. Questo semplifica notevolmente le operazioni di correzione dello stesso. La Report Window modifica il contenuto della lista errori solo sulla richiesta di un controllo del progetto, per cui anche quando un errore viene corretto, la relativa linea di descrizione continuerá ad esistere. Lo stesso vale se un oggetto con uno o piú errori o la pagina in cui é contenuto vengono rimossi. A questo punto la Report Window si limita a segnalare che l'uno o l'altro oggetto non sono piú disponibili e che quindi sarebbe buona cosa ripetere il controllo del progetto per lavorare con una lista errori aggiornata. Vedere la lista messaggi all'utente per una descrizione dettagliata delle segnalazioni generate. Durante le operazioni di scaricamento del progetto attivo, la Report Window verrá automaticamente nascosta e tutti i dati in essa contenuta cancellati.

Nel caso in cui la larghezza della Report Window risulti essere insufficiente per la visualizzazione completa dei messaggi presenti sulla lista, nella parte inferiore della finestra apparirá la barra di scorrimento orizzontale o verticale.

Condizioni di attivazione: nel progetto deve essere stato importato almeno una volta un file simboli.

0.5.1.30 Project | Project Setup

Con questa voce di menú si richiede a QPaint di aprire la finestra di dialogo Project Setup dalla quale é possibile accedere ai parametri di configurazione del progetto in uso. La finestra di dialogo visualizzata sará la seguente:

Figura 16 : finestra di dialogo Project Setup

Ogni progetto ha la possibilitá di definire i seguenti parametri di configurazione:

Title: titolo dell'applicazione. Il titolo dell'applicazione é composto da una stringa ASCII lunga al massimo 25 caratteri. Viene memorizzato nel terminale durante la fase di download ed é visualizzabile sullo stesso nella pagina INFO.

L'oggetto Value ha la possibilitá di non eseguire nessun scaling, eseguire lo scaling globale o definire un proprio fattore di scaling. Vedere la documentazione sull'oggetto Value per maggiori informazioni.

Scale A, Scale B e Scale C : valori di scaling globali. Tramite la combinazione di tali valori si ottiene un fattore di scala globale che permette la conversione tra diverse unitá di misura, come ad esempio millimetri e pollici. Il fattore di scala risultante puó essere applicato all'oggetto grafico “Value”. Value ha il compito di interfacciare un campo di introduzione/ visualizzazione del terminale con le variabili interne del QMove. La regola applicata é la seguente:

dove: X é il contenuto della memoria CPU QMove indirizzata dall'oggetto Value. Y é il valore risultante visualizzato sul terminale.

Nell'esempio di fig.16 si vede come ponendo Scale A a 10, Scale B a 254 e Scale C a 0 si ottenga il fattore di scala necessario per visualizzare un dato originario in mm nel suo corrispondente in pollici.

Message Languages: lingue messaggi. Tramite i bottoni “Add”, “Insert”, “Remove” e la griglia di edit sottostante, é possibile definire fino a 10 diverse lingue messaggi per tutti i testi che compariranno sul terminale. Per ogni lingua é possibile definire un nome identificativo lungo al massimo 12 caratteri. Nomi uguali per piú lingue sono ammessi. Gli oggetti interessati dalle lingue messaggi sono gli oggetti grafici “String” e “ValString”. Nel progetto vi deve essere sempre almeno una lingua attiva perció il pulsante “Remove” si disabiliterá quando si arriverá ad avere una sola lingua. Le lingue consentite sono al massimo 10, per cui i bottoni “Add” ed “Insert” si disabiliteranno quando si raggiungerá tale valore. Durante la fase di download verranno memorizzati nel terminale oltre a tutti i messaggi in lingua anche le loro descrizioni. In questo modo tramite la pagina CONFIGURATION del terminale sará possibile scorrere la lista lingue disponibili e scegliere quale rendere attiva sul display. Quando si rimuove una lingua esistente, tramite il pulsante “Remove”, tutti i messaggi associati a quella lingua in tutti gli oggetti String e ValString presenti nel progetto verranno automaticamente rimossi. In QPaint é possibile definire quale lingua messaggi usare per le varie visualizzazioni nell'area di disegno. Ció si ottiene effettuando un clic con il tasto sinistro del mouse sul numero posto a sinistra del nome identificativo della lingua interessata. Una freccia rossa fará da segnaposto alla lingua selezionata.
Il pulsante “Cancel” non ha alcun effetto sulle modifiche apportate alle lingue messaggi per cui tutte le impostazioni effettuate non potranno essere annullate.

Edit drawing mode: tipo di visualizzazione in data entry. Se si imposta il modo “normal”, quando si accede al data entry le cifre lampeggianti saranno nere su fondo bianco. Se si imposta il modo “highlight” quando si accede al data entry le cifre lampeggianti saranno bianche su sfondo nero.
In questa sezione si é parlato delle pagine di terminale INFO e CONFIGURATION, senza peró descriverne la modalitá di utilizzo. Tutte le informazioni a riguardo sono disponibili nel manuale tecnico del terminale.

0.5.1.31 Project | Display Size

Con questa voce di menú si richiede a QPaint di aprire la finestra di dialogo Display Size Variables dalla quale é possibile selezionare le dimensioni del display che si stea utilizzando.L'impostazione delle dimensioni del display deve essere fatta in fase iniziale prima della stesura delle pagine.
Nel caso non venga ipostato alcun valore verrà selezionate la dimensione più grande come standard. (240(width) x 128(height))

Figura 16a: finestra di dialogo Display Type

Con riferimento alla figura 16a
240(width) x 128(height) = Impostazione standard per la selezione del display piu grande e maggiormente diffuso.
128(width) x 64(height) = Impostazione display di piccole dimensioni.
Custom Display = Impostazione particolare , selezionata nel caso di pannello custom con di dimensioni del display diverse da quelle standard riportate.

0.5.1.32 Project | Internal Variables

Con questa voce di menú si richiede a QPaint di aprire la finestra di dialogo Internal Variables dalla quale é possibile aggiungere, rimuovere e visualizzare le variabili interne. Durante lo sviluppo di un progetto per il terminale sono disponibili tre diversi insiemi di variabili : le variabili QMove, le variabili interne e le variabili di terminale. Le variabili QMove sono quelle messe a disposizione del terminale tramite l'importazione di un file simboli. Esse risiedono nella CPU del QMove a cui é collegato il terminale e vi si accede tramite la comunicazione seriale. Le variabili interne sono variabili definite dall'utente a livello di progetto terminale. Vengono ricreate nel terminale durante la fase di download e risultano disponibili nello stesso per tutta la vita del progetto. Infine, le variabili di terminale sono variabili messe a disposizione dal costruttore e rendono disponibili all'utente informazioni specifiche del terminale come stato dei tasti e timers di esecuzione. Ulteriori informazioni sui gruppi di variabili e sulla loro collocazione nei vari dispositivi hardware e software sono disponibili nell'apposita sezione.
n un progetto possono essere create tante variabili interne quanta é la memoria disponibile nel terminale. Sono definibili solo i tipi di dati semplici flag, byte, word, long e single. Vengono automaticamente azzerate ad ogni avvio del progetto. Non vi possono essere due variabili con lo stesso nome. Ogni nome variabile é composto dal prefisso ”@“ seguito da una stringa di 1 ÷ 11 caratteri ASCII in cui viene rilevata la differenza tra caratteri minuscoli e maiuscoli.

Figura 17 : finestra di dialog Internal VariablesFigura 18 : finestra di dialog Internal Variables

Nella fig.17 é possibile vedere lo stato della finestra di dialogo Internal Variables quando nessuna variabile interna é stata definita. Il pulsante “Add” é abilitato indicando che é possibile definire una nuova variabile, mentre il pulsante “Delete” é disabilitato poiché non vi é nessuna variabile da rimuovere. Nella fig.18, invece, é raffigurata la stessa dialog in cui sono state definite svariate variabili interne di piú tipi di dato. Si puó notare che il pulsante “Delete” risulta ora abilitato, é comparsa una barra a scorrimento verticale con la quale visualizzare tutte le variabili, ed é presente una linea di selezione per identificare la linea soggetta all'azione del tasto “Delete”.

Figura 19 : finestra di dialog Add Internal Variable

Premendo il pulsante “Add” viene visualizzata la dialog di fig.19. In essa sono disponibili 5 pulsanti con i quali selezionare il tipo di dato desiderato: F = flag, B = byte, W = word, L = long e S = single. I tipi di dati sono gli stessi presenti nel QMove. In “Name :” é possibile impostare il nome della variabile. Il prefisso ”@“ non é rimuovibile poiché obbligatorio per ogni variabile interna. Nel caso in cui si tenti di dichiarare una variabile interna con un nome giá usato comparirá un box di messaggio con la scritta “Name ”@var_name” already used by another Internal Variable !“. Premendo il tasto “OK” si ritornerá alla dialog di figura 17.

0.5.1.33 Project | Global Events Editor

Con questa voce di menú si richiede a QPaint di aprire la finestra di dialogo Global Events Editor dalla quale é possibile visualizzare ed introdurre gli eventi attivi a livello globale.

Un evento é una particolare condizione che si verifica nel tempo e che viene rilevata dal terminale o dal sistema integrato, come ad esempio la pressione di un tasto o il cambiamento del valore di una variabile nella CPU del QMove. Ad un determinato evento é possibile associare una lista di azioni che il terminale o il sistema integrato andranno a svolgere quando l'evento viene rilevato. Gli eventi si possono dividere in due gruppi di appartenenza: eventi globali ed eventi di pagina. Gli eventi globali vengono sempre elaborati prima di quelli di pagina. Un evento definito sia negli eventi globali che negli eventi di pagina, vedrá eseguite prima le azioni relative all'evento globale e poi quelle relative all'evento di pagina.
La finestra di dialogo visualizzata sará la seguente:

Figura 20 : finestra di dialogo Global Events Editor

Come si puó vedere nella fig.20, la dialog é divisa in tre aree principali:

  1. la zona di sinistra, dedicata alla gestione degli eventi.
  2. la zona di destra, dedicata alla gestione delle azioni associate agli eventi.
  3. l'area sottostante le due, riservata all'introduzione dei parametri specifici della prima o della seconda (in questo caso risulta vuota). Tale area viene anche chiamata “pannello impostazioni”.

^In un progetto possono essere creati tanti eventi quanta é la memoria disponibile nel terminale.^

Definizione di un nuovo evento

Nella zona di sinistra, dedicata alle operazioni sugli eventi, sono presenti i bottoni “Add”, “Insert”, “Delete” ed una casella di riepilogo contenente la lista degli eventi giá definiti. Per definire un nuovo evento vi sono due metodi :

  1. utilizzare il pulsante “Add” per aggiungere un nuovo evento in coda alla lista degli eventi.
  2. selezionare nella casella di riepilogo la posizione ove inserire il nuovo evento. Utilizzare il pulsante “Insert” per inserire un nuovo evento nella lista degli eventi e alla posizione selezionata.

Alla pressione del pulsante “Add” o “Insert” comparirá la seguente finestra di selezione:

Figura 21 : finestra di selezione Select Event

Come si puó vedere nella fig.21, la finestra Select Event é completamente occupata dalla casella di riepilogo contenente le definizioni degli eventi disponibili a livello globale. La selezione avviene come per una normale casella di riepilogo : effettuando un doppio clic con il tasto sinistro del mouse sulla voce interessata o selezionandola con i tasti UP & DOWN seguiti da una conferma con ENTER. Una volta confermato l'evento, sul pannello impostazioni, compariranno i campi di impostazione dei parametri dell'evento.

OnKey
L'evento OnKey a livello globale non è associabile ai tasti PGUP, PGDN e INS per cui, i corrispettivi pulsanti sul pannello impostazioni, risulteranno sempre disabilitati.

L'evento OnKey viene generato, ad ogni scansione di pagina, fintanto che il tasto del terminale associato risulta premuto. Il tempo di ripetizione dell'evento dipende dalla complessitá della pagina attiva. Piú sono gli oggetti dinamici visualizzati, piú lungo é il tempo tra la generazione di un evento e l'altro. Per associare la generazione di un evento OnKey ad un tasto del terminale basta fare clic con il pulsante sinistro del mouse sul pulsante rappresentante tale tasto nel pannello impostazioni. L'evento OnKey a livello globale non è associabile ai tasti PGUP, PGDN e INS per cui i corrispettivi pulsanti sul pannello impostazioni risulteranno sempre disabilitati.

Figura 22: pannello impostazioni evento OnKey

Se un tasto del terminale é giá stato utilizzato o non é disponibile poiché giá definito dal sistema, il suo pulsante rappresentante, visualizzato nel pannello impostazioni, comparirá disabilitato.

OnPress

L'evento OnPress viene generato alla pressione di un tasto del terminale. Per l'evento OnPress valgono le stesse procedure di impostazione descritte nell'evento OnKey.
L'evento OnPress a livello globale non è associabile ai tasti PGUP, PGDN e INS per cui i corrispettivi pulsanti sul pannello impostazioni risulteranno sempre disabilitati.

OnRelease

L'evento OnRelease viene generato al rilascio di un tasto del terminale. Per l'evento OnRelease valgono le stesse procedure di impostazione descritte nell'evento OnKey.
L'evento OnRelease a livello globale non è associabile ai tasti PGUP, PGDN e INS per cui i corrispettivi bottoni sul pannello impostazioni risulteranno sempre disabilitati.

OnAlways

L'evento OnAlways viene generato fintanto che si é nella sua area di competenza. In questo caso trattandosi di eventi di livello globale verrá generato in continuazione. Il tempo di ripetizione dell'evento dipende dalla complessitá della pagina attiva. Piú sono le variabili della CPU QMove visualizzate, piú lungo é il tempo tra la generazione di un evento e l'altro. L'evento non ha campi di impostazione e ne puó essere definito solo uno a livello globale, ed uno per ogni pagina. A questo scopo QPaint fará sí che l'evento, se giá in uso, scompaia dalla finestra di selezione Select Event.

OnPageIn

L'evento OnPageIn viene generato al primo ingresso in una nuova pagina. L'evento non ha campi di impostazione e ne puó essere definito solo uno a livello globale, ed uno per ogni pagina. A questo scopo QPaint fará si che il nome dell'evento, se é giá in uso, scompaia dalla finestra di selezione Select Event.

OnTime

L'evento OnTime viene generato quando il calendario del terminale coincide con i valori di comparazione impostati. L'evento viene generato solamente una volta. Perché venga generato l'evento, il terminale dovrá prima trovare dei valori non corrispondenti seguiti da dei valori corrispondenti. Ció significa, inoltre, che se il terminale viene spento quando l'evento OnTime é soddisfatto, alla successiva riaccensione esso non verrá rigenerato. Se al momento in cui l'evento diventa valido, il terminale si trova spento, esso verrá perso.

Figura 23 : pannello impostazioni evento OnTime

Nell'esempio di fig. 23 si é impostato l'evento OnTime per venir generato al decimo minuto di ogni ora del giorno 3 di ogni mese. Come si puó vedere é possibile definire il mese, giorno, ora e minuto di occorrenza dell'evento. Una casella di controllo posta davanti al campo di introduzione di mese, giorno, ora e minuto ne abilita o disabilita la comparazione. Se tale casella é disabilitata si intente che l'evento viene generato per tutti i valori possibili del campo in esame. Almeno un campo deve essere impostato per assicurare la correttezza dell'introduzione.

OnChangeVar
Nel documento é presente il capitolo “Impostazione variabili di riferimento” nel quale sono descritte in dettaglio tutte le operazioni necessarie per definire una variabile di riferimento.

L'evento OnChangeVar viene generato ogni qual volta la variabile di riferimento, definita nel pannello delle impostazioni, cambia il proprio valore.

Figura 24: pannello impostazioni evento OnChangeVar

Nell?esempio di fig.24 si é impostato che l'evento OnChangeVar venga generato ad ogni variazione della variabile di terminale $PAGE.

OnVar

L'evento OnVar viene generato ogni qual volta il valore della variabile di riferimento corrisponde ai parametri di comparazione impostati. Tali parametri sono composti da due campi:

  1. Compare Mode, la modalitá di comparazione.
  2. Compare Value, il valore in comprazione.

Compare Mode puó avere i seguenti valori

  1. < less than minore di
  2. > greater than maggiore di
  3. < = less or equal minore o uguale a
  4. > = greater or equal maggiore o uguale a
  5. = equal uguale a

Compare Value puó contenere solamente valori interi compresi tra -2147483648 e 2147483647.

Figura 25 : pannello impostazioni evento OnVar

Nell'esempio di fig.25 si é impostato che l'evento OnVar venga generato quando la variabile di terminale $PAGE assume il valore 10.

Definizione di una nuova azione
In un progetto possono essere create tante azioni quanta é la memoria disponibile nel terminale.

Nella zona di destra della finestra di dialogo “Global Events Editor”, dedicata alle operazioni sulle azioni, sono presenti i bottoni “Add”, “Insert”, “Delete” ed una casella di riepilogo contenente la lista delle azioni giá definite. Ogni evento, rappresentato nella casella di riepilogo a sinistra, é collegato ad una lista di azioni che verranno eseguite quanto l'evento stesso viene generato. Non vi puó essere una lista di azioni senza che vi sia un evento collegato. Per questo motivo quando non vi sono eventi definiti non sará possibile definire alcuna azione e i bottoni “Add”, “Insert” e “Delete” appariranno disabilitati. É importante anche ricordare che la lista di azioni visualizzata é quella relativa all'evento selezionato nella casella di riepilogo degli eventi e come tale cambia il suo contenuto ogni volta che si cambia l'evento selezionato. Per definire una nuova azione vi sono due metodi :

  1. utilizzare il pulsante “Add” per aggiungere una nuova azione in coda alla lista delle azioni.
  2. selezionare nella casella di riepilogo la posizione ove inserire la nuova azione. Utilizzare il pulsante “Insert” per inserire la nuova azione nelle lista delle azioni e alla posizione selezionata.

Alla pressione del pulsante “Add” o “Insert” comparirá la seguente finestra di selezione :

Figura 26 : finestra di selezione Select Action

Come si puó vedere nella fig.26, la finestra Select Action é completamente occupata dalla casella di riepilogo contenente le definizioni delle azioni disponibili a livello globale. La selezione avviene come per una normale casella di riepilogo : effettuando un doppio clic con il tasto sinistro del mouse sulla voce interessata o selezionandola con i tasti UP & DOWN seguiti da una conferma con ENTER. Una volta confermata l'azione, sul pannello impostazioni, compariranno i campi di impostazione dei parametri dell'azione.

Goto Page

Tramite l'azione Goto Page si richiede al terminale o al sistema integrato l'attivazione della pagina specificata. In QPaint vi sono due modi per identificare univocamente una pagina : tramite il suo numero ordinale e tramite il nome. Tutte le pagine hanno un numero che le identifica all'interno del progetto. Questo significa che se nel progetto vi sono 54 pagine, avremo che la prima pagina della lista avrá il numero 1, la seconda il 2 e cosí via fino all'ultima che avrá il 54. Quando si aggiunge una pagina, questa verrá creata in fondo alla lista ed acquisirá il numero successivo all'ultima pagina presente. Quando si inserisce una pagina, per esempio, in dodicesima posizione, tutte le pagine dalla 12 all'ultima incrementeranno il loro numero di una unitá e la nuova pagina prenderá il numero 12. Da questo si capisce che riferirsi ad una determinata pagina tramite il numero puó risultare pericoloso. Se inizialmente alla pagina 12 abbiamo le visualizzazioni di produzione, non é detto che in futuro, dopo inserimenti o rimozioni di altre pagine prima di quella interessata, tale pagina sia ancora la dodicesima nella lista delle pagine. Ció comporterebbe quindi un continuo riaggiustamento delle azioni che utilizzano il numero 12 per identificare la pagina. Per semplificare le operazioni di identificazione di una pagina c'é la possibilitá di associare ad essa anche un nome che la rappresenti in modo univoco per tutto il progetto. Il nome di una pagina é una stringa ASCII da 1 ÷ 20 caratteri in cui le lettere maiuscole sono ritenute diverse dalle minuscole. Una pagina ha sempre un numero, ma puó non avere un nome. Questo avviene quando il nome della pagina é composto da soli caratteri spazio. Quando si usa il nome per identificare una pagina, questo renderá valida la sua identificazione per tutta la durata dello sviluppo senza dover mai riaggiornare gli oggetti che la usano. L'azione Goto Page permette di specificare la pagina a cui eseguire il salto sia con una variabile di riferimento che con un nome scelto dalla lista dei nomi delle pagine disponibili. Nel primo caso la variabile potrebbe contenere una costante per il numero della pagina o una variabile QMove o di terminale in cui sia contenuto il numero della pagina desiderata. Questo rende possibile decidere la pagina a cui saltare direttamente da linguaggio QCL sulla CPU del QMove collegato al terminale. Nel secondo caso sará utilizzato il nome stesso della pagina desiderata scelto dalla lista dei nomi pagina rilevati nel progetto.

Figura 27 : pannello impostazioni azione Goto Page

Come si puó vedere nella fig.27, selezionando il pulsante di opzione “Page Number” si abilita l'azione Goto Page ed eseguire il salto sulla pagina specificata da una variabile di riferimento. In questo caso si tratta di una variabile QCL di nome sbPage presente nella CPU del QMove collegato al terminale o al sistema integrato..

Nel documento é presente il capitolo “Impostazione variabili di riferimento” nel quale sono descritte in dettaglio tutte le operazioni necessarie per definire una variabile di riferimento.

Figura 28: pannello impostazioni azione Goto Page

Come si puó vedere nella fig.28, selezionando il pulsante di opzione “Page Name” si abilita l'azione Goto Page ad eseguire il salto alla pagina specificata dal nome presente nella casella combinata contenente la lista dei nomi delle pagine del progetto.

Nel caso in cui una pagina con nome venga rimossa, per esempio “Available Chars”, e vi siano una o piú azioni Goto Page che la indirizzavano tramite il campo Page Name, accadrá che : nella casella di riepilogo della zona di destra, dedicata alle operazioni sulle azioni, comparirá la linea Goto Page: ” Available Chars “. Sebbene “Available Chars” non esista piú, per agevolare le operazioni di correzione dell'azione, nella casella di riepilogo verrá mantenuto il nome della pagina in cui veniva richiesto il salto. Diversamente, la casella combinata del pannello impostazioni apparirá vuota e scomparirá ogni riferimento alla pagina “Available Chars”.

Next Page

Tramite l'azione Next Page si richiede al terminale l'attivazione della pagina successiva a quella attualmente attiva. Nel caso in cui la pagina attiva sia l'ultima della lista pagine di progetto, l'azione non effettuerá alcun cambio di pagina.

Previous Page

Tramite l'azione Previous Page si richiede al terminale l'attivazione della pagina precedente a quella attualmente attiva. Nel caso in cui la pagina attiva sia la prima della lista pagine di progetto, l'azione non effettuerá alcun cambio di pagina.

Begin Data Entry

Tramite l'azione Begin Data Entry si richiede al terminale di passare in modalitá introduzione dati. Tale modalitá si abiliterá solamente se sono presenti nella pagina attiva oggetti grafici di tipo Value o ValString con la proprietá “Enable Modify Mode” abilitata.

Send Command

Tramite l'azione Send Command si richiede al terminale di inviare un comando ad un device presente nella CPU del QMove. In questo caso le fasi eseguite sono : recupero informazioni azione, invio comando al QMove tramite comunicazione seriale, verifica corretta ricezione comando con eventuali ritentativi, bufferizzazione del comando ricevuto nel QMove e infine analisi prossima azione presente nella lista azioni del terminale. Da quanto appena visto si capisce che il terminale non attende la reale esecuzione del comando inviato. Infatti il QMove si limiterá a bufferizzarlo per poi eseguirlo nel momento piú opportuno. Il tempo di ritardo nell'esecuzione del comando sará compreso tra 0 e il tempo di campionamento del device.

Figura 29: pannello impostazioni azione Send Command

Come si puó vedere nella fig.29, l'azione Send Command é stata programmata per inviare il comando START al device AsseX. Per semplificare le operazioni di impostazione dei parametri dell'azione, é stata introdotta una finestra di dialogo chiamata Symbol Object Selection. La dialog puó essere richiamata premendo il tasto F5 quando il fuoco é sul campo di introduzione “Device Command”.

Figura 30 : finestra di dialogo Symbol Object Selection

Come si puó vedere nella fig.30, la dialog Symbol Object Selection é divisa in due aree distinte. Quella di sinistra raggruppa in una struttura ad albero i vari device disponibili nella sezione INTDEVICE / EXTDEVICE del file simboli importato. Quella di destra é invece occupata dalla lista completa di tutti i comandi disponibili. Per confermare un comando é sufficiente eseguire un doppio clic con il tasto sinistro del mouse o premere il tasto ENTER sulla voce desiderata.

Set Variable

Tramite l'azione Set Variable si richiede al terminale di copiare il valore della variabile di riferimento Source nella variabile di riferimento Destination.

Figura 31 : pannello impostazioni azione Set Variable

Come si puó vedere nella fig.31, l'azione Set Variable é stata programmata affinché copi il contenuto della variabile terminale $HOUR nella variabile del QMove slOre.

Nel documento é presente il capitolo “Impostazione variabili di riferimento” nel quale sono descritte in dettaglio tutte le operazioni necessarie per definire una variabile di riferimento.

Led On

Tramite l'azione Led On si richiede al terminale di attivare uno dei led associati ai tasti funzione disponibili nella tastiera dello stesso.

Figura 32 : pannello impostazioni azione Led On

Come si puó vedere nella fig.32, l'azione Led On é stata impostata affiché attivi il led associato al tasto funzione F4.

Led Off

Tramite l'azione Led Off si richiede al terminale di disattivare uno dei led associati ai tasti funzione disponibili nella tastiera dello stesso.

Figura 33 : pannello impostazioni azione Led Off

Come si puó vedere nella fig.33, l'azione Led Off é stata impostata affiché disattivi il led associato al tasto funzione F4.

Tramite l'azione Led Blink si richiede al terminale di attivare in modalitá di blink uno dei led associati ai tasti funzione disponibili nella tastiera dello stesso.

Figura 34 : pannello impostazioni azione Led Blink

Come si puó vedere nella fig.34, l'azione Led Blink é stata impostata affinché attivi in modalitá di blink (lampeggio) il led associato al tasto funzione F4.

Backup

Tramite l'azione Backup si richiede alla CPU del QMove di avviare la procedura di backup dei dati. Durante l'esecuzione dell'azione la CPU passa in stato READY e vi rimane anche al completamento dell'operazione.

Restore
L'azione Restore viene eseguita solo se in precedenza é stata effetuata almeno una procedura di Backup.

Tramite l'azione Restore si richiede alla CPU del QMove di avviare la procedura di restore dei dati. Durante l'esecuzione dell'azione la CPU passa in stato READY e vi rimane anche al completamento dell'operazione.

Tramite l'azione Object Blink, si richiede al terminale di far lampeggiare l'oggetto dinamico VALUE indicato (vedi fig.35). Questa azione è possibile eseguirla solamente come evento di pagina e non come evento globale.

Figura 35 : pannello impostazioni azione Object Blink

Tramite l'azione Object No Blink, si richiede al terminale di non far lampeggiare l'oggetto dinamico VALUE indicato (vedi fig.36). Questa azione è possibile eseguirla solamente come evento di pagina e non come evento globale.

Figura 36 : pannello impostazioni azione Object No Blink
Object Reverse

Tramite l'azione Object Reverse, si richiede al terminale di visualizzare l'oggetto dinamico VALUE indicato (vedi fig.37) con le cifre bianche su sfondo nero. Questa azione è possibile eseguirla solamente come evento di pagina e non come evento globale.

Figura 37 : pannello impostazioni azione Object Reverse
Object No Reverse

Tramite l'azione Object No Reverse, si richiede al terminale di visualizzare l'oggetto dinamico VALUE indicato (vedi fig.38) con le cifre nere su sfondo bianco (default). Questa azione è possibile eseguirla solamente come evento di pagina e non come evento globale.

Figura 38 : pannello impostazioni azione Object No Reverse
Increment Contrast

Tramite l'azione Increment Contrast si richiede al terminale di incrementare il contrasto di visualizzazione del display LCD.

Nella condizione di temperatura ottimale (vedere caratteristiche terminale) il tempo di warm-up del display é dell'ordine di 5 ÷ 10 secondi. Si consiglia comunque di attendere almeno 5 minuti dall'accensione a freddo del terminale prima di procedere alla modifica del contrasto.

Decrement Contrast

Tramite l'azione Decrement Contrast si richiede al terminale di decrementare il contrasto di visualizzazione del display LCD.

Nella condizione di temperatura ottimale (vedere caratteristiche terminale) il tempo di warm-up del display é dell'ordine di 5 ÷ 10 secondi. Si consiglia comunque di attendere almeno 5 minuti dall'accensione a freddo del terminale prima di procedere alla modifica del contrasto.

Attenzione !
Quando il terminale é in modalitá introduzione dati sono disabilitati gli eventi On Press, On Key e On Release sia a livello globale che di pagina. Inoltre sono disabilitate anche le azioni Goto Page, Next Page e Previous Page. Nel caso in cui si volesse realizzare un campo introduzione che permetta di impostare il numero della pagina in cui saltare, é consigliato l'uso dell'evento On Change Var abbinato all'azione Goto Page.
On Out Data Enrty No Confirn

L'evento On Out Data Entry No Confirm viene generato quando si vuole uscire da un campo di introduzione dati senza confermare il dato che si è introdotto. L'evento non ha campi di impostazione e non puó essere definito a livello globale, ma può essere definito per ogni pagina. A questo scopo QPaint fará si che il nome dell'evento, se é giá in uso, scompaia dalla finestra di selezione Select Event.

On Out Data Enrty Confirn

L'evento On Out Data Entry Confirm viene generato quando si vuole uscire da un campo di introduzione dati confermando il dato che si è introdotto.
L'evento non ha campi di impostazione e non puó essere definito a livello globale, ma può essere definito per ogni pagina. A questo scopo QPaint fará si che il nome dell'evento, se é giá in uso, scompaia dalla finestra di selezione Select Event.

0.5.1.34 Page | Insert Page

Con questa voce di menú si richiede a QPaint di inserire una nuova pagina nel progetto incrementando il numero della pagina di quelle comprese tra quella attualmente visualizzata e l'ultima del progetto. In un progetto vi possono essere al massimo 999 pagine, per cui una volta raggiunto tale limite la voce verrá disabilitata.
Condizioni di attivazione: nel progetto vi devono essere meno di 999 pagine.

0.5.1.35 Page | Add Page

Con questa voce di menú si richiede a QPaint di aggiungere una nuova pagina alla fine del progetto. In un progetto vi possono essere al massimo 999 pagine, per cui una volta raggiunto tale limite la voce verrá disabilitata.
Condizioni di attivazione: nel progetto vi devono essere meno di 999 pagine.

0.5.1.36 Page | Copy Page

Con questa voce di menú si richiede a QPaint di copiare la pagina attiva del progetto. La copia manterrà tutti i collegamenti con le variabili.
Condizioni di attivazione: nessuna.

Page | Paste Page Con questa voce di menú si richiede a QPaint di incollare la pagina copiata precedentemente. Prima di fare l'azione richiesta verrà visualizzata la seguente finestra di dialogo:

Figura 38 : pannello impostazioni Paste Page

Prima di incollare la pagina è possibile assegnarle un nome e decidere se si vuole incollare o al posto di quella visualizzata o come precedente a quella visualizzata o come successiva a quella visualizzata o alla fine del progetto. In ogni caso manterrà tutti i collegamenti con le variabili.
Condizioni di attivazione: aver fatto almeno un comando di Copy Page.

0.5.1.37 Page | Delete Page

Con questa voce di menú si richiede a QPaint di rimuovere la pagina attiva dal progetto. Prima di effettuare la rimozione verrá visualizzata una finestra di dialogo con il testo “Page will be lost ! Are you sure of to want to continue ?”. Se si conferma l'operazione con “Yes”, la pagina verrá rimossa, mentre “No” abortirá l'intera operazione.
Condizioni di attivazione: nel progetto vi devono essere almeno 2 pagine.

0.5.1.38 Page | Import Page

Con questa voce di menù si richiede a Qpaint di importare una pagina esportata da un altro progetto. La pagina importata manterrà tutti i collegamenti con le variabili della pagina esportata e gli eventi di pagina. Prima di fare l'azione richiesta verrà visualizzata la seguente finestra di dialogo:

Figura 39 : pannello impostazioni Import Page

Una volta selezionata la pagina da importare, viene visualizzata la finestra di dialogo di fig. 38, grazie alla quale, prima di importare la pagina, è possibile assegnarle un nome e decidere se si vuole incollare o al posto di quella visualizzata o come precedente a quella visualizzata o come successiva a quella visualizzata o alla fine el progetto.
Condizioni di attivazione: nel progetto vi devono essere meno di 999 pagine.

0.5.1.39 Page | Export Page

Con questa voce di menù si richiede a Qpaint di esportare la pagina visualizzata dal progetto aperto. La pagina esportata manterrà tutti i collegamenti con le variabili e gli eventi di pagina. Prima di fare l'azione richiesta verrà visualizzata la seguente finestra di dialogo:

Figura 40 : pannello impostazioni Export Page

0.5.1.40 Page | Data Entry Sequence Editor

Con questa voce di menú si richiede a QPaint di ordinare in modo manuale la sequenza del data entry nella pagina visualizzata. Prima di fare l'azione verrà visualizzata la seguente finestra di dialogo:

Figura 41 : pannello Data Entry Sequence Editor

Nella finestra in alto a sinistra viene visualizzata la pagina che si intende modificare; evidenziato in rosso il campo di data entry attualmente in modifica.
Nella finestra in basso viene visualizzata una tabella contenente:

  • Nella prima colonna il numero dell'oggetto.
  • Nella seconda colonna viene visualizzato il nome dell'oggetto.
  • Nella terza colonna viene data la possibilità di modificare il data entry (di default disabilitata); facendo un doppio click con il mouse sulla casella si abilita il data entry e viene contrassegnata con una “X”
  • Nella quarta colonna viene visualizzato il nome dell'oggetto a cui andrà il data entry premendo il tasto a freccia a sinistra; facendo un doppio click con il mouse sulla casella si disabilita il funzionamento del tasto.
  • Nella quinta colonna viene visualizzato il nome dell'oggetto a cui andrà il data entry premendo il tasto a freccia a destra; facendo un doppio click con il mouse sulla casella si disabilita il funzionamento del tasto.
  • Nella sesta colonna viene visualizzato il nome dell'oggetto a cui andrà il data entry premendo il tasto a freccia verso l'alto; facendo un doppio click con il mouse sulla casella si disabilita il funzionamento del tasto.
  • Nella settima colonna viene visualizzato il nome dell'oggetto a cui andrà il data entry premendo il tasto a freccia verso il basso; facendo un doppio click con il mouse sulla casella si disabilita il funzionamento del tasto.
  • Nell'ultima colonna viene visualizzato il nome dell'oggetto a cui andrà il data entry premendo il tasto Enter; facendo un doppio click con il mouse sulla casella si disabilita il funzionamento del tasto.
  • Se si desidera riprogrammare totalmente l'oggetto basta agire sula riga interessata con un singolo click del tasto destro del mouse.

Nella finestra in alto a destra viene visualizzata la mappatura della tastiera. Premendo i tasti a freccia o il tasto enter, viene evidenziato in blu il campo dove andrà il data entry alla pressione del tasto relativo. Per modificare il campo di destinazione, è sufficiente trascinare con il mouse il campo desiderato dalla finestra di sinistra al simbolo del tasto voluto. Nel caso un campo abbia disabilitata la funzione del tasto ENTER nel data entry sequence, si esce dal data entry quando si preme il tasto (per gli altri campi si può uscire con il tasto “ESC”).

0.5.1.41 Page | Toggle Lock Page

Con questa voce di menú si richiede a QPaint di abilitare o disabilitare l'impostazione del “controllo della password” relativo alla pagina attiva. Ulteriori informazioni sono disponibili sulla sezione riguardante la “barra di impostazione della password di pagina”.

0.5.1.42 Page | Page Events Editor

Con questa voce di menú si richiede a QPaint di aprire la finestra di dialogo Page Events Editor dalla quale é possibile visualizzare ed introdurre gli eventi relativi alla pagina di progetto attiva. Sostanzialmente gli eventi di pagina sono eguali a quelli globali per cui quanto descritto nella sezione “Project | Global Events Editor” é valido anche per la sezione “Page | Page Events Editor”. Tra i due editor esistono peró alcune differenze:

  • nel titolo della finestra di dialogo compare il numero, ed eventualmente anche il nome, della pagina interessata.
  • negli eventi On Key, On Press e On Release é possibile creare una lista di azioni anche per i tasti INS, PG DN e PG UP.
  • sono stati aggiunti gli eventi di On OUT Data Entry Confirm e On OUT Data Entry No Confirm

La finestra di dialogo visualizzata sará la seguente:

Figura 42 : finestra di dialogo Page Events Editor

Come si puó vedere in fig.42, l'editor eventi di pagina é esattamente lo stesso utilizzato per gli eventi globali e differisce solamente per il testo visualizzato nel titolo della finestra di dialogo.
Gli eventi aggiunti rispetto a quelli globali sono:

On OUT Data Entry Confirm

L'evento On OUT Data Entry Confirm viene generato all'uscita dal data entry da un campo con conferma del dato.

Figura 43 : Pannello di impostazioni evento On OUT Data Entry Confirm
On OUT Data Entry No Confirm

L'evento On OUT Data Entry No Confirm viene generato all'uscita dal data entry da un campo senza aver confermato il dato.

Figura 44 : Pannello di impostazioni evento On OUT Data Entry Confirm
Transfer | Download

Con questa voce di menú si richiede a QPaint di effettuare il download del progetto nel terminale. La procedura di download si divide in cinque fasi:

  1. Il controllo del progetto.
  2. La connessione seriale con il terminale.
  3. La compilazione del progetto.
  4. La cancellazione della memoria nel terminale.
  5. Il download del progetto nel terminale.
  6. Lo start del progetto scaricato nel terminale.
Il controllo del progetto

Durante questa fase il QPaint esegue un controllo del progetto per verificare che lo stesso sia coerente con le regole fissate. Ció permette di evitare che vengano effettuati trasferimenti nel terminale di progetti non corretti, impedendo quindi malfunzionamenti e comportamenti indesiderati. La procedura seguita é la stessa utilizzata per la voce di menú “Project|Check Project” a cui si rimanda per ulteriori informazioni. Unica differenza tra il controllo di progetto effettuato durante il download e quanto fatto durante il Check Project di “Project | Check Project” é che durante il download la finestra di dialogo Report Window non viene visualizzata automaticamente, ma la si potrá richiamare manualmente una volta usciti dalla dialog del download. Se durante questa fase viene riscontrato un errore la procedura di download termina é sará possibile uscire dalla dialog Download Project tramite il pulsante “OK”.

La connessione seriale con il terminale

Durante questa fase il QPaint verifica la comunicazione seriale con il terminale. I parametri di comunicazione sono quelli impostati in “Options | Communication” e a cui si rimanda per ulteriori informazioni. Se durante questa fase viene riscontrato un errore la procedura di download termina e sará possibile uscire dalla dialog Download Project tramite il pulsante “OK”.

La compilazione del progetto

Durante questa fase il QPaint effettua la compilazione del progetto e crea il file da trasferire al terminale. Se durante questa fase viene riscontrato un errore la procedura di download termina é sará possibile uscire dalla dialog Download Project tramite il pulsante “OK”.

La cancellazione della memoria nel terminale

Durante questa fase il QPaint effettua l'azzeramento della memoria del terminale in cui verrá memorizzato il progetto compilato. Se durante questa fase viene riscontrato un errore la procedura di download termina é sará possibile uscire dalla dialog Download Project tramite il pulsante “OK”. Le operazioni effettuate nel terminale non verranno annullate.

Il download del progetto nel terminale

Durante questa fase il QPaint effettua il download del progetto compilato nella memoria del terminale. A questo punto nella dialog Download Project comparirá un indicatore che visualizzerá la progressione dei dati trasferiti istante per istante. Se durante questa fase viene riscontrato un errore la procedura di download termina é sará possibile uscire dalla dialog Download Project tramite il pulsante “OK”. Le operazioni effettuate nel terminale non verranno annullate.

Lo start del progetto scaricato nel terminale

Durante questa fase il QPaint invia al terminale il comando di start progetto. Tramite questo comando il terminale avvierá il progetto scaricato uscendo dalla modalitá “Download Configuration”. Se durante questa fase viene riscontrato un errore la procedura di download termina é sará possibile uscire dalla dialog Download Project tramite il pulsante “OK”. Le operazioni effettuate nel terminale non verranno annullate.

0.5.1.43 Graphics | Font Report

Ulteriori informazioni riguardo ai font e la loro impementazione nel sistema QPaint/Terminale sono disponibili nella sezione dedicata.

Con questa voce di menú si richiede a QPaint di aprire la finestra di dialogo Font Report dalla quale é possibile visualizzare e stampare un rapporto dettagliato sui font disponibili, inclusa l'indicazione di quali sono in uso nel corrente progetto. La finestra di dialogo visualizzata sará la seguente:

Figura 45 : finestra di dialogo Font Report

Come si puó vedere nella fig.45, per ogni font viene visualizzato il nome, lo stato di utilizzo nel corrente progetto e la quantitá di memoria terminale che impegnerá se utilizzato. I font con il campo “Size” impostato a “Terminal Font” sono residenti nella ROM interna del terminale, per cui non vengono scaricati durante la fase di download e sono sempre disponibili in qualsiasi progetto.

0.5.1.44 Graphics | New Font From | Bitmap File

Con questa voce di menú si richiede a QPaint di creare un nuovo font utente a partire da un file Bitmap monocromatico. La finestra di dialogo visualizzata sará la seguente:

Figura 46 : finestra di dialogo New Font From Bitmap File

Come si puó vedere nella fig.46, nella dialog sono presenti tre campi di introduzione dati e rispettivamente : la casella “Bitmap File Name”, nella quale si specifica il nome del file Bitmap comprensivo di percorso ed estensione (es: “C:\Progetti\Terminale\Bitmap per Font\Display 7 segmenti.BMP”), la casella “Terminal Font Name”, nella quale si definisce il nome del font utente in creazione (es: “Display 7 segmenti”) e la casella “Char Spacing”, nella quale si imposta il valore di spacing carattere desiderato. Tramite il pulsante “OK” si avvia l'operazione di creazione del font, mentre “Cancel” abortisce l'intera operazione. É presente, inoltre, il pulsante “File”, con il quale é possibile selezionare il file Bitmap utilizzando la finestra di dialog standard di Windows® per la selezione delle immagini.

Alla pressione del pulsante “OK” il QPaint effettuerá una serie di controlli sui dati introdotti. Tali controlli verificheranno la bontá dei dati nei campi di introduzione e le caratteristiche del file Bitmap specificato. In caso vengano riscontrate irregolaritá QPaint visualizzerá un box di dialogo con le indicazioni del caso.

0.5.1.45 Graphics | New Font From |True Type Font

Con questa voce di menú si richiede a QPaint di creare un nuovo font utente a partire da un font True Type® di Windows®. La finestra di dialogo visualizzata sará la seguente:

Figura 47 : finestra di dialogo Rights to True Type® Font Conversion

Come si puó vedere nella fig.47, prima di poter creare un nuovo font utente a partire da un font True Type® di Windows® é necessario leggere attentamente le istruzioni per i diritti di autore inerenti l'utilizzo, il trasporto e la modifica dei font True Type® installati nel computer. É piena responsabilitá dell'utente far si che quanto ivi descritto venga rispettato. La pressione del pulsante “Continue »” permetterá la creazione del nuovo font, mentre “Cancel” abortirá l'intera procedura.

Figura 48 : finestra di dialogo New Font From True Type® Font

Come si puó vedere nella fig.48, la dialog é composta dai seguenti oggetti : la casella di riepilogo “Windows Font Name”, con la quale é possibile selezionare il font True Type® dal quale derivare il nuovo font utente, la casella “Terminal Font Name”, nella quale si definisce il nome del font utente in creazione (es: “Display 7 segmenti”), la casella “Char Width”, nella quale si definisce la larghezza in pixel dei caratteri nel font in creazione e la casella “Char Spacing”, nella quale si imposta il valore di spacing carattere desiderato. Tramite il pulsante “OK” si avvia l'operazione di creazione del font, mentre “Cancel” abortisce l'intera procedura. É presente, inoltre, il pulsante “Export BMP”, con il quale é possibile creare un file Bitmap monocromatico con il font risultante dalle impostazioni effettuate. Quest'ultima operazione risulta utile quando si intende generare la Bitmap di un font partendo da un font True Type® di Windows®, modificare tale Bitmap con un editor grafico quale il PaintBrush di Windows® e creare il nuovo font utente con la Bitmap modificata tramite la voce di menú “Graphics | New Font From… | New Font From Bitmap File”.

Attenzione !

La qualitá del font utente creato tramite la dialog “New Font From True Type Font” dipende da molti aspetti tecnici che di solito non sono visibili ad un normale utente. Di regola si puó peró assumere che, maggiore é la dimensione in pixel del carattere definita tramite il parametro “CharWidth”, migliore é la qualitá dello stesso. Importante é anche il tipo di font True Type® utilizzato in quanto maggiore é la presenza di piccoli dettagli grafici nel font, minore é la qualitá del font utente ottenibile.

Alla pressione del pulsante “OK” il QPaint effettuerá una serie di controlli sui dati introdotti. Tali controlli verificheranno la bontá dei dati nei campi di introduzione. In caso vengano riscontrate irregolaritá QPaint visualizzerá un box di dialogo con le indicazioni del caso.

0.5.1.46 Graphics | Image Manager

Con questa voce di menú si richiede a QPaint di aprire il gestore immagini. Nel terminale é stato implementato un oggetto grafico, chiamato Image, con il quale é possibile visualizzare, su di una pagina, immagini monocromatiche. Le immagini visualizzate possono avere qualsiasi dimensione entro la grandezza del display in uso. Al fine di ridurre la quantità di memoria utilizzata dal terminale per mantenere i dati delle immagini, si é pensato di adottare un'architettura a libreria di immagini. Con questo si intende che, invece di memorizzare i dati dell'immagine direttamente nell'oggetto Image, essi verranno inseriti nella libreria e ad ogni immagine verrá assegnato un nome identificativo composto da una stringa ASCII di lunghezza massima 16 caratteri. Tale nome sará utilizzato dall'oggetto Image per definire quale immagine della libreria si vuole visualizzare. Se si pensa che normalmente un'immagine appare in piú pagine si capisce immediatamente l'enorme risparmio di memoria ottenuto con questo sistema. Inoltre durante la procedura di download verranno trasferite nel terminale solo le immagini utilizzate dagli oggetti Image. La libreria immagini del terminale viene creata per mezzo del gestore di immagini Image Manager. Con esso l'utente gestisce la libreria inserendo, rimuovendo e rinominando le immagini in formato BMP che verranno incorporate nel progetto. Il fatto di incorporare le immagini direttamente nel file del progetto permette di eliminare ogni collegamento con i file BMP originali, facilitando le operazioni di trasporto dello stesso su altri computer o media di archiviazione.

Nel caso in cui nel progetto non siano mai state inserite immagini comparirá la seguente finestra:

Figura 49 : finestra di dialogo Image Manager di un progetto senza immagini

Come si puó vedere in fig.49, nella finestra di dialogo Image Manager abbiamo : una casella di riepilogo in cui vengono visualizzati i nomi delle immagini presenti in libreria, il box “Preview” in cui viene visualizzata l'immagine selezionata nella casella di riepilogo comprensiva dei campi Width e Height per le dimensioni in pixel della stessa, piú i pulsanti “Add” per l'aggiunta di una nuova immagine, “Delete” per la rimozione dell'immagine selezionata e “Rename” per la modifica del nome dell'immagine selezionata. I pulsanti “Delete” e “Rename” sono abilitati solo quando esiste almeno un'immagine nella lista immagini di progetto.
La pressione del pulsante “Add” fará comparire la seguente finestra di dialogo:

Figura 50: finestra di dialogo Add Bitmap File

Le funzionalitá espletate dalla finestra di dialogo sono quelle standard normalmente fornite dallo stesso sistema operativo Windows®. A conferma dell'operazione con il tasto “Apri”, Image Manager analizzerá le caratteristiche del file bitmap BMP selezionato. Nel caso in cui venga rilevata una bitmap non monocromatica comparirá un box di messaggio con la scritta “The BMP can be only monochrome !”. Premendo il tasto “OK” l'intera procedura di aggiunta immagine verrá abortita. Nel caso in cui venga rilevata una bitmap di dimensioni non compatibili con il display in uso comparirá un box di messaggio con la scritta “Invalid BMP size !”. Premendo il tasto “OK” l'intera procedura di aggiunta immagine verrá abortita. Una volta verificato che le caratteristiche dell'immagine selezionata sono corrette, essa verrá aggiunta in fondo alla lista immagini di progetto e le verrá assegnato un nome di default. Nella dialog Add Bitmap File non é possibile selezionare piú di un'immagine da aggiungere alla volta. Questo comunque non é un problema poiché é sufficiente ripetere l'operazione con il pulsante “Add” quante volte si desidera.

Figura 51 : finestra di dialogo Image Manager di un progetto con tre immagini

Come si puó vedere nella fig.37, abbiamo un esempio in cui sono state inserite tre immagini nella lista immagini di progetto. Image Manager ha impostato per default il loro nome in: Picture1, Picture2 e Picture3. Per semplificare l'identificazione di una specifica immagine, Image Manager rende possibile modificarne il nome tramite il pulsante “Rename”.

La pressione del pulsante “Rename” fará comparire la seguente finestra di dialogo:

Figura 52: finestra di dialogo Insert New Name

Tramite la dialog Insert New Name é possibile introdurre un nuovo nome per l'immagine selezionata. Vi sono peró alcune regole da rispettare. Il nome deve avere una lunghezza compresa tra 1 e 16 caratteri ASCII. Le lettere minuscole sono considerate differenti da quelle maiuscole. Non vi possono essere due immagine con lo stesso nome. Image Manager si occuperá di controllare che quanto introdotto sia corretto, attivando un opportuno box di messaggio nel caso non si rispetti quanto appena descritto.

Figura 53: finestra di dialogo Image Manager di un progetto con tre immagini

Come si puó vedere nella fig.53, i nomi delle tre immagini “Picture1”, “Picture2” e “Picture3” sono stati modificati in “Valvola flusso”, “Motore DC” e “Trasformatore”. In questo modo diventerá piú semplice identificarli quando usati nell'oggetto Image.

Quando si esce da Image Manager tramite il pulsante “OK”, viene verificato se le modifiche apportate comporteranno il riallineamento di alcuni oggetti Image presenti nel progetto. In questo caso comparirá un box di messaggio con la scritta “The acceptance of the changes will involve the realignment of some objects image of the project ! Are you sure of to want to continue ?” e i bottoni “Yes”e “No”. Se si conferma l'operazione con “Yes”, gli oggetti Image verranno riallineati e tutte le impostazioni fatte con Image Manager confermate, mentre “No” terminerá la procedura di uscita dalla dialog.

0.5.1.47 Options | Communication

COM1, COM2, etc.^ Con questa voce di menú si richiede a QPaint di visualizzare la finestra di impostazione dei parametri di comunicazione seriale. Il QPaint utilizza la comunicazione seriale, durante la procedura di download, per trasferire il progetto al terminale utilizzando il ponte fornito dal QMove. Ulteriori informazioni inerenti i collegamenti e le configurazioni hardware sono disponibili nel manuale tecnico del terminale e del QMove. Tramite la finestra di dialogo Serial Port Settings é possibile effettuare tutte le impostazioni necessarie ad ottenere il collegamento seriale con il terminale.

Figura 54: finestra di dialogo Serial Port Settings

Come si puó vedere nella fig.54, la finestra di dialogo presenta due pagine di impostazione: Communication e Timeout. Con la prima si definiscono la porta di comunicazione seriale e la velocitá di trasferimento dei dati. Con seconda si definiscono i tempi di timeout per le varie fasi del download.

Figura 55 : finestra di dialogo Serial Port Settings

Come si puó vedere in fig.55, nella pagina Timeout sono presenti due gruppi di tempi timeout. Il gruppo Times1 é da utilizzarsi quando si effettua un collegamento diretto tra PC, QMove e terminale. Il gruppo Times2 é da utilizzarsi quando si effettua un collegamento remotato tra PC, modem con QModem, QMove e terminale. Nel secondo caso sono necessari tempi di timeout maggiori dovuti ai ritardi di trasferimento introdotti dalla comunicazione con modem. La possibilitá di modificare i tempi di timeout, permette all'utente di adattare il trasferimento dei dati alle proprie condizioni di utilizzo. Segue ora una breve descrizione dei parametri di timeout:

CPUAnswer timeout sulla risposta del terminale
Chartimeout fra carattere e carattere
Com Oktimeout sulla verifica di connessione seriale
Flushtimeout su invio richiesta al terminale
Downloadtimeout su conclusione procedura download al terminale
Pack Oktimeout ricezione pacchetto informazioni

0.5.1.48 Help | Technical Info

Con questa voce di menú si richiede a QPaint di visualizzare la finestra delle informazioni tecniche. In essa sono elencati tutti gli oggetti o le, librerie dinamiche e drivers utilizzati dal QPaint per il proprio funzionamento. Puó essere utilizzata, su richiesta della QEM srl, nell'eventualità di un supporto tecnico al prodotto.

Figura 56: finestra di dialogo Technical Info

Come si puó vedere in fig.56, nella dialog é presente il pulsante “Print” con il quale si potranno stampare le informazioni tecniche visualizzate. Prima di avviare la procedura di stampa assicurarsi che in Windows® vi sia installata almeno una stampante.

0.5.1.49 Help | About

Con questa voce di menú si richiede a QPaint di visualizzare la finestra di About. In essa sono presenti le informazioni inerenti il prodotto, la QEM srl e gli indirizzi internet disponibili all'utente. La casella info@qem.it puó essere utilizzata per richiedere informazioni generali e commerciali sui prodotti QEM. La casella soft@qem.it puó essere utilizzata per richiedere informazioni ed assistenza al supporto tecnico QEM.

Figura 57 : finestra di dialogo About QPaint

Tramite la barra di gestione della pagina é possibile:

  1. Scegliere la pagina da attivare specificandone il numero.
  2. Scegliere la pagina da attivare scegliendola dalla lista pagine di progetto.
  3. Modificare il nome associato alla pagina attiva.
Figura 58: barra di gestione della pagina

Come si puó vedere in fig.58, nella barra di gestione della pagina sono presenti un campo di introduzione numerico ed una casella combinata. Nel campo di introduzione viene visualizzato il numero della pagina attiva, mentre nella casella combinata compare il nome ad essa associato. Nel campo di introduzione é possibile specificare il numero della pagina che si desidera attivare. Se viene introdotto un valore inferiore a 1 o maggiore del numero complessivo delle pagine verrá attivata l'ultima pagina del progetto. Tramite la casella combinata é possibile indicare il nome della pagina che si vuole attivare scegliendola dalla lista dei nomi pagine di progetto. Con essa si puó inoltre modificare il nome associato alla pagina attiva.

N.B: Ulteriori informazioni riguardo la gestione delle pagine sono reperibili nella sezione dedicata all'evento Goto Page.

Quando si realizza un'interfaccia verso una macchina utensile vi sono alcune parametrizzazioni, come la velocitá massima di lavoro attrezzo o le impostazioni degli assi di movimento, il cui accesso deve essere consentito solo a determinati operatori (tecnico manutenzione, installatore, ecc…) in modo da evitare che un inserimento di dati errati possa portare ad alterazioni delle caratteristiche di funzionamento o influire sulla sicurezza stessa della macchina. Per la protezione dei dati critici il terminale rende possibile attivare una password che impedisca l'accesso a determinate pagine del progetto da parte di utenti non autorizzati. Tale password é composta da una stringa di lunghezza massima 8 caratteri compresi nel set alfanumerico 0 ÷ 9 e A ÷ Z. Ogni pagina del progetto ha la possibilitá di richiedere una propria password. Quando l'utente richiama una pagina protetta il terminale visualizza al suo posto una speciale pagina di richiesta della password. Se l'utente introduce la password corretta il terminale visualizza la pagina protetta, altrimenti resta nella pagina speciale di richiesta password. Per uscire dall'introduzione é sufficiente premere il tasto ESC, il che comporta il ritorno alla pagina precedente. Quando vi sono piú pagine collegate con la stessa password di protezione l'utente deve inserire la password solo per il primo accesso, poi puó muoversi tra le varie pagine protette senza altre introduzioni di password.

Tramite la barra di impostazione della password di pagina é possibile:

  1. Abilitare / disabilitare la password di pagina.
  2. Impostare la password della pagina.
Figura 59 : barra di impostazione della password di pagina

Come si puó vedere in fig.59, nella barra di impostazione della password di pagina sono presenti un pulsante ed un campo di introduzione. Il pulsante puó assumere due stati stabili. Lo stato ON abilita l'introduzione e la modifica della password di pagina. Quando la password non contiene alcun carattere il terminale non esegue nessuna richiesta di introduzione password. Lo stato OFF é utilizzato durante lo sviluppo del progetto per agevolare il debug dello stesso. Infatti, in questo stato il valore della password rimane impostato ma il terminale non ne richiede l'introduzione, agevolando quindi le operazioni di debug. Per default il pulsante é in stato di OFF. Nella sezione esempi é presentate una dimostrazione di come utilizzare la password di pagina.

Tramite la barra delle funzioni di progetto é possibile:

  1. Salvare il progetto aperto.
  2. Richiamare la finestra di dialogo “Global Events Editor” per la getione degli eventi/azioni globali.
  3. Richiamare la finestra di dialogo “Page Events Editor” per la gestione degli eventi/azioni di pagina.
  4. Avviare la procedura di download del progetto nel terminale.
Figura 60 : barra delle funzioni di progetto

Questo pulsante é la scorciatoia alla voce di menú “File | File Save” o “File | File Save As…”.
Questo pulsante é la scorciatoia alla voce di menú “Project | Global Events Editor”.
Questo pulsante é la scorciatoia alla voce di menú “Project | Page Events Editor”.
Questo pulsante é la scorciatoia alla voce di menú “Transfer | Download”.

Tramite la barra delle funzioni di disegno é possibile:

  1. Aumentare il fattore di zoom dell'area di disegno.
  2. Diminuire il fattore di zoom dell'area di disegno.
  3. Portare ad un livello superiore di vista l'oggetto selezionato nell'area di disegno.
  4. Portare ad un livello inferiore di vista l'oggetto selezionato nell'area di disegno.
  5. Cambiare il colore di sfondo utilizzato nell'area di disegno.
Figura 61: barra delle funzioni di disegno

Questo pulsante é la scorciatoia alla voce di menú “View | Zoom In”.
Questo pulsante é la scorciatoia alla voce di menú “View | Zoom Out”.
Questo pulsante é la scorciatoia alla voce di menú “Edit | Bring Up Object”.
Questo pulsante é la scorciatoia alla voce di menú “Edit | Bring Down Object”.
Questo pulsante é la scorciatoia alla voce di menú “View | Background Mode”.

La barra degli strumenti di disegno é utilizzata dall'utente per creare la parte grafica delle pagine di un progetto. Con essa é possibile depositare nell'area di disegno, rappresentante il contenuto della pagina attiva, oggetti quali campi di visualizzazione/introduzione dati alfanumerici, messaggi in lingua, rettangoli ed immagini. L'inserimento di un nuovo oggetto nella pagina attiva é un'operazione molto semplice. Per prima cosa bisogna selezionare sulla barra degli strumenti di disegno, facendo click con il tasto sinistro del mouse, il tipo di oggetto che si intende aggiungere. Poi basta fare di nuovo click con il mouse sull'area di disegno nella zona dove si intende depositare il nuovo oggetto. A questo punto alcuni oggetti visualizzano automaticamente la pagina delle loro proprietá, mentre altri come i rettangoli non richiedono alcun dato aggiuntivo. Appena aggiunto il nuovo oggetto sulla pagina, il pulsante precedentemente attivo sulla barra degli strumenti di disegno ritorna in posizione di disattivazione e viene selezionato il Pointer Object. Questo non é propriamente un oggetto di disegno bensí un strumento di manipolazione degli oggetti giá presenti sulla pagina. Con esso é infatti possibile spostare, ridimensionare, selezionare e deselezionare, etc, un oggetto sull'area di disegno. Per depositare piú di un oggetto dello stesso tipo sulla pagina, senza dover riselezionare ogni volta il corrispondente pulsante, é sufficiente mantenere premuto il tasto SHIFT sinistro della tastiera. In questo modo al termine dell'operazione di inserimento oggetto nella pagina non verrá attivato il Pointer Object ma rimmará attivo il pulsante precedentemente selezionato.
In una pagina vi sono due tipi di oggetti depositabili: gli oggetti statici e gli oggetti dinamici. Per oggetti statici si intendono tutti quegli oggetti che vengono disegnati sul display solamente una volta al cambio della pagina attiva. Per oggetti dinamici si intendono tutti quegli oggetti che sono in continuo aggiornamento sul display. Oltre alla modalitá di aggiornamento tra gli oggetti statici e dinamici esiste un'altra importante differenza. Ogni oggetto occupa per la propria visualizzazione una area grafica ben definita. Quando due oggetti statici sovrappongono le loro aree di ingombro, anche se parzialmente, avviene che uno é sempre visualizzato sopra all'altro. Questo é dovuto al fatto che gli oggetti statici posseggono ciascuno una proprietá detta livello che identifica l'ordine di disegno dello stesso. Un oggetto con livello 3 viene sempre visualizzato sotto ad un oggetto di livello 4. Gli oggetti dinamici invece sono sempre prioritari rispetto a quelli statici percui verranno sempre visualizzati ad un livello superiore. Nel QPaint sono presenti due voci di menú che permettono di modificare il livello di disegno di un oggetto statico e piú precisamente “Bring Up Object” e “Bring Down Object”. Inoltre quando sull'area di disegno é selezionato un oggetto statico, sará presente nella Status Bar l'indicazione del livello di disegno ad esso associato.
La barra degli strumenti di disegno é composta dai seguenti pulsanti:
Pulsante Pointer Object.
Pulsante Value Object.
Pulsante ValString Object.
Pulsante String Object.
Pulsante Image Object.
Pulsante Box Object.
Pulsante ValImage Object.

0.5.6.1 Pulsante | Pointer Object

Questo é l'unico pulsante delle barra strumenti di disegno che non viene utilizzato per inserire un nuovo oggetto nella pagina attiva ma bensí é utilizzato per la selezione di un oggetto giá presente nella pagina. L'oggetto oltre che essere selezionato puó essere spostato, ridimensionato, modificato nelle proprietá e cosí via.

0.5.6.2 Pulsante | Value Object

Con questo pulsante si richiede a QPaint di depositare sulla pagina attiva un oggetto dinamico di tipo Value. Tramite l'oggetto Value é passibile visualizzare e/o introdurre un valore numerico o alfanumerico in una variabile di riferimento. Le proprietá impostabili sono le seguenti:
N.B: VR significa “variabile di riferimento”.

ProprietáDescrizioneLimiti e condizioni
Dec.Point (Decimal Point)VR per la posizione del punto decimaleSe non definita disabilita la funzionalitá di punto decimale.
VariableVR per la variabile CPU QMove o terminale da visualizzare / introdurreSe viene selezionata una variabile del gruppo DEVPAR a sola lettura la proprietá Enable Modify Mode dovrá essere OFF.
Max VariableVR per il controllo del limite superiore in introduzioneSe non definita non viene effettuato alcun controllo sul limite superiore.
Min VariableVR per il controllo del limite inferiore di introduzioneSe non definita non viene effettuato alcun controllo sul limite inferiore.
Enable Lead Zero Blank ModeFlag che se ON sostituisce tutti i caratteri spazio non rappresentativi presenti in testa alla visualizzazione con il carattere '0'
Enable Sign ModeFlag che se ON abilita l'introduzione del segno
Enable Alpha ModeFlag che se ON abilita l'oggetto a trattare dati in modalitá alfanumericaSe il flag é ON vengono disabilitate le seguenti proprietá:
- Max Variable
- Min Variable
- Scale Type
- Scale A/B/C
- Enable Sign Mode
- Enable Lead Zero Blank Mode
--La proprietá Variable potrá selezionare solamente simboli del gruppo ARRSYS e ARRGBL di tipo BYTE.
Enable Modify ModeFlag che se ON abilita la modifica del valore indirizzato dalla proprietá VariableSe il flag é ON la proprietá Enable Sign Mode viene abilitata.
LengthDefinisce il numero di caratteri che compone l'oggetto comprendendo i caratteri utilizzati dal segno e dal punto decimaleRange = 1 ÷ numero massimo caratteri visualizzabili su una linea. Questo valore dipende principalmente dal tipo di font selezionato e dal valore di Spacing.
Symbol listDa la possibilità di accedere a tutte le variabili che sono state dichiarate nel file di configurazione riconosciute dal pannello tramite il file con estensione .SYM
Scaling ModeDefinisce il tipo di scaling utilizzato dall'oggettoLa proprietá Scaling puo assumere i seguenti valori:
- None: In questo caso il valore di Variable non é soggetto a nessuna correzione di scaling. I campi di Scale A/B/C sottostanti sono automaticamente disabilitati.
- Global: In questo caso il valore di Variable é soggetto alla correzione con lo scaling globale definito nella voce di menú “Project / Project Setup”. I campi sottostanti di Scale A/B/C sono automaticamente disabilitati ma visualizzano i valori di scaling globale.
- Local: In questo caso il valore di Variable é soggetto alla correzione con lo scaling definito nelle proprietá di Scale A/B/C sottostanti.
Scale AValore di scale ALa correzione di scaling viene ottenuta con la seguente formula:
Y = (Scale A / Scale B) · X + Scale C
Range = -231 ÷ 231 - 1
Scale BValore di scale BLa correzione di scaling viene ottenuta con la seguente formula:
Y = (Scale A / Scale B) · X + Scale C
Range = -231 ÷ 231 - 1
Scale CValore di scale CLa correzione di scaling viene ottenuta con la seguente formula:
Y = (Scale A / Scale B) · X + Scale C
Range = -231 ÷ 231 - 1
LengthDefinisce il numero di caratteri che compone l'oggetto comprendendo i caratteri utilizzati dal segno e dal punto decimaleRange = 1 ÷ numero massimo caratteri visualizzabili su una linea. Questo valore dipende principalmente dal tipo di font selezionato e dal valore di Spacing.
LeftAttributo posizione lato sinistro oggettoRange = 0 ÷ 239 pixel
TopAttributo posizione lato superiore oggettoRange = 0 ÷ 127 pixel
Font NameNome del font utente o terminale in uso
SpacingSpacing di visualizzazione del fontIl range di valori dipende dal font in uso
Reverse ModeFlag che se ON inverte il campo di visualizzazione dell'oggetto
BlinkFlag che se ON abilita il lampeggio del campo di visualizzazione dell'oggetto

0.5.6.3 Pulsante | ValString Object

Con questo pulsante si richiede a QPaint di depositare sulla pagina attiva un oggetto dinamico di tipo ValString. Tramite l'oggetto ValString é possibile visualizzare un array di messaggi in lingua indicizzati da una variabile di riferimento. Le proprietá impostabili sono le seguenti:

ProprietáDescrizioneLimiti e condizioni
First MessageDefinisce l'indice associato al primo messaggio nell'array messaggi in linguaRange = -231 ÷ 231 - MaxMessages
Max MessagesDefinisce il numero di messaggi presenti nell'array messaggi in linguaRange = 1 ÷ 999
Active LanguageDefinisce la lingua messaggi in uso nella griglia di introduzione messaggi
Active MessageDefinisce l'indice del messaggio in uso nella griglia introduzione messaggiRange = 1 ÷ numero massimo caratteri visualizzabili su una linea. Questo valore dipende principalmente dal tipo di font selezionato e dal valore di Spacing.
LengthDefinisce il numero di caratteri che compone l'oggetto comprendendo i caratteri utilizzati dal segno e dal punto decimaleRange = 1 ÷ numero massimo caratteri visualizzabili su una linea. Questo valore dipende principalmente dal tipo di font selezionato e dal valore di Spacing.
VariableVR per la variabile CPU QMove o terminale da visualizzare / introdurreRange = 0 ÷ 239 pixel
Enable Modify ModeFlag che se ON abilita la modifica del valore indirizzato dalla proprietá VariableRange = 0 ÷ 127 pixel
LeftAttributo posizione lato sinistro oggetto
TopAttributo posizione lato superiore oggettoIl range di valori dipende dal font in uso
Font NameNome del font utente o terminale in uso
SpacingSpacing di visualizzazione del fontIl range di valori dipende dal font in uso
Reverse ModeFlag che se ON inverte il campo di visualizzazione dell'oggetto
BlinkFlag che se ON abilita il lampeggio del campo di visualizzazione dell'oggetto

Nella finestra di dialogo “ValString Object Property Editor” sono presenti i pulsanti “Message” e “Language” con i quali é possibile scegliere due modalitá di introduzione dei messaggi. Facendo click sul primo si abilita l'introduzione con prioritá sui messaggi. Ció sta a significare che nella griglia di introduzione messaggi vi sono tutti i messaggi disponibili per la lingua selezionata nella casella di riepilogo “Active Language”. In questo modo si hanno sotto controllo tutti i messaggi disponibili per la lingua attiva. Quando si crea un oggetto nuovo questa é la modalitá di introduzione impostata di default. Premendo il pulsante “Language” si abilitá l'introduzione messaggi in modalitá lingua percui nella griglia verrá visualizzato un messaggio alla volta ma in tutte le lingue disponibili. In cooperazione con i pulsanti appena citati sulla dialog compaiono alternativamente i campi “Active Language” e “Active Message”. Nella dialog é presente anche il pulsante “Unlock” o “Lock”. Questo pulsante ha il compito di sbloccare il controllo della lunghezza messaggio in introduzione e porla alla massima dimensione visualizzabile. In questo modo é possibile introdurre dei messaggi senza preoccuparsi anticipatamente della lunghezza in caratteri che occuperanno. Inoltre nella dialog è presente il pulsante di “Replace in all messages”, il quale ha il compito di trascrivere il messaggio in introduzione su tutte le lingue disponibili. La traduzione verrà fatta successivamente dal programmatore.

0.5.6.4 Pulsante | String Object

Con questo pulsante si richiede a QPaint di depositare sulla pagina attiva un oggetto statico di tipo String. Tramite l'oggetto String é possibile visualizzare un messaggio in lingua. Le proprietá impostabili sono le seguenti:

ProprietáDescrizioneLimiti e condizioni
LengthDefinisce il numero di caratteri che compone l'oggettoRange = 1 ÷ numero massimo caratteri visualizzabili su una linea. Questo valore dipende principalmente dal tipo di font selezionato e dal valore di Spacing.
LeftAttributo posizione lato sinistro oggettoRange = 0 ÷ 239 pixel
TopAttributo posizione lato superiore oggettoRange = 0 ÷ 127 pixel
Font NameNome del font utente o terminale in uso
SpacingSpacing di visualizzazione del fontIl range di valori dipende dal font in uso
Transparent ModeFlag che se ON abilita la trasparenza dello sfondo di visualizzazione dell'oggetto
Reverse ModeFlag che se ON inverte il campo di visualizzazione dell'oggetto

Nella finestra di dialogo “String Object Property Editor” é presente anche il pulsante “Unlock” o “Lock”. Questo pulsante ha il compito di sbloccare il controllo della lunghezza messaggio in introduzione e porla alla massima dimensione visualizzabile. In questo modo é possibile introdurre dei messaggi senza preoccuparsi anticipatamente della lunghezza in caratteri che occuperanno. Inoltre nella dialog è presente il pulsante di “Replace in all messages”, il quale ha il compito di trascrivere la stringa in introduzione su tutte le lingue disponibili. La traduzione verrà fatta successivamente dal programmatore.

0.5.6.5 Pulsante | Image Object

Con questo pulsante si richiede a QPaint di depositare sulla pagina attiva un oggetto statico di tipo Image. Tramite l'oggetto Image é possibile visualizzare una immagine bitmap monocromatica. Le proprietá impostabili sono le seguenti:

ProprietáDescrizioneLimiti e condizioni
Image Name

voce di menú “Graphics / Image Manager”|Se il nome dell'immagine specifica non é presente nella libreria immagini verrá visualizzata un'immagine di default.|

LeftAttributo posizione lato sinistro oggettoRange = 0 ÷ 239 - Width immagine.
TopAttributo posizione lato superiore oggettoRange = 0 ÷ 239 - Width immagine.

0.5.6.6 Pulsante | Box Object

Con questo pulsante si richiede a QPaint di depositare sulla pagina attiva un oggetto statico di tipo Box. Tramite l'oggetto Box é possibilie visualizzare una serie di rettangoli. Le proprietá impostabili sono le seguenti:

ProprietáDescrizioneLimiti e condizioni
LeftAttributo posizione lato sinistro oggettoRange = 0 ÷ 239 - Width
TopAttributo posizione lato superiore oggettoRange = 0 ÷ 127 - Height
WidthAttributo larghezza oggettoRange = 5 ÷ 240
HeightAttributo altezza oggettoRange = 5 ÷ 128
Back ColorAttributo colore sfondo oggetto
ColorAttributo colore disegno bordo oggetto
StyleAttributo modalitá disegno bordo oggetto

0.5.6.7 Pulsante | ValImage Object

Tramite ValImage è possibile realizzare animazioni in modo piú semplice che in passato. L'oggetto ValImage utilizza l'archivio di immagini disponibili nel progetto e gestito tramite il menú Graphics→Image Manager per visualizzare un set di immagini associate ad un range di valori di una variabile presente in QMove o nel terminale stesso.

Differentemente dalla tecnica dei font utente con immagini + oggetto ValString, ValImage è piú veloce da implementare, utilizza minor memoria terminale ed è piú semplice da gestire. ValImage è un oggetto di tipo dinamico (come Value e ValString) percui verrá visualizzato sempre sopra ad oggetti statici quali Image, Box, e String. I parametri di un oggetto ValImage sono I seguenti:

  • Left
  • Top
  • First Image
  • Max Images
  • Blink mode
  • Reverse mode
  • Modify mode
  • Variable
ProprietáDescrizioneLimiti e condizioni
LeftAttributo posizione lato sinistro oggettoRange = 0 ÷ 239 - Width
TopAttributo posizione lato superiore oggettoRange = 0 ÷ 127 - Height
First ImageValore della variabile di riferimento associato alla prima immagineRange = -32767÷ 32767
Max ImageNumero massimo di immagini visualizzabiliRange = 1÷ 256
Blink ModeStato di blink dell'immagine
Reverse ModeStato di reverse dell'immagine
Modify ModeStato di Modify dell'immagine
VariabileVariabile di riferimento
Image NumberNumero dell'immagine collegata al medesimo valore della varibile di riferimentoRange = 1÷ Max Image
Image NameNome dell'immagine inserita diverso per ogni immagine
WidthAttributo larghezza oggettoRange = 5 ÷ 240
HeightAttributo altezza oggettoRange = 5 ÷ 128

Nella finestra di dialogo “Image Object Property Editor” é presente anche il pulsante “UP” o “DOWN” che permettono di scorrere velocemente le varie assegnazioni valore variabile di riferimento/nome immagine da visualizzare. A questo punto è possibile notare che si possono introdurre immagini di qualunche dimensione.
Viene lasciata libera possibilità di impostare immagini di qualunque dimensione, ma durante la fase di check del progetto (manuale o durante download) viene verificato se in un oggetto ValImage vi sono riferimenti ad immagini di dimensioni diverse generando quindi un opportuno messaggio di errore. Vengono descritte ora alcune regole inerenti l'oggetto ValImage:

  • L'immagine associata con il valore presente in “First Image” è l'immagine di riferimento per le successive percui nel controllo delle dimensioni viene utilizzata questa immagine in confronto con le altre.
  • Se l'immagine associata con il valore presente in “First Image” non è definita, apparirá l'immagine di default “Not Def.Image” . I restanti valori potranno anche avere un nome definito ma non verrá visualizzato nulla. Nel download non verrá segnalato alcun errore.
  • Se per un determinato valore della variabile di riferimento non si vuole avere un'immagine è sufficiente impostare il corrispettivo nome a stringa vuota o con un nome di un'immagine inesistente. Il terminale a questo punto riempirá l'area di competenza dell'oggetto ValImage con il colore dipendente dalla variabile Reverse e Blink.
  • Quando si apre l'Image Manager e si apporta qualche modifica viene verificato che le nuove impostazioni non facciano trasbordare i vari oggetti ValImage dall'area valida di disegno . Vi sará un opportuno messaggio di segnalazione che permetterá di abbandonare il tutto o riallineare gli oggetti.

N.B: le immagini memorizzate nell'Image Manager non utilizzate in alcun oggetto di disegno non verranno mai trasferite al terminale e perció non occupano memoria.

Il terminale é stato progettato per lavorare con due gruppi di font: i font di sistema e i font utente. I font di sistema risiedono nella ROM del terminale e sono sempre disponibili. I font utente risiedono nella directory “\Fonts” del QPaint sotto forma di file QTF ed FNT e vengono trasferiti nel terminale durante la procedura di download. Anche i font di sistema hanno i loro file QTF e FNT nella directory “\Fonts” del QPaint ma questi vengono utilizzati solo per le operazioni interne di visualizzazione ed introduzione dati. L'utente puó facilmente creare nuovi tipi di font partendo da file Bitmap o derivandone di nuovi direttamente dai font TTF di Windows®. La possibilitá di creare un font utente prelevando le informazioni direttamente da un file Bitmap espande notevolmente le possibilitá grafiche del terminale stesso. Infatti é possibile realizzare delle animazioni realizzando un font in cui i caratteri sono in realtá le varie parti dell'animazione che si vuole visualizzare. Ulteriori informazioni riguardo le animazioni effettuate tramite font utente sono disponibili negli esempi allegati.

I font utente disponibili sono presenti sotto forma di file QTF e FNT nella directory “\Fonts” del QPaint. Quando si trasporta un progetto che utilizza font utente in un altro PC é necessario copiare nella directory “\Fonts” di tale PC i file QTF ed FNT dei font utilizzati dal progetto. Una volta copiato il progetto e i file QTF e FNT dei font utente richiesti é necessario uscire da QPaint e riaprirlo nuovamente.

La rimozione di un font utente é una operazione che deve essere fatta solo in caso di reale necessitá. Le operazioni da eseguire sono le seguenti:

  1. Chiudere tutte le applicazioni avviate.
  2. Con il Gestore risorse eliminare i file QTF e FNT del font da rimuovere.
  3. Uscire da Windows®.
  4. Riavviare il computer.

Tramite le variabili di riferimento QPaint permette all'utente di accedere ai vari gruppi di variabili disponibili nella CPU del QMove e nel terminale. Una variabile di riferimento é composta da tre campi introduzione : il campo Base, il campo First Index ed il campo Second Index. Il campo Base ha lo scopo di definire il nome stesso della variabile a cui si vuole accedere. Il campo First Index ha lo scopo di definire il primo indice mentre Second Index definisce il secondo. Avremo quindi che:

Data TypesBaseFirst IndexSecond Index
SYSTEM
GLOBAL
ARRSYS
ARRGBL
TIMER
STATIC
INDEX
variabile CPU QMove
variabile CPU QMove
array CPU QMove
array CPU QMove
timer CPU QMove
datagroup CPU QMove
datagroup CPU QMove
parametri device CPU QMove
input/output CPU QMove
input/output CPU QMove
variabile interne
variabile terminale
valore costante
indice elemento array
indice elemento array
indice programma
indice programma
indice passo di programma

I campi introduzione per variabili di riferimento sono presenti in molti oggetti come Value e ValString, eventi ed azioni. I valori introducibili per tali oggetti sono regolati da apposite tabelle specificate in dettaglio nell'appendice A di questo documento. Per semplificare le operazioni di introduzione dei campi Base, First Index e Second Index, QPaint mette a disposizione un'apposita dialog di selezione dei simboli richiamabile tramite la pressione del tasto F5 quando l'introduzione é attiva su uno dei tre campi di una variabile di riferimento.

Figura 62 : campi introduzione variabile di riferiemento

Le differenze peculiari rispetto al QPaint2.0 sono principalmente:

  • L'inserimento di una nuova velocità di trasmissione del programma e di connessione con il sistema QMove con l'aggiunta di un nuovo gap a 57600KBaud/sec ,che non era presente nella versione precedente. (riferimento pagina 52 Fig 54 del presente manuale) e la gestione dell'oggetto.
  • È stato inserito un nuovo oggetto di disegno chiamato ValImage. Tramite ValImage è possibile realizzare animazioni in modo piú semplice che in passato. L'oggetto ValImage utilizza l'archivio di immagini disponibili nel progetto e gestito tramite il menú Graphics→Image Manager per visualizzare un set di immagini associate ad un range di valori di una variabile presente in QMove o nel terminale stesso.
    Differentemente dalla precedente tecnica dei font utente con immagini + oggetto ValString, ValImage è piú veloce da implementare, utilizza minor memoria terminale ed è

piú semplice da gestire. ValImage è un oggetto di tipo dinamico (come Value e ValString) percui verrá visualizzato sempre sopra ad oggetti statici quali Image, Box, e String.

  • Sono stati aggiunti altri nuovi 20 tasti leds funzione con le rispettive azioni ed eventi
  • È stata introdotta la gestione dell'impostazione dimensione display in uso. Da ora è possibile definire che tipo di display vogliamo usare. Quando si crea un nuovo progetto con il menú “Project→New Project” appare una finestra di dialogo che permette di scegliere tra due formati standard (240×128 o 128×64) o di impostarne uno custom. Il valore introdotto viene salvato nel registry affinché al prossimo New riappaia la prece

dente selezione. Questo avviene anche con le operazioni di Copia/Incolla oggetto(i)/pagina ed importa/esporta pagina. Per i progetti vecchi verranno sempre prese come default le dimensioni di 240×128.

  • Modificato il default value di timeout COM OK da 10ms a 400 ms. Se vi è già una precedente installazione di QPaint30 bisognerà modificare manualmente il valore una volta installato il nuovo QPaint30 build 006.
  • Rimosse le azioni ObjBlink, ObjNoBlink, ObjReverse, ObjNoReverse dagli eventi globali.Ora le azioni ObjBlink, ObjNoBlink, ObjReverse, ObjNoReverse sono abilitate su tutti gli oggetti dinamici (Value & ValString & ValImage) indipendentemente dal fatto che abbia no lo stato di Modify ON o OFF. In QPaint 2.0 era necessario avere lo stato di Modify ad ON.

Per semplificare l'operazioni di identificazione della natura di un progetto è stata modificata l'estensione da QTP a QT3. Inoltre il formato del file di progetto è stato modificato percuí non sará possibile da QPaint 2.x o QPaint 1.x caricare un progetto creato con il QPaint 3.0. Sará invece possibile caricare qualunque progetto (QPaint 1.x, QPaint 2.x) nel QPaint 3.0 (compatibilitá verso l'alto). Un apposito messaggio evidenzierá l'identificazione di una versione precedente.

In queste tabelle sono riportate le regole da applicare per la costruzione delle variabili di riferimento. Ad ogni tabella é associato un numero che dovrá essere utilizzato per riferirsi all'oggetto interessato.

Oggetto Value
Dec.Point tabella 4
Variable con Enable Alpha Mode ON = tabella 3
con Enable Alpha Mode OFF = tabella 2
Max Variable tabella 5
Min Variable tabella 5
Oggetto ValString
Variabletabella 1
Evento OnChangeVar tabella 2
Evento OnVar tabella 1
Azione GotoPage tabella 4
Azione SetVariable
Source
Destination

tabella 6
tabella 7
Data Types1FBWLS2FBWLS3FBWLS4FBWLS5FBWLS6FBWLS7FBWLS8FBWLS
SYSTEM XXXX XXXXX XXXX XXXXXXXXXXXXXXXXXXX
GLOBAL XXXX XXXXX XXXX XXXXXXXXXXXXXXXXXXX
ARRSYS XXX XXXX X XXX XXXX XXXX XXXX
ARRGBL XXX XXXX X XXX XXXX XXXX XXXX
TIMER
STATIC XXXX XXXXX XXXX XXXXXXXXXXXXXXX
INDEX XXXX XXXXX XXXX XXXXXXXXXXXXXXX
DEVPAR XXXX XXXXX XXXX XXXXXXXXXXXXXXXXXXX
IO XXXX XXXX XXXX XXXX XXXX XXXX
INTERNALXXXX XXXXX XXXX XXXXXXXXX XXXX XXXX
TERMINALXXXX XXXXX XXXXXXXXXX
CONST X XX XX X

Per semplificare l'utilizzo di QPaint é stato introdotta un'interfaccia standard con la quale il programma comunica all'utente l'ingresso in particolari stati funzionali. Gli stati notificati si dividono in 5 gruppi:

  1. Informazioni Tramite questo tipo di stato il QPaint comunica all'utente informazioni riguardanti l'operazione in esecuzione.
  2. Richiesta dati Tramite questo tipo di stato il QPaint richiede all'utente informazioni riguardanti l'operazione in esecuzione.
  3. Pericolo Tramite questo tipo di stato il QPaint indica all'utente che l'operazione in esecuzione potrebbe portare a risultati non desiderati.
  4. Errore Tramite questo tipo di stato il QPaint indica all'utente che é stato riscontrato un errore nell'operazione in esecuzione.
  5. Errore fatale Tramite questo tipo di stato il QPaint indica all'utente che é stato riscontrato un grave errore funzionale il quale non permette un corretto funzionamento del programma e ne precede, quindi, la conclusione forzata.

Viene ora descritta l'interfaccia standard dei messaggi fornita da QPaint:

Figura 63 : interfaccia standard messaggi
Tipo messaggio
Codice messaggio
Descrizione messaggio
Azione intrapresa

Come si puó vedere nella fig.63, l'interfaccia standard dei messaggi altro non é che un box di dialogo di Windows® opportunatamente organizzato. Vi sono 4 campi di testo che servono per la descrizione delle varie informazioni, piú una serie di bottoni per le operazioni che l'utente puó effettuare. Vediamo ora in dettaglio il significato di quanto presente:

Tipo messaggioDescrive il tipo di stato in cui é entrato QPaint. Puó valere:
!!! INFORMATION !!! per un stato informazione.
!!! QUESTION !!! per un stato di richiesta dati.
!!! WARNING !!! per un stato di pericolo.
!!! ERROR !!! per un stato d'errore.
!!! FATAL ERROR !!! per un stato d'errore fatale.
Codice messaggioContiene il numero identificativo del messaggio intervenuto.
Tramite questo numero é possibile accedere alla documentazione approfondita dello stato presente in questa appendice.
Descrizione messaggioDescrive in modo sintetico lo stato intervenuto.
Azione intrapresaViene descritta l'azione intrapresa di risposta allo stato in cui si trova QPaint.
Puó contenere anche una estensione alla descrizione messaggio o una richiesta specifica all'utente.
Questo campo non é disponibile in tutti gli stati.
Operazioni possibiliSono disponibili uno o piú bottoni per le scelte dell'utente.

Nella sezione a seguire sono riportati e dettagliatamente descritti tutti i messaggi visualizzati da QPaint tramite il box di dialogo.

Codice messaggio10000
Tipo messaggioQUESTION
DescrizioneDo you really want rename current page?
Azione
Si entra in questo stato quando l'utente introduce un nuovo nome per la pagina attiva.
Codice messaggio10001
Tipo messaggioWARNING
DescrizioneLabel <Name> already used in another page !
AzioneIntroduce a new name
Si entra in questo stato quando l'utente introduce un nuovo nome per la pagina attiva e questo risulta essere già stato utilizzato da un'altra pagina. Si deve nominare in modo diverso la pagina.
Codice messaggio10002
Tipo messaggioQUESTION
DescrizionePage will be lost !
AzioneAre you sure of to want to continue?
Si entra in questo stato quando l'utente esegue la procedura per la rimozione della pagina attiva. Viene richiesta una conferma aggiuntiva.
Codice messaggio10003
Tipo messaggioFATAL ERROR
DescrizioneUnrecoverable internal error !
AzioneProgram will be terminate
Si entra in questo stato quando internamente il programma esegue un operazione non valida. Il programma Qpaint viene chiuso. Tutte le modifiche apportate al progetto successive all'ultimo salvataggio verranno perse.
Codice messaggio10004
Tipo messaggioERROR
DescrizioneError in file creation !
Azione
Si entra in questo stato quando QPaint non riesce a salvare il file di progetto. Nella maggior parte dei casi, questo errore, é dovuto al tentativo di scrivere un file protetto in scrittura o dall'accesso ad un disco non disponibile o in modalitá a sola lettura.
Codice messaggio10005
Tipo messaggioERROR
DescrizioneError in opening file !
Azione
Si entra in questo stato quando QPaint non riesce a leggere il file di progetto. Nella maggior parte dei casi, questo errore, é dovuto al tentativo di leggere un progetto inesistente o dall'accesso ad un disco non disponibile.
Codice messaggio10006
Tipo messaggioINFORMATION
DescrizioneInvalid project file !
AzioneProject will not be loaded !
Si entra in questo stato quando QPaint rileva che il file di progetto in lettura non é valido.
Codice messaggio10007
Tipo messaggioINFORMATION
DescrizioneProject file corrupted !
AzioneProject will not be loaded !
Si entra in questo stato quando QPaint tenta di caricare un progetto che non é stato precedentemente salvato correttamente o inopportunamente modificato manualmente.
Codice messaggio10008
Tipo messaggioINFORMATION
DescrizioneProject file doesn't match with Qpaint version !
AzioneProject will not be loaded !
Si entra in questo stato quando QPaint rileva che la versione del file di progetto in apertura non é compatibile. Nella maggior parte dei casi, questo errore è dovuto al tentativo di apertura di un progetto realizzato con una versione di QPaint successiva a quella utilizzata per l'apertura.
Codice messaggio10009
Tipo messaggioFATAL ERROR
DescrizioneError in sistem Font loading !
AzioneTry to reinstall QPaint ! Program will be termate !
Si entra in questo stato quanto QPaint, durante la procedura di avvio, rileva la mancanza dei file font terminale nella directory Fonts. In questo caso si consiglia di reinstallare QPaint nella stessa directory in cui era stato precedentemente installato.
Codice messaggio10013
Tipo messaggioQUESTION
DescrizioneNew setting could truncate exceeding text for some languages !
AzioneDo you confirm this operation ?
Si entra in questo stato quando QPaint rileva la necessitá di troncare il testo in eccesso di alcuni messaggi in lingua. Tale condizione si verifica durante la modifica della lunghezza testo o delle proprietá font degli oggetti String e ValString.
Codice messaggio10014
Tipo messaggioQUESTION
DescrizioneNew setting could change Left and Top coordinate of the object!
AzioneDo you confirm this operation ?
Si entra in questo stato quando QPaint rileva la necessitá di modificare le proprietá Left e Top dell'oggetto attivo affinché rimanga entro la dimensione disponibile nell'area di disegno.
Codice messaggio10019
Tipo messaggioWARNING
DescrizioneInvalid font name !
Value empty or present invalid chars ' < > : ” / \'
AzioneIntroduce a valid name !
Si entra in questo stato quando QPaint rileva che il nome del font utente appena introdotto é vuoto o presenta uno o piú caratteri non validi.
Codice messaggio10020
Tipo messaggioWARNING
DescrizioneFont name already exist in Windows fonts !
AzioneIntroduce a new name !
Si entra in questo stato quando QPaint rileva che il nome del font utente appena introdotto é giá utilizzato da un font di Windows®.
Codice messaggio10021
Tipo messaggioWARNING
DescrizioneFont name already used !
AzioneIntroduce a new name !
Si entra in questo stato quando QPaint rileva che il nome del font utente appena introdotto é giá presente nella lista dei nomi font utente.
Codice messaggio10022
Tipo messaggioFATAL ERROR
DescrizioneDinamic cast error !
AzioneProgram will be terminate !
Si entra in questo stato quando internamente il programma esegue un operazione non valida. Il programma Qpaint viene chiuso. Tutte le modifiche apportate al progetto successive all'ultimo salvataggio verranno perse.
Codice messaggio10023
Tipo messaggioERROR
DescrizioneInvalid BMP file !
AzioneImage will not be added !
Si entra in questo stato quando QPaint rileva che il file grafico in lettura non é di tipo bitmap BMP.
Codice messaggio10024
Tipo messaggioERROR
DescrizioneInvalid BMP size !
AzioneImage will not be added !
Si entra in questo stato quando QPaint rileva che le dimensioni in altezza e/o larghezza del file grafico in lettura superano le misure dell'area di disegno. La larghezza e l'altezza massima sono fissate rispettivamente a 240 x 128 pixel.
Codice messaggio10025
Tipo messaggioERROR
DescrizioneThe BMP can be only monochrome !
AzioneImage will not be added !
Si entra in questo stato quando QPaint rileva che il file grafico in lettura non é di tipo monocromatico.
Codice messaggio10026
Tipo messaggioWARNING
DescrizioneInvalid empty name !
AzioneIntroduce a valid name !
Si entra in questo stato quando QPaint rileva che il nome dell'immagine appena introdotto é vuoto.
Codice messaggio10027
Tipo messaggioWARNING
DescrizioneLabel <name> already used in another image !
AzioneIntroduce a new name !
Si entra in questo stato quando QPaint rileva che il nome dell'immagine appena introdotto é giá presente nella lista dei nomi immagine.
Codice messaggio10028
Tipo messaggioQUESTION
DescrizioneThe acceptance of the chenges will involve the reallignment of some objects image of the project !
AzioneAre you sure of to want to continue ?
Si entra in questo stato quando QPaint rileva che la modifica di una o piú immagini nella finestra di dialogo “Image Manager” potrebbe comportare la necessitá di spostare uno o piú immagini presenti nel progetto.
Codice messaggio10029
Tipo messaggioQUESTION
DescrizioneDo you really want rename password page ?
Azione
Si entra in questo stato quando l'utente introduce una nuova password per la pagina attiva.
Codice messaggio10030
Tipo messaggioINFORMATION
DescrizioneCurrently at least 256 system color are necessary to perform this program !
AzioneProgram will be terminate !
Si entra in questo stato quanto QPaint, durante la procedura di avvio, rileva che la configurazione video di Windows® é impostata a meno di 256 colori di sistema.
Codice messaggio10031
Tipo messaggioERROR
DescrizioneProject file <name> not found !
Azione
Si entra in questo stato quando QPaint, durante la procedura di avvio, rileva che il nome del file di progetto impostato nella linea di comando non corrisponde ad un file realmente esistente.
Codice messaggio10032
Tipo messaggioWARNING
DescrizioneInvalid empty name !
AzioneIntroduce a valid name !
Si entra in questo stato quando QPaint rileva che il nome della variabile interna appena introdotto é vuoto.
Codice messaggio10033
Tipo messaggioWARNING
DescrizioneLabel <name> already used by another internal variable !
AzioneIntroduce a new name !
Si entra in questo stato quando QPaint rileva che il nome della variabile interna appena introdotto é giá presente nella lista dei nomi variabili interne.
Codice messaggio10034
Tipo messaggioQUESTION
DescrizioneSave changes to <name> ?
Azione
Si entra in questo stato quando QPaint rileva che si sta chiudendoun progetto nuovo e modificato e richiede all'utente se desidera salvare le modifiche apportate.
Codice messaggio10035
Tipo messaggioFATAL ERROR
DescrizioneInvalid function parameters !
AzioneProgram will be terminate !
Si entra in questo stato quando internamente il programma esegue un operazione non valida. Il programma Qpaint viene chiuso. Tutte le modifiche apportate al progetto successive all'ultimo salvataggio verranno perse.
Codice messaggio10036
Tipo messaggioINFORMATION
DescrizioneCan't access to deleted page !
AzioneExecute “Check project” to refresh report window !
Si entra in questo stato quando si seleziona un item della report Window riferito ad una pagina che é stata rimossa.
Codice messaggio10037
Tipo messaggioINFORMATION
DescrizioneCan't access to deleted event !
AzioneExecute “Check project” to refresh report window !
Si entra in questo stato quando si seleziona un item della report Window riferito ad una pagina che é stata rimossa.
Codice messaggio10038
Tipo messaggioINFORMATION
DescrizioneCan't access to deleted action !
AzioneExecute “Check project” to refresh report window !
Si entra in questo stato quando si seleziona un item della report Window riferito ad una pagina che é stata rimossa.
Codice messaggio10039
Tipo messaggioINFORMATION
DescrizioneCan't access to deleted action !
AzioneExecute “Check project” to refresh report window !
Si entra in questo stato quando si seleziona un item della report Window riferito ad una pagina che é stata rimossa.
Codice messaggio10040
Tipo messaggioERROR
DescrizioneQPaint has detected unavailable terminal fonts on this project !
Requered fonts have following type name:
AzioneProject will not be loaded !
Si entra in questo stato quando QPaint rileva che il progetto in lettura necessita di uno o piú font utente non disponibili nel computer. Nella dialog vengono riportate le caratteristiche di ogni font mancante comprensive di nome font, altezza, larghezza e spacing carattere.
Codice messaggio10042
Tipo messaggioERROR
DescrizioneBitmap font file <name> not found !
AzioneSelect a valid file name !
Si entra in questo stato quando QPaint non riesce a trovare il file bitmap specificato.
Codice messaggio10043
Tipo messaggioERROR
DescrizioneInvalid bitmap font size ! The bitmap font type must be monochrome
Azione
Si entra in questo stato quando QPaint rileva che il file bitmap in lettura non é monocromatico.
Codice messaggio10044
Tipo messaggioERROR
DescrizioneInvalid bitmap font size ! Valid bitmap width range is 96 ÷ 512 pixels. Valid bitmap height range is 84 ÷ 784 pixels
Azione
Si entra in questo stato quando QPaint rileva che la dimensione del file bitmap in lettura non é entro i limiti consentiti.
Codice messaggio10045
Tipo messaggioINFORMATION
DescrizioneBitmap font file saved as
Azione
Si entra in questo stato quando QPaint termina la creazione del file bitmap per il font.
Codice messaggio10046
Tipo messaggioINFORMATION
DescrizioneClipboard doesn't match with Qpaint version !
AzioneClipboard will not be used !
Si entra in questo stato quando QPaint rileva che gli appunti che si cerca di incollare non sono compatibili con il progetto utilizzato.
Codice messaggio10047
Tipo messaggioINFORMATION
DescrizioneInvalid page file !
AzionePage will not be added !
Si entra in questo stato quando QPaint rileva che la pagina richiesta per l'importazione non è compatibile con il progetto utilizzato.
Codice messaggio10048
Tipo messaggioINFORMATION
DescrizionePage file doesn't match with QPaint version !
AzionePage will not be added !
Si entra in questo stato quando QPaint rileva che la pagina richiesta per l'importazione non è compatibile con la versione di QPaint utilizzata.
Codice messaggio10049
Tipo messaggioERROR
DescrizioneQPaint has detected unavailable terminal fonts on this page !
Required fonts have following type name
AzionePage will not be loaded !
Si entra in questo stato quando QPaint rileva che nella pagina è stato importato un oggetto del quale non esiste il font nella cartella.
Codice messaggio10050
Tipo messaggioINFORMATION
DescrizioneAll available informations selected for default !
Azione
Si entra in questo stato quando QPaint rileva che è stata richiesta la creazione della documentazione senza aver selezionato nessun argomento di stampa; il QPaint esegue la stampa della documentazione di default.
Codice messaggio10051
Tipo messaggioINFORMATION
DescrizioneLoaded an old version project !
AzioneSave operations will save it with new file format !
Si entra in questo stato quando QPaint rileva che Il progetto aperto è stato realizzato con una versione precedente di QPaint e che in caso di salvataggio, viene aggiornata la versione, percui non sarà più apribile con la vecchia versione di QPaint.

Durante la fase di compilazione del progetto (richiesta tramite il comando apposito o in fase di download) il QPaint visualizza una finestra di dialogo dove mostra il report degli errori intervenuti. L'utilizzatore, facendo un doppio click sull'errore, può andare direttamente sulla pagina che ha creato l'errore aprendo la finestra delle proprietà dell'oggetto incriminato.
Gli errori che possono comparire sono i seguenti:

Codice messaggio12000
DescrizioneCheck project complete. No error found !
Si entra in questo stato quando QPaint non rileva nessun errore in compilazione
Codice messaggio12001
DescrizioneUndefined key in “On Key” event !
Si entra in questo stato quando QPaint rileva che non è stato definito nessun tasto nell'evento “On Key”.
Codice messaggio12002
DescrizioneUndefined key in “On Press” event !
Si entra in questo stato quando QPaint rileva che non è stato definito nessun tasto nell'evento “On Press”.
Codice messaggio12003
DescrizioneUndefined key in “On Release” event !
Si entra in questo stato quando QPaint rileva che non è stato definito nessun tasto nell'evento “On Release”.
Codice messaggio12004
DescrizioneUndefined time in “On Time” event !
Si entra in questo stato quando QPaint rileva che non è stato definito nessun valore di tempo nell'evento “On Time”.
Codice messaggio12005
DescrizioneUndefined page in “Goto Page” action!
Si entra in questo stato quando QPaint rileva che non è stata definita nessuna pagina dove saltare nell'azione “Goto page”.
Codice messaggio12006
DescrizioneInvalid page in “Goto Page” action !
Si entra in questo stato quando QPaint rileva che è stata definita una pagina inesistente dove saltare nell'azione “Goto page”.
Codice messaggio12007
DescrizioneUndefined comand in “Send Comand” action !
Si entra in questo stato quando QPaint rileva che non è stato definito nessun comando nell'azione “Send Comand”.
Codice messaggio12008
DescrizioneInvalid comand in “Send Comand” action !
Si entra in questo stato quando QPaint rileva che è stato definito un comando non valido nell'azione “Send Comand”.
Codice messaggio12009
DescrizioneUndefined led in “Led On” action !
Si entra in questo stato quando QPaint rileva che non è stato definito un led nell'azione “Led On”.
Codice messaggio12010
DescrizioneUndefined led in “Led Off” action !
Si entra in questo stato quando QPaint rileva che non è stato definito un led nell'azione “Led Off”.
Codice messaggio12011
DescrizioneUndefined led in “Led Blink” action !
Si entra in questo stato quando QPaint rileva che non è stato definito un led nell'azione “Led Blink”.
Codice messaggio12012
DescrizioneUndefined symbol for Base !
Si entra in questo stato quando QPaint rileva che non è stato definito un simbolo nella base della variabile.
Codice messaggio12013
DescrizioneUnknown symbol for Base !
Si entra in questo stato quando QPaint rileva che non è riconosciuto un simbolo nella base della variabile.
Codice messaggio12014
DescrizioneInvalid symbol group for Base !
Si entra in questo stato quando QPaint rileva che non è valido il gruppo di appartenenza di un simbolo nella base della variabile.
Codice messaggio12015
DescrizioneInvalid symbol type for Base !
Si entra in questo stato quando QPaint rileva che non è valido il tipo di simbolo nella base della variabile.
Codice messaggio12016
DescrizioneInvalid read-only symbol group for Base !
Si entra in questo stato quando QPaint rileva che non è possibile scrivere nel simbolo della base della variabile.
Codice messaggio12017
DescrizioneUndefined symbol for First Index !
Si entra in questo stato quando QPaint rileva che non è stato definito un simbolo nel primo indice della variabile.
Codice messaggio12018
DescrizioneUnknown symbol for First Index !
Si entra in questo stato quando QPaint rileva che non è riconosciuto un simbolo nel primo indice della variabile.
Codice messaggio12019
DescrizioneInvalid symbol group for First Index!
Si entra in questo stato quando QPaint rileva che non è valido il gruppo di appartenenza di un simbolo nel primo indice della variabile.
Codice messaggio12020
DescrizioneInvalid symbol type for First Index !
Si entra in questo stato quando QPaint rileva che non è valido il tipo di simbolo nel primo indice della variabile.
Codice messaggio12021
DescrizioneNot required symbol for First Index !
Si entra in questo stato quando QPaint rileva che non è richiesto un simbolo nel primo indice della variabile.
Codice messaggio12022
DescrizioneUndefined symbol for Second Index !
Si entra in questo stato quando QPaint rileva che non è stato definito un simbolo nel secondo indice della variabile.
Codice messaggio12023
DescrizioneUnknown symbol for SecondIndex !
Si entra in questo stato quando QPaint rileva che non è riconosciuto un simbolo nel secondo indice della variabile.
Codice messaggio12024
DescrizioneInvalid symbol group for Second Index!
Si entra in questo stato quando QPaint rileva che non è valido il gruppo di appartenenza di un simbolo nel secondo indice della variabile.
Codice messaggio12025
DescrizioneInvalid symbol type for Second Index !
Si entra in questo stato quando QPaint rileva che non è valido il tipo di simbolo nel secondo indice della variabile.
Codice messaggio12026
DescrizioneNot required symbol for Second Index !
Si entra in questo stato quando QPaint rileva che non è richiesto un simbolo nel secondo indice della variabile.
Codice messaggio12027
DescrizioneUndefined object in “On Out Data Entry Confirm” event !
Si entra in questo stato quando QPaint rileva che non è stato definito nessun oggetto nell'evento “On Out Data Entry Confirm”.
Codice messaggio12028
DescrizioneInvalid object in “On Out Data Entry Confirm” event !
Si entra in questo stato quando QPaint rileva che è stato definito un oggetto non valido nell'evento “On Out Data Entry Confirm”.
Codice messaggio12029
DescrizioneUndefined object in “On Out Data Entry No Confirm” event !
Si entra in questo stato quando QPaint rileva che non è stato definito nessun oggetto nell'evento “On Out Data Entry No Confirm”.
Codice messaggio12030
DescrizioneInvalid object in “On Out Data Entry No Confirm” event !
Si entra in questo stato quando QPaint rileva che è stato definito un oggetto non valido nell'evento “On Out Data Entry No Confirm”.
Codice messaggio12031
DescrizioneUndefinied object in “Object Blink” action !
Si entra in questo stato quando QPaint rileva che non è stato definito un oggetto nell'azione “Object Blink”.
Codice messaggio12032
DescrizioneInvalid object in “Object Blink” action !
Si entra in questo stato quando QPaint rileva che è stato definito un oggetto non valido nell'azione “Object Blink”.
Codice messaggio12033
DescrizioneUndefinied object in “Object No Blink” action !
Si entra in questo stato quando QPaint rileva che non è stato definito un oggetto nell'azione “Object Blink”.
Codice messaggio12034
DescrizioneInvalid object in “Object No Blink” action !
Si entra in questo stato quando QPaint rileva che è stato definito un oggetto non valido nell'azione “Object No Blink”.
Codice messaggio12035
DescrizioneUndefinied object in “Object Reverse” action !
Si entra in questo stato quando QPaint rileva che non è stato definito un oggetto nell'azione “Object Reverse”.
Codice messaggio12036
DescrizioneInvalid object in “Object Reverse” action !
Si entra in questo stato quando QPaint rileva che è stato definito un oggetto non valido nell'azione “Object Reverse”.
Codice messaggio12037
DescrizioneUndefinied object in “Object No Reverse” action !
Si entra in questo stato quando QPaint rileva che non è stato definito un oggetto nell'azione “Object No Reverse”.
Codice messaggio12038
DescrizioneInvalid object in “Object No Reverse” action !
Si entra in questo stato quando QPaint rileva che è stato definito un oggetto non valido nell'azione “Object No Reverse”.

Durante la fase di download del progetto il QPaint visualizza una finestra di dialogo dove mostra il report degli errori intervenuti.
Gli errori che possono comparire sono i seguenti:

Codice messaggio20000
DescrizioneTerminal not in download configuration
Si entra in questo stato quando QPaint rileva che il terminale non è in download. Il download viene abortito.
Codice messaggio20001
DescrizioneError in String adding
Si entra in questo stato quando QPaint rileva che il terminale ha avuto problemi durante la comunicazione seriale. Il download viene abortito.
Codice messaggio20002
DescrizioneError in Box adding
Si entra in questo stato quando QPaint rileva che il terminale ha avuto problemi durante la comunicazione seriale. Il download viene abortito.
Codice messaggio20003
DescrizioneError in erasing memory
Si entra in questo stato quando QPaint rileva che il terminale ha avuto problemi durante la cancellazione della flash memory. Il download viene abortito.
Codice messaggio20004
DescrizioneError in downloading project
Si entra in questo stato quando QPaint rileva che il terminale ha avuto problemi durante il download del progetto. Il download viene abortito.
Codice messaggio20005
DescrizioneStarting application failed
Si entra in questo stato quando QPaint rileva che il terminale ha avuto problemi durante la fase di start dell'applicativo del terminale. Il download viene abortito.
Codice messaggio20006
DescrizioneSerial comunication error
Si entra in questo stato quando QPaint rileva che il terminale ha avuto problemi durante la comunicazione seriale. Il download viene abortito.
Codice messaggio20007
DescrizioneDownload operations stopped by user
Si entra in questo stato quando QPaint rileva che il terminale ha ricevuto un comando di interuzione dall'utente. Il download viene abortito.
Codice messaggio20008
DescrizioneError in Image adding
Si entra in questo stato quando QPaint rileva che il terminale ha riscontrato un errore nel caricamento di immagini . Il download viene abortito.
Codice messaggio20009
DescrizioneError in ValImage adding
Si entra in questo stato quando QPaint rileva che il terminale ha riscontrato un errore nel caricamento di immagini ValImage. Il download viene abortito.

Nel terminale esistono una serie di variabili interne che possono essere visualizzate dal terminale oppure possono essere utilizzate dal sistema Qmove.
Di seguito viene presentata una lista.

Nome$CONTRAST
DimensioneWord
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile regolare il contrasto dell'LCD del terminale. Range : 0 ÷ 200
Nome$DATAENTRYON
DimensioneFlag
Lettura / ScritturaLettura
Attraverso questa variabile è possibile controllare se il terminale è in data entry. 1 = Terminale in data entry 0 = Terminale non in data entry
Nome$DAY
DimensioneByte
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare il giorno del datario del terminale.
Nome$DEOBJ
DimensioneWord
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile visualizzare o assegnare numero dell'oggetto dinamico in data entry nel terminale.
Nome$DIRECTDE
DimensioneFlag
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile decidere se quando si entra in data entry attraverso un tasto numerico, esso debba essere considerato semplicemente come accesso al data entry (funzionamento tasto INS) oppure se deve fare l'accesso al data entry e scrivere il tasto premuto nel campo (come se venisse premuto il tasto INS e poi il tasto numerico) 1 = Entrata in data entry e riconoscimento tasto numerico 0 = Solo entrata nel data entry
Nome$HLDE
DimensioneFlag
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile decidere se quando si entra in data entry le cifre sono nere su sfondo bianco oppure le cifre sono bianche su sfondo nero (highlight mode) 1 = Data entry in highlight mode 0 = Data entry normale
Nome$HOUR
DimensioneWord
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare l'ora del datario del terminale.
Nome$KEY
DimensioneLong
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare il codice del tasto premuto nel terminale. Per la codifica dei tasti consultate il manuale firmware dell'oggetto.
Nome$KEYF
DimensioneLong
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare il codice del tasto funzione premuto nel terminale. Per la codifica dei tasti consultate il manuale firmware dell'oggetto.
Nome$LANGUAGE
DimensioneByte
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile visualizzare o assegnare la lingua messaggi del terminale.
Nome$LOWBATTQMOVE
DimensioneFlag
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare lo stato della batteria del Qmove. 1 = Batteria Qmove esaurita 0 = Batteria Qmove OK
Nome$LOWBATTTERM
DimensioneFlag
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare lo stato della batteria del terminale. 1 = Batteria terminale esaurita 0 = Batteria terminale OK
Nome$MIN
DimensioneByte
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare il valore dei minuti del datario del terminale.
Nome$MONTH
DimensioneByte
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare il mese del datario del terminale.
Nome$PAGE
DimensioneWord
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare la pagina visualizzata del terminale.
Nome$SCALEA
DimensioneLong
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile visualizzare o assegnare il fattore di scala A del terminale. Vedi paragrafo dedicato.
Nome$SCALEB
DimensioneLong
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile visualizzare o assegnare il fattore di scala B del terminale. Vedi paragrafo dedicato.
Nome$SCALEC
DimensioneLong
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile visualizzare o assegnare il fattore di scala C del terminale. Vedi paragrafo dedicato.
Nome$SEC
DimensioneByte
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare il valore dei secondi del datario del terminale.
Nome$SINGLEDE
DimensioneFlag
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile decidere se, alla conferma con ENTER o alla pressione dei tasti a freccia, il data entry debba continuare all'oggetto succesivo oppure debba terminare. All'accensione, per default, viene impostata a zero. 1 = Alla conferma il data entry termina 0 = Alla conferma il data entri prosegue
Nome$STATUSLED
DimensioneFlag
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare lo stato del led status del terminale. 1 = Led status lampeggiante 0 = Led status spento
Nome$YEAR
DimensioneWord
Lettura / ScritturaLettura / Scrittura
Attraverso questa variabile è possibile visualizzare o assegnare l'anno del datario del terminale.
Nome$DOWNBATTQMOVE
DimensioneFlag
Lettura / ScritturaLettura
Attraverso questa variabile è possibile visualizzare il preallarme di batteria in fase di scarica (batteria del Qmove). 1 = Batteria Qmove quasi scarica 0 = Batteria Qmove OK
Nome$STATUSTER
DimensioneFlag
Lettura / ScritturaLettura
Attraverso questa variabile é possibile visualizzare lo stato del terminale. Per particolari terminali fare riferimento al manuale Firmware specifico dello strumento.
Nome$LEDS
DimensioneFlag
Lettura / ScritturaLettura \ Scrittura
Attraverso questa variabile è possibile visualizzare lo stato led dei tasti del terminale. La variabile viene anche usata per forzare lo stato dei led stessi permettendone una gestione rapida e versatile.
Nome$BLINKLEDS
DimensioneFlag
Lettura / ScritturaLettura \ Scrittura
Attraverso questa variabile è possibile visualizzare lo stato blink o meno dei led legati ai tasti del terminale. La variabile viene anche usata per forzare lo stato Blink stesso permettendone una gestione rapida e versatile.

In questo documento sono riportati alcuni esempi applicativi.

Per default il terminale utilizza i tasti PGUP e PGDN per cambiare la pagina di visualizzazione. Se il progetto prevede molte pagine questi tasti forniscono uno scroll sequenziale e ordinato di tutte le pagine appartenenti al progetto.
Molte volte esiste la necessitá di vincolare lo scroll all'interno di solo determinate pagine ad esempio le pagine di parametrizzazione e le pagine di taratura. Inoltre in alcuni casi si deve proteggere l'accesso a queste pagine con una password. Vedremo in questo esempio come realizzare tutto questo.

Supponiamo di avere un progetto composto da 4 pagine di visualizzazione normale, 3 pagine di parametrizzazione e 2 pagine di taratura. Supponiamo inoltre che la posizione delle pagine di parametrizzazione e taratura non coincida con l'inizio o la fine della lista pagine. Se eseguiamo un “esploso” del progetto risulta:

Vogliamo che una volta entrati nella pagina nr.03 “Parametrizzazione 1/3” i tasti PGDN e PGUP eseguano lo scroll solo tra le pagine di parametrizzazione cioé le nr.03 , nr.04 e nr.05. Se invece si entra nella pagina nr.07 i tasti PGDN e PGUP devono eseguire lo scroll solo tra le pagine di taratura cioé la nr.07 e nr.08. Su questo gruppo di pagine vogliamo inoltre che la successione sia circolare cioé che raggiunta l'ultima pagina si passi, con un ulteriore incremento, alla prima e viceversa.
Per fare questo é sufficiente “sovraccaricare” il funzionamento dei tasti PGUP e PGDN nelle pagine in cui si intende modificare il funzionamento di default descritto in precedenza. In questo caso le pagine in cui si deve modificare il funzionamento sono: la pagina nr.03 perché il tasto PGUP non deve eseguire nulla, la pagina nr.05 perché tasto PGDN deve essere disabilitato, la pagina nr.07 perché il tasto PGUP deve richiamare la nr.08 e la pagina nr.08 perché il tasto PGDN deve richiamare la nr.07. Per sovraccaricare il funzionamento si imposta nella pagina interessata un evento di pagina di tipo “On Key” al quale si associa una azione “Goto Page” alla pagina interessata. Per disabilitare il funzionamento invece basta definire l?evento di pagina senza associare nessuna azione. La programmazione degli eventi diventa cosí:

Per uscire dalle pagine di parametrizzazione o taratura bisogna programmare un tasto apposito che esegua un salto alle pagine di visualizzazione.
Se si vuole mantenere una sequenza ordinata di scroll tra le pagine di visualizzazione (che invece non hanno una disposizione ordinata), bisogna “sovraccaricare” il funzionamento dei tasti PGUP e PGDN nel seguente modo:

É importante ricordare che nella definizione dell'azione “Goto Page” é possibile utilizzare anche il nome della pagine anziché il numero in modo da non dover modificare l'azione in caso di inserimento o rimozione di una pagina.

Nel caso in cui si voglia controllare l'accesso al gruppo di pagine di parametrizzazione e taratura con password bisogna procedere nel seguente modo: per tutte le pagine apparteneti al gruppo (nr.03, 04 e 05 per la parametrizzazione) bisogna abilitare e introdurre lo stesso valore di password nell'apposito campo. Questo perché una volta introdotta la password essa rimane valida per tutte le pagine in cui la password é uguale. Vediamo come dovrebbe essere programmato il campo password per il nostro esempio:

Quando un progetto viene realizzato utilizzando piú lingue esistono vari modi per eseguire la scelta sul terminale.
Il modo piú semplice e immediato é quello di entrare nelle pagine di “set-up” del terminale e scegliere il nome della lingua utilizzata. Questa procedura é in genere consigliata per l'installatore del terminale visto che nelle pagine di set-up sono disponibili anche altre configurazioni che se erroneamente toccate (vedi velocitá seriale) possono interrompere il normale funzionamento del sistema e richiedere l'intervento di personale specializzato. La lingua é peró selezionabile anche direttamente nella normale applicazione utente. Esiste la variabile terminale $LANGUAGE il cui valore rappresenta il numero della lingua attualmente selezionata.
Si consideri il seguente progetto di esempio che é stato sviluppato con 3 lingue:

per la lingua “ENGLISH” la variabile $LANGUAGE assume valore 1, per la lingua “ITALIANO” assume valore 2, per la lingua “TEDESCO” assume valore 3.
Per realizzare la scelta della lingua da applicazione, senza utilizzare le pagine di “Set-up”, basta creare un oggetto VALUE assegnando la variabile $LANGUAGE con limiti di introduzione minimo 1 e massimo 3. Per questa soluzione si deve in qualche modo peró indicare la relazione tra nome lingua e valore numerico che non é immediata per l'utente finale. Una soluzione piú elegante e funzionale é quella di definire un oggetto VALSTRING con proprietá “Enable Modify Mode” attiva dove i messaggi corrispondono ai nomi assegnati alla lingua. In questo modo l'utilizzatore sceglie la lingua mediante lo scroll di tutti i nomi delle lingue mediante il tasto “Next Char” e quando conferma viene scritto il nuovo valore sulla variabile di terminale.

Vediamo un esempio:

É importante introdurre i testi per tutte le lingue esistenti nel progetto magari con le appropriate traduzioni.

In molte applicazioni é consueto che una determinata condizione verificatasi nell'applicativo QCL debba segnalare un'informazione all'operatore tramite terminale. Solitamente si riserva una determinata pagina per segnalare all'operatore questa situazione e bisogna forzare il cambio pagina in corrispondenza di tale condizione. Per fare questo il QCL deve poter modificare la pagina corrente nel terminale. Facciamo un esempio: un determinato ingresso del sistema segnala la mancanza olio nella macchina. In tale condizione il ciclo di lavoro si arresta ed il terminale visualizza la pagina numero 25 di avviso controllo olio. Vediamo come implementare questo: si definisce in QCL la variabile gbNewPage di tipo GLOBAL e dimensione BYTE. Si definisce nel terminale un evento globale di tipo “OnChangeVar” associato alla variabile gbNewPage. A tale evento si definisce l'azione “GoToPage” associata al valore della stessa variabile gbNewPage. Cosí facendo ad ogni variazione della variabile gbNewPage corrisponderá il salto alla pagina definita dal valore della variabile stessa. In altre parole, per il QCL, basterá scrivere il nuovo valore nella variabile ed il terminale cambierá pagina automaticamente senza dover separare i comandi di cambio pagina e numero nuova pagina. In QCL si dovrá implementare il seguente codice:

..
..
    IF (ioMancaOlio)
      sbStopCiclo = 1 ;Arresto del ciclo automatico
      gbNewPage = 25 ;Terminale in pagina nr.25!
    ENDIF
..
..

dove ioMancaOlio é la variabile di tipo INPUT che rappresenta il valore dell'ingresso. Questa programmazione non modifica il comportamento dei tasti PGUP e PGDN.
In altre applicazioni é invece necessario il trasferimento opposto e ció si verifica quando l'applicativo, per come é stato progettato, deve eseguire operazioni diverse a seconda della pagina che il terminale sta visualizzando. Per fare questo é il terminale che ad ogni cambio pagina deve aggiornare l'applicativo sul nuovo valore della pagina in esecuzione. Vediamo come fare questo: si definisce in QCL la variabile gbTerPage di tipo GLOBAL e dimensione BYTE. Si definisce nel terminale un evento globale di tipo “OnChangeVar” associato alla variabile di terminale $PAGE. A tale evento si definisce l'azione “Set Var” con associata la variabile $PAGE come source e gbTerPage come destination. Cosí facendo ad ogni variazione della variabile $PAGE corrisponderá la scrittura del nuovo valore nella variabile dell'applicativo gbTerPage.

N.B. Se l'applicativo é formato da piú di 127 pagine le variabili definite in QCL dovranno essere di dimensione WORD anziché BYTE.

In alcune applicazioni esiste la necessitá di visualizzare i valori numerici in diverse unitá di misura. Ad esempio in una pagina di terminale il cliente potrebbe scegliere se utilizzare la rappresentazione in millimetri oppure in pollici oppure in metri anziché decimetri. Tutte le rappresentazioni numeriche del progetto dovrebbero cosí commutare i valori ed adeguarsi alla nuova scelta. Il terminale mette a disposizione una serie di strumenti per permettere questa possibilitá. Come premessa bisogna dire che esistono molti modi per realizzare la conversione, il terminale implementa questa caratteristica mantenendo invariato il valore originale del dato e introducendo un fattore di scala tale da eseguire la conversione dell'unitá di misura.
Supponiamo di voler sviluppare un progetto terminale dove alcune visualizzazioni/introduzioni possono essere effettuate sia in valori metrici che in valori anglosassoni. Supponiamo che la parametrizzazione della macchina sia stata effettuata per rappresentare il decimo di millimetro e che si voglia visualizzare un punto decimale per facilitare la lettura del valore. Consideriamo anche che per la rappresentazione in unitá anglosassone bisogna rappresentare il valore in pollici senza peró perdere precisione. Cosí é necessario modificare la posizione del punto decimale (ad esempio 100.4mm permette una precisione del decimo di mm,ma 4.6inch significa una precisione di 2.54mm!).
Procediamo per passi: tutte le introduzioni numeriche dove vogliamo ottenere due rappresentazioni fanno capo ad oggetti VALUE in cui bisogna abilitare la voce “Global” nel campo “Scaling Mode”. In questo modo il dato prima di essere visualizzato sará convertito per il fattore di scala composto dai valori ScaleA,ScaleB e ScaleC presenti nella finestra richiamata dal menú “Project Setup”. Questi valori sono modificabili durante l'esecuzione dell'applicazione tramite la scrittura nelle variabili di terminale $SCALEA, $SCALEB e $SCALEC. Inoltre definiamo la variabile interna @PPDec di dimensione BYTE. Tutti gli oggetti VALUE sopra indicati devono avere associata la variabile @PPDec nel campo Dec.Point. Supponiamo che la parametrizzazione sia stata eseguita perché l'applicativo lavori con la precisione del decimo di millimetro e quindi per questa unitá di misura si visualizzano i valori con un punto decimale. Per ottenere la visualizzazione metrica bisogna impostare nel terminale i seguenti valori:

$SCALEA = 1
$SCALEB = 1
$SCALEC = 0
@PPDec = 1
Per la rappresentazione anglosassone:
$SCALEA = 393700
$SCALEB = 100000
$SCALEC = 0
@PPDec = 3

Con questa impostazione si intende visualizzare il millesimo di pollice che corrisponde a 0.0393700 mm e quindi mantiene la precisione del decimo di millimetro. Per convertire da decimo di millimetro a millesimo di pollice si deve moltiplicare per:

siccome la variabile $SCALEA é di dimensione LONG puó contenere solamente valori interi. Allora si moltiplica il valore per 100000 per renderlo intero e si programma $SCALEB.

Ora sará sufficiente realizzare una pagina di scelta unitá di misura come in figura:

Fare attenzione perché le variabili interne all'accensione del terminale hanno valore zero mentre le variabili $SCALEA, $SCALEB e $SCALEC hanno il valore fissato nell'introduzione “Global Scale Values” nella finestra nella finestra richiamata dal menú “Project Setup” di QPaint.

In questo esempio si vuole dare tutti gli strumenti che il Qpaint 3.0 mette a disposizione relativamente all'introduzione dei dati. Nell'esempio riporteremo una serie di dati modificabili da terminale. L'esempio illustrerà le seguenti operazioni:

  • attivazione del Data Entry senza l'utilizzo del tasto INS,
  • attivazione del Data Entry in un particolare campo,
  • uscita dal Data Entry confermando il valore introdotto senza l'utilizzo del tasto ENTER,
  • uscita dal Data Entry senza confermare il valore introdotto senza l'utilizzo del tasto ESC,
  • sequenza di Data Entry diversa da quella di default,
  • Data Entry immediato alla pressione dei tasti numerici,
  • eventi dati dall'uscita dal Data Entry.

La pagina che utilizzeremo è la seguente:

ci sono 12 campi inseribili suddivisi in 3 gruppi A, B e C.

0.11.5.1 Attivazione del Data Entry senza l'utilizzo del tasto INS

Per iniziare l'inserimento dei dati si utilizza per default il tasto INS. Tramite l'azione “Begin Data Entry” associata ad un evento particolare si può far iniziare il Data Entry. L'evento potrebbe essere dato da un particolare valore assunto da una variabile o da uno stato assunto da un ingresso, per esempio.

Nell'esempio precedente quando l'ingresso “Ingresso1” va a 1 si inizia il Data Entry dal primo campo modificabile in alto a sinistra (A1).

Attivazione del Data Entry in un particolare campo.

Se si vuole far iniziare il Data Entry da un campo particolare diverso da quello di default, allora si dovrà utilizzare la variabile del terminale $DEOBJ assegnando ad essa il numero identificativo del primo campo che si vuole introdurre quando inizia il Data Entry. Per conoscere tali numeri identificativi si deve selezionare la voce “Page-Data Entry Sequence Editor” (Ctrl+D). Apparirà la seguente finestra:

Se si vuole far iniziare il Data Entry dal campo C1 per esempio si dovrà fare doppio click nella finestra precedente sopra il campo numerico C1 e quindi scrivere:

0.11.5.2 Uscita dal Data Entry confermando il valore introdotto senza l'utilizzo del tasto ENTER

Se si vuole far finire il Data Entry confermando il valore appena scritto, ma senza utilizzare il tasto di default ENTER, si può utilizzare l'azione “Out Data Entry Confirm” . Tale azione può essere associata solo ad eventi “On Var” e “On Change Var” quindi per esempio si può associare ad un flag del Qmove:

0.11.5.3 Uscita dal Data Entry senza confermare il valore introdotto senza l'utilizzo del tasto ESC

Se invece si vuole sospendere un Data Entry senza neanche confermare l'ultimo valore introdotto, perché si vuole visualizzare una pagina particolare immediatamente (per esempio con un messaggio di allarme) allora si dovrà utilizzare la seguente programmazione:

0.11.5.4 Sequenza di Data Entry diversa da quella di default

Potrebbe essere necessario eseguire un ordine di inserimento dei dati diverso da quello di default che è dall'alto verso il basso e da sinistra verso destra. Nella pagina di esempio all'inizio del capitolo l'ordine di inserimento dei dati sarebbe il seguente:

A1, A2, A3, B1, A4, B2, B3, C1, B4, C2, C3, C4.

Se per esempio si volesse inserire prima tutti gli elementi del gruppo A, poi quelli del B e poi del C bisogna utilizzare il “Data Entry Sequence Editor” come mostrato in figura:

Si vede per esempio che dal Value3 (A3) premendo il tasto ENTER si va al Value4 (A4) e non al Value5 (B1) come sarebbe per default.

0.11.5.5 Data entry immediato alla pressione dei tasti numerici

Se si vuole cominciare ad inserire un valore senza dover premere per forza il tasto INS, ma cominciando subito ad inserire i valori con i tasti numerici si deve programmare la pressione di ognuno dei tasti numerici nel seguente modo:

Il significato di tale programmazione è:
alla pressione di ognuno dei tasti numerici si imposta quale sarà il campo da introdurre ($DEOBJ = 1), si imposta la modalità di inserimento diretto ($DIRECTDE = 1) e si avvia il Data Entry (Begin Data Entry).
Una volta usciti dal Data Entry la modalità di inserimento diretta viene disabilitata automaticamente, tale funzione ha lo scopo di considerare la pressione del tasto numerico 1 (per esempio), oltre che l'inizio del Data Entry, anche la prima cifra del valore che si vuole inserire.

0.11.5.6 Eventi dati dall'uscita dal Data entry

Esistono due eventi basati sull'uscita dal Data Entry. L'uscita dal D.E. può essere con conferma del valore introdotto o senza conferma dello stesso. A tale eventi si può associare qualsiasi azione disponibile.

Nell'esempio si è associato all'uscita con conferma dal D.E. del Value1 (A1) un settaggio di un flag.

Nel terminale e nel sistema Qmove si trova una batteria tampone per la memorizzazione dei dati ritentivi. In caso di esaurimento di tale componente esiste una segnalazione nelle apparecchiature. Per il terminale la segnalazione si trova nella pagina Info, per il sistema Qmove esiste una spia luminosa sul frontalino. In molti casi peró questa segnalazione non puó essere sufficiente perché non é direttamente accessibile all'utilizzatore, ad esempio il sistema Qmove si trova all'interno di un quadro elettrico o nel terminale non viene mai richiamata la pagina di set-up. Per questi motivi é utile segnalare l'esaurimento delle batterie sulla pagina di terminale in modo che l'utilizzatore si accorga e possa prendere i provvedimenti necessari. Esistono tre variabili di terminale $DOWNBATTTERM, $LOWBATTTERM e $LOWBATTQMOVE rispettivamente che rappresentano la batteria in fase di esaurimento,la batteria esurita nel terminale e nel Qmove.
In questo esempio vediamo come realizzare un applicativo in cui il terminale, se una batteria é esaurita, segnala all'utilizzatore questo stato con una pagina dedicata. Nella prima pagina di terminale inseriamo i seguenti eventi di pagina:

La pagina “LOW batt QMOVE” deve essere:

La pagina “LOW batt Ter” deve essere:

Naturalmente la stessa operazione può essere compiuta per gestire la batteria in fase di esaurimento ,creando quindi un messaggio di preallarme.
I passi di realizzazione per la gestione sono quindi gli stessi.

Nel terminale esiste la possibilitá di segnalare una anomalia durante la comunicazione tra il terminale e il sistema Qmove. Tale anomalia puó essere di origine hardware (mancanza di collegamento, disturbi alla linea) oppure determinata da situazioni relative al funzionamento dell'applicazione (letture non corrette di variabili Qmove) ed é segnalata dal lampeggio del led “status” posto nella parte superiore del pannello terminale. Quando si verifica un errore di questo tipo é opportuno verificare quale é stata la causa che lo ha prodotto; ció puó essere fatto semplicemente entrando nella “Info Page” del Setup alla voce “Comunic. Status”. E' importante sottolineare che l'errore e quindi il lampeggio vengono cancellati solamente allo spegnimento del terminale o dopo che si é usciti dal Setup per ritornare all'applicativo.

Questa segnalazione puó essere ottenuta anche da programma tramite l'uso della variabile di terminale $STATUSLED; in questo esempio vediamo come realizzare un applicativo in cui il terminale, se avviene un errore di status, segnala questo all'utilizzatore andando in una pagina dedicata.

Il nostro esempio ha 4 pagine: la pagina iniziale in cui non vi é alcuna comunicazione con il Qmove ma si visualizza una variabile di terminale, due pagine in cui si vanno a fare delle operazioni di lettura di variabili Qmove, e infine la pagina di allarme. Ció che vogliamo ottenere dall'applicativo é andare alla pagina di allarme ogni volta che si verifica un qualsiasi errore di comunicazione tra terminale e Qmove.

La cosa piú semplice é quella di definire un evento globale OnVar sulla variabile di terminale $STATUSLED, verificando quando questa assume il valore 1 (che indica l'errore di comunicazione) ed effettuando il salto alla pagina di allarme. Questo peró ha un inconveniente: infatti quando si arriva alla pagina di allarme, l'evento OnVar, essendo globale e agendo sulla var $STATUSLED, é ancora attivo e quindi il salto alla pagina di allarme si effettua sempre. Questo implica il continuo rinfresco della pagina di allarme, e questo produce uno sfarfallio fastidioso, e non é esattamente quello che si voleva.

Bisogna procedere in altro modo; definiamo una variabile interna @errcomm, che utilizzeremo per il salto pagina e solo quando c'é un cambiamento nel suo valore, in modo da non saltare nuovamente alla pagina di allarme una volta avvenuto l'errore. Quando la var $STATUSLED assume il valore 1 allora anche la var @errcomm verrá impostata ad 1. Quindi si crea un evento OnChangeVar sul cambio di valore della variabile @errcomm con azione collegata Goto Page “Error Communication”. E' conveniente usare il nome della pagina piuttosto che il suo numero, perché questo ci rende completamente indipendenti da eventuali modifiche nella posizione della pagina di allarme.
Quindi la pagina degli Eventi Globali appare cosí:

Per far sí che una volta verificato l'errore si torni ad una situazione normale, in cui si é ancora sensibili ad un nuovo errore di comunicazione, si deve resettare il valore di @errcom nella pagina iniziale, in quanto una volta usciti dalla Info di Setup Page si entra in questa pagina. Allora si definisce un evento di pagina OnPageIn in questo modo

Infine, per fare in modo di non accedere direttamente alla pagina di allarme con l'uso dei tasti PGUP o PGDN occorre sovraccaricare il tasto PGDN nella pagina precedente e sovraccaricare il tasto PGUP nella pagina successiva. Nel nostro caso la pagina di allarme é l'ultima e quindi si lavora solo sulla pagina precedente.

La pagina di allarme, che abbiamo chiamato “Error Communication”, potrebbe essere cosí disegnata:

Anche nella pagina di allarme occorre sovraccaricare i tasti PGUP e PGDN per fare in modo che l'uscita avvenga solo dalla pagina di Setup/Info, in modo anche da verificare il tipo di errore che si é verificato.

In questo esempio vediamo come poter trattare dati alfanumerici in maniera dinamica usando una variabile QCL Array di tipo byte. In particolare simuleremo un piccolo archivio di testi (45 stringhe di 20 caratteri ciascuna) usando un array di 900 elementi. Vedremo come poter selezionare uno qualsiasi di questi testi, modificarlo, ecc…

Il modo in cui vogliamo gestire l'array byte (variabile abARRS in QCL) é raffigurato nel disegno seguente:

Creiamo un oggetto VALUE in cui definiamo come variabile associata proprio la abARRS e in cui usiamo come First Index una variabile QCL, nel nostro esempio swWord che é una variabile SYSTEM di tipo WORD; questo per poterlo modificare da QMove, cosí ci possiamo spostare lungo l'array e selezionare quella parte che ci interessa. Poi definiamo degli eventi su tasti funzione in modo da poter scorrere la lista dei testi contenuti nell'array; vi saranno due tasti di scorrimento rapido e due tasti che si spostano di un testo alla volta. E' da sottolineare che la suddivisione dell'array in singole stringhe é puramente logica in quanto in realtá i caratteri si susseguono uno dopo l'altro; tuttavia quando si esegue il programma nel terminale l'idea che ci si fa é quella di stare trattando realmente un archivio di stringhe, perfettamente separate tra di loro. Ed é ció che vogliamo ottenere con questo esempio.

Vediamo come é organizzata la pagina del terminale:

Vediamo piú in particolare l'oggetto che rappresenta il testo. Come detto é un VALUE con queste proprietá:

E' stata usata la variabile QCL abARRS, in quanto l'uso dei Value alfanumerici é possibile solo con array a byte, l'indice di inizio lettura del valore é dato dalla variabile swWord, e quindi tale indice di inizio é modificabile dall'applicativo QCL, e sono state abilitate le proprietá Alpha Mode, per poter trattare i valori dei singoli elementi dell'array come caratteri, e il Modify Mode, che ci consente di poter introdurre il testo direttamente dalla pagina di terminale. Infine nel campo Length abbiamo specificato che la lunghezza dell'oggetto Value é di 20 caratteri.
Per la visualizzazione della posizione si é usato un oggetto VALUE con variabile gbPosStr, che rappresenta il numero d'ordine del testo all'interno della nostra lista.

Vediamo anche come sono stati definiti i tasti funzione e come sono stati usati Eventi e Azioni:

L'evento OnKey viene generato fino a quando il tasto relativo resta premuto; questo ci serve per poter implementare lo scorrimento veloce della lista, verso l'alto e verso il basso. Per questo usiamo i due tasti F1 e F2, che semplicemente impostano le due variabili di tipo Flag sfF1 e sfF2, che poi verranno gestite dall'applicativo QCL. I tasti F3 e F4 operano nella stessa maniera, nel senso che impostano analogamente le due variabili sfF1 e sfF2, solo che l'evento é OnPress, che viene generato una sola volta alla pressione del tasto, e affinché sia generato di nuovo é necessario che il tasto venga rilasciato per poi essere ripremuto. E questo é proprio ció che ci serve per scorrere la lista passo passo, spostandoci di un elemento per volta. Questo é tutto per quanto riguarda il terminale. Vediamo ora invece come interviene il codice QCL. Nel file .CNF dobbiamo definire:

;-------------------------------------------------------------------
; Definizione Variabili SYSTEM
;-------------------------------------------------------------------
SYSTEM
 
...
    swWord W             ;variabile utilizzata come indice carattere (1÷900)
    sfF1 F               ;Tasto di scorrimento lista 1->45 premuto da terminale
    sfF2 F               ;Tasto di scorrimento lista 45->1 premuto da terminale
...
;-------------------------------------------------------------------
; Definizione Variabili GLOBAL
;-------------------------------------------------------------------
GLOBAL
 
...
    gbStep B             ;Indice relativo al testo selezionato nella lista (0÷44)
    gbPosStr B           ;Indice relativo al testo e visualizzato in terminale (1÷45)
...
;-------------------------------------------------------------------
; Definizione Variabili ARRSYS1
;-------------------------------------------------------------------
ARRSYS
 
abARRS B 900             ;Contiene i caratteri dei testi da gestire
...

Mentre nel codice task .MOD abbiamo:

;-------------------------------------------------------------------
; Programma Principale
;-------------------------------------------------------------------
MAIN:
 
;gestisce l'avanzamento in avanti verificando la fine
;sfF1 = 1 significa premuto F1 o F3
 
IF ((sfF1 EQ 1) AND (gbPosStr LT 45))
    gbStep = gbStep + 1
    swWord = gbStep * 20 + 1 ;calcola l'indice all'interno dell'array
ENDIF
 
;gestisce l'avanzamento all'indietro verificando l'inizio
;sfF2 = 1 significa premuto F2 o F4
 
IF ((sfF2 EQ 1) AND (gbPosStr GT 1))
    gbStep = gbStep - 1
    swWord = gbStep * 20 + 1 ;calcola l'indice all'interno dell'array
ENDIF
 
                             ; resetta i tasti
sfF1 = 0
sfF2 = 0
 
; aggiorna la posizione del testo selezionato
gbPosStr = gbStep + 1

Si vede come la cosa venga fatta semplicemente: la variabile gbStep contiene il valore dell'indice del testo nella lista, partendo peró da valore zero, cui corrisponde il carattere di inizio swWord pari a 1. swWord contiene l'indice del carattere di inizio dei vari testi, quindi assume solo i valori 1, 21, 41, 61, ….881. La pressione dei tasti funzione modifica il valore di sbStep e quindi di swWord; infine viene impostata anche gbPosStr che rappresenta la posizione del testo nelle lista in modo “naturale” cioé partendo da indice 1.

Come detto il testo selezionato puó essere modificato dal terminale: questo é dovuto al fatto che abbiamo selezionato Modify Mode nell'oggetto VALUE. Per inserire o modificare il testo dalla pagina terminale é sufficiente premere il tasto INS, e confermare l'inserimento con il tasto ENTER, che fa uscire dalla fase di Data Entry. Vediamo come si presenta il terminale durante il funzionamento:

Se andiamo a verificare i valori dell'array abARRS (ad es. con QView) noteremo che:

Questo significa che anche da QCL potremmo modificare quanto appare nel terminale. Se ad esempio scriviamo il valore 49 nell'elemento abARRS[886], il testo che appare nel terminale é “ULTIM1 ELE…” in cui il carattere “O” é stata sostituita dal carattere “1”. Questo dimostrata la grande flessibilità e interoperabilitá tra terminale e QMove.

Vediamo con questo esempio come generare degli eventi a scadenze prefissate, facendo uso dell'evento OnTime. Questo é utile per avvisare l'operatore sulla necessitá di effettuare determinati interventi, ad esempio di manutenzione o di controllo, che devono essere eseguiti a scadenze o a date fisse.

Supponiamo, per semplificare le cose, di avere una sola pagina del terminale che descrive il funzionamento in corso, e di avere invece 3 pagine di avviso su operazioni da compiere; queste pagine saranno attivate in determinati momenti. Una pagina (1) indica di provvedere ad operazioni di ingrassaggio motore, una (2) indica di eseguire operazioni di manutenzione e pulizia filtri, la (3) ricorda di effettuare un backup dei dati di lavoro della macchina. Vogliamo che queste pagine vengano attivate rispettivamente: per la pagina (1) ogni mese, al giorno 15, alle ore 12; per la pagina (2) ogni mese 1, 4, 7 e 10 (operazioni trimestrali), per la pagina (3) ogni giorno alle ore 17:30. Tutte le operazioni che coinvolgono l'evento OnTime fanno riferimento al timer del terminale, che é possibile impostare nella pagina Info, ed é possibile leggere usando le variabili terminale $YEAR, $MONTH, $DAY, $HOUR, $MIN, $SEC.

Vediamo come poter fare tutto questo. La pagina di lavoro é cosí strutturata:

Per visualizzare la data e l'ora abbiamo usato 5 oggetti di tipo VALUE in cui come Base si sono definite rispettivamente le variabili terminale $DAY, $MONTH per la data e $HOUR, $MIN, $SEC per l'ora. La pagina delle proprietá di una di queste appare cosí:

E' stata abilitata la modalitá “Enable Lead Zero Blank” in modo da far precedere i numeri con una cifra dallo zero. In questo modo la data viene rappresentata ad es. 15/07 al posto di 15/7 come sarebbe invece se tale modo non fosse stato abilitato. Analogamente si procede per le altre variabili. Questa indicazione ci serve per poi testare il funzionamento del terminale e verificare se quanto abbiamo programmato viene effettivamente eseguito.
Il passaggio alle varie pagine di avviso viene impostato usando eventi globali: questo perché potrebbero esserci piú pagine che descrivono il normale funzionamento della nostra macchina e noi vogliamo essere sicuri che gli eventi temporali vengano segnalati sempre, in qualsiasi punto ci troviamo. Vediamo come si presenta la finestra degli eventi globali:

Vediamo che ci sono solo eventi di tipo OnTime; nella figura é rappresentato l'evento che attiva la pagina “Motore” ogni giorno 15, alle ore 12. Analizziamo le proprietá dell'evento OnTime; esse sono: Month, Day, Hour e Minute. Se nessuna di queste é selezionata, l'evento non viene mai generato, é come se non esistesse. Se invece é selezionato qualcosa, l'evento accade quando la proprietá in esame assume per la prima volta il valore impostato. Se vi sono piú proprietá selezionate, l'evento é generato quando si verifica la combinazione dei valori delle proprietá stesse. In questo esempio quando Day assume il valore 15 e quando Hour assume il valore 12 l'evento viene generato e come azioni conseguenti si passa alla pagina “Motore” e si fa lampeggiare il led F1. Combinando opportunamente le quattro proprietá possiamo gestire una qualsiasi temporizzazione, con la precisione del minuto. Una cosa da ribadire é che é il valore della proprietá che determina la generazione dell'evento, quindi se vogliamo generare degli eventi che cadono mensilmente, non dobbiamo lavorare sulla proprietá Month, come potrebbe sembrare a prima vista, ma su Day, in quanto l'evento si verificherá ogni volta che tale proprietá assume il valore da noi specificato (e questo vuol dire allo stesso giorno di ogni mese). Cosí dicasi se vogliamo degli eventi giornalieri: dobbiamo lasciare non selezionata la proprietá Day e lavorare invece su Hour e Minute, in modo che alla stessa ora di ogni giorno si verifichi l'evento. Vediamo gli altri eventi; il passaggio alla pagina di salvataggio dati viene fatto, come si vede, ogni volta che la var H (Hour) assume il valore 17 e la var M (Minute) il valore 30; ció vuol dire che ogni giorno, alle ore 17:30 apparirá l'avviso di salvare i dati di lavoro. Le altre impostazioni invece riguardano l'avviso di pulizia filtri, che avviene ogni 3 mesi, come si vede dalle impostazioni della variabile MM (Month); l'evento viene generato quando la var Month assume i valori 1, 4, 7 e 10. E' da ricordare inoltre che l'evento é generato nel momento del “passaggio” ai valori impostati, per cui se non si rileva questo passaggio (es. il terminale é spento) l'evento non sará piú rilevabile. Nell'esempio poi ad ogni passaggio pagina viene fatto lampeggiare un led diverso, che servirà nelle pagine di avviso per indicare quale tasto funzione premere dopo aver eseguito l'operazione e tornare nella pagina di “macchina in funzione”. Vediamo come si presenta una pagina di avviso (le altre sono analoghe e non verranno descritte in dettaglio):

Gli eventi di pagina vengono cosí impostati:

Premendo il tasti F1, il cui led lampeggia, si torna alla pagina di funzionamento e si spegne il led F1. Inoltre, dato che questa é una pagina di avviso a cui vi si arriva solo a scadenze fissate, sono stati sovrascritti i tasti PGUP e PGDN, in modo che l'unico modo per uscire sia quello di usare il tasto funzione. Lo stesso succede per le altre pagine di avviso, di cui vediamo la rappresentazione

Con questo esempio vediamo come realizzare una pagina iniziale di presentazione temporizzata (ad es. con un logo) in modo che l'avvio del programma su terminale e quello su QMove si sincronizzino. Ció che vogliamo ottenere é che la partenza dei due programmi sia contemporanea, indipendentemente dall'ordine di accensione di terminale o QMove. Vediamo intanto la nostra pagina con il logo; essa potrebbe essere:

Vogliamo che all'accensione appaia questa pagina, che resti visualizzata per 5 secondi e poi passi alla pagina successiva, dove inizia il normale funzionamento del nostro applicativo terminale; nel nostro esempio vi sará solo una pagina che non fa niente (appare solo un testo), ma la cosa é assolutamente ininfluente sul funzionamento della pagina temporizzata. Intanto vediamo come inserire un'immagine .BMP in una pagina di terminale. Per ogni progetto .QT3 c'é la possibilitá di creare una galleria di immagini che possono essere utilizzate nel progetto stesso e che vengono scaricate nel terminale durante la fase di download. Per costruire questa raccolta occorre utilizzare la funzionalitá offerta dal menu “Graphics \ Image Manager” di QPaint, che fa apparire questa finestra:

Image Manager, come dice il nome stesso, permette di gestire la libreria di immagini legate al progetto QT3 in esame. Inizialmente tale libreria é vuota ed é abilitato il solo pulsante Add, che permette di aggiungere una immagine .BMP alla lista; tale immagine deve essere monocromatica, altrimenti QPaint lo segnala con un errore. Usando la funzione Add, appare una dialog box in cui si puó scegliere un file .BMP; una volta selezionato il file la dialog box si chiude e la finestra Image Manager appare cosí modificata:

Come si vede, a sinistra appare la lista delle immagini presenti; ad ogni immagine viene dato un nome di default (Picturennn dove nnn é un numero relativo alla prima posizione libera nella lista) che é possibile modificare usando il pulsante Rename. Al centro appare il Preview dell'immagine appena inserita in lista, con le sue dimensioni. Sulla destra i tasti con le funzioni possibili; abbiamo giá visto Add e Rename, Delete effettua la rimozione dalla lista dell'immagine selezionata. Con OK si conferma l'inserimento della nuova immagine nella lista. Una volta fatto questo, per poter effettivamente aggiungere l'immagine nella pagina prescelta, occorre selezionare un Image Object e posizionare l'oggetto stesso facendo click nel punto desiderato della pagina. Appare quindi questa finestra:

in cui é possibile selezionare dalla lista di immagini costruita con Image Manager, quella che ci interessa. E' possibile anche impostare la posizione indicando il valore di Left e Top che corrispondono alle coordinate dell'angolo superiore a sinistra dell'immagine.

Quindi abbiamo completato la nostra pagina aggiungendo un box per lo sfondo e un paio di oggetti String per I testi.

Per ottenere la sincronizzazione del funzionamento di terminale e Qmove, dobbiamo avere alcune variabili che contengano lo stato in cui si trovano i due dispositivi. Vediamo come va scritto l'applicativo QCL che ci permette questo.
Usiamo variabili GLOBAL, in modo che ad ogni restart dell'applicativo o riacensione di Qmove vengano inizializzate a zero.

;-------------------------------------------------------------------
; Definizione Variabili GLOBAL
;-------------------------------------------------------------------
...
gfTerminale F                ;Verifica la presenza del terminale
gfRun F                      ;Indica che il terminale non é nella pagina di presentazione
gfQMove F                    ;Utilizzata per l'uscita dalla pagina iniziale di logo
...
 
;-------------------------------------------------------------------
; Definizione Variabili TIMER
;-------------------------------------------------------------------
...
tmLogo                       ;Timer per tempo pagina di presentazione
...

E viene anche definita una variabile TIMER tmLogo che ci servirá per impostare il timeout di cambio pagina.
Nel codice task avremo le seguenti istruzioni

;-------------------------------------------------------------------
; Operazioni di Inizializzazione TASK
;-------------------------------------------------------------------
 
WAIT gfTerminale             ;Verifica la presenza del terminale
tmLogo = 5000                ;imposta la temporizzazione della
                             ;pagina
 
;-------------------------------------------------------------------
; Programma Principale
;-------------------------------------------------------------------
MAIN:
 
IF (tmLogo AND NOT gfRun)    ;verifica il timeout
    gfQMove = 1              ;serve per il cambio pagina in QPaint
    gfRun = 1                ;evita di rientrare in questa parte dopo il tempo tmLogo
ENDIF
 
IF (gfRun EQ 1)              ;una volta scaduto il timeout
    tmLogo = 5000            ;serve per tenere tmLogo a zero e poter effettivamente vedere il cambio di gfQMove
ENDIF
 
IF (gfRun EQ 1)              ;Condizione per stabilisce se il terminale ha terminato la presentazione
    ...
    ...                      ;Codice task sincronizzato con il terminale
 
ENDIF
 
WAIT 1
JUMP MAIN
END

Durante la fase di inizializzazione l'applicativo QCL attende che il terminale sia nella pagina di presentazione verificando il valore di gfTerminale. Vedremo che il valore di questa variabile viene impostato a 1 da un evento OnAlways sulla pagina iniziale; quindi si imposta la variabile TIMER tmLogo con valore di 5000 (5 sec) che é quello che abbiamo scelto prima di passare alla pagina successiva. Nel programma principale poi avviene il controllo sia sullo scadere del timeout sia sullo stato dell'applicativo, in modo da non ripetere piú tale controllo se é giá stato fatto una volta. All'inizio la variabile gfRun (essendo GLOBAL) é a zero, quindi dato che il controllo é fatto sul suo valore negato, l'istruzione IF dipende solo dal valore di tmLogo, che diventa 1 solo quando il timeout é scaduto, cioé dopo 5 sec dall'accensione del terminale. Una volta scaduto il timeout viene impostata a 1 la variabile gfQMove, che determina il cambio pagina nel terminale, e anche la var gfRun in modo che al ciclo successivo non si entri piú in questo ramo dell'IF e in modo da indicare all'applicativo che il terminale non sia piú in pagina di presentazione. Poi si deve sempre impostare tmLogo finché gfRun é a 1, in modo da essere pronti nel caso in cui si faccia il Restart dell'applicativo e si spenga il terminale. (Nota: non é possibile impostare una variabile TIMER da QPaint, per questo lo abbiamo fatto qui).

Vediamo ora come il terminale gestisce queste variabili. Le condizioni che si verificano sono: gfQMove = 0 quando il terminale si trova nella pagina “logo”, gfQMove = 1 quando il terminale si trova in un'altra pagina. Quando la var gfQMove passa a zero (e questo vuol dire che la CPU é stata reinizializzata) si vuole che il terminale si riporti alla pagina “logo”, parta il timeout e si ricominci.

Nella pagina “logo” avremo pertanto questi eventi di pagina, con le relative azioni:

All'accensione il valore di gfQMove é zero, e il suo passaggio a 1 avviene quando é scaduto il timeout e l'applicativo QCL ne assegna il valore; questo cambio di valore fa passare il terminale alla pagina successiva. Quando invece si entra nella pagina “logo” si resettano i valori di gfQMove e gfRun, in modo da verificare lo scadere del timeout e poter far scattare il cambio pagina con il cambio di valore di gfQMove. Infine l'evento OnAlways imposta la var gfTerminale sempre a 1 quando ci si trova nella pagina iniziale; questo dá il segnale all'applicativo QCL che il terminale é OK e si puó far partire il timeout. Nella pagina di lavoro, e in tutte le pagine da cui si vuole uscire per tornare alla pagina “logo” ogni volta che si fa il restart della CPU, occorre verificare il cambio valore della variabile gfQMove e associare un salto pagina alla pagina “logo”. Infine, per impedire il passaggio dalla pagina “di lavoro” alla pagina di logo con il tasto PgUp basta soprascrivere la pressione del tasto PGUP non associando alcuna azione. Cosí l'unico modo per arrivare alla pagina di logo é o all'accensione o ad ogni restart della CPU.

Vediamo ora il comportamento in alcune condizioni:

  • Accensione del sistema Qmove prima del terminale. In questo caso il task rimane in attesa

dell'accensione del terminale per l'istruzione di WAIT sulla variabile gfTerminale. Poi allo scadere dei 5 sec. la variabile gfRun viene impostata e l'applicazione utente inizia ad essere eseguita.

  • Accensione del terminale prima del sistema Qmove. In questo caso il terminale non

potendo comunicare con il sistema, continua a tentare la connessione. Non appena il sistema viene acceso il terminale trovando la connessione attiva esegue la scrittura della variabile gfTerminale e poi il funzionamento rimane quello descritto precedentemente.

  • Durante il normale funzionamento il sistema viene spento e riacceso. In questo caso il

terminale torna nella pagina di presentazione perché la variabile gfQMove si trova ad assumere il valore zero. Poi il comportamento rimane il medesimo.

  • Durante il normale funzionamento il terminale viene spento e riacceso. Alla riaccensione

del terminale la variabile gfRun viene posta a zero interrompendo ogni operazione nell'applicativo (o segnalando all'applicativo che il terminale é stato riattivato). Dopo 5 sec. il terminale si porta nella pagina di funzionamento.

0.11.11.1 Animazione utilizzando VALSTRING e VALUE

Con questo esempio vediamo come realizzare una semplice animazione, sfruttando gli oggetti VALSTRING e VALUE (con Array a Byte) e nuovi font creati appositamente, ottenuti a partire da copie dei file bitmap contenenti i font di sistema esistenti. Inoltre sfrutteremo alcune immagini bitmap create ad hoc. L'esempio richiede alcuni passi, che descriveremo in dettaglio uno per uno. Ció che si vuole ottenere é un semplice sinottico, che visualizza il funzionamento di 2 pompe che, alternativamente, sono collegate ad un serbatoio di raccolta. L'animazione consiste nel visualizzare le pompe in funzione, il flusso di liquido attraverso le tubazioni, l'impianto in riposo con le tubazioni chiuse da valvole. Ecco subito come risulta l'effetto finale e poi vediamo come realizzarlo.

Impianto in condizioni di STOP
Impianto con pompa 1 in funzione In evidenza le parti che si vedranno “in movimento” nel pannello terminale.
Impianto con pompa 2 in funzione In evidenza le parti che si vedranno “in movimento” nel pannello terminale

La realizzazione dell'animazione é fatta nell'applicativo QCL, che descriveremo in seguito, mentre in QPaint c'é soltanto la gestione dei tasti F1, F2 e F3, insieme, ovviamente, all'utilizzo dei vari oggetti sia statici che dinamici che compongono questa pagina.

Vediamo ora come appare la pagina nel progetto QPaint, indicando quali oggetti sono stati utilizzati per creare l'effetto finale; come si nota appare leggermente diversa da quella che si vede in fase di esecuzione!

Per ottenere un'animazione sono utilizzabili piú oggetti diversi; procediamo con ordine.

Pompa: é stato utilizzato un oggetto Valstring che, si ricorda, é un oggetto dinamico che ha la possibilitá di visualizzare stringhe di testo diverse in funzione del valore posseduto dalla variabile collegata all'oggetto stesso. In questo caso viene visualizzato un solo carattere. Rispettivamente le variabili associate ai due oggetti ValString rappresentanti le pompe si chiamano gfPump01ON e gfPump02ON, sono di tipo Flag e dovranno essere definite nell?applicativo QCL. Per ottenere il movimento della pompa si associano 2 caratteri diversi ai 2 valori che decidiamo potrá assumere la variabile collegata e in fase di esecuzione si assegnano alternativamete questi due valori. Come si vede peró questi 2 caratteri sono in realtá due simboli grafici. Come fare per ottenere ció ? Occorre definire un proprio font personalizzato, dove al posto dei soliti caratteri alfanumerici di tastiera possiamo sostituire dei disegni, come appunto in questo caso. La posizione in cui saranno introdotti nel font, determinerá quale carattere della tastiera premere affinché siano visualizzati.
Vediamo intanto la finestra delle proprietá dell'oggetto ValString per la pompa 1 (é assolutamente identico per la pompa 2 a parte la variabile collegata), con il carattere per il valore 0 e per il valore 1.
Durante l'esecuzione gli oggetti ValString vengono continuamente rinfrescati e quindi, alternando il valore tra 0 e 1 della variabile gfPump01ON, si visualizzano alternativamente i due “testi” relativi ai due valori. Questo continuo refresh rende l'animazione.

Come detto sopra, per far sí che al posto di un carattere appaia un simbolo grafico, occorre usare un font personalizzato, derivato da un file bitmap, e nel quale si modificano alcuni caratteri. Per la pompa 1 sono stati “sovrascritti” i caratteri “$” e “%”, mentre per la pompa 2 i caratteri “!”e “#”. Tutto qui. Vediamo come creare un font personalizzato; innanzitutto partiamo da un file bitmap. Utilizziamo la copia di uno di quelli che si trovano nella directory Fonts di QPaint30, e scegliamo “QEM System Large Font.bmp” che visualizza dei caratteri di dimensione 24 x 27 pixel. Se volessimo utilizzare un altro bitmap, con dimensione dei caratteri diversa e magari di nostra ideazione, possiamo farlo a patto di suddividere il bitmap in 14 righe e 16 colonne, perché questo é il formato richiesto dalla funzione di menú “Graphics\New Font From” presente in QPaint. Ogni elemento di questa suddivisione rappresenta un carattere. Inoltre dobbiamo ricordarci che il bitmap deve essere monocromatico (bianco e nero). Ad esempio, se volessimo costruire un font con caratteri di dimensione 12 x 15 pixel dovremmo creare un bitmap di larghezza 12*16 (n. colonne) = 192 e di altezza 15 x 14 (n. righe) = 210.

Il bitmap rappresentante i Large Font, che utilizzeremo per creare i caratteri visti sopra appare cosí:

C'é infine da dire che i caratteri sono disposti nel bitmap in ordine di codice, a partire dal codice 32 che corrisponde allo spazio bianco, fino al codice 255 che corrisponde a ÿ. Questo codice ci sará utile in seguito. Creiamo il nostro font personalizzato partendo da questo bitmap. Ne facciamo una copia e lo chiamiamo “Icon Font.bmp”; ora lo editiamo e disegnamo, al posto dei caratteri !, #, $ e % i nostri nuovi simboli. Il bitmap alla fine apparirá cosí:

Abbiamo anche aggiunto due simboli che ci serviranno in seguito per il deviatore della tubazione. Una volta creato il bitmap occorre includerlo nel progetto QPaint tramite la funzione “Graphics\New Font From\Bitmap File”. La finestra che appare é questa:

Nella casella “Bitmap File Name” va indicato il nome del file BMP che si vuole usare come nuovo Font. Il tasto a destra “File” permette di selezionarlo tramite la finestra di dialogo di Windows. Nella casella “Terminal Font Name” va invece scritto il nome che vogliamo dare al font e che apparirá sempre in questo progetto nella lista dei font disponibili. Una volta scelto OK viene fatta la conversione e da questo momento in poi ogni volta che apriremo la finestra “Font Properties”, ci sará in lista anche “Icon 24x27s0” che é il nome interno dato da QPaint. “Icon” é il nome che avevamo digitato in fase di creazione, “24x27s0” ci ricorda la dimensione del font e lo spacing impostato.
Ritornando alla finestra “ValString Object Property Editor” vista sopra ora é facile capire che il font scelto per la stringa é proprio il nostro “Icon” e che la stringa scritta per il valore 0 é il carattere di tastiera “$” e per il valore 1 é il carattere “%”.

Tubazione in mandata delle pompe: per ottenere l'animazione di questa parte, che consiste nel visualizzare il fluido che si sposta, utilizziamo invece un oggetto Value, con una variabile Array byte con proprietá Alpha Mode attiva. Questo ci permette di visualizzare una stringa di caratteri variabile durante l'esecuzione e in cui é possibile modificare runtime anche un solo carattere. Trattandosi di una var array, il valore del singolo elemento rappresenta il carattere che sará visualizzato. Ad esempio il valore 32 visualizzerá uno spazio, il valore 48 il carattere “0” e cosí via. Per rappresentare questi caratteri creiamo un nuovo font, partendo dal bitmap “QEM System Small Font.bmp” e seguiamo la stessa procedura vista sopra. Il bitmap del nuovo font sará questo (é stato ingrandito per maggiore chiarezza):

Si vede che i primi caratteri sono stati sostituiti da quelli che ci serviranno per realizzare l'animazione delle tubazioni e le valvole. I codici che visualizzano tali simboli sono quelli da 32 a 37 compresi. Creiamo il nuovo font, partendo da questo bitmap, nel modo giá visto e lo chiamiamo “Flusso”; il nome completo che QPaint assegna a questo font é pertanto “Flusso 8x9s0”.

Per visualizzare la tubazione, come giá detto, si crea un oggetto Value, e lo si collega ad una variabile QCL di tipo Array Byte (in questo caso abFlx1) e si imposta la proprietá Alpha Mode. Il font prescelto é “Flusso” e la lunghezza dell'oggetto é di 4 caratteri.
Per la tubazione in uscita dalla pompa 2 si userá in maniera analoga un altro oggetto Value legato alla variabile abFlx2 dell'applicativo QCL. Anche in questo caso l'animazione é controllata dal codice task QCL, che analizzeremo tra breve. Infine anche la tubazione orizzontale che confluisce nel serbatoio é fatta nello stesso modo, utilizzando la variabile abFlx3.

Deviatore: dato che nel vostro esempio le due pompe lavorano in alternativa c'é bisogno di rappresentare un raccordo che colleghi la pompa che sta funzionando alla tubazione verticale. In questo caso si ottiene con un oggetto Value, con la modalitá Alpha Mode, di dimensione 1 e che é collegato alla variabile QCL abDev, che é un Array Byte. Il font utilizzato é “Icon” e i valori che assegnati alla variabile abDev saranno 39 per la pompa 1 e 38 per la pompa 2. Questi visualizzeranno I due “caratteri” corrispondenti agli opportuni bitmap rappresentanti le due posizioni del deviatore.

Tubazione verticale: per rappresentare questa parte é stata utilizzata una serie di oggetti ValString, disposti uno sull'altro, e collegati ciascuno ad un elemento di una variabile QCL di tipo array a byte che si chiama abTuboV. Il font usato é “Flusso”; il valore 0 rappresenta il carattere “tubo vuoto” (codice 34) mentre il valore 1 rappresenta il carattere “tubo pieno” (codice 35). La scelta di utilizzare un array deriva dal fatto che facilita la gestione dell'animazione da parte del codice task QCL. In tutto si tratta di 7 oggetti ValString; per il primo oggetto, il piú in basso nel disegno, si associa un carattere “valvola” (codice 37) al valore 2 in modo da visualizzare la situazione di impianto in Stop.

Con questo abbiamo creato e impostato tutti gli oggetti responsabili dell'animazione. Vediamo ora come usare eventi ed azioni per dare il via all'animazione. Usiamo i tasti F1 per dare lo start alla pompa1 e posizionare il deviatore, F2 per dare lo start alla pompa 2 e posizionare il deviatore, F3 per fermare l'impianto. Il resto viene lasciato all'applicativo QCL.

Come si vede vengono impostate 3 variabili QCL per lo Start delle 2 pompe e per lo Stop dell'impianto. Vediamo ora come il codice QCL si occupa di gestire l'animazione.

Innanzitutto occorre definire le variabili necessarie nel file .CNF

;------------------------------------------------------------------
; Definizione Variabili GLOBAL
;------------------------------------------------------------------
GLOBAL
...
...
gfPump01ON F               ;Gestisce l'animazione della pompa 1
gfPump02ON F               ;Gestisce l'animazione della pompa 2
gfStart01 F                ;Pompa 1 in funzione
gfStart02 F                ;Pompa 2 in funzione
gfStop F                   ;Stop impianto
gbStep B                   ;Var ausiliaria per cicli FOR
glSecondi L                ;Var per temporizzazione
...
...
 
;------------------------------------------------------------------
; Definizione Variabili GLOBAL
;------------------------------------------------------------------
ARRGBL
....
....
 
abDev B 5                  ;Deviatore
abFlx1 B 10                ;Tubo in mandata pompa 1
abFlx2 B 10                ;Tubo in mandata pompa 2
abFlx3 B 10                ;Tubo collettore serbatoio
abTuboV B 10               ;Tubo verticale
....
....
 
;------------------------------------------------------------------
; Definizione Variabili TIMER
;------------------------------------------------------------------
TIMER
...
...
tmSecondi                  ;Timer secondi
...
...

Sono stati usati degli array di dimensione maggiore a quella utilizzata dagli oggetti QPaint; questo non provoca alcuna conseguenza nel loro uso. Nel task vengono anche utilizzate due variabili (tmSecondi e glSecondi) per realizzare un contatore dei secondi di esecuzione dell'applicativo.

Nel task .MOD avremo invece:

.....
;ANIMAZIONE POMPA 1
IF (gfStart01 AND (abDev[1] EQ 39))     ;se la pompa1 é ON e "possiede"
                                        ;il deviatore
    gfPump02ON = 0
    gfPump01ON = glSecondi%2        ;Animazione pompa alternativamente
                                    ;imposta il valore di gfPump01ON a 0 e
                                    ;1, con ciclo di 1 secondo. Questo
                                    ;porta al refresh dell'oggetto
                                    ;ValString rappresentante la pompa1,
                                    ;ogni volta con 2 caratteri diversi.
                                    ; questo ciclo fa in modo che gli array
                                    ;rappresentanti le tubazioni assumano
                                    ;valori corrispondenti a caratteri
                                    ;"tubo vuoto"
    FOR (gbStep = 1, gbStep LE 10, 1)
      abFlx1[gbStep] = 32           ;Oggetto Value tubazione pompa1
      abFlx2[gbStep] = 32           ;Oggetto Value tubazione pompa2
      abFlx3[gbStep] = 32           ;Oggetto Value tubazione serbatoio
      abTuboV[gbStep] = 0           ;Oggetto ValString tubo verticale
    NEXT
    abFlx1[1+glSecondi%5] = 33
;imposta quale elemento dell'array deve rappresentare la parte di "tubo pieno" nella tubazione pompa1
    abFlx3[5-glSecondi%5] = 33
;imposta quale elemento dell'array deve rappresentare la parte di "tubo pieno" nella tubazione serbatoio
    abTuboV[1+glSecondi%8] = 1
;imposta quale elemento dell'array deve rappresentare la parte di "tubo pieno" nella tubazione verticale
    abFlx2[1] = 36
;imposta la visualizzazione della valvola nella parte di tubazione:pompa2
 
ENDIF
; GESTIONE DI UN CONTASECONDI
IF tmSecondi ;Timer da 1 Sec. terminato ?
    tmSecondi = 1000 ;Reload timer
    IF glSecondi LT 59 ;Controllo secondi
      glSecondi = glSecondi + 1 ;Incremento secondi
    ELSE
      glSecondi = 0
    ENDIF
ENDIF
.....

Per simulare lo scorrere del liquido nella tubazione occorre impostare in maniera sequenziale e ciclica, in questo caso ogni secondo, un elemento diverso dell'array in modo che visualizzi il carattere “tubo pieno”, mentre il resto dell'array deve rappresentare il “tubo vuoto”. Quindi prima si effettua un ciclo FOR, che serve per “pulire” le tubazioni e poi si passa ad impostare il solo elemento che contiene il carattere di “tubo pieno”. Con l'espressione 1+glSecondi%5 usata come indice di abFlx1, ad esempio, ad ogni secondo si incrementa di 1 il valore dell'indice con la sequenza : 1, 2, 3, 4, 5. Nel nostro caso l'elemento 5 non é visualizzato e questo fa sí che una volta che il fluido é arrivato alla destra del tubo, non riparta subito da sinistra, ma attenda un altro secondo. Questo rende migliore l'animazione. Dato che il fluido di questo tratto di tubo deve andare da sinistra verso destra, l'indice dell'array deve essere incrementato. Invece per la tubazione che confluisce nel serbatoio il fluido deve viaggiare da destra verso sinistra e quindi l'indice degli array deve decrescere; ecco che per abTuboV la sequenza di aggiornamento sará: 5, 4, 3, 2, 1. Anche in questo caso l'elemento 5 non é compreso nella visualizzazione. La stessa cosa accade per il tubo verticale: qui occorre avere un ciclo di lunghezza 8, dato che il tubo é composto da 7 oggetti ValString. Si noti che non si imposta il codice del carattere, ma il valore che la variabile deve assumere; 0 = tubo vuoto, 1 = tubo pieno. L'uso dell'array dá la possibilitá di gestire correttamente l'animazione. Infine per visualizzare la valvola nel tratto di tubo collegato alla pompa 2 e non utilizzato, si imposta il codice 36 che corrisponde appunto al carattere “valvola” nel primo elemento dell'array (visualizzato come il piú a sinistra).

Analogamente per il funzionamento della pompa2.

;ANIMAZIONE POMPA 2
IF (gfStart02 AND (abDev[1] EQ 38))
;se la pompa2 é ON e "possiede2 il deviatore
     gfPump01ON = 0
     gfPump02ON = glSecondi%2
;Animazione pompa2: alternativamente imposta il valore di gfPump02ON a
;0 e 1, con ciclo di 1 secondo. Questo porta al refresh dell'oggetto
;ValString rappresentante la pompa2, ogni volta con i 2 caratteri
;diversi.
;questo ciclo fa in modo che gli array rappresentanti le tubazioni
;assumano valori corrispondenti a caratteri "tubo vuoto"
 
  FOR (gbStep = 1, gbStep LE 10, 1)
     abFlx1[gbStep] = 32 ;Oggetto Value tubazione pompa1
     abFlx2[gbStep] = 32 ;Oggetto Value tubazione pompa2
     abFlx3[gbStep] = 32 ;Oggetto Value tubazione serbatoio
     abTuboV[gbStep] = 0 ;Oggetto ValString tubo verticale
  NEXT
 
     abFlx2[5-glSecondi%5] = 33
;imposta quale elemento dell'array deve rappresentare la parte di
;"tubo pieno" nella tubazione pompa2
     abFlx3[5-glSecondi%5] = 33
;imposta quale elemento dell'array deve rappresentare la parte di
;"tubo pieno" nella tubazione serbatoio
     abTuboV[1+glSecondi%8] = 1
;imposta quale elemento dell'array deve rappresentare la parte di
;"tubo pieno" nella tubazione verticale
     abFlx1[4] = 36
;imposta la visualizzazione della valvola nella parte di tubazione
;pompa1 (va nell'elemento piú a destra)
ENDIF
 
 
Infine quando l'impianto é in Stop si resetta tutto
 
; STOP IMPIANTO
IF (gfStop)
     gfStop = 0
     gfPump01ON = 0
     gfPump02ON = 0
     gfStart02 = 0
     gfStart01 = 0
     abDev[1] = 32         ;al posto del deviatore si scrive uno spazio
 
     FOR (gbStep = 1, gbStep LE 10, 1)
        abFlx1[gbStep] = 32
        abFlx2[gbStep] = 32
        abFlx3[gbStep] = 32
        abTuboV[1+glSecondi%8] = 0
     NEXT
 
     abFlx1[4] = 36        ;valvola alla fine della tubazione pompa1
     abFlx2[1] = 36        ;valvola alla fine della tubazione pompa2
     abTuboV[1] = 2        ;valvola nalla parte bassa tubo verticale
 
ENDIF

0.11.11.2 Animazione utilizzando VALIMAGE

È stato inserito un nuovo oggetto di disegno chiamato ValImage. Tramite ValImage è possibile realizzare animazioni in modo piú semplice che in passato. L'oggetto ValImage utilizza l'archivio di immagini disponibili nel progetto e gestito tramite il menú Graphics-

Image Manager per visualizzare un set di immagini associate ad un range di valori di una

variabile presente in QMove o nel terminale stesso.
Differentemente dalla precedente tecnica dei font utente con immagini + oggetto ValString, ValImage è piú veloce da implementare, utilizza minor memoria terminale ed è piú semplice da gestire.
Con questo esempio vediamo come realizzare una semplice animazione, sfruttando l'oggetto VALIMAGE. Inoltre sfrutteremo alcune immagini bitmap create ad hoc. L'esempio richiede alcuni passi, che descriveremo in dettaglio uno per uno. Ció che si vuole ottenere é la semplice visualizzazione di un indicatore analogico la cui lancetta si porta a vari valori a seconda del valore assunto dalla variabile associata.
Ecco come risulta l'effetto finale e poi vediamo come realizzarlo.

Vediamo ora come operare per creare l'animazione. GAUSS: Inanzitutto bisogna creare un numero di immagini bitmap pari al numero di valori che si ritiene di visualizzare , nel nostro caso sono state create solo 5 immagini , quindi solo 5 valori della variabile di riferimento avranno il loro valore visualizzato ,per tutti i valori intermedi non si visualizzerà alcuna immagine.
In realtà le immagini sarebbero 101 per visualizzare lo scorrere dell'indicatore su tutta la scala ma per motivi di spazio non sono state riportate tutte.

Nel campo di introduzione “First image” viene inserito il valore della variabile corrispondente alla prima immagine che si vuole visualizzare.
Se il valore è zero come nel nostro caso quando la variabile di riferimento assume il valore zero viene visualizzata la figura legata a quel valore.
Nel campo di introduzione “Max Images” riportiamo il numero di immagini che intendiamo visualizzare , naturalmente questo valore risulterà essere uguale o minore al numero di immagini bitmap generate per la visualizzazione.
Se infatti le immagini sono in numero minore rispetto al massimo valore assumibile dalla variabile di riferimento , al posto dell'immagine verrà visualizzato uno spazio privo di immagine.

Agendo sui tastini “freccia up” e “freccia down” presenti in corrispondenza del campo introduzione “Image Number” vengono selezionati uno per uno i valori assunti dalla variabile di riferimento ai quali viene associata un'immagine.
Per associare l'immagine al valore specifico della variabile di riferimento basta semplicemente agire sul tasto freccia presente in corrispondenza del campo introduzione “Image Name” e selezionare il nome della variabile che interessa.
L'immagine richiamata verrà visualizzata per un preview in una zona apposita della finestra.
Naturalmente le immagini dovranno essere state create con apposita procedura in GRAFIC Image Manager come descritto a pagina 50 del presente manuale.

Nella zona della finestra definita “Coordinates and Sizes” sono riportate le misure dell'immagine visualizzata e le coordinate della posizione dell'immagine stessa.

Per selezionare la variabile di riferimento basterà cliccare con il mouse su “TABVARIABLES”.

Entrati nella pagina presente su “Base” si può impostare la variabile di riferimento per la visualizzazione delle immagini o per l'animazione delle stesse.
Una volta generato il programma sul terminale non resta che gestire la variabile nel progetto QView per poter visualizzare la lancetta dell'indicatore in movimento.

In questo esempio vediamo come realizzare una semplice pagina in cui poter eseguire le operazioni di Backup e Restore dei dati ritentivi di QMove. L'unica cosa da ricordare é che l'operazione di Restore puó essere fatta solo dopo aver effettuato l'operazione di backup e fino a che non si effettua un nuovo download dell'applicativo, dopo di che il Restore provoca un errore. Questo viene segnalato dal terminale con il lampeggio del led “status” e con l'informazione “Restore error” nella Info Page alla voce “Comunic. status”. L'impossibilitá di poter fare il Restore dopo un download deriva dal fatto che potremmo aver scaricato un applicativo diverso da quello cui si riferiscono i dati salvati con il Backup, che quindi potrebbero non avere piú senso con la nuova situazione. Detto questo costruiamo una semplice pagina, con alcuni oggetti VALUE che servono per verificare la correttezza delle operazioni:

I 3 oggetti VALUE hanno tutti la proprietá “Enable Modify Mode” abilitata, in modo da poterli modificare da terminale; esaminiamo in particolare solo la variabile asARRS[2], perché si tratta di un array di tipo Single, in cui vediamo come visualizzare variabili con decimali.

Come si vede é stato impostato il valore relativo al decimal point che rappresenta il numero di cifre decimali che vogliamo visualizzare per la variabile. E' stato abilitato il segno e, come giá anticipato, la possibilitá di poter modificare il valore. Ora dobbiamo associare opportunamente le azioni di Backup e Restore a due tasti funzione.
La cosa é veramente semplice: nella finestra relativa agli eventi locali creiamo degli eventi OnPress sui tasti F1 e F2 ed associamo rispettivamente le azioni di Backup e Restore. Il passaggio alla fase di Data Entry con il tasto INS é invece di default e quindi non serve alcun evento collegato a tale tasto.

Una volta scaricata l'applicazione su terminale, impostiamo dei valori nelle 3 variabili, premendo INS per entrare in Data Entry; il valore relativo a swWord lampeggia e ció indica che é possibile modificarlo. Con il tasto ENTER si conferma l'introduzione e si passa al campo successivo, e cosí fino all'ultimo. Da qui con ENTER si ripassa al primo campo e cosí via in maniera ciclica. E' possibile spostarsi tra i vari campi di inserimento anche con i tasti cursore: in questo caso peró i dati inseriti vengono persi. Una volta completata l'impostazione delle variabili, possiamo salvarli effettuando un Backup, con il tasto F1. Quindi li modifichiamo nuovamente, impostando dei nuovi valori; a questo punto premendo il tasto F2, viene eseguito il Restore e i dati ritorneranno quelli impostati in precedenza.
Sia per l'operazione di backup sia per quella di restore, la mancata esecuzione del comando viene segnalata dal terminale con il lampeggio del led “status” e con l'informazione ripetitivamente “Backup error” e “Restore error” nella Info Page alla voce “Comunic. status”.
Il comando di restore trova la sua giusta utilitá in caso di sprogrammazione dati nel sistema QMove. In questa situazione infatti il comando restore permette di ripristinare il normale funzionamento del sistema (se ovviamente era stato fatto preventivamente il bakup).

  • Ultima modifica: 2019/08/29 17:01