Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: BASIC-Programm zum interaktiven Einstellen der Echtzeituhr? Kategorie: Programmierung Basic (von Laika - 8.01.2024 15:16)
 Als Antwort auf Re: BASIC-Programm zum interaktiven Einstellen der Echtzeituhr? von das |_ Team - 7.01.2024 10:00
Laika nutzt:  Open-Macro
Hallo Dirk,

im Folgenden mein MC-Programm (MC = ein Open Controller). Es ist im Prinzip recht einfach, wohl noch verbesserungs w├╝rdig. Ich brauche es sehr selten, habe daher schon lange nix mehr dran gemacht.

'--------------------------------------------------------------------------------
'Datum + Uhrzeit setzen.
'
'Gelegentlich geraten Datum und Zeit falsch, z.B. wenn an der Elektronik des Hausleitsystems
'gebastelt wird und RN abgeklemmt wird oder dieser aus Versehen auf HI geht. Dann setzt der MC
'die Uhrzeit auf RN-kommen-Zeit. Das z.B. soll korrigiert werden k├Ânnen.

'Ein: -
'Aus: datum_vom_PC = LO, wenn nichts eingegeben wurde

Table wochentag_tabelle
   19823  17513  19817  17519  18034  21345  21359
   'Mo     Di     Mi     Do     Fr     Sa     So
TabEnd
define WOCHENTAG_TABELLE_LAENGE 6  'eins weniger als Anzahl Eintr├Ąge

#datum_zeit_setzen

   datum_vom_PC = LO   'Wenn 'datum_vom_PC = LO' bleibt, wurde nichts eingegeben

   'Datum und Uhrzeit vom PC anfordern.
   'Beginnen mit dem Tag ("day")
   print "Alles zweistellig eingeben !"
   print "Tag 00 - 31: ";
   for i1 = 0 to 50    '50 * 300 msec = 15 sec auf eine Eingabe warten
      if RXD then goto datum_zeit_eingeben
      pause 15         '15 * 20 = 300 msec
   next
   goto datum_zeit_eingeben_ende  
     'Wenn nichts eingegeben wird, kommt das Programm ├╝ber "next" aus der
     'Warteschleife heraus, darf dann nat├╝rlich NICHT in die folgende Eingabe laufen!

   #datum_zeit_eingeben

      'Die weiteren Daten: Monat, Jahr, Stunde, Minute, Sekunde und Wochentag
      'Vom PC werden alle Daten - day, month, ... zweistellig (!) gesendet,
      'd.h. in zwei Byte
      'Vom MC werden sie zu einer Zahl day = 1 - 31, month = 1 - 12 usw.
      'zusammen gesetzt.
      'Damit kann man auch mit Hyperterminal arbeiten.
      'Nach "get" immer ein Zeilenvorschub, sonst ├╝berschreibt das folgende
      'print die Eingabe

      get b1_i1  'print "Tag ... " war oben schon
      get b2_i1
      i2 = (b1_i1 - 48)*10 + b2_i1 - 48  '48 ^= ASCII-Basiswert der Ziffer "0"
      if i2 = 0 then  goto datum_zeit_eingeben_ende
      day = i2
      print

      print "Monat 01 - 12: ";
      get b1_i1
      get b2_i1
      month = (b1_i1 - 48)*10 + b2_i1 - 48
      print

'       print "Jahr 20, 21, ...: ";
'       get b1_i1
'       get b2_i1
      year = 23 '(b1_i1 - 48)*10 + b2_i1 - 48
      print

      print "Stunde 00 - 23: ";
      get b1_i1
      get b2_i1
      hour = (b1_i1 - 48)*10 + b2_i1 - 48
      print

      print "Minute 00 - 59: ";
      get b1_i1
      get b2_i1
      minute = (b1_i1 - 48)*10 + b2_i1 - 48
      print

      print "Wochentag: Mo = 01, Di = 02, Mi = 03, Do = 04, Fr = 05, Sa = 06, So = 07: ";
      get b1_i1
      get b2_i1
      dow = (b1_i1 - 48)*10 + b2_i1 - 48
      print   'noch ein Zeilenvorschub zum Abschluss

      datum_vom_PC = HI

   #datum_zeit_eingeben_ende

   'Ausgabe, damit es auch in Hyperterminal lesbar ist
   gosub print_version
   print day; "."; month; "."; year; ", ";
   gosub print_zeit
   print ", dow = "; dow; " ^= ";

   looktab wochentag_tabelle, dow - 1, i1
   put b1_i1     'Der als Zahlen├Ąquivalent des 2-stelligen ASCII-Strings nach ┬┤i1┬┤
   put b2_i1     'geladene Wochentag kann als Buchstabe nur mit ┬┤put┬┤ ausgegeben werden.
   print         'Noch einen print = Zeilenvorschub ausgeben, da ┬┤put┬┤ nichts macht

i1 = SUB_RETURN    'i1 als Returnwert "alles ok"
return


Ich gebe das z.Zt. mit Hyperterminal ein, da mein VBA-Programm Probleme macht, dieses sollte die PC-Uhrzeit nehmen und an den MC senden.

Option Explicit   'Variablen explizit definieren
Option Base 1     'Felder und Text-Arrays sollen bei Index = 1 beginnen

'*********************************************************************************
Sub Datum_Zeit_setzen()
   
   Dim monatsname
   Dim datumszellen As Object
   Dim bool_1 As Boolean
   '------------------------------------

MsgBox "Datum/Zeit setzen mit VBA funktioniert (noch) nicht" & vbLf & vbLf & _
         "Hyperterminal benutzen", _
         vbExclamation, _
         "Datum/Zeit setzen"
Exit Sub '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

   Bereich_loeschen
   Zeile = 0
   Wochentage = Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So")
   
   [datenueberschrift] = Array("Datum/Uhrzeit an den MC senden", "", "", "", "", "", "", "", "", "", "")
'   MC_Datum_Zeit = Array(Day(Now), Month(Now), Year(Now) - 2000, Hour(Now), Minute(Now), Weekday(Now))
   MC_Datum_Zeit = Array(Day(Now), Month(Now), Hour(Now), Minute(Now), Weekday(Now))
   
   
   'Zun├Ąchst Auftrag "Datum eingeben" an den MC schicken, ...
   If Not MC_Daten_anfordern(Asc("d"), False, BEENDEN_MIT_STERN) Then Exit Sub   '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

   'Daraufhin muss der zweizeilige String
   '  "Datum/Zeit eingeben: ALLE als ASCII zweistellig !!"
   '  "Tag 01 - 31: "
   'vom MC zur├╝ck kommen. Dieser wird in die ActiveCell = [Gelesene_Daten] geschrieben.
   'Danach ist ActiveCell eine Zeile weiter geschaltet.
   'Der MC wartet mit "get" auf die Eingabe von Datum/Uhrzeit, das f├╝r Tag, Monat usw.
   'jeweils zweistellig (!) per SENDBYTE ├╝bertragen wird.

   i1 = 22 'Day(Now)
   z1 = Trim(Str(i1))
   z1 = IIf(z1 < 10, "0", "") & z1
'MsgBox z1
   SENDBYTE Asc(Mid(z1, 1, 1))
bool_1 = MC_Daten_anfordern(0, False, True)
'MsgBox Asc(Mid(z1, 1, 1))
   SENDBYTE Asc(Mid(z1, 2, 1))
'MsgBox Asc(Mid(z1, 2, 1))
bool_1 = MC_Daten_anfordern(0, False, True)

'Exit Sub

   i1 = Month(Now)
   z1 = Trim(Str(i1))
   z1 = IIf(z1 < 10, "0", "") & z1
   SENDBYTE Asc(Mid(z1, 1, 1))
   SENDBYTE Asc(Mid(z1, 2, 1))
   
'   i1 = Year(Now) - 2000
'   z1 = Trim(Str(i1))
'   z1 = IIf(z1 < 10, "0", "") & z1
'   SENDBYTE Mid(z1, 1, 1)
'   SENDBYTE Mid(z1, 2, 1)
   
   i1 = Hour(Now)
   z1 = Trim(Str(i1))
   z1 = IIf(z1 < 10, "0", "") & z1
   SENDBYTE Asc(Mid(z1, 1, 1))
   SENDBYTE Asc(Mid(z1, 2, 1))
   
   i1 = Minute(Now)
   z1 = Trim(Str(i1))
   z1 = IIf(z1 < 10, "0", "") & z1
   SENDBYTE Asc(Mid(z1, 1, 1))
   SENDBYTE Asc(Mid(z1, 2, 1))
   
   i1 = Weekday(Now, vbMonday)
   z1 = Trim(Str(i1))
   z1 = IIf(z1 < 10, "0", "") & z1
   SENDBYTE Asc(Mid(z1, 1, 1))
   SENDBYTE Asc(Mid(z1, 2, 1))
   
Exit Sub '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

'   Set datumszellen = ActiveCell.Offset(-1, 1)     'Zeiger auf eine Spalte neben "tag"
'   For i1 = 1 To UBound(MC_Datum_Zeit)
'      SENDSTRING (MC_Datum_Zeit(i1) & vbCr & vbLf)
'      MC_Daten_anfordern 0, False, BEENDEN_MIT_LF
'      With datumszellen.Offset(i1, 0) ' - 1, 0)
'         .Value = MC_Datum_Zeit(i1)
'         .NumberFormat = "0"
'         .HorizontalAlignment = xlRight
'         .IndentLevel = 2
'      End With
'   Next i1

   'Zum Schluss noch Monatsname und Wochentag rein
   monatsname = Array("Januar", "Februar", "M├Ąrz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember")
   With datumszellen.Offset(1, 1)
      .Value = monatsname(Month(Now))
      .HorizontalAlignment = xlLeft
      .IndentLevel = 1
   End With

   With datumszellen.Offset(5, 1)
      .Value = Wochentage(Weekday(Now))
      .HorizontalAlignment = xlLeft
      .IndentLevel = 1
   End With

End Sub

'*********************************************************************************
'*********************************************************************************


Das auf die Schnelle, muss gleich weg. Weitere Fragen ggf. sp├Ąter. Vielleicht hast Du Verbesserungsvorschl├Ąge.
Gru├č, Laika

 Antwort schreiben

Bisherige Antworten:

Re: BASIC-Programm zum interaktiven Einstellen der Echtzeituhr? (von das |_ Team - 8.01.2024 19:34)
    Re: BASIC-Programm zum interaktiven Einstellen der Echtzeituhr? (von Laika - 8.01.2024 21:38)
        Re: BASIC-Programm zum interaktiven Einstellen der Echtzeituhr? (von das |_ Team - 9.01.2024 20:15)
            Forschung: Echtzeituhr (RTC) interaktiv feinjustieren - ca. auf 1/10 Sekunde genau (von das |_ Team - 11.01.2024 21:41)