none
Schieberegister RRS feed

  • Frage

  • Hallo,
    ich habe ein Objekt ToProduce
    ToProduce hat viele Eigenschaften, die während des Bearbeitungszyklus befüllt werden.
    Segment1, Segment2, Segment3, Segment4, Segment5

    Das Objekt durchläuft alle Segmente und ist mit einer ID versehen.
    Es kann, sollte nie sein, dass im Segment1 die gleiche ID vorliegt wie im Segment4.
    Welche Mechanismen würden sich hier anbieten?
    Übergang von 1 zu 2
       Lösche ich erst bei 1, halte es irgendwie temporär,
        füge es bei 2 ein?
       Erst bei 2 einfügen, dann bei 1 löschen.
    Wenn es von Hand entnommen wird, warum auch immer, wird
    eine Synchronisation denke ich schwierig oder kennt jemand hier
    einen Lösungsansatz?

    ProductID   1---1 ProductInfos  (also eine 1:1 Verbindung)
    Diese werden durch die Fertigungslinie durchgeschleust.

    Viele Grüße Sandra

    Dienstag, 10. Januar 2017 17:44

Alle Antworten

  • Hallo Sandra,

    ich würde eine List<T> und keine x verschiedenen Eigenschaften nehmen. Die kannst Du dann problemlos durchlaufen und alle Werte auf Eindeutigkeit prüfen.

    Ansonsten bleibt dir nur eine Prüfroutine, die jede Eigenschaft liest, die Werte in einer Liste ablegt und schaut, ob es den gleich Wert in mehreren Eigenschaften gibt. Letztendlich dasselbe wie oben nur halt mit dem Umweg, alle Eigenschaften einzeln lesen und prüfen zu müssen.

    Was Du mit "Lösche ... halte es temporär", "Von Hand entnommen" ... meinst, erschließt sich mir noch nicht mal ansatzweise.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 10. Januar 2017 17:49
    Moderator
  • Was Du mit "Lösche ... halte es temporär", "Von Hand entnommen" ... meinst, erschließt sich mir noch nicht mal ansatzweise.



    Hallo Stefan,

    ich habe ein Produkt, das eine Fertigungskette durchläuft.

    Jedes Segment bearbeitet das Produkt, es kommen neue Eigenschaften hinzu.

    D.h. ich muss das Produkt weitertransportieren.

    Normal werden alle 5 Segmente durchlaufen. Jetzt kann es sein, dass jemand was manuell entnimmt.

    So in etwa verstanden?

    Grüße Sandra

    Dienstag, 10. Januar 2017 18:09
  • Hallo Sandra,

    den Ablauf habe ich schon verstanden. Aber deine Frage dazu nicht. Bzw. erkenne ich da keine Fragestellung.

    Zudem bleiben für mich noch einige weitere Fragen offen:

    Woran erkennst Du, wann ein Produkt das Segment wechseln soll?

    Gibt es mehrere parallele Verarbeitungen oder immer nur eine? Sind die Segmente also produktbezogen oder gibt es insgesamt fünf Segmente und in jedes kann jeweils ein Produkt?

    Was soll passieren, wenn das Produkt Segment1 verlassen soll, Segment2 aber noch belegt ist?

    Wird immer von Segment1 und Segment2 in Segment3 ... gewechselt? Oder kann es auch mal sein, dass ein Segment übersprungen wird?

    Wie entnimmt jemand etwas "manuell" und wie erkennst Du das? Was soll in einem solchen Fall passieren?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 10. Januar 2017 18:14
    Moderator
  • Hi Sandra,
    was Du beschreibst, ist ein typischer Zustandsautomat. Dein ObjectToProduce hat immer einen definierten Zustand. In jedem Zustand werden Schritte ausgeführt, die letztendlich zu einem neuen Zustand führen. Sobald ein neuer Zustand eingestellt wird, geht automatisch der vorherige verlogen. Da braucht nichts gelöscht zu werden.

    Wenn es sein kann/soll, dass ein ObjectToProduce zu einem Zeitpunkt mehrere Zustände annehmen kann und damit parallele Verarbeitungen zulässig sind, dann muss der Zustand als BitFlag implementiert werden.

    Eine Beziehung einer ProduktInfo zu mehreren ObjectToProduce's ist eine typische Master-Child Beziehung, solange die ProduktInfo etwas quasistatisches ist. Wenn Du unter ProduktInfo die Zustandsinformation innerhalb des Verarbeitungsprozesses verstehst, dann kann das eine Master-Child-Beziehung vom ObjectToProduce zu mehreren ProduktInfo-Objekten sein.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    Dienstag, 10. Januar 2017 18:27
  • Hallo Zusammen,

    Danke für Eure Antworten.
    Es sind immer 5 Segmente, ja. (Prinzip 1 Maschine, unterteilt in 5 Prozesse)
    Wenn was entnommen wird kann es eben sein, dass ich es nicht mitbekomme.
       - z.B. Sensor nicht aktiv.
    Betrachten wir erst mal den GUT Fall, keine Manipulation.

    Bild_

    5 Segmente, 5 Zustände, meinst Du das Peter?
    Jedes Produkt hat eine ID
    Jedes Produkt hat Eigenschaften, die während der Bearbeitung befüllt werden.
      ID   1:1 Produkt   Beziehung.
     
    Die ID wird für jedes Produkt(product) hochgezählt
    also von 1 bis 5  (5 Produkte werden bearbeitet)
                 6 bis 10
                 11 bis 15
                 usw.
    Kurzum die ID ist ein globaler Zähler.
     
    ID ist eindeutig und hat immer genau 1 Produkt.
    Das Produkt 1:n Eigenschaften
    Ich müsste dann evtl. doch eine List<T> machen.
    Ich habe immer 5 Items, 5 Segmente, 5 Prozesse.
    Transportgeschichte.
      Produkt kommt ins Segment2 und bekommt das über einen Sensor mit.
     
    Dictionary<Zustand, T oder ID> dictStatesSegmente

    Falls Ihr noch Tipps, evtl. Konzeptbeispiele habt, bedanke ich mich im Voraus.

    Viele Grüße Sandra

    Mittwoch, 11. Januar 2017 17:20
  • Hi Sandra,
    zuerst solltest Du die Terminologie innerhalb des threads einheitlich beibehalten. So kann man nicht erkennen, was ein Segment ist und wohin Deine ObjectToProduce verschwunden sind.

    Wenn ein ObjectToProduce aus dem Ausgangs-Thread dasselbe ist wie jetzt ein Produkt, dann ist unklar, was jetzt ein Segment sein soll.

    Ich meine, dass ein Produkt einen Zustand hat, den jeder Prozessschritt am Ende verändert. Der Zustandsautomat entscheidet dann in Abhängigkeit vom aktuellen Zustand eines Produktes, welcher Prozess als Nächstes zu starten ist. Ob der Prozess gestartet werden kann, kann von Kapazitäten abhängen, z.B. von der Verfügbarkeit eines Segmentes, falls Du damit den Dienst meinst, der den Prozess bedient.

    Wenn ein Prozess ein Produkt verliert, dann verbleibt das Produkt im unvollendeten Zustand bezüglich des angefangenen Prozesses. Wenn dann ein Segment bereit ist, einen Prozess mit einem neuen Produkt zu beginnen, wo ist dann das Problem?


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 11. Januar 2017 20:04
  • Hi,

    ich habe noch ein paar Fragen:

    1. Wird die ID nur innerhalb dieser Maschine verwendet oder bleibt diese permanent dem Produkt zugeordnet?
    2. Wo wird die ID gespeichert?
    3. Gibt es in der Maschine eine SPS oder steuert deine Software die Prozesse?
    4. Wie wird das Produkt weitertransportiert, Band, Handling, Taktbalken, Werkstückträger...
    5. Kann die Produkt-ID gelesen werden (RFID, Barcode...)?

    Vom Konzept her, würde ich sagen, das die ID in eine Datenbank gehört, damit sie bei Stromausfall nicht verloren gehen kann. Des weiteren muss sichergestellt werden, das es eine zuverlässige Signalkette gibt, wenn die Produkte weitertransportiert werden. Das heißt, wenn in Segment 3 ein Produkt manuell entnommen wird, kommt es an Segment 4 nicht an und da du weißt welche ID dort zu erwarten ist, kannst du diese löschen.

    Ich habe schon ähnliches gemacht und gehasst. In einigen Fällen ging es soweit, das nach einem manuellen Eingriff bestätigt werden musste, welche Teile sich in welchen Segmenten befinden oder quittiert werden musste, wenn die Anlage festgestellt hat, das manipuliert wurde.


    Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP

    Donnerstag, 12. Januar 2017 10:17
  • Hallo Peter,

     

    , wo ist dann das Problem?

    Danke für Deine Antwort.

    Ja hast natürlich wieder Recht. Man sollte bei den Bezeichnern bleiben.

     

    Das Problem ist, wie handelt man diese Konstellation.

    D.h. Jedes ObjectToProduce erhält eine eindeutige Nummer, dieses wird

    durch die Maschine mit den 5 markanten Segmente durchgeschleust, bearbeitet.

     

    Segment 3 wird was entnommen, z.B. die ID067

    Im Segment 4 ist die ID066 drin.

    Das nächste ObjectToProduce ist die ID068, nicht die zu erwartende ID066.

     

    ObjectToProduce

       hat diverse Eigenschaften, die von jedem Segment befüllt werden.

      

    Irgendwie sicher kompliziert, hoffe in etwa verstanden, was ich meine.

     

    Gibt es hier theoretische Lösungskonzepte, das wäre die Frage zu meinem Problem.

    Wie takte ich durch diese Schrittkette.

     

    Welche Hilfsmittel eignen sich?

     - Stichwort

        - Listen

         - Dictionaries

        

    Viele Grüße Sandra

    c


    • Bearbeitet Sandra Bauer Donnerstag, 12. Januar 2017 17:57 Bild
    Donnerstag, 12. Januar 2017 17:56
  • Hi Sandra,
    nach Deiner Zeichnung und Deinen Beschreibungen nehme ich an, dass Segment ein technologischer Fertigungsabschnitt ist. Außerdem haben die ObjectToProduce keine eigene Identifikation, sondern im Programm wird nur ein Zähler mitgeführt, der als Schlüssel für die Zuordnung von Eigenschaftswerten dient.

    Wenn das so ist, dann hast Du keine Chance zu ermitteln, ob die Zuordnung ObjectToProduce zu Eigenschaftswerten in jedem Schritt richtig ist. D.h., Du kannst nicht erkennen, wenn ein ObjectToProduce den Prozess aus irgendeinem Grund vorzeitig verlässt.

    Für mich gibt es nur eine Lösung: Chargenverfolgung. Jedes ObjectToProduce bekommt selbst oder der Träger eine ID, z.B. als QR oder RFID. Dieser ID kann dann eine ID, z.B. fortlaufender Autoert in der Software zugeordnet werden.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Freitag, 13. Januar 2017 08:26
  • Hallo Peter,
    Danke für Deine Antwort.
    ok, die Entnahme kann ich nicht 100% ig sicherstellen.
    Wie würdest Du die Durchtaktung (States) realisieren.
    Entnahme muss dann irgendwie bestätig werden, etc. um einen reibungslosen Ablauf zu ermöglichen.
    Mit einem Dictionary wie abgebildet?
    Wie sieht die theoretische Durchschleusung aus?

    Viele Grüße  Sandra

    s

    Freitag, 13. Januar 2017 18:38
  • Hi Sandra,
    unklar ist mir immer noch, was ein Segment bei Dir ist.

    Wenn ein Segment ein "Arbeitsplatz" ist, dann gibt es eine Liste von Segmenten und eine Liste von ObjectToProduce. Von welchem Typ diese Listen sind, hängt davon ab, wie sie genutzt werden sollten. Ein typisiertes Dictionary wäre eine der Lösungsmöglichkeiten. Wenn der Inhalt aber beispielsweise mit WPF visualisiert werden soll, dann wäre eine ObservableCollection eine bessere Alternative.

    Sowohl ein Segment als auch ein ObjectToProduce haben u.a. Zustandseigenschaften und gegenseitige Bezüge. Über die Zustandseigenschaften kann man erkennen, ob ein Segment derzeit mit der Bearbeitung eines ObjectToProduce beschäftigt ist, und bei Bedarf über den Bezug das betreffende ObjectToProduce ermitteln. Über die Zustandseigenschaften des ObjectToProduce kann man den Bearbeitungsfortschritt erkennen und bei Bedarf auch, von welchem Segment das ObjectToProduce bearbeitet wird und an welchem Segment es als nächstes zu bearbeiten ist.

    Am wichtigsten und bestimmt auch am kompliziertesten ist die Bestimmung der Eigenschaften eines Segmentes und auch eines ObjectToProduce und ggf. auch weiterer Objekte, die ggf. als Unterobjekte benötigt werden. Dafür sind die lokalen Informationsprozesse zu spezifizieren (welche Daten fallen an, welche Ergebnisse werden benötigt). Daraus kann man den lokalen Datenpuffer spezifizieren.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Samstag, 14. Januar 2017 06:29

  • unklar ist mir immer noch, was ein Segment bei Dir ist.


    Hallo Peter,
    ein Segment ist ein Bearbeitungsschritt.
    Anbei eine andere Darstellung.
    Wenn Du mir die Grundansätze geben könntest, wäre es wieder sehr nett.
    Gerne Beispiel mit WPF.
    Vielen Dank im Voraus.

    Grüße Sandra

    andere Darstellung

    Dienstag, 17. Januar 2017 18:27
  • Hallo Stefan,

    ja Danke für Deinen Beitrag.
    Kannst Du dennoch kurz was zu meinen Antworten sagen?
    Wenn ja, Danke im Voraus.

     

    >1.Wird die ID nur innerhalb dieser Maschine verwendet oder bleibt diese

    >  permanent dem Produkt zugeordnet?

    Mein Part ist der C# Teil. Die ID  gilt nur innerhalb der Maschine,

    Durchsatzzählung etc.

    >2.Wo wird die ID gespeichert?

    wird mir von der SPS übermittelt.

    >3.Gibt es in der Maschine eine SPS oder steuert deine Software die Prozesse?

    SPS steuert, C# macht die Anbindung an SCADA Systeme

    Es ist eine SPS drin.

       SPS in C++ -------- Interface ---- C# Applikation

    >4.Wie wird das Produkt weitertransportiert, Band, Handling, Taktbalken, Werkstückträger...

    Transportband, teils über Werkstückträger, wenn die Teile klein sind.

    >5.Kann die Produkt-ID gelesen werden (RFID, Barcode...)?

    Nein, kein Barcode, Datamatrix etc.

    Starte ich die Anwendung komplett neu, fängt der Zähler wieder bei 1 an.

     

    Viele Grüße Sandra

    Mittwoch, 18. Januar 2017 17:35