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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: FC38 und der Any....

  1. #11
    Registriert seit
    08.12.2004
    Beiträge
    94
    Danke
    2
    Erhielt 16 Danke für 14 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, wollte auch noch meinen Senf dazu geben:

    Der Parameter S, des FC38 ist als String[256] deklariert und ist damit kein Anypointer.
    Es scheint ein DB-Zeiger zu sein, dieser ist 6 Byte lang und enthält die DB-Nummer (16Bit) plus Bereichszeiger (32Bit).
    Daher kann beim Aufruf des FC38 ein Anypointer nicht funktionieren.

    Der aufrufende Code z.B. im OB1 sieht wie fogt aus:

    CALL "STRNG_I"
    S :=DB1.S1 // dekl: DBX 4.0 S1 String[4]
    RET_VAL:=MW10

    Nackter MC7 Code, der Call ist eine Art Makro:

    Call
    BLD 1
    = L 20.0
    L 1 // hier wird die DB-Nummer geladen
    T LW 21 // und in LW21 abgelegt
    L P#DBX 4.0 // DBX4.0 als Bereichszeiger laden
    T LD 23 // und in LD 23 ablegen
    UC FC 38 // UC FC38, danach folgt Param-Liste
    P#L 21.0 // Adr des Param S1, DB-Zeiger
    P#M 10.0 // Adr. des Retval
    BLD 2
    End Call


    Bei der Übergabe eines Anypointers würden 10 Byte übergeben, bei diesem DB-Zeiger werden nur 6 Byte übergeben.

    mfG. Klaly

  2. Folgende 2 Benutzer sagen Danke zu klaly für den nützlichen Beitrag:

    Ralle (03.11.2008),SIGGI (14.04.2009)

  3. #12
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Zitat Zitat von klaly Beitrag anzeigen
    Hallo, wollte auch noch meinen Senf dazu geben:

    Der Parameter S, des FC38 ist als String[256] deklariert und ist damit kein Anypointer.
    Es scheint ein DB-Zeiger zu sein, dieser ist 6 Byte lang und enthält die DB-Nummer (16Bit) plus Bereichszeiger (32Bit).
    Daher kann beim Aufruf des FC38 ein Anypointer nicht funktionieren.

    Der aufrufende Code z.B. im OB1 sieht wie fogt aus:

    CALL "STRNG_I"
    S :=DB1.S1 // dekl: DBX 4.0 S1 String[4]
    RET_VAL:=MW10

    Nackter MC7 Code, der Call ist eine Art Makro:

    Call
    BLD 1
    = L 20.0
    L 1 // hier wird die DB-Nummer geladen
    T LW 21 // und in LW21 abgelegt
    L P#DBX 4.0 // DBX4.0 als Bereichszeiger laden
    T LD 23 // und in LD 23 ablegen
    UC FC 38 // UC FC38, danach folgt Param-Liste
    P#L 21.0 // Adr des Param S1, DB-Zeiger
    P#M 10.0 // Adr. des Retval
    BLD 2
    End Call


    Bei der Übergabe eines Anypointers würden 10 Byte übergeben, bei diesem DB-Zeiger werden nur 6 Byte übergeben.

    mfG. Klaly
    Das würde mir einleuchten.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #13
    Registriert seit
    03.11.2008
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hm evtl hab ich da zu schnell geschossen. da im hintergrund aber eigentlich so gut wie alles ein zeiger is kann man da evtl was hacken. ich hab nur grad keine zeit mir das genauer anzusehen. jetzt wo ich aber darüber nachdenke fällt mir wieder ein das ich evtl deshalb meine eigenen asci to was anderes bausteine habe. ich meld mich später noch mal zu der sache. evtl auch erst morgen oder im lauf der woche. jetzt möcht ichs nähmlich auch genau wissen. kann ja gut sein das ich in dem fall scheiß verzapft habe. aber es gibt meist einen weg. auch wenn er selten in kop/fup darstelbar is hab mir den fc nicht angesehen und daher auch nicht bemerkt das da eine string variable erwartet wird. zur not muss man halt mit einigen copy funktionen einen dynamischen string erzeugen. das geht auf alle fälle.

    wie gesagt ich bleib drann und poste dann was ich rausfinde.

    eine frage noch. wie kommt man an den nackten mc7 code ran? hab das noch nie gebraucht aber schaut interresant aus.

  5. #14
    Registriert seit
    08.12.2004
    Beiträge
    94
    Danke
    2
    Erhielt 16 Danke für 14 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo hpl,

    > eine frage noch. wie kommt man an den nackten mc7 code ran? hab das noch nie gebraucht aber schaut interresant aus.

    Simatic Manager, Datei, "Memory Card Datei", neu.
    Irgend einen Dateinamen xyz.wld angeben.
    Nun öffnet sich ein Fenster, dort kopierst du den Baustein deines Interesses hinein.

    Wenn du diesen Baustein nun öffnest, dann kann der Editor die CALL Referenzen nicht auflösen und zeigt dir diese "CALL Makros" in fast reinem AWL an.

    Die Datei xyz.wld enthält übrigens den Baustein in reiner binärer Form, mit Header, Parametern, Bausteinrumpf und trailer.

    mfG. klaly

Ähnliche Themen

  1. Antworten: 13
    Letzter Beitrag: 24.09.2009, 12:54

Lesezeichen

Berechtigungen

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