Autor Beitrag
winx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 249



BeitragVerfasst: So 18.02.07 10:54 
Hallo,

bräuchte mal ein paar Tipps :-)

Mein Bekannter ist so von Schrittketten überzeugt (es geht um Maschinensteuerung).
Das sieht in etwas so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
            while (true)
            {

                switch (step)
                {
                    case 0:
                        {
                            //...
                            step = 1;
                        }
                    case 1:
                        {
                            //...
                            step = 2;
                        }
                    case 2:
                        {
                            //...
                            step = 3;
                        }
                    //... 

                }


Wenn in irgendeinem Schritt ein Fehler passiert springt er aus der Schleife und geht in ne FehlerFunktion...

Das ganze kommt aus der Maschinensteuerung, da wird immer so programmiert (laut Kollege)

So, jetzt zu meiner Frage:

Die Funktionen werden ellenlang und ich hasse Schrittketten!!!
Wie kann ich solche Schrittketten sauber ersetzen?

Mein Problem:

Ich stelle es mir irgendwie so vor:

Jeder Step, wird durch ein Objekt das irgendwas macht ersetzt.
Ich will keine Endlosschleife mehr verwenden.

Jede Objektaktion dauert aber ne Zeit lang. (bis die Maschine was macht)
und ich muß jeden Maschinenfehler (der asynchron von der Maschine kommt) abfangen, das kann ich per Event, den ich auch im Programm drin hab.

So: wie beende ich dann meine Aktionen (die zwangsläugig nacheinander geschehen müssen) wenn ich in der Main Klasse nen Event fange und diesen irgendwie den anderen Klassen mitteilen muß und dann auch noch aus dem eigenen Ablauf raus muß?

Also ich weiss es klingt etwas kompliziert? Vielleicht hat jemand ne ganz einfach Idee oder ein Konzept, wie man Schrittketten abschaffen kann???

Danke,
winx
frodus
Hält's aus hier
Beiträge: 6

Vista Home Premium
Visual C# 2005 Express
BeitragVerfasst: Mo 19.02.07 21:24 
Hi,

ich glaube um Dein Problem mit der Schrittkette (oder Statemachine) zu lösen solltest
du Dir mal 'delegate' und 'event' anschauen.
Mit den beiden konstrukten lässt sich da bestimmt was machen.


Gruss,

Frodus
winx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 249



BeitragVerfasst: Di 20.02.07 09:16 
Hi,

die beiden kenne ich schon :-)

Wie würdest du diese anwenden?

Greets,
winx
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 20.02.07 12:59 
Wenn Du schon bei C# und .NET bist, dann würde ich Dir empfehlen, die Windows Workflow Foundation von .NET 3.0 anzuschauen. Es gibt für VS2005 auch eine Extension Library, mit der Du visuell Workflows (bspw. State Machines oder Sequential Workflows) designen kannst. Vielleicht wäre das eine Erleichterung für Dich?!
frodus
Hält's aus hier
Beiträge: 6

Vista Home Premium
Visual C# 2005 Express
BeitragVerfasst: Di 20.02.07 22:29 
Hi,

ich habemal ein wenig darüber nachgedacht und ich glaube das meine Antwort ein wenig voreillig war.
Denn mit den Events kommst du wohl nicht um eine Statemachine vorbei.

/Frodus
winx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 249



BeitragVerfasst: Mi 21.02.07 09:33 
hab auch noch keine lösung gefunden, werde mir aber

a) diese Windows Workflow Foundation von .NET 3.0 angucken
b) jeweils eine eigene Methode pro Schritt schreiben und ein Dictionary<step,delegate> mit den Schritten und den zugehörigen Methoden füllen.
im Konstruktor wird eine Membervariable Step auf den ersten Schritt gesetzt.
Die Step-Methode würde dann einfach den entsprechenden Delegate aufrufen und danach Step erhöhen (round-about).
Wenn du jetzt noch den Operator ++ überlädst, kannst du mit myMachine++ einen Schritt auslösen."