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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: Hardwareaddressen in ein Array abspeichern

  1. #1
    Registriert seit
    03.09.2013
    Beiträge
    93
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Tag an alle

    Für ein Projekt von mir habe ich eine Idee, aber ich weiss nicht ob es geht und wie der Lösungsansatz wäre.

    Ich habe 8 schalter (I0.0 - I0.7) das ist ja ein BYTE und ich möchte die Eingänge in einem Array speichern.

    Z.B.:
    0 1 2 3 4 5 6 7
    0 1 0 0 1 1 1 1

    Obere Zeile meine Adressen (I0.0 - I0.7)

    Untere Zeile Zustände (0 oder )

    Und ich möchte wissen ob das überhaupt geht in ein Array zu speichern und wie??

    Ich werde es in SCL programmieren.


    Freundliche Grüssse
    bkizilkaya
    Zitieren Zitieren Hardwareaddressen in ein Array abspeichern  

  2. #2
    Registriert seit
    04.03.2010
    Beiträge
    44
    Danke
    7
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Ja geht, Du deklariererst ein Array of BOOL mit 8 Einträgen. Dann weißt du den einzelnen Feldeinträgen die jeweilige Adresse zu.
    Alternativ anstatt 8 Zuweisungen kannst du es auch mit einer Zuweisung in einer Schleife für die Bits realisieren.

    Gruß Didaddy

  3. #3
    Registriert seit
    03.09.2013
    Beiträge
    93
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke für deine Antwort

    Wie würdest du es machen mit einer Schleife oder alle zuweisen. Später möchte ich auf 16 erweitern.

    was würdest du benutzen eine For schleife??

    Gruss bkizilkaya

  4. #4
    Registriert seit
    04.03.2010
    Beiträge
    44
    Danke
    7
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Ich sag mal so bei 8 oder 16 Einträgen ist das relativ schnuppe. Die erste Variante würd ich als die einfachere bezeichnen, die zweite sehe ich als die elegantere an.

    For Schleife würde passen (Bei 16 wärens dann halt schon 2 For Schleifen eine für die Bits die andere für die Bytes).

    Gruß Didaddy
    Geändert von Didaddy (12.09.2013 um 23:05 Uhr)

  5. #5
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.714
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Bei 8 oder 16 Einträgen würde ich das noch über Sichten machen. Z.B.:
    Code:
    VAR_TEMP
        BYTE_Nr: INT;
        EINGANGS_BYTE: BYTE;
        EINGANGS_BIT AT EINGANGS_BYTE: ARRAY [0 .. 7] OF BOOL;
    END_VAR
    
        EINGANGS_BYTE:= EB[Byte_Nr];
        
        IF EINGANGS_BIT[0] THEN
            ...;
        END_IF;
    ...
    

  6. #6
    Registriert seit
    04.03.2010
    Beiträge
    44
    Danke
    7
    Erhielt 5 Danke für 5 Beiträge

    Standard

    An die AT Sicht hab ich grad gar nicht gedacht, gefällt mir auch besser.
    Gruß Didaddy

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    > Erlaubt ist was funktioniert, wenn man alles perfekt machen will wird man nie fertig. <

  7. #7
    Registriert seit
    03.09.2013
    Beiträge
    93
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke für eure Antwort

    Ich möchte jetzt zum beispiel die Zustände mit einem Zähler kontrollieren


    Der zähler funktioniert so

    Wenn vier zustände hintereinander eine 1 haben dann soll ein Ausgang anzeigen. (z.B.)

    Weisst du wie man so etwas realisiert?? Mit einer For Schleife könnte ich es mir vorstellen, aber das Problem ist das der Zähler ein INT ist und das Array bool.

    Geht das??

    Gruss
    Geändert von bkizilkaya (14.09.2013 um 01:30 Uhr)

  8. #8
    Registriert seit
    04.03.2010
    Beiträge
    44
    Danke
    7
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Hallo bkizilkaya,

    das ist doch toll, der Ansatz passt. Der Zähler ist in diesem Fall ja nix anderes als eine INT Variable die in der FOR Schleife 0..7 die Bitposition von deinem ARRAY wiederspiegelt. Also die INT Variable wird der Index für Dein ARRAY.
    Den Ausgang und Zähler setzt du bevor du in die Schleife gehst, definiert zurück. In der Schleife würde ich dann eine weitere INT Variable vorsehen, die in jedem Schleifendurchlauf um eins aufaddiert wird (Dein eigentlicher Zähler) aber nur
    wenn der Zustand von deinem abgefragtem Bit TRUE ist, bei FALSE wird der Zähler zurück gesetzt. Wenn der Zählwert die 4 erreicht setzt Du den Ausgang.

    Hoffe Dir hilft das weiter. Ansonsten viellecht paar codeschnipsel posten, wo de nicht weiter kommst.
    Geändert von Didaddy (14.09.2013 um 10:47 Uhr)
    Gruß Didaddy

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    > Erlaubt ist was funktioniert, wenn man alles perfekt machen will wird man nie fertig. <

  9. #9
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.714
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Zitat Zitat von bkizilkaya Beitrag anzeigen
    Der zähler funktioniert so

    Wenn vier zustände hintereinander eine 1 haben dann soll ein Ausgang anzeigen. (z.B.)
    Ist zwar nicht getestet, aber so ungefähr würde ich es machen:
    Code:
    VAR
        BYTE_Nr: INT;
        EINGANGS_BYTE: BYTE;
        EINGANGS_BIT AT EINGANGS_BYTE: ARRAY [0 .. 7] OF BOOL;
        TEST_BYTE: BYTE;
        BIT_TEST: BOOL;
        INDEX: INT;
    END_VAR
    
    
        EINGANGS_BYTE:= EB[BYTE_Nr];
        
        IF EINGANGS_BIT[0] THEN
            ...;
        END_IF;
    ...
    
    
        TEST_BYTE:= EINGANGS_BYTE;
        BIT_TEST:= false;
        
        FOR INDEX:= 1 TO 5 BY 1 DO
            BIT_TEST:= SEL ( G:= BYTE_TO_INT (TEST_BYTE) >= 240, IN0:= BIT_TEST, IN1:= true);
            TEST_BYTE:= SHL (IN:= TEST_BYTE, N:=1);
        END_FOR;
        
        IF BIT_TEST THEN
            ...;
        END_IF;
    ...
    
    Geändert von hucki (14.09.2013 um 12:22 Uhr) Grund: "hintereinander" im Quote hervorgehoben

  10. #10
    Registriert seit
    03.09.2013
    Beiträge
    93
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vielen Dank für dein Beispiel und deine Antwort

    Kannst mir den Code erklären weil ich Ihn nicht so verstehe??

    Ich verstehe den SEL nicht so ganz. Was ist das?

    Den SHL verstehe ich du schiebst nach links wenn immer ein 1 kommt oder ???


    Dann habe ich noch eine frage kann man das auch das ganze mit einem Matrix machen d.h. mit einem 2 dimensionalem Array??

    Gruss
    Geändert von bkizilkaya (14.09.2013 um 13:49 Uhr)

Ähnliche Themen

  1. Antworten: 50
    Letzter Beitrag: 09.08.2012, 09:31
  2. Antworten: 4
    Letzter Beitrag: 17.11.2005, 11:13
  3. Antworten: 5
    Letzter Beitrag: 14.06.2005, 14:55
  4. pew auslesen und fortlaufend in ein Array abspeichern
    Von Anonymous im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 13.06.2005, 18:13
  5. pew auslesen und fortlaufend in ein Array abspeichern
    Von Anonymous im Forum Programmierstrategien
    Antworten: 0
    Letzter Beitrag: 13.06.2005, 17:59

Lesezeichen

Berechtigungen

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