Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
S7 300 CPU Automatischer abgleich der Uhrzeit,Datum u. Wochentag mit dem PC
#11
(21.05.2013, 14:42)S.Rings schrieb:
(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 !



siehe auch:

http://de.wikipedia.org/wiki/BCD-Code


Ich bekomms nicht hin.

Im Script.
HString=(VDF.ReadInt(2,24))           'Intager
HString=Hex(VDF.WriteWord(2,25))  'In Hex gewandelt

Was mache ich falsch?
Antworten
#12
(23.05.2013, 08:23)therme schrieb: Ich bekomms nicht hin.

Im Script.
HString=(VDF.ReadInt(2,24))           'Intager
HString=Hex(VDF.WriteWord(2,25))  'In Hex gewandelt

Was mache ich falsch?


Leider stimmt da gar nichts in Ihrem Script.So sollte s funktionieren:

ScriptCode schrieb:Wert1=VDF.ReadInt(2,24)
HString=""
HString=Hex(Wert1)
Wert2=val("&H" + HString)
VDF.Writeint 2,25,wert2
Antworten
#13
(23.05.2013, 16:51)S.Rings schrieb:
(23.05.2013, 08:23)therme schrieb: Ich bekomms nicht hin.

Im Script.
HString=(VDF.ReadInt(2,24))           'Intager
HString=Hex(VDF.WriteWord(2,25))  'In Hex gewandelt

Was mache ich falsch?


Leider stimmt da gar nichts in Ihrem Script.So sollte s funktionieren:

ScriptCode schrieb:Wert1=VDF.ReadInt(2,24)
HString=""
HString=Hex(Wert1)
Wert2=val("&H" + HString)
VDF.Writeint 2,25,wert2
Bei dem Beispiel bekomme ich immer einen Fehler.
 
Ausschnitt aus meinem Script

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.
Antworten
#14
bei .... ("&h" + ...) evtl. das zweite 'Anführungszeichen' ( " ) vergessen? Oder nur hier beim Beispiel?
Man hat niemals zu viele Backups ...

www.mepeku.de
Antworten
#15
(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.
Antworten
#16
(28.05.2013, 10:53)therme schrieb:
(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'.
Antworten
#17
(28.05.2013, 13:29)S.Rings schrieb:
(28.05.2013, 10:53)therme schrieb:
(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
Antworten
#18
(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

aWert=Right("0000"  & Cstr(wert1),4) '4 stellig rechtsbündig
wert2=  Cint("&H"+awert)  

VDF.WriteInt 2,24 , wert2'Möchte Bin=0001 0011 für BCD 13

Im Anhang noch ein voll lauffähiges Projekt für die BCD Umwandlung.


Angehängte Dateien
.zip   HexUmrechnung_visam_win32.zip (Größe: 15,11 KB / Downloads: 3)
Antworten
#19
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.
Antworten
#20
(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.

die Funktion:

Code:
Tag = WeekDay(Now)


gibt Ihnen den Tag als Zahl zurück.

Genauso erhalten sie die aktuelle Stunde mit:

Code:
Stunde= Hour(Now)
Antworten


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste