oscat.lib > oscat.lib fuer Step 7

siemens und sps timer

(1/2) > >>

hugo:
hi kann mir jemand sagen wie bei siem,ens der sps timer (1ms auflösung) ausgelesen wird?
bei codesys ist dies time(); ist dies bei siemens auch so?
hat der hardwaretimer auch 1ms auflösung?

wie wird bei siemens die adresse einer variable ermittelt? bei codesys ist dies adr();
wie wird bei siemens die größe einber variable ermittelt? bei codesys ist dies sizeof();

danke, hugo

dalbi:
Hallo Hugo,

Systemzeit kann mittels TIME_TCK() gelesen werden.

Auszug S7-Hilfe:
Mit der SFC 64 "TIME_TCK" (time tick) lesen Sie die Systemzeit der CPU. Die Systemzeit ist ein "Zeitzähler", der von 0 bis max. 2147483647 ms zählt. Bei einem Überlauf der Systemzeit wird wieder ab 0 gezählt. Das Zeitraster und die Genauigkeit der Systemzeit betragen bei S7-400 und bei der CPU 318 1 ms, bei allen anderen CPUs der S7-300 10 ms. Die Systemzeit wird nur von den Betriebszuständen der CPU beeinflußt.

Die Adresse einer Variable läst sich z.B. so ermitteln:


--- Code: ---VAR_INPUT
    pt: POINTER;
    at_pt AT pt: STRUCT  // sicht auf die Variable pt
        DBNr: WORD;
        Adr: DWORD;
    END_STRUCT;   
    size : INT;
END_VAR

--- Ende Code ---

im Programm kann dann mittels at_pt.DBNr und at_pt.Adr darauf zugegriffen werden.

mfg
Daniel

dalbi:
Hallo Hugo,

beim Datentyp ANY ist die Struktur dann folgende.


--- Code: ---pt: ANY;
at_pt AT pt: STRUCT  // sicht auf die Variable pt
    Id : BYTE;     // ist immer 16#10
    DataType:BYTE; 
    Lenght:WORD; 
    DB_Nummer:WORD; 
    Byte_Pointer:DWORD;
END_STRUCT; 

--- Ende Code ---

DataType:
Hexadezimal code | Datentyp | Beschreibung
b#16#00               NIL           Null pointer
b#16#01               BOOL        Bits
b#16#02               BYTE        Bytes (8 Bits)
b#16#03               CHAR        Zeichen (8 Bits)
b#16#04               WORD       Wörter (16 Bits)
b#16#05               INT          Ganz zahlen (16 Bits)
b#16#06               DWORD     Wörter (32 Bits)
b#16#07               DINT        Ganz zahlen (32 Bits)
b#16#08               REAL        Gleitpunkt zahlen (32 Bits)
b#16#09               DATE        Datum
b#16#0A              TIME_OF_DAY (TOD)  Uhrzeit
b#16#0B              TIME         Zeit
b#16#0C              S5TIME     Daten typ S5TIME
b#16#0E              DATE_AND_TIME (DT)  Datum und Zeit (64 Bits)
b#16#13              STRING     Zeichen kette
 
mfg
Daniel

hugo:
was passiert beim system tck mit dem höchstwertigen bit?
falls der counter nur bis 2 milliarden zählt hat er nur 31 bit und das 32. bit bleibt immer null.
das hat zur folge das eine differenz zweier timer ticks beim überlauf schiefgeht.

katastrophe.....

oder zählt der timer vielleicht doch bis volle 32 bit ?

dalbi:
Hallo Hugo,

anbei ein Beispiel wie ich das Problem gelöst habe:


--- Code: ---  // Regler Abtastzeit ermitteln
  tx1 := tx;  // Altwert speichern
  tx := Time_TCK();
  ST := tx - tx1;
 
  IF ST < t#0ms THEN
    ST := ST + T#24D_20H_31M_23S_647MS;
  END_IF;
 
  TA := DINT_TO_REAL(TIME_TO_DINT(ST))/1000;

--- Ende Code ---

mfg
Daniel

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln