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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: VB Warte Zeit

  1. #11
    Registriert seit
    25.02.2010
    Beiträge
    618
    Danke
    35
    Erhielt 121 Danke für 110 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ..dann wäre er hier aber an der falschen Stelle. Dazu müsste die Struktur des gesamten Programms anders aufgebaut sein.
    Für Beginner ist es oftmals einfacher für jedes Ereignis einen neuen Timer zu benutzen.
    Holger

  2. #12
    Registriert seit
    03.03.2011
    Ort
    Tettnang
    Beiträge
    123
    Danke
    24
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo,

    so sollte es funktionieren:

    Do While (Pos_5 = False or Pos_6 = False or Pos_7 = False) ' Mache weil ein Fahrauftrag noch nicht Quitiert wurde
    Application.DoEvents()
    System.Threading.Thread.Sleep(10)

    Werte_Abfragen()
    Loop
    Grüße, Michael

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

    Standard

    Hallo,
    irgendwie bin ich zu blöd.
    Wenn ich die OPC-Scout Software öffne sehe ich das sich die Variablen änderen, nur in VB.Net nicht.

    Hab ihr mal den Code:
    Code:
    Imports SimaticNET.OPC.DAConnector
     
    Public Class Form1
     
        Dim Pos_5, Pos_6, Pos_7 As Boolean
     
        'Ablagepunkte der Spielsteine Rand
        Dim P1, P2, P3, P4, P5, P6, P7, P8, Mitte As Punkt
     
        Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) 'Eingänge
        Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer) 'Ausgänge
     
        Private Structure Punkt
            Dim X As Integer
            Dim Y As Integer
        End Structure
     
        Private Sub AblagePunkte …
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            SerialPort1.Open() 
        End Sub
     
        Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
            SerialPort1.Close()
        End Sub
     
        Private Sub chkSauger_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSauger.CheckedChanged
            If chkSauger.Checked = True Then
                SerialPort1.DtrEnable = True
            Else
                SerialPort1.DtrEnable = False
            End If
        End Sub
     
        Private Sub Turm()
            'Über Spielstein 1
            txtKordinateX.Text = P1.X
            txtKordinateY.Text = P1.Y
            chkHoch.Checked = True
     
            berechnen()
            chkStart.Checked = True
            Soll_Position_Erreicht()
      'Erst wenn die Soll-Position soll es hier weiter gehen
            'Auf Spielstein 1
            chkHoch.Checked = False
            berechnen()
            chkStart.Checked = True
        End Sub
     
      Private Sub Soll_Position Erreicht()
            myTimer.Interval = 200               'Intervall festlegen
            myTimer.Enabled = True              'Timer anschalten
        End Sub
    
        Private Sub Werte_Abfragen()
            Pos_5 = chkFahrauftragQuittierenM5.Checked 'Hier werden die CheckBoxen aktualisiert
            Pos_6 = chkFahrauftragQuittierenM6.Checked 'Sind also nicht direkt von dem OPC-Server
            Pos_7 = chkFahrauftragQuittierenM7.Checked 'Habe einen OPCDAConnector
        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
     
      End Class
    Gibt es eine Möglichkeit direkt auf die OPC-Variablen zuzugreifen?
    Habe im Internet noch nichts gefunden.

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

    Standard

    Hallo,
    habe da noch im Internt ein möglichkeit gefunden auf die OPC-Variable zuzugreifen.
    Code:
    Variable = ("S7:[OPC-IPC]Fahrauftrag_Quittieren")
    Es kommt jetzt aber die Meldung das eine Ungültige Konvertierung von der Zeichenfolge vorkommt.
    Es sind jedoch die zwei gleiche Variabletypen.
    Mit der anderen Möglichkeit bin ich auch noch nicht weiter gekommen.

  5. #15
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Hallo,
    Zitat Zitat von knoddelpusch Beitrag anzeigen
    Wenn ich die OPC-Scout Software öffne sehe ich das sich die Variablen änderen, nur in VB.Net nicht.
    Bisher hatte ich angenommen, dass du die fraglichen Variablen-Inhalte in dein VB-Programm eingelesen bekommst - nur mit der sinnvollen Abfrage so deine Probleme hast.
    Jetzt sieht es so aus, als wenn das absolut nicht der Fall wäre ...

    Zitat Zitat von knoddelpusch Beitrag anzeigen
    Gibt es eine Möglichkeit direkt auf die OPC-Variablen zuzugreifen?
    Habe im Internet noch nichts gefunden.
    Normalerweise läuft das in etwa so :
    Du fragst bei deinem OPC-Server die gewünschte Variable mit deren Namen (also der Namens-String der ihrer Zuordnung im OPC-Server entspricht) an und erhältst von ihm ein Object zurück, dass du dem passenden VB-Variablentyp zuordnen mußt.

    Wie das genau vonstatten geht hängt von deinem OPC-Server ab zu dem du eine Doku dafür haben solltest - ansonsten vielleicht mal den Hersteller desselben antriggern.
    Garantiert wirst du dafür eine Bibliothek (wharscheinlich eine DLL) in dein Projekt mit einbinden müssen.

    Generell gilt aber :
    Keine deiner Variablen bekommt von selber ihren neuen Wert zugeordnet ... du wirst das immer irgendwie abfragen müssen ...

    Gruß
    Larry

  6. #16
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Zitat Zitat von knoddelpusch Beitrag anzeigen
    Hallo,
    habe da noch im Internt ein möglichkeit gefunden auf die OPC-Variable zuzugreifen.
    Code:
    Variable = ("S7:[OPC-IPC]Fahrauftrag_Quittieren")
    Es kommt jetzt aber die Meldung das eine Ungültige Konvertierung von der Zeichenfolge vorkommt.
    Es sind jedoch die zwei gleiche Variabletypen.
    Mit der anderen Möglichkeit bin ich auch noch nicht weiter gekommen.
    So etwas habe ich mal bei Excel gesehen - hier wird ein Feld mit dem OPC-Zugriffspfad verlinkt.
    Das kannst du m.W. unter VB.Net so nicht nachstellen ...

  7. #17
    Registriert seit
    25.02.2010
    Beiträge
    618
    Danke
    35
    Erhielt 121 Danke für 110 Beiträge

    Standard

    Suche mal bei Siemens nach der Beitrags-ID: 21043779.
    Holger

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

    Standard

    Morgen,
    ne die Variablen habe ich schon in VB. Mein Programm läuft ja auch wenn ich mit Msgboxen arbeite das ich sehe wo es hängen bleibt, aber da geht es ja, weil ja das Programm eine „Pause“ einlegt.
    Also ich habe in VB einen OPCDAConnector mit diesem kann ich meinen Variablen einen Wert von dem OPC zuweisen. Dies ändern sich auch wenn ich gerade in keiner Schleife fest hänge.
    Aber da kann ich die Werte von dem OPC Server auf keine Variablen legen sondern nur auf Windows CheckBox oder Label usw. also nicht dirket auf eine Variable.

    Code:
        Private Sub Werte_Abfragen()
            Pos_5 = chkFahrauftragQuittierenM5.Checked 'Hier werden die CheckBoxen aktualisiert
            Pos_6 = chkFahrauftragQuittierenM6.Checked 'Sind also nicht direkt von dem OPC-Server
            Pos_7 = chkFahrauftragQuittierenM7.Checked 'Habe einen OPCDAConnector
        End Sub
    Hier frage ich ja nur die CheckBox ab, diese ändert sich auch wenn ich in keiner Schleife fest hänge.
    Und mit der
    Code:
    Variable = ("S7:[OPC-IPC]Fahrauftrag_Quittieren")
    Habe ich gedacht, dass ich direkt auf die OPC-Variable zugreifen kann ohne CheckBox oder Label wo ich vorher den Wert drauf lege.

  9. #19
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... das heißt, du hast die OPC-Variable mit dem Control verlinkt ...?
    In dem Fall funktioniert das Ganze dann so lange, wie das Control responsiv ist - dies ist aber nicht der Fall, wenn du irgendwo eine Schleife am Laufen hast. Allerdings würde dir dein Control ein CheckedStateChanged-Event schmeissen wenn sich sein Wert ändert. An so ein Event solltest du dann deinen Methoden-Aufruf festmachen (wobei ... ich würde das komplett so nicht machen ).
    Mit etwas Glück würde ein gelegentliches Application.DoEvents deine Schleife in die Lage versetzen, dass deine Controls responsiv bleiben - das ist aber kein guter Stil.
    Besser ist : IMMER Events nutzen wenn es welche gibt.

    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
  •