Entwickler-Ecke

WinForms - Button reihenfolge


grisu2611 - Sa 06.10.07 15:35
Titel: Button reihenfolge
Hallo!

Habe eine Anwendung mit drei Buttons: "Spannung Ein" "Daten lesen" "Stop"

Wenn ich jetzt meine Anwendung starten möchte nur um die Spannung und Ströme zu messen und anschließend nur Stoppen will ohne Daten zu lesen geht das nicht!
Muss immer erst die Reihenfolge der Buttons nehmen wie sie oben steht!
Warum muss ich meine Anwendung immer wieder neu starten bevor ich wieder Spannung einschalten kann!

Bitte helft mir!

Danke!


Christian S. - Sa 06.10.07 15:58

Meine Kopie des Bundestrojaners scheint ein bisschen fehlerhaft zu sein und war daher nicht in der Lage, mir den relevanten Sourcecode von Deiner Festplatte zu liefern. Du wirst ihn also leider hier posten müssen :(


grisu2611 - Sa 06.10.07 16:10

Werd ich da hochgenommen? nicht böse sein aber was sprichst du mit mir?


Christian S. - Sa 06.10.07 16:14

user profile icongrisu2611 hat folgendes geschrieben:
Werd ich da hochgenommen?

Ein bisschen ;-)

user profile icongrisu2611 hat folgendes geschrieben:
nicht böse sein aber was sprichst du mit mir?

Lies Dir Dein Posting von oben mal durch. Wie soll man Dir helfen? Woher sollen wir wissen, wie Dein Programm arbeitet? Daher: Du musst uns die relevanten Teile Deines Quellcodes zeigen!


grisu2611 - Sa 06.10.07 16:29

naja is klar mit den greenhorns kann mans machen!!! :( :wink:

also hier der Code für die drei Buttons aus dem Programm herraus:


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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
private void spannungEinButton_Click(object sender, EventArgs e)
        {
            // Netzgerät ansteuern
            kanal = 0;
            spannung = 4.4;
            ausgabeSpg(kanal, spannung);
             
            // Bremse ansteuern
            kanal = 1;
            spannung = 0;
            ausgabeSpg(kanal, spannung);

            // Schütze schalten (Motor Ein, Links-/Rechtslauf)
            digitalAusgabe(digitalKanal);
        }

        private void datenEinlesneButton_Click(object sender, EventArgs e)
        {
            BuffersCompleted = 0;

            // Setzt alle vorher zugewiesenen Buffer frei falls wir die Zahl oder die Größe 
            // der Buffer erhöhen
            ainSS.BufferQueue.FreeAllQueuedBuffers();

            daqBuffers = new OlBuffer[anzahlVonBuffern];

            // Erstellt die Buffers zum speichern der Roh Daten
            // Plaziert die Buffers in der Schlange vom Analog Input Subsystem
            for (int i = 0; i < anzahlVonBuffern; ++i)
            {
                daqBuffers[i] = new OlBuffer(1250, ainSS); //1250= Anzahl der Samples pro Buffer

                ainSS.BufferQueue.QueueBuffer(daqBuffers[i]);
            }

            // Setzt den Datenfluß auf Kontinuierlich für den buffered I/O
            ainSS.DataFlow = DataFlow.Continuous;

            // Aktualisieren des internen Frequenzgebers
            ainSS.Clock.Frequency = 5000;

            // Reinigen der AnalogInputSubsystem Kanal Liste
            ainSS.ChannelList.Clear();

            
            // Fügt einen Kanal der Kanal Liste hinzu
            ainSS.ChannelList.Add(0);
            ainSS.ChannelList.Add(1);
            ainSS.ChannelList.Add(8);

            ainSS.ChannelType = ChannelType.SingleEnded;

            // Das Subsystem wird mit den vorhergegangen Einstellungen konfiguriert
            ainSS.Config();

            // If a buffer is not in the BufferQueue, queue it otherwise
            // skip it.
            for (int i = 0; i < anzahlVonBuffern; i++)
            {
                if ((daqBuffers[i].State == OlBuffer.BufferState.Idle) ||
                    (daqBuffers[i].State == OlBuffer.BufferState.Completed))
                    ainSS.BufferQueue.QueueBuffer(daqBuffers[i]);
            }

            // Startet einlesen der Daten
            ainSS.Start();

            // Bremse ansteuern
            kanal = 1;
            spannung = 0;
            ausgabeSpg(kanal, spannung);
            
        }
        
        private void stopButton_Click(object sender, EventArgs e)
        {
            try
            {
                // Stopt das Einlesen der Daten
                ainSS.Stop();

                // Relais ansteuern (ausschalten)
                digitalKanal = 0;
                digitalAusgabe(digitalKanal);

                // Netzteil ausschalten
                kanal = 0;
                spannung = 0;
                ausgabeSpg(kanal, spannung);

            }
            catch (OlException ex)
            {
                string err = ex.Message;
                statusBarPanel.Text = err;
                return;
            }    
        }


Christian S. - Sa 06.10.07 16:39

In der Methode zum Lesen der Daten wird ja anscheinend ainSS.Config(); und ainSS.Start(); aufgerufen. Ich könnte mir vorstellen, der Aufruf von ainSS.Stop(); in der Methode zum Stoppen wird fehlschlagen, wenn das nicht geschehen ist.

Ist aber nur ins Blaue geraten, weil ich die Komponente nicht kenne.

Helfen würde noch, wenn Du schreibst, was für ein Fehler kommt (z.B. welche Exception ausgelöst wird).


grisu2611 - Mo 08.10.07 07:57

Ein Fehler taucht leider nicht auf, es wird halt nur den Prüfstand nicht abgeschaltet! Erst wenn ich die Reihenfolge der Buttons betätige wie sie im Programmablauf sind!
Ist denn irgendwo die Reihenfolge festgelegt?


Christian S. - Mo 08.10.07 10:24

Du hast doch bestimmt 'ne Doku zu der ainSS-Klasse bekommen, guck da doch mal rein.


mutterholzbein - Do 17.01.08 15:26

user profile iconChristian S. hat folgendes geschrieben:
Meine Kopie des Bundestrojaners scheint ein bisschen fehlerhaft zu sein und war daher nicht in der Lage, mir den relevanten Sourcecode von Deiner Festplatte zu liefern. Du wirst ihn also leider hier posten müssen :(


*fg*
Sehe das ähnlich,gruß mhb


mutterholzbein - Do 17.01.08 15:50

user profile icongrisu2611 hat folgendes geschrieben:
Ein Fehler taucht leider nicht auf, es wird halt nur den Prüfstand nicht abgeschaltet! Erst wenn ich die Reihenfolge der Buttons betätige wie sie im Programmablauf sind!
Ist denn irgendwo die Reihenfolge festgelegt?

FALLS du immernoch nicht wissen solltest(bei dem alter des beitrags eher unwahrscheinlich ;) )
...ja die lässt sich festlegen:
->View[Anzeigen]->Aktivreihenfolge
dann nacheinander die str-elemente anklicken um die reihenfolge festlegen...

p.s. ich kann mir irgendwie auch nicht vorstellen das ainSS.Stop() funktioniert(wo ist aniSS eigentlich definiert?!). vielleicht solltest du es zusätzlich mit ner break-anweisung versuchen... aber das beste wäre wirklich sich die doku zu der klasse durchzulesen.

mal nebenbei, dass sieht sehr nach automatisierung(technik) aus, warum machst du das nicht mit Siemens-Step7? in der sprache gibt es vorgefertigte module die sich solcher probleme annehmen... :wink:

naja, trotzdem viel glück->greetz mhb