Turing Inserito: 19 febbraio 2014 Segnala Inserito: 19 febbraio 2014 Salve a tutti, ho una variabile "var1" di tipo: Double Word[unsigned]/Bit String[32-bit] se provo a fare: var1 := var1 * 1000; dà errore (ok, è giusto penso io, perchè per default lui vede 1000 come Word Signed 16bit) allora faccio: var1 := var1 * INT_TO_DWORD(1000); ma dà il seguente errore: Type mismatch for '*'. Cambiando e definendo var1 di tipo Word[unsigned]/Bit String[16-bit] la situazione non cambia: var1 := var1 * INT_TO_WORD(1000); La cosa strana è che dichiarando anche una VAR_GLOBAL_CONSTANT di tipo Word[unsigned]/Bit String[16-bit], il codice del tipo: var1 := var1 * MY_WORD_CONSTANT; continua a dare lo stesso errore di tipi incompatibili... Dove è il problema?? Altra cosa: vorrei evitare conversioni inutili e dichiarare un valore costante inline, ad es. in Java un tipo Long lo posso dichiarare come: 1000L, in ST è possibile qualcosa di simile? E come? Grazie!
Gianmario Pedrani Inserita: 20 febbraio 2014 Segnala Inserita: 20 febbraio 2014 ciao io ho provato in Tia porta fare quello che hai scritto tu, e me lo fa fare senza problemi.. con che tipo di linguaggio, hai provato a fare questa operazione ?
Turing Inserita: 20 febbraio 2014 Autore Segnala Inserita: 20 febbraio 2014 Sto usando ST di Mitsubishi, GxWorks2... anche a me sembra stranissima come cosa... la logica vorrebbe che funzionasse
step-80 Inserita: 20 febbraio 2014 Segnala Inserita: 20 febbraio 2014 Ciao, l'unica cosa che mi viene in mente è questa: che valore iniziale dai a "var1"? Se non gli dai nessun valore, di default è zero, e magari una moltiplicazione per zero potrebbe generare questo errore. In somachine di Schneider ad esempio una divisione per zero fa andare in errore la cpu
Turing Inserita: 21 febbraio 2014 Autore Segnala Inserita: 21 febbraio 2014 Il valore per ora è sempre un valore costante... ma la moltiplicazione per zero comunque mi sembra ammissibile a differenza della divisione per 0 e sarebbe più corretto un errore di runtime al massimo più che un errore di compilazione.. comunque vi aggiorno se trovo la soluzione.
Roberto Gioachin Inserita: 21 febbraio 2014 Segnala Inserita: 21 febbraio 2014 La cosa strana è che tu abbia un errore con la prima delle istruzioni che hai scritto, mentre è normale che tu abbia errori con tutte le altre. Infatti non puoi usare "INT_TO_WORD" o "INT_TO_DWORD" per un valore costante, il compilatore sa da solo cosa deve fare. Poi hai dichiarato "MY_WORD_CONSTANT" come una Word Unsigned e la vuoi moltiplicare per una DWORD Unsigned, anche questo non è permesso. Secondo me ti devi concentrare sulla prima istruzione, per esempio in quale POU è stata inserita?, la variabile è locale o globale? non è per caso che sia stata dichiarata come una variabile di Input in una FC? Roberto
valvolina Inserita: 22 febbraio 2014 Segnala Inserita: 22 febbraio 2014 ciao, per quanto riguarda la prima operazione : var1 := var1 * 1000; dichiara le variabili come "Double Word[signed]" e tutto si risolve saluti da Valvolina
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora