Step 7 Systemzeit als Pointer??

jürgen g

Level-1
Beiträge
31
Reaktionspunkte
1
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
 
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.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
.

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
 
Zuletzt bearbeitet:
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
 
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
 
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
 
Zurück
Oben