Vai al contenuto
PLC Forum


Linguaggi Di Programmazione


luca_82

Messaggi consigliati

Ciao a tutti, avrei bisogno di un consiglio da voi che sicuramente avete più esperienza di me!!

Ho sempre programmato l'S-7 1200 e di fatto in KOP, ora dovrei fare una serie di lavori con l'S-7 1200 che di fatto è una 300. Quello che ho capito è che i linguaggi testuali SCL e AWL ti permettono molto di più, premesso che dovrei partire da zero con entrambi ne vorrei imparare almeno per ora solamente uno dei due, sapete dirmi quale dei due è migliore ?

Sicuramente l'AWL è più datato mentre l'SCL è nuovo, converrebbe pensare già a qualcosa che guardi avanti?

grazie a tutti!!

Link al commento
Condividi su altri siti


con l'S-7 1200 che di fatto è una 300

Non capisco: devi programmare il 1200 o il 300?

Se devi programmare il 1200, la scelta non si pone: questa CPU non si può programmare in KO e in SCL, ma non in AWL.

Se devi programmare il 300, meglio sarebbe imparare sia AWL che SCL.

Io non vedo questi due linguaggi come alternativi. Per esempio, se devi operare con i puntatori, devi usare l'AWL.

L'SCL è molto versatile se devi fare cicli FOR NEXT, se devi operare su array, e per moltissime altre cose.

Non è il pià adatto, a mio avviso, per logiche booleane.

Diciamo che, ad oggi, si trovano sempre più programmi in linguaggio strutturato (SCL).

Modificato: da batta
Link al commento
Condividi su altri siti

Scusami Batta,ho sbagliato a scrivere, devo programmare l'IM151-8,che quindi è un 300...

Quindi da come scrivi è abbastanza comune trovare programmi scritti con diversi linguaggi Nello stesso progetto...?

Perdonami per la domanda banale ma fin ora purtroppo ho visto solo i miei di programmi!!

mi sono posto il problema perché devo da una word fare una codifica binaria di 8 bit che non corrispondono ad un byte,e ho pensato che senza usare il KOP sarei riuscito meglio.....

Link al commento
Condividi su altri siti

Quindi da come scrivi è abbastanza comune trovare programmi scritti con diversi linguaggi Nello stesso progetto...?

Certo.

E questo è un bene, perché ti permette di utilizzare il linguaggio che meglio si presta alla soluzione di ogni singolo problema.

Nelle cpu 300/400/1500 puoi anche usare KOP e l'AWL anche all'interno dello stesso blocco.

mi sono posto il problema perché devo da una word fare una codifica binaria di 8 bit che non corrispondono ad un byte,e ho pensato che senza usare il KOP sarei riuscito meglio.....

Probabilmente è così ma, se non descrivi meglio quello che devi fare, dare una risposta precisa è roba da indovini, non da tecnici.

Andando ad intuito, credo potresti fare uno shift a destra della word di un numero di bit tale da ritrovare i bit che ti interessano tutti nel byte di destra.

Modificato: da batta
Link al commento
Condividi su altri siti

Un mio consiglio, lascia perdere l'AWL meglio SCL almeno questo lo trovi anche su altri linguaggi di programmazione ed è più comprensibille del AWL.

Inviato dall'app. Mobile di PLC Forum da A0001

Link al commento
Condividi su altri siti

Un mio consiglio, lascia perdere l'AWL meglio SCL almeno questo lo trovi anche su altri linguaggi di programmazione ed è più comprensibille del AWL.

Inviato dall'app. Mobile di PLC Forum da A0001

Link al commento
Condividi su altri siti

Se, come scrivi nel primo post, vuoi per forza scegliere tra AWL ed SCL, e se ti interessa mettere le mani solo suoi tuoi programmi, ti consiglio anch'io di scegliere SCL.

Ma se pensi che dovrai mettere le mani anche su programmi scritti da altri, dovrai sicuramente fare i conti con l'AWL.

Secondo me scegliere di non usare uno dei linguaggi permessi, significa autolimitarsi.

Inoltre non è vero che l'AWL è difficile. Si scrivono le istruzioni una alla volta, così come vengono eseguite dal processore.

E, anche se a molti non interessa, nei PLC serie 300/400 è il linguaggio che ti permettere di ottenere il codice più efficiente.

Link al commento
Condividi su altri siti

Effettivamente Batta conoscere un solo linguaggio è autolimitarsi e non mi piace, ma non vorrei essere presuntuoso e pensare di imparare insieme sia AWL che SCL, farei una gran confusione credo, e proverò a farlo uno alla volta. Testualmente sono abituato con il linguaggio dei robot che è molto simile all'SCL, ma vedo il Plc che gira ciclicamente come un qualcosa del tutto diverso rispetto d un robot antropomorfo.

Quello che devo fare è gestire tale robot da remoto, per caricare il programma imposto un valore decimale in formato binario in una QB che il robot ha come ingressi, a seconda del valore che ha quando gli do il segnale di STROBE carica il giusto programma. Per verificare se l'operazione si è svolta correttamente lui mi dà 8 bit all'interno delle due word che ho nell'interfaccia tra robot e Plc. Per ora scrivo solo la Word che mi interessa:

DO1 DO2 DO3 DO4 DO5 DO6 DO7 DO8 DO9 DO10 DO11 D12 DO13 DO14 DO15 DO16 segnali robot

I11.0 I11.1 I11.2 I11.3 I11.4 I11.5 I11.6 I11.7 I12.0 I12.1 I12.2 I12.3 I12.4 I12.5 I12.6 I12.7 ingressi Plc

Lui imposta dalla DO3 alla DO10 (I11.2 a I12.1) lo stesso valore che io ho dato sulla QB in uscita, e devo quindi fare questo controllo per verificare che l'operazione di carico si sia svolta correttamente. Per fare questo pensavo in AWL di mettere la IW11 nell'accumulatore:

L IW11

A questo punto con l'istruzione TAW inverto i due byte nell'accumulatore per dargli il giusto peso e shifto di due bit verso destra, se non erro gli 8 bit che mi interessano dovrebbero rimanere nell'accumulatore ACCU1-L-L. Nascondo poi il primo Byte ACCU1-L-H mettendo il tutto in and con un'altra word,visto che quei segnali potrebbero essere alti:

UW W#16#00FF

A questo punto trasferisco il tutto nella MW10 che vado poi a paragonare alla QB che avevo in uscita. Questa è la soluzione che ho pensato, domani proverò a buttarla giù in AWL e vedrò se funziona....

Spero di essere riuscito a farti capire la mia applicazione, ed ogni soluzione per semplificare il tutto è ben accetta!! :smile: :smile:

Link al commento
Condividi su altri siti

Caricando IW11 il byte IB11 viene messo a sinistra, e il byte IB12 a destra.

Quindi non devi scambiare i byte, e devi fare uno shift a destra di 6 bit.

Giusta la mascheratura con

UW W#16#00FF

Poi meglio trasferire in MB10 e non in MW10.

Anzi, se ti serve solo il confronto con la QB di partenza, non c'è nemmeno bisogno di appoggiare il dato a MB10.

Una cosa di questo tipo, secondo me, è più facile scriverla in AWL che in SCL.

L IW10
SRW 6
L W#16#00FF
UW
L QBnn
==I
= Ok

Link al commento
Condividi su altri siti

Scusami Batta,magari faccio confusione io ma qualcosa non mi torna...

Se io non inverto i byte e shifto semplicemente di sei posizioni perdo l'ingresso

%I12.0,%I12.1 e %I12.2 e mi ritrovo nei bit meno significativi della byte l'%I12.6 e %I12.7.

Tanto se non erro lui caricando IW11 nell'accumulatore mette così i bit nel byte:

%I11.7-%I11.6-%I11.5-%I11.4-%I11.3-%I11.2-%I11.1-%I11.0-%I12.7-%I11.6-%I12.5-%I12.4-%I12.3-%I12.2-%I12.1-%I12.0

La byte che dovrei leggere io è la seguente:

%I12.1-%I12.0-%I11.7-%I11.6-%I11.5-%I11.4-%I11.3-%I11.2-%I11.1-%I11.0

O magari sto facendo confusione io...

Link al commento
Condividi su altri siti

Sì, hai ragione.

Ho letto troppo in fretta il post e mi sono banalmente lasciato ingannare dall'ordine inverso dei bit (con il bit 0 a sx e il bit 7 a dx).

Quindi lo scambio dei byte ti serve.

Il codice potrebbe essere il seguente:

L IW11
TAW
SRW 2
L W#16#00FF
UW
l QBnn
==I
= Ok

Dopo l'AND WORD nell'accumulatore, che è sempre a 32 bit, ti trovi i tre byte a sinistra tutti a zero, e nel byte a destra I12.1-I12.0-I11.7-I11.6-I11.5-I11.4-I11.3-I11.2

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