Vai al contenuto
PLC Forum


Cmp ==i - AWL-KOP


Messaggi consigliati

Inserito:

Salve

Scusate ma sto imparando lo step7 su S7-315-2dp

Trovo delle grosse differenze tra il KOP e AWL, in particolare sul comando CMP ==I.

in AWL scrivo

L MW 100

L MW 200

==I

= A 2.0

e con gli stessi valori posso usare il KOP

se invece in AWL scrivo

L MB 100

L MB 200

==I

= A 2.0

il compilatore KOP non mi accetta i valori in ingresso.

Mi sono perso qualche passaggio? devo inserire in ingresso i valori con qualche formato particolare?

saluti

renluis


Inserita:

L'istruzione CMP ==I confronta due numeri interi, che per definizione sono a 16 bit e quindi sono due Word, non due byte.

Quindi una variabile INT deve essere necesariamente almeno una MW.

Inserita:

Ok

ma come mai in AWL funziona e in KOP no?

ciao

renluis

Cristina Fantoni
Inserita:

Perche', come dice giustamente mbiella, ina variabile INT è necessariamente una word -16 bit-, quindi MW, se tu utilizzi una variabile MB è un byte -8 bit-, quindi non puo' funzionare, ma solo perche' il tipo di variabile byte non e' corretto per un INT.

Spero di essere stata chiara. ;)

:wub:

Inserita:

In KOP non funziona perchè l'istruzione è un controllo tra due numeri a 16 bit quindi tu DEVI introdurre 2 variabili a 16 bit, in quanto il blocchetto di confronto va visto come una funzione che accetta solo valori a 16 bit.

In AWL puoi scrivere quello che vuoi in quanto tu carichi il primo accumulatore , poi con un'altra istruzione l sposti il primo accumulatore nel secondo e carichi il primo , poi confronti i 2 accumulatori.

Anche se può sembrare strano programmare in AWL o in kop e fup non è proprio la stessa cosa.

In AWL tu puoi scrivere

L MD 100

L mb 200

==I

= A 2.0

Il PLC accetta tutto però capisci che un confronto come quello scritto sopra non ha molto senso , il KOP e il FUP evita il poter compiere questi errori.

Anche se un po' contorto penso sia chiaro quello che ti ho spiegato.

Ciao

Steu

Inserita:

intanto grazie a cristina, a steu, e a mbiella

Ma allora come faccio a confrontare in KOP due variabili MB a -8 bit- ?

Grazie

renluis

Inserita:

La tua domanda è lecita devi apoggiare i tuoi byte a delle word (magari locali) e poi fare il confronto tra valori a 16 bit.

Ho fatto delle prove , ma nè nell'. e nel catalogo dello step 7 esistono "blocchetti" di confronto tra 2 variabili in byte.

ciao

Steu

Inserita:

renluis, purtroppo devi sapere che Siemens deve in qualche modo ostacolarti la programmazione se no non ci si diverte. Quello che puoi fare è scrivertelo in AWL. Oppure se sei sicuro di non utilizzare mai il byte precedente (e quindi sia sempre = 0), utilizza tranquillamente il KOP comparando due word, ma fai attenzione a ciò che ti dico:

Esempio... tu vuoi comparare due byte MB10 e MB20 ed attivare una bobina M0.0

in AWL scrivi

L MB10

L MB20

==I

=M0.0

in KOP non puoi utilizzare i byte, ma solo word quindi scriverai nel blocco CMP==I

MW9

MW19

solo se sei sicuro che MB9 e MB19 siano =0 e che non utilizzi mai le word MW8 e MW18

In questo modo se l'AWL ti da fastidio puoi ottenere lo stesso risultato anche in KOP

Tutte le operazioni che vorrai eseguire sui byte MB10 e MB20 dovrai in realtà eseguirle sulle word MW9 e MW19

La spiegazione è semplice e risiede nel fatto che la word MW9 è composta dai byte MB9 + MB10

Se per esempio tu caricassi il valore 211 nella word MW9 ti accorgerai che MB9 = 0 e MB10 = 211

E' solo un trucco (inutile a mio parere), ma se proprio vuoi il KOP!!!

Io ti consiglierei di imparare bene l'AWL e prenderci bene la mano.

Tieni conto che altri PLC non hanno questi tipi di problemi: uno su tutti Allen Bradley

Inserita:
Siemens deve in qualche modo ostacolarti la programmazione se no non ci si diverte

Finalmente ho capito il perchè del successo di Siemens... :blink:

Scherzi a parte, qualche volta, lavorando con Siemens, forte dell'esperienza con altri sistemi, mi capita di pensare davvero che in giro ci sia un sacco di gente a cui piace complicarsi (... e tanto...) la vita. <_<

Beh, che devo dirvi.... Buon divertimento, io ve lo lascio tutto!!! :rolleyes:

Inserita:

Puoi anche aggirare in KOP il controllo del tipo di operando.

Apri il blocco, poi apri: Strumenti\Impostazioni\KOP FUP e deseleziona "Controllo tipo di operandi".

Inserita:

grazie rguaresc funziona benissimo non ci avevo pensato

ciao

Steu

Inserita:

A parte le valide soluzioni che ti sono state proposte non capisco perchè vuoi per forza fare tutto in KOP, visto i limiti che il KOP Siemens ha.

In un blocco ci puoi far stare sia segmenti in KOP che segmenti in AWL, il mio consiglio è di scrivere le istruzioni base (logica a contatti) in KOP, le altre in AWL.

CIAO

Inserita:

x beppeconti

Non è che io voglia assolutamente usare il KOP, siccome sto imparando e ho trovato questo problema, pensavo di aver sbagliato qualcosa io; e non pensavo certo ad una limitazione del KOP

però a questo punto mi sorgono altri dubbi

se ho una lista così

L MB 100

L MB 101

==I

= A 2.0

nel confronto entrano in campo MB 99 e MB 102

Ringrazio ancora tutti i partecipanti alla discussione che finora è stata molto esaustiva e costruttiva

renalui

Inserita:

Noooo, non volevo confonderti col mio giochetto.... non ti sbagliare coi tipi di variabili che usi.

Se scrivi variabili MB scrivi sempre e solo queste, o meglio modificherai gli 8 bit che le compongono

Se scrivi variabili MW scriverai entrambi i byte che le compongono e quindi gli 8 + 8 bit.

con la tua istruzione

L MB 100

L MB 101

==I

= A 2.0

non entra in gioco nessun altro byte se non quello da te dichiarato

Con questa istruzione invece inizia il casino (chiamato Siemens)

L MW 100

L MW 101

==I

= A 2.0

in questo caso si mettono a confronto MB100 + MB101 == MB101 + MB102

e come puoi ben capire è un disastro che sarebbe sempre da evitare (salvo vere e proprie necessità)

Cristina Fantoni
Inserita:
Con questa istruzione invece inizia il casino (chiamato Siemens)

L MW 100

L MW 101

==I

= A 2.0

in questo caso si mettono a confronto MB100 + MB101 == MB101 + MB102

e come puoi ben capire è un disastro che sarebbe sempre da evitare (salvo vere e proprie necessità)

A prescindere dal fatto che concordo che l'U.C.A.S. (Ufficio Complicazione Affari Semplici) di Siemens e' efficientissimo, e ci se ne rende conto quando si devono fare operazioni particolari con le analogiche, :( e' pero' vero che la "regola di sovrapposizione" e' valida anche in altri tipi di PLC, per esempio, in Schneider:

MW0   >  MB0 + MB1
MW1   >  MB2 + MB3
---
MD(F)0   >   MW0 + MW1
MD(F)1   >   MW1 + MW2
---

Quindi anche qui bisogna stare attenti: quando usi una MD(i) o un MF(i) si occupano sia la MW(i) che la MW(i+1), altro discorso e' per la sovrapposizione dei byte... :huh:

:wub:

Inserita:

Ringrazio tutti ancora

Le spiegazioni che mi avete dato sono illuminanti :rolleyes:

cercherò di utilizzare solo AWL, e nel frattempo spero che qualche dirigente siemens commissioni la revisione dei mauali step 7 a qualcuno come voi, in modo da avere spiegazioni ed esempi comprensibili anche a chi si avvicina a questo mondo.

Salutoni :)

renluis

Inserita:

si puo anche utilizzare i byte , ppartendo dall'indirizzo a word , basta mascherare il byte che non interessa

prima delle operazioni e dopo , cioe al trasferimento (move).

ciao

  • 11 years later...
Inserita: (modificato)

Ciao a tutti.

so che la discussione è ormai datata ma da poco ho avuto un problema simile che volevo condividere...

Allora, ho cominciato a scrivere, in FUP con step 7 v5.5.0.0 (2010) e ho scritto regolarmente (ATTENZIONE: con l'operando equivalente EQ_I della cartella operazioni di confronto) 

LB1 --| EQI |

0     --|   >   |--- |= M20.0| 

e mi ha accettato, la scritta in byte...

A questo punto, contento del risultato (provato anche sulla CPU) apro il progetto con step 7, v 5.5 + SP1...

E lo trovo scritto solo in AWL senza possibilità di convertirlo!!!

provo a riscriverlo ma mi da, come nel caso citato, errore di sintassi se provo a dargli il byte (sia diretto che simbolico).

inoltre, il blocco di comparazione ora è scritto CMP, non più EQ,GT o NE (a seconda della comparazione).

ho provato a portare s7 a sp4 pensando ad un errore, ma poi leggendo qui ho capito che è tutto "regolare"...

non credo che la cosa possa essere d'aiuto, ma mi sembrava utile scriverla per casi futuri..

un saluto!!

Modificato: da Stefano.86
Giuseppe Signorella
Inserita:

Ciao Stefano,

Effettivamente la discussione è alquanto vetusta.

Accodarsi ad una discussione esistente, oltre a creare confusione, è anche contro il regolamento del forum.

Ti conviene aprirne una nuova tutta tua in quanto questa discussione è chiusa.

Buon proseguimento.

 

 

********************DISCUSSIONE CHIUSA************************

  • Giuseppe Signorella locked this discussione
Ospite
Questa discussione è chiusa alle risposte.
×
×
  • Crea nuovo/a...