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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Variabel Datenbereiche übertragen

  1. #1
    Registriert seit
    18.04.2013
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Tag,

    ich habe bei folgender Aufgabe ein Problem.
    Ich habe Daten für xx Farhzeuge in der gleichen Menge gleich aufgebauter DBs.
    Diese Daten möchte ich nach Vorgabe eines INT Wertes der die Fahrzeug Nummer und gleichzeitig DB Nummer ist
    übertragen. Das ganze Wollte ich über einen BLKMOV machen. Das Fahrzeug das ich in meinen Anzeige DB (Bearbeitungs-DB) übertragen
    will gebe ich als INT Wert in meiner Visualisierung vor. Mit dem BlKMov übertrage ich immer die selbe Anzahl an Bytes (100)
    von der selbe Stelle in den unterschiedlichen DBs. Wie ist es mir möglich den DB Variabel vorzugeben und dann immer den BLKMov mit der richtigen
    DB nummer zu beschreiben die Anfangsadresse der zu übertragenden Daten in den unterschiedlichen DBs bleibt immer gleich.
    z.B. P#DBxxx.DBX100.0 Byte 100
    Hintergrund ist der ich möchte über eine Visualisierung die Fahrzeugdaten Editieren, dazu lade ich Sie mittels Visu-Button (read) der BLKMOV auslöst in einen Bearbeitungs DB
    die entsprechende Nummer wird in der Visu vorgegeben.
    In der Visu werden dann die vorhanden Daten angezeigt, sie werden im Bearbeitungs DB von der Visu editiert mit einem Button (write) klick wird ein weiterer
    BLK MOV ausgelöst der Sie wieder in den "echten" DB überträgt.
    Zitieren Zitieren Variabel Datenbereiche übertragen  

  2. #2
    Registriert seit
    01.05.2013
    Beiträge
    345
    Danke
    174
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Ich glaube ! ...habe nie probiert !
    Das mit eine FB Verschachtelung es gehen würde !

  3. #3
    Registriert seit
    30.08.2003
    Beiträge
    2.197
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo,

    ich glaube dass der Beitrag oben drüber nutzlos ist... Und ich glaube dass es dir helfen würde einen ANY-Pointer dynamisch zusammenzubauen und diesen am SFC20 anzuparametrieren.

    André
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....

  4. #4
    Registriert seit
    01.05.2013
    Beiträge
    345
    Danke
    174
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Was mir vorschwebt ist folgendes :
    Ein FB ist von aussen zu belegen mit Aktualparameter (die sind nicht nicht in dem gewollten Sinne Variabel) , könnte man nicht die Aktualparameter mit Formalparameter (die sind Variabel) ersetzen wenn die FB in einem andern FB aufruft ...VERSCHACHTELUNG ...eben !


  5. #5
    Registriert seit
    14.05.2012
    Beiträge
    157
    Danke
    28
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Mir würde auch einiges vorschweben.

    An den TE : http://www.sps-forum.de/faq/12923-an...atentypen.html

  6. #6
    rise66 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.04.2013
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Findet hier jemand den Fehler?
    Funktioniert leider in Verbindung mit BLKMOV nicht.

    L B#16#10 //10h für s7
    T LB 0
    L B#16#2 //Typ Byte
    T LB 1
    L 100 //Anzahl (Wiederholungsfaktor)
    T LW 2
    L #FTF_DB_NR //Datenbaustein
    T LW 4
    L 100 //Anfangsadresse
    SLD 3 //Pointer bauen
    T LD 6
    L B#16#84 //Speicherbereich (hier DB)
    T LB 6

  7. #7
    Registriert seit
    10.01.2012
    Beiträge
    65
    Danke
    15
    Erhielt 6 Danke für 6 Beiträge

    Standard

    So verwalte ich Typdaten auch am liebsten, bin kein Rezepturfreund...

    Deine Blockmove-Parameter sind so schon ok, was bringt der SFC20 denn für einen Fehler? Hier mal die üblichen Verdächtigen:
    - Datenbausteine vorhanden + groß genug?
    - Quell- und Zielfeld dürfen nicht überlappen

    für LD6 (Speicherbereich) sieht auch der Pointer P#DBX100.0 hübsch aus, oder eben die Addition aus Deiner Startadresse und dem Speicherbereichsanfang
    Code:
    L  100  //Startadresse
    SLD 3
    L P#DBX0.0
    +D
    T LD 6
    Gruß StGo

  8. #8
    Registriert seit
    10.01.2012
    Beiträge
    65
    Danke
    15
    Erhielt 6 Danke für 6 Beiträge

    Standard

    und natürlich musst Du 2 ANY zusammenbauen, einen für Quelle und einen für das Ziel,
    z.B. 10 Byte ab L 0 (Quelle) und 10 Byte ab L10 (Ziel)

    Die Parameter der beiden Any sollten sich bei Dir ja scheinbar nur in der DB-Nr. unterscheiden.

    Gruß StGo

  9. #9
    Registriert seit
    24.10.2007
    Ort
    Niederlande
    Beiträge
    674
    Danke
    22
    Erhielt 143 Danke für 135 Beiträge

    Standard

    Hier een FC mit variabele Quelle (Bron) und Ziel (Doel)

    Code:
    FUNCTION FC 110 : INT
    TITLE =Block copy met var. bron en var. doel.
    //Kopieren van variable met een variable bron en een variabel doel.
    //Bron en doel mogen elkaar niet overlappen
    //Onderliggend bouwsteen SFC 20.
    AUTHOR : JB
    FAMILY : Kopie
    NAME : Blk_mov
    VERSION : 0.0
    
    
    VAR_INPUT
      DB_NR_BRON : INT ;    //0 =MERKER BEREIK ANDERS DB NR VAN BRON
      BYTE_1_BRON : INT ;    //NR VAN EERSTE BYTE VAN BRON
      BYTE_WORD : BOOL ;    //BYTE=0 WORD=1
      LENGTE : INT ;    //AANTAL TE COPIEREN BYTES OF WOORDEN
      DB_NR_DOEL : INT ;    //0 =MERKER BEREIK ANDERS DB NR VAN DOEL
      BYTE_1_DOEL : INT ;    //NR VAN EERSTE BYTE VAN DOEL
    END_VAR
    VAR_TEMP
      T_AR1 : DWORD ;    
      T_ANY_BRON : ANY ;    
      T_ANY_DOEL : ANY ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Opslaan inhoud van het Adresregister AR1
    
          TAR1  #T_AR1; 
    
    NETWORK
    TITLE =Samenstellen van DOEL adres in ANY formaat
    
          LAR1  P##T_ANY_BRON; //Beginadres ANY pointer in AR1 laden
          L     B#16#10; //Syntax-ID in de Any pointer zetten
          T     LB [AR1,P#0.0]; 
          L     B#16#2; //Bereichstyp BYTE laden
          UN    #BYTE_WORD; 
          SPB   Tran; 
          L     B#16#4; //Bereichstyp WORD laden
    Tran: T     LB [AR1,P#1.0]; //BYTE of WORD in ANY pointer zetten
          L     #LENGTE; //Aantal BYTE'S of WORD'S
          T     LW [AR1,P#2.0]; //In ANY pointer zetten
          L     #DB_NR_BRON; //DB nr 
          T     LW [AR1,P#4.0]; //In ANY pointer zetten
          L     0; 
          ==I   ; 
          SPB   Merk; //Als DB nr = 0 dan naar merkers
          L     P#DBX 0.0; //Adres voor DBX 0.0
          SPA   Offs; 
    Merk: L     P#M 0.0; //Adres voor M 0.0
    Offs: L     #BYTE_1_BRON; //Nummer van eerste BYTE
          SLD   3; //Nummer op juiste plaats zetten
          +D    ; //Adres van 1ste BYTE of WORD
          T     LD [AR1,P#6.0]; //In ANY pointer zetten
    NETWORK
    TITLE =Samenstellen van BRON adres in ANY formaat
    
          LAR1  P##T_ANY_DOEL; //Beginadres ANY pointer in AR1 laden
          L     B#16#10; //Syntax-ID in de Any pointer zetten
          T     LB [AR1,P#0.0]; 
          L     B#16#2; //Bereichstyp BYTE laden
          UN    #BYTE_WORD; 
          SPB   Tra1; 
          L     B#16#4; 
    Tra1: T     LB [AR1,P#1.0]; 
          L     #LENGTE; 
          T     LW [AR1,P#2.0]; 
          L     #DB_NR_DOEL; 
          T     LW [AR1,P#4.0]; 
          L     0; 
          ==I   ; 
          SPB   Mer1; 
          L     P#DBX 0.0; 
          SPA   Off1; 
    Mer1: L     P#M 0.0; 
    Off1: L     #BYTE_1_DOEL; 
          SLD   3; 
          +D    ; 
          T     LD [AR1,P#6.0]; 
    NETWORK
    TITLE =Oproep van SFC 20  (BLKMOV)
    
          CALL SFC   20 (
               SRCBLK                   := #T_ANY_BRON,//Adres waar data vandaan moet komen
               RET_VAL                  := #RET_VAL,//Foutmelding
               DSTBLK                   := #T_ANY_DOEL);//Adres waar data naartoe moet
    NETWORK
    TITLE =Inhoud adresregister AR1 terugzetten
    
          LAR1  #T_AR1; 
    
    END_FUNCTION
    Wenn Sie WinCC Flex als Visu braucht konte Sie in Flex auch die DB von der variabele multiplexen.
    Z.b.

    DNnr int MW100
    var_1_Fahrzeug int DB [DBnr] DBW 0
    var_2_Fahrzeug int DB [DBnr] DBW 2
    u.z.w.

    Hiermit wurde die variable direct auf der visu bearbeid.

    Joop

  10. #10
    rise66 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.04.2013
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier mal ein Screenshot :

    In dem ersten Netzwerk wird die Vorgabe IN1 die von der Visu kommt, mit dem offset (Real DB Adressen addiert)
    Datenbaustein ist groß genug und vorhanden, wenn ich die Adresse der Quelle direkt am BLKMOV angebe funktioniert,
    das ganze auch es muss also ein Fehler beim Zeiger bilden sein. Ich simuliere das ganze zum Test mit PLC Sim, reale SPS ist eine 416-F

    1.jpg2.jpg3.jpg

Ähnliche Themen

  1. datenbereiche ändern
    Von choke im Forum Sonstige Steuerungen
    Antworten: 0
    Letzter Beitrag: 20.08.2012, 11:07
  2. Datenbereiche vergleichen Panasonic FP-X
    Von choke im Forum Sonstige Steuerungen
    Antworten: 13
    Letzter Beitrag: 13.08.2012, 11:48
  3. Datenbausteine variabel ansteuern
    Von Spendel im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 02.07.2010, 14:38
  4. Antworten: 2
    Letzter Beitrag: 19.06.2008, 12:00
  5. DB Variabel aufrufen
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 10.02.2006, 15:04

Stichworte

Lesezeichen

Berechtigungen

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