Vai al contenuto
PLC Forum


Programmare ATV 320 con s7 1200


pomodoraio

Messaggi consigliati

Salve buongiorno a tutti , dovrei far partire un inverter ATV320 , premessa che ho gia scaricato il file gsd e messo in comnuicacione il progetto , ora dovrei dargli i comandi almeno per farlo partire , se gentilmente qualche collega ha gia fatto un progetto del genere. Naturalmente in profinet

Modificato: da pomodoraio
Link al commento
Condividi su altri siti


Come comandare l'inverter ATV320 non dipende da Siemens, ma da Schneider.
Devi guardare nel manuale dell'inverter.

Link al commento
Condividi su altri siti

Ecco lo sto facendo da giorni , alla fine , il risultato è blocco celebrale , sono riusciro a leggere solo esempio %iw68 canale poi non so dirti altro , per la configurazione .... e quali dati inserire e cosa scrivere nel progetto

Link al commento
Condividi su altri siti

Io non conosco l'Altivar, ma immagino che si comandi più o meno come tutti gli inverter.
Inserendo l'inverter nella configurazione hardware, a seconda delle possibilità offerte dal file GSD, ti ritroverai con delle variabili di scambio predefinite, oppure configurabili.
Di sicuro avrai, dal PLC verso l'invereter, una variabile di controllo (ogni bit avrà una funzione di comando dell'inverter) ed una variabile per il riferimento di velocità.
Dall'inverter verso il PLC, una variabile di stato, ed una variabile della velocità attuale.
Poi ci possono essere anche variabili per impostare le accelerazioni ed altri parametri, e variabili con la corrente assorbita, allarmi, avvisi, ed altro.
Ma questo non te lo so dire.

Comunque, per comandare l'inverter, dovrai trovare sul manuale dell'inverter stesso la funzione dei bit della variabile di controllo.

Link al commento
Condividi su altri siti

Prima di tutto immagino che tu abbia aggiunto la scheda profinet visto che l'inverter è nativo modbus con porta già incorporata. Per il resto se guardi qui mi pare che più o meno è come ha detto batta.variabile comando, di reference e l'inverter risponde con i parametri che possono più o meno servirti.

Link al commento
Condividi su altri siti

per ciascun inverter devi

1) impostare il telegramma 100 

2) richiamare il blocco ATV_control istanziato con la sua DB
3) mettere il corretto indirizzo iHW_SubModule OCCHIO: devi puntare col mouse il telegramma e guardare di sotto alla cartella costanti di sistema  
4) crearti una tabella di variabili per le prime prove. Trovi di sotto le informazioni che devi dare e le informazioni che ti ritornano.

5) scrivere il codice per azionare i comandi sotto esposti .... non molto direi

 

// comandi con l'istanza "MioInverter"

"MioInverter".i_xEnable
"MioInverter".i_inTargetVelocity
"MioInverter".i_xFaultReset
"MioInverter".i_xHALT
"MioInverter".i_xQuickStop
"MioInverter".i_xReverseDirection

 

// risposte con l'istanza "MioInverter"
"MioInverter".q_inStatusWord
"MioInverter".q_inActualVelocity
"MioInverter".q_xDirectionOfRotation
"MioInverter".q_xFault
"MioInverter".q_xInternalLimitActive
"MioInverter".q_xOperationEnabled
"MioInverter".q_xQuickStopActive
"MioInverter".q_xReadyToSwitchOn
"MioInverter".q_xRemote
"MioInverter".q_xStopViaStopKey
"MioInverter".q_xSwitchedOn
"MioInverter".q_xSwitchOnDisabled
"MioInverter".q_xTargetReached
"MioInverter".q_xWarning

 

dal lato della programmazione dell'inverter non c'è molto da fare ....

1) Come prima cosa bisogna definire il nome Profinet in modo da fargli acquisire l'indirizzo come da progetto del PLC.

2) Per selezionare il collegamento in remoto del Profinet bisogna modificare i parametri FR1 e CD1

3) la procedura per fare la taratura di un motore deve essere fatta in modalità esperti

4) nel modello 320 bisogna selezionare il parametro di autotuning su ONE per fargli effettuare l'autotuning

5) bisogna quindi abilitare il pannello come prima cosa quindi selezionare l'autotuning dal menu device/command panel

6) parametro ITH mettere il valore di corrente come da targhetta motore

7) per abilitare il freno di azionamento cablato sull'azionamento bisogna modificare i parametri FTD  e R2 se ce l'hai

8( Per rendere operativi i parametri basta riavviare l'azionamento o l'inverter con il seguente comando dispositivo/funzioni utente/reset azionamento

9) se devi invertire il senso di rotazione lo fai dalla configurazione di base al parametro InvertDirMove 

 

 

Link al commento
Condividi su altri siti

non ho mai scritto un progetto del genere , quindi mi trovo in difficolta nella comprensione , dove vanno scritti questi dati , va fatto un blocco nel progetto ???

 

Link al commento
Condividi su altri siti

8 ore fa, pomodoraio ha scritto:

non ho mai scritto un progetto del genere , quindi mi trovo in difficolta nella comprensione

non ho dubbi, l'esperienza la si paga con anni di lavoro alle spalle (purtroppo) 😃

La mia risposta l'ho splittata in 2 parti:

1) dal lato PLC

2) dal lato dell'inverter

 

se pensi di affrontare la cosa all'aria e sole senza un minimo di preparazione sei un inguaribile ottimista o uno sprovveduto. Io sono più propenso a pensare al tuo inguaribile ottimismo. 😇

a) segui le mie istruzioni nella prima parte relativa al TIA. Se non ti è chiaro cerca sul tubo un esempio di gestione Altivar Profinet. Mi ricordo che c'è qualcosa del genere in lingua tedesca di sicuro poi non mi ricordo se c'è anche in inglese.

b) hai installato SoMove e le librerie dell'Altivar? Se la risposta è SI, leggi la seconda parte della mia risposta e i punti da 1 a 9, altrimenti resti in questo punto fino a che la risposta è SI

 

Link al commento
Condividi su altri siti

Sono riuscito  far partire almeno l'inverter ad una velocita fissa forzando , un indirizzo di telegramm, ora devo capire cosa leggere e come scrivere cio che mi hai gentilmente scritto ...

GRAZIE  PIGRO PLC

Link al commento
Condividi su altri siti

12 ore fa, pomodoraio ha scritto:

ora devo capire cosa leggere e come scrivere cio che mi hai gentilmente scritto

pomodoraio,

se ti riferisci ai flag dell'interfaccia del PLC direi che è imbarazzante da quanto è facile:

vuoi far partire l'inverter?

verifichi che non ci siano errori quindi:
"MioInverter".i_xEnable:= TRUE;
"MioInverter".i_inTargetVelocity:= 1000; // VELOCITA'
"MioInverter".i_xReverseDirection:= TRUE; // se lo vuoi far girare al contrario, altrimenti FALSE

 

12 ore fa, pomodoraio ha scritto:

GRAZIE  PIGRO PLC

Prego, di nulla...... 😃

 

Link al commento
Condividi su altri siti

Il 21/4/2020 alle 07:59 , pigroplc ha scritto:

pomodoraio,

se ti riferisci ai flag dell'interfaccia del PLC direi che è imbarazzante da quanto è facile:

vuoi far partire l'inverter?

verifichi che non ci siano errori quindi:
"MioInverter".i_xEnable:= TRUE;
"MioInverter".i_inTargetVelocity:= 1000; // VELOCITA'
"MioInverter".i_xReverseDirection:= TRUE; // se lo vuoi far girare al contrario, altrimenti FALSE

 

Prego, di nulla...... 😃

 

Non capisco cosa intendi per istanza tu sei piu tecnico , comunque qualcosa da configurare nell'inverter c'era ... Oltre a quello che mi hai suggerito tu . 

Il 16/4/2020 alle 19:07 , pigroplc ha scritto:

per ciascun inverter devi

1) impostare il telegramma 100 

2) richiamare il blocco ATV_control istanziato con la sua DB
3) mettere il corretto indirizzo iHW_SubModule OCCHIO: devi puntare col mouse il telegramma e guardare di sotto alla cartella costanti di sistema  
4) crearti una tabella di variabili per le prime prove. Trovi di sotto le informazioni che devi dare e le informazioni che ti ritornano.

5) scrivere il codice per azionare i comandi sotto esposti .... non molto direi

 

// comandi con l'istanza "MioInverter"

"MioInverter".i_xEnable
"MioInverter".i_inTargetVelocity
"MioInverter".i_xFaultReset
"MioInverter".i_xHALT
"MioInverter".i_xQuickStop
"MioInverter".i_xReverseDirection

 

// risposte con l'istanza "MioInverter"
"MioInverter".q_inStatusWord
"MioInverter".q_inActualVelocity
"MioInverter".q_xDirectionOfRotation
"MioInverter".q_xFault
"MioInverter".q_xInternalLimitActive
"MioInverter".q_xOperationEnabled
"MioInverter".q_xQuickStopActive
"MioInverter".q_xReadyToSwitchOn
"MioInverter".q_xRemote
"MioInverter".q_xStopViaStopKey
"MioInverter".q_xSwitchedOn
"MioInverter".q_xSwitchOnDisabled
"MioInverter".q_xTargetReached
"MioInverter".q_xWarning

 

dal lato della programmazione dell'inverter non c'è molto da fare ....

1) Come prima cosa bisogna definire il nome Profinet in modo da fargli acquisire l'indirizzo come da progetto del PLC.

2) Per selezionare il collegamento in remoto del Profinet bisogna modificare i parametri FR1 e CD1

3) la procedura per fare la taratura di un motore deve essere fatta in modalità esperti

4) nel modello 320 bisogna selezionare il parametro di autotuning su ONE per fargli effettuare l'autotuning

5) bisogna quindi abilitare il pannello come prima cosa quindi selezionare l'autotuning dal menu device/command panel

6) parametro ITH mettere il valore di corrente come da targhetta motore

7) per abilitare il freno di azionamento cablato sull'azionamento bisogna modificare i parametri FTD  e R2 se ce l'hai

8( Per rendere operativi i parametri basta riavviare l'azionamento o l'inverter con il seguente comando dispositivo/funzioni utente/reset azionamento

9) se devi invertire il senso di rotazione lo fai dalla configurazione di base al parametro InvertDirMove 

 

 

Con   I_x enable intendi la variabile  IW che da Telegramm???

Link al commento
Condividi su altri siti

Il 24/4/2020 alle 19:18 , pomodoraio ha scritto:

sono io asino che non comprendo il linguaggio tecnico alto livello scritto da te

😃  non buttarti giù, le cose che si sanno sono facili, quelle che non si sanno sono difficili.

Mi suona strano che tu possa trovarti ad avere da muovere un inverter senza un minimo di preparazione.

1) hai la FB di gestione dell'inverter?

2) sai come lanciare una FB?

 

Link al commento
Condividi su altri siti

22 ore fa, pomodoraio ha scritto:

Pigro ma cosa scrivo nell'FB 

Insieme all'inverter dovresti avere ricevuto dal costruttore anche una biblioteca software per la gestione dell'inverter. 

Se l'hai ricevuta devi richiamare questa FB in OB1 per esempio e compilare i campi 

22 ore fa, pomodoraio ha scritto:

Quindi finche non raggiungo l'obbiettivo rimango asino

Io non mi permetto di darti dell'asino! 
Il fatto che rispondi dopo una settimana dalla mia risposta desumo che sei impegnato in altro oppure che la cosa è tutto tranne che urgente.

Se hai bisogno di aiuto nel forum ci sono fior di professionisti (non mi riferisco al sottoscritto) disposti ad aiutare, ma se tu non rispondi alle domande che ti vengono poste ben difficilmente se ne viene fuori.
 

Il 26/4/2020 alle 19:23 , pigroplc ha scritto:

1) hai la FB di gestione dell'inverter?

2) sai come lanciare una FB?

ti ripeto le stesse domande, e siccome sono pigro non le riscrivo ma le quoto. A te la risposta.....

Link al commento
Condividi su altri siti

Pigro , hai dedotto bene , impegni lavorativi a turni , solo quando faccio turni notturni , ho piu tempo di giorno per fare le cose. Intanto ringrazio tutti ed anche te per la diponibilita , hai fatto le domande , ed è giusto dopo l'aiuto che mi hai dato .

E senza le tue dritte sulla configurazione dello stesso inverter non sarebbe stato possibile metterlo nemmeno in moto .

Ora riassumendo

dal lato della programmazione dell'inverter non c'è molto da fare ....

1) Come prima cosa bisogna definire il nome Profinet in modo da fargli acquisire l'indirizzo come da progetto del PLC.

2) Per selezionare il collegamento in remoto del Profinet bisogna modificare i parametri FR1 e CD1

3) la procedura per fare la taratura di un motore deve essere fatta in modalità esperti

4) nel modello 320 bisogna selezionare il parametro di autotuning su ONE per fargli effettuare l'autotuning

5) bisogna quindi abilitare il pannello come prima cosa quindi selezionare l'autotuning dal menu device/command panel

6) parametro ITH mettere il valore di corrente come da targhetta motore

7) per abilitare il freno di azionamento cablato sull'azionamento bisogna modificare i parametri FTD  e R2 se ce l'hai

8( Per rendere operativi i parametri basta riavviare l'azionamento o l'inverter con il seguente comando dispositivo/funzioni utente/reset azionamento

9) se devi invertire il senso di rotazione lo fai dalla configurazione di base al parametro InvertDirMove 

Tutto fatto vi era solo un altro parametro CHCF che doveva essere messo IO lato inverter

Quindi tutto configurato e l'inverter risponde con le word di riferimento di telegramm .

Ora quello che non ho capito

E come strutturare l'FB

e qui che mi sono un po insabbiato e ci stavo lavorando ..

LA tabella delle prime variabili è stata creata , ma in realta ho sfruttato gli indirizzi che ha fornito telegramm ..... In realta cio che non ho trovato nelel specifiche del manuale , è la specifica di questi indirizzi di telegramm .... esempio QW 74  sono riuscito a capire che funzione fa , ma specifictamente non ho trovato indicazioni .

 

 

5) scrivere il codice per azionare i comandi sotto esposti .... non molto direi

 

// comandi con l'istanza "MioInverter"

"MioInverter".i_xEnable
"MioInverter".i_inTargetVelocity
"MioInverter".i_xFaultReset
"MioInverter".i_xHALT
"MioInverter".i_xQuickStop
"MioInverter".i_xReverseDirection

 

// risposte con l'istanza "MioInverter"
"MioInverter".q_inStatusWord
"MioInverter".q_inActualVelocity
"MioInverter".q_xDirectionOfRotation
"MioInverter".q_xFault
"MioInverter".q_xInternalLimitActive
"MioInverter".q_xOperationEnabled
"MioInverter".q_xQuickStopActive
"MioInverter".q_xReadyToSwitchOn
"MioInverter".q_xRemote
"MioInverter".q_xStopViaStopKey
"MioInverter".q_xSwitchedOn
"MioInverter".q_xSwitchOnDisabled
"MioInverter".q_xTargetReached
"MioInverter".q_xWarning

 

😃  non buttarti giù, le cose che si sanno sono facili, quelle che non si sanno sono difficili.

Mi suona strano che tu possa trovarti ad avere da muovere un inverter senza un minimo di preparazione.

1) hai la FB di gestione dell'inverter?

2) sai come lanciare una FB?

 

Non so come lanciare FB so come scriverla ma strutturalmente non so come possa essere progettata

e che dati inserire

Modificato: da pomodoraio
Link al commento
Condividi su altri siti

magari 2 immagini sono più eloquenti di 100 esempi testuali:

immagine ss.png
riga 289: se non è in emergenza abilita il bit i_xEnable

dalla riga 293 alla riga 311 seleziona il setpoint di velocità

immagine ss1.png

siamo in OB1 nel segmento 5 e ci sono i richiami degli inverter collegati alla macchina.

 

ss.png

ss1.png

Link al commento
Condividi su altri siti

  • 2 months later...
