Vai al contenuto
PLC Forum


Linguaggio St - Moltiplicazione Di 2 Word O Dword


Messaggi consigliati

Inserito:

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:

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 ?

Inserita:

Sto usando ST di Mitsubishi, GxWorks2... anche a me sembra stranissima come cosa... la logica vorrebbe che funzionasse

Inserita:

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

Inserita:

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:

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

Inserita:

ciao,

per quanto riguarda la prima operazione :

var1 := var1 * 1000;

dichiara le variabili come "Double Word[signed]"

e tutto si risolve

saluti da Valvolina

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