Questo documento le mostrerà come può aggiungere la connettività OPC-UA a RoboDK. Una connessione OPC UA le consente di interagire con i PLC e altri dispositivi che supportano questo protocollo. Deve abilitare il componente aggiuntivo OPC-UA in RoboDK per aggiungere le funzioni di server e client OPC UA ai suoi progetti.
RoboDK include un add-in OPC-UA che le permette di aggiungere la compatibilità OPC UA ai suoi progetti RoboDK.
Per impostazione predefinita, RoboDK ha il componente aggiuntivo OPC-UA disattivato. Una volta abilitato, il componente aggiuntivo dovrebbe essere visualizzato ad ogni avvio di RoboDK.
Può abilitare l'add-in OPC UA seguendo questi passaggi:
1.Selezioni Strumenti-Add-in.
2.Fare doppio clic su OPC-UA.
Dovrebbe vedere una barra degli strumenti aggiuntiva con le funzioni OPC-UA.
Dovrebbe vedere il pulsante OPC-UA nella barra degli strumenti e anche la voce OPC-UA nel menu.
In questo esempio imparerà come abilitare l'addin OPC UA e convertire RoboDK in un server OPC UA. Esamineremo alcune impostazioni utilizzando il software UaExpert e Beckhoff TwinCAT3 TF6100.
L'add-in OPC UA le consente di configurare alcune impostazioni, come la porta del server. Può anche scegliere di attivare il server, disattivarlo o avviarlo automaticamente con RoboDK.
Con l'add-in OPC UA abilitato, selezioni Impostazioni OPC UA-OPC-UA per configurare le impostazioni OPC UA.
La schermata Impostazioni OPC UA è visualizzata sul lato sinistro, come mostrato nell'immagine seguente.
Se vede un messaggio come "Il server OPC UA di RoboDK è in esecuzione sulla porta 4840", significa che il server OPC UA di RoboDK è stato avviato.
Può testare la connettività OPC UA con qualsiasi stazione RoboDK che abbia uno o più robot.
Può utilizzare il software UaExpert per testare la connettività con il Server OPC UA RoboDK.
Può scaricare la versione gratuita del software UaExpert dal sito web di Unified Automation: https://www.unified-automation.com/downloads/opc-ua-clients.html.
Avvii UaExpert e clicchi sul pulsante "+" per aggiungere il server RoboDK OPC UA.
Espanda la sezione Custom Discovery e selezioni l'opzione <Doppio clic per aggiungere il server.> per aggiungere il server RoboDK OPC UA.
Inserisca l'URL del server OPC UA, opc.tcp://127.0.0.1:48440 che ha configurato nel passaggio precedente.
Colleghi il Server OPC UA con la sicurezza "Nessuno".
Il server è configurato.
Ora può collegarsi al server RoboDK OPC UA da UaExpert.
Può vedere i Nodi e i Metodi quando viene stabilita la connessione.
Ci sono alcuni nodi all'interno del server RoboDK OPC UA che le permettono di scambiare alcune informazioni di base sulla sua stazione.
Il nodo RoboDK è un nodo che fornisce la versione effettiva del suo software RoboDK.
In questo esempio è stata utilizzata la versione RoboDK 64 Bit v5.5.3.23031.
La Velocità di simulazione è un nodo che mostra la Velocità di simulazione attuale e consente all'utente di sovrascrivere la Velocità di simulazione corrente.
Il valore del nodo è riferito alla barra di scorrimento della velocità di simulazione.
La Simulazione corrente può essere letta da questo nodo e può sovrascrivere la velocità di simulazione.
Il Nodo Stazione è un nodo che consente all'utente di ottenere il nome attuale della Stazione in RoboDK.
Come si vede qui sotto, il nodo Stazione fa riferimento al suo "Nome Stazione" in RoboDK.
Station Parameter e Station Value sono una coppia di Nodi che consente all'utente di ottenere o impostare qualsiasi parametro all'interno della sua Stazione. Il Server OPC UA RoboDK monitorerà continuamente il valore effettivo di "StationParameter" e restituirà il valore di tale "StationParameter", dal Nodo Station Value.
Può visualizzare i parametri della sua Stazione facendo clic con il pulsante destro del mouse sulla sua Stazione RoboDK>Parametri della Stazione.
Nel campo Parametri costanti, può vedere i parametri predefiniti della stazione e il loro valore.
Il parametro della stazione fa riferimento al campo "Parametro" e il valore della stazione fa riferimento al campo "Valore".
E possiamo creare i nostri parametri cliccando sul pulsante "Aggiungi".
Viene aggiunto un nuovo parametro Stazione.
Inserisca il nome del parametro e il valore del parametro, quindi prema Applica per salvarlo.
Può anche ottenere il suo parametro di stazione personale.
Il nodo time è un nodo che le permette di ottenere l'ora attuale della RoboDK Station.
Viene restituito un valore con il formato DataTime.
E questo Nodo viene aggiornato continuamente.
Il server RoboDK OPC UA è dotato anche di alcuni metodi per consentire all'utente di accedere ai dati della stazione RoboDK in modo dinamico.
Possiamo semplicemente fare clic con il pulsante destro del mouse su Metodo>Chiama per eseguire il metodo.
getItem è un metodo che consente all'utente di ottenere il puntatore del suo elemento.
Per gli InputArguments, è necessario il Nome del dispositivo, si può immaginare che il Nome del dispositivo sia il Nome della stazione, il Nome del robot, ecc. E Item ID è l'OutputArguments che restituisce il puntatore di quel dispositivo.
In questo esempio, ho ricevuto l'ID articolo (puntatore) del mio robot ABB che si chiama "ABB_RB1".
0 viene restituito se il nome dell'articolo non è valido o non esiste nella sua stazione.
getJonits è un metodo che consente all'utente di ottenere il valore del giunto del robot dalla stazione, in base all'ID dell'oggetto.
L'ID dell'elemento è il valore del puntatore del suo elemento e può ottenerlo dal metodo getItem().
Otterremo l'ID dell'articolo con questo nome di articolo "ABB_RB1" e verrà restituito un valore UInt64.
Il valore dei giunti viene restituito quando si passa l'ID dell'articolo nel metodo che abbiamo ottenuto in precedenza.
getJointsStr è un metodo che consente all'utente di ottenere il valore Joints in base a un valore stringa.
Possiamo passare il nome del robot (String) in questo metodo.
In La mia stazione, ABB_RB1 è il nome del mio robot.
Possiamo semplicemente passare "ABB_RB1" nel parametro Nome robot e chiamare il metodo - Viene restituito il valore del giunto in formato stringa.
setJointsStr è un metodo che consente all'utente di impostare il valore Joints del Robot, in base a un valore stringa.
Nel nome del robot, viene passato ABB_RB1 e possiamo semplicemente passare una stringa con il valore del giunto nel parametro Giunti.
For example:-0.000000,0.000000,-0.000000,-0.000000,-0.0,-0.000000
Può utilizzare il software Beckhoff TwinCAT 3 per testare la connettività con il Server RoboDK OPC UA.
Può iniziare creando il client OPC UA selezionando I/O>Devices>Add New Item.
Selezionare Dispositivo OPC UA virtuale da OPC >OK.
OPC UA Virtual è inserito.
Dobbiamo aggiungere un client OPC UA per accedere al server RoboDK OPC UA.
Selezioni il Dispositivo 1 >Click destro >Aggiungi nuovo elemento.
Selezionare "OPC UA Client(Module)" e Ok.
Il client OPC UA è inserito.
Apra il client OPC UA >Andare alla scheda Impostazioni>cliccare su "Seleziona endpoint" per configurare l'endpoint del server OPC UA a cui desidera accedere.
Inserisca l'URL del server RoboDK OPC UA e lo aggiorni.
Prema "Aggiungi nodi" per sfogliare il nodo che si trova all'interno del Server OPC UA.
Se la connessione tra TwinCAT e il server OPC UA è stabilita, può sfogliare i dettagli del server OPC UA.
Selezionare tutti i metodi e cliccare su Ok.
I metodi sono inseriti nella sua Configurazione.
Configuri il prefisso del suo nome in questo campo.
Premere "Crea codice Plc" per creare il codice PLC da TwinCAT.
Nel suo progetto viene creata una cartella OpcUaClient e tutti i RoboDK Method vengono creati nel formato IEC61131-3 Function Block.
Questa sezione mostra un esempio di programma di un PLC Beckhoff TwinCAT che comunica con il server RoboDK OPC UA.
PROGRAMMA PRINCIPALE
VAR
bConnesso :BOOL;
StazionePointer :DINT;
iStep :INT;
bInizio :BOOL;;
i :INT;
TON :TON;
bReset :BOOL;
bScrivere :BOOL;
TON2 :TON;
bShow :BOOL:=TRUE;
bVis :BOOL:=Vero;
END_VAR
VAR
Nome_robot :STRING(80):='ABB_RB1';
ID_articolo :ULINT;
arrGiunti :ARRAY[0..11]DI LREAL;
strJoints :STRING(80):='';
arrJointsFromStr:ARRAY[1..11]DI LREAL;
sSeparatore :STRING(1) := ',';
arrJointsCommand:ARRAY[1..11]DI LREAL;
strJointsCommand:STRING(80);
END_VAR
VAR COSTANTE
cStepWaitCmd :INT:=0;
cStepInit :INT:=5;
cStepGetItem :INT:=10;
cStepGetItemReset :INT:=20;
cStepGetItemError :INT:=990;
cStepGetJoints :INT:=30;
cStepGetJointsReset :INT:=40;
cStepGetJointsError :INT:=991;
cStepGetJointsStr :INT:=50;
cStepGetJointsStrReset:INT:=60;
cStepGetJointsStrError:INT:=992;
cStepSetJointStrDelay :INT:=69;
cStepSetJointsStr :INT:=70;
cStepSetJointsStrReset:INT:=80;
cStepSetJointsStrError:INT:=993;
cStepEnd :INT:=300;
cStepWaitReset :INT:=999;
END_VAR
VAR
aSplit :ARRAY[1..11] DI STRINGA(80);
bResultSplit :BOOL;
debug :BOOL;
URL :STRING:='http://192.168.3.42:8091';
END_VAR
bConnected:=OPCUA_VirtualClient_RoboDK_Station.bConnected;
CASO iStep di
cStepWaitCmd:
SE bStart ALLORA
iStep:=cStepInit;
bStart:=FALSE;
END_IF
cStepInit:
StationPointer:=0;
PER i :=1 A 11 FARE
arrJoints[i]:=0,0;
arrJointsFromStr[i]:=0.0;
aSplit[i]:='';
FINE_FOR
SE NON OPCUA_VirtualClient_RoboDK_Station.getItem.bBusy
E NON OPCUA_VirtualClient_RoboDK_Station.getItem.bError
E NON OPCUA_VirtualClient_RoboDK_Station.getJoints.bBusy
E NON OPCUA_VirtualClient_RoboDK_Station.getJoints.bError
E NON OPCUA_VirtualClient_RoboDK_Station.getJointsStr.bBusy
E NON OPCUA_VirtualClient_RoboDK_Station.getJointsStr.bError
E NON OPCUA_VirtualClient_RoboDK_Station.setJoints.bBusy
E NON OPCUA_VirtualClient_RoboDK_Station.setJoints.bError
E NON OPCUA_VirtualClient_RoboDK_Station.setJointsStr.bBusy
E NON OPCUA_VirtualClient_RoboDK_Station.setJointsStr.bError
ALLORA
iStep:=cStepGetItem;
END_IF
iStep:=cStepGetItem;
cStepGetItem:
SE OPCUA_VirtualClient_RoboDK_Station.getItem.bDone ALLORA
iStep:=cStepGetItemReset;
Item_ID:=OPCUA_VirtualClient_RoboDK_Station.getItem.Item_ID;
ELSIF OPCUA_VirtualClient_RoboDK_Station.getItem.bError ALLORA
iStep:=cStepGetItemError;
END_IF
cStepGetItemReset:
SE NON OPCUA_VirtualClient_RoboDK_Station.getItem.bError
E NON OPCUA_VirtualClient_RoboDK_Station.getItem.bBusy
ALLORA
iStep:=cStepGetJoints;
END_IF
cStepGetJoints:
SE OPCUA_VirtualClient_RoboDK_Station.getJoints.bDone
E NON OPCUA_VirtualClient_RoboDK_Station.getJoints.bBusy
ALLORA
iStep:=cStepGetJointsReset;
ELSIF OPCUA_VirtualClient_RoboDK_Station.getJoints.bError ALLORA
iStep:=991;
END_IF
cStepGetJointsReset:
SE NON OPCUA_VirtualClient_RoboDK_Station.getItem.bError
E NON OPCUA_VirtualClient_RoboDK_Station.getItem.bBusy
ALLORA
iStep:=cStepGetJointsStr;
END_IF;
cStepGetJointsStr:
SE OPCUA_VirtualClient_RoboDK_Station.getJointsStr.bDone
E NON OPCUA_VirtualClient_RoboDK_Station.getJointsStr.bBusy
ALLORA
iStep:=cStepGetJointsStrReset;
ELSIF OPCUA_VirtualClient_RoboDK_Station.getJointsStr.bError ALLORA
iStep:=cStepGetJointsStrError;
END_IF
cStepGetJointsStrReset:
SE NON OPCUA_VirtualClient_RoboDK_Station.getJointsStr.bError
E NON OPCUA_VirtualClient_RoboDK_Station.getJointsStr.bBusy
ALLORA
iStep:=cStepSetJointStrDelay;
END_IF;
cStepSetJointStrDelay:
strJointsCommand:=''; strJointsCommand:=CONCAT(LREAL_TO_STRING(arrJointsCommand[1]),strJointsCommand);
strJointsCommand:=CONCAT(strJointsCommand,',');
strJointsCommand:=CONCAT(strJointsCommand,LREAL_TO_STRING(arrJointsCommand[2]));
strJointsCommand:=CONCAT(strJointsCommand,',');
strJointsCommand:=CONCAT(strJointsCommand,LREAL_TO_STRING(arrJointsCommand[3]));
strJointsCommand:=CONCAT(strJointsCommand,',');
strJointsCommand:=CONCAT(strJointsCommand,LREAL_TO_STRING(arrJointsCommand[4]));
strJointsCommand:=CONCAT(strJointsCommand,',');
strJointsCommand:=CONCAT(strJointsCommand,LREAL_TO_STRING(arrJointsCommand[5]));
strJointsCommand:=CONCAT(strJointsCommand,',');
strJointsCommand:=CONCAT(strJointsCommand,LREAL_TO_STRING(arrJointsCommand[6]));
TON2(IN:=VERO,PT:=T#0,2S);
SE TON2.Q ALLORA
TON2(IN:=FALSE);
iStep:=cStepSetJointsStr;
END_IF
cStepSetJointsStr:
SE (
OPCUA_VirtualClient_RoboDK_Station.setJointsStr.bDone
E NON
OPCUA_VirtualClient_RoboDK_Station.setJointsStr.bBusy
)
O NON bWrite
ALLORA
iStep:=cStepSetJointsStrReset;
ELSIF OPCUA_VirtualClient_RoboDK_Station.setJointsStr.bError
ALLORA
iStep:=cStepSetJointsStrError;
END_IF
cStepSetJointsStrReset:
bWrite:=FALSE;
OPCUA_VirtualClient_RoboDK_Station.setJointsStr.bExecute:=FALSE;
SE NON OPCUA_VirtualClient_RoboDK_Station.setJointsStr.bError
E NON OPCUA_VirtualClient_RoboDK_Station.setJointsStr.bBusy
ALLORA
iStep:=cStepEnd;
END_IF;
cStepEnd:
TON(IN:=VERO,PT:=T#0,1S);
SE TON.Q ALLORA
TON(IN:=FALSE);
SE NON debug ALLORA
iStep:=10;
ELSE
iStep:=cStepSetJointStrDelay;
END_IF;
END_IF
cStepGetItemError:
ID_articolo:=0;
iStep:=cStepWaitReset;
cStepGetJointsError:
PER i :=0 A 11 FARE
arrJoints[i]:=-99999.99;
FINE_FOR
iStep:=cStepWaitReset;
cStepGetJointsStrError:
strJoints:='';
iStep:=cStepWaitReset;
cStepWaitReset:
SE bReset ALLORA
iStep:=cStepInit;
bReset:=FALSE;
END_IF;
END_CASE
aSplit[1] := strJoints;
PER i:=1 A 7 FARE
bResultSplit := FindAndSplit(
pSeparatore := ADR(sSeparatore)
pSrcString := ADR(aSplit[i])
pLeftString:= ADR(aSplit[i])
nLeftSize := SIZEOF(aSplit[i])
pRightString:= ADR(aSplit[i+1])
nDimensione destra := SIZEOF(aSplit[i+1])
bSearchFromRight := FALSE );
SE NON bResultSplit ALLORA
USCIRE;
END_IF
FINE_FOR
PER i :=1 A 6 FARE
arrJointsFromStr[i]:=STRING_TO_LREAL(aSplit[i]);
END_FOR;
//
OPCUA_VirtualClient_RoboDK_Station.getItem(
bExecute:=iStep=cStepGetItem
Nome_oggetto:=Nome_Robot
);
OPCUA_VirtualClient_RoboDK_Station.getJoints(
bExecute:=iStep=cStepGetJoints
ID_articolo:=ID_articolo, Giunti=>arrGiunti
);
OPCUA_VirtualClient_RoboDK_Station.getJointsStr(
bExecute:=iStep=cStepGetJointsStr
Nome_robot:=Nome_robot,Giunti=>strGiunti
);
SE bScrittura ALLORA
OPCUA_VirtualClient_RoboDK_Station.setJointsStr(
bExecute:=TRUE
Nome_robot:=Nome_robot,Giunti:=strComandoGiunti);
END_IF;
Questo esempio le mostrerà come può aggiungere la connettività OPC-UA Client a RoboDK. RoboDK include un add-in OPC-UA che le consente di aggiungere la compatibilità OPC UA ai suoi progetti RoboDK.
In questo esempio imparerà come ottenere i dati dalla RoboDK Station tramite il client OPC UA.
Viene visualizzata la schermata dei parametri della stazione e prema "Cancella tutto" per cancellare tutti i parametri della stazione.
Possiamo creare un altro progetto RoboDK con il server OPC UA configurato e avviato.
Questa sezione mostra come aggiungere un client OPC UA.
Inserisca l'URL dell'endpoint, ad esempio: opc.tcp://127.0.0.1:48441.
Deve abbinare l'indirizzo IP e la configurazione della porta al suo server OPC UA di destinazione.
Premere "Connetti" per stabilire la connessione.
se appare un messaggio con" Recupero delle variabili del server. Clicchi con il tasto destro del mouse sull'elemento della stazione e selezioni 'Parametri della stazione' per vedere le variabili", la connessione è stabilita.
Clicchi con il tasto destro del mouse sulla sua Stazione e selezioni "Parametri della Stazione".
Può controllare i dettagli di ogni Nodo dalla sezione Nodi.
Dopo aver ottenuto i dati dei nodi dal server OPC UA tramite il client OPC UA in RoboDK, può anche ottenere questi dati utilizzando RoboDK-Python-API.
Può fare riferimento a questo link per installare la Python-API di RoboDK.
https://robodk.com/doc/en/PythonAPI/intro.html#how-to-install
Oppure installi manualmente il pacchetto RoboDK per Python:
pip installare robodk
Questo esempio di script mostra come ottenere i parametri della stazione tramite l'API Python di RoboDK.
da robodk importa robolink # API RoboDK
RDK = robolink.Robolink()
da robodk importa * # API RoboDK
da robolink import * # Robot toolbox
itemlist = RDK.ItemList()
se itemlist:
# Ottenere tutti i parametri della stazione
print('I parametri Vaild sono configurati nella sua Stazione...')
StationParameters=RDK.getParams()
per StationParameter in StationParameters:
print("Parametri stazione %s : %s"%(Parametro stazione[0],str((Parametro stazione[1]))))
altro:
print('Nessun elenco di parametri...')
Ecco il risultato dello script di esempio:
I parametri Vaild sono configurati nella sua Stazione...
Parametri della stazione RoboDK : RoboDK 64 bit v5.5.3.23031
Parametri della stazione ora : 02/14/2023 03:58:29.191.000.000
Parametri della stazione SimulationSpeed : 13,8551
Parametri della stazione Stazione : MyTestStation