WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

VBA Makro umschreiben für Matlab

 

fiftyone_88
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 04.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2016, 19:40     Titel: VBA Makro umschreiben für Matlab
  Antworten mit Zitat      
Hallo miteinander,

ich habe ein kleines Problem, und zwar habe ich eine excel Datei mit Makros, in die ich Daten rein kopiere. dieser führt dann die Makros aus und gibt mir die Schwingbreiten und die anzahl dieser Schwingbreite der Datenreihe aus. Das Problem ist, dass meine Zeitreihe 120001 Zeilen lang ist und immer deshalb abkackt. Ich weiss ich könnte es ja in mehrere Teile aufteilen aber ich habe 100 davon und bei mehr als 5000 versagt das ding.

So nun meine frage und bitte zugleich. kennt sich jemand hier mit vba und matlab aus und könnte den quelltext umschreiben?
ich kenne mich überhaupt nicht mit Programmmierung aus und brauche das dringend so schnell es geht für eine Auswertung. es wäre super.

Die Datei ist im Anhang!

Klassieren - Zählen.xls
 Beschreibung:

Download
 Dateiname:  Klassieren - Zählen.xls
 Dateigröße:  1.08 MB
 Heruntergeladen:  819 mal
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.03.2016, 10:55     Titel: Re: VBA Makro umschreiben für Matlab
  Antworten mit Zitat      
Hallo fiftyone_88,

Wieso ist es ein Problem, dass die Zeitreihe 120001 Zeilen lang ist?
Hast Du mehrere 100 Zeitreihen oder Teile in einer Zeitreihe?
Bei mehr als 5000 was versagt was? Bekommst Du eine Fehlermeldung?

Ich habe das Excel-File zunächst manuell untersucht. Eine Arbeitsmappe von Office2003 ist natürlich schon etwas historisch. Immerhin scheint sich kein Virus darin zu befinden, ich übernehme aber keine Garantie dafür. Ich zumindest führe keine Makros aus fremden Office-Dateien aus.

Um einen Matlab-Code zu schreiben, müsste man wissen, in welcher Form die Inputs vorliegen und welches Ergebnis Du suchst. Einfach ein Excel-Macro "umzuschreiben" ist nicht trivial, denn die eigentlichen Berechnungen werden wahrscheinlich weniger Code beanspruchen als der Import und Export der Daten und Ergebnisse. Wie das geschehen soll, wurde hier allerdings noch gar nicht angedeutet.

Da eine Lösung nich mal eben in 10 Minuten geschrieben werden kann, schlage ich vor, Du postest das Problem in "Programmieraufträge" und bietest ein angemessenen Lohn dafür an.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
fiftyone_88
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 04.03.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2016, 14:47     Titel:
  Antworten mit Zitat      
Zunächst einmal Danke, das du du auf mein Problem eingehst. Es tut mir leid dass noch so viele offene Fragen bestehen.

Ich habe insgesamt 12 Zeitreihen a 600 Sekunden. Das Aufzeichnungsintervall beträgt 0.005 Sekunden, deshalb habe ich 120.001 Zeilen.
Eine Zeitreihe beinhaltet neben der Zeit, acht weitere Spalten mit den Werten (Belastungen) die aufgezeichnet wurden.

In das Excelfile von 97 (mein Prof hat das damals programmiert und nie wieder geändert) wird die gewünschte Spalte rein kopiert und auf den Button geklickt. Dieser startet die Makros und man erhält die Anzahl und höhe verschiedener Amplituden. Das ist die Rainflow Zählmethode, aber eine spezielle, denn ich kann die Klassenbreite bestimmen. Da sehr wenige mit diesem Verfahren vertraut sind und ich niemanden das Recherchieren auferlegen wollte habe ich einfach geschrieben Quelltext ändern.

Es bricht aufgrund der Datenmenge ab.
Da sind keine Schädlinge enthalten.

Input sind wie gesagt immer die Aufzeichnungen und die gewünschte Klassenbreite. Die anderen Parameter Frequenz und Anzahl der Durchläufe bleiben Konstant.

