Author Topic: Problemi risposta grafico in funzione del tempo  (Read 7948 times)

0 Members and 3 Guests are viewing this topic.

Offline XxJokerxX

  • Novizio del forum
  • *
  • Posts: 30
  • Karma: 0
  • Novizio
Problemi risposta grafico in funzione del tempo
« on: 28 March , 2014, 19:11:05 PM »
Ho fatto un grafico che varia la X in funzione del tempo (è la risposta di un oscillatore semplice), ci sono due grafici, il primo mostra lo spostamento, il secondo grafica lo spostamento in funzione del tempo. Ho un problema, quando faccio partire la sub fino ad un certo tempo il grafico va avanti a step, poi dopo un po il grafico si blocca. Quando si sblocca mostra il grafico completo.
Spero di essere stato chiaro!
Il codice è il seguente...
Code: [Select]
Private Sub CommandButton1_Click()
Dim X(), T() As Variant
k = Range("E3")
m = Range("F3")
w = k / m
i = 0
Step = -5
Do Until Step = 180
OraAttuale = Timer
Step = Step + 1
Tempo = Step * m / k
Call OSCILLAZIONIlibereNONsmorzate(Range("B3"), Range("C3"), Tempo, Range("D3"), Range("E3"), Range("F3"), Xt)
With ChartObjects(1).Chart.SeriesCollection(1)
.Name = "X(t)"
.XValues = Xt
.Values = 0
End With
With ChartObjects(2).Chart.SeriesCollection(1)
i = i + 1
ReDim Preserve X(i), T(i)
X(i) = Xt
T(i) = Tempo
.Name = "X(t)"
.XValues = T
.Values = X
End With
waitTime = TimeSerial(newHour, newMinute, 0.5)
Application.Wait Now + waitTime
Loop
End Sub



Sub OSCILLAZIONIlibereNONsmorzate(Xo, Vo, Tempo, Coeffsmorzamento, Rigidezza, Massa, Xt)
w = (Rigidezza / Massa) ^ 0.5
tao = w * Tempo
Xt = Xo * Sin(tao) + Vo * Cos(tao)
End Sub

Offline g.iaria

  • Veterano del forum
  • ****
  • Posts: 627
  • Karma: 220
Re:Problemi risposta grafico in funzione del tempo
« Reply #1 on: 29 March , 2014, 11:28:11 AM »
Spero di essere stato chiaro!
Lo scopo che ti prefiggi è chiaro, un pò meno il metodo con cui visualizzarlo.
Da quello che lontanamente intuisco leggendo il codice tracci il grafico a step di 0.5 s, ed intendi procedere costruendo una curva con 185 punti.
Ma poi dici che "si blocca" e poi "si sblocca", e questa è una cosa devi spiegare meglio.
Dentro la routine ci sono anche molte variabili non definite delle quali non si comprende bene il loro scopo e che sembrano dei refusi.

Un bravo scienziato è una persona con delle idee originali.
Un bravo ingegnere è una persona che fa un progetto che funziona con il minor numero possibile di idee originali.

Freeman Dyson

Offline XxJokerxX

  • Novizio del forum
  • *
  • Posts: 30
  • Karma: 0
  • Novizio
Re:Problemi risposta grafico in funzione del tempo
« Reply #2 on: 29 March , 2014, 12:21:02 PM »
Scusa ma non è molto che uso vba e di programmazione prima di questo non ne sapevo nnt...cmq ho sistemato un po il codice spero si comprenda meglio:
Code: [Select]
Private Sub CommandButton1_Click()
Dim X(), T() As Variant
Xo = Range("B3") 'spostamento
Vo = Range("C3") 'velocità
Zita = Range("D3") 'smorzamento
k = Range("E3") 'rigidezza
m = Range("F3") 'massa
w = (k / m) ^ 1 / 2 'pulsazione


'Calcola lo spostamento massimo e sistema il grafico
Dim Xmax As Double
Xmax = ((Vo / w) ^ 2 + (Xo) ^ 2) ^ 0.5
'aggiusta grafico
With ChartObjects(2).Chart
  With .Axes(xlValue)
            .MaximumScale = Round(Xmax * 2, 1)
            .MinimumScale = Round(-Xmax * 2, 1)
             .MajorUnit = Round(Abs(Xmax), 0)
            .MaximumScaleIsAuto = False
            .MinimumScaleIsAuto = False
            .MajorUnitIsAuto = False
  End With
  With .Axes(xlCategory)
            .MaximumScale = Range("H3") * 1.2
            .MinimumScale = 0
            .MajorUnit = 1
            .MaximumScaleIsAuto = False
            .MinimumScaleIsAuto = False
            .MajorUnitIsAuto = False
  End With
End With
'-----'


i = 0
Step = -2
Do Until Step > Range("H3") * w ' lo step è la pulsazione (il range è il tempo che viene definito nel foglio)

Step = Step + 2
Tempo = Step / w
Call OSCILLAZIONIlibereNONsmorzate(Xo, Vo, Tempo, Zita, k, m, Xt) 'CAlcola la Xt (zita non è necessario a questa sub...per il momento)