Lorenzo Ribaldi
Il 26/4/2020 alle 19:23 , pigroplc ha scritto:

😃  non buttarti giù, le cose che si sanno sono facili, quelle che non si sanno sono difficili.

Mi suona strano che tu possa trovarti ad avere da muovere un inverter senza un minimo di preparazione.

1) hai la FB di gestione dell'inverter?

2) sai come lanciare una FB?

 

 

 

Ciao pigroplc, dove si trova l'fb ATV_Control? Viene fornito da Schneider o è un fb tuo? Non riesco a trovarlo da nessuna parte

Link al commento
Condividi su altri siti

Premetto che chi ti fornisce il componente dovrebbe quantomeno fornirti tutti gli strumenti per lavorare, ti giro quello che mi hanno mandato a suo tempo:

 

FUNCTION_BLOCK "ATV_Control"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      iHW_SubModule : HW_SUBMODULE;
      i_xEnable : Bool;
      i_xQuickStop : Bool;
      i_xFaultReset : Bool;
      i_xHALT : Bool;
      i_xReverseDirection : Bool;
      i_inTargetVelocity : Int;
   END_VAR

   VAR_OUTPUT 
      q_inStatusWord : Word;
      q_inActualVelocity : Int;
      q_xQuickStopActive : Bool;
      q_xSwitchOnDisabled : Bool;
      q_xReadyToSwitchOn : Bool;
      q_xOperationEnabled : Bool;
      q_xSwitchedOn : Bool;
      q_xFault : Bool;
      q_xWarning : Bool;
      q_xDirectionOfRotation : Bool;
      q_xStopViaStopKey : Bool;
      q_xInternalLimitActive : Bool;
      q_xTargetReached : Bool;
      q_xRemote : Bool;
   END_VAR

   VAR 
      SETIO_Instance {InstructionName := 'SETIO'; LibVersion := '1.2'} : SETIO;
      GETIO_Instance {InstructionName := 'GETIO'; LibVersion := '1.1'} : GETIO;
      dwGetStatus : DWord;
      dwSetStatus : DWord;
      arInputData : Array[0..5] of Word;
      arOutputData : Array[0..5] of Word;
      inTempDriveStatus : Int;
      inDummy : Word;
      inControlWord : Word;
      woDummy : Word;
   END_VAR


BEGIN
	#GETIO_Instance(ID:=#iHW_SubModule,
	                STATUS=>#dwGetStatus,
	                INPUTS:=#arInputData);
	
	// ********************************************************************************
	// Reading Input values from ATV32
	#q_inActualVelocity := WORD_TO_INT(#arInputData[5]);
	#q_inStatusWord := #arInputData[4];
	#inTempDriveStatus := WORD_TO_INT(#q_inStatusWord AND 16#006F);
	
	(* Reset outputs each cycle *)
	#q_xQuickStopActive := 0;
	#q_xSwitchOnDisabled := 0;
	#q_xReadyToSwitchOn := 0;
	#q_xOperationEnabled := 0;
	#q_xSwitchedOn := 0;
	#q_xFault := 0;
	
	CASE #inTempDriveStatus OF
	        
	    16#0040:    (* State 2 - Switch ON Disabled *)
	        #q_xSwitchOnDisabled := 1;
	        #inDummy := #inControlWord AND 16#FFF0;
	        #inControlWord := #inDummy + 16#0006;
	        
	    16#0021:    (* State 3 - Ready to Switch ON *)
	        #q_xReadyToSwitchOn := 1;
	        IF #i_xEnable THEN
	            #inDummy := #inControlWord AND 16#FFF0;
	            #inControlWord := #inDummy + 16#0007;
	        END_IF;
	        
	    16#0023:    (* State 4 - Switched ON *)
	        #q_xSwitchedOn := 1;
	        IF NOT #i_xEnable THEN
	            #inDummy := #inControlWord AND 16#FFF0;
	            #inControlWord := #inDummy + 16#0006;
	        ELSE
	            #inDummy := #inControlWord AND 16#FFF0;
	            #inControlWord := #inDummy + 16#000F;
	        END_IF;
	        
	    16#0027:    (* State 5 - operation Enabled *)
	        #q_xOperationEnabled := 1;
	        IF NOT #i_xEnable THEN
	            #inDummy := #inControlWord AND 16#FFF0;
	            #inControlWord := #inDummy + 16#0007;
	        END_IF;
	        
	    16#0007:    (* State 6 - QuickStop active *)
	        #q_xQuickStopActive := 1;
	        IF NOT #i_xQuickStop THEN
	            #inDummy := #inControlWord AND 16#FFF0;
	            #inControlWord := #inDummy + 16#0000;
	        END_IF;
	        ;
	        
	    16#0008, 16#0028:    (* State 8 - FAULT *)
	        #q_xFault := 1;
	        ;
	    ELSE
	        #q_xFault := 0;
	        #inControlWord := 0;
	        #inTempDriveStatus := 0;
	END_CASE;
	
	(* QuickStop *)
	IF #i_xQuickStop THEN
	    #inDummy := #inControlWord AND 16#FFF0;
	    #inControlWord := #inDummy + 16#0002;
	    //  inControlWord.1 :=0;
	    //ELSE
	    //  inDummy         :=inControlWord AND 16#FFF0;
	    //  inControlWord   :=inDummy + 16#000F;
	    //  inControlWord.1 :=1;
	END_IF;
	
	(* Fault Reset *)
	IF #i_xFaultReset THEN // Bit 7
	    #inControlWord := #inControlWord OR 16#0080;// 1;
	ELSE
	    #inControlWord := #inControlWord AND 16#FF7F;//0;
	END_IF;
	
	(* HALT *)
	IF #i_xHALT THEN
	    #inControlWord := #inControlWord OR 16#0100;
	ELSE
	    #inControlWord := #inControlWord AND 16#FEFF;
	END_IF;
	
	(* Reverse Direction *)
	IF #i_xReverseDirection THEN // Bit 11
	    #inControlWord :=#inControlWord OR 16#0800;
	ELSE
	    #inControlWord := #inControlWord AND 16#F7FF;
	END_IF;
	
	// additional status information
	// Warning Bit 7
	#woDummy:=#q_inStatusWord AND 16#0080;
	IF #woDummy > 0 THEN
	    #q_xWarning := TRUE;
	ELSE
	    #q_xWarning := FALSE;
	END_IF;
	// Remote Bit 9
	#woDummy := #q_inStatusWord AND 16#0200;
	IF #woDummy > 0 THEN
	    #q_xRemote := TRUE;
	ELSE
	    #q_xRemote := FALSE;
	END_IF;
	// Target reached Bit 10
	#woDummy := #q_inStatusWord AND 16#0400;
	IF #woDummy > 0 THEN
	    #q_xTargetReached := TRUE;
	ELSE
	    #q_xTargetReached := FALSE;
	END_IF;
	// internal limit active Bit 11
	#woDummy := #q_inStatusWord AND 16#0800;
	IF #woDummy > 0 THEN
	    #q_xInternalLimitActive := TRUE;
	ELSE
	    #q_xInternalLimitActive := FALSE;
	END_IF;
	// StopViaStopKey Bit 14
	#woDummy := #q_inStatusWord AND 16#4000;
	IF #woDummy > 0 THEN
	    #q_xStopViaStopKey := TRUE;
	ELSE
	    #q_xStopViaStopKey := FALSE;
	END_IF;
	// Direction of rotation Bit 15
	#woDummy := #q_inStatusWord AND 16#8000;
	IF #woDummy > 0 THEN
	    #q_xDirectionOfRotation := TRUE;
	ELSE
	    #q_xDirectionOfRotation := FALSE;
	END_IF;
	
	// Writing Output values to ATV32
	#arOutputData[4] := #inControlWord;
	#arOutputData[5] := INT_TO_WORD(#i_inTargetVelocity);
	
	#SETIO_Instance(ID:=#iHW_SubModule,
	                STATUS=>#dwSetStatus,
	                OUTPUTS:=#arOutputData);
	
	
END_FUNCTION_BLOCK

 

Modificato: da pigroplc
aggiunta del codice
Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...