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




Calcoli Awl,


Messaggi consigliati

Inserita: (modificato)

Ciao batta , innanzitutto ti ringrazio infinitamente per i tuoi consigli , veramente grazie .. Spero che un giorno potrò sdebitarmi . Infatti delle volte non lo richiamavo il db e mi andava lo stesso , adesso mi spiego il motivo , un altra cosa che mi hai fatto notare , e te ne sono grato , ma se io uso l'operazione di confronto "=" se per caso viene superato il valore da confrontare e a il sistema li sfugge cosa succede? Continua a salire ? Non riesco capire tanti bene . Il tuo programma è ordinato e molto preciso , anche se sinceramente non conosco tutte le istruzioni che hai usato , e le sto cercando di capire proprio ora tramite il manuale AWL . Lo caricato nella cpu , ma non mi va , nemmeno il semplice calcolo funziona, ho controllato il led e si accende , facendo il controllo online vedo l'ingresso che va ad 1 , ma poi salta dal etichetta "spb m00" tutti i calcoli che non dovrebbe saltare , cioè sembra quasi che siano le etichette che non mi vanno... Ti ringrazio per ora , in parte sono demoralizzato per tutti gli errori che commetto .grazie molte

Modificato: da coquinati

  • Risposte 66
  • Created
  • Ultima risposta

Top Posters In This Topic

  • coquinati

    34

  • batta

    17

  • JumpMan

    12

  • floydfan

    3

Top Posters In This Topic

Posted Images

Inserita: (modificato)

Batta nel studiare il codice non capisco delle cose, perché al segmento 3 hai deciso di usare 2 NOR anziché un OR con un salto SPBN? c'è qualche vantaggio in questo ? Subito dopo questo passaggio viene caricato il risultato e dopo lo step di 0,1 , successivamente è presente una AND "contupdown" , ma quest'ultima non c'entra nulla con le due operazioni elencate sopra di caricamento ? O si ? Grazie molte.

Modificato: da coquinati
Inserita: (modificato)

Ora ho capito a cosa serve "cntupdown" , scusa ci sono arrivato dopo , sinceramente non pensavo nemmeno che si può eseguire una semplificazione del genere .. È veramente comodo AWL . Ritiro la mia ultima domanda. Scusa.

Modificato: da coquinati
Inserita:

ma poi salta dal etichetta "spb m00" tutti i calcoli che non dovrebbe saltare , cioè sembra quasi che siano le etichette che non mi vanno...

Ma in configurazione hardware, hai impostato MB8 come byte dei merker di clock?

Inserita:

Ma in configurazione hardware, hai impostato MB8 come byte dei merker di clock?

Si si certo , ho tenuto la vecchia configurazione HW,. ho anche testato se l'ingresso fosse 1, e lo è, . Ho controllato il FW della cpu (io ho sempre usato 1.2 e Andava) online mi dice che è presente il FW 1.2.1 , quindi penso che 1.2 sia corretto , ho anche tentato di cambiare in 1.1 ma non cambia nulla .riproverò riscrivere tutto in un altro progetto.grazie per ora è mi scuso per il tempo che ti faccio perdere.
Inserita:

Allora ho caricato il codice in un altra cpu e come si sapeva funziona. . Ma allora la mia cpu è proprio partita? .. Ho tentato di riscrivere il codice senza guardarlo ,con la logica e le semplificazioni che hai usato batta . Devo farti i miei complimenti (spero che non ti offenda ), io non ci sarei mai arrivato a semplificare così tanto il codice . Insomma ci ho messo 46 minuti a riscrive il codice avendolo già visto una volta . Una curiosità quanto tempo hai impiegato per scriverlo ?:)

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Inserita:

Mi scuso per gli orrori grammaticali . Scrivere con il cellulare è difficile . Soprattutto le '

Inserita: (modificato)

perché al segmento 3 hai deciso di usare 2 NOR anziché un OR con un salto SPBN?

È solo una questione di abitudine.

Allora ho caricato il codice in un altra cpu e come si sapeva funziona. . Ma allora la mia cpu è proprio partita?

Ma la CPU è in RUN? E tutto il resto funziona?

Sei proprio sicuro che l'ingresso E124.0 nel programma lo vedi alto? Hai provato a metterlo in una VAT, onde escludere la possibilità di interpretazioni errate dello stato?

Devo farti i miei complimenti (spero che non ti offenda )

E quando mai un complimento potrebbe essere offensivo? :smile:

Una curiosità quanto tempo hai impiegato per scriverlo ?

Non mi sono cronometrato ma, tra creare il nuovo progetto, scrivere il codice e testarlo con il simulatore, penso circa 10 minuti.

Una delle cose che apprezzo dell'AWL è proprio la possibilità di semplificare.

In particolare, nei calcoli, tenendo presente che la CPU lavora con due accumulatori, si possono saltare passaggi che sono invece obbligatori con altri linguaggi.

Uno degli esempi più semplici è il seguente:

      .....
      .....
M001: T     "DB_Test".Risultato_1
      L     5.000000e+001
      <R    
      .....
      .....
      .....

L'istruzione "T " non fa altro che trasferire nella variabile "DB_Test".Risultato_1 il contenuto dell'accumulatore 1.

L'istruzione "L" sposta il contenuto dell'accumulatore 1 nell'accumulatore 2, e scrive il nuovo valore nell'accumulatore 1.

L'istruzione "<R" (come tutte le comparazioni) confronta il contenuto dell'accumulatore 1 con quello dell'accumulatore 2.

Quindi, per fare la comparazione dell'esempio, non è necessario dopo

T "DB_Test".Risultato_1

scrivere anche

L "DB_Test".Risultato_1

perché il valore è già nell'accumulatore 1.

Anche i salti, che di solito mettono in crisi i neofiti, una volta presa la mano permettono di semplificare il codice.

Modificato: da batta
Inserita:

SCUSATE MA IL CELL SCRIVE SOLO IN MAIUSCOLO SU QUESTO FORUM... SULLA CPU VECCHIA HAI EFFETTUATO UNA CANCELLAZIONE TOTALE?.. POTREBBE ESSERCI DEL CODICE CHE GIRA MAGARI SU OB35 CHE PER SFIGA USA GLI STESSI MERKER CHE HAI USATO TU. NON E POSSIBILE CHE UNA CPU FUNZIONA A META

Inserita:

JumpMan ha ragione.

Fai un confronto dei blocchi di programma. Se nella CPU ci sono blocchi che nel tuo progetto non esistono, cancellali.

Se non sbaglio, la tua CPU è ancora di quelle con la batteria tampone.

Per fare una cancellazione totale, o fai il giochino con la chiavetta (vedi manuale), oppure togli alimentazione alla CPU e scolleghi la batteria tampone.

Inserita:

Incredibile ragazzi ho tolto la batteria a tampone è rimessa e la cpu a iniziato a funzionare correttamente !! Jump eppure ho controllato benissimo e non era presente nessun ob ne fc di troppo. Adirittura prima di fare questo ho selezionato tutto anche sfc e sfb e ho premuto cancella . Quindi se c'era qualcosa in mezzo si doveva cancellare .... Probabilmente ho combinato qualcosa che non va io.. Mi scuso per. Avervi fatto perdere del tempo prezioso con uno stupido come me .. Per batta : Ma come fai prendere soldi se sei così veloce a scrivere programmi :Dahahahah scherzo:D per la questione AWL sono un po' incasinato. , ho iniziato da poco , (però ho già deciso di abbandonare il KOP) . Per RLC fra due NOR per ottenerlo esegue i calcoli di una NOR cioè una somma bool negata ?. O esegue sempre una moltiplicazione bool indifferente alle porte logiche usate ?. . Ho controllato sulla guida informazioni di step 'ma non lo specifica . L'accumulatori non ho capito bene cosa intendi su questa parte:l'istruzione "L" sposta il contenuto dell'accumulatore 1 nell'accumulatore 2, e scrive il nuovo valore nell'accumulatore 1 . Ma ti stai riferendo a l'operazione di confronto scritta sopra ? Io pensavo che l'operazione "T" si scrive sempre nell'accu1 e load sotto lo carica nell'accumulatore 2 poi esegue l'operazione di confronto tra accu1 e accu2 .non riesco capire la tua spiegazione . Comunque grazie mille jump e batta . Spero di non farvi perdere tempo..

Inserita:
Mi scuso per. Avervi fatto perdere del tempo prezioso con uno stupido come me

Ma và là !

però ho già deciso di abbandonare il KOP

