Vai al contenuto
PLC Forum


Linguaggio STL


Anikare

Messaggi consigliati

Salve ragazzi, non so se  sfugge a me qualcosa oppure e' il mio S7 comunque vorrei chiedervi questo:

Il seguente codice

O(

O(

A  I1. O

A  I 1.1

A  I1. 2

A  I 1.3

)

=  Q 1.O

dovrebbe essere uguale a quest'altro? 

O((

A  I1. O

A  I 1.0

O(

A  I1. 2

A  I 1.3

)

=  Q 1.O

ovvero dare due coppie di AND(I1. 0 con I 1.1) ed (I 1.2 con I 1.3) in OR  tra loro . 

Questo mi si verifica solo con il secondo codice. 

 

Link al commento
Condividi su altri siti


Non è Uguale.

 

O(

O(

A  I1. O

A  I 1.1

A  I1. 2

A  I 1.3

)

=  Q 1.O

 

I1.0 e I1.1 sono in parallelo. I1.2 e I1.3 sono tutte e due in serie al primo parallelo

 

 

Link al commento
Condividi su altri siti

Confermo: non sono equivalenti.

 

Inoltre, il secondo caso è sintatticamente non corretto: ne' il 300, ne' il 1500 ti accettano le due parentesi unite.
Se la parentesi in più è solo un errore di scrittura (probabile, visto che ci troviamo con 3 parentesi aperte e 2 chiuse, allora in ladder sarebbe come segue:

immagine.png.3752aa508a334c71c868ccf45a0a37a0.png

 

Il primo caso, invece, anche se sintatticamente corretto, sembra essere solo una parte di un segmento. Solo se c'è qualcosa prima quegli OR hanno un senso.

 

2 ore fa, 84paolo ha scritto:

I1.0 e I1.1 sono in parallelo. I1.2 e I1.3 sono tutte e due in serie al primo parallelo

Guarda con attenzione. È l'AND tra I1.0 ed I1.1 ad essere posto in OR con qualcosa che viene prima (e che non c'è), e non i due ingressi in OR tra di loro.
Poi, si aggiunge l'AND di I1.2 e I1.3.

 

In pratica, se non c'è nulla prima di queste istruzioni, è come scrivere:

A I0.1

A I1.1

A I1.2

A I1.3

= Q1.0

 

Link al commento
Condividi su altri siti

Grazie per il vostro intervento. 

Ho fatto questo esempio partendo da un altro  e cioe':

A(

A(

O i1. 0

O i1. 1

)

O I 1.2

O I 1.3

)

= Q 1.0    che e' uguale questa volta  al seguente:

A(

O i1. 0

O i1. 1

)

A(

O I 1.2

O I 1.3

)

= Q 1.0. 

Allora mi sono chiesto perché la sintassi funziona con le AND  A( A( ,,,, ,, ),,,,,,,, ) e non funziona con le OR   O( O(,,,,,),,,,,,)  ? 

 

 

Link al commento
Condividi su altri siti

Concordo con Paolo. È come ha rappresentato in ladder.
Nel primo esempio ci sono delle parentesi e degli AND inutili, che servono solo a fare confusione.

 

Ma da dove vengono questi esempi di segmenti sballati?
E perché questo interesse per l'AWL, che la stessa Siemens sta accantonando?
Se devi lavorare sui 300, è praticamente indispensabile perché ti troverai molti programmi scritti in AWL.
Se devi lavorare con le nuove CPU 1200/1500, dedica più tempo al testo strutturato (quello che Siemens chiama SCL).

Link al commento
Condividi su altri siti

Si anche io convertendo in Kop I due esempi ottengo lo stesso risultato di Paolo. La stessa sintassi del tipo                         A(   

           A(    

          ............. 

          ............. 

            )

         .............. 

         .............. 

           ) 

        = Q 1.0

si trova nei programmi della mia azienda realizzati da programmatori tedeschi ed e' da qui che nasce la mia curiosita dopo aver anche quardato questo video dal minuto 15 e 42 sec. al fine di chiarire I dubbi.

           

          

 

Nella mia azienda abbiamo circa il 30% del programma in STL(Awl) con CPU famiglia 300. 

Link al commento
Condividi su altri siti

Certo che se quei segmeni sono stati scritti dai tedeschi, i miei dubbi sul fatto che la precisione teutonica sia solo un falso mito diventano certezza.
Ad essere onesto, è già certezza, e questa è solo una ulteriore conferma 😉

 

Link al commento
Condividi su altri siti

Relativamente al video e alla conversione da AWL a ladder, non ho analizzato se è corretta (ma presumo di sì).
Tu però, nei tuoi esempi, avevi preso solo una parte di questi segmenti, e non il segmento completo.

Che poi, c'è da dire una cosa: io ho utilizzato molto l'AWL, e mi ci sono sempre trovato bene. Ma scrivere in AWL segmenti come quello del video, significa solo volersi fare del male.
I segmenti in AWL, per essere facilmente comprensibili, devono essere il più semplici e lineari possibili.
Per esempio, lo stesso segmento si può spezzare in più parti, appoggiando i singoli risultati a variabili locali, ed utilizzando queste variabili locali per il risultato finale.
Aggiungere file di parentesi serve solo a rendere il segmento incomprensibile.

Link al commento
Condividi su altri siti

Si  infatti il mio era solo un esempio, ho copiato la parte del programma dove avevo dubbi anche se con indirizzi a caso, solo per capire se le due sintassi davano in Ladder lo stesso risultato. Concordo sul giudizio del linguaggio Awl, aggiungerei anche "professionale" . Io sono un elettrico, ero abituato al kop ma l'awl anche se ho cominciato a studiarlo per necessita', mi piace sempre di piu'. 

Grazie ancora per il vostro intervento. 

Link al commento
Condividi su altri siti

3 ore fa, Anikare ha scritto:

ma l'awl anche se ho cominciato a studiarlo per necessita', mi piace sempre di piu'. 

Non ti ci affezionare troppo. Sarà usato sempre meno.
Anzi, consiglio anche a te di utilizzarlo per i programmi esistenti, ma di evitarlo nei programmi nuovi.
U po' dispiace anche a me, perché, in alcuni casi, è più pratico e più immediato anche del testo strutturato. Ma, prima o poi, sparirà.

 

4 ore fa, Anikare ha scritto:

ho copiato la parte del programma dove avevo dubbi anche se con indirizzi a caso

Il problema non erano gli indirizzi presi a caso, ma il fatto che avevi tagliato una parte del segmento, stravolgendone completamente la logica.

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