Das Programm ist recht komplex und geht über 30 Bausteine (OB's und FB's). Das Prinzip ist ganz einfach: Nach und nach wird jeder Eingang geprüft und bei einem Wechsel (E xx.x <> zugehörigem Merkerbyte) wird ein FB mit den Parametern (Welcher Eingang, usw.) aufgerufen.
Im FB wird aus DB5 Datum und Zeit gelesen und an eine dem jeweiligen Eingang zugeordnete Stelle im DB2 geschrieben (dann kommt noch ein bisschen kopieren von DB2 nach DB3, damit man später Zeit- und Zählerdifferenzen bestimmen kann).
Entscheidend ist hier jedoch, dass ich aus dem DB5 nur Stunden, Minuten und Sekunden (und natürlich Datum, Wochentag usw.) lesen und in den DB2 übertragen kann. Dann die Impulse an den Eingängen aber auch in Zyklen kleiner 1 Sekunde kommen, müsste ich mir nun in meinem DB2 auch Zeiten merken können, die einen Bruchteil einer Sekunde ausmachen.
Ich habe schon getüftelt, ob ich in einen Zähler bei jedem Zyklus (Programmzyklus) vorwärts erhöhe und auf den Wechsel der Sekunden in DB5 checke. Beim Wechsel der Sekunde merke ich mir dann den alten Zählerstand, schreibe in in DB2 (Der wird ja dann vom PC geholt) und setze ihn dann auf 0. Beim Merken der Uhrzeit im DB für den jeweiligen Eingang, würde ich mir den aktuellen Zählerstand mitmerken. Im PC könnte ich dann nach dem Prinzip:
x = (Zähler zum Zeitpunkt Sekundenwechsel = 1 Sekunde)
Genaue Zeit = Datum + Stunde + Minute + Sekunden + (1/x)*Zähler
die Zeit genauer bestimmen. Hier laufe ich aber Gefahr, dass sich der Wert x abhängig von der Programmdurchlaufzeit ändert und ich evtl. mit einem ungenauen x Arbeite (wenn länge Zeit an diesem Eingang nichts angekommen ist).
Ab ehrlich gesagt, scheitere ich schon daran, den Zähler hochlaufen zu lassen, und mit beim Sekudnenwechsel die Zahl zu merken und zurückzusetzen!
Vielleicht hast Du eine bessere (einfachere ...?) Idee.
Gruß,
Stefan