Vai al contenuto
PLC Forum


Puntatori


cliche1995

Messaggi consigliati

Salve a tutti stò provando ad imbattermi nei puntatori, seguendo una guida qui sul forum ho provato a creare un UDT chiamato area per un'area di un quadrato dove all'interno ci metto:

BASE INT

ALTEZZA INT

AREA INT

poi ho creato una db chiamata contenitore dove all'interno ci metto un array [1..5]

L "contenitore".area[1].base db150.dbw0
L "contenitore".area[1].altezza db150.dbw2
*I
T "contenitore".area[1].area db150.dbw4
L "contenitore".area[2].base db150.dbw6
L "contenitore".area[2].altezza db150.dbw8
*I
T "contenitore".area[2].area db150.dbw10
L "contenitore".area[3].base db150.dbw12
L "contenitore".area[3].altezza db150.dbw14
*I
T "contenitore".area[3].area db150.dbw16
L "contenitore".area[4].base db150.dbw18
L "contenitore".area[4].altezza db150.dbw20
*I
T "contenitore".area[4].area db150.dbw22
L "contenitore".area[5].base db150.dbw24
L "contenitore".area[5].altezza db150.dbw26
*I
T "contenitore".area[5].area db150.dbw28
il problema è che seguendo la guida per esempio se voglio puntare all'elemento 2 si fa: (2-1)* 6=6 (6 è la word di inizio di area2),
se io volessi puntare all'elemento 5 dovrei fare (5-1)*24? o.O?
allora ho provato ad inserire il programma che ho trovato sulla guida che sarebbe questo:
L 2
T MW 100
L MW 100
+ -1
L L#6
*D
SLD 3
LAR1
L DBW [AR1,P#0.0]
L DBW [AR1,P#0.2]
/I
T DBW [AR1,P#4.0]
ma nel mettere la cpu in run mi da errore e va in stop. un'altra domanda, come mai alla fine nella guida mi fa trasferire dbw[ar1,p#4.0]? perchè 4.0?
scusate se ho sbagliato a postare il listato
Link al commento
Condividi su altri siti


Ciao, l'errore si trova nella terzultima riga non è L DBW [AR1,P#0.2] ma L DBW [AR1,P#2.0].

se io volessi puntare all'elemento 5 dovrei fare (5-1)*24? o.O?

Devi sempre lasciare 6 come fattore di moltiplicazione (5-1)*6=24, cioè l'inizio dei dati per calcolare la quinta area

come mai alla fine nella guida mi fa trasferire dbw[ar1,p#4.0]? perchè 4.0?

Perchè è dove devi andate a scrivere "contenitore".area[n.].area nel caso dell'elemento 5 sarà 24 + 4 cioè punterai alla dbw28.

Link al commento
Condividi su altri siti

Ah adesso ho capito ti ringrazio, posso chiederti un'ultima cosa? Vorrei sapere per esempio dove si potrebbero applicare questi puntatori (esempio pratico)

Link al commento
Condividi su altri siti

non serve awl

Dipende, se nella vita pensi solo di dover creare programmi da 0, a tuo piacimento, allora imparare l'awl non serve.

Ma se pensi di dover metter mano a macchine non sviluppate da te, cosa che credo capiti prima o poi, sapere l'awl

ti sarà senz'altro utile, se non indispensabile.

Questo nulla toglie al suggerimento di Walterword.

impara SCL

Link al commento
Condividi su altri siti

no serve a nulla awl quando c'e' SCL .

Ladder per le logiche principali e scl per la manipolazione dati , calcoli ect

Awl serve solo se per obbligo devi trattare formati di dati particolari ma senza puntatori

La peggior implementazione dell'indirizzamento indiretto che potevano mai inventare si chiama puntatori in awl ....P# , auf , non servono siamo nel 2014 e le cpu sono veloci oltre al fatto che la compilazione e' ultra ottimizzata


per le macchien non sviluppate da te , se si tratta di calcoli o lavorare su tabelle , matrici ect , fai prima a capire cosa devi fare e scrivere in scl il pezzo di codice ed integrarlo in quello esistente .

Se invece tutot il codice , come mi e' succeso di vedere , e' tutto un puntatore o piu puntatori che diventi pazzo per capire dopo 20 righe a cosa sta puntando il registro principale della cpu conviene rifare tutto in ladder ed scl , minor tempo , minor costo e manutenibilità assicurata ;)

Link al commento
Condividi su altri siti

Walterword, tu forse usi cpu di ultima generazione, ma se devi fare una modifica su una vecchia cpu che è già strapiena usare scl ti genera un mucchio di codice in più rispetto a farlo in awl, mi sono scontrato spesso con problemi di memoria insufficiente causa cpu vecchie. Se hai tempo e voglia prova a buttare giu del codice scl per la soluzione del problema in quest altra discussione dove sono bastate 14 istruzioni awl

Link al commento
Condividi su altri siti

secondo il mio modesto parere , in 15 anni di arte e mestiere ho portato a termine diversi impianti di modeste dimensioni tipo 2500-3000 I/O , dove si lavora in gruppo , un programmatore russo l'altro indiano , l'altro di genova un'altro di milano , l'hmi lo sviluppa la ingegnera iraniana , i cablaggi li segue l'ingegnera turca i cinese ....posso dirti quanto segue in ambito siemens

COn s7 ho lavorato , mangiato , vissuto ed avuto molte soddisfazioni , non solo delusioni o perdita di capelli .

Il linguaggio piu vicino alla manutenzione , si perche tu devi calcolare che quando tu vai via poi rimangono gli ingegneri o i pasticcioni locali e seguire l'impianto , sono collaboratori del cliente finale spesso alle dirette dipendenze.

Per cui se non hai sviluppato un buon sistema di allarmi e warning nel senso che se non parte il tal ciclo ti escono le scritte che mancano questa e quella condizione e se premi il pulsantino info non dai le specifiche direttive di cosa fare piuttosto che il nuemero del filo da andare a cercare nel tal reparto del quadro , significa che il povero programmatore locale deve andare a ricercare nel segmento di avvio del tal ciclo automatico cosa manca .

Se gli va bene che manca qualcosa di hw tipo sensore o finecorsa o fotocellula la cosa e' ben presto risolta , chiama gli elettrici e nel arco di un 3-4 the riescono a fare un cavallotto o a sostituire il pezzo , se invece il problema dipende da una logica che non hai saputo gestire allora iniziano i pasticci e i danni .Quindi il modo piu veloce per trovare i guasti e' il ladder .Io uso il aldder per le logiche di cablaggoi I/O , richieste movimenti o comandi vari , per i cicli automatici , per la generazione degli allarmi , per le condizioni di logica varie .

Awl lo suo solo per compattare il codice , per esempio ho delle copie da fare o delle logiche semplcii senza "(" e ")" e allro ain un segmento step permetteva di scrivere un awl .Uso awl per alcune routine particolari .

Per il resto , per lavorare con tabelle , matrici , calcoli idnicizzati , ricerca quote , generazione percorsi quote , calcoli matematici e talvolta anche cicli automatici , uso SCL o ST .

Il manutentore non deve entrare nelle logiche particolari in quanto le devi testare tu e consegnarle perfette , funzionanti , gestibili .In manutentore non deve nemmeno toccare i file scl , perche se lo fa come minimo scrive un while -do che termina mai per cui stop della cpu per watchdog .Ti e' piu chiaro il concetto ora ? Ladder e' il linguaggio dei plc , cosi come era nato e va usato dove ha un senso "Elettromeccanico " di automazione .Dove ci sono i dati , i protocolli , ect devi usare un linguaggio che ti permette in pochi minuti di testare e lavorare su quello che devi fare e alla svelta non su dove punta il registro 1 e dove puntava il registro 3 e se avevi aperto il blocco con auf e quale blocco .

Come regola , secondo sempre il mio modesto parare , devi usare ladder e SCL-St

ciao

Walter

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