# PSD1 Profinet con FB Base | v1.0.0

*Guida alla configurazione del PSD su bus Profinet con FunctionBlock di base*

# 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 base per il controllo del PSD1

## 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 FB PSD1 base ([disponibile qui](https://www.dctrasmissioni.it/documentazione/?ct=1&br=1&pr=1))

⚠️ La FB avanzata è compatibile unicamente con i seguenti PSD **multi-fieldbus**

| Modello                      | 
|------------------------------|
|***PSD1SW***xxxxx***2***xxxxxx|
|***PSD1MW***xxxxx***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 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-base.png" alt="psd-profinet-base.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 Function Block Base

- 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="http://192.168.0.8:6875/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="http://192.168.0.8:6875/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="http://192.168.0.8:6875/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="http://192.168.0.8:6875/uploads/images/gallery/2024-11/tia-profinet-9words.png" alt="tia-profinet-9words.png" width="600"/>

# 4. Programmazione del PLC Siemens

Il Function Block base permette di controllare tramite fieldbus i parametri di base dell'azionamento PSD.
Di seguito la struttura dei dati scambiati tra PSD e PLC:

- Ouptut 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 target		  |
  |`0x6081.0` | LREAL	  |	Velocità posizionamento	  |
  |`0x6083.0` | LREAL	  | Accel. posizionamento	  |
  |`0x6084.0` | LREAL	  | Decel. posizionamento	  |

### Importare il Function Block in TIA Portal:

Per poter utilizzare l'FB in TIA Portal sarà necessario importarne il codice sorgente dal pacchetto *FB base per PSD1*

- In *Project Tree > PLC_1 > External source files* selezionare la voce *Add new external file* e indicare il percorso del file *FB_PSD.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					 |
  | `Reset`			  | BOOL     | Reset allarmi Drive				     |
  | `QuickStop`		  | BOOL     | Fermata rapida Drive <sup>1</sup>	 |
  | `StartMove`		  | BOOL     | Start movimento (NON-latching)		 |
  | `JogP` 			  | BOOL     | Comando Jog positivo				     |
  | `JogN`			  | BOOL     | Comando Jog negativo				     |
  | `Homing`		  | BOOL     | Avvio procedura di homing del Drive   |
  | `MovingMode`	  | INT      | Modalità di movimento				 |
  | `Limit_Range`	  | INT      | Finestra di raggiungimento `TargetRef`|
  | `Speed`			  | DINT     | Velocita posizionamento 			     |
  | `Accel`			  | DINT     | Accel. posizionamento 				 |
  | `Decel`			  | DINT     | Decel. posizionamento 				 |
  | `TargetRef`		  | DINT     | Target di posizione/velocità <sup>2</sup> |

  <sup>1</sup> Il drive necessita di essere riabilitato tramite `Enable` dopo un `QuickStop`

  <sup>2</sup> `TargetRef` rappresenta il target di posizione per `MovingMode = 0/1` oppure di velocità per `MovingMode = 2` 
  <br>
  <br>
  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-9words.png" alt="tia-psd-hw-address-9words.png" width="600"/>
<br>
<br>
  La variabile `MovingMode` può assumere valori 0-3 corrispondenti alle seguenti modalità di movimento:

  | Valore | Funzione             |
  |-----|-------------------------|
  | `0` | Controllo assoluto	  |
  | `1` | Controllo relativo	  |
  | `2` | Controllo in velocità	  |
  | `3` | Modalità Jog			  |

- Output:

  | Nome 		  		  | DataType | Funzione		 					     |
  |-----------------------|----------|---------------------------------------|
  | `Enabled`			  | BOOL     | Drive abilitato						 |
  | `Error`				  | BOOL     | Errore Drive						     |
  | `Moving`			  | BOOL     | Motore in movimento					 |
  | `Homed` 			  | BOOL     | Homing eseguito						 |
  | `TargetReached`		  | BOOL     | Target posizione/velocità raggiunto	 |
  | `InPos` 			  | BOOL     | la posizione è in `TargetRef ± Limit_Range` |
  | `ActualPos`			  | DINT     | Posizione attuale					 |
  | `ActualSpeed`		  | DINT     | Velocità attuale					     |
  | `ActualCurrent`		  | DINT     | Corrente attuale					     |
  | `CommunicationError`  | BOOL     | Comunicazione interrotta o configurazione Profinet errata |
  | `DriveStatus`		  | INT      | Stato del Drive						 |
  | `_Status`			  | STRING[30] | Descrizione dello stato			 |
  | `ErrorCode`			  | WORD     |Codice di errore Drive (lista allarmi PSD) |

### Esempi di modalità di movimento:

- Modalità di Movimento Assoluto o Relativo (`MovingMode = 0/1`)

  I parametri necessari sono:

  | Nome          | Valore    |
  |---------------|-----------|
  | `MovingMode`  | `0`		  |
  | `Speed`		  | `305000`  |
  | `Accel`		  | `1000000` |
  | `Decel`		  | `1000000` |
  | `TargetRef`	  | `2450`	  |

  `TargetRef` corrisponde alla quota da raggiungere in modalità assoluta o all'incremento in modalita relativa
  <br>
  <br>

- Modalità di Movimento in Velocità (`MovingMode = 2`)

  I parametri necessari sono:

  | Nome          | Valore    |
  |---------------|-----------|
  | `MovingMode`  | `2`		  |
  | `Accel`		  | `1000000` |
  | `Decel`		  | `1000000` |
  | `TargetRef`	  | `305000`  |

  `TargetRef` corrisponde alla velocità da mantenere e può essere modificato anche in movimento.

  Il motore può essere fermato con `StartMove = 0` oppure con `TargetRef = 0`.
  <br>
  <br>
  
- Modalità di Movimento Jog (`MovingMode = 3`)

  I parametri necessari sono:

  | Nome          | Valore |
  |---------------|--------|
  | `MovingMode`  | `3`    |

  Il movimento viene gestito tramite gli ingressi `JogP` e `JogN`, mentre velocità, accelerazione e decelerazione di Jog sono definite nella configurazione interna al PSD.
  <br>
  <br>

  ℹ️Per poter modificare tramite Profinet velocità, accelerazione e decelerazione di Jog è necessario utilizzare il Function Block avanzato disponibile [a questo indirizzo](/books/psd1-profinet-con-fb-avanzato-v102) (Solo PSD ad asse singolo)