Nichtqualifizierte Daten als FC-Parameter ?

Ralle

Super-Moderator , User des Jahres 2006-2007
Teammitglied
Beiträge
15.414
Reaktionspunkte
4.043
Zuviel Werbung?
-> Hier kostenlos registrieren
Folgender Bausteinaufruf wird vorgenommen:



Code:
AUF   #DB_Axis 
CALL  "IFX_INIT_PARAMETER"              //FC
       uiAxisDB   :=#DB_Axis_NR         //IN
       uiParaDB   :=#DB_Init_NR         //IN
       bExecute   :=#Init_Start         //IN 
       bErrorOut  :=DBX190.0            //OUT
       bDone      :=DBX190.1            //OUT
       bBusy      :=DBX190.2            //OUT
       uiErrorPos :=DBW192              //OUT

In dem FB wird der DB_Init über die Integer uiParaDB geöffnet.
Wenn jetzt in dem FC die Out-Variablen beschrieben werden, wo landen die Werte tatsächlich, im DB_Axis, oder im DB_Init ??? :shock:

ralle
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Ralle,

Die daten dürften im DB_Axis landen.

Zunächst liegen sie ja nach Abarbeitung des FC über das CALL-Makro in den Lokaldaten des aufrufenden Bausteins.
Da das CALL-Makro im aufrufenden Baustein abläuft, kopiert es dann die Lokaldaten in den letzten geöffneten Baustein (Axis)

Gruß Jörg
 
Das haut irgenwie nicht hin, AG ging in STOP, Bereichlängenfehler beim schreiben/lesen im FC, genau an der Stelle, an der in die Out-Parameter geschrieben werden soll. (Der DB_INIT ist um einiges kürzer als der DB_AXIS).
Ich vermute, daß doch in den DB_Init (zuletzt im IFX-FC geöffneter DB)geschrieben werden sollte, der war natürlich zu kurz und peng!

So geht es jetzt, wobei alle Variablen mit "#" Temp-Var sind, ist aber irgendwie nicht gerade schön. Die Temp-Var's fülle ich nur der Vollständigkeit halber vorher wieder auf, sind ja Outputs.

Code:
      AUF   #DB_Axis
      U     DBX  190.0
      =     #Init_Error
      U     DBX  190.1
      =     #Init_Done
      U     DBX  190.2
      =     #Init_Busy

      L     DBW  186
      T     #Number_Para
      L     DBW  188
      T     #Count_Para

      CALL  "IFX_INIT_PARAMETER"
       uiAxisDB   :=#DB_Axis_NR
       uiParaDB   :=#DB_Init_NR
       bExecute   :=#Init_Start
       bErrorOut  :=#Init_Error
       bDone      :=#Init_Done
       bBusy      :=#Init_Busy
       uiErrorPos :=#Init_Error_pos
       number_Para:=#Number_Para
       Count      :=#Count_Para

      AUF   #DB_Axis
      U     #Init_Error
      =     DBX  190.0
      U     #Init_Done
      =     DBX  190.1
      U     #Init_Busy
      =     DBX  190.2

      L     #Number_Para
      T     DBW  186
      L     #Count_Para
      T     DBW  188
 
Ups... :oops:

wieder was g'lernt ! :wink:

hat es eigentlich einen bestimmten Grund, daß Du keine voll-qualifizierten Parameter an den FC schreibst ?
Dann könntest Du dir doch das hin- und herkopiere sparen !

Gruß Jörg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@jogi

Ja, hat einen Grund, der FC wird auch wieder von einem anderen FC aufgerufen, der einen DB übergibt, also geht ein qualifizierter Zugriff leider nicht. (17 Schrittmotoren --> 1 Standardbaustein zum Ansteuern) Der IFX_Init ist ein mitgelieferter Baustein, ich wollte nicht darin rumändern, falls die Herstellerfirma mal eine neue Version liefert.

ralle
 
@Ralle,
im Diagnose U-stack steht der zu letzt geöffnete DB.

Ich hätte jetzt auch auf Jogis Meinung getippt. Kann man mal sehen.

pt
 
Zurück
Oben