Vai al contenuto
PLC Forum


Istruzione Tnb


Colonial54

Messaggi consigliati

Salve a tutti

Ho dovuto convertire un sw da S5 a S7;

Mi trovo a dovere gestire dei trasferimenti DB-DB tramite l'struzione TNB;

Apparentemente trasferisce 40 word (80 byte S7) da DB6 a DB56;

Ovviamante devo tradurlo in S7; quello che non mi e' chiaro e' l'offset del'inizio trasferimento;

Posto il codice:

L KH400 //Indirizzo DB0

L KF+12 //Offset per DB6

+F

LIR 0 //Carica forse il valore precedente in qualche registro?

ADD KF +59 //???

T MW240

L KH400 //Indirizzo DB0

L KF+112 //Offset per DB56

+F

LIR 0 // ???

ADD KF +59 //Boh?

L MW240

TNB 40 //Trasferisce pacchetto di 40 word

Le istruzioni LIR 0 e il valore KF59 non mi sono chiari per niente;

Qualcuno sa come decrittare questo codice?

Ringrazio anticipatamente.

Link al commento
Condividi su altri siti


In questo manuale trovi spiegazioni su LIR/TIR/TNW/TNB

https://support.industry.siemens.com/cs/document/1085940?dti=0&lc=en-WW

Io non le ho mai usate non ne ho sentito il bisogno, sono comunque istruzioni che permettono di agire liberamente su qualsiasi locazione di memoria del PLC, se non erro era possibile anche modificare istruzioni del programma e renderlo illeggibile da eventuali upload pur mantenendo il corretto funzionamento.

Modificato: da JumpMan
Link al commento
Condividi su altri siti

Bisogna specificare alcune cose:

nei PLC S5 esisteva una locazione di memoria che era funzione del tipo di CPU dove venivano aggiornati gli indirizzi di partenza di tutte le DB presenti nell'applicativo.

infatti LIR 0 significa "carica il valore della cella di memoria indirizzata nell'accumulatore 1" cioè hai l'indirizzo di partenza della DB 6. Infatti se sovrascrivi la DB 6 il valore nella MW 240 lo troverai cambiato.

L'addizione del puntatore 59 vuol dire che vai a fondo del pacchetto e poi trasferisci i 40 bytes precedenti.

Sto andando a braccio, sono oramai più di 20 anni che non tocco più questa roba....... ma a me sembra che vada a copiare dalla 59 word (oppure byte non ricordo) per i precedenti 40 bytes).

non mi ricordo quale tipo di CPU partiva dall'indirizzo esadecimale 400 a mappare le DB (veniva chiamata infatti DB0 da non confondere con l'indicizzazione della aperture delle DB). Era per caso il 115U?

Modificato: da pigroplc
Link al commento
Condividi su altri siti

Si, una 115 CPU943B;

Quindi siccome TNB trasferisce partendo dal fondo, 59 e' dove effettuo il primo trasferimento, poi gli altri a scalare per 40 word, fino a 19.

O sbaglio?

Il vero problema e' che si tratta di un programma che e' stato modificato da una schiera di programmatori, e quasi nessuno ha mai sentito la necessita' di inserire ne una riga di commento e in molti casi non hanno neppure definito i simbolici.

Link al commento
Condividi su altri siti

La maggior parte delle volte l'istruzione TNB , serviva per trasferire in una particolare locazione di memoria il tempo base di interrup per l'OB a tempo della CPU, Esempio se scrivi 20 nella locazione giusta l'OB ad interrup (che non ricorda quale è) viene richiamato ogni 20 msec. (Un utilizzo tipico era la lettura delle schede analogiche IP)

Chiaramente può essere utilizzato anche per altre cose, però è veramente passato tanto tempo che dovrei andare a rileggere il manuale del 115, che è nel link di Jump man a pag 390 del PDF

Link al commento
Condividi su altri siti

SI hai capito bene.

Praticamente viene utilizzata come l'equivalente della SFC20 Blockmove solo che il puntatore è diverso.

Io la utilizzavo per operazioni di trasferimento ricette, aggiornamento informazioni dei bancali nel magazzino automatico (quando facevo magazzini) ecc.

Bei tempi ......

Siccome TNB trasferisce partendo dal fondo ......

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