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

Ergebnis 1 bis 8 von 8

Thema: adressierung DB über Pointer

  1. #1
    Registriert seit
    06.06.2006
    Beiträge
    19
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo......

    CPU: 315-2DP

    ich habe einen FB, in den SFC14/15 aufgerufen wird. Die eingelesenen Daten (oder die zu schreibenden Daten) werden in einen DB abgespeichert (z.B. #Memory.InData). Dies ist ein Struct im DB. Die größe ist z.Zt. 32 Bytes (konstant). Dieser Bereich soll auf 64 Bytes erweitert werden (kein Problem). Die Größe des gelesenen Datenfeldes soll nun variabel (zwischen 32 und 64 Byte) gestaltet werden. Die größe soll außerhalb des FB (z.B. im OB1) vorgegeben werden. Diese größe soll dann in einer Variablen im DB hinterlegt werden. Wird jetzt im FB der SFC14/15 aufgerufen, so soll über ein Pointer die Speicheradresse (Anfangsadresse) und die variable Speicherlänge (steht schon in Variable; von außen vorgegeben) den SFC als Zielparameter (Quellparameter) vorgegeben werden. Problem: dynamische Veränderung der Länge der einzulesenden Daten.

    ich bin für jede hilfe dankbar
    Zitieren Zitieren adressierung DB über Pointer  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Denke mal du brauchst was über Any-Zeiger, den SFC14/15 für Record nutzt.

    Guckst du hier:

    http://www.esatex.com/SPS-Forum/show...er+%FCbergeben

    und nimmst du Suchfunktion mit "ANY"
    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

  3. #3
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Hallo Tony,

    ..Die Größe des gelesenen Datenfeldes soll nun variabel (zwischen 32 und 64 Byte) gestaltet werden...
    Du kannst zwar die Größe des ANY-Pointers variable gestalten, aber die SFC14/15 funktionieren nur dann, wenn die Größe des Datenfeldes mit den projektierten Blockgrößen in der HW-Konfig übereinstimmen. Siehe Onlinehilfe zu den SFCs.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  4. #4
    TonyMono ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.06.2006
    Beiträge
    19
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hallo onkel.....

    Die eingelesenen Daten werden in einen instanzen-DB abgelegt. Die Datenfeldgröße für die einzulesenden Daten ist immer 64 byte. Jetzt gebe ich durch die HW-Config vor wieviel daten ich einlesen will (z.B. 32Bytes oder 64Byte). Diese Größe ist variabel, das Datenfeld immer 64Byte groß. Beim Einlesen spielt es keine rolle, da ja durch HW-Conf die größe vorgegeben ist. Ist das Datenfeld im DB größer als die Menge der einzulesenden Daten, werden die übrigen Bereiche nicht benutzt (??).
    Wie ist es dann beim schreiben?? mein Datenfeld(64Byte), es sollen aber nur 32 Byte an slave geschrieben werden. Ich muß dann im OB1 doch eine Variable belegen, in der die aktuelle größe der durch die hw-conf vorgegebene Datenmenge enthalten ist (kann ja zwischen 16, 32, 64 Byte variieren). diese Variable in den DB ablegen ??? Ich kann bei sfc14/15 mit ANY parametrieren (P#DB14.DBX366 Byte 32). die 32 gibt mir die größe der Daten an. diese größe will ich verändern können. Die größe habe ich in einer variablen drinstehen. wie kann man das realisieren ???

  5. #5
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    der anyzeiger ist folgendermassen aufgebaut.

    Code:
    //QANY: Typ: Any: Adresse 0.0
     
          L     W#16#1002                   //Typ BYTE (INT)
          T     LW     0
          L     #Blockgroesse               //Anzahl Bytes (INT)
          T     LW     2
          L     #FiFo_DB                    //Quell-DB (INT)
          T     LW     4
          L     #QAnfang_schleife           //Anfang der Quelle (INT)
          SLD   3
          OD    DW#16#84000000
          T     LD     6
    Geändert von volker (07.06.2006 um 09:40 Uhr)
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

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

    SIGGI (07.03.2009),streifenkarl (24.09.2007)

  7. #6
    TonyMono ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.06.2006
    Beiträge
    19
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    CALL "DPWR_DAT"
    LADDR :=#Ident_Control_Address
    RECORD :=#Head_1.OutData
    RET_VAL:=#Head_1.Ret_Val_SFC15
    R #Head1_exe
    SPA aus1

    rec1: CALL "DPRD_DAT"
    LADDR :=#Ident_Control_Address
    RET_VAL:=#Memory.RetVal_SFC14
    RECORD :=#Memory.InData
    L 0

    so sehen meine Aufrufe für sfc14/15 aus. Die Bereiche #Head_1.OutData und #Memory.InData haben beide die gleiche Größe von 64 Byte. Es ist ein Slave angeschlossen, der unterschiedliche Datenmangen einlesen(Rausschreiben) kann. dies wird durch die Hardwareconf vorgegeben und ist variabel (16, 32 und 64 Bytes). Für alle diese Fälle möchte ich nur ein Datenbaustein haben (nicht mehrere mit gleicher Feldgröße 16, 32 oder 64 Byte). Dies sollte durch ein ANY möglich sein. In den ich immer Datengröße und Speicherort vorgebe. Und dies dann als Parameter für RECORD übergebe (z.B. #anyparameter). dieser hat eine speichergröße von 10 Byte. Schreibt der SFC 14 nicht jetzt die daten an die Stelle von #anyparameter (und zwar nur 10 Byte) oder schreibt der SFC14 die Daten an die Stelle, die im Anyparameter vorgegeben sind (und natürlich in der vorgegebenen Größe). es sieht dann so aus...
    rec1: CALL "DPRD_DAT"
    LADDR :=#Ident_Control_Address
    RET_VAL:=#Memory.RetVal_SFC14
    RECORD :=#anyparameter
    Vorher habe ich den #anyparameter noch mit parametern beladen...
    L W#16#10...
    T DB12.DBW10
    usw...
    es gibt dann einen syntaxfehler
    liegt es daran, das eine struktur in einer sgtruktur ist???
    Zitieren Zitieren frage  

  8. #7
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Hallo Tony,

    verstehe ich das jetzt richtig, "anyparameter" ist im DB12 abgelegt und wird als Eingang an deinen FB übergeben, von wo aus dann die FC versorgt wird?
    Das geht so nicht. Entweder du kopierst den ANY vom Eingang in die Lokaldaten und übergibst ihn von dort an die FC oder du machst es halt grundsätzlich irgendwie völlig anders. Da ich den Sinn so wie so nicht so ganz verstehe, würde ich zu letzteren tendieren . Aber mach halt mal wie du es für richtig hältst.


    Gruß, Onkel
    Geändert von Onkel Dagobert (12.06.2006 um 18:14 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  9. #8
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 504 Danke für 407 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Tony,

    ich hoffe, ich habe dir nicht den Wind aus dem Segel genommen .
    Suche mal hier im Forum nach "ANY", es gibt zahlreiche Hinweise, z.Bsp. hier:

    http://sps-forum.de/showthread.php?t=7960


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

Ähnliche Themen

  1. Antworten: 20
    Letzter Beitrag: 03.08.2011, 13:26
  2. Indirekte Adressierung über einen ANY Pointer
    Von sventek im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.12.2009, 06:33
  3. cpu stop indirekte adressierung pointer
    Von falk.jaeger im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 23.02.2009, 07:22
  4. Antworten: 10
    Letzter Beitrag: 29.04.2008, 17:53
  5. indirekte Adressierung und Pointer ??????????????
    Von Mathias W. im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 13.10.2003, 20:21

Lesezeichen

Berechtigungen

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