Utilizzo di Depictor per visualizzare i gruppi di assi
Per questo progetto è necessario anche il CODESYS Depictor componente aggiuntivo con una licenza valida.
L'applicazione SoftMotion è costituita da quattro azionamenti rotativi configurati come gruppo di assi. I primi tre assi spostano il TCP nel piano X/Y e il quarto asse nel piano Z.
L'esempio mostra come è possibile utilizzare Depictor con la configurazione cinematica Kin_Scara3_Z. È possibile personalizzare la stessa procedura anche per altre configurazioni cinematiche.

Creazione del progetto standard
Crea un progetto standard con il CODESYS SoftMotion Win controller e il linguaggio di programmazione ST.
Aggiungi un gestore di libreria nel POU Visualizza.
Apri il Gestore della libreria e aggiungi le librerie
SM3_DepictoreDepictorBase.
Aggiunta e parametrizzazione degli assi
Inserisci quattro assi virtuali sotto l'oggetto Pool di assi generali SoftMotion e denominare gli assi Drive1...Drive4.
Parametrizzare gli assi Drive1, Drive2, Drive3 e Drive4 come tipo di asse finito con finecorsa software da -180 gradi a 180 gradi.
Editor di configurazione:

Per ulteriori informazioni, vedere: Unità virtuale
Configurazione dei gruppi di assi
Aggiungi un gruppo di assi "KinScara" sotto l'applicazione. Per fare ciò, fare clic su .
Nel configuratore, fare clic su Seleziona cinematica. Seleziona il TRAFO.Kin_Scara3_Z cinematica.
Definire i parametri come segue:
dArmLength1, dArmLength2, dArmLength3: 500
dOffsetA1, dOffsetA2, dOffsetA3, dOffsetZ: 0
Ordina gli assi come segue:
A1: Drive1
la2: Drive2
LA3: Drive3
Z: Drive4
Nota: è possibile trascinare gli assi direttamente nel campo di immissione.
Per ulteriori informazioni, vedere: Cinematica
Creazione del programma del controller
Nel
PLC_PRGprogramma, dichiarare le istanze diMC_Powerblocco funzione per tutti gli azionamenti. Creare unistatevariabile per il diagramma di stato.VAR Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 : MC_Power; istate: INT; END_VAR
Definire un diagramma di stato nell'implementazione.
CASE istate OF 0: 1: 2: END_CASE
Attiva tutte le unità in stato
0.0: Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN istate:=istate+1; END_IF
Quando gli assi sono attivati, abilitare il gruppo di assi (passaggio da "disattivato" a "standby").
VAR GroupEnable:MC_GroupEnable; END_VAR 1: GroupEnable(AxisGroup:=KinScara, Execute:=TRUE); IF GroupEnable.Done THEN istate:=istate+1; END_IF
Dichiarare e inizializzare una variabile per salvare il valore impostato nelle coordinate macchina. Dichiara due istanze di tipo
SMC_POS_REFper rappresentare il TCP in coordinate cartesiane e assi.VAR Frame: MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP Pos_Cart: SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates Pos_Axis: SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates END_VAR VAR CONSTANT axispos: TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60); END_VAR 2: Pos_Cart.c:= Frame; // To represent the TCP in cartesian coordinates;
Dichiarare un'istanza di
MC_MoveDirectAbsoluteper spostare il robot SCARA alle coordinate specificate.VAR MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates END_VAR 2: MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined Axis coordinates //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates IF MoveAbs.Done THEN MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates istate:=2; END_IFDichiarare una variabile di tipo
SMC_GroupReadSetPositionper leggere il valore corrente del robot in coordinate cartesiane e coordinate assi.VAR Car_pos, Axis_pos :SMC_GroupReadSetPosition; //to read the current axis values END_VAR 2: Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // to read the current position in cartesian coordinates Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // to read the current axis values
L'intero programma PLC_PRG
Confronta il tuo programma e aggiungi le parti di programma mancanti.
Dichiarazione
PROGRAM PLC_PRG
VAR
Power_Drive1, Power_Drive2, Power_Drive3, Power_Drive4 :MC_Power;
istate: INT;
GroupEnable:MC_GroupEnable;
Frame:MC_COORD_REF:=(X:=-120, Y:=-25); // This variable stores the cartesian position & orientation of the TCP
Pos_Cart:SMC_POS_REF; // This variable represents the position of the TCP in cartesian coordinates coordinates
Pos_Axis:SMC_POS_REF := (a := axispos);// This variable represents the position of the TCP in Axis coordinates
MoveAbs:MC_MoveDirectAbsolute; // Moves the TCP to the defined coordinates (PTP)
Car_pos,Axis_pos :SMC_GroupReadSetPosition; //to read the current position of the TCP in Cartesian and Axis Coordinates and display it on the visu
scara_Config:trafo.Kin_Scara3_Z_Config; // To set the configuration of the SCARA_3_Z
kin_Config:SMC_SetKinConfiguration; // To set the defined configuration of SCARA_3_Z to the axis group used
nPeriod:DINT:=0; // SCARA_3_Z Period
Xelbow:BOOL:=TRUE;
END_VAR
VAR CONSTANT
axispos : TRAFO.AXISPOS_REF := (a0 := 0, a1 := 100, a2:=60);
END_VARImplementazione
CASE istate OF 0: Power_Drive1(Axis:=Drive1, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive2(Axis:=Drive2, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive3(Axis:=Drive3, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); Power_Drive4(Axis:=Drive4, Enable:=TRUE, bRegulatorOn:=TRUE, bDriveStart:=TRUE); IF Power_Drive1.Status AND Power_Drive2.Status AND Power_Drive3.Status AND Power_Drive4.Status THEN istate:=istate+1; END_IF 1: GroupEnable(AxisGroup:=KinScara, Execute:=TRUE); IF GroupEnable.Done THEN istate:=istate+1; END_IF 2: scara_Config(xElbowRight:=Xelbow, nPeriodA3:=nPeriod); kin_Config(AxisGroup:=KinScara,ConfigData:=scara_Config.Config, Execute:=TRUE); Pos_Cart.c:=Frame; // To represent the TCP in cartesian coordinates Car_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.MCS, Enable:=TRUE); // read the current position in cartesian coordinates Axis_pos(AxisGroup:=KinScara, CoordSystem:=SM3_Robotics.SMC_COORD_SYSTEM.ACS, Enable:=TRUE); // read the current position in Axis coordinates MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Axis,CoordSystem:=SMC_COORD_SYSTEM.ACS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined axis coordinates //MoveAbs(AxisGroup:=KinScara, Execute:=TRUE, Position:=Pos_Cart,CoordSystem:=SMC_COORD_SYSTEM.MCS, BufferMode:=MC_BUFFER_MODE.Aborting,); //move to the defined cartesian coordinates IF MoveAbs.Done THEN MoveAbs(AxisGroup:=KinScara, Execute:=FALSE); // Waits for the next new coordinates istate:=2; END_IF END_CASE
Creazione di un programma Depictor
Aggiungere una nuova POU "Depic" di tipo "Programma" sotto l'applicazione. Per fare ciò, fare clic su .
Dichiarare una variabile di tipo
SM3_Depictor.SMC_R_Scara3_Z_Data. Dichiarare una variabileLrSizedi tipoLREALe inizializzare la variabile con il valore di 100.VAR ScaraTrafo : SM3_Depictor.SMC_R_Scara3_Z_Data; LrSize:LREAL:=100; END_VAR
Inserire una chiamata al blocco funzione nell'implementazione.
ScaraTrafo(AxisGroup:=KinScara, trf:=KinScara.trafo);
Aggiungi il POU "Depic" al Compito principale.
Configurazione del visualizzatore
Aggiungi un oggetto "Depictor" sotto l'applicazione. Per fare ciò, fare clic su .
Fare doppio clic sull'oggetto.
Seleziona il Posa elemento nell'albero di rappresentazione.
Clic .
Il Scatola l'elemento viene aggiunto sotto la posa.
Seleziona il Rif. raffigurante opzione nelle proprietà dell'elemento.
Clicca il
pulsante.Seleziona il SMC_R_Depictor_Scara3_Z oggetto dal
SM3_Depictorbiblioteca.Definire le variabili di interfaccia come segue:
fb: Depic.ScaraTrafo
lrZ_: Drive1.fSetPosition
lrZmin: 10
lrZmax: -50
lrSize: Depic.LrSize
xShowPlane: 0
Creazione di visualizzazioni
Creare una schermata di visualizzazione in cui è possibile visualizzare e modificare le coordinate cartesiane e le coordinate degli assi.

Aggiungi un oggetto "Visualizzazione" sotto l'applicazione. Per fare ciò, fare clic su .
Apri la visualizzazione nell'editor.
Inserisci a Rettangolo elemento di visualizzazione (1).
Modificare le proprietà dell'elemento.
: %S
:
PLC_PRG.Car_pos.Position.c.XTipo di ingresso: VisuDialogs.Tastierino numerico
Usa un'altra variabile:
PLC_PRG.Frame.X
Inserisci l'altro Scatola elementi di visualizzazione.
Modificare le proprietà degli elementi (2) e (3).
: %S
:
PLC_PRG.Car_pos.Position.c.YoPLC_PRG.Car_pos.Position.c.ZTipo di ingresso: VisuDialogs.Tastierino numerico
Usa un'altra variabile:
PLC_PRG.Frame.YePLC_PRG.Frame.Z
Modificare le proprietà degli elementi (4), (5) e (6).
: %S
:
PLC_PRG.Frame.AoPLC_PRG.Frame.BoPLC_PRG.Frame.C
Modificare le proprietà degli elementi (7), (8), (9) e (10).
: %S
:
PLC_PRG.Axis_pos.Position.a.a0oPLC_PRG.Axis_pos.Position.a.a1oPLC_PRG.Axis_pos.Position.a.a2oPLC_PRG.Axis_pos.Position.a.a3Tipo di ingresso: VisuDialogs.Tastierino numerico
Usa un'altra variabile:
PLC_PRG.Pos_Axis.a.a0ePLC_PRG.Pos_Axis.a.a1ePLC_PRG.Pos_Axis.a.a2ePLC_PRG.Pos_Axis.a.a3
Etichetta gli elementi di visualizzazione con il Etichetta elemento.
Avvio e test del programma
È possibile modificare i valori degli assi nella visualizzazione del progetto. Se si commenta il comando di movimento attivo (MoveAbs..., ...) nel programma PLC_PRG e rimuovere i commenti del secondo comando di spostamento, quindi è possibile modificare le coordinate cartesiane.
Compila il progetto e scaricalo nel PLC.
Apri l'editor dell'oggetto Depictor nel tuo progetto.
Passare alla visualizzazione e modificare i valori degli assi oi valori cartesiani. Osserva il movimento del robot SCARA in Depictor.