Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Demo Zeitschaltuhr auf VTP BC72
#1
Hallo Zusammen,

ich habe versucht, das Demoprojekt Zeitschaltuhr auf einem VTP BC72 laufen zu lassen,
aber es erfolgt eine Fehlermeldung des Scripts, siehe Anhang.

Das OS scheint da etwas nicht zu unterstützen:
Dim nyear As Integer = System.DateTime.Now.ToString("yyyy")
Dim nmonth As Integer = System.DateTime.Now.ToString("MM")
Dim nday As Integer = System.DateTime.Now.ToString("dd")
Dim nWeek As Integer = DatePart(DateInterval.WeekOfYear, New Date(nyear, nmonth, nday),FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays)
'------------------------------------------------------------------------------------
WoTag = WeekDay(Date)
Dim TaNam As String = WeekDayName(WoTag-1)


wie kann das mit dem VTP realisiert werden?

viele Grüße
Peter Schiffner
Antworten
#2
Hallo Herr Schiffner,

das Beispielprojekt hat schon einige Jahre auf dem Buckel und war zum Erstellungszeitpunkt nicht für CE ausgelegt. Mit den folgenden Anpassungen sollte es auch auf Ihrem VTP laufen :
Code:
Dim sYear As String = System.DateTime.Now.ToString("yyyy")
Dim nyear As Integer
nyear = CInt(sYear)
Dim sMonth As String = System.DateTime.Now.ToString("MM")
Dim nMonth As Integer
nMonth = CInt(sMonth)
Dim sDay As String = System.DateTime.Now.ToString("dd")
Dim nday As Integer
nday = CInt(sDay)
Dim nWeek As Integer
nWeek = VDF.ReadInt(999,998) 'interne VBASE Funktion um die Kalenderwoche auszulesen
'------------------------------------------------------------------------------------
WoTag = WeekDay(Date)
Dim TaNam As String = System.DateTime.Now.ToString("dddd")

CE mag es scheinbar nicht, wenn in der Deklaration direkt auch in einen anderen Datentyp gecastet wird, daher muss man dies leider einzeln ausführen.
Für die Abfrage der Kalenderwoche benutzen wir eine interne VBASE Funktion, da dies um Längen einfacher ist, als die umständliche Art mit Datepart.
Der Wochentag-Name kann aber einfacher mit der DateTime Funktion "dddd" im ASCII Feld eingetragen werden.

Mit freundlichen Grüßen
Roman Best
Antworten
#3
Hallo Herr Best,

es funktioniert noch nicht, ich bekommen nach wie vor eine Fehlermeldung, siehe Anhang.

Dim sYear As String = System.DateTime.Now.ToString("yyyy")
Dim nyear As Integer
nyear = CInt(sYear)
Dim sMonth As String = System.DateTime.Now.ToString("MM")
Dim nMonth As Integer
nMonth = CInt(sMonth)
Dim sDay As String = System.DateTime.Now.ToString("dd")
Dim nday As Integer
nday = CInt(sDay)
Dim nWeek As Integer
nWeek = VDF.ReadInt(999,998) 'interne VBASE Funktion um die Kalenderwoche auszulesen
'------------------------------------------------------------------------------------
Dim sWoTag As String = System.DateTime.Now.ToString("dddd")
Dim WoTag As Integer
WoTag = CInt(sWoTag)
Dim TaNam As String = System.DateTime.Now.ToString("dddd")
VDF.WriteAscii 3,7,"KW" & nWeek & "  -  " & TaNam & Space(13)
VDF.WriteInt 3,5,WoTag
Stund = VDF.ReadBitB(0,1,0,8)
Minut = VDF.ReadBitB(0,1,8,8)
AktTi = (Stund*60)+Minut
VDF.WriteInt 3,6,AktTi


mit freundlichen Grüßen
Peter Schiffner
Antworten
#4
Hallo Herr Schiffner,

im vorangegangenen Code Beispiel war noch eine fehlerhafte Wochentagkonvertierung vorhanden. Bei der Korrektur selbiger bin ich noch auf eine viel einfacher Methode gestoßen.
Code:
Dim nWeek As Integer
nWeek = VDF.ReadInt(999,998)
Dim WoTag As Integer
Dim nyear As Integer
Dim nMonth As Integer
Dim nDay As Integer
Dim nHour As Integer
Dim nMinute As Integer
Dim nSecond As Integer

VOK.GetLocalTime (nyear,nmonth,nday,nhour,nminute,nsecond,WoTag)
'WoTag von GetLocalTime : Wochentag wird mit einem Wert 0 (= Sonntag) bis 6 (= Samstag) übergeben.
'Damit der Rest des Scriptes stimmt wird dieser dann "+1" gerechnet
Wotag += 1
Dim TaNam As String = System.DateTime.Now.ToString("dddd")

VDF.WriteAscii 1,7,"KW" & CStr(nWeek) & "  -  " & TaNam & Space(13)
VDF.WriteInt 1,5,WoTag
Ähnlich zu VOK.SetLocalTime, haben wir in VBASE auch die im Code-Beispiel benutzte Methode VOK.GetLocalTime. Diese gibt uns alle Zeitwerte zurück (bis auf Kalenderwoche bei der wir bei VDF.Readint(999,998) bleiben), die wir benötigen. Lediglich beim WriteAscii muss "nWeek" noch in einen String gecastet werden und WoTag um eins erhöht werden, dann lief das Projekt so bei mir auf einem BC 72.

Mit freundlichen Grüßen
Roman Best
Antworten
#5
Hallo Herr Best,
danke, jetzt läuft' s.
Mit freundlichen Grüßen
Peter Schiffner
Antworten


Gehe zu:


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