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

Ergebnis 1 bis 5 von 5

Thema: Softing OPC Toolbox, Problem beim schreiben von Date_and_Time, VB.net

  1. #1
    Registriert seit
    17.12.2013
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    derzeit stellt sich mir die Aufgabe einen Zeitstempel und ein paar andere Werte einer S7 zu übergeben.
    Deklariert habe ich die Variablen in der OPC-Aliasdatei wie folgt:

    Code:
    wDatum_Uhrzeit    DB160.DBB10:DATE_AND_TIME
    Das funktioniert meines Wissens auch bestens, jedenfalls kann ich den darin befindlichen Default-Wert auslsen.
    Probleme bereitet mir das schreiben.
    Programiert wird meine Windows-Anwendung mit vb.net.
    Die Softing Toolbox bietet mir da ja nette Möglichkeiten mit der write-Methode die Daten zu übergeben.
    Soweit so gut. Einfache Char-Werte wie ich sie in z.B.:

    Code:
    wBarcode_1_0    DB160.DBB56:CHAR
    schreibe, stellen kein Problem dar. Die werden 1a in den Baustein geschrieben. Hier mein vb.net-Code:

    Code:
    Dim tmp As String = "16.12.2013 14:09:28"
    Dim b(7) As Byte
    
    b(0) = Convert.ToInt32(tmp.Substring(8, 2))
    b(1) = Convert.ToInt32(tmp.Substring(3, 2))
    b(2) = Convert.ToInt32(tmp.Substring(0, 2))
    b(3) = Convert.ToInt32(tmp.Substring(11, 2))
    b(4) = Convert.ToInt32(tmp.Substring(14, 2))
    b(5) = Convert.ToInt32(tmp.Substring(17, 2))
    b(6) = 0
    b(7) = 0
    
    Dim itemIdsw As String() = New String() {"S7-F3/wDatum_Uhrzeit", "S7-F3/wBarcode_1_0"}
    
    Dim values As ValueQT() = New ValueQT(1) {}
    values(0) = New ValueQT(b, EnumQuality.QUALITY_NOT_SET, New DateTime)
    values(1) = New ValueQT(Asc(wvalues(0)), EnumQuality.QUALITY_NOT_SET, New DateTime)
    
    session.Write(itemIdsw, Nothing, values, results, executionOption)
    Das erzeugen der Session etc hab ich jetzt mal weggelassen... das klappt ja.

    Wichtig wäre mir dieses b, in das ich versuche die von der S7 geforderten Bytes zu schreiben.
    Byte 0 = Jahr 90-89
    Byte 1 = Monat 01...12
    Byte 2 = Tag 1-31
    Byte 3 = Stunde 0...23
    Byte 4 = Minute 0...59
    Byte 5 = Sekunde 0...59
    Byte 6 und 7 brauche ich nicht, da setzte ich 0 ein.

    Wie schon gesagt, mit dieser Methode funktioniert das schreiben aller Werte, nur das Date_and_Time nimmt den Wert nicht an.

    Was übersehe ich da? Kann mir da jemand Helfen?

    Schon mal danke fürs anschauen...
    Zitieren Zitieren Softing OPC Toolbox, Problem beim schreiben von Date_and_Time, VB.net  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    dein Problem besteht darin, dass du sehr wahrscheinlich kein brauchbares DT übergibst.
    In jedem der Bytes steht nicht der jeweilige Wert absolut sondern BCD-codiert drin. Das würde z.B. für das Jahr bedeuten, dass du da nicht 13 (für 2013) hineinschreibst sondern Hex 13 = dezimal 19.
    Ich würde jetzt also die Byte-Array-Zuweisung wie folgt ändern :
    Code:
    b(0) = Convert.ToInt32(tmp.Substring(8, 1)) * 16 + Convert.ToInt32(tmp.Substring(9, 1))
    ... das mußt du jetzt natürlich für jede weitere Zeile entsprechend machen (wenn du den String als Basisquelle verwenden willst).

    An einer Stelle bin ich mir jetzt aber nicht ganz sicher : In einem der Bytes steckt auch der Wochentag drin. Ich hatte schon mal den Fall gehabt, dass das DT nicht angenommen wurde (das war aber n.m.M. bei einem Siemens-Bediengerät) weil der Wochentag nicht passend zum Datum zugewiesen war. das wirst du aber schnell sehen ... (wenn es ohne den trotzdem nicht funktioniert).

    Gruß
    Larry

  3. #3
    neero ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.12.2013
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    erstmal danke!
    Ich hab das jetzt mal so probiert und die INT-Werte in BCD codiert... wie du vorgeschlagen hast.
    Da ich ja die Milisekunden nicht benötige, habe ich es so gemacht, dass ich in bit 6 11ms reinschreibe (natürlich in BCD).
    In bit 7 (höherwertige Stelle) kommt dann noch zusätliche 1ms und der Wochentag in die niederwertige Stelle. Dabei muss ich beachten, dass die Methode now.DayOfWeek für Sonntag den Wert 0 liefert und in der S7 der Sonntag bei 1 anfängt. Also immer schön +1.

    Lange Worte kurzer Sinn... es funktioniert leider immernoch nicht.

    So siehts im Code aus aus:

    Code:
    Dim tmp As String = "18.12.2013 14:58:49"
    Dim b(7) As Byte
            b(0) = Convert.ToInt32(tmp.Substring(8, 1)) * 16 + Convert.ToInt32(tmp.Substring(9, 1))
            b(1) = Convert.ToInt32(tmp.Substring(3, 1)) * 16 + Convert.ToInt32(tmp.Substring(4, 1))
            b(2) = Convert.ToInt32(tmp.Substring(0, 1)) * 16 + Convert.ToInt32(tmp.Substring(1, 1))
            b(3) = Convert.ToInt32(tmp.Substring(11, 1)) * 16 + Convert.ToInt32(tmp.Substring(12, 1))
            b(4) = Convert.ToInt32(tmp.Substring(14, 1)) * 16 + Convert.ToInt32(tmp.Substring(15, 1))
            b(5) = Convert.ToInt32(tmp.Substring(17, 1)) * 16 + Convert.ToInt32(tmp.Substring(18, 1))
            b(6) = Convert.ToInt32(1) * 16 + Convert.ToInt32(1)
            b(7) = Convert.ToInt32(1) * 16 + Convert.ToInt32(get_day(n))
    Das get_day(n) ermittelt mir den DayOfWeek im "Siemsens-Format".
    Und das ist das Ergebnis:

    b(0) = 19
    b(1) = 18
    b(2) = 24
    b(3) = 20
    b(4) = 88
    b(5) = 73
    b(6) = 17
    b(7) = 20

    Das blöde ist, dass man da keine Fehlermeldung bekommt sondern einfach nur nix reingeschrieben wird.

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Probiere es doch mal mit einem OPC-Test Client, da sollte Softing doch einen mitliefern.
    Als erstes versuchst du mit dem Test-Client eine Variable vom Typ Date_and_time zu lesen, und dann zu schreiben.
    Dann schaust du mal nach welcher Variant-Datentyp beim OPC-Testclient diese Variable hat.

    Ich habe schon OPC-Server gehabt, bei denen ein Date_and_time auf den Variant-Typ String umgesetzt worden ist. Das ist auch nicht unpraktisch, weil es einem dieses BCD-Gepfriemel erspart.

    In welchem Datentyp der OPC-Server den Datentyp gerne hätte, sollte er dir im Wert für CanonicalDataType mitteilen.

    Ich möchte aber wetten dass das alles im Handbuch zum Softing OPC-Server steht.

  5. #5
    neero ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.12.2013
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ok das mit dem umfriemeln in BCD und Byte-Array kann man getrost weglassen... das direkte schreiben als String funktioniert.

    Der Demo-Client schreibt und liest natürlich auch... damit hatte ich ja überprüft ob was reingeschrieben wird.
    Der Datentyp ist BSTR, das zeigt mir der Demo-Client auch an.

    Ich hatte das zwar schon ganz am Anfang probiert... ohne Erfolg... sonst wär ich ja nicht auf das byte da umgestiegen... doch da muss ich in der Zwischenzeit wohl einen anderen Fehler ausgebessert haben und nun geht alles!

    Danke Euch beiden für die schnelle Hilfe! Is ja schon fast peinlich...

Ähnliche Themen

  1. Problem beim schreiben von S7-Daten in Excel-Datei
    Von SanderKarl im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 16.10.2013, 17:25
  2. Antworten: 1
    Letzter Beitrag: 09.10.2013, 09:44
  3. Antworten: 2
    Letzter Beitrag: 04.03.2012, 12:50
  4. libnodave.net Zyklusschwankungen beim schreiben
    Von TimoS im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 19.09.2010, 13:30
  5. Simatic NET OPC-Server - Schreiben von OPC-Items ist zu langsam
    Von christian_a im Forum Hochsprachen - OPC
    Antworten: 3
    Letzter Beitrag: 28.02.2009, 11:13

Lesezeichen

Berechtigungen

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