(17.05.2013, 19:59)therme schrieb: Hallo S.Rings,
die S7 benötige 'DATE_AND_TIME' in BCD (Binär Codierte Dezimalzahl) oder Hex müsste auch gehen.
Wie kann man einen Integer(wenn möglich Byt weise) in BCD oder Hex Wandeln?
Werte nach HEX wandeln ist einfach, denn die Hexadezimale Darstellung ist als Variablentyp ja ein String :
ScriptCode schrieb:HString=""
HString=Hex(Wert)
zurück von Hex nach Integer geht es mit:
ScriptCode schrieb:Wert=val("&H" + HString)
um Werte Binär zu bearbeiten (also einzelne Bits aus einem Byte verarbeitet)
kann man auch die Funktionen vdf.readbin() und vdf.Writebin verwenden.
Wenn man das ganze denn auf 4 Stellen beschränkt hat man schon eine
einzelne BCD-Zahl.
vdf.ReadBin liefert eine String zurück:
So ist zum Bsp die Zahl
Dezimal= 17
in Hex= 11
und in Binär= 10001
Anderes Beispiel:
entsprechend die Zahl BCD = 98
Binär = 1001 1000
Dezimal = 152
Hex = 98 'und das ist genau die BCD Zahl !
VDF.WriteInt 1,0iJahr
wert1=VDF.ReadInt(1,0)
HString=""
Hstring=Hex(wert1)
wert2=val("&H + HString) 'Hir habe ich eine Fehlermeldung
VDF.WriteInt 2,24,wert2 'Hir möchte ich die VDF 1,0 in Hex Convertiert haben.
(27.05.2013, 16:36)mepkub schrieb: bei .... ("&h" + ...) evtl. das zweite 'Anführungszeichen' ( " ) vergessen? Oder nur hier beim Beispiel?
Sorry, hab es nur hier im Beispeil falsch.
Was ist denn eigentlich das Zielsystem
und wie lautet denn der Fehler ?
Mir ist im übrigen aufgefallen das unter Windows CE (Also VTP-C Modelle)
die automatische Konvertierung von Double in Integer nicht vom Framework
unerstützt wird.
Das könnte auch hier zu einem Fehler führen.
Aus der Zeile:
Zitat:Wert2=val("&H" + HString)
muss dann folgendes werden:
Zitat:Wert2=Cint(val("&H" + HString))
Damit wird die Zahl die die Val() Funktion liefert automatisch in einen
Integer 'gecasted'.
(27.05.2013, 16:36)mepkub schrieb: bei .... ("&h" + ...) evtl. das zweite 'Anführungszeichen' ( " ) vergessen? Oder nur hier beim Beispiel?
Sorry, hab es nur hier im Beispeil falsch.
Was ist denn eigentlich das Zielsystem
und wie lautet denn der Fehler ?
Mir ist im übrigen aufgefallen das unter Windows CE (Also VTP-C Modelle)
die automatische Konvertierung von Double in Integer nicht vom Framework
unerstützt wird.
Das könnte auch hier zu einem Fehler führen.
Aus der Zeile:
Zitat:Wert2=val("&H" + HString)
muss dann folgendes werden:
Zitat:Wert2=Cint(val("&H" + HString))
Damit wird die Zahl die die Val() Funktion liefert automatisch in einen
Integer 'gecasted'.
Das Zielsystem ist die S7 und auf dem PC ist Windows XP.
Um Unklarheiten zu besietugen.
Mein Vorhaben ist es die Daten Jahr Monat usw. vom PC die ja alle ein Intager sind in Hex zu wandeln da die S7 einen BCD Code erwartet.
iJahr=Year(Now) ' Lade Year in iJahr also das Jahr 2013
If iJahr>2000 Then iJahr=iJahr-2000 ' Int= 13
VDF.WriteInt 1,0,iJahr 'Ist das Jahr vom PC als Intager Bin= 1101
wert1=VDF.ReadInt(1,0) 'Schreibe VDF.ReadInt(1.0) in wert1
HString="" 'Macht einen String aus wert1 ??
Hstring=Hex(wert1) 'Wandle wert1 in Hex ??
VDF.WriteInt 2,24,HString 'Hir kommt kein Hex raus und auch kein Intager? Möchte Bin=0001 0011 für BCD 13
Bekomme aber bei VisAM eine Fehlermeldung.: System-Fehler/Error
Nr./No.:13in Modul:1809
29.05.2013, 14:32 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2013, 14:33 von S.Rings.)
(29.05.2013, 11:32)therme schrieb: Das Zielsystem ist die S7 und auf dem PC ist Windows XP.
Um Unklarheiten zu besietugen.
Mein Vorhaben ist es die Daten Jahr Monat usw. vom PC die ja alle ein Intager sind in Hex zu wandeln da die S7 einen BCD Code erwartet.
iJahr=Year(Now) ' Lade Year in iJahr also das Jahr 2013
If iJahr>2000 Then iJahr=iJahr-2000 ' Int= 13
VDF.WriteInt 1,0,iJahr 'Ist das Jahr vom PC als Intager Bin= 1101
wert1=VDF.ReadInt(1,0) 'Schreibe VDF.ReadInt(1.0) in wert1
HString="" 'Macht einen String aus wert1 ??
Hstring=Hex(wert1) 'Wandle wert1 in Hex ??
VDF.WriteInt 2,24,HString 'Hir kommt kein Hex raus und auch kein Intager? Möchte Bin=0001 0011 für BCD 13
Bekomme aber bei VisAM eine Fehlermeldung.: System-Fehler/Error
Nr./No.:13in Modul:1809
Hallo Therme,
es wäre ja schon früher wichtig gewesen für welches Zielsystem/Plattform (damit meinten wir Betriebsystem) und welche
VisAM Version sie verwenden.
Nun ist klar das Sie "Visam Win32" verwenden und nicht die DotNet Version(eigentlich auch das falsche Unterforum, aber egal) .
Da ist es ein klein wenig anders, und der Fehler im Scripteditor klar weil dort noch kein wert in wert1 stand.
Hier das funktioniert unter "Visam Win32"
Code:
iJahr=Year(Now) ' Lade Year in iJahr also das Jahr 2013
VDF.WriteInt 1,0,iJahr
If iJahr>2000 Then iJahr=iJahr-2000 ' Int= 13
VDF.WriteInt 1,1,iJahr 'Ist das Jahr vom PC als Intager Bin= 1101
wert1=VDF.ReadInt(1,1) 'Schreibe VDF.ReadInt(1,1) in wert1
Das Script funktioniert jetzt super.
Ich möcht noch die Zeit automatisch einmal wöchentlich abgleichen, den Button zum übertragen (sagen wir am Mo 13:00 Uhr) für einen Zyklus betätigt wird.
(25.06.2013, 14:52)therme schrieb: Besten Dank für die Antwort.
Das Script funktioniert jetzt super.
Ich möcht noch die Zeit automatisch einmal wöchentlich abgleichen, den Button zum übertragen (sagen wir am Mo 13:00 Uhr) für einen Zyklus betätigt wird.