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

Page 3 of 4 FirstFirst 1234 LastLast
Results 21 to 30 of 31

Thread: Lösungsmöglichkeit

  1. #21
    Join Date
    08.04.2008
    Location
    Köln
    Posts
    846
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by mister_chaos View Post
    Also z.B. Wert1=1 und Wert2=3 =>Lampe3
    Wert1=2 und Wert2=1=>Lampe11
    Daraus ergibt sich für mich die folgende Berechnung der Lampen-Nr.:
    (Wert1-1) * 10 + Wert2
    Wenn Wert1 = 1...100 ist und Wert2 = 0...9, dann kann man damit 1000 Lampen ansprechen.

    Damit ergibt sich dann der folgende Code für die Lampen:
    Code:
    U DB100.dbx3.0 // 1 im Byte 3
    FP M 0.1 // pos. Flanke "Lampe an"
     
    U DB100.dbx3.0 // 1 im Byte 3
    FN M 0.0 // pos. Flanke "Lampe aus"
     
    UN M0.0
    UN M0.1
    SPB WEIT
     
    L DB100.DBB1 // Wert1
    + -1
    L 10
    *I
    L DB100.DBB2 // Wert2
    +I
    T MW 2 // Nummer der Lampe
     
    L MW 2
    L 8
    /I
    T MW 4 // ByteNummer
     
    L MW2
    MOD 8
    T MW 6 // BitNummer
     
    L MW 4
    SLD 3
    L MW 6
    +D   // Pointer bestehend aus Byte.Bit
    LAR1 // isn Adressregister
     
    U DB100.DBX3.0 // Lampe (1=AN, 0=AUS)
    AUF DB 200
    = DBX[AR1,p#0.0] // Bit Lampe zuweisen
     
    WEIT: NOP 0
    Ich hoffe es hilft Dir weiter (und ich hab' keine Fehler drin).

    Grüße
    Gebs

    [EDIT]
    Hab' doch ein paar Fehler drin gehabt.
    [/EDIT]
    Last edited by Gebs; 09.12.2008 at 16:13.

  2. Folgender Benutzer sagt Danke zu Gebs für den nützlichen Beitrag:

    mister_chaos (09.12.2008)

  3. #22
    Join Date
    25.09.2008
    Posts
    17
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Default

    Vielen,vielen Dank Jungs. Ihr seid echt Spitze....werde morgen nochmal die Programme durcharbeiten.

  4. #23
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    @gebs: also wie 2 * 10 + 1 = 11 ist, müßteste mir noch erklären ... sorry ... du hast berichtigt ... schade...

    aber die sache mit dem einzelnen bit aus wert3 gefällt
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    mister_chaos (09.12.2008)

  6. #24
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    statt der modulo-operation gefällt mir das hier besser:

    Code:
    *
          L     #iBitNumber
          L     8
          /I    
          T     #dTemp
    
          L     P##dTemp
          LAR1  
    
          L     W [AR1,P#2.0]
          SLD   3
          L     W [AR1,P#0.0]
          +D    
          LAR1  
    
          AUF   #DbByNumber
          U     #xSet
          S     DBX [AR1,P#0.0]
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #25
    Join Date
    08.04.2008
    Location
    Köln
    Posts
    846
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Default

    Quote Originally Posted by vierlagig View Post
    aber die sache mit dem einzelnen bit aus wert3 gefällt
    Dazu sag ich nur: Faulheit siegt!
    Sonst müsste ich ja vielzuviel Code schreiben.

  8. #26
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    Quote Originally Posted by Gebs View Post
    Dazu sag ich nur: Faulheit siegt!
    Sonst müsste ich ja vielzuviel Code schreiben.
    das holst du ja bei der berechnung nach
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. #27
    Join Date
    08.04.2008
    Location
    Köln
    Posts
    846
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Default

    Quote Originally Posted by vierlagig View Post
    das holst du ja bei der berechnung nach
    Stimmt, aber so kann ein Anfänger die Berechnung leichter nachvollziehen.
    Es weiss ja nicht jeder, dass der Divisionsrest bei /I im AKKU1-H liegt.

  10. #28
    Join Date
    06.10.2003
    Posts
    4,474
    Danke
    619
    Erhielt 772 Danke für 606 Beiträge

    Default

    Quote Originally Posted by mister_chaos View Post
    ..SCL habe ich leider nicht
    Das ist schade. In SCL würde es sich mit einem zweidimesionalem Array schön einfach gestalten. In AWL ist es auf diese Art etwas schwieriger. Man müsste den Code in AWL zumindest noch etwas kommentieren.

    SCL
    Code:
    FUNCTION TAUSENDLAMPEN : void
    VAR_INPUT
       WERT_A                      : INT; // 1..10
       WERT_B                      : INT; // 1..100
       WERT_C                      : INT; 
    END_VAR
    VAR_IN_OUT
       LAMPE                       : ARRAY[1..10, 1..100] OF BOOL;
    END_VAR
    BEGIN
      IF WERT_A < 1 OR WERT_A > 10 OR WERT_B < 1 OR WERT_B > 100
        THEN RETURN;
      END_IF;
      IF WERT_C = 1 THEN
          LAMPE[WERT_A, WERT_B] := true;
      END_IF;
      IF WERT_C = 0 THEN
          LAMPE[WERT_A, WERT_B] := false;
      END_IF;
    END_FUNCTION
    übersetzer Code in AWL
    Code:
          SET   
          SAVE  
          =     L      0.1
          L     #WERT_A
          L     1
          <I    
          L     #WERT_A
          L     10
          =     L      0.2
          >I    
          O     L      0.2
          L     #WERT_B
          L     1
          =     L      0.2
          <I    
          O     L      0.2
          L     #WERT_B
          L     100
          =     L      0.2
          >I    
          O     L      0.2
          SPBN  A7d0
          U     L      0.1
          SAVE  
          BEA   
    A7d0: L     #WERT_C
          L     1
          ==I   
          SPBN  A7d1
          L     #WERT_A
          ITD   
          L     L#-1
          +D    
          L     L#104
          *D    
          L     #WERT_B
          ITD   
          TAK   
          T     LD     2
          TAK   
          L     L#1
          -D    
          L     L#1
          *D    
          L     LD     2
          +D    
          SET   
          L     P##LAMPE
          LAR1  
          TAK   
          T     LD     2
          TAK   
          L     W [AR1,P#0.0]
          T     LW     6
          AUF   DB [LW 6]
          L     D [AR1,P#2.0]
          L     LD     2
          +D    
          LAR1  
          =      [AR1,P#0.0]
    A7d1: L     #WERT_C
          L     0
          ==I   
          SPBN  A7d2
          L     #WERT_A
          ITD   
          L     L#-1
          +D    
          L     L#104
          *D    
          L     #WERT_B
          ITD   
          TAK   
          T     LD     2
          TAK   
          L     L#1
          -D    
          L     L#1
          *D    
          L     LD     2
          +D    
          CLR   
          L     P##LAMPE
          LAR1  
          TAK   
          T     LD     2
          TAK   
          L     W [AR1,P#0.0]
          T     LW     6
          AUF   DB [LW 6]
          L     D [AR1,P#2.0]
          L     LD     2
          +D    
          LAR1  
          =      [AR1,P#0.0]
    A7d2: CLR   
          U     L      0.1
          SAVE  
          BE
    DB mit ARRAY
    Code:
     
    LAMPE ARRAY[1..10,1..100]   
     BOOL
    OB1
    Code:
     
          CALL  "TAUSENDLAMPEN"
           WERT_A:=MW100
           WERT_B:=MW102
           WERT_C:=MW104
           LAMPE :="L".LAMPE
     
          CALL  "BLKMOV"
           SRCBLK :="L".LAMPE
           RET_VAL:=#TEMP_INT
           DSTBLK :=P#A 0.0 BYTE 130
    Ok, Blockmove verschenkt ein paar Ausgänge, ..müsste man in mehrere Blöcke aufteilen.


    Gruß, Onkel
    Last edited by Onkel Dagobert; 09.12.2008 at 20:06.
    Der höchste Lohn für unsere Bemühungen ist nicht das, was wir dafür bekommen, sondern das, was wir dadurch werden.
    John Ruskin

  11. Folgender Benutzer sagt Danke zu Onkel Dagobert für den nützlichen Beitrag:

    mister_chaos (09.12.2008)

  12. #29
    Join Date
    25.09.2008
    Posts
    17
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Default

    Vielen Dank, das ist ja super
    Scheint in SCL wirklich deutlich einfacher und übersichtlicher zu sein.
    Gruß

  13. #30
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Quote Originally Posted by mister_chaos View Post
    Scheint in SCL wirklich deutlich einfacher und übersichtlicher zu sein.
    naja ... also gebs weg mit einigen code-optimierungen und onkel dagoberts scl-variante hätte ich dann doch gern noch im zykluszeitvergleich gesehen ... ich finde es in AWL äußerst übersichtlich, auch wenn man nicht indiziert zugreifen kann...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •