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

Ergebnis 1 bis 3 von 3

Thema: Eingansparameter DB und DW ermitteln

  1. #1
    Registriert seit
    13.03.2009
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich würde gerne aus einem Eingangsparameter eines FCs den DB und das DBW ermitteln.
    Beispiel:
    Eingang: DB3.DBW20
    Im FC hätte ich dan gerne in einer Variable die 3 für den DB, die 20 für das DW. Das es sich um ein DBW und nicht um ein DBB o.ä. handelt kann erst mal ignoriert werden. Bei einem digitalen Eingangsparameter ist dies möglich über z.B. Eingang: E12.3
    L P##Eingang
    LAR1
    SLD 29
    SRD 29
    T #Adres_Eing_bit (3)

    L P##Eingang
    LAR1
    SLD 13
    SRD 16
    T #Adres_Eing_byte (12)

    Bei einem DB und DBW ist es mir noch nicht gelungen.
    Zitieren Zitieren Eingansparameter DB und DW ermitteln  

  2. #2
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo Ralf,

    wie Übergibst Du denn, den Eingang?
    Als WORD bzw. INT? Dann wird es innerhalb des FC's nicht funktionieren.
    Wenn Du ihn als ANY übergibst, dann musst Du halt den Zeiger zerlegen.
    Wie das funktioniert ist hier im Forum schon öfter gezeigt worden.

    BTW: Herzlich Willkommen im Forum!!!

    Grüße
    Gebs

    [edit]
    Dieser Thread sollte Dir weiterhelfen:
    http://www.sps-forum.de/showthread.php?t=13165
    [/edit]
    Geändert von Gebs (13.03.2009 um 11:57 Uhr)

  3. #3
    SPSRalf ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.03.2009
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    FUNCTION "FC_Tran_DBW_DBB_DBD" : VOID
    TITLE =Transfer DW or DB or DD
    //Transfer
    //
    //in: DB140.dbw32 or DB140.dbb32 or DB 140.dd32
    //batch: 5 n Machines
    //
    //control: MB or DB byte for control
    AUTHOR : 'GEA_R.S.'
    VERSION : 0.0

    VAR_INPUT
    in : ANY ; //byte,word,INT,Dword,Dint,real
    batch : INT ; //batch ( n Separatores)
    END_VAR
    VAR_IN_OUT
    control : BYTE ; //Control byte batch
    END_VAR
    VAR_TEMP
    DB_no : WORD ; //DB_no
    DW_nr : WORD ; //DW_no
    Typ : BYTE ; //1=bool,2=byte,3=char,4=word,5=INT,6=DWord,7=Dint,8=real,9=Date,OB=tim3,0C=S5tim
    value_word : WORD ;
    value_byte : BYTE ;
    value_dword : DWORD ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =Adress DB and DW
    L P##in;
    LAR1 ;
    L W [AR1,P#4.0]; // DB
    T #DB_no;
    L B [AR1,P#1.0]; // 2= Byte,4=Word,5=INT,6=Dword,7=DINT,8=Real
    T #Typ;
    L D [AR1,P#6.0]; // offset DW
    LAR1 ;
    SLD 13;
    SRD 16;
    T #DW_nr; // DW No.
    NETWORK
    TITLE =identify typ + actual value data read
    // // 2= Byte,4=Word,5=INT,6=Dword,7=DINT,8=Real
    AUF DB [#DB_no];
    L #DW_nr;
    SLW 3;
    LAR1 ;
    L #Typ;
    L 2; // Byte
    ==I ;
    SPB B1;
    L #Typ;
    L 4; // Word
    ==I ;
    SPB W1;
    L #Typ;
    L 5; // INT
    ==I ;
    SPB W1;
    L #Typ;
    L 6; // DWord
    ==I ;
    SPB D1;
    L 7; // DINT
    ==I ;
    SPB D1;
    L 8; // DWord
    ==I ;
    SPB D1;
    BEA ;
    B1: L DBB [AR1,P#0.0];
    T #value_byte;
    SPA e1;
    W1: L DBW [AR1,P#0.0];
    T #value_word;
    SPA e1;
    D1: L DBD [AR1,P#0.0];
    T #value_dword;
    e1: NOP 0;
    NETWORK
    TITLE =batches and add 10 for DB
    // 140/150/160
    L #control;
    L #batch;
    >=I ;
    SPB n1;
    L #control;
    L 0;
    <I ;
    SPB n1;
    SPA n2;
    n1: L 0;
    T #control;
    n2: NOP 0;
    L #control;
    L 10; // DB No. plus 10
    *I ;
    L #DB_no;
    +I ;
    T #DB_no;
    NETWORK
    TITLE =data transfer
    //
    AUF DB [#DB_no]; // target DB
    L #DW_nr; // target DW
    SLW 3;
    LAR1 ;
    L #Typ; // DW or DB
    L 2;
    ==I ;
    SPB B;
    L #Typ;
    L 4;
    ==I ;
    SPB W;
    L #Typ;
    L 5;
    ==I ;
    SPB W;
    L #Typ;
    L 6; // DWord
    ==I ;
    SPB D;
    L 7; // DINT
    ==I ;
    SPB D;
    L 8; // DWord
    ==I ;
    SPB D;
    BEA ;
    B: L #value_byte;
    T DBB [AR1,P#0.0];
    SPA e;
    W: L #value_word;
    T DBW [AR1,P#0.0];
    SPA e;
    D: L #value_dword;
    T DBD [AR1,P#0.0];
    e: NOP 0;
    NETWORK
    TITLE =batch control + 1

    L #control;
    L 1;
    +I ;
    T #control;
    END_FUNCTION
    Zitieren Zitieren so geht es // die Lösung Any auslesen / Wert, DB und Datenwort  

Ähnliche Themen

  1. Sollwert ermitteln
    Von M.R. im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 30.04.2009, 18:42
  2. Skript um das OS zu ermitteln
    Von Black_Eagle im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 22.10.2008, 15:30
  3. B&R Programmgröße ermitteln
    Von kiestumpe im Forum Sonstige Steuerungen
    Antworten: 3
    Letzter Beitrag: 13.05.2008, 22:42
  4. DBW ermitteln
    Von WL7001 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 07.04.2008, 15:10
  5. DB-Länge ermitteln
    Von Fliegertiger im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 18.12.2007, 15:39

Lesezeichen

Berechtigungen

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