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

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

Thema: Problem mit Sql <> SPS Datenübertragung

  1. #1
    Registriert seit
    28.11.2009
    Beiträge
    37
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    HAllo Leute,

    Ich hab wieder einmal ein Problem.

    Ich hab ein VB Skript geschrieben das von einer SQL Datenbank daten auslest und gegebenfalls bei wertänderung SPS seitig (Flankenauswertung) wieder in Datenbank schreibt.

    In grossen und ganzen Funktioniert das Skript einwandfrei, nur wenn ich das auf eine Tabelle begrenze.

    Nun mein Problem daran ist einfach das ich alle Spalten die in der Datenbank vorhanden sind auf die selbe weise überprüfen will.

    Das skript wird über Taktmerker von SPS aufgerufen, ich vermute das das Skript noch nicht durchlaufen ist und dann durch änderung des Taktmerkers neu gestartet wird.

    Auch bei anderen Taktmerker ist das selbe.

    Meine Frage ist nun kann man wincc flex "zwingen" das Skript fertig durch zu arbeiten, oder hat wer ne andere idee?

    Probiert hab ich bereits Schleifen und abarbeitung ohne SCHleife.

    Mfg
    Zitieren Zitieren Problem mit Sql <> SPS Datenübertragung  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    wie wäre es mit einem "inProgress"-Bit, welches bei start des skriptes gesetzt wird und erst nach abarbeitung zurückgesetzt? steuerungsseitig z.B. mit UN in den Start rein und im skript am ende auf false ...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    Registriert seit
    28.11.2009
    Beiträge
    37
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für den Tipp, werd ich mal Probieren.

    Andere frage, Gibt eigentlich ne schnellere Möglichkeit dynamisch auf einen Datenbereich der SPS zuzugreifen über Wincc flex außer Multiplexen?(und nich ohne x1000 Variablen anzulegen )

    mfg

  4. #4
    Registriert seit
    28.11.2009
    Beiträge
    37
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So hab das mal getestet.

    Es funktioniert so wie du meinst, Das skript läuft bis zum ende durch, aber das skript braucht ewig für die abarbeitung...

    Gibt es eine Möglichkeit den Datenaustausch sauber und schnell zwischen SQL Datenbank und SPS zu verwircklichen?

  5. #5
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    wenn man dein skript kennen würde, könnte man an der optimierung arbeiten...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #6
    Registriert seit
    28.11.2009
    Beiträge
    37
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Erstmals ein paar Worte zu den Skript ist ja bissal lang ...


    Es geht um Überprüfung auf änderung der einzelnen Werte (Flankenauswertung) und dann wird überprüft von welcher Seite die änderung kommt Datenbank oder SPS und dann werden die Variablen überschrieben.

    Hab mir auch schon überlegt ob ich die ganze Flankenauswertung über SPS mache, das hab ich noch nciht probiert...

    Code:
    On Error Resume Next
    Dim sql,sql1
    Dim dbname, dbuser, dbpw, conn
    Dim recordset, i
    Dim Raum
    Dim Szene
    Dim Licht
    Dim Raumzahl
    Dim offsetarray
    Dim Jalauf,Jalzu,Heizungaktiv,Jalaktiv,Farbsteuerung,Szenenwahl,Raumname,Solltemp,Solljal
    Dim zugriffrechnung,LichtSPS,JalaufSPS,JalzuSPS,Jalaufzyklus,Jalzuzyklus,Istjal,Isttemp
    Dim RGBzyklus,Lichtzyklus,zeit
    i=schleife
    offsetarray=54
    Raumzahl=SmartTags("Raumzahl")
    'MySQL Daten zugriff variablen deklarieren
    dbname = "puppenhaus"    'Datenbankname
    dbuser = "root"    'Datenbankuser
    dbpw = ""     'Datenbankpasswort
    Set conn = CreateObject("ADODB.Connection")
    'Aufruf des verwendeten SQL Treiber
    conn.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=localhost; DATABASE=" + dbname + "; UID=" + dbuser + ";PWD=" + dbpw + "; OPTION=3"
    'Kommunikation zu mysql öffnen
    conn.Open
     
    SmartTags("Multiplex_Name")=(offsetarray*i)+20
    SmartTags("Multiplex_Bits1")=(offsetarray*i)+52
    SmartTags("Multiplex_Bits2")=(offsetarray*i)+53
    SmartTags("Multiplex_RGB")=(offsetarray*i)+54
    SmartTags("Multiplex_RGB_zyklus")=(offsetarray*i)+56
    SmartTags("Multiplex_SollJal")=(offsetarray*i)+58
    SmartTags("Multiplex_Istjal")=(offsetarray*i)+62
    SmartTags("Multiplex_SollTemp")=(offsetarray*i)+66
    SmartTags("Multiplex_IstTemp")=(offsetarray*i)+70
    'For zeit=0 To 100 Step 1
    'hh
    ' Next
    Delay(1)
     
     
     
    ' Daten von mysql Datenbank auslesen
    sql = "SELECT NAME,Heizung,Jalousie,Farbe,Szene,Solltemp,Solljalousie,Lichtein,Jalauf,Jalzu FROM raume WHERE id="& CStr(i+1)
    recordset = conn.Execute(sql)
    Licht = recordset("Lichtein")
    Jalauf= recordset("Jalauf")
    Jalzu= recordset("Jalzu")
    Heizungaktiv= recordset("Heizung")
    Jalaktiv= recordset("Jalousie")
    Farbsteuerung= recordset("Farbe")
    Szenenwahl= recordset("Szene")
    Raumname= recordset("NAME")
    Solltemp= recordset("Solltemp")
    Solljal= recordset("Solljalousie")
    SmartTags("S_Raumname")=Raumname
    If SmartTags("B_Licht_ein")=True Then
     LichtSPS=1
    Else
     LichtSPS=0
    End If
    If SmartTags("B_Licht_Zyklus")=True Then
     Lichtzyklus=1
    Else
     Lichtzyklus=0
    End If
    If Licht <> LichtSPS Then
     If Lichtzyklus <> Licht Then
      If Licht = 1 Then
       SmartTags("B_Licht_ein")=True 
       SmartTags("B_Licht_Zyklus")=True
      Else
       SmartTags("B_Licht_ein")=False
       SmartTags("B_Licht_Zyklus")=False
      End If
     End If
     
     If Lichtzyklus <> LichtSPS Then
      sql1 = "Update raume SET Lichtein="& CInt(LichtSPS)& " where ID="& CInt(i+1)
      recordset = conn.Execute(sql1)
     
      If LichtSPS =1 Then
       SmartTags("B_Licht_Zyklus")=True
      Else
       SmartTags("B_Licht_Zyklus")=False
      End If
     End If
    End If
    SmartTags("B_Heizung_aktiv")=Heizungaktiv
    If Heizungaktiv =1 Then
     Isttemp=SmartTags("R_Istwert_Temp")
     SmartTags("R_Sollwert_Temp")=Solltemp
     sql1 = "Update raume SET Isttemp="& CDbl(Isttemp)& " where ID="& CInt(i+1)
     recordset = conn.Execute(sql1)
     
    End If
    If Jalaktiv =1 Then
     
     If SmartTags("B_Jal_auf")=True Then
      JalaufSPS=1
     Else
      JalaufSPS=0
     End If
     If SmartTags("B_Jal_zu")=True Then
      JalzuSPS=1
     Else
      JalzuSPS=0
     End If
     
     If SmartTags("B_Jal_auf_Zyklus") = True Then
      Jalaufzyklus=1
     Else
      Jalaufzyklus=0
     End If
     
     If SmartTags("B_Jal_zu_Zyklus") = True Then
      Jalzuzyklus=1
     Else
      Jalzuzyklus=0
     End If
     
     If JalaufSPS <> Jalauf Then
     
      If Jalaufzyklus <> Jalauf Then
       If Jalauf =1 Then
        SmartTags("B_Jal_auf")= True
        SmartTags("B_Jal_auf_Zyklus")=True
       Else
        SmartTags("B_Jal_auf")=False
        SmartTags("B_Jal_auf_Zyklus")=False
       End If
      End If
     
      If Jalaufzyklus <> JalaufSPS Then
     
       sql1 = "Update raume SET Jalauf="& CInt(JalaufSPS)& " where ID="& CInt(i+1)
       recordset = conn.Execute(sql1)
     
       If JalaufSPS =1 Then
        SmartTags("B_Jal_auf_Zyklus")=True
       Else
        SmartTags("B_Jal_auf_Zyklus")=False
       End If
      End If
     End If
     
     If JalzuSPS <> Jalzu Then
      If Jalzuzyklus <> Jalzu Then
       If Jalauf =1 Then
        SmartTags("B_Jal_zu")= True
        SmartTags("B_Jal_zu_Zyklus")=True
       Else
        SmartTags("B_Jal_zu")=False
        SmartTags("B_Jal_zu_Zyklus")=False
       End If
      End If
     
      If Jalzuzyklus <> JalzuSPS Then
       sql1 = "Update raume SET Jalzu="& CInt(JalzuSPS)& " where ID="& CInt(i+1)
       recordset = conn.Execute(sql1)
       If JalaufSPS =1 Then
        SmartTags("B_Jal_zu_Zyklus")=True
       Else
        SmartTags("B_Jal_zu_Zyklus")=False
       End If
      End If
     End If
     SmartTags("R_Sollwert_jal")=Solljal
     If i>0 Then
     Istjal=SmartTags("R_Istwert_jal")
     sql1 = "Update raume SET Istjal="& CLng(Istjal)& " where ID="& CInt(i+1)
     recordset = conn.Execute(sql1)
     End If
     
    End If
     
    If Farbsteuerung= 1 Then
      If Szenenwahl <> SmartTags("I_RGB_Szene") Then
       If Szenenwahl <> SmartTags("I_RGB_zyklus") Then
        SmartTags("I_RGB_Szene")= Szenenwahl
        SmartTags("I_RGB_zyklus")=Szenenwahl
       End If
     
       If SmartTags("I_RGB_Szene") <> SmartTags("I_RGB_zyklus") Then
     
        sql1 = "Update raume SET Szene="& CInt(SmartTags("I_RGB_Szene"))& " where ID="& CInt(i+1)
        recordset = conn.Execute(sql1)
        SmartTags("I_RGB_zyklus") =SmartTags("I_RGB_Szene")
       End If
      End If
    End If
     
    conn.close
    mfg

  7. #7
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Dementis Beitrag anzeigen
    Code:
    If SmartTags("B_Licht_ein")=True Then
     LichtSPS=1
    Else
     LichtSPS=0
    End If
    Kleiner Verbesserungsvorschlag:

    Code:
    LichtSPS = SmartTags("B_Licht_ein")
    Gruß Kai

  8. #8
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Dementis Beitrag anzeigen
    Es funktioniert so wie du meinst, Das skript läuft bis zum ende durch, aber das skript braucht ewig für die abarbeitung...
    Da du das ganze ja über indriekte Adressierung machst, wieviele Schleifendurchläufe hast du denn? Wenn er nach jedem durchlauf die indirekte Adresse ändern muss, wird er auch immer wieder die indirekt Adressierte Variable frisch lesen und am Ende frisch schreiben müssen.

    Wenn wir jetzt davon ausgehen das ein SPS Zugriff so um die 15ms dauert (ist z.B. bei meiner 400er TestCPU so), dann musst du im Script ja schon 2 mal Zugreifen (1* lesen, 1* schreiben), das würde bei z.B. 100 durchläufen schon 3s dauern!

    Und du schreibst ja noch viel mehr Wert, wobei Ich jetzt nicht weis, wann WinCC-Flex die an die SPS überträgt, sofort oder erst wenn die Multiplexadresse geändert wird...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  9. #9
    Registriert seit
    28.11.2009
    Beiträge
    37
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @ Kai das funktioniert leider nicht, da ja die Bit variablen in der SPS True bzw False Zustände haben, hab ich schonmal Probiert

    @jochen

    Ja ist indirekt weil ich das ganze dynamisch Programmieren will, das es für wenig aufwand erwiterbar ist.

    Normal aktuell 7 Durchläufe ABER bin auf folgende idee gekommen.
    Ich beschreib per PHP eine Variable die mir genau die ID des Aktuellen Raums den der Benutzer anschaut rein Schreibt und somit hab ich NUR 1 Durchlauf und zwar mit der Nummer des Raumes so Klappt es!

    Jaja ich weiß bei mehrere LEute auf der Visu wird das blöd aber dazu hab ich noch vor das ich ne Sessionverwaltung mach, mal sehen wann ich dazu komm...


  10. #10
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Und wie lange ist dann lang? D.h. wie lang braucht dein Script?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. S5 L1 Bus Datenübertragung
    Von kafrank im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.11.2011, 10:03
  2. Datenübertragung DSL
    Von L.T. im Forum Feldbusse
    Antworten: 13
    Letzter Beitrag: 21.01.2010, 10:54
  3. Datenübertragung PC -SPS
    Von arena im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 15.06.2008, 20:01
  4. Datenübertragung von SPS zum PC
    Von quant81 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 31.07.2007, 10:32
  5. Datenübertragung RS 232
    Von margral2 im Forum Suche - Biete
    Antworten: 1
    Letzter Beitrag: 15.09.2005, 11:24

Lesezeichen

Berechtigungen

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