'Grafico "pendolo"
'ASTA
With ChartObjects(1).Chart.SeriesCollection(1)
.Name = "X(t)"
.XValues = Array(Xt / Abs(Xmax) / 2, 0)
.Values = Array(1, 0)
End With
'MASSA
With ChartObjects(1).Chart.SeriesCollection(2)
.Name = "X(t)"
.XValues = Xt / Abs(Xmax) / 2
.Values = 1
End With

'Grafico X(t)-t
With ChartObjects(2).Chart.SeriesCollection(1)
i = i + 1
ReDim Preserve X(i), T(i)
X(i) = Xt
T(i) = Tempo
.Name = "X(t)"
.XValues = T
.Values = X
End With

'Faccio una pausa per poter vedere come varia lo spostamento
waitTime = TimeSerial(newHour, newMinute, 0.5)
Application.Wait Now + waitTime
Loop
End Sub

Allora il codice in questo modo si blocca quando inserisco tempi alti, come se superato un po di tempo di calcolo excel fermasse il calcolo "in tempo reale", dopodiché finisce il calcolo e restituisce il grafico completo.
Scusa l'ignoranza è possibile inserire il file così lo puoi provare e vedere il problema?

Offline g.iaria

  • Veterano del forum
  • ****
  • Posts: 627
  • Karma: 220
Re:Problemi risposta grafico in funzione del tempo
« Reply #3 on: 29 March , 2014, 18:24:02 PM »
Scusa l'ignoranza è possibile inserire il file così lo puoi provare e vedere il problema?
Sotto al riquadro dove scrivi il testo del messaggio dovresti trovare la scritta "Allegati ed altre opzioni", fai click sopra e puoi allegare un file al messaggio.
Un bravo scienziato è una persona con delle idee originali.
Un bravo ingegnere è una persona che fa un progetto che funziona con il minor numero possibile di idee originali.

Freeman Dyson

Offline XxJokerxX

  • Novizio del forum
  • *
  • Posts: 30
  • Karma: 0
  • Novizio
Re:Problemi risposta grafico in funzione del tempo
« Reply #4 on: 30 March , 2014, 21:42:55 PM »
Ci potrebbero essere degli errori cmq il file è questo

Offline g.iaria

  • Veterano del forum
  • ****
  • Posts: 627
  • Karma: 220
Re:Problemi risposta grafico in funzione del tempo
« Reply #5 on: 31 March , 2014, 21:20:44 PM »
Puoi postare una copia salvata in formato .xls (Excel 2003)?
Ho difficoltà ad aprire il file.
Un bravo scienziato è una persona con delle idee originali.
Un bravo ingegnere è una persona che fa un progetto che funziona con il minor numero possibile di idee originali.

Freeman Dyson

Offline XxJokerxX

  • Novizio del forum
  • *
  • Posts: 30
  • Karma: 0
  • Novizio
Re:Problemi risposta grafico in funzione del tempo
« Reply #6 on: 31 March , 2014, 22:55:36 PM »
Eccolo

Offline g.iaria

  • Veterano del forum
  • ****
  • Posts: 627
  • Karma: 220
Re:Problemi risposta grafico in funzione del tempo
« Reply #7 on: 01 April , 2014, 22:06:37 PM »
Ho visto il file.
Ci sono due problemi.
Il primo è un errore nel calcolo della frequenza angolare di vibrazione in cui prendi il valore della rigidezza dal foglio, dove ha unità di misura in [kN/m], mentre nel calcolo di w dovrebbe avere unità di [N/m] se la massa è in [kg]:
Code: [Select]
Xo = Range("B3") 'spostamento
Vo = Range("C3") 'velocità
zita = Range("D3") 'smorzamento
k = Range("E3") 'rigidezza
m = Range("F3") 'massa
w = (k / m) ^ 0.5 'pulsazione
e quindi il valore di k andrebbe convertito in [N/m] prima di calcolare w.

Il secondo riguarda la tecnica che usi per "bloccare il tempo":
Code: [Select]
'Faccio una pausa per poter vedere come varia lo spostamento
    waitTime = TimeSerial(newHour, newMinute, 0.5)
    Application.Wait Now + waitTime
Il problema è il valore dei secondi che immetti nella funzione TimeSerial, a questa funzione potrai anche inserire delle frazioni di secondo ma lei le convertirà sempre nel numero intero più vicino, in questo caso se tu metti 0.5 lei lo considererà pari a 0, se metti 0.6 invece lo considererà 1.
Se metti un valore unitario il grafico verrà costruito a scatti di 1 secondo e la resa estetica non è il massimo.
Ti consiglio di leggere questo articolo:
http://www.cpearson.com/excel/WaitFunctions.aspx
dove vengono illustrate tecniche alternative che consentono un tracciamento del grafico nel tempo più fluido, ed in particolare quella che ricorre alla funzione API Sleep, che è di semplice ed immediato impiego.
Un bravo scienziato è una persona con delle idee originali.
Un bravo ingegnere è una persona che fa un progetto che funziona con il minor numero possibile di idee originali.

Freeman Dyson

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24