Nichtqualifizierte Daten als FC-Parameter ?

Ralle

Supermoderator
Teammitglied
Beiträge
14.403
Punkte Reaktionen
3.373
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
 

jogi

Well-known member
Beiträge
81
Punkte Reaktionen
0
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
 
OP
Ralle

Ralle

Supermoderator
Teammitglied
Beiträge
14.403
Punkte Reaktionen
3.373
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
 

jogi

Well-known member
Beiträge
81
Punkte Reaktionen
0
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
 
OP
Ralle

Ralle

Supermoderator
Teammitglied
Beiträge
14.403
Punkte Reaktionen
3.373
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
 

plc_tippser

Well-known member
Beiträge
2.500
Punkte Reaktionen
301
@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
 
Oben