Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ABB Robotica
Manuale applicativo
SDK FlexPendant
Machine Translated by Google
Rintracciare le informazioni:
Area di lavoro RW 5-15-01 versione a2
Controllato nel 15-03-2013
Skribenta versione 1184
Machine Translated by Google
Manuale applicativo
SDK FlexPendant
RobotWare 5.15
ID documento: 3HAC036958-001
Revisione: B
Le informazioni contenute in questo manuale sono soggette a modifiche senza preavviso e non devono
essere interpretate come un impegno da parte di ABB. ABB non si assume alcuna responsabilità per
eventuali errori presenti nel presente manuale.
Fatto salvo quanto espressamente indicato in qualsiasi parte del presente manuale, nulla di quanto
contenuto nel presente documento dovrà essere interpretato come alcun tipo di garanzia da parte di
ABB per perdite, danni a persone o proprietà, idoneità per uno scopo specifico o simili.
In nessun caso ABB sarà responsabile per danni incidentali o consequenziali derivanti dall'uso del presente
manuale e dei prodotti in esso descritti.
Questo manuale e parti di esso non possono essere riprodotti o copiati senza il consenso scritto di
ABB.
Ulteriori copie di questo manuale possono essere ottenute da ABB.
La lingua originale di questa pubblicazione è l'inglese. Tutte le altre lingue fornite sono state tradotte
dall'inglese.
Sommario
Panoramica di questo manuale................................................ .................................................... ....................
7 Documentazione del prodotto, M2004 .................... .................................................... ....................9
Sicurezza.................. .................................................... .................................................... .................... 11
1. Introduzione 13
1.1 Informazioni sulla creazione di applicazioni controller................................ .................. 13 1.2
Documentazione e aiuto .................. .................................................... .............. 15 1.3
Terminologia .................................... .................................................... ..............17
3HAC036958-001 Revisione: B 5
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Sommario
Indice 217
6 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica di questo manuale
FlexPendant - Software Development Kit (FlexPendant SDK) è uno strumento software che consente
ai programmatori di sviluppare interfacce operatore FlexPendant personalizzate per il controller del robot
IRC5.
Lo scopo di questo manuale è aiutare gli sviluppatori di software a iniziare con lo sviluppo di
applicazioni SDK FlexPendant.
Utilizzo
Il manuale dell'applicazione FlexPendant SDK copre lo sviluppo dell'applicazione utilizzando FlexPendant
SDK. FlexPendant SDK è destinato allo sviluppo di applicazioni per l'utente finale basate su FlexPendant.
PC SDK è uno strumento per lo sviluppo di applicazioni per l'utente finale basate su PC (PC implica una
macchina Windows in questo contesto). Per ulteriori informazioni su PC SDK, consultare il manuale
dell'applicazione PC SDK. Il processo di sviluppo effettivo dell'applicazione prevede l'utilizzo di un PC
con Visual Studio sia per le applicazioni PC SDK che per quelle FlexPendant SDK.
Questo manuale è destinato principalmente agli sviluppatori che utilizzano FlexPendant SDK per creare
applicazioni robot adatte alle esigenze dell'utente finale. È utile anche per chiunque abbia bisogno di
una panoramica delle applicazioni del controller.
Prerequisiti
Il lettore dovrebbe
per Microsoft Visual Studio e programmazione Windows. • avere familiarità con uno
3 Architettura software: ambiente runtime per applicazioni FlexPendant. Ciclo di vita di un'applicazione
FlexPendant. Aggiornamenti e compatibilità.
5 Utilizzando l'SDK FlexPendant. Supporto alla progettazione visiva. Controlli della GUI. Avvio delle
visualizzazioni standard. . Come aggiungere funzionalità del controller utilizzando l'API Controller.
Problemi di programmazione ed esempi di codice in VB e C#.
Continua
7 Test, debug e risoluzione dei problemi delle applicazioni SDK FlexPendant. Utilizzando
stampe, codici di errore nelle eccezioni e così via. Lista di controllo per contattare un servizio
organizzazione.
Riferimenti
Riferimento Documento d'identità
Revisioni
Revisione Descrizione
- Prima edizione
UN Modifiche editoriali
B Aggiornato il valore della RAM nella tabella delle risorse di memoria FlexPendant . Vedere
Quanto può essere grande un'applicazione personalizzata? a pagina 166.
8 3HAC036958-001 Revisione: B
• Informazioni sulla
• Smantellamento. •
• Elenco parti di ricambio con viste esplose (o riferimenti a parti di ricambio separate
elenchi).
• Manuale tecnico di riferimento - Istruzioni, funzioni e tipi di dati RAPID: descrizione e sintassi per
tutte le istruzioni, funzioni e tipi di dati RAPID.
• Manuale tecnico di riferimento - Kernel RAPID: una descrizione formale del linguaggio di
programmazione RAPID. • Manuale
Continua
Manuali operativi
I manuali operativi descrivono la manipolazione pratica dei prodotti. I manuali sono
rivolti a chi ha un contatto operativo diretto con il prodotto, ovvero operatori di celle di
produzione, programmatori e problem solving.
Il gruppo dei manuali comprende (tra gli altri):
• Manuale operativo - Informazioni di emergenza sulla
sicurezza • Manuale operativo - Informazioni generali
sulla sicurezza • Manuale operativo - Nozioni di base, IRC5 e
RobotStudio • Manuale operativo - Introduzione
a RAPID • Manuale operativo - IRC5 con
FlexPendant • Manuale operativo -
RobotStudio • Manuale operativo - Risoluzione dei problemi IRC5 , per il controller e il manipolatore.
10 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Sicurezza
Sicurezza
Pertanto, è importante seguire tutte le norme di sicurezza quando si entra nello spazio protetto.
Norme di sicurezza
Prima di iniziare a lavorare con il robot, assicurarsi di conoscere le norme di sicurezza descritte nel
manuale Manuale operativo - Informazioni generali sulla sicurezza.
3HAC036958-001 Revisione: B 11
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
1. Introduzione
1.1 Informazioni sulla creazione di applicazioni controller
I robot vengono generalmente forniti con un'interfaccia operatore generale. Tuttavia, processi diversi
richiedono una gestione diversa da parte dell'operatore e i clienti necessitano di soluzioni flessibili in cui
l'interfaccia utente sia adattata alle esigenze specifiche dell'utente.
FlexPendant SDK consente agli integratori di sistema, a terze parti o agli utenti finali di aggiungere le proprie
interfacce operatore personalizzate per il controller IRC5. Tali applicazioni personalizzate possono
essere aggiunte alle visualizzazioni standard della FlexPendant.
Nota
Le applicazioni del controller non sono indipendenti dalla piattaforma. È necessario scegliere di sviluppare
l'applicazione per FlexPendant o per la piattaforma PC (per ulteriori informazioni, vedere
Manuale dell'applicazione - PC SDK).
La differenza tra le due piattaforme è che un'applicazione FlexPendant è un client locale, mentre
un'applicazione PC è un client remoto.
I client remoti non dispongono di tutti i privilegi di un client locale. Ad esempio, sia le applicazioni PC che
quelle FlexPendant possono reimpostare il puntatore del programma e avviare l'esecuzione RAPID, ma per
un'applicazione PC SDK che può eseguire questa operazione esistono alcune restrizioni. La padronanza
del dominio Rapid deve essere richiesta esplicitamente dal programmatore dell'applicazione e il controller
IRC5 deve essere in modalità operativa automatica.
Un vantaggio di un client remoto, invece, è la possibilità di monitorare e accedere a più controller di robot
da un'unica posizione. Per quanto riguarda le applicazioni di grandi dimensioni, anche la piattaforma PC è
meno limitata della FlexPendant per quanto riguarda le risorse di memoria e la potenza di processo.
Nota
Si prevede che un tempo di risposta minimo per un controller reale sia nell'ordine di 10-100 millisecondi,
il che significa che le difficili richieste di tempo reale non possono essere soddisfatte su nessuna
piattaforma. Per ulteriori informazioni, vedere Comunicazione tra FlexPendant e controller a pagina
37.
FlexPendant SDK consente interfacce utente personalizzate per IRC5. È importante tenere presente, tuttavia,
che lo stesso FlexPendant SDK non garantisce un aumento
Continua
valore per il consumatore. Per raggiungere questo obiettivo, le applicazioni SDK FlexPendant
dovrebbero essere sviluppate con cura e ponendo una forte enfasi sulla facilità d'uso.
Comprendere le esigenze degli utenti finali è infatti fondamentale per realizzare i vantaggi delle
interfacce personalizzate.
Una caratteristica è l'indipendenza dal linguaggio di programmazione, lasciando allo sviluppatore la scelta
di utilizzare qualsiasi linguaggio fornito dall'ambiente di sviluppo integrato Visual Studio. La maggior parte
preferisce C# o Visual Basic, che offrono entrambi uno sviluppo sicuro ed efficiente.
Per un programmatore Windows che ha familiarità con Visual Studio e .NET, lo sviluppo di una vista
operatore personalizzata è piuttosto semplice. FlexPendant SDK è completamente integrato con Visual
Studio, il che significa che un programmatore .NET riconoscerà le procedure guidate per l'impostazione del
progetto e gli strumenti per il supporto della progettazione visiva, il debug e così via.
Sono stati compiuti sforzi considerevoli per consentire agli sviluppatori di applicazioni controller di iniziare a
lavorare senza dover superare una ripida curva di apprendimento. Per accelerare ulteriormente il processo
di sviluppo, è possibile utilizzare l'IRC5 virtuale di RobotStudio per testare ed eseguire il debug delle
applicazioni del controller.
Nota
La conoscenza della programmazione Windows, dell'orientamento agli oggetti e della programmazione .NET
sono i prerequisiti per utilizzare FlexPendant SDK.
Robustezza e prestazioni
Lo sviluppo di un'applicazione per FlexPendant, un dispositivo con risorse di memoria e processo limitate,
può essere piuttosto impegnativo. È necessario affrontare problemi come le prestazioni e la gestione
della memoria.
Si consiglia vivamente di leggere questo manuale per conoscere le problematiche specifiche dell'SDK
FlexPendant durante il passaggio allo sviluppo dell'SDK FlexPendant.
Nota
Prendetevi il tempo necessario per studiare questo manuale insieme alle note di rilascio ed evitare di
affrettarvi a scrivere codice.
14 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
1. Introduzione
1.2 Documentazione e aiuto
introduzione
FlexPendant SDK include un ampio modulo di guida in linea, fornito con l'installazione del
prodotto. Dopo aver installato RobotStudio, facendo clic sul menu Start di Windows ,
quindi selezionando Programmi > ABB Industrial IT > Robotics IT > RobotStudio 5.xx >
SDK troverai:
• Manuale dell'applicazione SDK FlexPendant
• Manuale di riferimento SDK FlexPendant
Manuale applicativo
Questo manuale dell'applicazione - FlexPendant SDK, è il modo consigliato per iniziare se
si è nuovi allo sviluppo di FlexPendant SDK. Spiega come funziona l'SDK FlexPendant.
Contiene esempi di codice in C# e VB e fornisce esercizi pratici.
Il manuale dell'applicazione è fornito in due formati, Guida HTML e PDF. HTML è il formato
consigliato per lo schermo del PC e PDF è la scelta migliore se desideri delle stampe.
Nota
Guida di riferimento
dell'SDK Durante la programmazione è necessario utilizzare il Manuale di riferimento
dell'SDK FlexPendant. Costituisce il riferimento completo alle librerie di classi SDK
FlexPendant. Le firme dei metodi vengono fornite in C# e Visual Basic.
Tieni presente che non sono integrati con la funzione della Guida di Visual Studio.
Facendo clic su F1 quando si punta al codice, ad esempio, si aprirà il riferimento per
programmatori di Visual Studio o la libreria di classi .NET Framework per il linguaggio e
l'argomento specifici. Molte volte questo è ciò che desideri, ma se il tuo problema è
correlato all'SDK FlexPendant, devi aprire la Guida di riferimento dell'SDK appropriata per
trovare una soluzione.
Nota
Continua
Comunità RobotStudio
ABB Robotics ha lanciato una comunità denominata RobotStudio Community, per i suoi utenti di
software per PC. Gli Strumenti per sviluppatori nella sezione Sviluppatori della community
RobotStudio contengono informazioni e alcuni video sulla programmazione con FlexPendant
SDK. In Content Sharing è disponibile per il download un'applicazione SDK FlexPendant
completa. È consigliato agli utenti medi e ai principianti.
ABB incoraggia conversazioni aperte e crede che tutti abbiano qualcosa da dare. Il
forum degli utenti della comunità RobotStudio dispone di una sezione dedicata allo
sviluppo di applicazioni robot. Qui sia i principianti che gli esperti discutono online di codici
e soluzioni. Se stai affrontando un problema di codifica, il forum degli utenti dovrebbe
essere la tua prima scelta, poiché ci sono buone probabilità che qualcuno ti dia l'aiuto di
cui hai bisogno per procedere.
RobotStudio Community fornisce inoltre i mezzi per condividere codice e video. Il tuo
contributo sarà apprezzato. Lavorare insieme è molte volte la chiave del successo.
Mancia
MSDN
MSDN (Microsoft Developer Network) all'indirizzo http://www.msdn.com è una delle
numerose fonti di informazioni per problemi generali di programmazione relativi a .NET e
Visual Studio.
16 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
1. Introduzione
1.3 Terminologia
1.3 Terminologia
Definizioni
Termine Definizione
.NET Compact Framework Versione del framework .NET di Microsoft che fornisce l'ambiente runtime per le
(.NET CF) applicazioni eseguite su dispositivi incorporati, come FlexPendant. Include una
libreria di classi, che è quasi un sottoinsieme del ricco framework .NET per desktop.
Linguaggio comune Il motore di runtime principale in .NET Framework per l'esecuzione del codice
Durata gestito. Fornisce servizi come l'integrazione di più linguaggi, la sicurezza
dall'accesso di codice, la gestione della durata degli oggetti e il supporto per il
debug e la profilazione.
Applicazione del controller Le librerie di classi pubbliche dell'SDK FlexPendant, che offrono funzionalità del
Interfaccia di programmazione controller del robot. Noto anche come CAPI.
FlexPendant Dispositivo portatile di ABB, utilizzato con il controller robot IRC5. È sviluppato
con la tecnologia Microsoft per sistemi embedded, Windows CE e .NET Compact
Framework.
Programmatore SDK Un programmatore che utilizza FlexPendant SDK per sviluppare applicazioni
FlexPendant personalizzate.
Applicazione FlexPendant SDK: un'applicazione personalizzata sviluppata con FlexPendant SDK. azione
Compilatore JIT Durante la compilazione del codice gestito, il compilatore traduce il codice
sorgente in Microsoft Intermediate Language (MSIL), che è un set di istruzioni
indipendente dalla CPU. Prima che il codice possa essere eseguito, MSIL deve
essere convertito in codice specifico della CPU, in genere da un compilatore just-in-
time (JIT).
codice gestito Codice eseguito e gestito dal Common Language Runtime di Microsoft .NET
Framework. Tutto il codice prodotto da Visual Studio viene eseguito come codice
gestito.
Microsoft Visual Studio L'ambiente di sviluppo integrato in cui lavorano gli sviluppatori quando
utilizzano .NET Framework.
Microsoft .NET Framework Un componente integrale di Windows che supporta la creazione e l'esecuzione
di applicazioni.
Presa di rete Un punto finale di comunicazione unico per una macchina che comunica su una
rete basata sul protocollo Internet.
Continua
Termine Definizione
Creazione di applicazioni robotiche Strumento software ABB, che ha consentito lo sviluppo di prodotti personalizzati
ehm interfacce operatore per IRC5. Spesso indicato come RAB. Il RAB
è suddiviso in FlexPendant SDK e PC SDK. Applicazione robotica
Builder (RAB) era uno strumento software che consentiva ai programmatori
per sviluppare FlexPendant o interfacce PC personalizzate per IRC5
controllore del robot.
codice non gestito Codice che viene eseguito direttamente dal sistema operativo, all'esterno
il .NET Framework. Il codice non gestito deve fornire il proprio codice
gestione della memoria, controllo del tipo e supporto di sicurezza, a differenza di
codice gestito, che riceve questi servizi dal comune
tempo di esecuzione del linguaggio. Tutto il codice in esecuzione nel controller del robot, come
così come parte del codice in esecuzione nella FlexPendant non è gestito.
IRC5 virtuale La tecnologia dei robot virtuali consente di eseguire un IRC5 virtuale
controller, unità meccaniche virtuali e una FlexPendant virtuale attiva
la scrivania. Incluso come freeware in RobotStudio di ABB.
Acronimo Definizione
VS Studio visivo
18 3HAC036958-001 Revisione: B
Piattaforme supportate
Devono essere soddisfatti i seguenti requisiti software:
• Microsoft Visual Studio: VS 2005 (Standard Edition o superiore) o VS 2008 (Professional Edition
o superiore). • .NET Compact Framework
• SxTPU-1, che viene eseguito con .NET CF 2.0 e WinCE 4.2. • SxTPU-2, che
viene eseguito con .NET CF 2.0 e WinCE 5.0. • SxTPU3, che viene eseguito con
Nota
Nota
Prima... devi...
installazione di RobotStudio installare Microsoft Visual Studio 2005 o 2008.
Continua
Prima... devi...
debug utilizzando il real installare .NET Compact Framework 2.0 Service Pack 1 o 2, che può
Dispositivo FlexPendant essere scaricato da http://www.microsoft.com.
Il forum degli utenti della comunità RobotStudio contiene informazioni
su come collegare il debugger di Visual Studio al dispositivo.
Per ulteriori informazioni, vedere anche Debug del dispositivo
FlexPendant a pagina 192.
eseguendo l'applicazione verificare che il sistema robotico disponga dell'opzione controller Flex-
targeting per un'interfaccia pendente del sistema IRC5 reale (per applicazioni FlexPendant).
Configura una connessione tra il tuo PC e il controller del robot. Per
ulteriori informazioni, vedere Come configurare il PC per
comunicare con il robot a pagina 23 per i dettagli su come eseguire
questa operazione.
Nota
In precedenza FlexPendant SDK faceva parte di Robot Application Builder (RAB) che includeva anche PC
SDK. RAB 5.12 è stata l'ultima versione di Robot Application Builder.
A partire da RobotStudio 5.13, sia FlexPendant SDK che PC SDK sono inclusi nell'installazione di
RobotStudio. RobotStudio installa FlexPendant SDK 5.13, parallelamente alle versioni precedentemente
installate di FlexPendant SDK.
RAB 5.11 e versioni successive installano PC SDK e FlexPendant SDK insieme a qualsiasi versione
precedentemente installata.
RAB5.10
RAB 5.10 ha aggiornato qualsiasi SDK per PC precedentemente installato alla versione 5.10 e
ha installato FlexPendant SDK 5.08,5.09 e 5.10 affiancati. Il motivo dell'installazione affiancata di diverse
versioni dell'SDK FlexPendant era quello di semplificare il processo
Gli utenti dell'SDK FlexPendant possono lavorare su applicazioni SDK FlexPendant destinate a diverse
versioni di RobotWare. Le versioni precedenti di RAB possono essere scaricate da http://
www.abb.com/robotics > RobotStudioCommunity > Strumenti per sviluppatori > Panoramica SDK
FlexPendant.
Cosa è installato?
Continua
Applicazioni FlexPendant
Se si installa FlexPendant SDK 5.13 e versioni precedenti di FlexPendant SDK fornite con PC SDK
come Robot Application Builder, le versioni precedenti saranno presenti sul PC. Scegli quale versione
dell'SDK FlexPendant utilizzare quando configuri il progetto dell'applicazione in Visual Studio. Per ulteriori
informazioni, vedere Utilizzo del modello di progetto in Visual Studio a pagina 64.
È necessario assicurarsi che i controlli della GUI dell'SDK FlexPendant utilizzati da Visual Studio Designer
siano della stessa versione. Se in precedenza hai lavorato con un'altra versione dell'SDK FlexPendant,
dovrai rimuovere i controlli GUI aggiunti a Visual Studio Toolbox e quindi aggiungerli di nuovo, indicando la
versione corretta nel browser. Per ulteriori informazioni, vedere Impostazione del supporto di
progettazione per i controlli FlexPendant a pagina 67.
Procedura di installazione
La procedura di installazione è molto semplice. Per impostazione predefinita, FlexPendant SDK viene
installato quando si installa RobotStudio. Per ulteriori informazioni, vedere Installazione di RobotStudio, in
Manuale operativo - Per iniziare, IRC5 e RobotStudio. Una procedura guidata di installazione guiderà
l'utente attraverso l'installazione. Se si desidera installare RobotStudio senza installare FlexPendant
SDK o rimuovere FlexPendant SDK da RobotStudio, selezionare Personalizzato nell'installazione guidata
di RobotStudio e selezionare o deselezionare la funzione FlexPendant SDK.
Nota
Si consiglia inoltre vivamente di leggere le note sulla versione che si trovano sul DVD RobotWare e sul
sito Web della comunità RobotStudio, poiché contengono le informazioni più aggiornate, comprese le
nuove funzionalità e le eventuali limitazioni note della versione.
3HAC036958-001 Revisione: B 21
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
2 Ambiente di installazione e sviluppo
2.2 Come ottenere e installare una chiave di licenza per RAB 5.09 o versioni precedenti
2.2 Come ottenere e installare una chiave di licenza per RAB 5.09 o versioni precedenti
Panoramica
In RAB 5.10, il controllo della licenza è stato rimosso dal software, consentendo a chiunque di utilizzare
Robot Application Builder gratuitamente. Ciò significa che non dovrai più preoccuparti di ottenere una
licenza o includere un file licx nell'applicazione del tuo PC.
Nota
Per RAB versione 5.09 o precedente, la licenza è la seconda parte della procedura di installazione. Nel
caso in cui sia necessario sviluppare un'applicazione RAB per RobotWare 5.09 o versioni precedenti è
necessario rivolgersi al supporto per ottenere una chiave di licenza gratuita.
Segui questi passaggi quando hai ricevuto l'e-mail con il file della chiave di licenza:
Passo Azione
1 Stacca il file della chiave di licenza dall'e-mail e salvalo in una cartella sul tuo PC.
2 Fare doppio clic sul file della chiave di licenza. Verrà aperta la procedura guidata di installazione della licenza.
Nota
Per eseguire le applicazioni SDK FlexPendant verso un controller robot reale è necessario connettere
il PC al controller robot, tramite la rete o direttamente alla porta di servizio sul controller. Per
informazioni dettagliate, vedere Come configurare il PC per comunicare con il robot a pagina 23.
22 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
2 Ambiente di installazione e sviluppo
2.3 Come configurare il PC per comunicare con il robot
Panoramica
È possibile connettere il PC al controller tramite una rete Ethernet o direttamente alla porta di servizio
del controller. Quando si utilizza la porta di servizio del controller, è possibile ottenere automaticamente
un indirizzo IP per il PC oppure specificare un indirizzo IP fisso.
La connessione viene utilizzata anche per scaricare un'applicazione FlexPendant nel file system
del controller e testarla sul dispositivo FlexPendant reale.
Consente inoltre di comunicare con il controller tramite una finestra della console sul PC e ottenere
informazioni preziose sullo stato del controller, sul consumo di memoria della FlexPendant e così via.
Se il controller è connesso a una rete Ethernet, è possibile connettere anche il PC a quella rete. Le
impostazioni da utilizzare sul PC dipendono dalla configurazione di rete. Per sapere come
configurare il tuo PC, contatta l'amministratore di rete.
Nota
Continua
Nota
Il cavo deve essere un cavo intrecciato con un connettore DB-9 femmina a ciascuna estremità.
Proprietà Valore
indirizzo IP 192.168.125.2
Informazioni correlate
Come configurare le connessioni di rete del PC Guida di Windows: configura le impostazioni TCP/IP.
Come collegare il PC alla porta di servizio del Collegamento di un PC alla porta di servizio in
Controller Guida di RobotStudio.
24 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
2 Ambiente di installazione e sviluppo
2.4 Ambiente di sviluppo
Panoramica
Questa sezione presenta una panoramica dell'ambiente di sviluppo utilizzato per creare applicazioni
SDK FlexPendant. È possibile programmare ed eseguire il debug dell'applicazione utilizzando
Microsoft Visual Studio 2005 o 2008.
Nota
In fase di esecuzione non importa quale lingua hai utilizzato, poiché il codice .NET compilato è
indipendente dalla lingua. Il codice sorgente viene compilato da un linguaggio di alto livello
in Intermediate Language (IL), che viene quindi eseguito, in fase di esecuzione, da Common
Language Runtime. Ciò rende possibile l'utilizzo diverso
Continua
linguaggi di programmazione, anche all'interno della stessa applicazione. Per ulteriori informazioni
sui termini .NET, vedere Definizioni a pagina 17.
Nota
Si presume che tu sia già un programmatore .NET. In caso contrario, è necessario iniziare
imparando il linguaggio di programmazione da utilizzare. Sono disponibili numerosi libri che
insegnano C# e Visual Basic.
Nota
Il modulo della Guida non è integrato con la funzione della Guida di Visual Studio. Facendo clic
su F1 quando si punta al codice, ad esempio, si aprirà il riferimento per programmatori di Visual
Studio o la libreria di classi .NET Framework per il linguaggio e l'argomento specifici. Se il tuo
problema è correlato all'SDK FlexPendant, questo non ti aiuterà.
Mancia
Il Manuale di riferimento FlexPendant SDK è reperibile facendo clic sul menu Start , quindi
selezionando Programmi > ABB Industrial IT > Robotics IT > RobotStudio 5.xx > SDK >
Manuale di riferimento FlexPendant SDK. Mantieni aperto il file di riferimento durante la
programmazione, poiché ne avrai sempre bisogno.
26 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
2 Ambiente di installazione e sviluppo
2.5 Due modelli di sviluppo: virtuale e reale
Quando provi un'applicazione personalizzata, puoi utilizzare un controller robot virtuale o un sistema robot
reale. Questa sezione fornisce informazioni su come utilizzare entrambi i modelli di sviluppo.
Quando si avvia l'IRC5 virtuale in RobotStudio, sullo schermo del PC viene visualizzato un armadietto
del robot virtuale insieme a una FlexPendant virtuale.
Dato che un vero e proprio controller robot normalmente non è a portata di mano per lo sviluppo di
applicazioni, la tecnologia virtuale è molto preziosa.
Nota
Per informazioni su come configurare la rete, vedere Come configurare il PC per comunicare con il
robot a pagina 23.
Continua
Ciò significa che potenziali problemi potrebbero essere difficili da rilevare finché non si testa
l'applicazione utilizzando un vero sistema robotico. È quasi altrettanto semplice eseguire il debug del
codice in esecuzione sul dispositivo FlexPendant reale. Per ulteriori informazioni, vedere Debug
del dispositivo FlexPendant a pagina 192.
È inoltre necessario tenere presente che l'applicazione condivide CPU, memoria e host dell'applicazione
con tutte le altre applicazioni FlexPendant. Ciò significa che un'applicazione personalizzata può influire
sulle prestazioni complessive della FlexPendant.
Nota
L'SDK FlexPendant non rallenta le prestazioni. Pertanto si suppone che l'applicazione funzioni come
qualsiasi applicazione standard della FlexPendant. Per ulteriori informazioni su come velocizzare
un'applicazione FlexPendant lenta, vedere Prestazioni a pagina 171.
Distribuzione al cliente
Durante lo sviluppo, la distribuzione sul controller viene eseguita manualmente. Quando la fase di
sviluppo è terminata e l'applicazione deve essere distribuita al cliente, è necessario farlo
diversamente.
Per informazioni su come eseguire questa operazione, vedere Distribuzione di un'applicazione SDK
FlexPendant a pagina 207.
28 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
2 Ambiente di installazione e sviluppo
2.6 Conversione di progetti Visual Studio 2005 in Visual Studio 2008
Panoramica
Convertire un progetto FlexPendant SDK Visual Studio 2005 esistente in Visual Studio 2008 è
semplice. Quando si apre un progetto di Visual Studio 2005 in Visual Studio 2008, la conversione
guidata di Visual Studio viene visualizzata automaticamente. La procedura per convertire il progetto
in Visual Studio 2008 è semplice da seguire. Consiste in alcune finestre di dialogo che forniscono
informazioni su ciò che accadrà.
Nota
3HAC036958-001 Revisione: B 29
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
3 Ambiente di esecuzione
3.1 Panoramica
Questo capitolo fornisce una panoramica dell'ambiente runtime delle applicazioni personalizzate,
comprese le illustrazioni dell'architettura software dell'SDK FlexPendant.
La FlexPendant è parte integrante di IRC5, ma è di per sé un computer completo. È stato sviluppato con la
tecnologia software Microsoft per sistemi embedded, Windows CE e .NET Compact Framework, che è un
sottoinsieme dell'intero .NET Framework utilizzato dal PC.
Piattaforma FlexPendant La
seguente illustrazione mostra l'architettura software di FlexPendant SDK.
Due applicazioni FlexPendant, una che utilizza VB e l'altra C#, sviluppate su FlexPendant SDK. FlexPendant
SDK CAPI è l'API pubblica che offre funzionalità del controller. Tutta la comunicazione con il controller del
robot avviene tramite il Robot Communication Runtime interno. FlexPendant SDK fornisce controlli dell'interfaccia
utente realizzati da ABB adatti per FlexPendant.
.NET Compact
Framework 2.0 App2 SDK FlexPendant C#
#Q
ordau C
Confine di rete
TCP/IP
Controllore
FlexPendant_
Continua
32 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
3 Ambiente di esecuzione
Costruzioni
.NET Framework è una libreria di componenti e classi e strutture di supporto, progettata per
rendere lo sviluppo dei componenti semplice e affidabile.
I componenti sono confezionati in assiemi, chiamati anche dll.
Gli assembly sono gli elementi costitutivi delle applicazioni .NET. Un assembly è una raccolta riutilizzabile
di tipi e risorse, creati per funzionare insieme e formare un'unità logica di funzionalità. L'assembly
più semplice è un singolo eseguibile.
Un progetto FlexPendant viene compilato in una dll, che non può essere eseguita come
applicazione indipendente, ma deve essere avviata dal Teach Pendente Application Framework (TAF),
il gestore dell'applicazione della FlexPendant. Per ulteriori informazioni, vedere Comprensione del
ciclo di vita dell'applicazione FlexPendant a pagina 38.
In un caso normale, un'applicazione personalizzata per FlexPendant viene sviluppata come un singolo
componente, ma è anche possibile separare la funzionalità in più componenti.
In questo modo l'applicazione sarà composta da più DLL. Il motivo potrebbe essere uno dei seguenti:
• La quantità di codice è notevole. Un design modulare con elementi costitutivi piccoli e ben
testati messi insieme è un modo per gestire la complessità.
• Diversi sviluppatori stanno lavorando sulla stessa applicazione personalizzata. Per ragioni di
efficienza possono suddividere la funzionalità tra loro e lavorare ciascuno su un componente.
Nota
3HAC036958-001 Revisione: B 33
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
3 Ambiente di esecuzione
3.2.2 Distribuzione dell'applicazione FlexPendant a un sistema robotico
Per testare l'applicazione su una FlexPendant reale, entrambi i gruppi devono essere scaricati nella directory
SYSTEM o HOME del controller del robot. Successivamente è necessario riavviare la FlexPendant. All'avvio
carica gli assembly dell'applicazione dal controller.
Mancia
Un vantaggio di distribuire le DLL nella directory HOME è che verranno incluse in un backup di sistema.
Per scaricare gli assiemi dell'applicazione sul controller è possibile utilizzare la funzione online Trasferimento file
di RobotStudio.
Un altro modo per scaricare l'applicazione sul controller del robot è utilizzare ABB Compliance Tool.
Fare un passo
Azione
1 Verificare che siano soddisfatti i seguenti requisiti prima di avviare la procedura: • Deve
essere connessa una connessione di rete tra il PC e il controller
immaginato, utilizzando la porta LAN del controller o la porta di servizio del controller.
Per ulteriori informazioni vedere Come configurare il PC per comunicare con il robot
a pagina 23.
• Per eseguire l'applicazione su un sistema reale è necessaria l'interfaccia FlexPendant
opzionale RobotWare. Senza l'opzione non vedrai l'applicazione nel menu ABB.
4.3.2_1Compl
4 Fare clic su Sfoglia e individuare il progetto Visual Studio e l'assembly dell'applicazione nella
sottocartella \bin\debug (o \bin\release).
Continua
Fare un passo
Azione
5 Seleziona la casella Deploy , inserisci l' indirizzo IP del controller del robot e fai clic su Esegui.
La distribuzione viene eseguita nel sistema corrente del controller.
Nota!
Se l'applicazione è composta da più assiemi è necessario ripetere la procedura per tutti questi.
6 Riavviare la FlexPendant. Per ulteriori informazioni sui diversi modi per eseguire questa operazione,
vedere Riavviare la FlexPendant a pagina 35.
È anche possibile eseguire la creazione e la distribuzione in un unico passaggio. Per fare ciò
l'argomento deploy dovrebbe essere l'ultimo:
abbct.exe <PATH>\TpsViewHelloWorld.dll /deploy="192.168.8.192"
Sia l'applicazione che l'assembly proxy vengono distribuiti al controller dopo la compilazione.
Distribuzione FTP
Puoi anche utilizzare un client FTP per trasferire file dal tuo PC al controller del robot.
Fare un passo
Azione
1 Trasferire le risorse (ad esempio le icone) e gli insiemi di applicazioni e proxy nella directory HOME
o SYSTEM del sistema attuale del controller.
2 Riavviare la FlexPendant. Consulta la sezione successiva per informazioni su come eseguire questa operazione.
Nota
Riavviare la FlexPendant
Se si desidera riavviare il dispositivo FlexPendant senza riavviare il controller, scegliere una di
queste alternative:
Azione alternativa
1 Scrivi il comando fpcmd "-restart" nella finestra della console del controller sul tuo PC.
Continua
Azione alternativa
Fare un passo
Azione
1 Copia gli assiemi e le immagini dell'applicazione e del proxy nella directory HOME del sistema
che desideri utilizzare sul tuo PC.
Nota! Chiudere prima la FlexPendant virtuale se si stanno sostituendo gli assiemi.
2 Riavviare la FlexPendant virtuale.
Mancia
Se riscontri problemi nell'esecuzione dell'applicazione, prova a inserire tutti i file (dll, file gif e
così via) nella directory vcbin del robotware utilizzato dal tuo sistema. Questa configurazione è
quanto di più simile possibile alla configurazione reale del sistema.
36 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
3 Ambiente di esecuzione
3.2.3 Comunicazione tra FlexPendant e controller
tecnologia COM
FlexPendant SDK utilizza un'API del controller interno basata sulla tecnologia COM per comunicare con
il controller. Questa API utilizza socket e TCP/IP (per ulteriori informazioni, vedere Informazioni su
termini e acronimi a pagina 17) verso controller sia reali che virtuali.
Tutte le risorse del controller, sia reali che virtuali, sono descritte utilizzando una gerarchia basata su
oggetti. Ogni risorsa è identificata in modo univoco, comprese le informazioni su quale controller
possiede la risorsa mediante l'utilizzo dell'ID di sistema univoco o dell'indirizzo IP del controller.
Mancia
I messaggi di errore che includono tale percorso indicano dove cercare il problema.
Talvolta il titolare del trattamento ha compiti da svolgere che hanno un diritto più elevato
priorità.
Nota
L'SDK FlexPendant non influisce negativamente sulle prestazioni. Dovresti aspettarti che la tua
applicazione personalizzata funzioni come qualsiasi altra applicazione su ABB
menù.
3HAC036958-001 Revisione: B 37
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
3 Ambiente di esecuzione
3.2.4 Comprensione del ciclo di vita dell'applicazione FlexPendant
Panoramica
Comprendere il ciclo di vita dell'applicazione FlexPendant migliora la capacità di progettare ed eseguire il debug
dell'applicazione.
TAF utilizza un file di configurazione personalizzato per creare l'aspetto e il comportamento dell'applicazione
ospitata. Definisce inoltre una serie di regole che devono essere seguite.
Se l'applicazione FlexPendant SDK deve essere avviata manualmente dall'utente finale, l'icona e il testo
dell'applicazione vengono inseriti nel menu ABB. L'altra alternativa è avviarlo automaticamente da TAF all'avvio
di FlexPendant. Per ulteriori informazioni su come viene configurato, vedere Attributo FlexPendant TpsView a
pagina 40.
Durante la sua vita, l'applicazione passa dallo stato attivo a quello passivo. Ogni volta viene eseguito Attiva o
Disattiva. Nello stato attivo l'applicazione è visibile nella vista client, nello stato passivo potrebbe essere stata
aperta un'altra applicazione oppure potrebbe essere stata aperta un'altra applicazione tramite la barra delle
attività FlexPendant.
Quando l'applicazione viene chiusa tramite il pulsante di chiusura, viene eseguito prima il metodo Disattiva e poi
Disinstalla. Successivamente viene chiamato il metodo Dispose della classe TpsView. Quindi l'istanza
dell'applicazione viene eliminata da TAF. Per ulteriori informazioni su come implementare questi metodi, vedere
ITpsViewSetup e ITpsViewActivation a pagina 44.
Continua
Illustrazione
La figura illustra il ciclo di vita di un'applicazione FlexPendant.
4.3.3_1TAFAp
Risorse limitate
Poiché la FlexPendant è un dispositivo con risorse molto limitate rispetto a un PC, è necessario
apprendere e utilizzare i meccanismi implementati per assistersi nella scrittura di codice
efficiente.
Sia la potenza del processo che le risorse di memoria sono limitate rispetto all'ambiente
virtuale sul desktop. Un'applicazione che funziona molto bene sulla FlexPendant virtuale
può incontrare seri problemi nell'ambiente reale a causa di queste limitazioni. Per ulteriori
informazioni, vedere Panoramica tecnica del dispositivo FlexPendant a pagina 165.
Nota
3HAC036958-001 Revisione: B 39
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
3 Ambiente di esecuzione
3.2.5 Attributo FlexPendant TpsView
Panoramica
L'attributo TpsView viene generato automaticamente in base alle impostazioni nel file
Procedura guidata del progetto SDK FlexPendant in Visual Studio:
6.2.2_1FormT
Nota
Continua
Aspetto visivo
In fase di esecuzione il risultato più ovvio di questo codice è il modo in cui l'applicazione personalizzata
viene presentata nel menu ABB. Nell'esempio seguente, il primo parametro TpsView è stato modificato da
"MyApplicationName" a "Hello World".
4.3.4_1Ciao
Nome dell'applicazione
Il primo parametro di TpsView è il nome dell'applicazione così come dovrebbe apparire nel menu ABB e
sulla barra delle applicazioni. L'esempio utilizza "HelloWorld" come applicazione
nome.
Icona dell'applicazione
Il secondo parametro è il file da utilizzare come icona dell'applicazione nel menu ABB. Solitamente per
l'applicazione viene utilizzata un'icona personalizzata. Nell'esempio viene utilizzata l'icona predefinita: "tpu-
Operator32.gif".
Il terzo parametro è il file da utilizzare come icona sulla barra delle applicazioni dell'applicazione.
L'esempio utilizza l'icona predefinita "tpu-Operator16.gif".
Assembly dell'applicazione
Il quarto parametro è il nome dell'assembly. Se si modifica il nome dell'assembly dell'applicazione è
necessario modificare anche questo parametro per riflettere tale modifica.
Nell'esempio, il nome dell'assembly è "TpsViewHelloWorld.dll".
Nota
Il nome dell'assembly deve iniziare con "TpsView" affinché TAF lo identifichi come applicazione
da caricare. Se lo dimentichi, lo strumento di verifica ABB genererà un errore quando tenti di costruire il
progetto.
Continua
Il quinto parametro specifica il nome completo della classe della vista iniziale dell'applicazione,
che hai scelto nella finestra di dialogo Nuovo progetto. Nell'esempio, il nome completo della classe
è "TpsViewHelloWorld.TpsViewHelloWorld".
Posizione
dell'applicazione Il sesto parametro determina la posizione dell'icona e del testo dell'applicazione nel menu ABB.
Nell'esempio questi vengono visualizzati nella colonna di sinistra:
startPanelLocation.Left.
Nota
Tipo di applicazione
Come puoi vedere dalle due icone Hello World visibili nella barra delle applicazioni, sono state avviate
due istanze dell'applicazione Hello World. Per abilitare ciò, il settimo parametro viene modificato
in: TpsViewType.Dynamic. I possibili valori del tipo di vista sono mostrati nella tabella:
TpsViewType.Invisible Un'applicazione in background senza GUI e senza icona sulla barra delle
applicazioni. Può essere avviato automaticamente o manualmente. È possibile un
solo esempio.
Nota
A meno che non vi sia una necessità particolare, è necessario consentire all'utente di avviare
solo un'istanza dell'applicazione: TpsViewType.Static. Il motivo è che lavorare con più istanze
richiede preziose risorse di memoria.
Tipo di avvio
L'ottavo parametro determina la modalità di avvio dell'applicazione. Nell'esempio il tipo di avvio è
TpsViewStartupTypes.Manual e l'applicazione viene avviata dal menu ABB. Utilizzando il tipo di avvio
manuale è anche possibile avviare l'applicazione tramite RAPID o, ad esempio, passare alla modalità
operativa automatica.
Per ulteriori informazioni, vedere Funzionalità del sistema che supportano l'uso di schermate
personalizzate a pagina 62
Continua
Informazioni correlate
Per informazioni sull'impostazione Stile della procedura guidata del progetto, vedere Stile contenitore a
pagina 81.
Per trovare la procedura guidata del progetto SDK FlexPendant in Visual Studio, vedere Impostazione
di un nuovo progetto a pagina 64.
3HAC036958-001 Revisione: B 43
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
3 Ambiente di esecuzione
3.2.6 ITpsViewSetup e ITpsViewActivation
ITpsViewSetup
Un'applicazione che TAF deve inizializzare deve avere un costruttore predefinito (vuoto) e deve
implementare l'interfaccia ITpsViewSetup, che specifica i due metodi Install e Uninstall.
Installa e disinstalla
L'installazione viene chiamata quando l'applicazione viene creata in TAF. I parametri sono utilizzati
da TAF e non devono essere modificati. Si consiglia di aggiungere codice per ulteriori avviamenti
e allocazione delle risorse di sistema in questo metodo, ad esempio caricare assembly, aprire
canali di comunicazione e così via.
Quando chiudi l'applicazione viene chiamata la disinstallazione. Ciò accade subito prima che
l'applicazione venga eliminata. Si consiglia di aggiungere codice per l'eliminazione delle risorse di
sistema in questo metodo, ad esempio scaricare assembly, chiudere socket e così via
SU.
ITpsViewAttivazione
Tutte le applicazioni personalizzate devono implementare l'interfaccia ITpsViewActivation, che
specifica i due metodi Attiva e Disattiva. Questi vengono utilizzati da TAF per avvisare le applicazioni
quando ottengono il focus e quando lo perdono.
Attiva e Disattiva
L'attivazione viene eseguita ogni volta che l'applicazione viene attivata. Ciò avviene durante
l'inizializzazione, dopo l'esecuzione del metodo ITpsViewSetup.Install e quando si fa clic sull'icona
dell'applicazione nella barra delle applicazioni.
La disattivazione, di conseguenza, viene eseguita ogni volta che l'applicazione perde il focus.
Ciò accade quando si chiude l'applicazione, prima che sia stato eseguito il metodo
ITpsViewSetup.Uninstall e quando si fa clic sull'icona di un'altra applicazione nella barra delle applicazioni.
Nota
Si consiglia di attivare e disattivare i timer con questi metodi. In questo modo i timer non verranno
eseguiti quando sono attive altre applicazioni, risparmiando così la potenza del processore. Per
lo stesso motivo, qualsiasi sottoscrizione agli eventi del controller deve essere disabilitata in
Disattiva e abilitata nuovamente in Attiva. Tieni presente che i valori correnti devono essere
letti prima di abilitare l'abbonamento.
Continua
Metodo Utilizzo
AController.OperatingModeChanged += nuovo
OperatingModeChangedEventHandler(UpdateUI);
AController.OperatingModeChanged -= nuovo
OperatingModeChangedEventHandler(UpdateUI);
3HAC036958-001 Revisione: B 45
La compatibilità tra le revisioni è comunque garantita (ad esempio FlexPendant SDK 5.11.01 sarà
compatibile con FlexPendant SDK 5.11).
Aggiornamenti RobotWare
In un determinato momento durante il ciclo di vita dell'applicazione, un sistema robotico a cui è
destinata l'applicazione potrebbe essere aggiornato con una versione successiva di RobotWare.
Per quanto riguarda un'applicazione FlexPendant SDK, ciò significa che il runtime cambierà, ovvero, i
gruppi SDK FlexPendant presenti in RobotWare saranno diversi da quelli utilizzati al momento dello
sviluppo dell'applicazione. In genere, l'unico modo per essere sicuri che l'applicazione esistente funzionerà
con una versione RobotWare più recente è compilare il codice sorgente con la versione SDK
FlexPendant che corrisponde alla versione RobotWare prevista.
Nota
Puoi trovare tutti i dettagli sulla compatibilità tra le diverse versioni dell'SDK FlexPendant nelle note di
rilascio.
Mancia
Durante la compilazione del progetto, notare eventuali avvisi relativi a metodi obsoleti, poiché questi
verranno probabilmente rimossi nella prossima versione dell'SDK FlexPendant.
Preparati al cambiamento
Per riassumere, è importante mantenere il codice sorgente sicuro e disponibile per la manutenzione.
Mancia
Ildasm è uno strumento Microsoft, fornito con l'installazione di Visual Studio, che potresti trovare utile.
Ti consente di aprire il manifest di un assembly specificato e di scoprire rapidamente, ad esempio, le
dipendenze.
Scopri di più su
http://msdn2.microsoft.com/en-us/library/aa309387(Visual Studio.71).aspx
46 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Approccio di base
Nella maggior parte degli aspetti, l'utilizzo di FlexPendant SDK per lo sviluppo di applicazioni non
presenta differenze sostanziali rispetto al normale sviluppo .NET. Le librerie di classi .NET
vengono utilizzate per tutto ciò che non è specifico del robot. Inoltre, utilizzi l'API Controller pubblica
degli SDK.
Nota
Quando si utilizzano le librerie di classi .Net per lo sviluppo FlexPendant, vedere Informazioni
sulla versione per assicurarsi che la classe o il metodo sia supportato su .NET Compact
Framework 2.0, che viene eseguito su FlexPendant.
Utilizzare questa procedura per programmare l'applicazione FlexPendant SDK per la prima volta:
Passo Azione
1 Prima di iniziare
Apprendere le nozioni di base sulla programmazione dell'SDK FlexPendant leggendo tutte le sezioni
pertinenti di questo manuale. Sentiti rassicurato dal fatto che questa è un'attività che fa risparmiare tempo e
non affrettarti a scrivere codice.
Se si intende sviluppare un'applicazione per la FlexPendant, un dispositivo con risorse limitate rispetto a un
PC, è fondamentale studiare il capitolo Applicazioni robuste della FlexPendant a pagina 165 .
2 Durante lo sviluppo
Testare frequentemente la funzionalità dell'applicazione.
Non attendere troppo a lungo prima di testare un'applicazione FlexPendant su un vero dispositivo FlexPendant.
3 Dopo lo sviluppo Se si
sviluppa un'applicazione FlexPendant, impostare un test a lungo termine prima dell'uso in produzione. In
caso contrario, si corre il rischio che la FlexPendant esaurisca lentamente la memoria e si blocchi a causa
dell'applicazione.
Verifica il comportamento, le prestazioni e il consumo di memoria dell'applicazione. Utilizza i servizi offerti da
ABB. Per ulteriori informazioni, consultare FlexPendant - Debug e risoluzione dei problemi a
pagina 181.
3HAC036958-001 Revisione: B 47
Lo scopo di FlexPendant SDK è fornire interfacce operatore che soddisfino le esigenze specifiche dei clienti.
Questa sezione si concentra sulle fasi di sviluppo che precedono la codifica vera e propria: analisi e progettazione.
Per iniziare a sviluppare applicazioni personalizzate è necessaria una certa esperienza nell'orientamento agli
oggetti. Si presume che tu ti senta a tuo agio con concetti come oggetti, classi, metodi, ereditarietà, incapsulamento
e così via.
Il risultato dell'analisi orientata agli oggetti è una descrizione di ciò che vogliamo costruire, spesso espressa come
modello concettuale. Anche qualsiasi altra documentazione necessaria per descrivere ciò che vogliamo costruire,
ad esempio le immagini dell'interfaccia utente, fa parte dell'analisi.
L'aspetto più importante per lo sviluppo dell'SDK FlexPendant è la comunicazione con gli utenti finali. Sono
fortemente raccomandate attività che supportino una visione condivisa di ciò che dovrebbe essere sviluppato.
Tali attività possono includere:
Continua
In breve, coinvolgere gli utenti finali fin dalle prime fasi e mantenerli coinvolti durante tutto il progetto di
sviluppo è la strategia migliore.
Nota
Ci vogliono anni per diventare un abile designer orientato agli oggetti. La teoria del design deve essere
trasformata in esperienza pratica e ripetuta più e più volte.
L'obiettivo è produrre codice di alta qualità, che sia economicamente vantaggioso e di facile
manutenzione. Ciò si ottiene, ad esempio, quando l'aggiunta di nuove funzionalità comporterà modifiche
minime al codice esistente e la maggior parte delle modifiche verrà gestita come nuovi metodi e
nuove classi.
Questa tabella presenta alcune considerazioni prima di decidere quanto bene è necessario progettare
la tua applicazione prima di iniziare a scrivere codice:
Considerazione Consiglio
Quanto codice sarà? Se sarà un'applicazione molto semplice con una vista e pochi
pulsanti non sarà nemmeno necessario dividere il codice tra
classi e file diversi.
Se ci sarà una quantità sostanziale di codice e potrebbero
esserci ulteriori estensioni in seguito, dedicare tempo alla
progettazione diventa più rilevante.
Su cosa lavoreranno i diversi sviluppatori? Se sì, dedicare tempo alla progettazione diventa più
rilevante. classi/componenti diversi?
Manterrai tu stesso il codice o il
compito sarà affidato ad altri?
L'aspetto in tempo reale Se sì, la codifica efficiente è importante. Ciò sarà molto più
dell'applicazione è importante? facile da ottenere se dedichi un po’ di tempo alla progettazione.
Nota! Si consiglia inoltre di leggere il capitolo Applicazioni
robuste FlexPendant a pagina 165 prima di iniziare la codifica.
Continua
50 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica
Un evento del controller è un messaggio inviato dal controller che informa che è successo qualcosa.
Gli eventi possono essere rilevati e gestiti dalle applicazioni FlexPendant SDK.
Gli eventi del controller utilizzano i propri thread. Ciò significa che i thread dell'interfaccia utente e i thread degli
eventi del controller possono entrare in conflitto. Questa sezione fornisce informazioni su come evitare ciò.
Le applicazioni SDK FlexPendant possono sottoscrivere una serie di eventi del controller.
Questi sono tutti descritti nel Manuale di riferimento FlexPendant SDK.
Nota
Non vi è alcuna garanzia che riceverai un evento iniziale quando imposti/attivi un evento del controller. È
necessario leggere lo stato iniziale dal controller.
FlexPendant che su PC. Se un thread della GUI e un thread degli eventi del controller entrano in conflitto,
potrebbero verificarsi blocchi critici o dati sovrascritti. Ciò può verificarsi quando a un evento del controller segue
un aggiornamento dell'interfaccia utente, che è in effetti uno scenario molto comune.
È quindi necessario intervenire nel codice per controllare che l'aggiornamento dell'interfaccia utente venga
eseguito dal thread della GUI e non dal thread degli eventi del controller. Questa operazione viene eseguita
imponendo un cambio di thread utilizzando il metodo Invoke o BeginInvoke. Per ulteriori informazioni su
come eseguire questa operazione insieme ad esempi di codice, vedere Metodo Invoke a pagina 52.
Continua
D'altra parte, se l'evento del controller NON dovesse causare alcun aggiornamento dell'interfaccia utente, non
si dovrebbe intraprendere alcuna azione particolare. L'uso di Invoke/BeginInvoke richiede prestazioni elevate
e non deve essere utilizzato più del necessario.
Nota
I conflitti di thread spesso causano impiccagioni. Il touch screen della FlexPendant smette quindi di
rispondere e l'applicazione deve essere riavviata.
Esamina quale eccezione è stata generata quando ti trovi in una situazione del genere.
Le eccezioni System.NotSupportedException (piattaforma FlexPendant) e System.InvalidOperationException
(piattaforma PC) indicano conflitti di thread.
Consulta la sezione successiva per informazioni su come utilizzare Invoke per risolvere il problema.
Metodo di chiamata
Tutte le viste FlexPendant devono ereditare Control/TpsControl, che implementano Invoke e BeginInvoke.
Questi metodi eseguono il gestore delegato/evento specificato sul thread che possiede l'handle della finestra
sottostante del controllo, imponendo così il passaggio da un thread di lavoro al thread della GUI. Questo
è esattamente ciò che serve quando un evento del controller deve essere comunicato all'utente finale del
sistema.
Invoke deve essere chiamato all'interno del gestore eventi occupandosi dell'evento del controller. Nota
che devi creare un nuovo array di oggetti per gli oggetti mittente e argomento:
V.B.:
Si noti inoltre che se si utilizza EventHandler nel metodo Invoke e non la classe delegata specifica, ad
esempio DataValueChangedEventHandler, è necessario eseguire il typecast dell'argomento nel delegato che
aggiorna l'interfaccia utente. Il modo in cui ciò avviene è mostrato nel seguente esempio:
V.B.:
C#:
Continua
Nota
La differenza tra Invoke e BeginInvoke è che il primo effettua una chiamata sincrona e
si bloccherà fino al completamento dell'operazione GUI, mentre BeginInvoke esegue
il gestore eventi specificato in modo asincrono. Il metodo che desideri utilizzare
dipende dalla logica del tuo programma. Il consiglio è di scegliere
BeginInvoke quando possibile.
Nota
Mancia
3HAC036958-001 Revisione: B 53
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
4 Sviluppo di applicazioni del controller
Panoramica
Nel controller del robot è presente un sistema che controlla l'accesso degli utenti: lo User Authorization
System (UAS). Se viene utilizzata questa funzione, ogni utente necessita di un nome utente e di una password per
accedere al controller del robot tramite FlexPendant o RobotStudio.
Se per qualsiasi motivo la connessione al controller viene persa, è necessario effettuare nuovamente l'accesso.
Il titolare del trattamento conserva informazioni su quali operazioni i diversi utenti possono eseguire. La configurazione
dell'UAS viene eseguita in RobotStudio.
Mancia
vengano eseguite operazioni sensibili del controller, un'applicazione SDK FlexPendant dovrebbe verificare che l'utente
sia attualmente connesso e disponga dei diritti UAS corrispondenti.
V.B.:
Sovvenzioni e gruppi
I diritti UAS sono chiamati Grants. L'utente specifico appartiene a uno dei numerosi gruppi definiti, in cui ciascun gruppo
dispone di un numero di concessioni specificate.
Per garantire di disporre delle autorizzazioni necessarie per eseguire un'operazione, utilizzare il metodo
CheckDemandGrant sull'oggetto AuthorizationSystem. La concessione da verificare viene passata come argomento:
V.B.:
Se uas.CheckDemandGrant(Grant.ModifyRapidProgram) Allora
aTask.LoadModuleFromFile(localFile, RapidLoadMode.Replace)
Finisci se
C#:
if (uas.CheckDemandGrant(Grant.ModifyRapidProgram)) {
aTask.LoadModuleFromFile(localFile, RapidLoadMode.Replace);
}
Nota
L'applicazione FlexPendant SDK non può sovrascrivere la configurazione UAS. Ciò significa che il sistema alla fine
ti impedirà di eseguire un'azione non consentita.
Continua
GetCurrentGrants e DemandGrant
Ancora un'altra soluzione è chiamare DemandGrant con uno dei membri statici di Grant
come in argomento.
Mancia
Per ulteriori informazioni sui membri UAS e Grant, consultare il Manuale di riferimento
SDK FlexPendant.
3HAC036958-001 Revisione: B 55
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica
I linguaggi di programmazione .NET forniscono supporto integrato per la gestione delle eccezioni, che consente al
programma di rilevare e ripristinare gli errori durante l'esecuzione.
Nel codice gestito, l'esecuzione non può continuare nello stesso thread dopo un'eccezione non gestita. Il thread
termina e, se si tratta del thread del programma, termina il programma stesso. Per evitare ciò, è necessario utilizzare
una gestione accurata delle eccezioni.
L'SDK FlexPendant fornisce diverse classi di eccezioni, che vengono utilizzate quando si verificano errori. Se
l'operazione viene rifiutata dal meccanismo di limitazione dell'accesso di sicurezza del controller, ad esempio, viene
generata un'eccezione RejectException.
Se si verifica un'eccezione non gestita, l'applicazione si blocca e TAF visualizza un messaggio grigio sulla FlexPendant.
Dopo la conferma la FlexPendant si riavvierà. Per evitare ciò dovresti assicurarti che qualsiasi potenziale situazione
di errore sia gestita correttamente dal tuo codice.
Il messaggio visualizzato quando si verifica una situazione di errore non gestito potrebbe essere simile al seguente.
NON contattare ABB, ma correggere la gestione degli errori della propria applicazione.
5.5_1Unhandl
Nota
Per ulteriori informazioni su come funzionano le classi di eccezione di FlexPendant SDK, consultare il Manuale
di riferimento FlexPendant SDK. Vedere anche Affidabilità a pagina 176 per ottenere informazioni più dettagliate
Prova-cattura-finalmente
Le eccezioni vengono gestite in blocchi try - catch (-finally ), che vengono eseguiti al di fuori del normale flusso di
controllo.
56 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
4 Sviluppo di applicazioni del controller
4.5 Gestione delle eccezioni
Continua
Il blocco try racchiude una o più istruzioni da eseguire. Se si verifica un'eccezione all'interno di
questo blocco, l'esecuzione passa al blocco catch, che gestisce l'eccezione.
Il blocco last viene eseguito quando si esce dal blocco Try, indipendentemente dal fatto che si
sia verificata un'eccezione e sia stata gestita. Viene utilizzato per pulire il sistema o il controller
risorse.
Se non si sa quali eccezioni aspettarsi o come gestirle, è possibile rilevarle e non è necessario
eseguire alcuna operazione. Ciò, tuttavia, potrebbe rendere difficile l'individuazione degli errori,
poiché le eccezioni includono informazioni sulla causa del problema.
Pertanto, provare almeno a visualizzare il messaggio di eccezione, utilizzando una finestra di
messaggio o i tipi Debug o Trace. Per ulteriori informazioni, vedere Output di debug a pagina 185
e Traccia e debug a pagina 187.
Typecasting
Quando si digitano valori Signal o RapidData, ad esempio, esiste il rischio potenziale di eccezioni di
typecast. Per evitare ciò è possibile controllare l'oggetto utilizzando l'operatore is sia per i tipi di
valore che per quelli di riferimento:
V.B.:
C#:
se (aRapidData.Value è Num) {
In C# è anche possibile utilizzare l'operatore as per i tipi di riferimento. Viene restituito un valore null
se il tipo non è quello previsto:
C#:
DigitalSignal di = this.aController.IOSystem.GetSignal("UserSig")
come segnale digitale;
se (di == nullo)
{
MessageBox.Show(this, null, “Tipo sbagliato”);
}
.La Guida per gli sviluppatori di .NET Framework presenta le seguenti procedure consigliate per la
gestione delle eccezioni:
• Sapere quando impostare un blocco try/catch. Ad esempio, potrebbe essere un'idea migliore
verificare a livello di codice una condizione che è probabile che si verifichi senza utilizzare la
gestione delle eccezioni. Per gli errori che si verificano di routine, questo è consigliato, poiché
le eccezioni richiedono più tempo per essere gestite.
• Utilizzare la gestione delle eccezioni per individuare errori imprevisti. Se l'evento è vero
eccezionale ed è un errore (come una fine file imprevista), la gestione delle eccezioni è la
scelta migliore poiché viene eseguito meno codice nel normale
Continua
case. Ordina sempre le eccezioni in blocchi catch dal più specifico al meno specifico.
Questa tecnica gestisce l'eccezione specifica prima che venga passata a un blocco
catch più generale.
58 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
4 Sviluppo di applicazioni del controller
4.6 Come utilizzare la guida in linea
Panoramica
La guida in linea viene fornita con l'installazione di FlexPendant SDK ed è accessibile dal menu
Start di Windows .
Nota
Il riferimento SDK NON è integrato in Visual Studio. È necessario aprirlo dal menu Start .
Mancia
Per ulteriori informazioni sull'indirizzo Web della RobotStudio Community, dove gli sviluppatori
dell'SDK FlexPendant discutono online problemi e soluzioni software, vedere Documentazione
e guida a pagina 15.
3HAC036958-001 Revisione: B 59
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica
• Come sfruttare alcune funzionalità del sistema che supportano l'uso di schermate personalizzate.
• Come utilizzare la procedura guidata integrata di Visual Studio per configurare una FlexPendant
progetto.
• Come aggiungere i controlli GUI dell'SDK FlexPendant a Visual Studio Toolbox.
Il supporto alla progettazione in Visual Studio consente di disporre visivamente l'applicazione, riducendo
la necessità di scrivere codice. Ciò accelera lo sviluppo e offre un controllo più preciso dell'aspetto
degli schermi FlexPendant.
L'API Controller (CAPI) è il nucleo dell'SDK FlexPendant. Viene utilizzato per accedere al controller
del robot a cui è collegata la FlexPendant. Innanzitutto ci sono informazioni su come è organizzata
questa API pubblica. Successivamente ciascun dominio del CAPI viene trattato separatamente. In tutto il
capitolo sono presenti esempi di codice in C# e VB.
3HAC036958-001 Revisione: B 61
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
5 Utilizzo dell'SDK FlexPendant
5.1.2 Funzionalità del sistema che supportano l'uso di schermate personalizzate
La FlexPendant può essere adattata alle esigenze specifiche degli utenti finali in molti modi diversi. Può essere
utilizzato in 14 lingue diverse, comprese le lingue asiatiche basate sui caratteri come il giapponese e il cinese. Gli
operatori mancini possono adattare il dispositivo dalle impostazioni predefinite semplicemente ruotando il display di 180
gradi.
Quattro degli otto tasti sono programmabili, ovvero la loro funzione può essere assegnata dall'utente finale.
Gli schermi FlexPendant personalizzati, adattati alle esigenze degli utenti finali, rappresentano un altro modo per fornire
le soluzioni flessibili richieste da molti clienti. Per supportare l'uso di schermate personalizzate ci sono un paio di
funzionalità di cui potresti voler parlare agli utenti finali della tua applicazione.
FlexPendant per consentire l'esecuzione RAPID in modalità manuale da una vista SDK FlexPendant. È inoltre possibile
fare in modo che la FlexPendant visualizzi automaticamente una vista SDK quando si cambia la modalità operativa.
l'esecuzione RAPID in modalità manuale con un'applicazione personalizzata come vista attiva.
6.1.0_1AddTe
Continua
6.1.0_2VistaO
Esempio: il
Affinché ciò funzioni, il sistema robotico deve disporre dell'opzione RobotWare FlexPendant Interface.
Gli assembly TpsViewMyApp.dll e TpsViewMyApp.gtpu.dll devono trovarsi nella directory HOME del
sistema robotico attivo. (Una volta scaricati gli assiemi sul controller, è necessario riavviare la
FlexPendant per caricarli.)
Nota
Per ulteriori informazioni sulle istruzioni UIShow, consultare il Manuale tecnico di riferimento -
Istruzioni RAPID, funzioni e tipi di dati
3HAC036958-001 Revisione: B 63
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
5 Utilizzo dell'SDK FlexPendant
Panoramica
È molto semplice impostare un nuovo progetto FlexPendant utilizzando il modello di progetto integrato.
Aggiungerà automaticamente i riferimenti SDK più comuni al progetto e genererà automaticamente del codice
sorgente per la finestra principale dell'applicazione, nel linguaggio di programmazione selezionato, C# o
Visual Basic.
Nota
Per aggiungere un'altra vista al progetto FlexPendant, non è necessario avviare un nuovo progetto. Per ulteriori
informazioni, vedere Stile contenitore a pagina 81.
Procedura di installazione
Passo Azione
1 Nel menu File in Visual Studio scegliere Nuovo e quindi fare clic su Progetto.
2 In Visual Studio 2005, nella finestra di dialogo Nuovo progetto selezionare Visual C#/Smart
Device/FlexPendant o Altri linguaggi/Visual Basic/Smart Device/FlexPendant. In Visual
Studio 2008, selezionare Visual C#/FlexPendant o Altri linguaggi/Visual Basic/FlexPendant).
Nuovo progetto
Nota
Se sul PC sono presenti diverse installazioni dell'SDK FlexPendant, saranno disponibili diversi
modelli tra cui scegliere. Assicurati di selezionare il modello che corrisponde alla versione di
Ro-botWare a cui dovrebbe essere destinata la tua applicazione.
Continua
Passo Azione
3 Inserisci il nome dell'applicazione nel campo Nome e dove desideri che venga archiviata nel campo
Posizione . Fare clic su OK.
Nota
Il nome deve iniziare con "TpsView" . Se lo dimentichi, lo strumento di verifica ABB genererà un
errore una volta realizzato il progetto.
4 La procedura guidata del progetto FlexPendant SDK è ora avviata. Per informazioni su come
configurare l'applicazione utilizzando questa procedura guidata, vedere Attributo FlexPendant
TpsView a pagina 40 e Stile contenitore a pagina 81. Quando si è pronti, fare clic su OK.
5 È necessario impostare il supporto di progettazione per i controlli GUI FlexPendant prima di iniziare la
programmazione. La modalità di esecuzione è descritta in dettaglio in Impostazione del supporto di
progettazione per i controlli FlexPendant a pagina 67.
Nota
Se i riferimenti all'SDK sembrano mancare nel tuo progetto FlexPendant, consulta la sezione
seguente per istruzioni su come risolvere il problema.
Passo Azione
1 Guarda Solution Explorer di Visual Studio. Se hai un progetto C#, espandi il nodo Riferimenti . I
triangoli di avviso indicano che manca il percorso delle DLL di riferimento.
6.1.1_2Impostazione
Per un progetto VB, Solution Explorer ha lo stesso aspetto, tranne per il fatto che non è presente
alcun nodo Riferimenti .
Continua
Passo Azione
2 C#: selezionare l'icona del progetto, fare clic con il pulsante destro del mouse e selezionare Proprietà. Fare clic sulla
scheda Percorsi di riferimento e aggiungere il percorso agli assembly SDK.
VB: selezionare l'icona del progetto, fare clic con il tasto destro e selezionare Proprietà. Fare
clic sulla scheda Riferimenti . Se manca il percorso dei riferimenti all'SDK, aggiungilo accedendo
alla directory in cui si trovano.
Nota
3 Salva il progetto. Noterai che eventuali triangoli di avviso nel nodo Riferimenti di Solution
Explorer scompariranno.
66 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica
Questa sezione descrive come rendere accessibili i controlli della GUI FlexPendant in Visual Studio.
Procedura
Seguire questi passaggi per aggiungere i controlli FlexPendant a Visual Studio Toolbox:
Passo Azione
2 Fare clic con il tasto destro nell'area Casella degli strumenti e selezionare Aggiungi scheda.
3 Assegnare un nome alla nuova scheda della casella degli strumenti, ad esempio Controlli FlexPendant.
4 Fare clic con il tasto destro nell'area della nuova scheda e selezionare Scegli elementi.
5 Nella finestra di dialogo Scegli elementi della casella degli strumenti , accedere alla directory in cui si
trovano gli assembly SDK FlexPendant e importare i seguenti assembly: •
ABB.Robotics.Tps.Windows.Forms.dll •
ABB.Robotics.GTPU.Windows.Forms.dll
• ABB.Robotics.DataBinding.dll Il percorso
predefinito è C:\Programmi\ABB Industrial IT\Robotics IT\SDK\Flex-Pendant SDK 5.xx\bin.
6 In Esplora soluzioni, fai clic con il pulsante destro del mouse su view.cs (view.vb se hai un progetto VB) e
seleziona Progettazione vista se non sei già in modalità progettazione.
Come puoi vedere, i controlli specifici della FlexPendant sono ora accessibili nella Casella degli strumenti.
Per ulteriori informazioni su come utilizzarli, vedere Introduzione al supporto della progettazione visiva a pagina
68.
Nota
Il modo in cui si utilizza Visual Studio Designer per implementare i controlli FlexPendant è molto simile
all'implementazione dei normali controlli .NET. In questo manuale vengono fornite informazioni utili
che potrebbero non essere ovvie per tutti gli utenti. Ma spesso è la Guida generale di Visual Studio a
rispondere a qualsiasi domanda tu possa avere sulle proprietà dei controlli e simili.
3HAC036958-001 Revisione: B 67
Il supporto di progettazione per i controlli utente di Compact Framework era una nuova funzionalità di Visual Studio
2005. Consenteva di includere il supporto di progettazione per i controlli FlexPendant SDK in FlexPendant SDK 5.08.
Da FlexPendant SDK 5.08 in poi si progetta visivamente l'interfaccia utente dell'applicazione FlexPendant in
Visual Studio Designer. I controlli FlexPendant vengono trascinati dalla casella degli strumenti all'area del designer,
spostati e ridimensionati facendo clic e trascinando. Applicando diverse impostazioni nella finestra Proprietà di un
controllo, puoi perfezionarne l'aspetto e il comportamento.
Per utilizzare il supporto della progettazione visiva è necessario aggiungere i controlli FlexPendant alla casella degli
strumenti di Visual Studio. Come eseguire questa operazione è descritto in dettaglio in Impostazione del supporto di
progettazione per i controlli FlexPendant a pagina 67.
Nota
Il supporto alla progettazione per i controlli FlexPendant è da tempo nella lista dei desideri degli utenti di
FlexPendant SDK. Si tratta infatti di una funzionalità che fa risparmiare tempo, poiché la maggior parte del codice
che supporta l'interfaccia utente grafica viene ora generato automaticamente.
Ci si potrebbe chiedere perché i controlli standard di Microsoft Windows non sono stati considerati sufficientemente
buoni da essere utilizzati per il touch screen FlexPendant.
La risposta è che alcuni controlli di Windows potrebbero benissimo essere utilizzati. Altri controlli Windows tuttavia non
sono altrettanto adatti per il touch screen FlexPendant. Per navigare utilizzando i controlli con le dita, in particolare,
è necessario che siano sufficientemente grandi. In altri casi i controlli di Windows semplicemente non appaiono molto
bene sul touch screen.
Nota
Nel Manuale di riferimento FlexPendant SDK, fare clic sulla scheda Contenuto e sul nodo
ABB.Robotics.Tps.Windows.Forms per ottenere una panoramica e una breve descrizione di tutti i controlli
ABB utilizzabili per creare l'interfaccia utente di un'applicazione FlexPendant.
Mancia
La modalità di programmazione di questi controlli ABB è molto simile a quella degli equivalenti controlli Windows.
Se hai bisogno di esempi di codice, la migliore fonte di informazioni è solitamente MSDN. Puoi provare http://
msdn.microsoft.com/library/
default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformslistviewclasstopic.asp, ad esempio, per scoprire
come programmare un ListView.
Continua
Illustrazione
Lo screenshot seguente mostra Visual Studio Toolbox con tutti i controlli FlexPendant a
sinistra. Nell'area Designer a destra è in fase di sviluppo un'applicazione FlexPendant. È possibile
visualizzare parte del controllo del contenitore, insieme a una serie di controlli ABB e Windows
standard.
6.3.1_1MyFir
ATTENZIONE
Continua
ATTENZIONE
Sei pronto per programmare e testare la tua prima applicazione FlexPendant? Se non è stato creato un progetto
FlexPendant e non sono stati aggiunti i controlli FlexPendant a Visual Studio Toolbox, è necessario farlo prima.
Per ulteriori informazioni, vedere Utilizzo del modello di progetto in Visual Studio a pagina 64 e Impostazione
del supporto di progettazione per i controlli FlexPendant a pagina 67.
Seguire questi passaggi per creare e testare una semplice applicazione personalizzata:
Passo Azione
2 Fare doppio clic sul pulsante nel Designer per aprire l'editor del codice.
Continua
Passo Azione
3 Come vedi è stato creato un gestore eventi per l'evento click. Aggiungi il codice per avviare il messaggio
Hello World al suo interno:
private void button1_Click(mittente oggetto, EventArgs e)
{
Tentativo
{
miaLabel1.Text = " Ciao mondo! ";
}
catch(System.Exception ex)
{
// Qui la cattura è obbligatoria!!
// Se non è presente alcun problema per risolvere l'errore causato
dalla tua candidatura,
// non solo la tua applicazione, ma l'intera FlexPend-
formica, si bloccherà, poiché tutte le applicazioni FP condividono lo stesso
thread della GUI.
GTPUMessageBox.Show(this.Parent
, nullo
"
, "Si è verificato un errore imprevisto\nMessaggio di errore: +ex.Message
, "Errore dell'applicazione"
, System.Windows.Forms.MessageBoxIcon.Question
, System.Windows.Forms.MessageBoxButtons.OK);
}
Finalmente
{
// il codice di pulizia va qui (se necessario) // "finalmente"
viene utilizzato per garantire la pulizia
le risorse, il rilascio di mastersip ecc. non vengono saltati a causa
dell'eccezione.
// (In questo caso, la clausola final non è necessaria, poiché non c'è nulla da
pulire.)
}
Un modo alternativo per aggiungere un gestore eventi viene mostrato nel passaggio successivo.
Nota
Un'applicazione FlexPendant da utilizzare nel settore deve avere la gestione delle eccezioni in tutti i
gestori eventi, come mostrato nell'esempio di codice precedente. La FlexPendant ha un solo thread della
GUI, condiviso da tutte le applicazioni in esecuzione sulla FlexPendant. Se l'applicazione interrompe
l'unico thread della GUI, tutte le applicazioni moriranno e la FlexPendant dovrà essere riavviata
manualmente. Per ulteriori informazioni, vedere Gestione delle eccezioni a pagina 56.
Continua
Passo Azione
4 Visualizza la finestra Proprietà del pulsante facendo clic con il pulsante destro del mouse nel
Designer e selezionando Proprietà. Fare clic sul pulsante eventi (lampeggio giallo lampeggiante) per
visualizzare gli eventi disponibili per il pulsante ABB. Come mostrato dalla figura, hai già collegato un
gestore eventi all'evento click.
6.3.1_1B_Aggiungi
Nota
È l'evento predefinito del controllo che ottieni quando fai doppio clic su di esso nel Designer. Per
aggiungere un gestore eventi per un altro evento pulsante, apri la finestra Proprietà e fai doppio clic
sull'evento per cui desideri generare un gestore, ad esempio un gestore eventi FontChanged. Entrerai
nell'editor del codice, il cursore all'interno del gestore eventi generato.
5 Nel menu Compila , fai clic su Compila soluzione e verifica di non aver ricevuto errori di compilazione.
6 Per testare l'applicazione è necessario distribuirla su un sistema robotico. Se non è disponibile alcun
sistema robotico, è necessario creare un sistema robotico utilizzando System Builder di RobotStudio.
7 Copiare l'assembly (*.dll) e l'assembly proxy (*.gtpu.dll) dalla directory bin\Debug (o bin\Release)
del progetto Visual Studio alla directory HOME creata da RobotStudio al momento della creazione del
sistema robotico.
Esempio che mostra i percorsi predefiniti per copia/incolla:
C:\Data\Visual Studio 2005\Projects\TpsViewMyApp\TpsViewMyApp\bin\Debug\ C:
\Systems\sys1_508\HOME Nota!
Se hai già avviato la FlexPendant virtuale devi chiuderla prima di incollare le dll.
Continua
Passo Azione
6.3.1_2Ciao
Nota
Mancia
Quando si utilizza Virtual FlexPendant per test e debug è possibile automatizzare la procedura di copia/
incolla descritta nel passaggio sette precedente. La seguente procedura lo spiega: 1 Fare clic con il
pulsante destro del mouse
2 Per un progetto C#, selezionare la scheda Eventi di compilazione . (Per un progetto VB fare clic su
Scheda Compila e quindi il pulsante Crea eventi .)
3 Fare clic sul pulsante Modifica post-costruzione e aggiungere due comandi che copieranno le DLL
prodotte nella directory del sistema robotico da eseguire. Esempio:
Nota! Non rimuovere le righe di comando post-compilazione predefinite, che creano il proxy di
assembly (*gtpu.dll).
Continua
Pratico: passaggio 2
Questa sezione descrive in dettaglio come programmare le restanti funzionalità
dell'applicazione Hello World mostrate nel passaggio 9 precedente: titolo dell'applicazione,
immagine di sfondo del pulsante, barra dei comandi con una voce di menu. Imparerai anche
come implementare un gestore eventi per il comando Launch View .
Passo Azione
1 Se hai selezionato Vuoto per il tuo progetto, puoi cambiarlo in Modulo scambiandolo
TpsControl con TpsForm direttamente nel codice sorgente, in questo modo:
C#:
classe pubblica TpsViewIRC5App14: TpsForm, ITpsViewSetup,
ITpsViewAttivazione
V.B.:
Nota
La finestra di progettazione ora mostra la barra del titolo sopra il controllo contenitore.
2 Fai clic con il pulsante destro del mouse in un punto qualsiasi al centro del controllo contenitore e seleziona Proprietà.
3 Inserisci "Questa è la mia applicazione Hello World" nella proprietà Text . Vedi il suggerimento di
Vuoto o Modulo? a pagina 81 se la proprietà Testo non è disponibile.
5 Fare clic sulla proprietà MenuItems e sul pulsante Sfoglia che viene visualizzato una volta
selezionata la proprietà.
Continua
Passo Azione
6 Nell'editor della raccolta MenuItem, ora avviato, fare clic sul pulsante Aggiungi .
Quindi inserisci "Avvia vista" nella proprietà Testo . Fare clic su OK.
6.3.1_4Ciao
Nota
7 Aggiungi un gestore eventi con codice che avvierà la visualizzazione Jogging standard quando
viene premuto il pulsante Avvia visualizzazione.
L'aggiunta di gestori eventi viene eseguita in modo diverso in Visual Studio a seconda del
linguaggio di programmazione in uso.
Per C#:
Nel costruttore, dopo la chiamata a InitializeComponent, aggiungi una sottoscrizione all'evento click
del comando “Launch View”. Scrivere:
menuItem1.Fare clic su +=
poi TAB due volte. Come noterai, Visual Studio intellisense genera automaticamente un gestore
eventi e devi solo scrivere il codice per avviare la visualizzazione Jogging:
this._launchService.LaunchView(FpStandardView.Jogging,null,false,out this._cookieJog)
Per VB:
Aggiungere un gestore eventi utilizzando le caselle a discesa precedenti del Visualizzatore codice di
Visual Studio. Trova e seleziona MenuItem1 nella casella a discesa a sinistra e l' evento Click nella
casella a discesa a destra. Il gestore eventi viene ora generato automaticamente e l'unica cosa che
devi fare è scrivere il codice per avviare la vista Jogging (vedi Codice VB in Avvio delle viste
standard a pagina 114).
Nota
Non è possibile allegare un gestore eventi nella finestra delle proprietà, come si fa ad esempio per un
Button.
Continua
Passo Azione
6.3.1_5Ciao
13 Costruisci, distribuisci e avvia l'applicazione, ovvero ripeti i passaggi da cinque a otto in Pratica - Ciao
mondo a pagina 70.
Mancia
Per ulteriori informazioni sulle possibilità di utilizzare visualizzazioni già esistenti per l'applicazione, vedere
Utilizzo del servizio di avvio a pagina 113 e Utilizzo della finestra di dialogo standard per modificare i dati a
pagina 116.
Mancia
Una guida allo stile FlexPendant viene fornita con l'installazione di FlexPendant SDK. Ti aiuterà a presentare
le funzionalità dell'applicazione in modo intuitivo, insegnando le migliori pratiche di progettazione visiva e
esperienza utente dal punto di vista FlexPendant.
Si tratta di una bozza preliminare, ma comunque molto utile.
Potresti anche voler studiare lo standard Microsoft per il visual design all'indirizzo: http://
msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/ch14a.asp
76 3HAC036958-001 Revisione: B
Panoramica
Tutti i controlli SDK FlexPendant appartengono allo spazio
dei nomi ABB.Robotics.Tps.Windows.Forms. Questo spazio dei nomi comprende quindi oltre 40
classi e sottoclassi utilizzate per sviluppare l'interfaccia utente di un'applicazione FlexPendant.
TpsControl può essere utilizzato come controllo contenitore di una vista FlexPendant. Ha anche
l'implementazione predefinita di Dispose, che viene chiamata per liberare la memoria allocata per
un controllo che non dovrebbe più essere utilizzato.
Potresti chiederti perché ciò sia necessario, poiché il framework .NET dispone di un garbage
collector, che dovrebbe sollevare lo sviluppatore dal dovere di liberare la memoria allocata.
La risposta è che il garbage collector non sempre recupera la memoria che non viene più utilizzata.
Pertanto, se programmi un'applicazione destinata ad essere eseguita 24 ore su 24 su un
dispositivo con memoria limitata, sei comunque responsabile di liberare memoria che non viene
più utilizzata. Trascurare di farlo comporterà perdite di memoria permanenti.
6.3.2_1Contr
Continua
Impara e applica queste regole generali per la gestione della memoria dei controlli della GUI. • I controlli
con una rappresentazione grafica, ad esempio ABB Numpad, TabControl, GroupBox, TpsLabel,
ListView e Microsoft PicureBox e DataGrid nella figura, vengono aggiunti automaticamente
alla raccolta di controlli in InitializeComponent. Potrebbe assomigliare a questo:
this.Controls.Add(this.numPad1);
•
Se la figura precedente rappresenta la prima visualizzazione dell'applicazione, i controlli con
rappresentazione grafica verranno eliminati dalla classe base della classe di visualizzazione
quando l'applicazione viene chiusa e il metodo Dispose viene chiamato da TAF. Ciò accade
quando viene eseguita la seguente istruzione nel metodo Dispose: base.Dispose(disponendo);
Se, tuttavia, rappresenta una vista secondaria della tua applicazione
•
(che è effettivamente il caso in questo caso, come puoi vedere dal pulsante di chiusura sulla
barra dei comandi), devi chiamare il suo metodo Dispose dalla prima vista quando viene chiusa.
La sua classe base rimuoverà quindi tutti i controlli che fanno parte della sua raccolta di
controlli, come nel caso precedente.
• I controlli GUI che non hanno una rappresentazione grafica, ma si trovano nel riquadro Componenti
sotto il modulo, ad esempio GTPUSaveFileDialog, RapidDataBindingSource, AlphaPad e
così via NON vengono aggiunti alla raccolta di controlli per impostazione predefinita. Questi
sono quelli che devi prestare particolare attenzione a rimuovere, poiché nessun netturbino
li raccoglierà mai.
Se dimentichi di chiamare esplicitamente Dispose su tali controlli, avrai causato una perdita di
memoria permanente. Studiare attentamente l'esempio di codice nella sezione successiva.
Nota
I controlli Microsoft e ABB si comportano allo stesso modo. La Microsoft ImageList, ad esempio,
comunemente utilizzata nelle applicazioni FlexPendant, non ha una rappresentazione grafica e
deve quindi essere esplicitamente rimossa dal programmatore dell'applicazione.
se (!ÈDisposto)
{
Tentativo
se (smaltire)
{
Continua
if(this.gtpuSaveFileDialog1!= null)
{
this.gtpuSaveFileDialog1.Dispose();
this.gtpuSaveFileDialog1 = null;
}
//Rimuove RapidDataBindingSource
if(this.rapidDataBindingSource1!= null)
{
this.rapidDataBindingSource1.Dispose();
this.rapidDataBindingSource1 = null
}
//Rimuove Alphapad
if(this.alphaPad1!= null)
{
this.alphaPad1.Dispose();
this.alphaPad1 = nullo
}
//Rimuove FolderBrowserDialog
if(this.gtpuFolderBrowserDialog1!= null)
{
this.gtpuFolderBrowserDialog1.Dispose();
this.gtpuFolderBrowserDialog1 = null
}
//Rimuove ImageList
if(this.imageList1!= null)
{
this.imageList1.Dispose(); this.imageList1
= nullo
}
}
}
Finalmente
{
//Rimuove tutti i controlli aggiunti alla raccolta di controlli
base.Dispose(smaltimento);
}
}
}
Infine, poiché si tratta di una vista secondaria, dovremmo richiamare il suo metodo Dispose
dalla prima vista quando viene chiusa.
//Questo codice viene eseguito dalla prima vista quando viene eseguita la vista secondaria
è chiuso
se(form2!= null)
{
form2.Dispose();
forma2 = nullo;
}
}
Continua
ATTENZIONE
Se si dimentica di chiamare Dispose sui controlli che non fanno parte della raccolta di controlli
della classe, si verificheranno perdite di memoria. Ciò potrebbe causare l'esaurimento completo
della memoria della FlexPendant e l'arresto anomalo. Di solito, ciò non accade quando provi la
funzionalità della tua applicazione, ma quando viene eseguita e utilizzata continuamente
durante la produzione. Per verificare che un controllo GUI sia stato effettivamente eliminato,
è possibile, ad esempio, impostare una sottoscrizione al suo evento Disposed e verificare che
venga attivato quando si chiude la visualizzazione.
ATTENZIONE
Anche tutti gli oggetti che accedono ai servizi del controller del robot, ovvero le risorse non
gestite, devono essere rimossi dal programmatore dell'applicazione. Per ulteriori informazioni,
vedere Gestione della memoria a pagina 167.
C#:
se (this.controlX!= null)
{
controlX.Dispose();
controlloX = nullo;
}
base.Dispose(smaltimento);
V.B.:
controlX = Niente
Finisci se
Finisci se
MyBase.Dispose(smaltimento)
Nota
Quando viene eseguita l'ultima istruzione nell'esempio di codice precedente, la classe base
chiamerà Dispose su tutti i controlli aggiunti alla raccolta di controlli in InitializeComponent.
Ciò significa che non è necessario chiamare Dispose su tali controlli.
80 3HAC036958-001 Revisione: B
Panoramica
Il controllo contenitore di un'applicazione FlexPendant è 640x390 pixel, ovvero la dimensione esatta dello schermo
FlexPendant dedicato per una visualizzazione personalizzata. Questa sezione descrive in dettaglio i due diversi
stili che possono essere utilizzati per una vista FlexPendant: Vuoto e Modulo.
Si seleziona quale utilizzare nell'area Stile della procedura guidata del progetto SDK FlexPendant. A
sinistra nella procedura guidata, un'anteprima ti aiuta a vedere la differenza tra i due stili.
6.2.2_1FormT
Nota
Quando si aggiunge una nuova vista a un progetto FlexPendant esistente, si sceglie quale controllo utilizzare
nella finestra di dialogo Aggiungi nuovo elemento . Per ulteriori informazioni su come aggiungere una nuova
vista a un progetto esistente, vedere Stile contenitore a pagina 81.
Vuoto o Forma?
La scelta effettuata nella procedura guidata determina il tipo che la classe di visualizzazione erediterà. Se cambi
idea a riguardo, è facile apportare la modifica direttamente nel codice generato automaticamente.
Vuoto
Questo è un semplice TpsControl. Non ha né una CommandBar, né una TpsCtrlTitleBar.
V.B.:
Continua
Modulo
V.B.:
Nota
Spesso viene scelta Vuota come prima visualizzazione di un'applicazione SDK FlexPendant. Per qualsiasi
vista secondaria, che deve essere aperta dalla prima, Form è il controllo contenitore consigliato.
Nota
Quando selezioni Modulo potresti chiederti perché la barra dei comandi non è visibile nella finestra di
progettazione.
La risposta è che rimane invisibile finché non gli viene aggiunto un MenuItem.
Ciò avviene nella finestra Proprietà del TpsForm, applicando la proprietà MainMenu.
Mancia
La barra dei comandi è già pronta, come per TpsForm, oppure utilizzata come controllo separato disponibile
dalla casella degli strumenti. Se la barra dei comandi è già pronta, il suo disegno viene effettuato modificando
la proprietà MainMenu di TpsForm. Se utilizzato come controllo separato, lo si progetta modificando le sue
stesse proprietà. A parte questo, non c'è differenza nel modo in cui controlli il design.
Una cosa importante da ricordare è che devi aggiungere manualmente il codice di controllo che
avverrà quando fai clic su una voce di menu, poiché non ci sono proprietà evento disponibili nella sua
finestra Proprietà .
Continua
Per ulteriori informazioni su come implementare il controllo e i relativi gestori eventi, vedere Barra dei
comandi a pagina 85.
ATTENZIONE
La barra dei comandi della prima visualizzazione di un'applicazione personalizzata non deve avere
un pulsante Chiudi . Il motivo è che tutte le applicazioni personalizzate devono essere chiuse da
TAF, cosa che avviene quando si fa clic sul pulsante di chiusura [ x ] nell'angolo in alto a destra del
display FlexPendant. (Per la definizione di TAF, vedere Terminologia a pagina 17 o per ulteriori
informazioni su TAF, vedere Comprensione del ciclo di vita dell'applicazione FlexPendant a pagina
38.)
Passo Azione
1 Fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni, scegliere Aggiungi e selezionare Nuovo
elemento.
2 Selezionare uno dei controlli contenitore FlexPendant disponibili nella finestra di dialogo. Normalmente
sarà una Forma.
Nota! Se selezioni Svuota, il codice che scrivi per aprirlo dalla prima visualizzazione è leggermente
diverso rispetto a quando utilizzi Modulo come visualizzazione secondaria.
In questo modo tutte le tue visualizzazioni costituiscono un'unica DLL, il che è conveniente. Nella
maggior parte dei casi non ha senso dividere l'applicazione in più DLL.
Continua
Nota
Assicurati che esista un modo naturale per tornare alla visualizzazione precedente.
Il modo più intuitivo per farlo è fare clic su un pulsante Chiudi o su un pulsante OK o Annulla sulla
barra dei comandi. Se la vista secondaria è un TpsForm, questo gestore eventi la chiude:
Nota
Se stai utilizzando Vuoto come controllo contenitore secondario, il codice che scrivi per avviarlo
è:
this._view2.Mostra(); È
necessario aggiungerlo alla raccolta di controlli della prima visualizzazione prima di poterlo
visualizzare, come un normale controllo .NET.
84 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica
Per l'utente finale la barra dei comandi è un controllo centrale della FlexPendant e un importante mezzo di
interazione con il sistema. Come descritto in Come creare la barra dei comandi a pagina 82, può essere già
pronta o aggiunta al controllo contenitore da Visual Studio Toolbox.
Se usi il contenitore Form, una barra dei comandi è incorporata, ma non è visibile finché non aggiungi una
raccolta MenuItem alla proprietà MainMenu di TpsForm. Come eseguire questa operazione è illustrato nei
passaggi 5 - 6 della sezione Pratica - passaggio 2 a pagina 74.
Se si utilizza Vuoto come contenitore è necessario aggiungere la barra dei comandi dalla casella degli
strumenti. Anche in questo caso i comandi vengono aggiunti come un insieme di voci di menu.
6.3.4_1CmdBa
La barra dei comandi in questa figura ha una raccolta di tre voci di menu: Avvia vista, Chiudi vista e Chiudi.
Inoltre, la voce di menu Avvia vista ha una propria raccolta di voci di menu: Dati rapidi, Jogging e Ripristino
backup.
Nella figura, come mostrato dalla barra delle attività, è stata aperta la vista Ripristino Backup.
È stato fatto facendo clic sulla voce di menu Ripristino backup. L'utente è quindi tornato all'applicazione Hello
World utilizzando la barra delle attività. Se si preme Chiudi visualizzazione, la visualizzazione Ripristino backup
verrà chiusa. La sezione successiva mostra come possono essere implementati i gestori eventi per questa barra
dei comandi.
Continua
Le sottoscrizioni agli eventi delle voci di menu e la gestione degli eventi non possono essere aggiunte
utilizzando il supporto di progettazione, ma devono essere implementate manualmente nel file sorgente.
L'esempio di codice seguente mostra come può essere implementata la barra dei comandi nella
figura precedente.
6.3.4_2CmdBa
Nota
Per avviare una visualizzazione standard è necessario l'oggetto ITpsViewLaunchServices, che può
essere salvato dalla classe TpsView nel suo metodo Install. Per ulteriori informazioni, vedere
Utilizzo del servizio di lancio a pagina 113.
86 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica
Sulla FlexPendant, viene utilizzato TpsFont al posto dei caratteri Windows standard. Utilizzando
TpsFont si risparmia memoria limitata del dispositivo, poiché verranno utilizzati riferimenti statici
invece di nuove istanze di font.
TpsFont
Tahoma è il carattere predefinito della FlexPendant. È anche il font solitamente utilizzato
internamente da TpsFont. Sono preassegnate diverse dimensioni di carattere che possono essere
riutilizzate. Si consiglia di utilizzare TpsFont invece di creare nuove istanze di caratteri per i
controlli dell'interfaccia utente ABB e .NET.
Nota
Per utilizzare il cinese o un'altra lingua con caratteri non occidentali, è necessario utilizzare il
carattere FlexPendant, TpsFont, per tutti i controlli dell'interfaccia utente. Controlla internamente
quale lingua è attualmente attiva sulla FlexPendant e utilizza il carattere corretto per quella
lingua.
Nota
Se si utilizzano caratteri diversi da quelli disponibili sulla FlexPendant, ovvero Tahoma e Courier
New, l'applicazione utilizzerà Tahoma invece di quello previsto.
3HAC036958-001 Revisione: B 87
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica
È facile visualizzare icone, immagini e foto sul touch screen della FlexPendant.
Si consiglia di utilizzare questa possibilità poiché molte persone trovano più facile leggere le immagini
che il testo. Anche le immagini intuitive possono essere ampiamente comprese, il che rappresenta un vero
vantaggio in un contesto multinazionale.
Nota
Il sistema operativo del dispositivo FlexPendant di prima generazione (SX TPU 1) non supporta
immagini con più di 256 colori.
ATTENZIONE
Fare attenzione alle risorse di memoria limitate del dispositivo FlexPendant. Non utilizzare immagini
più grandi del necessario. Vedere anche Introduzione a pagina 165
• Pulsante
• TpsCtrlTitlePanel
• SchedaPagina
• ElementoVisualizzazioneelenco
• TpsForm
PictureBox e ImageList
Sono inoltre disponibili alcuni controlli Windows che possono essere utilizzati per visualizzare le immagini.
Windows.Forms.PictureBox è uno di questi controlli. Può visualizzare la grafica da un file bitmap (.bmp),
icona (.ico), JPEG o GIF. La proprietà Image viene impostata sull'immagine preferita in fase di
progettazione o in fase di esecuzione.
Windows.Forms.ImageList può gestire una raccolta di oggetti Immagine . ImageList viene in genere
utilizzato da un altro controllo, ad esempio ListView o TabControl. Aggiungi bitmap o icone a
ImageList e l'altro controllo può scegliere un'immagine dall'indice ImageList. Come utilizzare le immagini per
un TabControl è descritto in dettaglio in Come aggiungere immagini di schede a pagina 90.
Continua
La classe TpsIcon
La classe TpsIcon offre riferimenti statici a una serie di icone utilizzate nelle
applicazioni FlexPendant standard. Potresti voler utilizzare alcune di queste icone se
soddisfano le esigenze dell'applicazione. TpsIcon appartiene allo spazio
dei nomi ABB.Robotics.Tps.Drawing.
Mancia
Nel Manuale di riferimento FlexPendant SDK, fare clic sulla scheda Cerca e cercare
Membri TpsIcon per ottenere una breve descrizione delle icone ABB disponibili come
proprietà statiche.
3HAC036958-001 Revisione: B 89
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
5.3.7 ControlloTab
Panoramica
Illustrazione
La schermata seguente mostra un TabControl e la relativa finestra Proprietà . Per aggiungere o rimuovere le
schede, fai clic sulla piccola freccia nell'angolo in alto a destra del controllo o fai clic su Aggiungi nuova
TabPage nella parte inferiore della finestra Proprietà .
6.2.4_1TabCo
Nota
ABB TabControl non ha la proprietà TabPages . A seconda del punto in cui si fa clic nel TabControl, si
seleziona l'intero TabControl o una delle TabPages. Per visualizzare la finestra Proprietà per la TabPage
T_ROB1 nella figura, è necessario fare clic sulla scheda T_ROB1 e quindi sulla pagina T_ROB1 successiva
alla scheda.
La procedura seguente spiega come utilizzare la proprietà ImageList per aggiungere icone alle schede di
TabControl:
Passo Azione
1 Trascina un System.Windows.Forms.ImageList nell'area Designer . Come noterai,
non ha una rappresentazione visiva, ma è posizionato nel riquadro dei componenti dopo
il controllo del contenitore.
2 Visualizza la finestra Proprietà di ImageList.
3 Fare clic sulla proprietà Immagini e poi sul pulsante Sfoglia, che apparirà.
Continua
Passo Azione
4 Fai clic su Aggiungi e importa un'immagine. Ripeti finché non hai aggiunto le icone necessarie al
tuo controllo schede.
6.2.4_2TabCo
5 Ora visualizza la finestra Proprietà del TabControl e seleziona ImageList come proprietà ImageList .
6 Selezionare una delle schede e impostare la proprietà ImageIndex, che definisce quale delle immagini
nell'ImageList deve essere utilizzata per la scheda. Ripetere questa procedura per tutte le schede.
Passo Azione
Continua
Passo Azione
2 Visualizzare gli eventi disponibili per il controllo facendo clic sul pulsante Eventi .
6.3.4_3CmdBa
3 Selezionare l' evento SelectedIndexChanged e fare doppio clic. Un nome di metodo ora viene
generato automaticamente per l' evento SelectedIndexChanged . La visualizzazione del codice viene
messa a fuoco, il cursore posizionato all'interno del gestore eventi generato.
4 Aggiungi il codice per far accadere qualcosa. Per ora basterà questo codice:
this.Text = "TabControl notifica il cambiamento delle schede"; Ciò modificherà il testo
del titolo di TpsForm quando si fa clic su una scheda.
Nota
L'iscrizione all'evento è stata effettuata di nascosto e non devi preoccuparti di questo. Se utilizzi
C# noterai che del codice che aggiunge la sottoscrizione è stato inserito nel metodo InitializeComponent:
this.tabControl1.SelectedIndexChanged += nuovo
System.EventHandler(this.tabControl1_SelectedIndexChanged);
Eliminazione di TabControl
Non è necessario chiamare esplicitamente Dispose sull'oggetto TabControl. Il motivo è che
InitializeComponent aggiunge le schede alla raccolta di controlli di TabControl e il TabControl stesso
alla raccolta di controlli di
la classe contenitore. this.Controls.Add(this.tabControl1);
Il TabControl viene quindi rimosso quando il metodo Dispose della classe contenitore chiama Dispose
sulla sua classe base in questo modo: base.Dispose(disponendo);
92 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica
I controlli del pulsante FlexPendant, della casella di testo e della casella combinata non sono molto diversi
dai controlli equivalenti di Windows.
Utilizzando il pulsante
*
Una dimensione comune di un pulsante FlexPendant è 120 45 pixel; può essere molto più piccolo
della dimensione predefinita. A differenza di un pulsante di Windows, può visualizzare un'immagine. Come
sottolineato nell'Illustrazione a pagina 90 si utilizza la proprietà BackgroundImage e si cerca l'immagine da
visualizzare.
Il controllo TextBox è multilinea per impostazione predefinita e utilizza le tipiche barre di scorrimento
FlexPendant come mostrato nella figura seguente.
6.2.7_1TestoB
Utilizzando ComboBox
Il ComboBox è molto simile al System.Windows.Forms.ComboBox, ma è visivamente migliorato per adattarsi
al touch screen FlexPendant. Può essere popolato staticamente utilizzando la proprietà Items come illustrato
nella figura. Se desideri popolarlo dinamicamente, devi scrivere il codice per esso.
6.2.7_2Combinato
SelectedIndexChanged è quello più comunemente utilizzato tra gli eventi. Si verifica quando selezioni un
altro elemento dall'elenco.
3HAC036958-001 Revisione: B 93
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
5 Utilizzo dell'SDK FlexPendant
5.3.9 AlphaPad
Panoramica
Il controllo AlphaPad è una tastiera virtuale che consente di inserire stringhe. Copre l'intero display
della FlexPendant. La figura mostra il suo aspetto in fase di esecuzione.
6.2.10_1Alfa
L'AlphaPad non ha una rappresentazione grafica in fase di progettazione. Quando viene trascinato
dalla Casella degli strumenti al Designer viene posizionato nel riquadro dei componenti, come
mostrato nella figura nella sezione successiva. Viene generato codice simile ai controlli disposti
visivamente sul modulo in fase di progettazione.
Avvio dell'AlphaPad
È necessario scrivere del codice per avviare la tastiera virtuale. Il seguente codice spiega come
farlo:
C#:
this.alphaPad1.ShowMe(questo);
V.B.:
Me.AlphaPad1.ShowMe(Me)
Nota
Il codice per avviare AlphaPad dovrebbe essere eseguito da un gestore di eventi appropriato.
Continua
6.2.10_2Alfa
C#:
private void namePad_Closing(mittente oggetto,
System.ComponentModel.CancelEventArgs e)
{
if ((this.namePad.SelectedText.CompareTo("No Name") == 0) &&
(this.namePad.DialogResult ==
System.Windows.Forms.DialogResult.OK))
{
e.Annulla = vero;
}
}
Continua
Termina IfNamePad.Dispose()
Fine sott
C#:
private void namePad_Closed(mittente oggetto, EventArgs e) {
if (this.namePad.DialogResult ==
System.Windows.Forms.DialogResult.OK)
{
this.answer = this.namePad.SelectedText;
}
this.alphaPad1.Dispose();
}
this.alphaPad1.Dispose();
ATTENZIONE
96 3HAC036958-001 Revisione: B
©Copyright 2010-2013 ABB. Tutti i diritti riservati.
Machine Translated by Google
Panoramica
È possibile utilizzare il controllo ListView in diversi modi. Di solito lo si utilizza per visualizzare un elenco di
elementi con il testo dell'elemento e, facoltativamente, un'icona per identificare il tipo di elemento. Utilizzando la
proprietà CheckBoxes è anche possibile visualizzare una casella di controllo accanto a ciascun elemento nel
controllo, consentendo agli utenti di selezionare gli elementi su cui desiderano eseguire un'azione.
Illustrazione
La figura mostra il Designer. Vengono visualizzati due diversi elenchi ABB ListView, un .Net ImageList
standard nel riquadro dei componenti sotto gli elenchi e la finestra Proprietà per l'elenco Calibrazione,
HotEdit.
6.3.10_1Elenco
per visualizzare tutti gli elementi. Per visualizzare il numero corrente di elementi dell'elenco
ShowNumberOfItems è stato impostato su true. Utilizzando Ordinamento gli elementi dell'elenco possono
essere ordinati alfabeticamente, in questo caso in ordine decrescente . L'elenco viene popolato staticamente
utilizzando la proprietà Items .
La proprietà View dell'altro elenco è impostata su LargeIcon anziché su Details. Per visualizzare le icone viene
utilizzato un .Net ImageList standard. Per prima cosa avvia la finestra Proprietà per ImageList e aggiungi le
immagini che desideri utilizzare. Nel LargeImageList
Continua
della ListView si seleziona l'elenco delle immagini e per ogni Item si seleziona l' ImageIndex da utilizzare,
come mostrato nell'editor della raccolta ListViewItem.
Utilizzando la finestra Proprietà è inoltre possibile aggiungere la gestione degli eventi. L'evento più
comunemente utilizzato è SelectedIndexChanged, che viene attivato quando viene selezionato un nuovo
elemento dell'elenco.
La finestra Proprietà può essere utilizzata per popolare staticamente l'elenco. Di solito, tuttavia, gli elenchi
vengono popolati dinamicamente. In Ottenere segnali utilizzando SignalFilter a pagina 150 è presente un
esempio di codice che mostra come i segnali I/O vengono visualizzati dinamicamente in un ListView ABB.
Proprietà Utilizzo
Scorrevole Specifica se viene aggiunta una barra di scorrimento al controllo quando non c'è
spazio sufficiente per visualizzare tutti gli elementi. L'impostazione predefinita è vera.
Nota! Le tipiche barre di scorrimento FlexPendant vengono utilizzate dal primo elenco
nella figura precedente.
Mostra numero di elementi Specifica se viene visualizzato il numero corrente di elementi nell'elenco.
L'impostazione predefinita è vera. È necessario aggiungere barre di scorrimento al
controllo per consentire di visualizzare tutti gli elementi. Se l'elenco non è scorrevole,
il valore predefinito è false.
Mostra selezione Specifica se la selezione viene visualizzata o meno. L'impostazione predefinita è falsa.
98 3HAC036958-001 Revisione: B
Utilizzando CompactAlphaPad
Il controllo CompactAlphaPad viene utilizzato per abilitare l'input dell'utente. L'input può essere
sotto forma di lettere maiuscole o numeri a seconda della proprietà
ActiveCharPanel, che può essere impostata su Caratteri o Numerico. Ha una dimensione fissa,
abbastanza grande da consentire l'uso di un dito per premere i tasti. Sono disponibili
proprietà per definire se il pannello numerico deve supportare operandi numerici, caratteri
speciali, spazio e virgola. Tutte queste proprietà sono impostate su true nella figura:
6.3.11_1Comp
Affinché la tua applicazione possa utilizzare l'input dell'utente, devi connetterti a una casella di
testo che visualizza il testo o le cifre immesse. Questa connessione deve essere
codificata manualmente, ad esempio nel costruttore, dopo la chiamata a InitializeComponent,
ad esempio:
this.compactAlphaPad1.Target = this.textBox1;
Continua
Il NumPad è molto simile al CompactAlphaPad. Devi creare un Target per utilizzare l'input, ad
esempio:
this.numPad1.Target = this.textBox2;
6.3.11_2Num
5.3.12 GTPUMessageBox
Panoramica
GTPUMessageBox è il controllo della casella di messaggio che deve essere utilizzato dalle applicazioni
FlexPendant. Non utilizzare il MessageBox standard.NET.
Problemi di progettazione
Gli argomenti GTPUMessageBox.Show includono un argomento proprietario, ovvero il controllo che visualizza
MessageBox, e un callback, ovvero un MessageBoxEventHandler chiamato quando
MessageBox viene chiuso.
Tranne questo, viene utilizzato allo stesso modo del normale MessageBox di Windows. Viene utilizzato insieme
ai normali MessageBoxButtons e
MessageBoxIcon.
6.2.6_1WinBu
Nota
A volte può essere un po’ complicato comprendere correttamente il primo argomento. Il proprietario potrebbe
essere this, this.Parent o anche this.Parent.Parent.
Continua
GTPUMessageBox.Show(questo, nuovo
MessageBoxEventHandler(OnServerMessageClosed), messaggio, didascalia,
System.Windows.Forms.MessageBoxIcon.Question,
System.Windows.Forms.MessageBoxButtons.YesNo);
//implementa la richiamata
private void OnServerMessageClosed(mittente dell'oggetto,
ABB.Robotics.Tps.Windows.Forms.MessageBoxEventArgs e)
{
if(e.DialogResult == System.Windows.Forms.DialogResult.No)
{
//Utilizza il server predefinito...
}
}
Se davvero non vogliamo agire in base a come risponde l'utente, ha più senso usare OK
invece di Sì e No come pulsanti della finestra di messaggio, ad esempio:
GTPUMessageBox.Show(this, null, "Non sei autorizzato a eseguire
questa operazione, rivolgiti al tuo amministratore di sistema se hai bisogno dell'accesso",
"Sistema di autorizzazione utente", MessageBoxIcon.Hand, MessageBoxButtons.OK);
Nota
L'ultimo esempio utilizza un titolo della finestra di messaggio migliore rispetto a quelli
precedenti. Il titolo preferibilmente dovrebbe dirti da quale parte del sistema proviene il
messaggio.
Panoramica
L'SDK FlexPendant fornisce una serie di finestre di dialogo di file utilizzate dall'utente finale per interagire con il file system
del controller del robot. Questi controlli ereditano tutti la classe astratta GTPUFileDialog e appartengono allo spazio dei nomi
ABB.Robotics.Tps.Windows.Forms.
Esistono tre diversi tipi di controlli della finestra di dialogo dei file:
GTPUFolderBrowserDialog Consente di specificare una cartella sul file system del controller.
Nota
La finestra di dialogo Apri/Salva/Sfoglia file rappresenta un modo conveniente per specificare la cartella e il nome file
per un'operazione sui file. Dovresti sapere, tuttavia, che le finestre di dialogo stesse non eseguono alcuna operazione sui
file, forniscono solo il percorso del file system del controller che deve essere utilizzato dall'applicazione.
ATTENZIONE
Una volta aggiunti a Visual Studio Designer dalla casella degli strumenti, questi controlli verranno inseriti nel riquadro dei
componenti. Devono essere rimossi esplicitamente tramite una chiamata al loro metodo Dispose, ad esempio nel metodo
Continua
Illustrazione
Quello che segue è uno screenshot del GTPUSaveFileDialog. Le altre finestre di dialogo dei file hanno quasi lo
stesso aspetto e il modo in cui funzionano è molto simile. Utilizzando le icone della barra dei comandi si creano
nuove cartelle e si sfoglia il file system del controller. Insieme all'elenco e alla casella di testo, specifichi un
percorso remoto. La proprietà FileName deve essere letta per recuperare questo percorso. Restituisce il percorso
completo del file system del controller, anche se nella casella di testo Nome file è visibile solo il nome del file
6.3.13_1Salva
Nota! Il pulsante dopo la casella di testo Nome file apre la tastiera virtuale, consentendo di modificare il nome
del file da salvare. La proprietà Filter del controllo è impostata su TEXT(*.txt)|*.txt. La prima parte dell'impostazione
viene visualizzata nella casella di testo del filtro.
Continua
6.3.13_2Salva
Dettagli di implementazione
La finestra Proprietà fornisce una chiara descrizione della proprietà selezionata, come si può vedere nella figura
precedente. Qui verranno descritte in dettaglio solo alcune proprietà importanti:
Proprietà Dettagli
Nome del file Non è possibile accedervi in fase di progettazione utilizzando la finestra Proprietà ,
ma deve essere codificato manualmente quando viene avviata la finestra di dialogo
del file se si tratta di una finestra di dialogo di salvataggio del file.
Nota
Affinché il programma possa utilizzare il percorso del controller selezionato dall'utente finale, è necessario
leggere la proprietà FileName nell'evento Closing/Closed della finestra di dialogo del file.
Continua
Esempio
Questo pezzo di codice imposta InitialDirectory e FileName, quindi imposta una
sottoscrizione all'evento Closed e infine visualizza GTPUSaveFileDialog
saveFileDialog.InitialDirectory = diriniziale; saveFileDialog.FileName =
nomeprogramma; saveFileDialog.Closed += nuovo
EventHandler(SaveProgram_FileDialog_EventHandler);
saveFileDialog.ShowMe(_parent);
Il codice del metodo SaveProgram_FileDialog_EventHandler recupera il percorso specificato
del file system remoto, incluso il nome del file, leggendo la proprietà FileName:
Nota
Il file non è ancora stato salvato sul controller del robot. Per fare ciò dovresti chiamare
FileSystem.PutFile utilizzando il percorso recuperato come argomento remoteFile.
Allo stesso modo, per caricare un file remoto specificato nel file system FlexPendant è
necessario utilizzare il percorso recuperato nella chiamata a FileSystem.GetFile.
RapidDataBindingSource
Utilizzando RapidDataBindingSource avviene un aggiornamento automatico del controllo GUI associato
quando il valore dell'origine dati RAPID specificata nel controller viene modificato o quando il controllo viene
ridisegnato.
SignalBindingSource
Utilizzando SignalBindingSource, avviene un aggiornamento automatico del controllo GUI associato quando il valore del
segnale IO specificato nel controller è cambiato o quando il controllo viene ridisegnato.
Nota
È possibile utilizzare solo dati RAPID persistenti (PERS) come origine dati.
Nota
Se si desidera consentire agli utenti di modificare i dati RAPID, avviare l'applicazione FlexPendant Program
Data standard dall'applicazione è probabilmente la migliore alternativa.
Per ulteriori informazioni, vedere Utilizzo della finestra di dialogo standard per modificare i dati a pagina116.
È possibile utilizzare molti controlli diversi con le origini di associazione, ad esempio TpsLabel, TextBox, ListView
e così via. Lo screenshot seguente mostra due controlli System.Windows.Forms.DataGrid,
ciascuno dei quali si associa a diversi oggetti definiti in RapidDataBindingSource e SignalBindingSource . Le
etichette in ogni GroupBox sono legate alle stesse origini. Come vedi, la griglia visualizza tutti gli oggetti
definiti nel controllo BindingSource, mentre ogni etichetta visualizza la riga della griglia attualmente
selezionata.
Quando un segnale o un valore di dati cambia, questa GUI viene automaticamente aggiornata con il nuovo valore.
Non è necessario scrivere alcun codice per far sì che ciò accada, come durante la configurazione
Continua
6.3.14_1FPVi
ATTENZIONE
Per evitare eventuali perdite di memoria è necessario effettuare una chiamata esplicita
al metodo Dispose dei controlli BindingSource. Tuttavia, gli oggetti wrapper SignalObject
e RapidDataObject creati per te vengono smaltiti dietro le quinte, quindi non devi preoccuparti di
questo.
Continua
Passo Azione
1 Inizia trascinando un RapidDataBindingSource dalla casella degli strumenti al Designer.
Verrà inserito nel riquadro Componenti sotto il modulo. Aprire la finestra Proprietà e
selezionare la proprietà RapidDataList per aggiungere i dati RAPID a cui si è interessati.
Per ogni nuovo membro RapidDataObject è necessario specificare il nome del modulo,
il nome dell'attività e il nome dei dati RAPID persistenti da associare.
6.3.14_2Rilega
Continua
Passo Azione
2 Il passo successivo è aprire la finestra Proprietà per l'etichetta che deve visualizzare
il valore dei dati RAPID. Espandi il nodo DataBindings e seleziona Avanzate.
6.3.14_3Prop
Continua
Passo Azione
6.3.14_4Adva
Nota
Se un'etichetta è stata associata a un'origine dati con diversi oggetti membro, il primo nell'elenco è
quello visualizzato per impostazione predefinita dall'etichetta. Se l'indice selezionato della lista
cambia (se ad esempio si seleziona una riga nella griglia) l'etichetta viene aggiornata
automaticamente per mostrare il valore dell'indice selezionato. Per ulteriori informazioni, vedere
l'illustrazione in Dati RAPID e segnali IO a pagina 107.
Continua
Passo Azione
4 Ora avvia la finestra Proprietà del controllo DataGrid. Imposta ColumnHeaderVis-ible su true e
seleziona l'origine dati nella proprietà DataSource .
6.3.14_5Griglia
Nota
Il controllo DataGrid visualizza solo una riga in fase di progettazione (per ulteriori informazioni,
vedere l'illustrazione del passaggio 1). In fase di esecuzione, tuttavia, viene visualizzata l'intera
raccolta di membri Rapid-DataObject (vedere la figura in Dati di dati RAPID e segnali IO a
pagina 107).
Se sospendi l'associazione non riceverai più alcun aggiornamento se l'origine dati viene
modificata. Tuttavia, l'associazione esiste ancora, quindi se DataSourceUpdateMode è impostato
su OnValidation il valore verrà aggiornato quando si ridisegna il controllo, poiché il valore dal
controller verrà letto prima di essere ridisegnato.
Metodo Descrizione
Panoramica
FlexPendant SDK fornisce un servizio di lancio che consente a un'applicazione FlexPendant SDK di avviare
un'applicazione ABB standard, come l'editor di programmi o la visualizzazione jogging.
È anche possibile avviare un'altra applicazione personalizzata specificando il nome dell'assembly proxy e la
classe di visualizzazione dell'applicazione.
Per ulteriori informazioni su come aggiungere e avviare un'altra visualizzazione della propria applicazione,
vedere Aggiunta di una visualizzazione a un'applicazione personalizzata a pagina 83.
Nota
Per avviare una vista al fine di modificare un'istanza di dati rapidi specificata, è disponibile un altro
meccanismo. Per ulteriori informazioni, vedere Utilizzo della finestra di dialogo standard per modificare i dati
a pagina 116.
Installazione di ITpsViewSetup
Solo le classi che ereditano l'interfaccia ITpsViewSetup possono avviare altre applicazioni. Il metodo Install, che
viene chiamato quando viene avviata l'applicazione personalizzata, ha un argomento mittente. L'applicazione
deve salvare questo oggetto per utilizzare l'interfaccia ITpsViewLaunchServices. Viene utilizzato dal servizio di
lancio per chiamare LaunchView e CloseView.
V.B.:
//dichiarazione
iTpsSite privato come ITpsViewLaunchServices
.....
//Metodo di installazione della classe TpsView
Funzione Installa (mittente ByVal As System.Object, dati ByVal As
System.Object) Come booleano implementa ITpsViewSetup.Install
Se il mittente TypeOf è ITpsViewLaunchServices Allora
// Salva l'oggetto mittente per un uso successivo
Me.iTpsSite = DirectCast(mittente, ITpsViewLaunchServices)
Restituisce Vero
Finisci se
Restituisce Falso
Fine funzione
C#:
//dichiarazione
privato ITpsViewLaunchServices iTpsSite;
......
//Metodo di installazione della classe TpsView bool
ITpsViewSetup.Install(mittente oggetto,dati oggetto)
Continua
{
if (il mittente è ITpsViewLaunchServices) {
// Salva l'oggetto mittente per un uso successivo
this.iTpsSite = mittente come ITpsViewLaunchServices;
restituisce vero;
}
restituire falso;
}
Jogging •
Disconnessione • Backup/Ripristino
Mancia
L'avvio della visualizzazione dati del programma è il modo migliore per consentire agli utenti finali di creare
nuovi dati RAPID.
Nota
Per avviare l'editor del programma è possibile utilizzare come argomento un oggetto di inizializzazione di tipo
RapidEditorInitData. Specifica l'attività, il modulo e la riga che l'editor del programma deve visualizzare
all'apertura. Per le altre viste standard non è possibile utilizzare InitData.
Nell'esempio seguente, l'editor del programma viene avviato in una routine specifica.
Viene creato il primo initData. Quindi il riferimento all'oggetto mittente, recuperato dal metodo Install nell'esempio
precedente, viene utilizzato per chiamare LaunchView.
L'argomento cookie out viene successivamente utilizzato per specificare la vista da chiudere con il metodo
CloseView.
V.B.:
Ritorno
Finisci se
......
Me.iTpsSite.CloseView(Me.cookieRapidEd)
Continua
C#:
RapidEditorInitData initData = new RapidEditorInitData(attività,
modulo,routine.TextRange.Begin.Row;
if(this.iTpsSite.LaunchView(FpStandardView.RapidEditor,initData,true,out
this.cookieRapidEd)!= vero) {
GTPUMessageBox.Show(this, null,"Impossibile avviare l'applicazione RapidEditor");
ritorno;
}
.....
this.iTpsSite.CloseView(this.cookieRapidEd);
Cosa succede se la vista specificata è già aperta quando viene effettuata la chiamata? Il terzo
argomento specifica il comportamento dell'applicazione in questo caso. Se vero, viene avviata un'altra
istanza della vista. Se false, la vista già aperta viene messa a fuoco. Si noti, tuttavia, che la
creazione di una nuova istanza non è possibile per tutte le viste standard. Alla visualizzazione
Jogging, ad esempio, non sono consentite più istanze.
C#:
if (this.iTpsSite.LaunchView("TpsViewCustomApp.gtpu.dll",
"ABB.Robotics.SDK.Views.TpsViewCustomApp", null, true, out this.cookieUser)!= true) {
Nota
È lo spazio dei nomi dell'assembly proxy, ABB.Robotics.SDK.Views, che deve essere utilizzato
per specificare la classe TpsView.
Nota
Panoramica
C#:
Nota
Verificare che RapidData sia del RapidDataType corretto per la finestra di dialogo prima di utilizzarlo, ovvero
tooldata per la finestra di dialogo FpToolCalibration e wobjdata per la finestra di dialogo FpWorkObjectCalibration.
Per ulteriori informazioni, vedere Utilizzo della finestra di dialogo standard per modificare i dati a pagina 116.
Continua
Nota
5.5.1 ABB.Robotica.Controller
Domini CAPI
L'oggetto CAPI principale è ABB.Robotics.Controllers.Controller, che deve essere creato prima
di qualsiasi accesso al controller del robot.
Le librerie di classi sono organizzate in diversi domini (spazi dei nomi), come mostrato nello
screenshot seguente, dalla scheda contenuti del Manuale di riferimento FlexPendant SDK. Il
nome di un dominio ti dice qualcosa sul tipo di servizi che puoi aspettarti da esso.
6.4.1_1FP-Na
Continua
6.4.1_2Contr
Nota
Nel caso normale, viene creato e utilizzato un singolo oggetto Controller in tutta
l'applicazione, la cui durata corrisponde a quella dell'applicazione.
Questa tabella presenta brevi descrizioni del tipo di servizi forniti dai diversi domini CAPI:
Controllori Informazioni sul controller, come indirizzo IP, utente corrente, indirizzo Mac,
modalità operativa, stato del controller e così via. Notifica in caso di modifica
della modalità operativa, dello stato o della padronanza. Backup e ripristino.
Controlla se hai la borsa di studio UAS richiesta e così via.
Dominio registro eventi Notifica quando un nuovo messaggio di registro eventi è stato scritto nel controller.
Titolo, messaggio, categoria, numero di sequenza e timestamp del messaggio.
DominioFileSystem Creare, rinominare o rimuovere file e directory nel file system del controller.
Recuperare un file dal controller e memorizzarlo sul Flex-Pendant e viceversa.
Continua
Liberare la memoria
Utilizzando CAPI creerai oggetti che fanno riferimento a risorse non gestite. (Per ulteriori
informazioni, vedere Definizioni a pagina 17.) È necessario deallocare esplicitamente la memoria
di tali oggetti chiamando il relativo metodo Dispose quando non sono più necessari (al più tardi alla
chiusura dell'applicazione). Altrimenti l'applicazione perderà memoria, che è una risorsa scarsa
sulla piattaforma FlexPendant.
Nota
Fornisce inoltre preziosi esempi di codice e osservazioni sui metodi che richiedono diverse
sovvenzioni UAS e così via, che non sono inclusi in questo manuale.
Panoramica
L'utilizzo delle funzionalità del controller richiede un'attenzione particolare. L'eliminazione degli oggetti CAPI
quando si chiude una vista o l'intera applicazione è fondamentale per risparmiare memoria.
Un'altra trappola da evitare è l'aggiornamento dell'interfaccia utente su un thread di lavoro.
Prima di accedere alla funzionalità del controller è necessario istanziare l'oggetto Controller. Il posto migliore
per farlo è normalmente nel metodo Install, che viene chiamato da TAF dopo l'esecuzione del costruttore della
classe della vista.
La dichiarazione del Controller dovrebbe essere fatta a livello di ambito della classe:
V.B.:
AController privato come controller
C#:
V.B.:
AController = Nuovo controller
C#:
Utilizzando l'oggetto Controller è possibile accedere ai segnali IO, alle variabili dati RAPID, ai messaggi del
registro eventi e così via. La maggior parte di questi oggetti verrà creata in modo esplicito e dovrà essere
eliminata in modo esplicito.
Nota
Evitare di inserire codice che potrebbe generare un'eccezione prima del metodo InitializeComponent.
Quindi almeno hai un'interfaccia utente, in cui puoi visualizzare un MessageBox con informazioni su
cosa è andato storto.
Nota
Se è necessario che più classi accedano al controller, si consiglia di fare riferimento tutte allo stesso oggetto
Controller.
V.B.:
Continua
C#:
AController.OperatingModeChanged += nuovo
OperatingModeChangedEventHandler(UpdateOP);
AController.MastershipChanged += nuovo
MastershipChangedEventHandler(UpdateMast);
Controller.BackupFinish += nuovo
BackupFinishEventHandler(UpdateBack);
Controller.StateChanged += new
StateChangedEventHandler(UpdateState);
Nota
Gli eventi del controller utilizzano i propri thread. Studia eventi e thread di Controller a pagina 51
per scoprire come evitare conflitti di thread.
ATTENZIONE
Non fare affidamento sulla ricezione di un evento iniziale quando si imposta/attiva un evento del
controller. Non vi è alcuna garanzia che venga attivato un evento, quindi è meglio leggere lo stato
iniziale dal controller.
Creazione di un backup
Utilizzando l'oggetto Controller è possibile chiamare il metodo Backup. L'argomento è una stringa
che descrive il percorso della directory sul controller in cui deve essere archiviato il backup. Poiché
il processo di backup viene eseguito in modo asincrono, è possibile aggiungere un gestore eventi
per ricevere un evento BackupCompleted al completamento del backup.
V.B.:
Nota
SDK è la guida completa alla programmazione dell'SDK FlexPendant ed è più dettagliata di questo
manuale. Per i metodi Backup e Ripristino, ad esempio, ci sono descrizioni di parametri, commenti,
esempi di codice e così via.
Smaltire
L'eliminazione dell'oggetto Controller deve essere eseguita nel metodo Uninstall o Dispose della
classe di visualizzazione dell'applicazione.
Continua
Verificare innanzitutto che lo smaltimento non sia già stato effettuato. Non dimenticare di rimuovere
eventuali sottoscrizioni agli eventi del controller prima della chiamata Dispose():
V.B.:
AController.Dispose()
AController = Niente
Finisci se
C#:
se (aController!= null)
{
aController.OperatingModeChanged -= nuovo
OperatingModeChangedEventHandler(OpMChange);
aController.Dispose();
aController = null;
}
ATTENZIONE
Panoramica
Lo spazio dei nomi RapidDomain consente l'accesso ai dati RAPID nel sistema robotico.
Esistono numerose classi SDK FlexPendant che rappresentano i diversi tipi di dati RAPID. Esiste anche una
classe UserDefined utilizzata per fare riferimento alle strutture RECORD in RAPID.
L'evento ValueChanged abilita la notifica da parte del controller quando i dati RAPID persistenti sono cambiati.
Mancia
Un modo comodo e intuitivo per consentire all'utente finale dell'applicazione di leggere e scrivere su dati
RAPID specifici è utilizzare la visualizzazione standard dei dati del programma FlexPendant. Per ulteriori
informazioni, vedere Utilizzo della finestra di dialogo standard per modificare i dati a pagina 116.
Mancia
L'utilizzo dell'associazione dati per i dati RAPID rappresenta un modo rapido per implementare l'accesso
ai dati RAPID. Per ulteriori informazioni, vedere Dati RAPID e segnali IO a pagina 107.
Accesso diretto
L'accesso diretto richiede meno memoria ed è più veloce ed è pertanto consigliato se non è necessario utilizzare
successivamente gli oggetti attività e modulo.
L'esempio seguente mostra come creare un oggetto RapidData che fa riferimento all'istanza dati RAPID “reg1”
nel modulo USER.
V.B.:
C#:
Accesso gerarchico
Se sono necessari oggetti attività e moduli, l'accesso gerarchico può essere più efficiente.
GetRapidData esiste nelle classi Rapid, Task e Module.
Continua
V.B.:
Rd = AController.Rapid.GetTask("T_ROB1").GetModule("USER").
OttieniRapidData("reg1")
C#:
rd = aController.Rapid.GetTask("T_ROB1").GetModule("USER").
GetRapidData("reg1");
L'esempio seguente mostra come creare un oggetto RapidData che fa riferimento all'istanza
"reg100", dichiarata in un modulo condiviso.
V.B.:
Un'altra possibilità è utilizzare l'oggetto Task per accedere all'istanza RAPID, in questo modo:
Nota
Se GetRapidData viene chiamato da Rapid, i dati RAPID verranno trovati anche se il modulo
-Shared è configurato per essere nascosto.
Nota
Nello spazio dei nomi RapidDomain sono presenti tipi che rappresentano i diversi tipi di dati RAPID.
Per creare l'oggetto necessario per rappresentare il valore dei dati RAPID, utilizzare la proprietà
RapidData Value e trasmetterla al tipo corrispondente, ad esempio Num, Bool o Tooldata.
Il codice seguente spiega come eseguire questa operazione se si desidera accedere al valore di un
dato RAPID del tipo di dati RAPID bool:
Continua
V.B.:
'dichiara una variabile di tipo dati RapidDomain.Bool
Dim rapidBool Come RapidDomain.Bool
Dim rd As RapidData = Me.AController.Rapid.GetRapidData( "T_ROB1", "MainModule", "flag" )
Se (rapidBool.Value) Allora
'
Fare qualcosa...
Finisci se
Finisci se
C#:
//dichiara una variabile di tipo dati RapidDomain.Bool RapidDomain.Bool rapidBool;
RapidDomain.RapidData rd =
aController.Rapid.GetRapidData("T_ROB1", "MainModule", "flag"); //verifica che il tipo di dati sia corretto prima
del cast se (rd.Value è
ABB.Robotics.Controllers.RapidDomain.Bool)
{
rapidBool = (ABB.Robotics.Controllers.RapidDomain.Bool)rd.Value; //assegna il valore dei dati RAPID a una
variabile locale
bool boolValue = rapidBool.Value;
}
Se vuoi solo leggere questa variabile puoi usare questa tecnica invece di creare un oggetto RapidDomain.Bool:
V.B.:
Dim b As Boolean = Convert.ToBoolean(rd.Value.ToString)
C#:
bool b = Convert.ToBoolean(rd.Value.ToString());
Il tipo ToolData (che rappresenta il tipo di dati RAPID tooldata) può essere creato in questo modo:
V.B.:
Dim ATool come ToolData
Se Rd.Value è ToolData allora
C#:
ToolData aTool;
if (rd.Value è ToolData)
{
aTool = (ToolData) rd.Value;
}
Continua
Metodo IRapidData.ToString
Tutte le strutture RapidDomain che rappresentano i tipi di dati RAPID implementano
l'interfaccia IRapidData. Ha un metodo ToString, che restituisce il valore dei dati RAPID sotto
forma di stringa. Questo è un semplice esempio:
string boolValue = rapidBool.ToString();
La stringa viene formattata secondo lo stesso principio descritto nella sezione successiva Metodo
IRapidData.FillFromString a pagina 127.
Ecco un esempio di un tipo di dati più complesso. La proprietà ToolDataTframe è di tipo Pose. Il
suo valore Trans viene visualizzato in un'etichetta nel formato [x, y, z].
V.B.:
Me.Label1.Text = ATool.Tframe.Trans.ToString()
C#:
this.label1.Text = aTool.Tframe.Trans.ToString();
Metodo IRapidData.FillFromString
L'interfaccia IRapidData dispone inoltre di un metodo FillFromString, che riempie l'oggetto con
una rappresentazione di stringa RAPID valida. Il metodo può sempre essere utilizzato quando è
necessario modificare i dati RAPID. Utilizzando il metodo con la variabile
RapidDomain.Bool utilizzata in precedenza nel capitolo apparirà così:
rapidBool.FillFromString("Vero")
Formato stringa
Il formato è costruito in modo ricorsivo. Un esempio è il modo più semplice per illustrarlo.
Esempio:
La struttura RapidDomain.Pose corrisponde al tipo di dati RAPID pose, che descrive come un
sistema di coordinate viene spostato e ruotato attorno a un altro sistema di coordinate.
Alla trasformazione delle coordinate frame1 viene assegnato un valore che corrisponde a uno
spostamento nella posizione in cui X=50 mm, Y=0 mm e Z=40 mm. Non c'è rotazione.
Come vedi, la struttura RapidDomain.Pose è composta da altre due strutture, trans e rot. La
struttura trans è composta da tre galleggianti e la struttura marciume
è composto da quattro doppie. Il formato FillFromString per un oggetto Pose è "[[1.0,
Continua
0.0, 0.0, 0.0][10.0, 20.0, 30.0]]”. Questo pezzo di codice mostra come scrivere un nuovo valore in una variabile
di posa RAPID:
V.B.:
if (rd.Value è Posa)
{
Posa rapidPose = (Posa) rd.Value;
rapidPose.FillFromString("[[1.0, 0.5, 0.0, 0.0][10, 15, 10]]"); rd.Value = rapidPose;
Nota
Utilizzando lo stesso principio è possibile rappresentare tipi di dati RAPID arbitrariamente lunghi.
Nota
Il formato della stringa deve essere attentamente osservato. Se l'argomento stringa ha il formato
sbagliato, viene lanciata un'eccezione RapidDataFormatException.
V.B.:
rd.Value = rapidBool
C#:
Questo era un esempio semplice, poiché il valore da modificare era un semplice bool. Spesso, tuttavia,
RAPID utilizza strutture complesse. Utilizzando il metodo FillFromString è possibile assegnare un nuovo valore
a qualsiasi RapidData e scriverlo nel controller.
La stringa deve essere formattata secondo il principio descritto nella sezione precedente. L'esempio seguente
mostra come scrivere un nuovo valore nella struttura pos (x, y, z) di un tooldata RAPID:
V.B.:
Continua
APos.FillFromString("[2,3,3]")
Me.ATool.Tframe.Trans = APos
Me.Rd.Value = Me.ATool
C#:
Pos aPos = nuova Pos();
aPos.FillFromString("[2,3,3]");
this.aTool.Tframe.Trans = aPos;
this.rd.Value = this.aTool;
Nota
Il nuovo valore non viene scritto nel controller finché non viene eseguita l'ultima istruzione.
Aggiungi abbonamento
Il codice seguente spiega come aggiungere una sottoscrizione all'evento ValueChanged:
V.B.:
this.rd.ValueChanged += rd_ValueChanged;
Gestire l'evento
Implementare il gestore eventi. Ricordare che gli eventi del controller utilizzano i propri thread ed evitare
problemi di threading di Winforms utilizzando Control.Invoke, che forza l'esecuzione dal thread in background
al thread della GUI.
V.B.:
C#
Per ulteriori informazioni sui potenziali conflitti di threading nelle applicazioni SDK FlexPendant,
vedere Eventi e thread del controller a pagina 51.
Aggiorna l'interfaccia utente con il nuovo valore. Poiché il valore non fa parte dell'argomento dell'evento, devi
utilizzare la proprietà RapidDataValue per recuperare il nuovo valore:
Continua
V.B.:
C#
private void UpdateGUI(mittente oggetto, System.EventArgs e)
{
ToolData tool1= (ToolData)this.rd.Value;
this.label1.Text = tool1.Tframe.Trans.ToString();
}
Nota
Gli abbonamenti funzionano solo per i dati RAPID dichiarati come PERS.
Smaltimento RapidData
Smaltire sempre gli oggetti RapidData quando non sono più necessari. Se desideri riutilizzare
un oggetto RapidData, dovresti assicurarti di eliminare prima l'oggetto corrente.
V.B.:
C#:
se (rd!= nullo)
{
rd.Dispose();
rd = nullo;
}
Panoramica
In RAPID puoi avere fino a tre array dimensionali. Questi sono accessibili utilizzando un oggetto RapidData
come qualsiasi altro dato RAPID.
Esistono principalmente due modi per accedere a ogni singolo elemento di un array: tramite indicizzatori o
tramite un enumeratore.
Mancia
Un modo comodo e intuitivo per leggere e scrivere elementi dell'array è utilizzare la visualizzazione standard
dei dati di programma della FlexPendant. Fornisci l'elemento che desideri venga visualizzato come argomento
e l'utente può visualizzare o manipolare l'elemento nel modo in cui viene solitamente eseguito sulla
FlexPendant. Per ulteriori informazioni, vedere Utilizzo della finestra di dialogo standard per modificare i dati
a pagina 116.
Oggetto ArrayData
Se RapidData fa riferimento a un array RAPID, la proprietà Value restituisce un oggetto di tipo ArrayData. Prima
di effettuare un cast, controlla il tipo utilizzando l'operatore is o utilizzando la proprietà IsArray sull'oggetto
RapidData.
V.B.:
V.B.:
Continua
Utilizzando gli indicizzatori è possibile accedere a ciascun elemento dell'array, anche in array
tridimensionali. Una combinazione del metodo GetLength e dei cicli For consente di accedere a qualsiasi elemento:
V.B.:
Prossimo
Altro
Prossimo
Prossimo
Finisci se
C#:
Continua
altro {
(doppio)aNum;
V.B.:
Dim aSum As Double = 0R
aSomma += CDbl(aNum)
Prossimo
C#:
doppio aSomma = 0d;
Num aNum;
aSomma += (doppio)aNum;
Panoramica
Un modo alternativo per accedere ai dati RAPID archiviati in un array sono i metodi ReadItem e
WriteItem.
Metodo ReadItem
Utilizzando il metodo ReadItem è possibile accedere direttamente a un elemento dati RAPID in un
array, ad esempio un array con RobTargets o Nums. L'indice dell'elemento è specificato
esplicitamente nella chiamata ReadItem. Il primo elemento è nella posizione 1, ovvero l'array è in
base 1 come in RAPID.
L'esempio seguente recupera il secondo valore Num nel primo array della variabile di dati RAPID
a cui fa riferimento rd.
V.B.:
Dim aNum Come Num
aNum = DirectCast(rd.ReadItem(1, 2), Num)
C#:
Num aNum = (Num)rd.ReadItem(1, 2);
Metodo WriteItem
È possibile utilizzare il metodo WriteItem per scrivere su un singolo elemento di dati RAPID in un
array. L'esempio seguente mostra come scrivere il risultato di una singola operazione del
robot in un array che rappresenta un programma robot totale con diverse operazioni:
V.B.:
Dim aNum As Num = Nuovo Num(OPERAZIONE_OK)
rd.WriteItem(aNum, 1, 2)
C#:
Num aNum = nuovo Num(OPERAZIONE_OK);
rd.WriteItem(aNum, 1, 2);
Nota
Panoramica
Lavori spesso con strutture RECORD nel codice RAPID. Per gestire questi tipi di dati univoci, è stata
implementata una classe UserDefined. Questa classe ha proprietà e metodi per gestire i singoli componenti di
un RECORD.
In alcuni casi l'implementazione della propria struttura .NET può migliorare la progettazione dell'applicazione
e la manutenzione del codice.
L'esempio seguente crea un oggetto UserDefined che fa riferimento ai dati di processo RAPID RECORD:
V.B.:
RapidDataType rdt;
rdt = this.controller.Rapid.GetRapidDataType("T_ROB1", "MyModule", "processdata");
Nota
Se il modulo in cui è definito RECORD è configurato come -Shared, fornisci solo il nome del tipo di dati
come argomento, in questo modo:
rdt = this.controller.Rapid.GetRapidDataType("processdata");
Continua
Ogni singola stringa può quindi essere utilizzata in un metodo FillFromString per convertire il componente in
un tipo di dati specifico, ad esempio RobTarget o ToolData.
Per ulteriori informazioni, vedere Metodo IRapidData.FillFromString a pagina 127.
atC#:
processdata.Components[0].FillFromString("[0,0,0]"); processdata.Components[1].FillFromString("10");
rd.Valore = ud;
Per ulteriori informazioni ed esempi di codice, vedere metodo IRapidData.FillFromString e utilizzo di Rapid
Data.
p.FillFromString(rd.Value.ToString())
C#
p.FillFromString(rd.Value.ToString());
L'implementazione della struttura deve includere un metodo FillFromString e ToString, ovvero ereditare
l'interfaccia IRapidData. È inoltre possibile implementare qualsiasi proprietà e metodo.
V.B.:
Implementa IRapidData
Dati privati come definiti dall'utente
Continua
Ottenere
Restituire i dati
Fine Ottieni
Fine proprietà
.....
Fine struttura
C#:
struttura pubblica ProcessData: IRapidData
{
dati privati definiti dall'utente; ProcessData
pubblico(RapidDataType rdt)
{
dati = nuovo UserDefined(rdt);
}
privato UserDefined IntData
{
ottieni { restituisci i dati; }
imposta { dati = valore; }
}
public int StepOne
{
Ottenere
{
int res = Convert.ToInt32(IntData.Components[0].ToString());
restituire res;
}
impostato
{
IntData.Components[0] = nuovo Num(valore);
}
}
}
C#:
public void FillFromString(string newValue)
Continua
{
IntData.FillFromString(newValue);
}
stringa di override pubblica ToString()
{
return IntData.ToString();
}
NOTA! Il metodo ToString deve utilizzare la parola chiave Overrides in Visual Basic e la parola chiave
override in C#.
Fine proprietà
C#:
{
int res = Convert.ToInt32(IntData.Components[0].ToString());
restituire res;
}
impostato
{
Numtmp = nuovo Num();
tmp.FillFromNum(valore);
IntData.Components[0] = tmp;
}
}
Panoramica
La maggior parte degli elementi RAPID (variabili, moduli, attività, record e così via) sono membri di una
tabella di simboli, nella quale i relativi nomi vengono memorizzati come parte di una struttura ad
albero del programma.
È possibile eseguire una ricerca in questa tabella e ottenere una raccolta di oggetti RapidSymbol, ognuno
dei quali include il nome, la posizione e il tipo dell'oggetto RAPID.
Metodo SearchRapidSymbol La
ricerca deve essere configurata con attenzione, a causa della grande quantità di simboli RAPID presenti in
un sistema. Per definire una query è necessario considerare da dove nell'albero del programma deve
essere eseguita la ricerca, quali simboli sono di interesse e quali informazioni sono necessarie per i
simboli di interesse. Per abilitare la ricerca da diversi livelli, il metodo SearchRapidSymbol è membro di
diverse classi SDK, ad esempio Task, Module e Routine . L'esempio seguente mostra una ricerca eseguita
con Task come punto di partenza:
V.B.:
RapidSymbol[] rsCol;
rsCol = aTask.SearchRapidSymbol(sProp, "num", string.Empty);
Cerca immobili
Il tipo RapidSymbolSearchProperties è complesso e richiede una certa conoscenza dei concetti
RAPID.
Viene utilizzato per specificare il metodo di ricerca, il tipo di simbolo RAPID da cercare, se la ricerca deve
essere ricorsiva, se i simboli sono locali e/o globali e se il risultato della ricerca deve includere o meno solo i
simboli attualmente utilizzati da un programma. Se una proprietà non è valida per un particolare simbolo,
verrà scartata e non escluderà il simbolo dal risultato della ricerca.
Proprietà Descrizione
Metodo di ricerca Specifica la direzione della ricerca, che può essere Blocca (giù) o Ambito (su).
Esempio: se il punto iniziale della ricerca è una routine, una ricerca a blocchi
restituirà i simboli dichiarati all'interno della routine, mentre una ricerca
nell'ambito restituirà i simboli accessibili dalla routine.
Continua
Proprietà Descrizione
Ricorsivo Sia per la ricerca a blocchi che per quella per ambito è possibile scegliere se la
ricerca deve fermarsi al livello di ambito o blocco successivo o continuare
ricorsivamente fino a raggiungere la radice (o foglia) dell'albero della tabella dei simboli.
IsInUse Specifica se devono essere ricercati solo i simboli utilizzati dal programma RAPID
caricato.
Istanza predefinita
V.B.:
Dim SPprop As RapidSymbolSearchProperties =
RapidSymbolSearchProperties.CreateDefault()
C#:
RapidSymbolSearchProperties sProp =
RapidSymbolSearchProperties.CreateDefault();
Proprietà Descrizione
Ricorsivo VERO
GlobalRapidSymbol VERO
LocalRapidSymbol VERO
IsInUse VERO
Utilizzando questa istanza puoi specificare le proprietà di ricerca della ricerca che desideri
eseguire.
Esempio:
V.B.:
SPprop.SearchMethod = SymbolSearchMethod.Scope
SPprop.SymbolType = SymbolTypes.Constant o SymbolTypes.Persistent
SPprop.Recursive = Falso
C#:
sProp.SearchMethod = SymbolSearchMethod.Scope;
sProp.SymbolType = SymbolTypes.Constant | SymbolTypes.Persistent
sProp.Recursive = falso;
Continua
Nota
Nota
Nota
Per cercare un tipo di dati UserDefined è necessario passare il percorso completo al modulo che
contiene la definizione RECORD. Per esempio:
risultato =
tRob1.SearchRapidSymbol(sProp,"RAPID/T_ROB1/MyModule/MyDataType", string.Empty);
Tuttavia, se MyModule è configurato come -Shared, il sistema vede i suoi tipi di dati come installati
e l'attività o il modulo non devono essere inclusi nel percorso
risultato = tRob1.SearchRapidSymbol(sProp,"MyDataType", string.Empty);
Al posto del nome del simbolo RAPID è possibile utilizzare un'espressione regolare. Il meccanismo
di ricerca abbinerà quindi il modello dell'espressione regolare ai simboli nella tabella dei simboli. La
stringa dell'espressione regolare non fa distinzione tra maiuscole e minuscole.
Espressione Senso
. Qualsiasi singolo carattere
^
Qualsiasi simbolo che inizia con
Continua
Espressione Senso
Esempio 1
"^c.*"
Esempio 2
"^reg[1-3]"
Restituisce reg1, Reg1, REG1, reg2, Reg2, REG2, reg3, Reg3 e REG3.
Esempio 3
"^c.*|^reg[1,2]"
Restituisce tutti i simboli che iniziano con c o C nonché reg1, Reg1, REG1, reg2, Reg2 e REG2.
Esempio SearchRapidSymbol
L'esempio seguente ricerca i dati num VAR, PERS o CONST in un'attività e nei relativi moduli.
La ricerca è limitata ai simboli dichiarati globalmente. Per impostazione predefinita il metodo
di ricerca è Blocca, quindi non è necessario impostarlo.
V.B.:
C#:
RapidSymbolSearchProperties sProp =
RapidSymbolSearchProperties.CreateDefault();
sProp.SymbolType = SymbolTypes.RapidData;
sProp.LocalRapidSymbol = falso;
RapidSymbol[] rsCol;
rsCol = aTask.SearchRapidSymbol(sProp, "num", string.Empty);
Continua
Nota
Se myModule è configurato come -Shared e tutte le istanze myData sono dichiarate in myModule, il
metodo di ricerca deve essere impostato su Scope e il metodo
La chiamata SearchRapidSymbol dovrebbe assomigliare a questa:
si possono usare argomenti. RegainMode definisce il modo in cui l'unità meccanica deve gestire lo stato del
percorso all'avvio. ExecutionMode specifica se il programma deve essere eseguito continuamente, tornare
indietro o passare all'istruzione Move successiva e così via.
Il metodo Stop può includere un argomento StopMode, che specifica quando il programma deve arrestarsi (dopo
il ciclo corrente, dopo il completamento dell'istruzione o immediatamente).
V.B.:
aController.Rapid.Start(RegainMode.Regain, ExecutionMode.Continuous)
.....
aController.Rapid.Stop(StopMode.Instruction)
C#:
aController.Rapid.Start(RegainMode.Regain,
ExecutionMode.Continuous);
.....
aController.Rapid.Stop(StopMode.Instruction);
Nota
È anche possibile avviare una routine di servizio o una routine ordinaria senza parametri, come se fosse
una routine di servizio. Per ulteriori informazioni ed esempi di codice, consultare Task.CallRoutine e
Task.CancelRoutine nel Manuale di riferimento FlexPendant SDK.
V.B.:
aController.Rapid.ExecutionStatusChanged += nuovo
ExecutionStatusChangedEventHandler(UpdateUI);
Per ulteriori informazioni ed esempi di codice su come scrivere i gestori eventi necessari per aggiornare la GUI a
causa di un evento del controller, vedere Come comunicare all'utente che i dati RAPID sono cambiati a pagina
129.
Metodo ResetProgramPointer
Il metodo ResetProgramPointer reimposta i puntatori del programma di tutte le attività e li imposta sul punto di
ingresso principale della rispettiva attività.
V.B.:
aController.Rapid.ResetProgramPointer()
Continua
C#:
aController.Rapid.ResetProgramPointer();
Nota
È anche possibile impostare il puntatore del programma su una routine, riga o posizione specificata.
Per ulteriori informazioni ed esempi di codice, consultare Task.SetProgramPointer nel Manuale di
riferimento FlexPendant SDK.
Panoramica
Utilizzando l'oggetto Task è possibile caricare e salvare programmi e singoli moduli. È inoltre possibile
scaricare programmi, ottenere la posizione del puntatore di movimento (MP) e del puntatore di programma
(PP) nonché modificare la posizione del robot.
Se l'estensione del file non è un'estensione valida di modulo (mod o sys) o di programma (pgf), viene lanciata
un'ArgumentException.
V.B.:
Tentativo
ATask.LoadProgramFromFile(APrgFileName, RapidLoadMode.Replace)
ATask.LoadModuleFromFile(AModFileName, RapidLoadMode.Add)
Cattura ex come ArgumentException
Ritorno
C#:
Tentativo
{
aTask.LoadProgramFromFile(aPrgFileName, RapidLoadMode.Replace);
aTask.LoadModuleFromFile(aModFileName, RapidLoadMode.Add);
}
catch (ArgumentException ex)
{
ritorno;
}
V.B.:
C#:
Continua
Salva modulo
È possibile salvare un modulo utilizzando il metodo Module.SaveToFile. Come argomento si utilizza
un percorso al file system del controller.
V.B.:
AModule.SaveToFile(AFilePath)
C#
aModule.SaveToFile(aFilePath);
ProgramPointer e MotionPointer
La proprietà Task.ProgramPointer restituisce la posizione corrente del puntatore del programma
(modulo, routine e numero di riga), ovvero dove il programma è attualmente in esecuzione. La stessa
funzionalità è disponibile per il puntatore di movimento utilizzando la proprietà MotionPointer.
V.B.:
C#:
ProgramPointer pp = aTask.ProgramPointer;
se (pp!= ProgramPointer.Empty)
{
int aRigaInizio = pp.RigaInizio;
.....
}
Metodo ModificaPosizione
Utilizzando il metodo ModifyPosition dell'oggetto Task è possibile modificare la posizione di
un'istanza RobTarget nel programma attualmente caricato. Come argomento fornisci un nome del
modulo e un oggetto TextRange. Il primo RobTarget all'interno dell'intervallo di testo specificato
dall'oggetto TextRange verrà modificato utilizzando il TCP corrente dell'unità meccanica attiva.
V.B.:
Me.ATask.ModifyPosition(AModule, ATextRange)
C#:
this.ATask.ModifyPosition(aModule, aTextRange)
Continua
Mancia
Per ulteriori informazioni sui metodi e sulle proprietà delle attività, consultare il Manuale
di riferimento FlexPendant SDK.
Panoramica
Un sistema robotico utilizza segnali di input e output per controllare i processi. I segnali possono essere di
tipo digitale, analogico o di gruppo. Tali segnali di I/O sono accessibili tramite l'SDK.
I cambiamenti di segnale nel sistema robotico sono spesso significativi e ci sono molti scenari in cui gli
utenti finali del sistema necessitano di notifica dei cambiamenti di segnale.
Accesso ai segnali
L'accesso ai segnali avviene tramite l'oggetto Controller e la sua proprietà IOSystem, che rappresenta
lo spazio del segnale IO nel controller del robot.
Per accedere a un segnale è necessario il nome di sistema del segnale. L'oggetto restituito dal metodo
IOSystem.GetSignal è di tipo Signal.
V.B.:
Dim Signal1 come segnale = AController.IOSystem.GetSignal("signal
nome")
C#:
Segnale segnale1 = aController.IOSystem.GetSignal("nome segnale");
L'oggetto Signal restituito deve essere convertito in segnale digitale, analogico o di gruppo.
L'esempio seguente mostra come viene creato un segnale di tipo DigitalSignal:
V.B.:
Dim DISig As DigitalSignal = DirectCast(Segnale1, Segnaledigitale)
C#:
Segnale digitale diSig = segnale (Segnale digitale)1;
C#:
Segnale analogico aiSig = segnale (Segnale analogico)1;
C#:
Segnale di gruppo giSig = (Segnale di gruppo) segnale1;
Nota
Ricordarsi di chiamare il metodo Dispose del segnale quando non deve più essere utilizzato.
Continua
V.B.:
controller.IOSystem.GetSignals(aSigFilter)
C#:
Segnali SignalCollection =
controller.IOSystem.GetSignals(aSigFilter);
Questa parte di codice esegue un'iterazione della raccolta di segnali e aggiunge tutti i segnali a un controllo
ListView. L'elenco ha tre colonne che mostrano il nome, il tipo e il valore del segnale:
V.B.:
C#:
C#:
Continua
Segnale digitale
Questo pezzo di codice legge il segnale digitale DO1 e seleziona una casella di controllo se il valore del segnale
è 1 (ON):
V.B.:
C#:
Segnale analogico
Questo pezzo di codice legge il valore del segnale analogico AO1 e lo visualizza in una casella di testo:
V.B.:
Nota
In modalità manuale è possibile modificare il valore di un segnale solo se il livello di accesso del segnale è
TUTTI. In caso contrario, il controller deve essere in modalità automatica.
Segnale digitale
Questo pezzo di codice modifica il valore di un segnale digitale nel controller quando si seleziona/deseleziona
una casella di controllo:
Continua
V.B.:
digitalSig.[Set]()
Altro
digitalSig.Reset()
Finisci se
Fine sott
C#:
se (this.checkBox1.Checked)
{
digitalSig.Set();
}
altro
{
digitalSig.Reset();
}
}
Segnale analogico
Questo pezzo di codice scrive il valore immesso in una casella di testo sul segnale analogico AO1.
Il valore viene convertito da stringa a float prima di essere scritto nel controller:
V.B.:
Dim analogSigVal As Single = Convert.ToSingle(Me.textBox1.Text) analogSig.Value = analogSigVal
C#:
float analogSigVal = Convert.ToSingle(this.textBox1.Text); analogSig.Value = analogSigVal;
C#
Continua
NOTA! La struttura del gestore eventi viene generata automaticamente utilizzando il tasto Tab due volte dopo
"+=" nell'istruzione precedente: private void
aiSig_Changed(object sender, SignalChangeEventArgs e)
{ }
C#:
V.B.:
this.Invoke(nuovo ABB.Robotics.Controllers.IOSystemDomain.
SignalChangedEventHandler(this.UpdateUI), nuovo Oggetto[] {mittente, e});
Per ulteriori informazioni, vedere Eventi e thread del controller a pagina 51.
V.B.:
Val = Valore.Stato
Me.TextBox1.Text = Val.ToString()
....
Fine sott
Continua
C#:
private void UpdateUI(mittente dell'oggetto, SignalChangedEventArgs e)
{
Stato SignalState = e.NewSignalState;
....
valore float = stato.Valore
this.textBox1.Text = val.ToString()
}
Nota
Non contare sulla ricezione di un evento iniziale quando imposti l'abbonamento. Per ottenere
le prime informazioni sul valore di un segnale, dovresti leggerlo utilizzando la proprietà Value.
Nota
Panoramica
I messaggi del registro eventi possono contenere informazioni sullo stato del controller,
sull'esecuzione RAPID, sui processi in esecuzione del controller e così via.
Utilizzando l'SDK è possibile leggere i messaggi in coda o utilizzare un gestore eventi che riceverà
una copia di ogni nuovo messaggio di registro. Un messaggio del registro eventi contiene il tipo
di coda, il tipo di evento, l'ora dell'evento, il titolo dell'evento e il messaggio.
V.B.:
Gatto = Log.Categorie(4)
C#:
EventLogCategoria gatto;
cat = log.GetCategory(CategoryType.Program);
O
cat = log.GetCategory[4];
Nota
Continua
O
Dim msg come EventLogMessage
Per ogni messaggio in Cat.Messaggi
Me.textBox1.Text = msg.Titolo
.....
Articolo successivo
C#:
EventLogMessage msg = cat.Messaggi[1];
O
foreach(EventLogMessage msg in cat.Messaggi)
{
this.textBox1.Text = msg.Titolo;
.....
}
Evento MessageWritten
È possibile aggiungere un gestore eventi che viene avvisato quando un nuovo messaggio viene
scritto nel registro eventi del controller. Questo viene fatto iscrivendosi all'evento EventLog
MessageWritten.
C#:
private void log_MessageWritten(mittente dell'oggetto,
ArgEventoMessaggioWritten e)
{
EventLogMessage msg = e.Message;
}
Nota
Panoramica
Lo spazio dei nomi MotionDomain consente di accedere alle unità meccaniche del sistema robotico.
Utilizzando un oggetto MotionSystem è possibile inviare comandi di jogging a un'unità meccanica e ottenere o
impostare la modalità jogging incrementale. Utilizzando un oggetto MechanicalUnit è possibile ottenere molte
informazioni sulle unità meccaniche del sistema robotico.
È inoltre possibile iscriversi alle modifiche dell'unità meccanica, ad esempio modifica dell'utensile, dell'oggetto di
lavoro, del sistema coordinato, della modalità di movimento o della dimensione del passo incrementale.
Oggetto MotionSystem È
possibile accedere al sistema di movimento utilizzando la proprietà Controller MotionSystem.
V.B.:
V.B.:
Dim aMechCol As MechanicalUnitCollection =
aController.MotionSystem.GetMechanicalUnits()
Dim aMechUnit As MechanicalUnit =
aController.MotionSystem.GetActiveMechanicalUnit();
C#:
MechanicalUnitCollection aMechCol =
aController.MotionSystem.GetMechanicalUnits();
UnitàMeccanica aMechUnit =
aController.MotionSystem.GetActiveMechanicalUnit();
Jogging
È possibile muovere l'unità meccanica attiva utilizzando il metodo SetJoggingCmd e le chiamate JoggingStart e
JoggingStop. A seconda del MotionMode e dell'IncrementalMode selezionati vengono configurati giunti e
velocità diversi.
V.B.:
aController.MotionSystem.JoggingStop()
aMechUnit.MotionMode = MotionModeType.Linear
aController.MotionSystem.IncrementalMode = IncrementalModeType.Small
aController.MotionSystem.SetJoggingCmd(-50, 50, 0)
aController.MotionSystem.JoggingStart()
Continua
C#:
aController.MotionSystem.JoggingStop();
aMechUnit.MotionMode = MotionModeType.Linear;
aController.MotionSystem.IncrementalMode =
IncrementalModeType.Small;
aController.MotionSystem.SetJoggingCmd(-50, 50, 0);
aController.MotionSystem.JoggingStart();
V.B.:
Evento DataChanged
Iscrivendoti all'evento DataChanged dell'oggetto MechanicalUnit, riceverai una notifica quando si verifica un
cambio di utensile, oggetto di lavoro, sistema coordinato, modalità di movimento o dimensione del passo
incrementale.
V.B.:
Case MechanicalUnitDataChangeReason.Tool
ChangeOfTool(DirectCast(mittente, MechanicalUnit))
Case MechanicalUnitDataChangeReason.WorkObject
......
Fine Seleziona
Fine sott
C#:
aMechUnit.DataChanged += nuovo
MechanicalUnitDataEventHandler(aMech_DataChanged);
.....
Continua
Mancia
Panoramica
Utilizzando FlexPendant SDK FileSystemDomain è possibile creare, salvare, caricare, rinominare ed eliminare
file sul controller. Puoi anche creare ed eliminare directory.
V.B.:
V.B.:
V.B.:
aController.FileSystem.FileSystem.GetFile(remoteFilePath,
percorsoFilelocale)
C#:
aController.FileSystem.GetFile(remoteFilePath, localFilePath);
Salvataggio di file
È possibile salvare un file nel file system del controller utilizzando il metodo PutFile. Se l'operazione fallisce viene
generata un'eccezione. Gli argomenti sono percorsi completi inclusi i nomi dei file.
V.B.:
aController.FileSystem.PutFile(localFilePath, remoteFilePath)
C#:
aController.FileSystem.PutFile(localFilePath, remoteFilePath);
Continua
C#:
ControllerFileSystemInfo[] anArray;
Informazioni ControllerFileSystemInfo;
anArray = aController.FileSystem.GetFilesAndDirectories("search
modello");
for (int i=0;i<anArray.Length;i++) {
informazioni = anArray[i];
......
}
Mancia
Panoramica
Il SystemInfoDomain fornisce informazioni sul sistema robotico attivo. Ciò avviene principalmente attraverso i
metodi e le proprietà statiche della classe SystemInfo:
5.5.8_1Sistema
Classe SystemInfo
Si accede alla funzionalità di SystemInfoDomain chiamando i metodi statici della classe SystemInfo. Il
codice seguente spiega come recuperare il percorso nel file system del controller alla directory di rilascio
(ROBOTWARE) del sistema attivo.
Esempio:
stringa rWDir =
ABB.Robotics.Controllers.SystemInfoDomain.SystemInfo.ReleasePath
Allo stesso modo, è possibile recuperare il percorso della directory di sistema attiva:
stringa sysDir =
ABB.Robotics.Controllers.SystemInfoDomain.SystemInfo.SystemPath
Continua
Opzioni di sistema
Utilizzando la proprietà SystemInfo.SystemOptions è possibile recuperare le opzioni di sistema del
sistema robot attualmente attivo. Il risultato è un array di oggetti SystemOption. Se elenchi la proprietà
Nome di questi oggetti otterrai lo stesso risultato mostrato nel SystemBuilder di RobotStudio, ad esempio:
5.5.8_2Sistema
Opzioni aggiuntive
Utilizzando la proprietà SystemInfo.AdditionalOptions è possibile scoprire quali opzioni aggiuntive sono
installate nel sistema robotico. Il risultato è un array di oggetti AdditionalOption. La proprietà
AdditionalOption.Path restituisce il percorso della directory di installazione dell'opzione aggiuntiva.
• Stringa di chiavi
• Nome
• Sentiero
• Tipo
• Informazioni sulla versione
Nota
Panoramica
Sviluppare un'applicazione per un dispositivo con risorse limitate, come memoria e potenza di
elaborazione, può essere piuttosto impegnativo. Inoltre, avere un'applicazione in esecuzione 24 ore
su 24 rivelerà punti deboli nella progettazione e nell'implementazione che potrebbero causare
rallentamenti delle prestazioni o blocchi della FlexPendant.
Nel peggiore dei casi, l'applicazione prosciugherà tutta la memoria della FlexPendant durante
la produzione e causerà un arresto anomalo della memoria esaurita. Può addirittura rallentare
le prestazioni del controller del robot a causa dell'uso eccessivo delle risorse del controller.
Questo capitolo descrive come progettare e implementare applicazioni affidabili e con ottime prestazioni
per FlexPendant. Presenta alcune buone pratiche da utilizzare, così come alcune insidie che
dovrebbero essere evitate.
È parte integrante dell'IRC5, collegato al controller tramite un cavo e un connettore integrati. Utilizzando
l'opzione del pulsante hot plug, tuttavia, è possibile disconnettere la FlexPendant in modalità
automatica e continuare a funzionare senza di essa.
Esistono modi per riavviare la FlexPendant senza dover riavviare il controller (per ulteriori informazioni,
vedere Riavviare la FlexPendant a pagina 35). Al riavvio della FlexPendant gli assiemi e le risorse delle
applicazioni SDK FlexPendant vengono scaricati nel file system FlexPendant dal controller del
robot.
*
Visualizzazione totale 640 480 pixel
*
Visualizzazione dell'applicazione SDK FlexPendant 640 390 pixel
RAM: 64 MB All'avvio l'immagine compressa viene copiata nella RAM. Tutta l'esecuzione del codice
utilizza la RAM.
E2PROM _ Memorizza i valori di calibrazione del touch screen, i valori di calibrazione del joystick e
così via. Utilizzato solo internamente.
Continua
Sistema operativo 8 MB
Ecco alcuni consigli per aiutarti ad assicurarti che la tua applicazione non superi i limiti di memoria:
1 Non consentire più di UNA istanza impostando il parametro TpsViewType dell'attributo TpsView
su Statico. Per ulteriori informazioni, vedere Tipo di applicazione a pagina 42.
2 Evitare l'uso eccessivo di immagini. Non utilizzare immagini più grandi del necessario.
Controlla la dimensione delle immagini che utilizzerà la tua applicazione.
3 Utilizzare fpcmd “-memShow” per verificare la quantità di memoria in uso quando l'applicazione
è attiva. Apri un paio di editor di programmi e avvia l'esecuzione RAPID. Per ulteriori
informazioni, vedere Individuazione delle perdite di memoria a pagina 169.
4 Evitare dati e metodi statici.
5 Rilasciare memoria per gli oggetti che non vengono utilizzati chiamando Dispose
metodo.
Inoltre, gli oggetti utilizzati per accedere alle risorse del controller del robot devono essere rilasciati
dall'applicazione personalizzata tramite una chiamata esplicita al relativo metodo Dispose.
Anche gli oggetti SignalBindingSource e RapidDataBindingSouce, così come tutti gli altri oggetti
situati nel riquadro dei componenti di Visual Studio Designer, devono essere eliminati esplicitamente,
altrimenti l'applicazione avrà una perdita di memoria permanente.
Nota
Il creatore di un oggetto che implementa l'interfaccia IDisposable è responsabile della sua durata e
della chiamata a Dispose.
Mancia
Potresti chiederti perché il Garbage Collector .NET non può garantire che tutti gli oggetti a cui non
viene più fatto riferimento vengano definitivamente distrutti? Il team di sviluppo FlexPendant ha fatto
del suo meglio per rimuovere tutti gli oggetti rimanenti di un'applicazione SDK alla chiusura
dell'applicazione, ad esempio i finalizzatori implementati per le classi TpsControl,
RapidDataBindingSouce e SignalBindingSource. A causa dell'implementazione di Microsoft,
tuttavia, il runtime .NET rifiuta comunque di distruggere questi oggetti a meno che non venga
chiamato il loro metodo Dispose. Questo comportamento è in discussione. Se sei curioso di saperne
di più, questi articoli della community potrebbero interessarti.
www.bluebytesoftware.com/blog/PermaLink.aspx?guid=88e62cdf-5919-4ac7-bc33-20c06ae539ae
Garbage Collection: gestione automatica della memoria in Microsoft .NET Framework (rivista
MSDN): ms-help://ms.msdnqtr.v80.en/
ms.msdn.v80/dnmag00/html/GCI.htm
Continua
La disinstallazione viene richiamata quando la visualizzazione client viene chiusa. Dopo la disinstallazione è
stato chiamato, TAF chiamerà anche il metodo Dispose della classe view. Questi metodi
offrono quindi l'ultima opportunità per pulire e rilasciare la memoria e le risorse di sistema
conservate dall'applicazione personalizzata.
Nota
Continua
7.2_1Smaltire
Nota
La gestione degli errori dovrebbe essere aggiunta al metodo Dispose (lasciato fuori nella figura).
Nota
Assicurati di aver annullato la sottoscrizione a tutti gli eventi dal controller del robot prima di
chiamare il metodo Dispose di un oggetto CAPI. Se è stato fatto con il metodo Deactivate,
che è quello solitamente consigliato, non dovresti farlo di nuovo con il metodo Dispose.
Assicurati inoltre di non tentare di accedere a un oggetto dopo che è stato eliminato.
Continua
Per ulteriori informazioni sulla finestra della console, vedere Codici di errore di eccezione a pagina 181
Risultato:
La componente di carico indica la quantità di memoria RAM utilizzata sulla FlexPendant (espressa in
percentuale della quantità totale) e il numero tra parentesi indica il tempo impiegato in ms dopo l'avvio.
Ad esempio, nel risultato precedente, 54 è la percentuale di memoria utilizzata nella FlexPendant e
261955 ms è il tempo impiegato dopo l'avvio.
Testare tutte le funzioni dell'applicazione con diverse altre viste FlexPendant visibili nella barra delle
attività ed eventualmente con una o più attività RAPID in esecuzione. Osserva come la tua
implementazione influisce sulla memoria. Chiudi l'applicazione e assicurati che sia disponibile la
stessa quantità di memoria di prima di aprirla.
La seguente procedura mostra ancora un altro modo per verificare che l'applicazione venga pulita
correttamente:
Passo Azione
1 Disconnettersi dalla FlexPendant facendo clic su Disconnetti nel menu ABB.
2 Nella finestra della console del controller scrivi fpcmd_enable_console_output.
3 Scrivi fpcmd "-a".
4 Per ogni classe cpp controlla il numero di istanze. Deve essere 0, ad eccezione
di AdaptController (1) e AdaptEventImpl (1).
5 Se il passaggio precedente mostra che sono rimasti oggetti non gestiti, è necessario
cercare nel codice le chiamate Dispose mancanti.
Nota
È necessario utilizzare il dispositivo FlexPendant reale durante la verifica del consumo di memoria e
la ricerca di perdite di memoria nel codice.
6.3 Prestazioni
A proposito di prestazioni
Un'applicazione FlexPendant non può soddisfare le impegnative richieste in tempo reale. Tuttavia, non
dovrebbero esserci differenze nelle prestazioni tra un'applicazione FlexPendant SDK e le applicazioni standard
del dispositivo. Se la tua richiesta è lenta, i consigli contenuti in questa sezione ti saranno utili.
Mancia
Un consiglio generale (forse una raccomandazione troppo ovvia) è che meno codice normalmente significa codice
più veloce. Ricordare che i metodi eseguiti frequentemente, come OnPaint, gestori di eventi e così via. deve
essere efficiente. Tutto ciò che può essere calcolato una volta e memorizzato per un uso futuro dovrebbe essere
calcolato una sola volta.
La cosa migliore che puoi fare per migliorare le prestazioni è probabilmente assicurarti di non accedere alle
funzionalità del controller più spesso del necessario. Per raggiungere questo obiettivo è necessario comprendere
CAPI, le librerie di classi SDK utilizzate per accedere alle funzionalità del controller del robot.
È molto facile utilizzare una proprietà di una classe e non rendersi conto che è stato effettivamente effettuato
un accesso al controller. Una raccomandazione generale è provare a utilizzare le sottoscrizioni alle informazioni
del controller (eventi) ove applicabile e lasciare che l'applicazione memorizzi i valori aggiornati invece di eseguire
numerose operazioni di lettura verso la stessa risorsa del controller.
Mancia
Puoi ottenere facilmente una stima del numero di accessi al controller eseguiti dalla tua applicazione
in diversi scenari utente utilizzando una console del controller del robot. Il comando della console
robdisp_watch 2 monitora e stampa gli accessi al controller effettuati dalla FlexPendant alla console. Fare clic
su un pulsante dell'applicazione, ad esempio, e studiare come la FlexPendant e il controller comunicano
in risposta a questa azione. Inserisci il comando robdisp_watch 0 per disattivare questo servizio. (Il
servizio monitor rallenta il tempo di risposta della tua applicazione, a causa della stampa sulla console. Quindi
non preoccuparti se la tua applicazione sembra insolitamente lenta!)
Continua
Nota
Tieni presente che un numero eccessivo di accessi al controller rallenterà le prestazioni della tua
applicazione. Nel peggiore dei casi, potrebbe addirittura influire sulle prestazioni del controller del robot.
Nota
Anche l’uso eccessivo degli abbonamenti potrebbe rappresentare un problema. Se la tua applicazione
deve gestire un carico continuo di dati Rapid ed eventi di segnali I/O e i tuoi gestori di eventi devono
manipolare i dati prima di presentarli, l'interazione della GUI potrebbe diventare lenta. Come regola
generale, non stimare più di 20 eventi/sec. e mantenere sottili i gestori di eventi.
Riutilizzare oggetti esistenti invece di crearne di nuovi è particolarmente importante quando si esegue
ripetutamente lo stesso codice, ad esempio in cicli stretti.
Mancia
Non creare più oggetti Controller, ma riutilizzarlo inviandolo come parametro durante la creazione
di una nuova vista o condividerlo tra le classi come proprietà pubblica.
Trasferimento di file
Il trasferimento di file tra il dispositivo e il controller del robot richiede tempo e occupa anche la memoria di
archiviazione del dispositivo. Scrivere codice efficiente e tollerante agli errori se è necessario farlo.
L'interfaccia viene utilizzata anche quando si seleziona un'altra applicazione sulla barra delle applicazioni.
TAF chiama quindi ITpsViewActivation.Deactivate (ma non ITpsViewSetup.Uninstall).
Allo stesso modo, quando l'applicazione riprende lo stato attivo tramite
Continua
Si consiglia di abilitare e disabilitare eventuali sottoscrizioni agli eventi del controller nei metodi
ITpsViewActivation, poiché le risorse preziose non dovrebbero essere conservate quando
l'applicazione non viene utilizzata. Tieni presente che i valori correnti devono essere letti prima di
abilitare l'abbonamento.
Per lo stesso motivo con queste modalità è possibile attivare e disattivare eventuali timer.
In questo modo i timer non verranno eseguiti quando sono attive altre applicazioni, risparmiando così la
potenza del processore.
Quattro stringhe verranno aggiunte a una stringa risultante. Non meno di quattro stringhe aggiuntive
verranno create e allocate quando viene eseguito il lato destro dell'assegnazione. Un'idea migliore
è utilizzare la classe StringBuilder o string.Format (che utilizza StringBuilder internamente):
Di norma, se si intende eseguire una sola operazione su una stringa particolare, è possibile
utilizzare il metodo stringa appropriato. È quando inizi a eseguire numerose operazioni sulle
stringhe che devi utilizzare StringBuilder o string.Format.
Evita Control.Refresh
Control.Refresh() deve essere utilizzato solo quando è assolutamente necessario un aggiornamento
immediato della GUI. Refresh effettua una chiamata diretta al metodo OnPaint del Control ed è
quindi molto più costoso di Control.Invalidate().
Continua
Il thread della GUI elabora il messaggio Invalidate, tutti i messaggi in coda dello stesso controllo vengono
gestiti contemporaneamente, risparmiando così potenza di processo.
Nota
Nella versione 2.0 di .NET CF sono presenti nuovi metodi da utilizzare per i controlli GUI che ereditano
System.Windows.Forms.Control:
• SospendiLayout()
• RiprendiLayout()
• InizioAggiornamento()
• FineAggiornamento()
Questi metodi vengono utilizzati per controllare gli aggiornamenti della GUI durante la modifica di un elemento della GUI.
Il controllo non verrà disegnato quando viene chiamato SuspendLayout, ad esempio, ma viene bloccato
finché non viene chiamato ResumeLayout.
Il boxing è l'operazione in cui un tipo di valore viene convertito in un tipo di riferimento. Viene eseguito
automaticamente quando è richiesto un riferimento a un tipo di valore. Successivamente verrà creato un
nuovo oggetto, allocato nell'heap con una copia dei dati originali.
• L'accesso ai valori di una Hashtable con una chiave di tipo valore causerà la creazione di un riquadro
nel valore della chiave quando si accede alla tabella.
• Utilizzo di un ArrayList con tipi di valore; questo dovrebbe essere evitato: utilizzare invece array tipizzati.
Gli array tipizzati sono migliori anche grazie alla sicurezza del tipo, poiché il controllo del tipo può
essere eseguito in fase di compilazione.
Per ciascuno
L'uso di un ciclo for è spesso più veloce dell'uso dell'istruzione foreach, soprattutto se viene effettuato un
numero elevato di iterazioni. Il motivo è che al compilatore JIT (vedere Informazioni su termini e acronimi a
pagina 17) non è consentito ottimizzare l'esecuzione del codice quando viene utilizzato foreach.
Tuttavia, foreach rende il codice più leggibile ed è quindi un'opzione migliore quando le prestazioni non sono
cruciali.
Continua
6.4 Affidabilità
Panoramica
Questa sezione presenta informazioni su come rendere robusta l'applicazione. Il meccanismo più
importante legato alla robustezza e all’affidabilità è la gestione degli errori. Evitare conflitti di thread
e perdite di memoria è tuttavia anche un mezzo importante per migliorare l'affidabilità.
Ogni volta che viene generata un'eccezione, l'applicazione deve rilevarla e intraprendere l'azione
adeguata. Puoi rilevare un'eccezione utilizzando le istruzioni try-catch(-finally).
Per ulteriori informazioni su come implementare queste istruzioni, vedere Gestione delle eccezioni
a pagina 56.
Continua
7.4_1Generale
7.4_2FP_SDK_
Continua
Mancia
Per ulteriori informazioni sulle classi di eccezioni SDK FlexPendant, consultare il Manuale di
riferimento FlexPendant SDK.
Affinità di filo
Dovresti essere consapevole che l'esecuzione del codice che modifica l'interfaccia utente deve essere
eseguita sul thread che ha creato il controllo della GUI, il cosiddetto thread della GUI.
Un'applicazione inizialmente inizia con un singolo thread. Normalmente tutti i controlli dell'interfaccia
utente vengono creati da questo thread. Gli oggetti dell'interfaccia utente di Windows CE sono
caratterizzati dall'affinità di thread, il che significa che sono strettamente associati al thread che li ha
creati.
L'interazione con la coda di messaggi di un controllo interfaccia da un thread diverso dal thread di
creazione può causare il danneggiamento dei dati o altri errori. Questa restrizione si applica al pool
di thread nonché ai thread creati esplicitamente.
Nota
L'affinità del thread è particolarmente rilevante per quanto riguarda gli eventi del controller del robot,
poiché questi vengono eseguiti per impostazione predefinita su un thread in background. Per ulteriori
informazioni ed esempi di codice, vedere Eventi e thread del controller a pagina 51 ed Eventi e
thread del controller a pagina 51. Anche la sezione seguente tratta lo stesso problema.
Invocare
Per eseguire un metodo sul thread della GUI è possibile utilizzare Control.Invoke.
Dovrebbe tuttavia essere eseguito con attenzione, poiché effettua una chiamata sincrona al gestore di
eventi specificato, che blocca l'esecuzione finché il thread della GUI non ha terminato l'esecuzione del
metodo. Tutte le chiamate simultanee a Invoke verranno accodate ed eseguite nel relativo ordine di
coda dal thread della GUI. Ciò potrebbe facilmente rendere la GUI meno reattiva.
Ora esiste una versione asincrona di Invoke, che dovrebbe essere utilizzata quando possibile.
TpsControl.BeginInvoke è un metodo non bloccante, che consente al thread di lavoro di continuare
l'esecuzione invece di attendere che il thread della GUI abbia elaborato il metodo
Ricordare che Invoke e BeginInvoke devono essere utilizzati solo sul codice che modifica l'interfaccia
utente. Dovresti mantenere l'esecuzione nel thread in background il più a lungo possibile.
Nota
Continua
Perdite di memoria
Poiché le applicazioni FlexPendant dovrebbero essere eseguite senza interruzioni, non possono essere
consentite perdite di memoria. È tua responsabilità ripulire adeguatamente e chiamare Dispose.
Prendersi il tempo necessario per studiare Come evitare perdite di memoria a pagina 77, Gestione della
memoria a pagina 167 e Panoramica tecnica del dispositivo FlexPendant a pagina 165.
Le classi Thread e ThreadPool possono essere utilizzate per eseguire metodi su un lavoratore
filo. Utilizza ThreadPool per l'utilizzo temporaneo di un thread in background quando si prevede che
un'attività termini abbastanza presto. Utilizza Thread solo per il lavoro in background che persisterà, ad
esempio un thread che recupera continuamente dati dal controller.
In .NET CF sono disponibili due timer che possono essere utilizzati per eseguire metodi periodicamente
a intervalli specificati. Esiste tuttavia un'importante differenza tra questi. System.Threading.Timer esegue
il metodo su un thread in background, mentre System.Windows.Forms.Timer esegue il metodo sul thread
dell'interfaccia utente.
Nota
Utilizzare System.Threading.Timer se si desidera eseguire il polling dei dati dal controller per ridurre il
carico sul thread della GUI.
Dichiarazione di blocco
L'istruzione lock viene utilizzata nelle applicazioni multi-thread per garantire che l'accesso a una parte
del codice venga effettuato esclusivamente da un thread. Se un secondo thread tenta di bloccare il codice
che è già stato bloccato da un altro thread, deve attendere finché il blocco non viene rilasciato.
Ricordati di limitare il segmento di codice che vuoi controllare, ovvero blocca solo ciò che è
assolutamente necessario per rendere sicuro il thread di codice:
Oggetto thisLock = nuovo Oggetto();
serratura (questa serratura)
{
// Sezione del codice critico
}
Bisogna evitare le situazioni di stallo. Possono verificarsi se viene utilizzata più di una serratura. Se è
necessario trattenere più di un oggetto di blocco, questi devono sempre essere bloccati e rilasciati nello
stesso ordine, ovunque vengano utilizzati.
Continua
Nota
ATTENZIONE
L'utilizzo dell'istruzione lock in combinazione con una chiamata a Invoke è una potenziale
causa di situazioni di stallo, poiché Invoke è una chiamata bloccante. Insomma, fate attenzione
se usate le serrature!
Delegati multicast
Se viene eseguito un delegato multicast, l'esecuzione dei delegati viene terminata se viene
lanciata un'eccezione da uno dei delegati. Ciò significa che i restanti delegati nell'elenco
non verranno eseguiti se viene generata un'eccezione. Questa situazione può causare un
comportamento irregolare, che potrebbe essere difficile da tracciare ed eseguire il debug.
Pertanto, se disponi di numerosi delegati che devono essere eseguiti come risultato dello stesso
evento, potresti voler implementare il metodo GetInvocationList. Recupera un elenco con una
copia dei delegati. Questo elenco può essere ripetuto e ciascun delegato può essere
chiamato direttamente:
7.4_3.GetInv
introduzione
L'utilizzo del debugger di Visual Studio per un'applicazione SDK FlexPendant non presenta alcuna
differenza rispetto allo sviluppo .NET standard. Il debug può essere eseguito utilizzando l'IRC5
virtuale in RobotStudio o un controller reale.
Codice Descrizione
0x80040401 Non è stato possibile soddisfare il livello di sondaggio richiesto, viene utilizzato il livello di sondaggio basso.
0x80040402 Non è stato possibile soddisfare il livello di sondaggio richiesto, viene utilizzato il livello di
sondaggio medio.
0xC0040408 Una stringa non contiene caratteri esclusivamente di una codifica supportata,
ad esempio ISO-8859-1 (ISO-Latin1).
0xC0040413 L'ID client non è associato a un utente controller. Restituito solo dai metodi che
devono verificarlo prima di inviare la richiesta al controller. Altrimenti vedere
0xC004840F.
Continua
Codice Descrizione
0xC0040418 L'ID di sistema e l'ID di rete non corrispondono, non identificano il file
stesso controllore.
0xC0040601 La chiamata è stata effettuata da un client diverso da quello che ha effettuato la chiamata
Chiamata Connect().
0xC0040602 File non trovato nel file system locale. Può essere quel file, directory
o il dispositivo non esiste.
0xC0040603 File non trovato nel file system remoto. Può darsi che il file, la directory o il
dispositivo non esista.
0xC0040604 Errore durante l'accesso/creazione del file sul file system locale.
0xC0040605 Errore durante l'accesso/creazione del file sul file system remoto.
0xC0040606 Il percorso o il nome file è troppo lungo o comunque non valido per il file system
Vx-Works.
0xC0040609 Il client ha già una connessione e non può effettuare una nuova connessione
finché quella attuale non viene disconnessa.
0xC0040701 Uno o più file nella directory di rilascio sono danneggiati e non possono essere salvati
essere utilizzato quando si avvia un VC.
0xC0040702 Uno o più file nella directory di sistema sono danneggiati e non possono essere salvati
essere utilizzato quando si avvia un VC.
0xC0040705 L'operazione richiesta non è riuscita poiché la proprietà della VC non è mantenuta
o non è stato possibile ottenerlo.
0xC0048409 Un argomento specificato dal client non è valido per questo tipo di
operazione.
0xC004840A Mancata corrispondenza nell'ID del controller tra il backup e il sistema corrente.
0xC004840B Mancata corrispondenza nell'ID chiave, ovvero opzioni, lingue e così via.
tra il backup e il sistema corrente.
0xC004840C Mancata corrispondenza nel tipo di robot tra il backup e il sistema corrente.
Continua
Codice Descrizione
0xC0048420 Operazione non consentita quando l'attività non è attiva nella selezione dell'attività
pannello.
0xC0048421 Mancata corrispondenza nell'ID del controller tra il backup e il sistema corrente.
0xC0049002 Il file indicato non è stato riconosciuto, ad esempio, come file di programma
la semantica XML potrebbe non essere corretta.
Continua
Codice Descrizione
0xC004900F Data la routine non è un punto di ingresso legale. I motivi possibili sono:
la routine è una funzione oppure la routine ha parametri.
Panoramica
È possibile ottenere l'output di debug dalla FlexPendant utilizzando la rete. Ciò è utile per diversi motivi. Rivelerà
eventuali eccezioni generate durante l'esecuzione, ad esempio fornendo messaggi di errore e stack di chiamate.
Inoltre, può aiutarti a controllare il consumo di memoria e le perdite di memoria nella tua applicazione.
Il messaggio FlexPendant viene compresso in un messaggio di rete e inviato sulla rete come messaggio broadcast
sulla porta 9998. Tale messaggio può essere raccolto in diversi modi:
Mancia
Per un elenco delle eccezioni che il Controller IRC5 può lanciare, vedere Debug a pagina 181.
abilitare l'output di debug scrivere fpcmd_enable_console_output nella finestra della console del controller. Per
ulteriori informazioni sulla finestra della console, vedere Codici di errore di eccezione a pagina 181.
Questi sono i comandi della console utilizzati per abilitare e disabilitare le stampe:
Il seguente comando può essere utilizzato per recuperare lo stato dettagliato del controller del robot, il
che potrebbe essere utile, sebbene potrebbe non essere specificamente correlato alla tua applicazione.
Continua
Comando Azione
Nota
Mancia
È possibile monitorare il consumo di memoria nella console del controller del robot
finestra:
1 Scrivi fpcmd_enable_console_output 3.
2 Scrivere fpcmd "-memShow".
Continua
Traccia e debug
Lo spazio dei nomi ABB.Robotics.Diagnostics fornisce servizi di traccia e debug. Le
sue classi Trace e Debug sono progettate specificatamente per l'ambiente FlexPendant.
Le proprietà e i metodi nella classe Trace vengono utilizzati per strumento di build di
rilascio, che consente di monitorare l'integrità dell'applicazione in esecuzione in un
ambiente reale. La traccia può aiutarti a isolare i problemi e risolverli senza disturbare
il sistema in esecuzione.
Se utilizzi metodi nella classe Debug per stampare informazioni di debug e verificare la
logica con le asserzioni, puoi rendere il codice più robusto senza influire sulle prestazioni e
sulla dimensione del codice del prodotto spedito. In Visual Studio, la creazione di una build
di debug abilita Debug.
Traccia e Debug forniscono informazioni sulla stampa durante l'esecuzione. I
messaggi vengono visualizzati sullo schermo della FlexPendant o nella console del
controller del robot. La funzionalità è simile a quella fornita dalle classi .NetTrace e Debug.
Il metodo Assert verifica una condizione e visualizza un messaggio di asserzione sulla
FlexPendant, incluse informazioni dettagliate e un'analisi dello stack, se la condizione è
falsa. Il messaggio viene visualizzato anche nella finestra della console del controller
se si immette prima il comando fpcmd_enable_console_output.
Nota
Aggiungi lo spazio dei nomi ABB.Robotics.Diagnostics alla sezione using nella parte
superiore del file del codice sorgente.
Panoramica
Quando si esegue il debug dell'applicazione è spesso conveniente utilizzare l'ambiente
virtuale, ma è quasi altrettanto semplice collegare il debugger di Visual Studio al dispositivo
FlexPendant reale. Per informazioni su come eseguire questa operazione, vedere Debug del
dispositivo FlexPendant a pagina 192.
Questa sezione descrive come avviare il debugger di Visual Studio, collegarvi una Virtual
FlexPendant in esecuzione, impostare punti di interruzione e scorrere il codice sorgente di
un'applicazione FlexPendant.
Procedura di debug
Esistono diversi modi per collegare un debugger di Visual Studio a un'applicazione Virtual FlexPendant
in esecuzione. In questa sezione un metodo è descritto in dettaglio.
Non è possibile avviare l'applicazione FlexPendant dall'interno dell'ambiente Visual Studio. È
necessario iniziare distribuendo l'applicazione sulla Virtual FlexPendant in RobotStudio. Come
eseguire questa operazione è descritto in Hands on - Hello world a pagina 70.
Quindi avviare Virtual FlexPendant e collegarvi il debugger di Visual Studio.
Nota
Per utilizzare i punti di interruzione, la configurazione di compilazione del progetto deve essere
Debug. Lo imposti nella scheda Costruisci delle Proprietà del progetto. La directory di output,
dove si trova l'assembly (*.dll), l'assembly proxy (*gtpu.dll) e il database del programma
(*.pdb) è la directory bin/Debug, una sottodirectory del progetto Visual Studio.
Continua
Allega al processo
Quando hai un'applicazione in esecuzione sulla Virtual FlexPendant, segui questi passaggi:
Passo Azione
1 In Visual Studio nel menu Debug selezionare Connetti al processo. Viene visualizzata questa finestra
di dialogo:
9.1.3_1Attac
4 Sulla Virtual FlexPendant, fare clic su un pulsante dell'applicazione o su qualcos'altro che farà sì che
l'esecuzione del programma raggiunga il punto di interruzione.
Continua
Passo Azione
5 Nel menu Debug puntare su Windows e selezionare le informazioni di debug da visualizzare
durante il debug. Vedi il seguente esempio:
9.1.3_2PassaggioB
6 Nel menu Debug selezionare il comando Passaggio appropriato durante l'esecuzione del
codice.
7 Nel menu Debug fare clic su Scollega tutto o Interrompi debug quando si desidera
interrompere il debug.
Continua
Fare un passo
9.1.3_3AttivitàM
2 Selezionare il processo Virtual FlexPendant.exe e fare clic con il pulsante destro del mouse per
ottenere il menu contestuale. In quel menu seleziona Debug. Riceverai un messaggio di avviso, ma
seleziona Sì.
3 Verrà visualizzata una finestra di dialogo Debug Just-In-Time. Seleziona il tuo progetto applicativo come
debugger da utilizzare.
Passo Azione
Inserisci la seguente riga nel punto in cui desideri che venga avviato il debugger:
System.Diagnostics.Debugger.Launch()
Avviare l'applicazione nella Virtual FlexPendant ed eseguire l'azione che consiste nell'avviare il debugger.
Verrà visualizzata la finestra di dialogo Debug Just-In-Time .
Seleziona il tuo progetto Visual Studio come debugger. Fare clic su OK e avviare la sessione di debug.
Panoramica
Questa sezione fornisce informazioni su come eseguire il debug di un'applicazione in esecuzione sul
dispositivo FlexPendant reale.
In generale, l'utilizzo del debugger di Visual Studio per eseguire il debug del dispositivo funziona molto
bene ed è fortemente consigliato, ma a seconda del sistema operativo, della versione di Visual Studio
e della versione FlexPendant che si utilizza, i requisiti per la configurazione e il collegamento del debugger
di Visual Studio differiranno leggermente.
Prerequisiti
È necessario soddisfare i seguenti requisiti: • Service
Pack 1 o 2 per .NET Compact Framework 2.0 (.NET CF 2.0 SP2) è richiesto per impostare e utilizzare
il debugger di Visual Studio sul dispositivo FlexPendant. Può essere scaricato da http://
www.microsoft.com/downloads.
• Per eseguire il debug con Visual Studio 2008 (così come Visual Studio 2005 senza SP1) è necessario
seguire una procedura che verrà presentata nel forum degli utenti di FlexPendant SDK. La
procedura sarà diversa per ciascuna versione di RobotWare.
•
Se il tuo PC utilizza Windows Vista, per connettersi al dispositivo è necessario installare “Centro
gestione dispositivi Windows Mobile”.
9.1.4_3Debug
Tieni presente che questa configurazione è completamente indipendente dalle porte LAN e di servizio.
Stai collegando il cavo TPU dall'RC allo switch, un cavo dall'interruttore all'RC e un cavo dal PC allo
switch.
Continua
Una connessione tramite la porta LAN è facoltativa, ma utile, poiché potrebbe essere necessario
utilizzare RSO o FTP contemporaneamente. Per utilizzare entrambe le connessioni, il PC richiede
due schede NIC.
Procedura di debug
Seguire questi passaggi per configurare e collegare il debugger di Visual Studio 2005 SP1 al dispositivo
FlexPendant:
Passo Azione
2 Nella finestra di dialogo Opzioni espandere il nodo Strumenti dispositivo e selezionare Dispositivi.
Selezionare il dispositivo Windows CE 5.0 come mostrato nello screenshot seguente.
9.1.4_6FPDeb
Nota! Se la versione della FlexPendant è SxTpu1, l'opzione Dispositivo Windows CE 5.0 non è
disponibile. Dovresti invece selezionare Dispositivo Pocket PC 2003.
3 Una volta selezionato il dispositivo corretto, fare clic su Proprietà e quindi su Configura.
9.1.4_7FPDeb
Continua
Passo Azione
5 Nel menu Debug/Strumenti in Visual Studio fare clic su Collega al processo. Nella finestra di
dialogo selezionare Smart Device for Transport e fare clic sul pulsante Sfoglia per specificare la
piattaforma e il dispositivo. Quindi fare clic su Connetti.
9.1.4_8FPDeb
8 Sulla FlexPendant, fare clic su un pulsante dell'applicazione o su qualcos'altro che farà sì che
l'esecuzione del programma raggiunga il punto di interruzione.
Nota
Se il tuo PC NON utilizza XP con Visual Studio 2005 SP1, devi trovare informazioni
su come collegare il debugger di Visual Studio per il tuo ambiente specifico nel
forum degli utenti di FlexPendant SDK.
Panoramica
Se riscontri problemi durante l'esecuzione dell'applicazione, è necessario fare alcune cose prima di contattare
l'organizzazione di assistenza. I seguenti passaggi rappresentano una linea guida approssimativa:
Azione
1 È possibile avviare la domanda? In caso contrario, vedere L'applicazione FlexPendant non si avvia a
pagina 195.
2 Hai controllato le note sulla versione dell'SDK FlexPendant? Molte domande troveranno risposta nelle
Release Notes della specifica release. Questi sono disponibili sul DVD Ro-botWare e sul sito di
download del software.
3 Hai provato a individuare il problema eseguendo il debug della FlexPendant? In caso contrario,
vedere Debug del dispositivo FlexPendant a pagina 192 per informazioni su come farlo.
4 Hai provato a ottenere le stampe di debug? Per ulteriori informazioni, vedere Output di debug a
pagina 185.
5 Il problema è che la FlexPendant pende? Assicurati di utilizzare Invoke quando modifichi l'interfaccia
utente a causa di un evento del controller del robot. Per ulteriori informazioni, vedere Thread di eventi
della GUI e del controller in conflitto a pagina 51 e Metodo Invoke a pagina 52.
Quando si verifica un blocco, collegare il debugger di Visual Studio a FlexPendant. Nel menu Debug
puntare su Windows e selezionare Thread. Esaminare i thread per scoprire eventuali deadlock.
Mancia
Se non hai ancora trovato una soluzione al tuo problema, dai un'occhiata al Forum degli utenti della
community di RobotStudio, che include un forum dedicato alla discussione e alla chat su argomenti
di sviluppo FlexPendant SDK, RAPID e IRC5.
Per ulteriori informazioni, vedere Documentazione e guida a pagina 15
L'assembly proxy (*.gtpu.dll) non è stato Correggere eventuali errori di parametro nell'attributo TpsView.
creato. Per ulteriori informazioni, vedere Attributi FlexPendant TpsView
a pagina 40.
Continua
Lo strumento di conformità ABB lamenta Succede che l'installazione di Visual Studio non imposta
di non riuscire a trovare il compilatore correttamente il percorso del compilatore C#. Il compilatore C# è
C#. necessario per eseguire ABB Compliance Tool.
L'applicazione non viene visualizzata nel menu Assicurarsi che il sistema robotico disponga del FlexPendant
Inter-ABB. opzione viso.
Eccezione di riferimento nullo o "Impossibile assicurarsi che tutti gli argomenti nell'attributo TpsView siano
oggetto di ricerca" quando si tocca l'ap appropriato. Per ulteriori informazioni, vedere Icona di plicazione
FlexPendant nel menu ABB. Attributo TpsView a pagina 40.
Il costruttore bitmap fallisce quando si modificano le immagini se utilizzano più di 256 colori. la vera FlexPendant
tenta di caricare Il sistema operativo della FlexPend di prima generazione: le vostre immagini, nel dispositivo
ambientale virtuale (SxTPU1) supporta solo 256 colori. mento questo non accade.
Mancia
Ancora meglio dell'applicazione completa è un piccolo programma di riproduzione, che espone il tuo
problema.
introduzione
Questo capitolo fornisce le informazioni necessarie per localizzare un'applicazione personalizzata.
FlexPendant dispone di supporto integrato per la localizzazione e i meccanismi utilizzati dalle
applicazioni FlexPendant standard possono essere utilizzati anche dalle applicazioni FlexPendant
SDK.
Ciò consente di presentare le applicazioni personalizzate nella lingua attiva della FlexPendant,
ovvero la lingua selezionata nella visualizzazione standard Pannello di controllo - Lingua.
Affinché ciò funzioni, i testi visualizzati nell'applicazione personalizzata devono essere tradotti e
l'applicazione localizzata come descritto in questo capitolo.
Iniziare
Sviluppare l'applicazione utilizzando l'inglese come lingua predefinita. La raccomandazione è di
progettare, implementare e testare l'applicazione prima di aggiungere il supporto per altre lingue.
Per localizzare un'applicazione FlexPendant, completare attentamente ciascuna procedura di
questo capitolo.
Nota
È necessario un metodo per gestire la localizzazione quando vengono aggiunte nuove funzionalità
dell'applicazione.
Passo Azione
1 Creare un nuovo progetto nella soluzione. Scegli un dispositivo intelligente - Windows CE 5.0 -
Progetto vuoto e assegna al progetto il nome <YourAppName>Testi.
Nota
Entrambi i progetti dovrebbero appartenere alla stessa soluzione. L'applicazione verrà ora compilata
in tre assembly: <YourAppName>.dll , <YourAppName>.gtpu.dll e <YourAppName>Texts.dll.
10.1_5Stringa
Continua
Passo Azione
5 Aggiungere un file di risorse al progetto facendo clic con il pulsante destro del mouse sul progetto in Esplora
soluzioni e selezionando Aggiungi nuovo elemento. Impostare il nome del file su “strings.resx”. Questo file
conterrà i testi della lingua predefinita (normalmente inglese).
6 Apri il file di risorse e aggiungi nome e valore per i testi della lingua predefinita.
Utilizza le lettere maiuscole nella colonna del nome.
6.5.1_1Multi
7 Nel progetto Testi crea una cartella con la forma abbreviata della cultura come nome, ad esempio de per il
tedesco e sv per lo svedese.
10.1_6FPLang
Nota
ATTENZIONE
Nota
Per utilizzare il cinese o un'altra lingua con caratteri non occidentali, è necessario utilizzare il carattere
FlexPendant, TpsFont, per tutti i controlli dell'interfaccia utente. Controlla internamente quale lingua è
attualmente attiva sulla FlexPendant e utilizza il carattere corretto per quella lingua.
Continua
Passo Azione
9 Il nome del file utilizzato per le risorse esterne dovrebbe essere strings.<culture>.resx, ad esempio
"strings.sv.resx" come nello screenshot seguente. Fare clic con il pulsante destro del mouse sul file
e rinominarlo.
10.1_4Stringa
10 Apri il file di risorse e traduci i testi nella colonna del valore. Il nome è l'identità del testo e dovrebbe
rimanere lo stesso.
Nota
Ovviamente i testi potrebbero allungarsi o accorciarsi una volta tradotti. Potrebbe quindi essere
necessario aumentare le dimensioni di alcuni controlli della GUI dopo aver testato l'applicazione.
Passo Azione
Continua
Passo Azione
3 Dichiarare un oggetto TpsResourceManager all'inizio della classe come variabile membro privata e
inizializzarlo nel costruttore.
Aggiungi una chiamata a un metodo InitializeTexts.
//dichiarazione
InizializzaComponente();
Inizializza testi();
Nota
Il primo argomento del costruttore dovrebbe essere il nome della tua applicazione con .strings come
suffisso aggiunto. Il secondo argomento è il nome dell'assembly contenente le risorse.
Esempio:
Inizializza testi()
{
this.Label1.Text = _tpsRM.GetString("TXT_INSTR_LABEL");
}
Lasciare il contenuto del metodo InitializeComponent così com'è, ad esempio Label1.Text = "Signals"
e così via.
5 L'oggetto TpsResourceManager non è ancora stato creato quando si vuole che l'icona e il titolo
dell'applicazione appaiano nel menu di ABB, per cui è necessario utilizzare un'altra tecnica per
visualizzarli correttamente. Aggiungi un nome di risorsa per il titolo dell'applicazione e un valore nel file
di risorse di ciascuna lingua.
Nell'attributo TpsView il primo argomento è il titolo dell'applicazione. Sostituirlo con il nome della risorsa.
Potrebbe assomigliare a questo: [assembly:
TpsView("ABB_MENU_TITLE_TXT", ...,...
TpsViewIRC5AppTexts.dll")]
Verrà ora utilizzato il valore della risorsa corrispondente. Nel caso in cui non venga trovata alcuna risorsa,
il nome verrà utilizzato così com'è.
Continua
6.5.1_4resxP
2 È ora necessario utilizzare lo strumento resgen.exe di Visual Studio 2005 per compilare il file resx in
una risorsa binaria. Successivamente lo strumento di collegamento assembly di Visual Studio 2005
al.exe dovrebbe creare un assembly satellite della risorsa binaria.
Leggere attentamente i seguenti passaggi per assicurarsi che il gruppo satellite sia costruito
correttamente.
Nota
Continua
Passo Azione
3 Crea un evento post-costruzione nel progetto Testi per automatizzare il processo di
costruzione.
Esempio: TpsViewLocalizedApp con risorse in svedese: mkdir ..\..\lingual
mkdir ..\..\lingua\sv
mkdir ..\..\lingua\sv\tps
cd..\..\sv\
del *.resources
del *.dll
se esiste strings.sv.resx (
resgen strings.sv.resx TpsViewLocalizedApp.strings.sv .re-
fonti
al /t:lib /embed:TpsViewLocalizedApp.strings.sv.resources
/culture:en /out:TpsViewLocalizedAppTexts.resources.dll
copia TpsViewLocalizedAppTexts.resources.dll ..\lan-
guage\sv\tps\TpsViewLocalizedAppTexts.resources.dll)
10.1_9BuPost
Nota
Continua
Passo Azione
4 È necessario garantire che il passaggio di post-compilazione venga eseguito con le versioni corrette di
resgen.exe e al.exe. Il modo più semplice per eseguire questa operazione consiste nell'utilizzare un
prompt dei comandi di Visual Studio 2005 per creare il progetto (o la soluzione) o avviare Visual
Studio da tale prompt.
Fare innanzitutto clic sul menu Start di Windows per avviare il prompt dei comandi (in Programmi >
Microsoft Visual Studio 2005 > Strumenti di Visual Studio). Quindi utilizzare il comando devenv per
avviare Visual Studio 2005.
Ora apri la tua soluzione e costruiscila. Ora è garantita l'esecuzione del comando post-compilazione
con le impostazioni corrette.
6.5.1_5VSCmd
Nota
4 Testare un'applicazione
localizzata Per testare un'applicazione localizzata, le risorse devono essere organizzate
correttamente nel file system del controller. Questo dovrebbe essere fatto nello stesso modo
in cui il test viene eseguito su una FlexPendant virtuale o reale. Seguire questi passaggi
per testare l'applicazione su una FlexPendant reale:
Passo Azione
1 Trasferisci, utilizzando un client FTP o il File Manager di RobotStudio, gli assiemi dell'applicazione nella
directory HOME del sistema attivo. (TpsViewLocalizedApp-Texts.dll, TpsViewLocalizedApp.gtpu.dll,
TpsViewLocalizedApp.dll nella schermata seguente).
Continua
Passo Azione
2 Copia la cartella della lingua creata dall'evento post-compilazione nella directory HOME.
10.1_3Lingua
Nota
È anche possibile che sia gli assembly che la cartella della lingua si trovino nella cartella SYSTEM al
livello superiore. Il vantaggio di utilizzare HOME è che i file vengono inclusi in un backup.
3 Verificare che la cartella della lingua contenga cartelle per ogni lingua e che ciascuna cartella tps
disponga di una DLL .resources. Se così non fosse, devi tornare all'evento post-build del tuo
progetto Texts e verificare cosa è andato storto.
10.1_3bLingua
Nota
5 Verifica che il nome della tua applicazione nel menu ABB sia corretto.
Continua
Passo Azione
6 Aprire l'applicazione e verificare che i testi della GUI siano visualizzati correttamente. Verificare in particolare che
le caselle di testo, le etichette, le colonne della visualizzazione elenco e così via. sono sufficientemente ampi per
visualizzare i testi tradotti.
introduzione
Affinché il cliente finale possa utilizzare la tua applicazione, questa deve essere distribuita al
controller del robot del cliente. Questa operazione viene eseguita quando viene creato il sistema robotico
del cliente, utilizzando System Builder in RobotStudio. L'applicazione personalizzata può quindi essere
aggiunta come opzione aggiuntiva utilizzando una chiave di licenza oppure aggiunta alla directory Home
del file system del controller utilizzando una delle finestre di dialogo della procedura guidata System Builder.
Per un'applicazione con supporto multilingue ci sono alcune cose in più da affrontare.
Nota
È possibile utilizzare un client FTP per caricare l'applicazione da un PC a un controller del robot a scopo
di test. Questa operazione può essere eseguita anche se è necessario aggiungere l'applicazione
personalizzata a un sistema esistente, già in esecuzione in produzione. Per ulteriori informazioni, vedere
Distribuzione tramite FTP a pagina 215.
Realizzare un prodotto
Di seguito sono riportati i passaggi per realizzare un prodotto di un'applicazione FlexPendant
personalizzata: 1 Approvazione della specifica dei requisiti del prodotto FlexPendant SDK.
A seconda della risposta alle domande precedenti ci sono quattro alternative (dettagliate separatamente
nelle sezioni seguenti di questo manuale):
1 Licenza e localizzazione
Continua
Nota
Se il prodotto deve essere concesso in licenza, dovrebbe essere distribuito come opzione
aggiuntiva. In caso contrario, è necessario utilizzare RobotStudio per distribuire l'applicazione nella
directory Home del sistema.
Panoramica
Se non crei un'opzione aggiuntiva per la tua applicazione, l'utente finale non avrà bisogno di una licenza per
utilizzarla.
Quando viene creato il sistema del cliente, utilizzando System Builder di RobotStudio, l'applicazione deve essere
aggiunta alla directory Home del sistema.
Questa sezione fornisce informazioni su come eseguire questa operazione. Per prima cosa viene spiegata
l'alternativa più semplice, che non offre supporto per lingue aggiuntive.
Utilizzare la procedura seguente per distribuire un'applicazione senza licenza né supporto multilingue.
Passo Azione
1 Utilizzare System Builder in RobotStudio.
2 Aggiungi gli assembly dell'applicazione (.dll) e altre risorse ('.jpg, *.gif,*.bmp) alla directory
Home:
10.1_2SysBui
Nota
Avere l'applicazione distribuita nella directory Home significa che verrà inclusa in un backup del sistema.
Continua
Utilizzare la procedura seguente per distribuire un'applicazione senza licenza ma con supporto
multilingue.
Passo Azione
1 Implementare il supporto multilingue. Per ulteriori informazioni, vedere Localizzazione di
un'applicazione FlexPend-ant a pagina 197.
10.1_2SysBui
10.1_3Lingua
Nota
Per le diverse lingue è necessario utilizzare nomi standard (de, zh e così via). Per l'elenco completo,
vedere Aggiunta del supporto per diverse lingue a pagina 197.
Continua
Passo Azione
6 Trasferisci ogni binario della risorsa nella sottodirectory tps della rispettiva directory della
cultura, ad esempio:
TpsViewIRC5App.strings.de.resources.dll nella directory Language/de/tps e così via.
7 Scaricare il sistema sul controller del robot.
Per ulteriori informazioni su come aggiungere il supporto per le lingue native all'applicazione
personalizzata, vedere Localizzazione di un'applicazione FlexPendant a pagina 197.
Panoramica
Quando il sistema del cliente viene creato dal System Builder di RobotStudio, è possibile aggiungere al
sistema un'applicazione FlexPendant come opzione aggiuntiva.
Questa sezione descrive come creare l'opzione aggiuntiva, necessaria per la distribuzione di un'applicazione
personalizzata concessa in licenza. Descrive inoltre la modalità di installazione dell'opzione da parte del cliente.
ATTENZIONE
Un'opzione aggiuntiva deve essere distribuita in base alla versione e revisione di RobotWare. Presta attenzione
se stai utilizzando funzionalità che sono state incluse in una revisione!
Nota
Passo Azione
1 Implementare il supporto multilingue se ritenuto necessario. Per ulteriori informazioni, vedere
Localizzazione di un'applicazione FlexPendant a pagina 197.
2 Ordina una licenza e un CD Key Maker presso l'ufficio ABB locale, che a sua volta
contatterà il supporto prodotto ABB SEROP in Svezia.
3 Crea la seguente struttura:
10.1_12_Opti
La cartella della lingua è necessaria se deve esserci il supporto per altre lingue.
Nota
Continua
Passo Azione
10.1_13Vers
10.1_14Insta
10.1_15MyOpt
7 Con la licenza, inserita nel CD Key Maker, generare un file chiave che includa il numero di serie del
controller del robot, ad esempio MYOPTION508.kxt (questo è il file che inserirai in System
Builder quando verrà creato il sistema robotico).
Nota
Continua
10.1_16AddOp
Informazioni correlate
è destinato esclusivamente all'uso da parte di ABB. Contatta il servizio post-vendita a Västerås, Svezia.
Panoramica
La regola generale è che la distribuzione utilizzando un client FTP dovrebbe essere eseguita solo
durante la fase di sviluppo.
Se la distribuzione presso un cliente viene eseguita in questo modo, ciascun controller deve essere
aggiornato individualmente con file di assembly e risorse grafiche e linguistiche. L'organizzazione
dei file nel file system del controller robot è responsabilità dello sviluppatore dell'applicazione o
dell'integratore di sistema.
Procedura
Seguire questi passaggi per distribuire l'applicazione utilizzando, ad esempio, il File Manager di
RobotStudio o un client FTP come Ftp Voyager:
Passo Azione
1 Sul controller accedere al sistema che si desidera aggiornare con l'applicazione
FlexPendant.
2 Trasferire l'assembly, l'assembly proxy e le risorse grafiche utilizzate dall'applicazione
nella directory di sistema Home.
3 Per il supporto multilingue, nella directory Lingua creare sottodirectory per ciascuna
lingua utilizzando il nome breve della lingua.
4 Crea una sottodirectory “tps” in ciascuna di queste directory.
5 Copia ciascuna risorsa linguistica nella cartella tps della cultura corrispondente.
6 Riavviare la FlexPendant. L'applicazione personalizzata dovrebbe ora essere accessibile
dal menu ABB.
Per ulteriori informazioni su come riavviare la FlexPendant ma non il controller, vedere
Riavviare la FlexPendant a pagina 35.
Indice
UN
AlphaPad, 94 G
Evento conclusivo, 95 Sovvenzioni, 55
Lancio, 94 Definizione, 54
Finestra di proprietà, 95 Sovvenzioni per la domanda, 55
icone, 41
ListaImmagini, 88, 97
lingue, 25
Installazione, 19
Ciclo di vita, 38
Requisiti, 19
luogo, 42 nome,
Invocare, 52
41
ITpsViewAttivazione, 172
Orientamento agli oggetti, 48
ITpsViewSetup, 113
Portamento, 28
Vero, 28
l
Correre, 33
LaunchView, 114
Icona della barra delle applicazioni, 41
Visualizzazione elenco, 97
TpsView, 40
Illustrazione, 97
Tipo, 42
Selezione multipla, 98
UA, 54
Scorrevole, 98
Versioni, 21
Pulsanti SelectionEnabledOverScroll, 98
Virtuale, 27
MostraNumeroOggetti, 98
MostraSelectio, 98
C
Domini CAPI, 118
M
ChiudiVisualizza, 114
Perdite di memoria, 77
CompactAlphaPad,
compatibilità 99, 46 N
Configurazione, 62 Tastierino numerico, 100
finestra della console, 24
Comandi, 186 P
PictureBox, 88
D Progetto, 64
Associazione dati, 107 Vuoto, 81
Rilegatura avanzata, 111 Modulo, 82
Classi, 107 Nuovo progetto, 64
Definizione, 107 Procedura, 64
RapidDataBindingSource, 107 Mago, 74
RiprendiBinding, 112 Finestra Proprietà, 105
SignalBindingSource, 107 NomeFile, 105
SuspendBinding, 112 finestra Filtra, 105
di dialogo, 116 DirectoryIniziale, 105
FpRapidData, 117
FpToolCalibrazione, 116 R
Calibrazione FpWorkObject, 116 Grado, 131
Smaltire, 122, 169 RAPID, 144
array, 131
F dimensioni degli array, 131
FlexPendant
BeginInvoke, 52
Applicazioni, 21 Registro eventi, 155
Comunicazione, 37 Invocare, 52
Memoria, 165 Caricamento moduli, 146
perdite di memoria, 169 Finestra di messaggio, 55
panoramica, 165 ModificaPosizione, 147
Piattaforma, 31 MotionPointer, 147
Ricominciare, 35 Puntatore di programma, 147
Schermo, 165 RestProgramPointer, 144
Salva e scarica, 146
U
Sicurezza S , 11 Forum degli utenti, 194
Segnali, 149
accesso, 149
Cambiamenti nell'ascolto, 152 Tastiera virtuale V , 94
SignalChangedEventArgs, 153
SignalFilter, 150
W
valori, 151 Scrivi oggetto, 134
Contattaci
ABB AB
Automazione e movimento discreti
Robotica
S-721 68 VÄSTERÅS, Svezia
Telefono +46 (0)21 344 400
vH
,100-859630CA en,R
B
3
e
ABB AS, Robotica
Automazione e movimento discreti
Casella 265
N-4349 BRYNE, Norvegia
Telefono: +47 51489000
ABB Inc.
Discrete Automation and Motion
Robotics
1250 Brown Road
Auburn Hills, MI 48326
USA
Telefono: +1 248 391 9000
www.abb.com/robotics