Ausgabe wurde eben erläutert.

Ich habe mich da mal selber ran gesetzt in all meiner Verzweiflung und bin schon relativ weit gekommen,google hilft Smile

Vielleicht kann mir ja jemand beim Rest helfen, da dies der kompliziertes Bereich ist.

Das Programm in Excel sieht ja wie folgt aus

Public die_datei, Datei, blat As String
Public v, klassenbreite As Single
Public spaltenzähl_die_Datei As Integer

-----------------------------------------------
Sub Parameter()
j1 = 2
j = 1 'Einlesen
j4 = j
klassenbreite = Cells(2, j1 + 5).Value
Count = Cells(3, j1 + 5).Value
hz = Cells(1, j1 + 5).Value 'Hertz
End Sub
------------------------------------------------
Sub Klassieren_Zählen()
Klasse1
von_nach1
End Sub
-------------------------------------------
Sub Lösch()

Selection.ClearContents
Range("G4:G521").Select
Selection.ClearContents
Columns("H:IV").Select
Selection.ClearContents
Range("G4").Select
End Sub

Parametermakro wird durch die direkte Eingabe im Hauptmenü erlangt
Löschmakro ist equivalent zum clear in matlab (also gewünschte Variablen oder Arrays werden gelöscht)
Das Haupt Makro Klassieren und zählenbesteht aus Klasse1() und von_nach1. Klasse1() habe ich schon umgeschrieben, es kommen die gleichen Werte heraus:

clc;
%---Klasse1()---
%datei='Dateiname' in dem Ordner ""
%bereich='A1:A100'
daten=xlsread(cat(2,'C:\Users\fiftyone_88\Desktop\DLC\',datei), 1, bereich);
m=0;
i=0;
l=0;
while(i~=length(daten))
i=i+1;
m=m+1;

wert1=daten(i)/width;
l_1=l;
l=round(wert1);
if (i>1)
if (l==l_1)
m=m-1;
else q(m)=l;
end;
end;


end;
z=1;
i=0;
for i = 2Sadm-1)
if (q(i) > q(i - 1)) && (q(i) < q(i + 1)) && (i > 1)
else
if (q(i) < q(i - 1)) && (q(i) > q(i + 1)) && (i > 1)
else q2(z) = q(i);
z = z + 1;
end;
end;
end;
q2(z) = q(m);
q=q2.';

clear m l l_1 wert1 z;

%---Klasse1_End---

Makro von_nach habe ich bis jetzt bis hierhin:

%---Parametereingabe---
%width=Klassenbreite;
%count=Anzahl der Durchläufe;
%hz=Frequenz;
%---Parametereingabe_End---

%---from_to---

mini=min(q2);
abs_mini=abs(round(mini));
maxi=max(q2);
abs_maxi=abs(round(maxi));

if (mini<0 && maxi>=0) || (mini>=0 && maxi<0)
bins=abs_mini+abs_maxi;
else
bins=abs_mini-abs_maxi;
end;

bins=abs(bins);

Ab jetzt sieht es bisschen düster aus.

Er erstellt mit diesen Werten in Excel eine Matrix. z.B

abs_mini=3 und abs_maxi=6--> bins=3

die Matrix sieht dann so aus:

3 4 5 6
3
4
5 x
6

ALso eine 4 mal 4 Matrix. In diese Matrix werden später werte eingetragen, und dann gezählt wie oft zum beispiel die Amplitude 5 nach 6 vorkommt. Dieser Wert x steht dann am ende dort und wird ausgelesen als AMplitude 1. Die AMplitude 3 nach 4 ist equivalent und am ende werden alle AMplituden 1 zsm gezählt. die amplituden und ihre ANzahl werden am ende in eine neue matrix geschrieben undzwar so

A ni
1 1
2 3
3 2

wie mache ich das am besten.

edit: wie kann ich beim einlesen sagen bis eine leere zelle kommt? dann brauche ich das in zukunft nicht ändern wenn die anzahl der zeilen sich ändert
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.