Vai al contenuto
PLC Forum


imparare l'Awl


Ezio92

Messaggi consigliati

Buongiorno a tutti, è da qualche mese che lavoro come programmatore plc dopo aver fatto alcuni corsi online di programmazione per plc siemens con linguaggi ladder e scl .. ora mi trovo però a dover modificare lavori fatti in precedenza con  AWL e vorrei impararlo almeno quanto basta da poterlo leggerlo e quindi debagarlo e farci le modifiche necessarie; chiedo quale sia secondo voi la strada giusta da seguire per imparare a leggerlo.

premetto che ho cercato materiale in rete come video tutorial ecc ma non ho trovato nulla di serio; l'unica cosa seria che ho trovato e il manuale siemens con le istruzioni.

ringrazio tutti coloro che mi aiuteranno 

Link al commento
Condividi su altri siti


dina_supertramp

Lista istruzioni (AWL) per S7-300/400 (siemens.com) (Non sono sicuro sia l'ultima versione, ma penso di si)

Ci sono esempi pratici commentati alla fine della lista istruzioni, guardali (Capitolo B)
Fai riferimento al manuale Siemens, tienilo sempre accanto, ti aiuterà a "decifrare" le funzioni che trovi richiamate


Poi ci sono vari modi per approcciarsi al buon vecchio AWL
- Colleghi con più esperienza, o comunque un maestro diciamo che possa insegnarti a muovere i primi passi nel codice e nelle istruzioni di base (come funzionano gli accumulatori, i salti...insomma tutte quelle operazioni molte usate in AWL)

 

- Videocorsi online, in presenza

 

- Prova a scrivere tu del codice in AWL, partendo da cose basiche (start/stop, autoritenute, ecc.) arrivando a cose più complesse: salti, controllo sequenze, operazioni su parole, operazioni con numeri reali ecc.
Fai la logica in KOP e poi prova a riscriverla in AWL. 

 

Occhio anche alla lingua del mnemonico (tedesco/inglese)....ad esempio:
AND in AWL Tedesco : "U" 

AND in AWL Inglese: "A"

Differenze nell'impostazione del mnemmonico nel SIMATIC Manager - ID: 7409513 - Industry Support Siemens

Link al commento
Condividi su altri siti

Il problema principale, a mio avviso, non è tanto imparare le istruzioni, che sono relativamente poche, ma entrare nella giusta mentalità.
Per esempio, per fare una somma tra interi si scrive:
L var_1

L var_2

+I

T var_3

 

E mi sembra abbastanza intuitivo. Ma quello a cui ci si deve abituare è che devi fare un salto se vuoi che il calcolo non venga eseguito.
Quando si fanno calcoli poi, è importante sapere come vengono usati gli accumulatori.

Modificato: da batta
Link al commento
Condividi su altri siti

13 ore fa, batta ha scritto:

E mi sembra abbastanza intuitivo. Ma quello a cui ci si deve abituare è che devi fare un salto se vuoi che il calcolo non venga eseguito.
Quando si fanno calcoli poi, è importante sapere come vengono usati gli accumulatori.

a noi che abbiamo km e km di awl sulle spalle (e anche anni purtroppo) è intuitivo. Vedo invece le nuove leve fare una fatica incredibile a capire come funzionano gli accumulatori.

Io oramai lo uso poco ma lo apprezzo ancora molto.

Link al commento
Condividi su altri siti

Livio Orsini
10 minuti fa, pigroplc ha scritto:

a noi che abbiamo km e km di awl sulle spalle (e anche anni purtroppo) è intuitivo. Vedo invece le nuove leve fare una fatica incredibile a capire come funzionano gli accumulatori.

 

In pratica è a livelli di assembler, anche se non è proprio un assembler.

Anche ai giovani programmatori di microcontrollori l'idea di scrivere qualche riga di assembler li deprime.😄

E l'evoluzione della spece, fra qualche hanno non si scriverà praticamente alcun codice, basterà spiegare, a voce, ad un PC che cosa desideri che faccia l'automazione; ci penserà poi la competenza dell'intelligenza artificiale a vagliare le varie ipotesi di soluzione Hw we Sw ed a realizzare la pregettazione di dettaglio. Il progettista umano farà solo lavoro di supervisione.

Link al commento
Condividi su altri siti

dina_supertramp
10 minuti fa, pigroplc ha scritto:

a noi che abbiamo km e km di awl sulle spalle (e anche anni purtroppo) è intuitivo. Vedo invece le nuove leve fare una fatica incredibile a capire come funzionano gli accumulatori.

Io oramai lo uso poco ma lo apprezzo ancora molto.

....le difficoltà iniziali le riscontrai a suo tempo in accumulatori e salti condizionati, ma poi è diventato molto intuitivo dopo aver debuggato righe e righe e righe....

Quando faccio certe cose in SCL o in ST, soprattutto operazioni....quanto rimpiango gli accumulatori ahahah

Link al commento
Condividi su altri siti

3 ore fa, pigroplc ha scritto:

Io oramai lo uso poco ma lo apprezzo ancora molto.

Io mi sono imposto di non usarlo più nei nuovi programmi, ma un po' mi dispiace. A saperlo usare bene, permette di scrivere un codice molto efficiente.
Usare bene gli accumulatori, per esempio, ti fa saltare un sacco di istruzioni.
Certo che se devi fare un ciclo FOR, oppure un CASE, in strutturato è infinitamente più facile.

Link al commento
Condividi su altri siti

intanto ringrazio a tutti per i consigli utili!! ma quello che vorrei imparare proprio come hanno scritto molti di voi e proprio quello di capire come funziona un plc, come funzionano gli accumulatori ecc.. poi per le istruzioni basta ovviamente guardare l'. o il manuale siemens e sono sicuro che ogni volta che se ne userà una nuova sarà piu facile anche ricordarla.

Link al commento
Condividi su altri siti

Livio Orsini
12 minuti fa, Ezio92 ha scritto:

ma quello che vorrei imparare proprio come hanno scritto molti di voi e proprio quello di capire come funziona un plc, come funzionano gli accumulatori ecc..

 

Molto dipende dal tuo retroterra culturale. Se hai conoscenze basilari di informatica ed elettronica è abbastanza semplice, altrimenti diventa un pochino più difficoltoso capire il funzionamento, nei dettagli, di un PLC.

Il PLC, in buona sostanza è un calcolatore, anzi in effetti i primi PLC erano proprio dei mini computer industriali su cui girava un apposito software per poter essere programmato in ladder diagram o schema a contatti.

Poi, ben presto, i PLC divennero apparatiautonomi con Hw dedicato esclusivamente alla funzione di PLC.

Riducendo alle informazioni basilari e semplificando i concetti di seguito ti do un descrizione di massima di come è organizzato un PLC

Per capire come funziona un accumulatore devi pensare che la CPU di un PLC è essenzialmente un microprocessore con alcune periferiche come:

  • memoria di programma
  • memoria dati non ritentiva
  • memoria dati ritentiva
  • porte di comunicazione seriale
  • bus per colloquio con le periferiche di ingresso e uscita

Nei micro processori c'è un registro detto program counter che serve ad indirizzare la memoria di programma in modo da poter acquisire le istruzioni che verranno poi eseguite.

Sempre nel processore ci sono altri registi operativi, in cui si possono memorizzare dati e indirizzi.

Uno o più di questi registri è detto "Accumulatore", in genere tutte le operazioni di elaborazione che usano dati usano questo/i registro/i.

Tanto per fare un semplice esmpio.

Immagina di voler fare una somma di 2 variabili.

Se il processore è dotato di 2 registri accomulatori, dovrai prima caricare il primo addendo in accumulatore, poi caricare il secondo addendo nel secondo accumulatore, infine l'unità centrale esegue la somma dei due dati ed il risultato sarà memorizzato nel primo accumulatore. Se invece volessi sommare 3 dati, devi ripetere le operazioni per sommare i primi due, poi carichi il terzo dato nell'accumulatore 2 ed esegui la somma con il risultato della prima somma.

 

In genere, con linguaggi evoluti, tutte queste operazioni non le fai, ti limiti a scrivere C = A + B. Con un linguaggio come AWL, che è praticamente un assemblatore, invece devi scrivere proprio una sequenza simile a quella che ho descritto.

 

Personalmente, in base alla mia esperienza professionale, in cui sono passato attraverso le fasi di progettista di circuiti elettronici, progettista di circuiti analogici e digitali per applicazioni industriali (ho prgettato anche un paio di piccoli PLC, regolarmente prodotti ed usati da alcune aziende) e, per finire, progettista di sitemi di automazione impieganti micomputer dedicati e PLC, che tu conosca nel dettaglio il funzionamento del PLC non aggiunge molto alla qualità del lavoro di programmazione.

Quello che è veramente importante è conoscere bene le caratteristiche applicati del matteriale che stai impiegando e questo lo puoi apprendere studiando i manulai.

Altra cosa molto importante è la conoscenza delle macchine/impianti che devi automatizzare.

 

Il discorso è molto lungo e complesso e non facile da affrontare nei limiti concessi da una risposta su di un forum

Link al commento
Condividi su altri siti

2 ore fa, Livio Orsini ha scritto:

 

Molto dipende dal tuo retroterra culturale. Se hai conoscenze basilari di informatica ed elettronica è abbastanza semplice, altrimenti diventa un pochino più difficoltoso capire il funzionamento, nei dettagli, di un PLC.

Il PLC, in buona sostanza è un calcolatore, anzi in effetti i primi PLC erano proprio dei mini computer industriali su cui girava un apposito software per poter essere programmato in ladder diagram o schema a contatti.

Poi, ben presto, i PLC divennero apparatiautonomi con Hw dedicato esclusivamente alla funzione di PLC.

Riducendo alle informazioni basilari e semplificando i concetti di seguito ti do un descrizione di massima di come è organizzato un PLC

Per capire come funziona un accumulatore devi pensare che la CPU di un PLC è essenzialmente un microprocessore con alcune periferiche come:

  • memoria di programma
  • memoria dati non ritentiva
  • memoria dati ritentiva
  • porte di comunicazione seriale
  • bus per colloquio con le periferiche di ingresso e uscita

Nei micro processori c'è un registro detto program counter che serve ad indirizzare la memoria di programma in modo da poter acquisire le istruzioni che verranno poi eseguite.

Sempre nel processore ci sono altri registi operativi, in cui si possono memorizzare dati e indirizzi.

Uno o più di questi registri è detto "Accumulatore", in genere tutte le operazioni di elaborazione che usano dati usano questo/i registro/i.

Tanto per fare un semplice esmpio.

Immagina di voler fare una somma di 2 variabili.

Se il processore è dotato di 2 registri accomulatori, dovrai prima caricare il primo addendo in accumulatore, poi caricare il secondo addendo nel secondo accumulatore, infine l'unità centrale esegue la somma dei due dati ed il risultato sarà memorizzato nel primo accumulatore. Se invece volessi sommare 3 dati, devi ripetere le operazioni per sommare i primi due, poi carichi il terzo dato nell'accumulatore 2 ed esegui la somma con il risultato della prima somma.

 

In genere, con linguaggi evoluti, tutte queste operazioni non le fai, ti limiti a scrivere C = A + B. Con un linguaggio come AWL, che è praticamente un assemblatore, invece devi scrivere proprio una sequenza simile a quella che ho descritto.

 

Personalmente, in base alla mia esperienza professionale, in cui sono passato attraverso le fasi di progettista di circuiti elettronici, progettista di circuiti analogici e digitali per applicazioni industriali (ho prgettato anche un paio di piccoli PLC, regolarmente prodotti ed usati da alcune aziende) e, per finire, progettista di sitemi di automazione impieganti micomputer dedicati e PLC, che tu conosca nel dettaglio il funzionamento del PLC non aggiunge molto alla qualità del lavoro di programmazione.

Quello che è veramente importante è conoscere bene le caratteristiche applicati del matteriale che stai impiegando e questo lo puoi apprendere studiando i manulai.

Altra cosa molto importante è la conoscenza delle macchine/impianti che devi automatizzare.

 

Il discorso è molto lungo e complesso e non facile da affrontare nei limiti concessi da una risposta su di un forum

 

Diciamo che il fatto di voler sapere come funziona è piu che altro un mio vezzo, sono un perito elettrotecnico, mi a sempre affascinato l'elettronica in generale e ci ho sempre lavorato .. adesso ho cambiato entrando nel campo dell'automazione ma ho sempre il vizio di voler sapere come realmente si comportano le cose per capirne il funzionamento 

Link al commento
Condividi su altri siti

Qualche esempio può chiarire come si opera con gli accumulatori.

 

Quando si scrive:
L #valore (dove #valore puo essere un numero oppure una variabile)
il contenuto dell'accumulatore 1 viene spostato nell'accumulatore 2, e il valore viene caricato nell'accumulatore 1.

 

Quando si scrive:

T #miaVariabile

il contenuto di accu1 viene trasferito nella variabile. Il contenuto degli accumulatori rimane invariato.

 

Quando poi si scrivono istruzioni di calcolo o comparazioni, queste istruzioni operano sugli accumulatori.
Per esempio, una operazione di somma (+I, +D, +R) effettua la somma dei due accumulatori e mette il risultato in Accu1.

 

Esempio di una somma:

L #var_1 	// Sposta Accu1 in Accu2 e carica il valore di #var_1 in Accu1
L #var_2 	// Sposta Accu1 in Accu2 e carica il valore di #var_2 in Accu1
			   (quindi, a questo punto Accu1 contiene il valore di #var_2 e Accu2 il valore di #var_1)
+I  		// Somma i due accumulatori e mette il risultato in Accu1
T #var_3  	// Trasferisce il contenuto di Accu1 in #var_3

 

Se devi fare un calcolo multiplo, non è necessario trasferire, ad ogni calcolo, il risultato in una variabile.
Esempio: #var_5 = (#var_1 + #var_2) * #var_3 - #var_4

L #var_1
L #var_2
+I
L #var_3
*I
L #var_4
-I
T #var_5

 

Lo stesso discorso vale per le operazioni di confronto: il confronto viee sempre eseguito tra i due accumulatori.
Quindi, se un valore da confrontare è il risultato di un calcolo, non si è costretti ad appoggiare il risultato del calcolo ad una variabile.

Esempio:

L #var_1
L #var_2
-I
L #var_3
>I
= M10.0

 Un'istruzione che si usa spesso è TAK, che scambia tra di loro il contenuto degli accumulatori.

 

Questo solo per farsi una prima idea. Del resto, se il manuale AWL è di 272 pagine (lo trovi qui), non posso certo pensare di aver spiegato tutto in poche misere righe.

Link al commento
Condividi su altri siti

5 minuti fa, batta ha scritto:

Qualche esempio può chiarire come si opera con gli accumulatori.

 

Quando si scrive:
L #valore (dove #valore puo essere un numero oppure una variabile)
il contenuto dell'accumulatore 1 viene spostato nell'accumulatore 2, e il valore viene caricato nell'accumulatore 1.

 

Quando si scrive:

T #miaVariabile

il contenuto di accu1 viene trasferito nella variabile. Il contenuto degli accumulatori rimane invariato.

 

Quando poi si scrivono istruzioni di calcolo o comparazioni, queste istruzioni operano sugli accumulatori.
Per esempio, una operazione di somma (+I, +D, +R) effettua la somma dei due accumulatori e mette il risultato in Accu1.

 

Esempio di una somma:

L #var_1 	// Sposta Accu1 in Accu2 e carica il valore di #var_1 in Accu1
L #var_2 	// Sposta Accu1 in Accu2 e carica il valore di #var_2 in Accu1
			   (quindi, a questo punto Accu1 contiene il valore di #var_2 e Accu2 il valore di #var_1)
+I  		// Somma i due accumulatori e mette il risultato in Accu1
T #var_3  	// Trasferisce il contenuto di Accu1 in #var_3

 

Se devi fare un calcolo multiplo, non è necessario trasferire, ad ogni calcolo, il risultato in una variabile.
Esempio: #var_5 = (#var_1 + #var_2) * #var_3 - #var_4

L #var_1
L #var_2
+I
L #var_3
*I
L #var_4
-I
T #var_5

 

Lo stesso discorso vale per le operazioni di confronto: il confronto viee sempre eseguito tra i due accumulatori.
Quindi, se un valore da confrontare è il risultato di un calcolo, non si è costretti ad appoggiare il risultato del calcolo ad una variabile.

Esempio:

L #var_1
L #var_2
-I
L #var_3
>I
= M10.0

 Un'istruzione che si usa spesso è TAK, che scambia tra di loro il contenuto degli accumulatori.

 

Questo solo per farsi una prima idea. Del resto, se il manuale AWL è di 272 pagine (lo trovi qui), non posso certo pensare di aver spiegato tutto in poche misere righe.

 

OOK quindi mi viene spontaneo pensare che bisogna stare molto attenti a cio che l'accumulatore porta con se da risultati precedenti perchè da come ho capito rimangono carichi con i valori 

Link al commento
Condividi su altri siti

Livio Orsini
1 ora fa, Ezio92 ha scritto:

quindi mi viene spontaneo pensare che bisogna stare molto attenti a cio che l'accumulatore porta con se da risultati precedenti perchè da come ho capito rimangono carichi con i valori 

 

Può essere un pregio, come può essere un difetto, dipende da quello che si deve fare.

I compilatori solitamente ricaricano o azzerano i registri che usano, mentre il programmatore che lavora in asm, conoscendo lo stato del registro, può risparmiare questa operazione, così che il codice risulta più compatto. Questo però costringe ad una maggior attenzione.

Fin dall'inizio dell'informatica vige la legge "GIGO", ovvero Garbage In Garbage Out, se entra spazzatura esce spazztura.

Con l'adozione dei linguaggi a livello più alto oltre ad aumentare la produttività della programmazione, si va anche a sgravare il programmatore dalola necesità certi controlli; come contropartita vi è necessità di disporre di macchine più potenti e di quantità di memoria maggiore..

 

Comunque più il livello di programmazione è basso, ovvero più vicino al linguaggio macchina, più chi programma è vicino alla macchina stessa e può "spremere" le risorse sino al fondo. Però se 30 - 40 anni fa era quasi indispensabile, oggi è del tutto fuori luogo con le risorse di calcolo che sono a disposizione.

Link al commento
Condividi su altri siti

1 ora fa, Ezio92 ha scritto:

mi viene spontaneo pensare che bisogna stare molto attenti a cio che l'accumulatore porta con se da risultati precedenti perchè da come ho capito rimangono carichi con i valori 

Sì e no.
Se fai una operazione matematica, o una comparazione, di solito hai due istruzioni "L". Quindi vai a scrivere in entrambi gli accumulatori i valori aggiornati. Quello che c'era prima negli accumulatori viene perso.
Diciamo che sapendo come lavorano gli accumulatori, puoi risparmiare parecchie istruzioni "L".

 

Faccio un esempio, di tanti programmi che mi sono capitati per le mani, con istruzioni inutili:

L #var_1
L #var_2
+I
T #varAppoggio	// Questa istruzione è inutile
L #varAppoggio	// Questa istruzione è inutile
L #var_3
+I
T #varAppoggio	// Questa istruzione è inutile
L #varAppoggio	// Questa istruzione è inutile
L #var_4
+I
T #risultato

 

Link al commento
Condividi su altri siti

Se ti può interessare ho una vecchia dispensa incentrata sui PLC , con un buon numero di esempi fatti tutti in awl e ben commentati. 

Se ti interessa contattami in privato, in qualche modo te la faccio avere

Link al commento
Condividi su altri siti

  • 2 months later...

Sempre stato un lurker ma ho fatto un account per dire questo (un po' vecchia la discussione ma abbiate pazienza).

 

Capisco ciò che dite ma, occhio ad alcune cose per quanto riguarda Instruction List e derivati (AWL) oggi:

 

1. è ormai ufficialmente "deprecated" secondo la 61131-3 (perché siamo programmatori PLC, non programmatori Siemens vero? perdonate la nota leggermente polemica). Ovvio che esiste una base installata enorme, ma i vendor PLC hanno convenuto così e l'hanno scritto nella norma.

 

2. Siemens stessa dice che alcune cose (non tutto, alcune cose) in AWL scritte sugli S7-1500 non hanno quel vantaggio di performance che si crede per come funziona la macchina virtuale del bytecode MC7+. Rimando alle Programming Guidelines che trovate sul SIOS.

 

3. Sempre a proposito dell'efficienza dell'AWL, attenzione che ormai in realtà molte di quelle ottimizzazioni che una volta facevamo a mano ormai i runtime dei PLC le fanno da soli! Anche scrivendo testo strutturato, o ladder, ... Certi accorgimenti dei compilatori ottimizzanti ormai i vendor dei PLC li hanno inclusi nei loro firmware.
Nella programmazione non PLC ormai molti dicono che è inutile ottimizzare a mano perché il compilatore è ormai più bravo di noi a ottimizzare il codice da loro emesso. (lasciamo stare le ottimizzazioni nel C legate allo sfruttamento degli undefined behaviors però... 😄)

Perciò, sì, vale la pena capirlo, ma secondo me più per avere un'idea più completa di come funziona un linguaggio di programmazione (perché sapere questo, avere una solida base di ingegneria del software, sapere impiegare delle astrazioni nel software è quello che ci distingue da dei semplici elettricisti che sanno mettere le mani sui PLC, io credo).

Link al commento
Condividi su altri siti

ma lascia perdere l'awl. Concentrati su ladder ed SCL.

L'awl lo uso ormai solo per dirver particolari vecchi. 

 

Link al commento
Condividi su altri siti

L'AWL può piacere o non piacere. A me personalmente piace, ed è un linguaggio molto efficiente.
Da anni mi impongo di non usarlo più su nuovi progetti ma, se devi mettere le mani su programmi (più o meno vecchi) scritti in AWL, come scritto in apertura della discussione, non lo si può lasciar perdere.

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