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

Ergebnis 1 bis 10 von 10

Thema: Datenaustausch WinCC-flexible zu SQL-Server

  1. #1
    Registriert seit
    26.01.2008
    Ort
    Weida
    Beiträge
    127
    Danke
    58
    Erhielt 47 Danke für 36 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute

    Habe die Aufgabenstellung Werte aus einem „WinCC flexible PC-Runtime“ auf einen SQL 2005 Server Express Edition zu schreiben.
    Die Verbindung zum Server und das Erzeugen einer neuen Tabelle vom Runtime aus läuft problemlos. Ich kann auch Werte von Type INT in die Tabelle schreiben.
    Mein Problem ist das ich außer Ganzahlen, REAL-Zahlen (Später ca.50) und noch Daten von Type DATE_AND_TIME übertragen muss.
    In Abwandlung von einer Siemens FAQ sieht mein Projekt wie folgt aus.

    Skript 1 „Erzeugung einer neuen Tabelle“

    Dim conn, rst
    Set conn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")

    conn.Open "Provider=MSDASQL;DSN=C45-Archiv" 'DSN= Name der ODBC-Datenbank
    Dim SQL_Tabelle

    SQL_Tabelle = "CREATE TABLE "& SmartTags("SQL\Tab_Name") &" (Nr Int, Temp NUMERIC(4,1), R_Ist FLOAT(9), R_Soll FLOAT(9))"

    Set rst = conn.Execute(SQL_Tabelle)

    Skript 2 „Schreiben von Variabel in Tabelle“

    Dim conn, rst
    Set conn = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
    conn.Open "Provider=MSDASQL;DSN=C45-Archiv"

    Dim SQL_Tabelle

    SQL_Tabelle = "SELECT * FROM "&SmartTags("SQL\Tab_Name") & " WHERE Nr = "&SmartTags("SQL\Dat_Nr") '* = Alle Daten
    Set rst = conn.Execute(SQL_Tabelle)

    If Not (rst.EOF And rst.BOF) Then
    'Vergleich ob End of File oder Begin of File ist, wenn nicht wird der Zeiger auf den Ersten Eintrag zurückgesetzt
    ShowSystemAlarm "Dat_Nr. ist bereits vorhanden!"
    rst.close
    Else

    SQL_Tabelle = "INSERT INTO "& SmartTags("SQL\Tab_Name") & " VALUES ('"&SmartTags("SQL\Dat_Nr") &"','"&SmartTags("SQL\Temperatur") &"','"&SmartTags("SQL\NTC Ist")&"','"&SmartTags("SQL\NTC Soll")&"')"

    Set rst = conn.Execute(SQL_Tabelle)
    End If

    Die Variabeln in flexible haben folgende Formate:
    SQL\Tab_Name = String
    SQL\Dat_Nr = Word
    SQL\Temperatur = Int
    SQL\NTC Ist = Real
    SQL\NTC Soll = Real

    Wenn ich das zweite Skript ausführe, erhalte ich folgende Fehlermeldung. „Fehler beim Konvertieren des varchar Datentypes in real.
    Kann man jemand helfen wie ich REAL Werte übertragen kann, bzw. für Später welche Formate muß ich einstellen um das Siemens Format Dat-und-Time zu übertragen.

    Harald
    Zitieren Zitieren Datenaustausch WinCC-flexible zu SQL-Server  

  2. #2
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Ist den Tabelle erzeugt geworden mit REALs ?

    Dies ist von Siemens' Beispielprojekt, aber für INTs:

    'Definition of SQL table - Definition der SQL-Tabelle
    SQL_Table = "CREATE TABLE "& szTableName & " (Nr SMALLINT, " _
    & szName_1 & " CHAR(30), " & szName_2 & " SMALLINT, " _
    & szName_3 & " SMALLINT)

    Ich weiss nicht ob REALs auch "REAL" heisst in SQL.
    Jesper M. Pedersen

  3. #3
    Funky ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.01.2008
    Ort
    Weida
    Beiträge
    127
    Danke
    58
    Erhielt 47 Danke für 36 Beiträge

    Standard

    Hallo Jesper M. Pedersen

    Es gibt in SQL REAL als auch FLOAT Datentypen
    Mit beiden habe ich es probiert.
    Im oberen Auszug wird eine Tabelle mit FLOAT für die letzten beiden Spalten erzeugt.

    SQL_Tabelle = "CREATE TABLE "& SmartTags("SQL\Tab_Name") &" (Nr Int, Temp NUMERIC(4,1), R_Ist FLOAT(9), R_Soll FLOAT(9))"

    Die Tabelle wird auch richtig erstellt. Die Datenbank kann ich mit "MS SQL Server Manageament Studio Express" gut beobachten.
    Vielen Dank für Deine Mühe
    Harald

  4. #4
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Dies interessiert mich auch sehr viel.
    Ich muss auch REALs schreiben, haben aber nur getestet mit INTs so weit.
    Ich dachte nicht, dass es ein Problem werden könnte.
    Montag kann ich testen, ob ich auch das gleiche Problem haben.
    Wenn dies der Fall ist, würde ich Kontakt mit Siemens support nehmen.
    Jesper M. Pedersen

  5. #5
    Funky ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.01.2008
    Ort
    Weida
    Beiträge
    127
    Danke
    58
    Erhielt 47 Danke für 36 Beiträge

    Standard

    Hallo Jesper M. Pedersen

    Habe gerade das Problem an den Support von Siemens übergeben.
    Wenn ich Nachricht habe, werde ich dich darüber in Kenntnis setzen.

    mfg Harald

  6. #6
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Hallo Harald.

    Bei mir hat es geklappt, aber nur when ich das komma-zeichen auf mein PC auf "." eingestellt habe !

    Ein tip ist ein systemmessage zu triggern für jeden SQL befehl:

    If SmartTags("ODBC\debug_message_on") Then ShowSystemAlarm SQL_Table

    ODBC\debug_message_on stuere ich mit ein schalter auf den schirm.

    Dabei habe ich gesehn dass den string ein "," als kommazeichen verwendete.

    Die Frage besteht: Verwendet SQL als Kommazeichen immer das ".", oder hängt es auf irgendeiner einstellung.
    Jesper M. Pedersen

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

    Funky (25.02.2008)

  8. #7
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Dies gibt ein systemmessage when das "falsche" dezimalzeichen eingestellt ist:

    chDecPoint = Mid(CStr(8.1), 2, 1)
    If SmartTags("ODBC\debug_message_on") And Not chDecPoint = "." Then ShowSystemAlarm "Decimal separator is wrong. Set to '.' in Windows Control Panel .. Regional settings."
    Jesper M. Pedersen

  9. Folgender Benutzer sagt Danke zu JesperMP für den nützlichen Beitrag:

    Funky (25.02.2008)

  10. #8
    Funky ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.01.2008
    Ort
    Weida
    Beiträge
    127
    Danke
    58
    Erhielt 47 Danke für 36 Beiträge

    Standard

    Hallo Jesper M. Pedersen

    Danke für die schnelle Lösung.
    Nach der Umstellung des Dezimaltrennzeichen auf den "Punkt" läuft die Übertragung reibungslos.

    Mal sehen was der Seimens - Support dazu sagt!

    Vielen Dank nochmal

    Harald

  11. #9
    Funky ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.01.2008
    Ort
    Weida
    Beiträge
    127
    Danke
    58
    Erhielt 47 Danke für 36 Beiträge

    Standard

    Hallo
    ich habe folgende Rückmeldung aus der Entwicklungsabteilung erhalten:

    Zitat:

    Das beschriebene Verhalten liegt nicht im WinCC flexible. Bitte beachten Sie nachfolgenden Hinweis:

    Wenn in den Windowseinstellungen das Komma als Dezimaltrennzeichen eingestellt ist, dann würde man auch erwarten, dass im VBS die Umwandlung eines Tags in String mit Komma erfolgt.

    A = CStr(Smarttags("MyDoubleValue"))
    Liefert für A halt einen String im Format 1,23

    Entweder Sie müssen den SQL-Server anders aussteuern, damit der das Komma als Trennzeichewn akzeptiert oder Sie müssen sich ein Script schreiben, welches in einem String die Kommas durch Punkte ersetzen.
    Vielleicht gibt es ja auch schon eine VBS-Funktion die solche Stringoperationen ermöglicht. Dies müssen Sie in der MS-Doku nachschlagen.

    Ende Zitat

    Nach meinen Recherchen (können auch falsch sein) akzeptiert ein SQL-Server nur den Punkt als Dezimaltrennzeichen, unabhängig der Windowseinstellungen.

    Währe es da nicht der richtige Weg, wenn das „WinnCC flexible“-Objekt SmartTags("xyz"), oder ein anderes, die richtige Wandlung des Dezimaltrennzeichens übernimmt.

    Das währe bestimmt Anwenderfreundlich.

    Oder muss ich über VBS jede Variabel als Sting zerlegen, das Komma suchen und gegen Punkt tauschen und dann an SQL übergeben?

    Hat jemanden so eine Funktion ?

    mfg Harald

  12. #10
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Funky Beitrag anzeigen
    Oder muss ich über VBS jede Variabel als Sting zerlegen, das Komma suchen und gegen Punkt tauschen und dann an SQL übergeben?

    Hat jemanden so eine Funktion ?
    Ich glaube dies sollte gehen.

    chDecPoint = Mid(CStr(8.1), 2, 1)
    strVal1 = Replace(CStr(rVal1), chDecPoint, ".")
    strVal2 = Replace(CStr(rVal2), chDecPoint, ".")
    usw.

    Aber ich habe keine gutes gefühl wenn meine skripte zu komplizirt werden.
    Bis jetzt genügt es mir mit ein warnmeldung.
    Jesper M. Pedersen

  13. Folgender Benutzer sagt Danke zu JesperMP für den nützlichen Beitrag:

    Funky (29.02.2008)

Ähnliche Themen

  1. IP Server Kamera und Wincc flexible
    Von emilio20 im Forum HMI
    Antworten: 10
    Letzter Beitrag: 25.11.2011, 11:20
  2. Wincc Flexible SQL Server
    Von ToBo im Forum HMI
    Antworten: 3
    Letzter Beitrag: 11.07.2009, 17:06
  3. WinCC flexible Web Server startet nicht
    Von franzlurch im Forum HMI
    Antworten: 0
    Letzter Beitrag: 13.02.2009, 10:59
  4. Antworten: 5
    Letzter Beitrag: 06.02.2008, 22:39
  5. Smart Server WinCC Flexible
    Von Reblaus im Forum HMI
    Antworten: 1
    Letzter Beitrag: 23.03.2006, 12:22

Lesezeichen

Berechtigungen

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