Purtroppo non sono riuscito a "far girare" il tuo modello (io uso R2012a) per cui non sono in grado di "vedere" il comportamento anomalo che riferisci.
Ad ogni modo, la funzione che hai scritto sembra corretta.
Forse il problema è nei blocchi che precedono blocco "Function" (FIFO Queue, Get Attribute).
Come ho scritto nella risposta precedente ho creato un modello molto semplice con due blocchi "Constant" che generano i valori "VALORE" e "ID" in input ad un blocco "Function" che, a sua volta invia l'output ad uno "Scope".
Avendo aggiunto ";" in
y=zeros(1,2);
e
y(ID) = contatore(ID)
ed avendolo tolto in:
contatore(ID) = contatore(ID) + VALORE
Nella Command Window ottengo:
y =
0 0
y =
5 0
y =
10 0
y =
15 0
y =
20 0
Lo "0" che compare è dovuto al fatto che l'output della funzione (y) è dichiarato come array (1x2) e nel modello fornisco un solo valore di input per "VALORE" e "ID".
Ho provato a far generare due valori ai blocchi "Constant" per "VALORE" e "ID" (rispettivamente:
VALORE = 5
ID = 1
VALORE = 3
ID = 2
ed ho ottenuto:
y =
0 0
y =
5 3
y =
10 6
y =
15 9
y =
20 12
y =
25 15
Per poter gestire 2 valori, ho dovuto modificare la seguente istruzione:
% if (ID==0)
if (~all(ID))
return
end
A parte questo, il modello sembra funzionare.
Guardando i valori di "y" stampati nella Command Window ed il grafico dello "Scope" non vedo il comportamento anomalo che descrivi nella domanda.
Di seguito l'immagine del modello e dello "scope".
Hope this helps.
Allegati: