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

Ergebnis 1 bis 5 von 5

Thema: Wandeln von DIG Eingänge in Byte und DB Wertevorgabe als Adresse

  1. #1
    Registriert seit
    16.10.2007
    Beiträge
    107
    Danke
    23
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen, hab da mal wieder ne Frage... ABER ERSTEINMAL EIN FROHES NEUES JAHR

    ich möchte gerne folgendes machen, ich muss mir einen FC bauen, den ich immer wieder nutzen kann, soweit kein Thema, doch eines habe ich dennoch...

    Ich habe als IN 8 Eingänge die ich z.B. mit E0.0-E0.7 oder anderen Komponenten als Bool belegen kann...

    Ich möchte nun im FC diese Eingänge in ein Byte wandeln, doch irgendwie funzt das nicht, habe mehrere Variationen getestet, u.a.

    Code:
    U #Send_1   // der erste Eingang
    = L0.0
    BLD 103
    U #Send_2   // der zweite Eingang
    doch das führt ja zu nichts... denn ich kann es ja nicht transferieren...

    Ich weiss nicht... habe auch schon gegoogled, doch da ist nicht wirklich das wofür ich es bräuchte...

    Nun der Hintergedanke ist, das ich Kommunikationsbausteine erstelle, indem ich aus diversen Signale Byte erzeugen muss ohne über den DB gehen muss, und diese dann mit X_PUT versende... Funtz auch alles so weit... nur das ich das gerne etwas schöner machen würde...

    Bisher nehme ich jeden z.B.Eingang und schaut selbst:
    Wobei der DB202.dbb0 mein X_Put Byte ist... Ich habe hier Eingänge gewählt da es zum Verständnis einfacher ist...


    Code:
    U E0.0
    = db202.dbx0.0
    u e0.1
    = db202.dbx0.1
    .
    .
    .
    Wer hat noch ne Idee...

    Mein FC hat nachher die Eingänge 0-8 für die einzelnen Bits, intern soll er es in ein Byte wandeln und direkt an den Empfänger senden...

    Dafür liegen folgende Belegungen zugrunde:
    IN:
    - Bit 0-8 als BOOL
    - MPI Adresse als INT (für den intern aufgerufenen X-PUT Befehl)

    OUT:
    - Sendebyte
    - Empfangsbyte

    Muss nur noch schauen wie ich dem FC als IN die DB Nummer gebe und die Position im DB
    also: DB = 202 (INT??) und Position 2 (INT?? für das Byte) GEHT DAS??? Um intern dann : z.B. DB202.DBB0 zu erzeugen...

    Ich weiss ich wieder mit den Scheinbar komplizierten Dingen...

    Danke Euch zu später Stunde...


    Gruss Uwe
    Zitieren Zitieren Wandeln von DIG Eingänge in Byte und DB Wertevorgabe als Adresse  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Um deinen Ansatz mit den Lokaldaten fortzuführen:
    Code:
    U #Send_1   // der erste Eingang
    = L0.0
    U #Send_2
    = L0.1
    U #Send_3
    = L0.3
    
    // ... usw.
    L LB0
    T #AusgangsByte

  3. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    gw-tuning (04.01.2015)

  4. #3
    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

    Hier mal ein Beispiel (Quelle), wie man das ohne die Nutzung von absolut adressierten lokalen Variablen machen könnte:

    Code:
    FUNCTION FC 1 : VOID
    TITLE =
    VERSION : 0.1
    
    
    
    
    VAR_INPUT
      MyIn_01 : INT ;	
      Bit_00 : BOOL ;	
      Bit_01 : BOOL ;	
      Bit_02 : BOOL ;	
      Bit_03 : BOOL ;	
      Bit_04 : BOOL ;	
      Bit_05 : BOOL ;	
      Bit_06 : BOOL ;	
      Bit_07 : BOOL ;	
      MyIn_02 : INT ;	
    END_VAR
    VAR_OUTPUT
      Zahl_aus_BOOL : WORD ;	
    END_VAR
    VAR_TEMP
      Inp_Adr : DWORD ;	
      Zahl_aus_Bool_Intern : WORD ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
    
          L     P##Bit_00; 
          T     #Inp_Adr; 
          LAR1  ; 
    
    
          L     B [AR1,P#0.0]; 
          T     #Zahl_aus_Bool_Intern; 
          T     #Zahl_aus_BOOL; 
    END_FUNCTION
    Eine AWL-Quelle erzeugen, den Code einfügen und übersetzen, Achtung evtl. noch die FC-Nummer anpassen.

    Für die Adressierung von DB-Variablen über die DB-Nummer ind die Datenword-Nummer suchst du bitte zuerst mal im Forum nach Any und nach indirekter Adressierung.
    In unserer FAQ gibt es dazu auch gute Erklärungen.
    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

  5. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    gw-tuning (04.01.2015)

  6. #4
    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

    Unser User Onkel Dagobert hat mich noch auf Folgendes aufmerksam gemacht:

    AR1 zeigt auf die Adresse von Bit_00, also z.Bsp. auf E0.0. Das geht in einer FC nur dann gut, solange wirklich E0.0 bis E0.7 als INPUTs verwendet werden.
    Wenn mal also Bits aus verschiedenen E-Bereichen und/oder Merker an den IN-Bits nutzt, kann man das nicht so machen. Dann müßte man die Bits erst wieder umkopieren oder gleich die Variante von Thomas_v2.1 nehmen.
    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

  7. #5
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 420 Danke für 337 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Ralle Beitrag anzeigen
    Unser User Onkel Dagobert hat mich noch auf Folgendes aufmerksam gemacht:



    Wenn mal also Bits aus verschiedenen E-Bereichen und/oder Merker an den IN-Bits nutzt, kann man das nicht so machen. Dann müßte man die Bits erst wieder umkopieren oder gleich die Variante von Thomas_v2.1 nehmen.
    Man erzeugt ja auch keinen Fc mit 8 Boolschen eingängen von denen man dann nur einen verwendet! Ich würde sagen einfach jedes Bit einzeln zuweisen:

    Code:
          L     P##Zahl_aus_Bool_Intern;
          LAR1  ; 
    
          U     Bit_00
          =     [AR1,P#0.0]; 
    
          U     Bit_01
          =     [AR1,P#0.1]; 
    
          ...
    
          L     #Zahl_aus_Bool_Intern; 
          T     #Zahl_aus_BOOL;
    Geändert von Jochen Kühner (03.01.2015 um 13:40 Uhr)
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    gw-tuning (04.01.2015)

Ähnliche Themen

  1. Profinet Telegramm 352 und Nutzung der dig. Eingänge G120
    Von Asphaltbeule im Forum Antriebstechnik
    Antworten: 5
    Letzter Beitrag: 04.03.2014, 16:20
  2. Antworten: 15
    Letzter Beitrag: 09.09.2011, 10:56
  3. Antworten: 24
    Letzter Beitrag: 05.09.2008, 14:01
  4. Antworten: 13
    Letzter Beitrag: 18.01.2008, 12:47
  5. Antworten: 3
    Letzter Beitrag: 27.09.2006, 15:11

Lesezeichen

Berechtigungen

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