Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: VB Warte Zeit

  1. #1
    Registriert seit
    19.01.2015
    Beiträge
    35
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich stehe gerade vor einem Problem.

    Ich bekomme über einen OPC-Server 3-Boolean Wert. Das Programm soll warten bis die 3-Werte auf True gesetzt werden.
    Ich habe das jetzt über eine Do While schleife gemacht. Die Werte werden im OPC-Server auf True gesetzt. Aber jedoch nicht in VB.
    Wenn ich eine Msgbox mit rein mache werden die Werte auch aktualisiert. Wenn ich eine sleep einsetzt werden ja die Werte auch nicht aktualisiert.
    Welche Möglichkeit gibt es denn noch. Timer? Aber wie mach ich das dann genau.
    Zitieren Zitieren VB Warte Zeit  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    VB ... und was ?
    VB.Net, VB-Script ? In welchem Entwicklungsumfeld ?
    Falls zum Beispiel Visual Studio und VB.Net so wäre der Einsatz eines Timers eine Möglichkeit, da du dadurch dein Programm (und das Drum-herum) responsiv hältst.

    Vielleicht schreibst du erstmal etwas mehr ...

    Gruß
    Larry

  3. #3
    Registriert seit
    19.01.2015
    Beiträge
    35
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    VB.Net

    Mit einer USB-Kamera mache ich mir ein Foto von einem weißen Spielfeld, da liegen ein paar schwarze Spielsteine.
    Mit einem VB.Net Programm kann ich mir schon die Positionen der Spielsteine auswerten und kann diese auch per OPC-Server auf die Soft-SPS übertragen.
    Da das Programm ja schnell durchlaufen wird kommt der Roboter nicht nach.
    Deswegen lasse ich mir von den 3 POSMO-Motoren die Werte übertragen wann die Soll-Positionen erreicht sind.
    Dies wollte ich in einer Do While Schleife machen, aber es werden die Werte von dem OPC-Server nicht mehr aktualisierte.
    Wenn in den OPC-Scout reinschau werden dort die Werte aktualisierte, auch wenn ich in der Do While Schleife mir die Werte anzeigen lasse stehen die auch mit True, also Ziel Position erreicht, nur wenn ich die Msgbox wieder rauchs mache hängt er in der Schleife fest.
    Wenn ich jetzt ein Sleep einbau werden die Werte auch nicht aktualisierte.
    Code:
    'Hier ist noch eine Sub wo ich die Soll-Positionen an die Motoren übertrage.
    
    Privat Sub Soll_Position Erreicht()
      Do While (Pos_5 = False or Pos_6 = False or Pos_7 = False) ' Mache weil ein Fahrauftrag noch nicht Quitiert wurde
           Werte_Abfragen()
      Loop
    End Sub
    
    Privat Sub Werte_Abfragen()
    ' Hier eine Msgbox funktioniert alles wunderbar
        Pos_5 = chkFahrauftragerledigtM5.Checked 'Werte vom OPC-Server abfragen
        Pos_6 = chkFahrauftragerledigtM6.Checked 'Werte vom OPC-Server abfragen
        Pos_7 = chkFahrauftragerledigtM7.Checked 'Werte vom OPC-Server abfragen
    End Sub
    Wie funktioniert das mit dem Timer genau, bin noch in der Techniker-Schule und da haben wir das nie so genau gemacht mit den Timer.

  4. #4
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Ich vermute mal, dass da mehrere Threads aktiv sind. Der OPC Teil wird nur geupdatet, wenn sonst nichts zu tun ist, sprich die MSG Box gibt während man auf den Tastendruck wartet, die Resourcen frei. Deshalb geht es damit.

    Ohne Box dreht sich die While Schleife ohne Unterbrechung in sich selbst. (Früher nannte Microsoft das so schön "Kooperatives Multitasking", das hier wäre dann nicht kooperativ programmiert)
    Als Freelancer immer auf der Suche nach interessanten Projekten.

  5. #5
    Registriert seit
    13.12.2011
    Beiträge
    1.505
    Danke
    163
    Erhielt 181 Danke für 164 Beiträge

    Standard

    Ich bin zwar etwas aus der Übung, aber ich meine mich zu erinnern, das bei einer MsgBox vor der Anzeige der Box diverse Queues abgearbeitet werden. Vermutlich musst Du die Aktualisierung der OPC-Daten in dem Sub noch anstossen.

    Von irgendwas mit Internetzugang gesendet.

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    die Do-While-Schleife läßt dem Rest von Windows keine Zeit mehr noch irgend etwas zu machen. VB.Net arbeitet vorwiegend Event-basiert und um die auszuführen darf das Programm sich nicht selbst blockieren. In dienem Fall werden zwar die Zwischen-Variablen im .Net-Programm gesetzt - sie können aber gar nicht mehr weiter geleitet werden.

    Einen Timer instanzierst du ein Mal für dein Programm oder deine Form und sagst ihm sein Intervall (in Millisekunden). Nun löst der Timer in dem Intervall seinen .Tick aus, den du an eine Methode hängen kannst (ähnlich wie zum Beispiel Button.MouseClick). In dieser Methode kannst du nun z.B. deine Abfragen und Zuweisungen machen - sie wird zyklisch in dem Intervall aufgerufen und anschließend wieder beendet (um anderen Funktionen "eine Chance zu geben").

    Hier ein Beispiel, wie das aussehen könnte :
    Code:
    ' in deiner Form :
        Public WithEvents myTimer As New System.Windows.Forms.Timer With {.Interval = 100, .Enabled = True} 
    
    ' als Timer-Methode :
       Private Sub myTimer_Tick(sender As Object, e As System.EventArgs) Handles myTimer.Tick
            ' hier deine Aktionen ausführen
        End Sub
    Gruß
    Larry

  7. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    oliver.tonn (19.03.2016)

  8. #7
    Registriert seit
    13.12.2011
    Beiträge
    1.505
    Danke
    163
    Erhielt 181 Danke für 164 Beiträge

    Standard

    Oder so, stimmt das gibt es ja auch noch. Ansonsten müsste er die Abarbeitung aller anstehenden Dinge in der While-Schleife selber anstossen. Wie gesagt, bin schon zu lange raus und weiß nur noch das es da was gibt, aber nicht mehr wie es heißt.

    Von irgendwas mit Internetzugang gesendet.

  9. #8
    Registriert seit
    19.01.2015
    Beiträge
    35
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Das heißt ich muss in der Timer Sub meine OPC Daten aktualisieren?
    Code:
    Privat Sub Soll_Position Erreicht()
      Do While (Pos_5 = False or Pos_6 = False or Pos_7 = False) ' Mache weil ein Fahrauftrag noch nicht Quitiert wurde
           Werte_Abfragen()
      Loop
    End Sub
    
    Private Sub Timer_Tick(sender As Object, e As System.EventArgs) Handles myTimer.Tick
        Pos_5 = chkFahrauftragerledigtM5.Checked 'Werte vom OPC-Server abfragen
        Pos_6 = chkFahrauftragerledigtM6.Checked 'Werte vom OPC-Server abfragen
        Pos_7 = chkFahrauftragerledigtM7.Checked 'Werte vom OPC-Server abfragen
    End Sub
    Oder Verstehe ich da was falsch?
    Oder auch schon gleich die Do While Schleife?

  10. #9
    Registriert seit
    25.02.2010
    Beiträge
    640
    Danke
    36
    Erhielt 126 Danke für 115 Beiträge

    Standard

    Eher so:
    Code:
      Private Sub Soll_Position Erreicht()
            myTimer.Interval = 200               'Intervall festlegen
            myTimer.Enabled = True             'Timer anschalten
        End Sub
    
        Private Sub Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles myTimer.Tick
            Werte_Abfragen()
            If Pos_5 = True And Pos_6 = True And Pos_7 = True Then ' alle Positionen gefunden
                myTimer.Enabled = False                                            ' Timer ausschalten
                Exit Sub                                                                    ' zurück zur Hauptroutine
    oder hier weiter im Programm
            End If
        End Sub
    Die Schleife ist dabei überflüssig.
    Anmerkung: Du arbeitest nur mit globalen Variablen, besser wäre Funktionen zu schreiben mit Rückgabewerten. Bei längeren Programmen hast du sonst hunderte von globalen Variablen, wo die Übersichtlichkeit stark leidet.
    Holger

  11. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... wobei ich den Timer (oder besser einen Backgroundworker) nicht abschalten würde sondern immer weiter abfragen lassen würde.
    Du kannst es im Grunde mit dem OB1 der SPS vergleichen - der läuft ja auch dauernd - nur was er macht ändert sich ggf.

    Gruß
    Larry

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 19.12.2011, 17:42
  2. Zeit anhalten
    Von Glitsch Master im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 22.09.2009, 20:20
  3. CPU Zeit
    Von Pinguino im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.04.2007, 09:46
  4. Antworten: 4
    Letzter Beitrag: 25.01.2005, 15:22
  5. S7 - Zeit?
    Von Orion im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 13.11.2003, 08:42

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •