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

Cell array filtern und Duration ermitteln

 

Harry Poppins

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.05.2017, 15:13     Titel: Cell array filtern und Duration ermitteln
  Antworten mit Zitat      
Hallo sehr geehrte Community,

ich habe folgende Cell array (unten nur ein sehr kleiner Ausschnitt):

Spalten sind:
1. Maschine
2. Datum
3. Uhrzeit
4. Maschinenteil
5. Sensor
6. Kritischer Betriebsbereich (KB) 1
7. Kritischer Betriebsbereich (KB) 2
8. Zähler für KB1 pro Jahr
9. Zähler für KB1 pro Tag
10. Stop der Maschine
11. Abschaltdauer pro Maschine

Die Tabelle kann mehrere Maschinen mit jeweils 3 Teilen und wiederum jeweils 3 Sensoren beinhalten.
Wenn KB1 eintritt und der Zähler pro Jahr (hier schon mit 07:59:59 vorbelastet) oder pro Tag (auch vorbelastet) voll ist, wird ein Stop Befehl für die Maschine gegeben.
Wenn KB2 eintritt, wird der Stop-Befehl sofort gegeben.
In der Tabelle ist dafür in Sekundenauflösung jedes Ereignis hinterlegt.

Code:

7   21.06.2017   20:50:29   2   1   Ja   Nein   07:59:59   00:00:29   Nein   00:00:00
7   21.06.2017   20:50:29   2   2   Ja   Nein   07:59:59   00:00:29   Nein   00:00:00
7   21.06.2017   20:50:29   2   3   Ja   Nein   07:59:59   00:00:29   Nein   00:00:00
7   21.06.2017   20:50:30   2   1   Ja   Nein   08:00:00   00:00:30   Ja   00:00:01
7   21.06.2017   20:50:30   2   2   Ja   Nein   08:00:00   00:00:30   Ja   00:00:01
7   21.06.2017   20:50:30   2   3   Ja   Nein   08:00:00   00:00:30   Ja   00:00:01
7   21.06.2017   20:50:31   2   1   Ja   Nein   08:00:01   00:00:31   Ja   00:00:02
7   21.06.2017   20:50:31   2   2   Ja   Nein   08:00:01   00:00:31   Ja   00:00:02
7   21.06.2017   20:50:31   2   3   Ja   Nein   08:00:01   00:00:31   Ja   00:00:02
7   21.06.2017   20:50:32   2   1   Ja   Nein   08:00:02   00:00:32   Ja   00:00:03
7   21.06.2017   20:50:32   2   2   Ja   Nein   08:00:02   00:00:32   Ja   00:00:03
7   21.06.2017   20:50:32   2   3   Ja   Nein   08:00:02   00:00:32   Ja   00:00:03
 


Jetzt möchte ich mir am Ende aber ein Cell Array ausgeben, worin die Informationen kompakter stehen:
Maschine Nr.7 kritischer Betriebsbereich 1 an Maschinenteil 2, Sensor 1 über 00:00:03 Stunden.
Maschine Nr.7 kritischer Betriebsbereich 1 an Maschinenteil 2, Sensor 2 über 00:00:03 Stunden.
etc.

Es soll also die Dauer pro Maschine, pro Maschinenteil, pro Sensor gezählt werden, die sich aus Spalte 6 mit 'Ja' oder Spalte 7 mit 'Ja' ergibt.
Wenn also für Maschine 7 KB1 für 3 Minuten eintritt und KB2 zeitversetzt auch eintritt, möchte ich natürlich 2 Ausgaben haben.

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt und es kann mir jemand weiterhelfen Smile

Viele Grüße

___________________________
Matlab R2017a


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.05.2017, 16:42     Titel: Re: Cell array filtern und Duration ermitteln
  Antworten mit Zitat      
Hallo Harry Poppins,

Die Frage enthält viele Informationen, die mit dem Problöem nichts zu tun haben:

Zitat:
Spalten sind:
1. Maschine
2. Datum
3. Uhrzeit
4. Maschinenteil
...

