Uhrzeit Sync zwischen S7-300 und MP377

Züttu

Level-1
Beiträge
195
Reaktionspunkte
19
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab am Wochenende die Uhrzeit-Synchronisation zwischen meiner S7-300 CPU und meinem MP377 nach einem Beispiel von Siemens (hier)programmiert. Dazu habe ich einen Baustein verwendet den ich bei Siemens runtergeladen habe (hier).
Soweit so gut, funktioniert auch prima. Neugierig wie ich bin hab ich mir die importierten Bausteine mal angeschaut und habe vier Ladebefehle in serie gefunden (FB101, NW3), gibt es irgend eine Funktion wo sowas funktionieren kann? oder kann das ein Fehler sein?
 
Es geht hier um diese Anweisungen (die DATE_AND_TIME-Variable beginnt bei LB2):
Code:
//Network 3: Split MSEC and Day of week
// Write ZERO to the reserved Byte 
      L     0
      [COLOR="Red"]L     LB     8[/COLOR]                    // MSEC

// Split MSEC and day of week
      L     LB     9                    // MSEC + Day of week
      L     7
      UW    
      T     LB     9                    // Day of week

Die zweite Zeile "L LB 8" muß natürlich "T LB 8" heißen.
Der Fehler fällt aber nicht auf, weil die OP die Millisekunden offensichtlich nicht beachten.
Kostenlose Siemens-Beispiel-Programme müssen nicht fehlerlos, geschweige denn perfekt sein. ;)
Die sind eigentlich nur als Anschauungsobjekte gedacht.

Weil der Siemens-Beispiel-FB101 "** SYS_CLK_WinCE_V2" noch weitere Unzulänglichkeiten besitzt,
habe ich mir den vor Jahren mal umgeschrieben und kommentiert, siehe AWL-Quelle im Anhang.
Mein FB101 wird nun so aufgerufen:
Code:
CALL  "SYS_CLK_WinCE" , "DB SYS_CLK_WinCE"       // FB101, DB101
 Zyklus1   :="ZYKLUS1"                           // M0.2 - im 1. OB1-Zyklus true
 T_Watchdog:="T_OP_SetTime"                      // T31
 IO_SetTime:="OP->SPS".OP_SetTime                // DB32.DBX30.0 - Flag von OP
 IO_Job_No :="DB Job mailbox".AreaPointer.Job_No // DB31.DBW0
 IO_Param_1:="DB Job mailbox".AreaPointer.Para_1 // DB31.DBW2
 IO_Param_2:="DB Job mailbox".AreaPointer.Para_2 // DB31.DBW4
 IO_Param_3:="DB Job mailbox".AreaPointer.Para_3 // DB31.DBW6
NOP   0

Der Baustein eignet sich aber nur, wenn nur 1 OP an der Steuerung angeschlossen ist bzw.
nur 1 OP auf den Steuerungsauftrag 40 reagiert (einen Bereichszeiger "Steuerungsauftrag"
auf Adresse DB31.DBW0 hat).
Wegen dieser Problematik mache ich die Uhrzeitsynchronisation nicht mehr über Steuerungs-
aufträge, sondern schreibe mit den OP direkt in eine DATE_AND_TIME-Variable in der CPU.

Gruß
Harald
 

Anhänge

  • SYS_CLK_WinCE_v04.AWL.txt
    8,1 KB · Aufrufe: 67
Zuviel Werbung?
-> Hier kostenlos registrieren
was wird eigentlich womit sysnchronisiert?

cpu-zeit -> panel ?
dafür eignet sich der breichszeiger datum_uhrzeit_sps am besten.

panel-zeit -> cpu ?
dann geht das super einfach über vb-script

im panel in einem wecker minütlich (oder seltener) das script aufrufen
PHP:
Dim datum,zeit
hmi_datum = Date
hmi_zeit = Time
script_datum_zeit = true ''wird in der steuerung wieder zurückgesetzt
hmi_datum typ: date db202.dbw90
hmi_zeit typ: time_of_day db202.dbd92
script_datum_zeit typ: bool db202.dbx96.0

sps-prog siehe bild
 

Anhänge

  • zwischenspeicher.jpg
    zwischenspeicher.jpg
    58,3 KB · Aufrufe: 81
Zuletzt bearbeitet:
simple Uhrzeit-Synchronisation

Hier hatte ich mal ausführlich beschrieben, wie simpel ich die Uhrzeit-Synchronisation mache.
(Uhrzeit CPU -> OP, Uhr stellen OP -> CPU, ohne Steuerungsaufträge und ohne Hilfsmerker).

Das funktioniert mit beliebig vielen OP an einer CPU. Die OP können auch (bis auf die Netzadresse)
das identische WinCCflex-Projekt enthalten.

Gruß
Harald
 
Danke für die vielen Antworten, die Beispiel-Lösung von Siemens funktionert bestens, werde aber trotzdem einen Blick auf die Lösung von Harald werfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also...

Also Ich mach das immer so:

Habe auf der SPS einer FB der die uhrzeit stellt, und auch die uhrzeit je nach jahreszeit in sommer oder winterzeit ausgibt! Im panel stelle ich dann noch den zeiger datum uhrzeit steuerung ein, so das die panel zeit immer zur sps zeit passt. Zum uhrstellen, schreibt man vom Panel über ein bild die gewünschte zeit in eine datetime struktur und setzt dann ein bit!
 
Zurück
Oben