Non è mica detto che bisogna abbandonarlo, per la locica pura booleana è ancora il migliore, soprattutto quando devi andare in stato online.

Se vuoi capire come lavora AWL ti consiglio di scrivere qualche segmento in KOP e poi premendo CTRL+2 e CTRL+1 passi alternativamente da KOP a AWL e viceversa, vedrai che il compilatore ti metterà anche delle parentesi, ci possono essere più livelli di parentesi U( ) e O( ), si ragiona un po come in matematica dove AND corrisponde alla moltiplicazione ed OR alla somma, le parentesi servono appunto per eseguire certe cose prima di altre

p.es.

U(

O M100.0

O M100.1

)

U M100.2

= M100.3

prima fa l'or di M100.0 e M100.1, il risultato lo mette in and con M100.2 e il risultato finale lo scrive su M100.3

, poi c'è l'operatore O da solo

U M100.0

U M100.1

O

U M100.2

U M100.3

= M 100.4

i 2 AND prevalgono (come la moltiplicazione in matematica) e vengono calcolati prima e poi messi in parallelo tra di loro per poi andare in uscita.

tutte le operazioni booleane influenzano lo stato dell'RLC (risultato logico combinatorio)

-------------------

Gli accumulatori sono la prima cosa che ti spiegano ad un corso Siemens, praticamente tutti i calcoli sono basati su questi 2 accumulatori, sul manuale c'è anche scritto quali operazioni influenzano il loro stato e quali no, l'operazione L carica l'operando nell' ACCU1, ma prima di farlo sposta il valore di ACCU1 in ACCU2, per questo quando esegui 2 volte L hai in ACCU2 il primo valore caricato e in ACCU1 l'ultimo. Le operazioni di confronto confrontano ACCU1 con ACCU2 e influenzano l'RLC con il risultato del confronto.

Inserita: (modificato)
Per RLC fra due NOR per ottenerlo esegue i calcoli di una NOR cioè una somma bool negata ?. O esegue sempre una moltiplicazione bool indifferente alle porte logiche usate ?. .

Questa non l'ho capita...

se intendi in riferimento a queste 2 istruzioni non è altro che l'OR di 2 NOT

ON "AbilitaCnt"

ON #FS_Clock

se hai un dubbio scrivi una cosa tipo questa su un segmento vuoto

ON "AbilitaCnt"

ON #FS_Clock

= M100.0

e poi premi CTRL+1 , CTRL+2, CTRL+3 per le varie rappresentazioni KOP, AWL, FUP

Personalmente preferisco usare salti SPBN (quindi negare il salto) ed usare la logica "diritta", quindi al posto di

ON "AbilitaCnt"

ON #FS_Clock

SPB M000

preferisco scrivere:

U "AbilitaCnt"

U #FS_Clock

SPBN M000

che è esattamente la stessa cosa, io scrivo le condizioni di non-salto anzichè quelle di salto, ma come ha detto batta è solo questione di abitudine.

Modificato: da JumpMan
Inserita:

Sinceramente anche io sono abituato a usare una logica "diritta" c'è mi viene spontaneo , Infatti quando cerco di leggere l'opposto vado un po' in confusione ( forse voglio fare le cose con troppa fretta e alla fine faccio una bella frittata ) .comunque per RLC tra due not non ho capito se il risultato lo ricava facendo. (Suppongo due valori a caso di due not in parallelo , una è a 0 e una ad 0 quindi farò: 0+0=0negato=1 . Allora RLC è uguale ad 1 . Giusto ? C'è per calcolare RLC combina sempre le formule appartenenti alle porte logiche interrogate. Es: Se e c'è una AND e una OR in serie RLC= Risultato della AND+stato logico della OR esatto? ..delle volte scrivo in AWL per esempio operazioni di confronto poi cerco di convertirle in KOP ma resta in awl . Forse devo inserire delle istruzioni necessarie per la conversione . Ho visto che quando converto da KOP a AWL mi compaiono diverse nop 0 . Comunque come dici te jump il KOP in logica bool è il più intuibile almeno in maniera più veloce (secondo me) ma sapere fare le stessa cose in AWL costringe imparare in maniera impeccabile le porte logiche da quanto ho visto fino ad ora , poi non so se capita anche a voi ma quando cerco di programmare un segmento in AWL lo penso prima in KOP .è un bene o un male? Per l'accumulatori mi sembra un discorso da prendere con i guanti , so che tempo fa batta gli aveva spiegati approfonditamente ,già su una discussione ora non ricordo quale dovrò cercare. Comunque grazie mille

Inserita: (modificato)
comunque per RLC tra due not non ho capito se il risultato lo ricava facendo. (Suppongo due valori a caso di due not in parallelo , una è a 0 e una ad 0 quindi farò: 0+0=0negato=1

No! questa è giusta: due valori a caso di due not in parallelo , una è a 0 e una ad 0 quindi farò: 1+1 = 1 , una è a 1 e una ad 1 quindi farò: 0+0 = 0

Ho detto l' OR di 2 NOT, non il NOR, il NOR non esiste (ma puoi farlo con un OR e un NOT)

delle volte scrivo in AWL per esempio operazioni di confronto poi cerco di convertirle in KOP ma resta in awl

scrivi prima in KOP e poi guarda in AWL

Io di solito faccio il contrario per star meno a scrivere ma la sintassi deve essere molto precisa

I NOP 0 appaiono negli ingressi non collegati di un temporizzatore o di un contatore, sono delle istruzioni nulle

Gli accumulatori li devi capire bene altrimenti non puoi programmare correttamente in AWL.

Modificato: da JumpMan
Inserita:

però ho già deciso di abbandonare il KOP

Concordo pienamente con quanto ti ha già scritto JumpMan: il KOP va benissimo per la logica booleana. Non lo abbandonare. Solo usa, caso per caso, il linguaggio più adatto (a questo proposito, non dimenticare SCL).

E concordo anche con tutto quello che ha scritto dopo.

Inserita: (modificato)

An capito ragazzi , e che io ho letto che molte aziende prendono solo se si conosce a perfezione il linguaggio AWL , per quello ho detto di abbandonare il KOP , però continuerò a usarlo su vostro consiglio perché in effetti con AwL divento pazzo nei segmenti di logica , scrivo più errori che programma .. Se va avanti così faccio l'errorista non il programmatore . Comunque ho intenzione di imparare AWL anche nei segmenti di logica (non si sa mai ,meglio sapere che non sapere) .. Jumpman scusa se ti stresso ma non ho capito molto bene , ( mi sto scrivendo giù un manuale che anche i bambini dell'asilo capiscono di programmazione basilare che poi posterò anche per eventuali correzioni). Allora io nel AWL scrivo così : ON è in parallelo un altro ON . In KOP non sono altro che 2 contatti normalmente chiusi in parallelo. Questa si dice OR di due NAND .giusto? come hai detto te quando 0+0=1 e 1 1=0 ,fino a qua tutto chiaro. ma non capisco quando una delle due sarà allo stato 1 e l'altra allo stato 0 è sempre 0 il risultato , ma come è possibile ? Essendo dei contatti NC devono essere tutte due a 1 per portare l'uscita a 0, e dai calcoli mi risulta che ne basta una a 0 perché l'uscita sia a. 0.. Chiaramente sbaglio ragionamento , ma dove sto sbagliando. ??? Riesci a capirmi? . Scusa e grazie mille Mi sento in debito , vi offrirò una cena una sera , così ci possiamo trovare anche di persona :)

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Modificato: da coquinati
Inserita: (modificato)

Forse ho confuso RLC con il risultato del l'assegnazione di un segmento :( ..cioè io pensavo fino a poche ore fa che RLC fosse uguale a un risultato di una assegnazione posta alla fine del segmento . È l'unica possibile causa di tutta sta confusione che mi sono creato .. Cavolo programmando con il KOP queste di cose me ne fregavo perché riuscivo a scrivere lo stesso . Ora con AWL sto imparando moltissime cose nuove ,

Modificato: da coquinati
Inserita: (modificato)

Mal di testa :P:smile: :smile: :smile:

non capisco quando una delle due sarà allo stato 1 e l'altra allo stato 0 è sempre 0 il risultato , ma come è possibile ?

e chi l'ha detto ? 0 + 1 = 1 non 0 !

L'AWL è un linguaggio simile all'assembler, per usarlo devi imparare a ragionare come la macchina, se scrivi in SCL (ma anche in KOP, FUP o altro) il compilatore provvederà a tradurre il tutto in AWL (aggiungendo anche un mucchio di righe di codice inutili) in modo che quando lo trasferisci al PLC la CPU (che ragiona in AWL) capisca quello che tu hai scritto. :smile:

Se vuoi riuscire a comprendere meglio l'AWL nulla ti vieta di inserire a fianco delle istruzioni una semplice traduzione in italiano di quello che stai scrivendo:

Ti faccio un esempio di una semplice auto-ritenuta tradotta in AWL:

U(       // Se (
U E 0.0  //   Pulsante start premuto
O M 0.0  //   O motore in moto
)        // )
UN E 0.1 // E pulsante di stop non premuto
= M 0.0  // accendo il motore

Il salto che ha messo batta nel segmento 3 lo puoi commentare così:

ON    "AbilitaCnt"   // Se conteggio NON abilitato
ON    #FS_Clock      // O NON ho impulso di clock
SPB   M000           // salto a M000 (e non eseguo incremento)

Capirai che è mooooolto più facile di quello che credi ;)

Praticamente dove c'è un OR scrivi O, dove c'è un AND scrivi E, se è negato aggiungi NON ed il gioco è fatto!

Ti faccio un altro esempio:

U(             // Se(
U "PezPos"     //   Pezzo posizionato
U "CICLO"      //   E ciclo in esecuzione
UN "ForEff"    //   E foratura NON effettuata
O              // Oppure:
U "PulDisTra"  //   Pulsante discesa trapano
U "MAN"        //   E macchina in manuale
)              // )
U "TraInMot"   // E trapano in moto
U "RobFuoAre"  // E robot fuori dall'area
U "SicOk       // E sicurezze OK
= "DisTra"     // = comando discesa trapano

Vedi che facile ?

Modificato: da JumpMan
Inserita:

Mal di testa :P:smile: :smile: :smile:

e chi l'ha detto ? 0 + 1 = 1

Magari solo mal di testa:) comunque penso di avere capito alla fine mi complicavo la vita per niente... Comunque ritornando sul discorso di prima intendevo l'or di due nand. Ma penso di avere fatto solo una gran confusione .. Comunque grazie , per ora non mi resta che studiare .
Inserita:

Ora ho capito bene :). E ho scoperto che ho scritto un mucchio di cavolate incapibili....se potessi tornare indietro .. Farei meno figure di ... .. Ora sono arrivato alle OR esclusive dette X nel linguaggio AWL sullo schema siemens è rappresentato con un contatto NO collegato in parallelo con un NC . Ho provato anche la conversione da AWL a KOP ma non me lo converte .. Ma questa X come funziona ? Grazie mille in anticipo

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Inserita:

X restituisce in uscita 1 solo se i 2 ingressi sono diversi, ovvero se il numero di 1 in ingresso è dispari.

Non è rappresentabile in KOP ma può essere costruito così:

|    E0.0    E0.1     M0.0
+----[ ]-----[/]--+---( )
|                 |
|    E0.0    E0.1 |
+----[/]-----[ ]--+


Diciamo che non serve a una mazza e che in 20 anni forse l'ho usato una volta.... (ho usato di più XOW tra word, per vedere quali bit cambiano di stato)

Inserita:

Diciamo che non serve a una mazza e che in 20 anni forse l'ho usato una volta.

Io ogni tanto lo uso.

L'esempio più semplice? Flip-flop, che in AWL diventa così:

U E0.0
FP M20.0
X A0.0
= A0.0

Ogni volta che si preme il pulsante collegato a E0.0, l'uscita A0.0 cambia di stato.

Inserita:

Grazie mille ragazzi. Ho iniziato capire . Sopratutto mi sto dedicando a scrivere un manuale in KOP /AWL con vari esempi , solo così riesco capire , provando... Batta ma il tuo esempio è riferito come un flip-flop SR? E se uso l'istruzione XN diventerà un RS giusto ? GraZie mille . Mi sento in debito..

Inserita:

Batta ma il tuo esempio è riferito come un flip-flop SR?

Come ho scritto, ogni volta che premi il pulsante collegato a E0.0, l'uscita A0.0 cambia di stato: se se ON, diventa OFF; se è OFF, diventa ON. Non c'entra il set/reset, per il quale servono due ingressi distinti.

Se al posto di X usi XN non funziona.

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

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




×
×
  • Crea nuovo/a...