Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 6 von 6

Thema: Systemzeit als Pointer??

  1. #1
    Registriert seit
    30.10.2012
    Beiträge
    31
    Danke
    17
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich habe folgendes Problem
    ich lade mir aus der Systemzeit das Byte für den Tag in db2.dbb2
    und verwende den Inhalt als Zeiger um mir Daten in ein anderen DB Tag (Tag 1- 31) abhängig zu speichern.
    Das Problem liegt nun so wie ich das sehe am Format des Datums, den alle Werte ab 10 werden falsch interpretiert.
    So sieht meine Anweisung aus:

    L DB2.DBB2 bei Tag 10 rechnet er mir mit 16 und komme somit natürlich auf ein falsches Ergebnis
    L 4
    *I
    SLW 3
    LAR1


    Nehme ich:

    L 10
    L4
    *I
    SLW 3
    LAR1

    das funktioniert!


    Hat jemand einen Tipp für mich
    War der Meinung den Wert nicht umrechnen zu brauchen hex in Int . Geht das überhaupt?
    Habe dazu leider noch nichts gefunden!

    Gruß

    Jürgen
    Zitieren Zitieren Systemzeit als Pointer??  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Da ist der Tag wohl BCD codiert. Eine Umwandlung zu INT mittels BTI sollte helfen.


    PS: hex ist kein Zahlenformat, sondern eine Darstellungsweise auf Basis der Zahl 16. Es gibt also keine Umwandlung hex zu INT.
    Geändert von hucki (10.01.2014 um 23:34 Uhr)

  3. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    jürgen g (11.01.2014)

  4. #3
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .

    mal "quick and dirty" eingetippt:

    Code:
    CALL SFC1         //Systemzeit holen
    RET_VAL:= #SFC_Return
    CDT:= #Dat_Time
    
    LAR1 P##Dat_Time  //AR1 setzen
    
    
    L LB [AR1,P#2.0]  //dein Byte 2 mit dem Tages-Datum 1-31
    T #Dat_Day_BCD    //nochmal zwischenspeichern für weitere Verwendung
    BTI               //wandeln
    T #Dat_Day_BYTE   //Datum als Dez-Zahl für deine Adressierung im DB "Tag"
    
    T DB2.DBB2
    Geändert von SoftMachine (11.01.2014 um 05:03 Uhr) Grund: Transfer in DB2
    kind regards
    SoftMachine

  5. Folgender Benutzer sagt Danke zu SoftMachine für den nützlichen Beitrag:

    jürgen g (11.01.2014)

  6. #4
    Registriert seit
    30.10.2012
    Beiträge
    31
    Danke
    17
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Vielen Dank für Eure Antworten !
    An den BCD hätte ich auch denken können. Bin mir noch unsicher mit Formaten.

    Ich hätte noch eine weitere Frage:
    Gibt es bei dem Versatz eine max. Größe die Angegeben werden darf?

    Bei
    T DBW [AR1,P#60.0]
    funktioniert meine Adressierung

    Bei
    T DBW [AR1,P#76.0]
    geht meine CPU auf Stopp


    Bin mir sicher den richtigen DB angesprochen zu haben und dieser ist auch bis DBW 268 angelegt.
    Im AR1 liegt auch nur ein Wert von z.B. : 1

    Gruß
    Jürgen

  7. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Schau in den Diagnosepuffer der CPU, da steht auf welche Adresse das Programm zugreifen wollte.
    Offensichtlich ist der DB online in der CPU nicht groß genug - hast Du den DB in die CPU geladen und öffnet das Programm den richtigen DB?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    jürgen g (11.01.2014)

  9. #6
    Registriert seit
    30.10.2012
    Beiträge
    31
    Danke
    17
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für Eure Hilfe!

    Jetzt funktioniert alles.
    Habe diesen Baustein als Multiinstanz aufgerufen und beim Testen alle bis auf einen Aufruf ausgeblendet, so dachte ich zumindest.
    Habe aber doch noch einen übersehen dessen DB noch nicht fertig deklariert war. Wollte ja erst mal die Funktion testen.
    Und mein Zeiger hat auch auf diesen gezeigt und deshalb ging meine CPU auf stopp.
    Jetzt habe ich diesen auch noch ausgeblendet und alles Funktioniert.

    Vielen, Vielen Dank für Eure Hilfe

    Gruß

    Jürgen

Ähnliche Themen

  1. ANY Pointer als In Parameter...
    Von haraldign im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 05.02.2016, 13:35
  2. Pointer als IN (FC/FB) wieder übergeben als Pointer
    Von saarlaender im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 18.06.2012, 11:47
  3. Pointer an FC als IN
    Von Django2020 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 21.05.2012, 19:33
  4. Pointer als IN/Out an FC
    Von mitchih im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.10.2008, 09:21
  5. Pointer als IN im FC verarbeiten
    Von plc_tippser im Forum FAQ
    Antworten: 1
    Letzter Beitrag: 29.06.2006, 14:29

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •