Vai al contenuto
PLC Forum


Word e Interi


jumpier

Messaggi consigliati

Ciao a tutti!

Ho iniziato da poco ad usare Step 7 ed avrei una domandina da porre.

Dunque, io ho a disposizione una cpu 318 2DP; i DB sono stati definiti da persone di terze parti ed in particolare contengono variabili dichiarate come "INT" interi, "DINT" doppi interi o struture a word raggruppanti ognuna 16 variabili "BOOL" booleane e cioè espresse a bit. Ora il problema che ho riscontrato è che non riesco ad utilizzare il blocco in KOP per effettuare l'operazione di AND a word ma devo tassativamente passare all'AWL. Per spiegarmi meglio faccio un esempio:

1)-DB5.DBW0 è definita di tipo INT

2)-DB5.DBW10 è una struttura che racchiude 16 bit (da DB5.DBX10.0 a DB5.DBX11.7)

Se uso il blocco KOP per effetture l'operazione di AND a WORD tra le due variabili citate in precedenza, il compilatore mi restituisce un errore su DB5.DBW0.

L'alternativa rimane scrivere il seguente codice in AWL:

L DB5.DBW 0

L DB5.DBW 10

UW

T LW0 ecc...

Qualcuno di Voi sa dirmi se posso rimediare a tale inconveniente? Oppure se trasformo le variabili di tipo "INT" in tipo "WORD" le cose migliorano? Ed il programma ha bisogno di qualche accorgimento o no? Grazie a tutti per l'aiuto.

Ciao, Jumpier

Link al commento
Condividi su altri siti


Il KOP non lo puoi usare per tutto, secondo me ti conviene imparare AWL anche se è un pò incasinato una volta che lo conosci riesci a risolvere molti problemi e sopratutto ti permette di risparmiare un sacco di memoria.

:D

Link al commento
Condividi su altri siti

Infoplc+Nov 9 2002, 08:47 PM-->
CITAZIONE(Infoplc @ Nov 9 2002, 08:47 PM)

Ciao Infoplc

Il problema non è usare l'AWL, quanto il fatto che il cliente finale richiede il programma tassativamente sviluppato in KOP per agevolare la teleassistenza sulle sue macchine. Qualche idea in merito su come ovviare al problema?

Ciao e grazie - Jumpier

Link al commento
Condividi su altri siti

Ciao Jumpier

Non è tanto il compilatore a creare il problema, ma il filtro dell'editor del KOP che è rigido, teutonico. Se imposti DB5.DBW0 va a controllare il tipo credendo di farti un favore.

Per ingannarlo, se il DB è uno solo apri, prima, separatamente il DB5 e, poi, come input scrivi solo DBW0, DBW10 così non sapendo a quale DB si riferiscono l'editor non farà resistenza.

Se i confronti sono tra DB diversi cancella provvisoriamente i due DB.

Saluti

R.G.

Link al commento
Condividi su altri siti

OK, grazie a tutti per l'aiuto. L'idea di aprire prima il DB è buona ma purtroppo la posso sfruttare in pochissime occasioni visto che i DB a cui ci si riferisce con una sola riga di programmazione sono 4 o 5 alla volta. Se possibile, però, vorrei ancora sapere una cosa; se cambio la definizione delle variabili contenute nei DB da "INT" a "WORD", ottengo delle migliorie? Ma soprattutto comprometto il buon funzionamento del programma? Chiedo ciò perchè sto lavorando su di un programma piuttosto complesso NON di mia realizzazione e quindi necessiterei di sapere se in linea di massima vi sono delle controindicazioni.

Grazie ancora - Jumpier

Link al commento
Condividi su altri siti

Jumpier

Cambiando la definizione delle variabili esistenti potresti causare l'impossibilità di vedere in KOP parti di programma già fatte.

Per non correre rischi potresti trasferire le variabili che ti interessano;

Le istruzioni logiche a parola lavorano in modo "bitwise" cioè bit a bit senza considerare la struttura formale dei 16 o 32 bit. Puoi senz'altro trasferire le variabili usando il MOVE che non modifica la posizione dei bit e ti permette di passare da un tipo di dati a un altro.

Un altro consiglio: cancella dalla lista dei simboli l'attribuzione del simbolo al DB, perché se c'è avvia il solito meccanismo di controllo del tipo.

Saluti

R.G.

Link al commento
Condividi su altri siti

jumpier+Nov 10 2002, 02:37 PM-->
CITAZIONE(jumpier @ Nov 10 2002, 02:37 PM)

Potresti ovviare al problema nel segunete modo:

dall'editor KOP/FUP/AWL clicca su Strumenti -> Impostazioni.

Seleziona la cartella KOP/FUP controlla che non sia selezionato Controlla tipo di operando.

In questo modo l'editor non controlla che i tipi di dati siano uguali.

Saluti B)

Link al commento
Condividi su altri siti

Grazie a tutti per l'aiuto; ho risolto semplicemente seguendo il consiglio di Nazari Luca. Lo so, forse era una banalità e potevo pensarci da solo ma siccome sono alle prime armi .... forse sono perdonabile :P

Ciao a tutti e buon lavoro

Link al commento
Condividi su altri siti

Occorre aggiungere che con questa soluzione risolvi il problema, ma che in questo modo se sbagli istruzione, per esempio con un DINT utilizzi una istruzione KOP ==I l'editor non ti da nessun errore, ma il tuo dato viene trattato in modo errato.

Potresti anche provara a convertire la dichiarazione da Word o DWord a INT o DINT. Oltrettutto in questo modo la visualizzazione in On-line del DB ti rappresente valori contenuti in formato numerico e non esadecimale.

Saluti :rolleyes:

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