Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Puntare Una Db - Come caricare 2 DBW da una DB


Messaggi consigliati

Inserito:

Ciao a tutti,

la mia domanda e' questa:

Utilizzo il PLC S7-300;

tramite una variabile utilizzata come puntatore (es.MW10) devo caricare e trasferire ad una MW appoggio (es.MW12) il valore scritto all'interno di una DBW (es.DB10.DBW2).

Esempio:

-Con il valore 1 della MW10 devo trasferire all'interno della MW12 il dato presente nella DB10.DBW2;

-Con il valore 2 della MW10 devo trasferire all'interno della MW12 il dato presente nella DB10.DBW4;

-Con il valore 3 della MW10 devo trasferire all'interno della MW12 il dato presente nella DB11.DBW2;

-Con il valore 4 della MW10 devo trasferire all'interno della MW12 il dato presente nella DB11.DBW4;

-Con il valore 5 della MW10 devo trasferire all'interno della MW12 il dato presente nella DB12.DBW2;

-Con il valore 6 della MW10 devo trasferire all'interno della MW12 il dato presente nella DB12.DBW4;

ecc.

Ciao e grazie


Inserita:

Puoi utilizzare gli script che ti permettonono di creare piccole funzioni VB, ed in base al valore 1, 2,3,4 ecc vai a indirizzare la variabile

prova poi mi sai dire

Matteo Montanari
Inserita: (modificato)

visto che i dati non sono sequenziali, cambi il numero del blocco dati ogni due, non puoi fare la tua funzione con un puntatore classico.

ti consiglio di utilizzare la funzione SPL

  
       L       MW10
       SPL   0099
       SPA   0001                        // DB10.DBW2
       SPA   0002                        // DB10.DBW4
       SPA   0003                        // DB11.DBW2
       SPA   0004                        // DB11.DBW4
       SPA   0005                        // DB12.DBW2
       SPA   0006                        // DB12.DBW4
       SPA   0099                        // 
0099: SPA   9999
//;
0001:L        DB10.DBW2
      T        MW12
      SPA   9999
//;
0002:L        DB10.DBW4
      T        MW12
      SPA   9999
//;
0003:L        DB11.DBW2
      T        MW12
      SPA   9999
//;
0004:L        DB11.DBW4
      T        MW12
      SPA   9999
//;
0005:L        DB12.DBW2
      T        MW12
      SPA   9999
//;
0006:L        DB12.DBW4
      T        MW12
      SPA   9999
//;
9999:BE

Oppure in alternativa utilizzare due puntatori, uno per il blocco dati ed uno per il dato da puntare.

in questo caso devi sviluppare il calcolo a livello matematico, scomporre il numero presente nel MW10 in modo tale da poter utilizzare il "pari" o "dipsari" per puntare DBW2 o DBW4 (cifra meno significativa = 0 -> pari, = 1 -> dispari) ed il resto del numero per il "puntamento del blocco dati.

per scegliere l'una o l'altra soluzione dipende dalla quantità di dati che devi "spostare", e da quanto vuoi rendere compensibile (o meno) il programma.

Modificato: da keosmm
Matteo Montanari
Inserita:
Puoi utilizzare gli script che ti permettonono di creare piccole funzioni VB, ed in base al valore 1, 2,3,4 ecc vai a indirizzare la variabile

prova poi mi sai dire

nel PLC?

e come si fa?

prova a mettere un piccolo esempio per favore...

Inserita:

....un pò di codice

L MW10

ITD

T #MW10_ DINT //CONVERSIONE DI MW10 IN VAR DINT INTERFACCIA AMBIENTE

L L#2 //PASSO TABELLA 2 BYTES(SI DEVE PUNTARE UNA DBW)

*D

L L#0

+D // PUNTATORE INDIRIZZO INIZIALE DELLA TABELLA(IN QUESTO CASO DBW0)

T #MW10_DINT

SLD3

T #MW10DINT //CONTIENE ,AL VARIARE DI MW10, L'INDIRIZZO DELLA DBW DA

// DA PUNTARE

L MW12 // CONTIENE IL VALORE DA TRASFERIRE

AUF DB_LAVORO // APRE LA DB DI LAVORO

T DBW[MW10_DINT] //SCRIVE IL VALORE DI MW12 NELLA DBW CHE ABBIAMO

//PUNTATO

SALUTI!!!!

Inserita:

Ciao Bruno,

io ho fatto qualcosa del genere ma non ricordo bene.

Per la variabile di appoggio io ho utilizzato una MD.

Prova così.

L MD10 // VALORE DI APPOGGIO PER PUNTATORE es:12

L AR1 // IMPOSTO IL PUNTATORE

AUF DB10 //APRO IL BLOCCO DATI CHE MI INTERESSA

L DBW [AR1,P#0.0] // CARICO LA DW12

T MW 12

Inserita:

HO LETTO MALE......

AGGIORNO.....

L MW10

ITD

T #MW10_ DINT //CONVERSIONE DI MW10 IN VAR DINT INTERFACCIA AMBIENTE

L L#2 //PASSO TABELLA 2 BYTES(SI DEVE PUNTARE UNA DBW)

*D

L L#0

+D // PUNTATORE INDIRIZZO INIZIALE DELLA TABELLA(IN QUESTO CASO DBW0)

T #MW10_DINT

SLD3

T #MW10DINT //CONTIENE ,AL VARIARE DI MW10, L'INDIRIZZO DELLA DBW DA

// DA PUNTARE

AUF DB_LAVORO // APRE LA DB DI LAVORO

L DBW[MW10_DINT] // CARICA IL VALORE DA TRASFERIRE

T MW 12 //TRASFERISCE IL VALORE

AMEN!!!!!

Matteo Montanari
Inserita:

L MW10

ITD (puoi evitare di metterlo)

T #MW10_ DINT (puoi evitare di metterlo)

L L#2 //PASSO TABELLA 2 BYTES(SI DEVE PUNTARE UNA DBW)

*D

L L#0 ??? valore di offset non 0 ma 2 in quanto si parte dalla DBW2 e non dalla DW0

+D // PUNTATORE INDIRIZZO INIZIALE DELLA TABELLA(IN QUESTO CASO DBW0)

T #MW10_DINT (puoi evitare di metterlo)

SLD3

T #MW10_DINT //CONTIENE ,AL VARIARE DI MW10, L'INDIRIZZO DELLA DBW DA

// DA PUNTARE

AUF DB_LAVORO // APRE LA DB DI LAVORO

L DBW[MW10_DINT] // CARICA IL VALORE DA TRASFERIRE

T MW 12 //TRASFERISCE IL VALORE

quindi togliendo parti "inutili"

L MW10

L L#2 //PASSO TABELLA 2 BYTES(SI DEVE PUNTARE UNA DBW)

*D

L L#2

+D // PUNTATORE INDIRIZZO INIZIALE DELLA TABELLA(IN QUESTO CASO DBW0)

SLD3

T #MW10_DINT //CONTIENE ,AL VARIARE DI MW10, L'INDIRIZZO DELLA DBW DA

// DA PUNTARE

AUF DB_LAVORO // APRE LA DB DI LAVORO

L DBW[MW10_DINT] // CARICA IL VALORE DA TRASFERIRE

T MW 12 //TRASFERISCE IL VALORE

la mia domanda/osservazione è comunque questa,

se non cambio il numero del blocco dato (DB_LAVORO) io vado a puntare sempre i valori nell'unico DB.

cosa succede se nella tua funzione inseriamo il numero "3"

analiziamo:

L 3 (MW10)

L L#2 //PASSO TABELLA 2 BYTES(SI DEVE PUNTARE UNA DBW)

*D

(6)

L L#2

+D // PUNTATORE INDIRIZZO INIZIALE DELLA TABELLA(IN QUESTO CASO DBW0)

(8)

SLD3

T #MW10_DINT //CONTIENE ,AL VARIARE DI MW10,

8 = 1000 -> SLD 3 -> 64 = 1000000

in questo caso punta il DBW8 della db DB_LAVORO, mentre dovrebbe puntare:

-Con il valore 3 della MW10 devo trasferire all'interno della MW12 il dato presente nella DB11.DBW2;

se togliamo L L#2 e riportamo L L#0, puntiamo il DBW6 e non comunque il DBW2...

come ho già detto nella mia prima risposta:

visto che i dati non sono sequenziali, cambi il numero del blocco dati ogni due, non puoi fare la tua funzione con un puntatore classico.
Matteo Montanari
Inserita:

per risolvere il problema, non utilizzando il suggerimento precedentemente proposto puoi seguire questo codice...

// Confronto della varibiale in ingresso, elaborazione solo se maggiore di "0"
      L     MW    10
      L     0
      <=I   
      BEB   
in questo caso specifico segue le tue indicazioni:
DBW2 con numero dispari 
DBW4 con numero pari
DB10 con 1 e 2
DB11 con 3 e 4
DB12 con 5 e 6
...
DB15 con 10 e 11
// richiamo della variabile in ingresso (MW10)
      TAK   
      L     1
      -I    
      L     2
      /I    
      L     10
      +I    
      T     #Puntatore2 // creazione del puntatore blocco dati, [word]
//;
// creazione del dato (2 o 4) a seconda del numero (dispari o pari)

      U     M     11.0
      L     L#2
      SPB   _000
//;
      L     L#4
_000: SLD   3
      T     #Puntatore1
//;
      AUF   DB [#Puntatore2]
//;
      L     DBW [#Puntatore1]
      T     MW    12

buon lavoro

Inserita:

Chiedo scusa per la mia errata risposta, ho interpretato o letto male il messaggio,

pensavo che col pannello si volesse scrivere sul plc

perdonatemi

Inserita:

Ti propongo questa soluzione che è meno elegante di quella suggerita da Keosmm ma anch'essa funzionale.

Il codice per completezza è estratto da file sorgente

La routine di riferimento è FB66.

TYPE UDT 1

VERSION : 0.1

STRUCT

TEST0 : INT ;

TEST01 : INT ;

TEST02 : INT ;

TEST03 : INT ;

TEST04 : INT ;

TEST05 : INT ;

TEST06 : INT ;

TEST07 : INT ;

TEST08 : INT ;

TEST09 : INT ;

TEST010 : INT ;

END_STRUCT ;

END_TYPE

DATA_BLOCK "PASSO_1-2"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_3-4"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_5-6"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_7-8"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_9-10"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_11-12"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_13-14"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_15-16"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_17-18"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_19-20"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

DATA_BLOCK "PASSO_21-22"

TITLE =

VERSION : 0.1

UDT 1

BEGIN

TEST0 := 0;

TEST01 := 0;

TEST02 := 0;

TEST03 := 0;

TEST04 := 0;

TEST05 := 0;

TEST06 := 0;

TEST07 := 0;

TEST08 := 0;

TEST09 := 0;

TEST010 := 0;

END_DATA_BLOCK

FUNCTION_BLOCK FB 66

TITLE =FUNZIONE TRANSFER DATA DA N_DB SORGENTI SENZA POINTER

AUTHOR : ANDREA_S

FAMILY : 'POINTER'

NAME : RT_POINT

VERSION : 0.1

VAR_INPUT

PASSO : INT ; //NUMERO DEL PASSO ATTUALE

DB_SORGENTE_START : INT ;

DB_MAX : INT ;

END_VAR

VAR_OUTPUT

VALORE_DEPOSITATO : INT ;

DB_PRELIEVO_DATI : INT ;

IND_WORD_DEPOSITO : INT ;

VALORE_CORRENTE : INT ;

END_VAR

VAR

PASSO_DISPARI : BOOL ;

K : INT ;

END_VAR

VAR_TEMP

DB_SORGENTE : INT ;

END_VAR

BEGIN

NETWORK

TITLE =VALUTAZIONE PARI DISPARI

//SEZIONE_1: VERIFICA IL PASSO

//SEZIONE_2: ABILITAZIONE DEL BIT "DISPARI"

//SEZIONE_1

SET ;

L #PASSO;

L 0;

<=I ;

SPB FINE;

//SEZIONE_2

SET ;

L #PASSO;

L 2;

/I ;

SRD 16;

L 0;

>I ;

= #PASSO_DISPARI;

SET ;

NETWORK

TITLE =VALUTAZIONE COSTANTE "K" PER CALCOLO DEL DB SORGENTE

L #DB_SORGENTE_START;

L 2;

*I ;

T #K;

NETWORK

TITLE =VALUTAZIONE DEL DB SORGENTE

//SEZIONE_1: PER PASSO PARI

//SEZIONE_2: PER PASSO DISPARI

//SEZIONE_1

U #PASSO_DISPARI;

SPB DISP;

SET ;

L #PASSO;

L #K;

+I ;

L 2;

/I ;

L 1;

-I ;

T #DB_SORGENTE;

SPA GO1;

//SEZIONE_2

DISP: L #PASSO;

L #K;

+I ;

L 1;

+I ;

L 2;

/I ;

L 1;

-I ;

T #DB_SORGENTE;

SET ;

NETWORK

TITLE =VERIFICA SUPERAMENTO N° DB SORGENTE

GO1: L #DB_SORGENTE;

L #DB_MAX;

>I ;

SPB FINE;

NETWORK

TITLE =TRASFERIMENTO DATI E VISUALIZZAZIONE VALORE E INDIRIZZO

AUF DB [#DB_SORGENTE];

U #PASSO_DISPARI;

SPB GO2;

L DBW 4;

T #VALORE_CORRENTE;

T #VALORE_DEPOSITATO;

L 4;

T #IND_WORD_DEPOSITO;

L #DB_SORGENTE;

T #DB_PRELIEVO_DATI;

SPA FINE;

GO2: L DBW 2;

T #VALORE_CORRENTE;

T #VALORE_DEPOSITATO;

L 2;

T #IND_WORD_DEPOSITO;

L #DB_SORGENTE;

T #DB_PRELIEVO_DATI;

SPA FINE;

NETWORK

TITLE =

FINE: BEA ;

END_FUNCTION_BLOCK

DATA_BLOCK DB 66

TITLE =

AUTHOR : ANDREA_S

FAMILY : 'POINTER'

VERSION : 0.0

FB 66

BEGIN

PASSO := 0;

DB_SORGENTE_START := 0;

DB_MAX := 0;

VALORE_DEPOSITATO := 0;

DB_PRELIEVO_DATI := 0;

IND_WORD_DEPOSITO := 0;

VALORE_CORRENTE := 0;

PASSO_DISPARI := FALSE;

K := 0;

END_DATA_BLOCK

ORGANIZATION_BLOCK OB 1

TITLE =

VERSION : 0.1

VAR_TEMP

OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)

OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)

OB1_PRIORITY : BYTE ; //Priority of OB Execution

OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)

OB1_RESERVED_1 : BYTE ; //Reserved for system

OB1_RESERVED_2 : BYTE ; //Reserved for system

OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)

OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)

OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)

OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started

END_VAR

BEGIN

NETWORK

TITLE =TRANSFER DATA FROM DB TO MW

CALL FB 66 , DB 66 (

PASSO := "MW10",

DB_SORGENTE_START := 14,// DA QUALE DB SI INIZIA A INTERROGARE

DB_MAX := 20,// IL N° DEL DB + ALTO DA INTERROGARE

VALORE_DEPOSITATO := "MW102",

DB_PRELIEVO_DATI := "MW104",

IND_WORD_DEPOSITO := "MW106",

VALORE_CORRENTE := "MW12");

END_ORGANIZATION_BLOCK

Buon lavoro

Matteo Montanari
Inserita:
questa soluzione che è meno elegante

penso che non esistano soluzioni eleganti, meno eleganti, non eleganti.

ma soluzioni funzionali e soluzioni non funzionali (che non sono soluzioni ma nuovi problemi).

penso che la soluzione più funzionale di tutte sia quella di utilizzare solo un bit:

il mio vecchio "capo", che è stato il mio mentore, mi ha svezzato in questo magnifico mondo (ed io non l'ho mai ringraziato per questo) diceva sempre:

"la soluzione più efficente è quella con meno cose da controllare..."

Ciao Luca e Grazie ancora

Inserita:

Concordo con Te Keosmm, il Tuo capo è senza dubbio persona saggia

Ti saluto e grazie a Te

Inserita:

concordo con Keosmm, ed a tal proposito secondo me una soluzione semplice non ci sia, funzionale sì, ma semplice.....

Secondo me il problema nasce da un'area dati non ottimizzata, da un'area dati non pensata per essere sfruttata al meglio.

Ma il codice di keosmm risolve nella maniera più semplice il problema proposto.

Mi permetto di dire e scusatemi:

Andrea_S, la tua soluzione funzionerà sicuramente, ma chiamarla 'non elegante' è un eufemismo. Dopo che Keosmm ha postato la soluzione ottimale al problema, ridotta ai minimi termini e comprensibile, tutti dovrebbero utilizzare questa e buttare via tutto il resto. Cioè "il mondo termina con keosmm" !!

Io sarò un po' forte nei giudizi, però la tua soluzione è una schifezza e spreca un sacco di memoria.

Mi domando da dove l'hai tirata fuori; sicuramente l'avevi già da qualche parte e l'hai adattata al caso specifico, perchè se te la sei studiata per il quesito proposto qui, perdonami, ma sei un pazzo!

Inserita:

Sono qui per imparare e non per insegnare e quindi il Tuo giudizio è ben accetto,

Ti saluto rddiego

Matteo Montanari
Inserita:
Io sarò un po' forte nei giudizi, però la tua soluzione è una schifezza e spreca un sacco di memoria.

si, sei sicuramente un pò forte nei giudizi...

Sono qui per imparare e non per insegnare

penso che se una persona voglia mettersi in cattedra, questo non è il forum giusto.

io penso che tutti debbano imparare qualcosa, quelli che sanno tutto sicuramente l'umiltà. (è un discorso generale, senza nessun riferimento a questo o quello)

quindi Andrea_S stai tranquillo, per oggi hai schivato sia la gogna che stare dietro la lavagna con il cappello a punta...

Matteo Montanari
Inserita: (modificato)
il Tuo capo è senza dubbio persona saggia

anche un rompiba**e, ma è il lavoro di tutti i "capi" (non quello di essere persone saggie :P )

Modificato: da keosmm
Inserita:

keosmm oltre che a essere molto bravo sei anche simpatico

p.s

non capisco una parte del Tuo codice... ci rifletto un po' e poi se Ti sembra il caso mi dai qualche info in merito

Ti saluto :)

Matteo Montanari
Inserita:
non capisco una parte del Tuo codice... ci rifletto un po' e poi se Ti sembra il caso mi dai qualche info in merito

nessun problema

Inserita:

ok Keosmm, ho analizzato il codice è ora è tutto chiaro... :D

Grazie comunque per la disponibilità da Te anticipata

Ti saluto Keosmm

Matteo Montanari
Inserita:

meglio così, in caso comunque sono sempre qui...

(era il TAK ?)

Inserita:

La parte di calcolo del numero del DB da puntare appena sotto il Tak non l'ho colta subito, il Tak è per riprendere il valore in MW10....

a presto

Matteo Montanari
Inserita:

ho dovuto frlo in quel modo per rispettare "le specifiche". anche perchè altri metodi più "spicci" non c'è nè sono.

magari per semplificare puoi mettere dopo ogni operazione il trasferimento del risultato (come è fatto in altri esempi) ma se "semplifica" la comprensione da parte del programmatore, al PLC non interessa.

stesso discorso nell'utilizzo delle DB...

se scrivo

U DB1.DBX0.0

UN DB1.DBX0.1

...

riesco a vedere il simbolico nel programma e mi riesce facile comprenderlo

ma per il PLC è più semplice (e più veloce) scrivere:

AUF DB1

U DBX0.0

UN DBX0.1

Scrivere tutto un programma così fai senza "proteggerlo"...

Inserita:

Ciao ragazzi,

grazie alle vostre informazioni sono riuscito a risolvere il problema.

Inserita:

Ciao a tutti

Scusino, sono stato un po' occupato, e non ho potuto visitare spesso il forum...

Ritornando al tema principale

Credo che io il codice lo farebbe così:

L MW 10

L 0

<=I

BEB

TAK

+ -1

L 16

*I

+ 16

LAR1

AUF DB 10

L MW 12

T DBW [AR1,P#0.0]

BE

:blink:

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