Diesen Satz verstehe ich nicht:
Zitat:
Wenn KB1 eintritt und der Zähler pro Jahr (hier schon mit 07:59:59 vorbelastet) oder pro Tag (auch vorbelastet) voll ist, wird ein Stop Befehl für die Maschine gegeben.

Zitat:
Wenn KB2 eintritt, wird der Stop-Befehl sofort gegeben.

Wie wäre es dann KB2 zu sagen, dass er nicht eintreten darf, damit nicht irgend jemand schon wieder so einen Stopp-Befehl gibt und alle Feierabend machen? Mit dem kann man doch bestimmt reden.

Zitat:
Es soll also die Dauer pro Maschine, pro Maschinenteil, pro Sensor gezählt werden, die sich aus Spalte 6 mit 'Ja' oder Spalte 7 mit 'Ja' ergibt.
Wenn also für Maschine 7 KB1 für 3 Minuten eintritt und KB2 zeitversetzt auch eintritt, möchte ich natürlich 2 Ausgaben haben.

Matlab selbst wird nicht die geringste Ahnung davon haben, was ein KB1 oder ein Maschinenteil ist. Das sind einfach Strings. Du möchtest in einem Cell-String nach bestimmten Strings suchen, vermutlich nach aufeinander folgenden gleichen Strings. Richtig? Und dann möchtest Du nur den start-Zeitpunkt und die Dauer angeben, oder?

Dann poste doch mal, was Du bisher versucht hast und erkläre, welche Probleme dabei auftreten. Lasse dabei alle Details weg, die für Matlab ohne Belang sind, "Teile", "Sensoren", "Maschinen".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harry Poppins
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 19.05.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 22.05.2017, 16:49     Titel: Re: Cell array filtern und Duration ermitteln
  Antworten mit Zitat      
Hey Jan,

danke für die schnelle Antwort. Hast Recht... viele Infos, die mit dem eigentlichen Problem nichts zu tun haben.

Jan S hat Folgendes geschrieben:
Wie wäre es dann KB2 zu sagen, dass er nicht eintreten darf, damit nicht irgend jemand schon wieder so einen Stopp-Befehl gibt und alle Feierabend machen? Mit dem kann man doch bestimmt reden.


Also das ist in Prinzip keine Option, weil diese definierten "Kritischen Betriebsbereiche" immer mal auftreten können. Der erste ist nur nichts ganz so kritisch wie der zweite, deshalb enthält dieser ein Zeitlimit, wie lang er auftreten darf. ---> aber ist auch egal!


Zitat:
Du möchtest in einem Cell-String nach bestimmten Strings suchen, vermutlich nach aufeinander folgenden gleichen Strings. Richtig? Und dann möchtest Du nur den start-Zeitpunkt und die Dauer angeben, oder?


Richtig!

Habs bisher nur sehr umständlich hinbekommen, indem ich mein Cell Array erst filtere. Nach der Zahl 7 in Spalte1, dann Zahl 2 in Spalte 4, dann Zahl 1 in Spalte 5. Dann habe ich ein Cell array mit den Infos, die ich brauche, könnte mir die erste Zeile und die letzte nehmen und die Strings voneinander abziehen.
Aber wie gesagt, finde ich sehr umständlich.


Code:


        ind_Maschine = C_MasterLog(:,1)==Maschine;
        Maschine_Tab = C_MasterLog(ind_Maschine,:);
        ind_Teil= Maschine_Tab(:,4)==Teil;
        Teil_Tab = Maschine_Tab(ind_Teil,:);
        ind_Sensor = Teil_Tab(:,5)==Sensor;
        Sensor_Tab = Teil_Tab(ind_Sensor,:);
        ind_KB2 = strcmpi(Sensor_Tab(:,7),'Ja');
        KB2_Tab = Maschine_Tab(ind_KB2,:);
        firstelement = KB2_Tab(1,3);
        lastelement = KB2_Tab(end,3);
        duration = lastelement - firstelement;

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