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




Istruzione Tnb


Messaggi consigliati

Inserito:

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.


Inserita: (modificato)

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
Inserita: (modificato)

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
Inserita:

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.

Inserita:

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

Inserita:

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

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