Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 50020

B&R: BCD-CODE Einlesen mit reAction-Modul

$
0
0
Hallo,
Ich versuche seit einiger Zeit mehr oder Weniger erfolgreich eine gemultiplexte 7-Segment-Anzeige einer Maschine mit BCD-CODE einzulesen, um Fehler zu Visualisieren. Bis jetzt wird den Bedienern nur ein Fehlercode angezeigt, was neuen bzw. unerfahrenen Bedienern zum Verhängnis wird. Die Neue Anzeige soll dann auf einem Signage-Display erfolgen in Klartext.
Leider bekomme ich einige Ziffern nicht mit bzw. es werden Ziffern erkannt, die nicht angezeigt werden.
Es handelt sich um eine WiBond Anzeige mit 6 Stellen (Datenblatt angehängt).
Den Code hab ich mal angehängt, auch wenn er einige versuche noch enthält. Simuliere ich dann wird alles richtig erkannt.
Verwendet wird eine B&R X20CP1584 mit einem reAction Eingangsmodul (aufgrund der möglichen kurzen Zeiten).
Die Anzeige hat einen Ausgangsstecker auf dem ich mit dem SPS-Modul daraufhänge. Auch ein Direkter Anschluss an die SPS der Maschine hilft nicht weiter.

Wie würdet ihr daran gehen?
Code:


PROGRAM _CYCLIC
        RTEnable := TRUE;
       
        f_trig_0(CLK := CS);
        r_trig_0(CLK := CS);
       
        IF CS AND Strobe THEN
                       
//Adresse zusammen setzen               
                Bit2Byte_01.bitadr := ADR(adressarray[0]); (* get adress of bit array *)
                Bit2Byte_01.length := 8;
                Bit2Byte_01(bitadr := ADR(adressarray), length := 8); (* convert bit array into byte array *)
                adress1 := Bit2Byte_01.byteadr; (* get adress of byte array *)
                memcpy(ADR(adress), adress1, 2);
                       
                IF adress <> adressold THEN
                        arraycounter := arraycounter + 1;
                        adressdatabase[arraycounter] := adress;
                        IF arraycounter = 512 THEN
                                arraycounter := 0;
                        END_IF
                        adressold := adress;
                END_IF
               
               
// Zeichen-Bits erstellen
                IF D1 THEN
                        z0 := 1 ;
                ELSE z0 := 0;       
                END_IF
               
                IF D2 THEN
                        z1 := 2 ;
                ELSE z1 := 0;
                END_IF
               
                IF D3 THEN
                        z2 := 4 ;
                ELSE z2 := 0;
                END_IF
               
                IF D4 THEN
                        z3 := 8 ;
                ELSE z3 := 0;
                END_IF
                       


// Zeichen Bilden
                Zeichen := z0 + z1 + z2 + z3;               
                       
                Zifferarray[adress] := Zeichen;
               
//Zeichen umwandeln & String bilden
                sZiffer0 := INT_TO_STRING(Zifferarray[0]);
                sZiffer1 := INT_TO_STRING(Zifferarray[1]);
                sZiffer2 := INT_TO_STRING(Zifferarray[2]);
                sZiffer3 := INT_TO_STRING(Zifferarray[3]);
                sZiffer4 := INT_TO_STRING(Zifferarray[4]);
                sZiffer5 := INT_TO_STRING(Zifferarray[5]);
                sZiffer6 := INT_TO_STRING(Zifferarray[6]);
                sZiffer7 := INT_TO_STRING(Zifferarray[7]);


//FehlerString Leeren       
                FehlerstringZiffer := leerstring;
               
                strcat(ADR(FehlerstringZiffer), ADR(sZiffer7));
                strcat(ADR(FehlerstringZiffer), ADR(sZiffer6));
                strcat(ADR(FehlerstringZiffer), ADR(sZiffer5));
                strcat(ADR(FehlerstringZiffer), ADR(sZiffer4));
                strcat(ADR(FehlerstringZiffer), ADR(sZiffer3));
                strcat(ADR(FehlerstringZiffer), ADR(sZiffer2));
                strcat(ADR(FehlerstringZiffer), ADR(sZiffer1));
                strcat(ADR(FehlerstringZiffer), ADR(sZiffer0));
               
//Fehlernummern Abspeichern
                IF FehlerstringZiffer <> FehlerstringZifferOld THEN
                        //MpAlarmXSet(gAlarmXCore,FehlerstringZiffer);//
                        arraycounter1 := arraycounter1 + 1;
                        Fehlerstringdatabase[arraycounter1] := FehlerstringZiffer;
                        IF arraycounter1 = 512 THEN
                                arraycounter1 := 0;
                        END_IF
               
               
                        FehlerstringZifferOld := FehlerstringZiffer;
       
                END_IF
               
                               
        END_IF
                       
END_PROGRAM

Vielen Dank schonmal!

grüße
Micha
Angehängte Dateien

Viewing all articles
Browse latest Browse all 50020


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>