-> 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:
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.:
schreibe, stellen kein Problem dar. Die werden 1a in den Baustein geschrieben. Hier mein vb.net-Code:
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...
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...