Vai al contenuto
PLC Forum


Librerie Tia Portal


Giuseppe Micieli

Messaggi consigliati

Giuseppe Micieli

Ciao a tutti

 

vi pongo un quesito probabilmente stupido.......ho bisogno di far comunicare du plc con tcp/ip modbus ed fin qua niente di strano , il problema e' che in tia portal non ho tutte le librerie disponibili come su step , ed a me per fare cio'mi servirebbe dei convertitori  "bool to word" e vicerversa ma sinceramente li ho aperti tutti ma non li trovo.....quindi qualcuno sa se ci sono delle librerie in giro o se si possono integrare con quelle di step 7. 

Link al commento
Condividi su altri siti


te la puoi creare facilmente con l'istruzione di overlay chiamata "at".

Dammi 5 minuti che te la metto giù

 

ti fai una sorgente scl copy-paste di sotto. 

 

L'utilizzo di tale codice implica l'implicita esclusione da qualsiasi responsabilità del sottoscritto nel caoso di danni di qualsiasi tipo o natura 

FUNCTION "ImpacchettareBit" : Void
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : pigroplc
VERSION : 0.1
   VAR_INPUT 
      In15 : Bool;
      In14 : Bool;
      In13 : Bool;
      In12 : Bool;
      In11 : Bool;
      In10 : Bool;
      In9 : Bool;
      In8 : Bool;
      In7 : Bool;
      In6 : Bool;
      In5 : Bool;
      In4 : Bool;
      In3 : Bool;
      In2 : Bool;
      In1 : Bool;
      In0 : Bool;
   END_VAR

   VAR_OUTPUT 
      MyWordOutput : Word;
   END_VAR

   VAR_TEMP 
      MyWordInput_interno : Word;
      ProvareInput AT MyWordInput_interno : Array[0..15] of Bool;
      MyWordOutput_interno : Word;
      ProvareOutput AT MyWordOutput_interno : Array[0..15] of Bool;
   END_VAR


BEGIN
	(*
	Impacchetta i bit utilizzando la sovrapposizione variabili con AT 
	La funzione AT è possibile nella FC solamente se non è flaggato l'accesso ottimizzato al blocco
	*)
	
	(*
	formare la word
	*)
	#ProvareInput[0] := #In0;
	#ProvareInput[1] := #In1;
	#ProvareInput[2] := #In2;
	#ProvareInput[3] := #In3;
	#ProvareInput[4] := #In4;
	#ProvareInput[5] := #In5;
	#ProvareInput[6] := #In6;
	#ProvareInput[7] := #In7;
	#ProvareInput[8] := #In8;
	#ProvareInput[9] := #In9;
	#ProvareInput[10] := #In10;
	#ProvareInput[11] := #In11;
	#ProvareInput[12] := #In12;
	#ProvareInput[13] := #In13;
	#ProvareInput[14] := #In14;
	#ProvareInput[15] := #In15;
	(*
	copiare la word interna di ingresso nella word interna di uscita. Praticamente questo passaggio potrebbe essere una funzione mask di bit
	oppure altre operazioni matematiche. Così serve a nulla.
	*)
	#MyWordOutput_interno:=#MyWordInput_interno;
	(*
	copiare la word interna nel parametro di uscita. 
	*)
	#MyWordOutput := #MyWordOutput_interno;
	
END_FUNCTION

 

Modificato: da pigroplc
Link al commento
Condividi su altri siti

Ti puoi creare una funzione come suggerito da "Pigroplc" o, forse ancora più semplice, sfruttando la sintassi "miaWord.%x..."

 

esempio:

 

miaWord.%x0 := In0;

miaWord.%x1 := In1;

...

...

miaWord.%x15 := In15;

 

Link al commento
Condividi su altri siti

3 ore fa, batta scrisse:

o, forse ancora più semplice, sfruttando la sintassi "miaWord.%x...

.... da quando ho scoperto la funzione AT la metterei anche nel minestrone! 😂

Link al commento
Condividi su altri siti

Quote

.... da quando ho scoperto la funzione AT la metterei anche nel minestrone!

Io la usavo di più in passato. Ho iniziato ad abbandonarla quando ho scoperto Scatter e Gather.
La sovrapposizione con AT in realtà è molto più comoda dell'uso di Scatter e Gather: basta dichiarare le variabili, e non si deve scrivere una riga di codice. 
Mi dà però un po' fastidio il fatto che si possa sfruttare solo nei blocchi "non ottimizzati", oppure nei blocchi ottimizzati ma con "ritenzione impostata nel'IDB" (quindi esclude l'uso nelle FC non ottimizzate e nell'area TEMP anche nelle FB, sempre non ottimizzate).

Direi però che questo è uno dei casi più classici in cui non c'è un modo migliore dell'altro, ma è una semplice questione di gusti personali.

Modificato: da batta
Link al commento
Condividi su altri siti

12 minuti fa, batta scrisse:

quando ho scoperto Scatter e Gather.

per ora sto provando un impianto con Simotion e non ho tempo ma il prossimo è col 1500, mi hai messo curiosità. Non so ancora per cosa perché il codice è oramai terminato, ma mi inventerò sicuramente qualcosa per far delle prove.... 😁

Link al commento
Condividi su altri siti

Quote

ma mi inventerò sicuramente qualcosa per far delle prove....

Sei pazzo? 😂
Se funziona, non toccare nulla! Minimo, rischi di trovarti nei casini con lo scambio dei byte.
Casomai, ci puoi pensare per il prossimo lavoro. Poi non è detto che la nuova strada ti piaccia più di quella vecchia.

Link al commento
Condividi su altri siti

il 5/2/2019 at 13:04 , batta scrisse:

Sei pazzo? 😂
Se funziona, non toccare nulla!

 

😁😁😁 L'esperienza mi ha suggerito di non toccare le cose che funzionano e che il software ben fatto è come il maiale che non si butta via nulla..... 

Quando marcisco ore dal cliente a verificare che la produzione funziona oppure negli aeroporti in attesa di voli e coincidenze mi invento sempre delle funzioncine che per la maggior parte delle volte servono a poco o niente, altre volte invece "rivendo" nel forum qualora ci siano esplicite richieste, quindi SCATTER e GHATER saranno la mia "settimana enigmistica" qui a Doha.

Link al commento
Condividi su altri siti

Non si vede cosa c'è scritto prima, ma c'è qualcosa che non quadra.

Prima di tutto, scrivi lo stato del RLC (risultato logico), su ingressi. Ma questo non influenza minimamente il valore che verrà scritto in "OUT", che dipende dal contenuto dell'accumulatore, e che non vediamo dove viene impostato.

Mi sa che stai facendo un bel po' di confusione.

Link al commento
Condividi su altri siti

Giuseppe Micieli

Si..... Sto facendo un po' di tentativi

Il problema è che non sono tanto pratico con siemens... Ho usato Schneider.... Ma volevo sperimentare con siemens.. Perché ne ho uno sottomano. 

 

 

 

 

Link al commento
Condividi su altri siti

Scusate ragazzi ho provato a mettere AT sul tipo dati ma non sono riuscito a fare come nel video. Io utilizzo 1500 con tia portal 14.

Cosa posso fare di sbagliato?

 

 

Link al commento
Condividi su altri siti

Giuseppe Micieli

ciao

 

ho fatto un po' un copia e incolla dei vostri suggerimenti

 

quindi  prima creo 

1  MB CLIENT per indirizzare, 

2 SCATTER per convertire la word in bit (bool)

3 con l'uscita dello SCATTER  creo una di db di array  (bool)

vi convince cosi ?

 

client.JPG

scatter.JPG

array.JPG

Link al commento
Condividi su altri siti

Quote

Scusate ragazzi ho provato a mettere AT sul tipo dati ma non sono riuscito a fare come nel video. Io utilizzo 1500 con tia portal 14.

Cosa posso fare di sbagliato?

Il blocco deve essere "Non Ottimizzato".
Nella guida in linea del TIA, ti basta cercare "sovrapposizione con at", e trovi tutte le spiegazioni.

Link al commento
Condividi su altri siti

Quote

con l'uscita dello SCATTER  creo una di db di array  (bool)

Non puoi collegare all'uscita di "Scatter" un bit (infatti te lo segna in rosso). Devi collegare un array di bool (oppure una struttura di bool) della stessa dimensione della variabile in ingresso.
Con Siemens abituati a non usare i merker, ma i DB. In un DB ti crei una struttura di bool, e la colleghi all'uscita di Scatter.
Se lo vuoi fare con i merker, devi crearti un "Tipo di dati" (sempre del numero corretto di bool) e, nella tabella dei simboli, dichiarare nella colonna "Tipo", al posto di Bool, il tipo di dati da te creato.

Link al commento
Condividi su altri siti

6 ore fa, STEU scrisse:

ho provato a mettere AT sul tipo dati ma non sono riuscito

esempio: definisci una variabile word nelle variabili interne e nella riga successiva definisci un'altra variabile dove per default prenderebbe word tu scrivi AT e dai invio.
nella colonna del nome prende la dichiarazione AT 'NomeDellaVariabilePrecedente" tipo word. 

Gli cambi da "word" a "Array[0..15] of Bool" e il gioco è fatto.

Era questo il tuo problema????

 

Link al commento
Condividi su altri siti

Giuseppe Micieli
10 ore fa, batta scrisse:

Non puoi collegare all'uscita di "Scatter" un bit (infatti te lo segna in rosso). Devi collegare un array di bool (oppure una struttura di bool) della stessa dimensione della variabile in ingresso.
Con Siemens abituati a non usare i merker, ma i DB. In un DB ti crei una struttura di bool, e la colleghi all'uscita di Scatter.
Se lo vuoi fare con i merker, devi crearti un "Tipo di dati" (sempre del numero corretto di bool) e, nella tabella dei simboli, dichiarare nella colonna "Tipo", al posto di Bool, il tipo di dati da te creato.

Batta si scusami quando ho fatto lo screen  non avevo ancora definito.... Ora proverò come dici tu a creare la dB anziché un Merkel..... Mq è proprio vero che cambiando plc cambia il modo di programmare... Probabilmente usando Schneider certi passaggi non mi entrano in testa perché  ha un altro concetto 

 

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...