m_dalpra ha scritto:Un modo sbagliato di approcciare i problemi e' di cercare di risolverli tutti davanti al PC.
Questa tecnica comporta enormi perdite di tempo e risultati pessimi, discorso che riguarda qualunque programmazione, anche la creazione di un sito Web !!
Lascia perdere il PC e procurati penna, matita, gomma e carta.

Non risparmiare carta !!!
hai pienamente ragione ma purtroppo il fatto di aver cominciato da zero nella conoscenza dei PLC e quindi di aver perso un SACCO di tempo per cominciare a capire come fosse fatto e la data di scadenza della tesi(aplile) che è troppo vicina, mi sta portando a dover saltare qualche "tappa"
m_dalpra ha scritto:PER FINIRE.....
Ritengo il linguaggio AWL (che poi e' il classico Linguaggio Macchina dei microprocessori) un sistema barbarico di programmare i PLC.
Il sistema LADDER e' molto piu' consono all'automazione e moooooolto piu' leggibile ad un'altra persona che guarda il tuo programma.
Peccato che molte case hanno il software di sviluppo per questo linguaggio pessimo (vedi STEP7, ad esempio).
Più lavoro con l'AWL più comincio a convincermene pure io:
il fatto è che ho già studiato l'awl ,comandi e tutto e dovrei incominciare da capo a studiarmi la logica Ladder che per mè è completamente scognita e non posso permettermi di ricominciare da capo a studiare altri linguaggi:
devo oramai "produrre" e non più "acquisire".
Inizialmente volevo fare la mia tesi con Hi-Graph:
ho impiegato UN MESE per capire sto ca**o di programma(e nel frattempo passava il tempo)poi alla fine ho rinunciato ed ho buttato tutto nella spazzatura perché tra la sua manualistica scandalosa e la sua logica di funzionamento c'è veramente d'impazzire.
Abbandonato Hi-graph a quel punto mi sono buttato su AWL
vuoi perché lo conoscevo da quesi pochi richiami fatti all'università,
vuoi perché ho una "mente" più propensa alla "programmazione" (non per niente per passatempo studiavo C++).
Dirai,
allora perché non ti studiavi il linguaggio SCL??
perché appunto già conoscevo AWL,il mio tutor aziendale conosce questo linguaggio e quindi anzicchè ripetere l'esperienza di Hi-graph sono andato più sul sicuro.
m_dalpra ha scritto:Ciao
spero di esserti stato d'aiuto.

lo sei stato davvero molto:
GRAZIE MILLE
già che ci sono volevo chiederti/chiedervi(a tutti quelli che vogliono partecipare) una cosa:
allora,
non vi lasciate impressionare dalla lunghezza del post:
è così lungo perché preferisco specificare tutto al fine essere più preciso ma di fatto sono cose che sicuramente vi saranno banali:
DOMANDE:
A) Il ciclo Loop in AWL è praticamente l'analogo del ciclo FOR del C++:
oltre a questa istruzione(LOOP appunto)ne esistono altre in AWL che permettono di ripetere ciclicamente,così come il for, un insieme di istruzioni?
B)supponiamo di avere questo semplice segmento:
1) U "TASTO_START"
2) = "MOTORE_NASTRO_ON"
3) SPBN JUMP
4) L 60
5) next: T MW 10
6) L 1
7) T MW 20
8.) L MW 10
9) L MW 20
10) -I
11) T MW 10
12) L MW 10
13) LOOP next
14) R "MSG_LIVELL_NON_PRONTO"
15) JUMP: NOP 0
la cui spiegazione ,sperando che sia giusta è:
1) interrogo il segnale di ingresso "TASTO_START"
2) se "TASTO_START" è = 1 abilito "MOTORE_NASTRO_ON" e accendo il motore
3) SPBN JUMP mi fa saltare all'etichettaJUMP solo se le condizioni 1)e 2sono false =0)
4) Carico il valore 60
5) Etichetta del cicloLOOP:inizio del Loop:trasferisco il valore di 60 alla parola di Merker 10
6) Carico il valore 1
7) Trasferisco il valore 1 nella parola di merker MW 20
8.) Carico il valore della parola di merker MW 10 cioè 60
9) Carico il valore della parola di merker MW 20 cioè 1
10) Faccio 60 - 1
11) Trasferisco il valore così ottenuto in MW 10 cioè 59 va in MW 10
12) Carico il valore di MW 10 e ritorno all'etichetta LOOP
Adesso all'etichetta next: T MW 10 verrà trasferito su MW 10 il valore di 59 e non 60 come all'inizio.
Così facendo procedo a ritroso finquando ,non appena MW10 arriva a zero ,non eseguo più il LOOP ma vado avanti così da resettare l'uscita "MSG_LIVELL_NON_PRONTO"
QUINDI "MSG_LIVELL_NON_PRONTO" si resetta solo dopo aver ripetuto 60 volte il ciclo loop ok??
Ora ,
il codice che avete visto sopra è la versione primordiale di una simulazione di ENCODER.
Di fatto "sembra " funzionare ma dico sembra perché c'è un piccolo problema:
Quel numero 60 sarebbero centimetri ovvero,mentre il ciclo loop procede a ritroso "esaurendosi" il braccio meccanico si muove in avanti fino a raggiungere quota 60 centimetri.
Di fatto però l'esaurimeto del LOOP è velocissimo cioè non appena avvio il ciclo e PREMO IL PULSANTE START mi si resetta quasi subito l'uscita "MSG_LIVELL_NON_PRONTO" mentre dovrebbe starci un po' visto che materialmente il braccio meccanico ha la sua inerzia.
Non so se questa velocità dipende dal codice che è MAGARI ERRATO o è una cosa normale dovuto alla velocità della CPU.
Nel dubbio vi ho appunto trascritto il codice per escludere il caso in cui l'errore sta in esso.
Nel caso in cui sia una cosa normale ,mi è stato detto di usare il blocco OB35,mi sono andato a documentare ed ho trovato che i blocchi OB ,dal 30 al 38 sono blocchi di schedulazione orologio e che in particolare OB35 ha un valore di default per reticolo temporale di 100s
Questo significa che il codice di cui sopra devo inserirlo in un OB35 così da farlo andare a rilento perché la sua elaborazione avviene ogni 100 secondi??
Volendo ,
questo problema della rapidità posso superarlo simulando questo tempo "di spostamento virtuale" con un temporizzatore ma a questo punto nemmeno mi serve il ciclo loop di cui sopra.
A parer mio però l'uso del loop e di quel codice mi sembra più elegante rispetto ad un "temporizzatore posticcio" perché più si avvicina a quella che è la logica di un encoder reale.
Cosa ne pensate????