
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
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 "Monat 01 - 12: "; get b1_i1 get b2_i1 month = (b1_i1 - 48)*10 + b2_i1 - 48 ' print "Jahr 20, 21, ...: "; ' get b1_i1 ' get b2_i1 year = 23 '(b1_i1 - 48)*10 + b2_i1 - 48 print "Stunde 00 - 23: "; get b1_i1 get b2_i1 hour = (b1_i1 - 48)*10 + b2_i1 - 48 print "Minute 00 - 59: "; get b1_i1 get b2_i1 minute = (b1_i1 - 48)*10 + b2_i1 - 48 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 |