# PSD1 Tavola Rotante Profinet | v1.0.1

*Guida alla configurazione dell'Applicazione Tavola su bus Profinet*

# 0. Introduzione

## Obiettivi della guida:

- Collegamento fieldbus del PSD1
- Configurazione software del PSD per fieldbus Profinet
- Configurazione di base TIA Portal
- Introduzione alla Function Block Applicazione Tavola

## Prerequisiti:

- Parker-Hannifin PSD1S/PDS1M Motor Drive
- PSD Servo Manager ([disponibile qui](https://www.dctrasmissioni.it/documentazione/?ct=1&br=1&pr=1))
- Siemens TIA Portal V19
- Pacchetto Applicazione Tavola ([disponibile qui](https://www.dctrasmissioni.it/documentazione/?ct=1&br=3&pr=6))

⚠️ La FB tavola è compatibile unicamente con i seguenti PSD **multi-fieldbus** ad **asse singolo**

| Modello                      | 
|------------------------------|
|***PSD1SW1***xxxx***2***xxxxxx|
|***PSD1MW1***xxxx***2***xxxxxx|

⚠️ La versione di PSD Servo manager **DEVE** corrispondere a quella del firmware PSD1

# 1. Collegamento del PSD1 Motor Drive

- Collegare il cavo ethernet della rete Profinet alla porta X62 posta al di sopra dell'azionamento
<br>
<br>

  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/psd1s-ethernet.png" alt="psd1s-ethernet.png" width="250"/>

- Per configurare un indirizzo IP fieldbus in una classe differente dalla default `192.168.100.x`, impostare su 0 i due switch S12 ed S13 presenti sul davanti dell'unità, in questo modo l'indirizzo IP del PSD1 sarà configurabile tramite Profinet
<br>
<br>

  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/psd1s-ip-switch.png" alt="psd-ip-switch.png" width="300"/>

⚠️ Se l'operazione è stata effettuata con il PSD1 acceso, sarà necessario spegnerlo per qualche secondo perché la modifica abbia effetto

# 2. Configurazione del PSD1 Motor Drive

### Impostazioni Device:
- In *Device > Device Settings > PSD multi filedbus*:

`Fieldbus type = Profinet`

### Impostazioni Asse:

- In *Axis 1 > World/Userunit > Increments per motor revolution*:

`Numerator (feed) = 360000`

`Denominator = 59`

`Motor direction = NonInverted`
  
- In *Axis 1 > World/Userunit > Drive modulo*:

`Numerator [incr] = 360000`
  
`Denominator = 1`

- In *Axis 1 > Limits > Software Limits (SW)*:

`Error reaction 0x73A3: Positive Limit succeeded = ErrorIsCompletelyDisregarded`

`Error reaction 0x73A4: Negative Limit succeeded = ErrorIsCompletelyDisregarded`

- In *Axis 1 > Homing Mode > Homing configuration*:

`Homing Method = Mode37_HomingOnCurrentPosition`

- In *Axis 1 > Ramps/PosOptions > Position options*:

`ResetPosition (endless) mode = FALSE`

`Relative option = Relative_to_current_pos_target`

`Rotary axis direction option (rado) = Only_positive_direction`

### Impostazioni Profinet:

- In *Axis 1 > PROFINET* modificare gli oggetti inviati e ricevuti come nella seguente immagine:
<br>
<br>
  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/psd-profinet-tavola.png" alt="psd-profinet-tavola.png" width="600"/>

È ora possibile **effettuare il download** della configurazione sul PSD.

# 3. Configurazione del PLC Siemens

- Importare il file GSD del PSD1 su TIA Portal e aggiungerlo al progetto

ℹ️ Il file GSD si trova nel pacchetto Applicazione Tavola

- Cliccare sul pulsante <u>Not Connected</u> e selezionare la CPU che farà da master, comparirà un collegamento in verde come in figura e sul device PSD il nome della CPU a cui verrà collegato
<br>
<br>
  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/tia-psd-connected.png" alt="tia-psd-connected.png" width="600"/>

### Impostare indirizzo IP del PSD:

- Se necessario, dal pannello *Device Configuration* del modulo PSD impostare l'indirizzo IP dell'azionamento
<br>
<br>
  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/tia-psd-change-ip.png" alt="tia-psd-change-ip.png" width="600"/>
<br>
<br>

  ℹ️ L'indirizzo IP verrà assegnato **SOLO dopo il download** della configurazione sul PLC. Potrebbe essere necessario un riavvio di entrambi i dispositivi.


### Configurazione Profinet:

- Nel pannello *Device View* selezionare il modulo PSD

- Dalla scheda *Device Overview* eliminare il modulo APA_IO
<br>
<br>
  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/tia-profinet-psd-standard.png" alt="tia-profinet-psd-standard.png" width="600"/>
<br>
<br>

- Inserire dalla scheda *Hardware Catalog*, se non presente, il modulo **PD_IO 9 Words**
<br>
<br>
  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/tia-profinet-14words.png" alt="tia-profinet-14words.png" width="600"/>

# 4. Programmazione del PLC Siemens

Il pacchetto applicazione tavola comprende un Function Block destinato al controllo dell'azionamento mediante la rete Profinet appena configurata, di seguito la struttura dei dati scambiati tra PSD e PLC:

- Output PSD --> Input PLC

  | Nome 		| DataType  | Contenuto 			|
  |-------------|-----------|-----------------------|
  | `0x6041.0`  | WORD	    | Status Word		    | 
  | `0x6064.0`	| LREAL		| Posizione attuale	    |
  | `0x606C.0`	| LREAL		| Velocità attuale  	|
  | `0x31C1.1`	| WORD		| Input digitali Drive	|
  | `0x3C2D.1`	| WORD		| Codice errore Drive	|
  | `0x3321.2`	| LREAL		| Corrente attuale		|


- Output PLC --> Input PSD

  | Nome 		| DataType  | Contenuto 			|
  |-------------|---------- |-----------------------|
  | `0x6040.0`  | WORD	    | Control Word		    | 
  | `0x607A.0`	| LREAL		| Posizione tavola		|
  | `0x6081.0`	| LREAL		| Velocità tavola  	    |
  | `0x6083.0`	| LREAL		| Accelerazione tavola  |
  | `0x6084.0`	| LREAL		| Decelerazione tavola	|
  | `0x346A.0`	| LREAL		| Velocità Jog		    |
  | `0x3468.0`	| LREAL		| Accelerazione Jog	    |
  | `0x60F2.0`	| WORD		| Option Code posizione	|

### Importare il Function Block in TIA Portal:

Per poter utilizzare l'FB in TIA Portal sarà necessario importarne il codice sorgente dal pacchetto *Applicazione Tavola*

- In *Project Tree > PLC_1 > External source files* selezionare la voce *Add new external file* e indicare il percorso del file *TurnTable.scl*
<br>
<br>
  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/tia-add-source.png" alt="tia-add-source.png" width="300"/>
<br>
<br>

- Ora è necessario generare l'FB premendo il tasto destro del mouse sul file appena importato e selezionando la voce *generate blocks from source*
<br>
<br>
  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/tia-generate-blocks.png" alt="tia-generate-blocks.png" width="300"/>
<br>
<br>

A questo punto sarà possibile richiamare il blocco nella sezione desiserata, assegnargli un'istanza e parametrizzarlo.

### Parametrizzazione del Function Block:

- Input:

  | Nome 		  		| DataType | Funzione		 						|
  |---------------------|----------|----------------------------------------|
  | `HW_Address`		| HW_IO    | Indirizzo hardware Profinet del PSD1	|
  | `Enable`			| BOOL     | Abilitazione drive tavola				|
  | `Reset`				| BOOL     | Reset allarmi drive/tavola			    |
  | `GradiPassoA`		| REAL     | Gradi di avanzamento con passo A		|
  | `GradiPassoB` 		| REAL     | Gradi di shifting rispetto a passo A	|
  | `StartPasso`		| BOOL     | Start passo selezionato (NON-latching) |
  | `EseguiPassoB` 		| BOOL     | Selezione passo B	(shifting)			|
  | `nStazioni`			| INT      | N. stazioni shift (Gradi A / Gradi B)	|
  | `JogP`				| BOOL     | Comando Jog positivo					|
  | `JogN`				| BOOL     | Comando Jog negativo					|
  | `PassoLento`		| BOOL     | Attivazione passo lento				|
  | `JogLento`			| BOOL     | Attivazione Jog lento					|
  | `AzzeramentoTavola`	| BOOL     | Comando di azzeramento tavola			|
  | `RangePos`			| REAL     | Range posizionamento (Es: 0,1° = 1/10°)|
  | `VelPassoRapido` 	| DINT     | Velocità passo rapido					|
  | `AccPassoRapido` 	| DINT     | Acc/Dec passo rapido 					|
  | `VelJogRapido`		| DINT     | Velocità Jog rapido					|
  | `AccJogRapido`		| DINT     | Acc/Dec Jog rapido 					|
  | `VelPassoLento` 	| DINT     | Velocità passo lento					|
  | `AccPassoLento` 	| DINT     | Acc/Dec passo lento 					|
  | `VelJogLento`		| DINT     | Velocità Jog lento					    |
  | `AccJogLento`		| DINT     | Acc/Dec Jog lento 					    |

  la variabile `HW_Address` identifica il driver specifico controllato dalla FB e può essere configurato dinamicamente scrivendo al suo interno l'oggetto Profinet corrispondente al Drive desiderato
<br>
<br>
  <img src="https://docs.dctrasmissioni.it/uploads/images/gallery/2024-11/tia-psd-hw-address-14words.png" alt="tia-psd-hw-address-14words.png" width="600"/>
<br>
<br>

- Output:

  | Nome 		  | DataType | Funzione		 						    |
  |---------------|----------|------------------------------------------|
  | `DriveStatus` | INT      |	Stato del Drive della tavola			|
  | `_Status`     | STRING[30] |	Descrizione dello stato             |
  | `Enabled`	  | BOOL     | Tavola abilitata						    |
  | `Fault`		  | BOOL     | Anomalia/Allarme tavola o Drive			|	
  | `TavolaInPos` | BOOL     | Tavola in posizione						|
  | `TavolaFerma` | BOOL     | Tavola non in movimento					|
  | `ActPos`	  | REAL     | Posizione attuale Tavola				    |
  | `ActShiftPos` | REAL     | Posizione attuale Tavola dopo shift (passo B) |
  | `nPallet`	  | INT      | Riferimento di pallet dopo shift		    |
  | `ErrorDrive`  | WORD     | Codice di errore Drive (lista allarmi PSD) |
  | `ErrorCode`	  | INT      | Codice di errore FB tavola				|

  La variabile `DriveStatus` può assumere valori 1-4 corrispondenti alle relative descrizioni nella variabile `_Status`:

  | Valore | Descrizione          |
  |-----|-------------------------|
  | `1` | Switching On Inhibited  |
  | `2` | Ready To Switch On	  |
  | `3` | Switched On			  |
  | `4` | Operation Enabled		  |

  La variabile `ErrorCode` può assumere valori 1-7:
  | Valore | Descrizione                    |
  |-----|-----------------------------------|
  | `1` | Start senza abilitazione Tavola	|
  | `2` | Jog senza abilitazione Tavola		|
  | `3` | Homing senza abilitazione Tavola	|
  | `4` | Gradi Passi errato (Passo A o Passo B non divide interamente 360°) |
  | `5` | Numero stazioni errato (Se Passo A / Passo B non è uguale a numero stazioni) |
  | `6` | Gradi tolleranza errato (Se la tolleranza di posizione è uguale a 0) |
  | `7` | parametri posizionamento errati (Se velocità o accelerazioni sono uguali a 0) |

### Esempi di gestione della Tavola:

- **Abilitazione Tavola:**
  Per poter abilitare la tavola è necessario che non ci siano anomalie relative al Drive (`ErrorDrive = 0`)

- **Impostazione gradi step:**
  Il numero di gradi espresso in `GradiPassoA` **DEVE** dividere per intero 360°, cioè un giro di tavola completo.

  *Es: `GradiPassoA = 90.0`*

- **Impostazione numero di stazioni:**
  Se sulla tavola sono presenti shift da eseguire, impostare il numero di gradi in `GradiPassoB` in maniera tale da dividere interamente `GradiPassoA`.

  *Es: `GradiPassoA = 90.0 / GradiPassoB = 18.0 => nStazioni = 5`*

  Se correttamente impostato, `nStazioni` indica quanti shift è possibile eseguire in `GradoPassoA` gradi.
Il numero di stazione in cui ci si trova dopo uno shift è indicato dalla variabile in uscita `nPallet`.

- **Impostazione tolleranza di posizionamento:**
  Il parametro `RangePos` indica il range di tolleranza per il posizionamento della tavola.

  *Es. `RangePos = 0.1` => la tolleranza è 1/10 di grado*
  <br>
  <br>
  ⚠️ Se `RangePos = 0.0` la tavola **NON** eseguirà alcun movimento (`ErrorCode = 6`)
  <br>
  <br>
- **Impostazione parametri di posizionamento:**
  Di seguito un esempio di parametrizzazione delle velocità è delle accelerazioni della tavola.

  | Nome           | Valore |
  |----------------|--------|
  |`VelPassoRapido`|`120000`|
  |`AccPassoRapido`|`500000`|
  |`VelJogRapido`  |`30000` |
  |`AccJogRapido`  |`400000`|
  |`VelPassoLento` |`15000` |
  |`AccPassoLento` |`400000`|
  |`VelJogLento`   |`100`	|
  |`AccJogLento`   |`400000`|