Pointer auf Instanzdbdaten...

Jochen Kühner

Level-3
Beiträge
4.291
Reaktionspunkte
527
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,


Ich habe einen fc zur kommunikation mit einer siwarexbaugruppe geschrieben.

diesen möchte ich nun durch einen fb erstezen.

nun bruache ich aber am sfc59 einen pointer auf einen 5 byte großen datenbereich.
diesen hatte ich vorher so gemacht:
P#DB4.DBX34.0 BYTE 5

nun, wie kann ich diesen pointer auf meinen instanz db zeigen lassen??
 
Pointer

Hallo,

ich würde sagen du deklarierst eine Variable ANY. Mit L DINO bekommst du die Nr des aktuellen Instanz-DB. Den Pointer auf den Datenbereich kriegst du mit L P##Daten. Dann die Daten für den ANY zusammenstellen und müsste gehen... Vielleicht gehts aber auch schon wenn du P#DIX34.0 BYTE 5 ranschreibst. Ich würde versuchen alles symbolisch zu machen.


MfG
André Räppel
 
Stimmt wird funktionieren.

Das Problem hatte ich vor kurzen auch und mir ist auch nur diese Lösung eingefallen.

Nicht sehr schön :cry: aber funktioniert . . . .
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe im Moment das gleiche Problem wie oben beschrieben:

beim Aufruf des sfc 82 möchte er einen ANY-Parameter:
Code:
      CALL  "CREA_DBL"
       REQ      :=
       LOW_LIMIT:=
       UP_LIMIT :=
       COUNT    :=
       ATTRIB   :=
       SRCBLK   :=p#dix34.0 byte 5
       RET_VAL  :=
       BUSY     :=
       DB_NUM   :=

dieser wird auch angenommen, jedoch bekomme ich einen Fehler bei ret_val!

wenn ich ganz normal P#db100.dbx 32.0 byte 5 schreibe macht er das was ich will!

Was kann ich tun?

Vielen dank
MFG Küffel
 
Hallo Jochen,

in Instanz-DBs direkt reinschreiben ist irgendwie nicht so schön. Warum legst du diese Daten nicht in einem globalen DB ab? Und einen Pointer auf diese Daten als Parameter an deinen FB.


Gruss, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Raika,

ich schreibe DIX weil ich in den Instanz-DB dieses FB's schreiben will!
Es macht aber keinen Unterschied, ich kann auch zuerst den DB noch mal öffnen und mit DBX arbeiten. Der fehler bleibt der gleiche!

@Onkel

Ich glaube Jochens Problem war abgeschlossen, ich habe diesen Beitrag über die Suche gefunden und wollte das Problem noch mal aufgreifen.
 
Ich lege die Struktur der Siwarex-Datensätze im statischen Bereich des Instanz-DB im jeweiligen Datenformat an.
z.B.

Für Datensätze 31/32:
ActDatas.Brutto (INT)
ActDatas.Status (BYTE)
ActDatas.UpdateCounter (BYTE)
ActDatas.Digits (WORD)
ActDatas.AsyncErr (WORD)
ActDatas.SyncErr (WORD)

Im SFC59 schreibst Du nur noch RECORD:=#ActDatas
 
erzeuge eines any-zeiger
hier ein beispiel für den sfc20

QANY: temp: adresse: 0

Code:
      L     W#16#1002                   //Typ BYTE
      T     LW     0
      L     #Blockgroesse               //Anzahl Bytes
      T     LW     2
      L     #Ziel_DB                    //Ziel-DB
      T     LW     4
      L     #QAnfang_schleife           //Anfang der Quelle
      SLD   3
      OD    DW#16#84000000
      T     LD     6

      CALL  SFC   20
       SRCBLK :=#QANY
       RET_VAL:=#RET_VAL
       DSTBLK :=#ZANY
 
Zurück
Oben