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

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

Thema: Programmanwahl über 2 Dekadenschalter

  1. #1
    Registriert seit
    16.10.2012
    Beiträge
    30
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi, bin neu auf dem Gebiet der Programmierung und benötige eure Hilfe!

    Ich will eine Programmanwahl für einen Roboter schreiben, also 1-99 mit Parity Bit.

    Es existiert bereits ein altes Programm, aber da sind in jedem Netzwerk die Eingänge e0.0-e0.7 aufgeführt und werden dann abgefragt:

    Netzwerk:

    e0.0 = 0
    e0.1 = 1
    e0.2 = 0
    e0.3 = 0
    e0.4 = 0
    e0.5 = 0
    e0.6 = 0
    e0.7 = 0

    = Programm 2

    usw...

    Jetzt würde ich das ganze gern etwas kompakter machen, also nicht 100 und mehr Netzwerke sondern wenn möglich in wenigen Bausteinen zusammen fassen! Gibt es da eine Möglichkeit, oder vielleicht einen Baustein, mit dem ich das machen kann!?

    Die Dekadenschalter können 1,2,4,8 ausgeben, also der erste für Einer,- und der zweite für die Zehner Stellen.

    Hoffe ihr versteht was ich meine!

    danke schon mal für eure Tipps
    Zitieren Zitieren Programmanwahl über 2 Dekadenschalter  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    ich weiß jetzt nicht so genau, wo du hinwillst, aber :
    Code:
    L EB 0  // lädt den Wert des Eingangsbytes als BCD-Wert
    BTI  // wandelt das ganze in INT / Dezimal um
    T MW 10  // hier steht nun deine Programm-Nummer als Zahl drin und du kannst damit weiter arbeiten
    Das ist jetzt aber Code für eine S7. Ggf. hast du ja auch eine S5 ???

    Was soll weiter passieren ?

    Gruß
    Larry

  3. #3
    Registriert seit
    16.10.2012
    Beiträge
    30
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hab eine S7 200. Ich kann schon ein wenig programmieren aber für komplexere Sachen reichts dann doch nicht...

    Im Grunde will ich aus 2 Dekadenschaltern jeweils 4 Eingänge, sprich insgesamt 8 Eingänge eine Programmwahl 1-99 programmieren.

    Der Code soll an den Roboter, dort ausgelesen und dann von ihm verarbeitet werden.

    E0.0 = 1 / A0.1+A0.7 = Programm Bit + Parity

  4. #4
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.336
    Danke
    27
    Erhielt 130 Danke für 117 Beiträge

    Standard

    Stichwort BCD codiert!

    Also so wie von Larry schon geschrieben!

  5. #5
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    "Die Dekadenschalter können 1,2,4,8 ausgeben"

    Ich vermute mal das der erste Dekadenschalter E0.0-E0.3 beschaltet und der für Zehnerstellen E0.4-E0.7, oder?
    Das würde bedeuten das lowbyte und highbyte vor der BTI-Operation maskiert werden müssten.
    Alternativ zur BTI/Maskierung (falls nicht in S7-200 möglich) kann eine Werteabhängige Addition in AWL schnell und einfach erfolgen.
    Die Parität kann 1:1 mit dem untersten Bit also A0.0 verknüpft werden.

    MfG MK
    and we all support the team (S.King - Die Arena)

  6. #6
    Registriert seit
    16.10.2012
    Beiträge
    30
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Moin, ich programmiere in FUP, mit AWL hab ich keine Erfahrungen...

    Das die Dekadenschalter 1,2,4,8 können ist mir bewusst, habe ja schon ein Program damit laufen... nur streckt sich das leider über knapp 100 Netzwerke...

    Das will ich kompakter haben, damit es übersichtlicher wird!

    Auch das es sich um einen BDC Code handelt ist mir bewusst!

    Ich kann mir vorstellen was du meinst Mäuseklavier, aber ich weiß nicht wie ich es umsetzen soll...

  7. #7
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    Hi,
    in AWL sehe das ungefähr so aus:

    //Zuerst Zehnerstelle
    UN E0.4
    SPB M20

    L 1
    +I

    M20: UN E0.5
    SPB M40

    L 2
    +I

    M40: UN E0.6
    SPB M80

    L 4
    +I

    M80: UN E0.7
    SPB M1

    L 8
    +I

    //dann Zehnerstelle mit 10 multiplizieren
    M1: L 10
    * I
    //dann Einerstelle zu addieren
    UN E0.0
    SPB M2

    L 1
    +I

    M2: UN E0.1
    SPB M4

    L 2
    +I

    M4: UN E0.2
    SPB M8

    L 4
    +I

    M8: UN E0.3
    SPB Mend

    L 8
    +I

    //Ergebnis ins Ausgangsbyte schreiben
    Mend: T AB 0
    //Parität setzen (ungerade)
    U A0.0
    = A0.7

    so aus dem Kopf heraus. In FUP sind die Sprungmarken z.B. M8 Label, die Sprunganweisungen(SPB) JMP. Ca. 10-20 Netzwerke statt über 100

    MfG MK
    Geändert von Sinix (17.10.2012 um 12:42 Uhr) Grund: Kommentiert
    and we all support the team (S.King - Die Arena)

  8. #8
    Registriert seit
    16.10.2012
    Beiträge
    30
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    jetzt ganz dumm gefragt, kan ich das so in die S7 Oberfläche eintippen, und es dann in FUP sehen!? Wie gesagt, AWL = 0,0000 Kenntnis

  9. #9
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    mmmhhh is doch net schwör....
    and we all support the team (S.King - Die Arena)

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.205
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Grrrmmml...
    bei aller Hilfsbereitschaft, doch wenn man bereits weiß, daß es sich um eine S7-200 handelt, dann sollte für die Programmierbeispiele kein S7-Code verwendet werden - die S7-200 versteht den nicht. S7-200-AWL ist einfach zu verschieden.

    Parity "gerade" oder "ungerade" heißt nicht gerade oder ungerade Zahl, sondern die Anzahl der 1-Bits ist gemeint!

    So, nun Hinweise zur Lösung:

    E0.0 ... E0.7 --> A0.0 ... A0.6
    Das Umwandeln der 8 BCD-Eingänge 00...99 hex zu 7 Ausgängen 00..99 dez (00..63 hex) gelingt einfach mit der Operation BCDI (BCD_I).

    A0.7 = Parity
    Ich verstehe den robomann so, daß er "gerade" ("Even") Parity benutzen will, sprich: die Anzahl 1-Bits im AB0 soll gerade sein.
    d.h. ist die Anzahl der 1-Bits in den 7 Bits A0.0 bis A0.6 ungerade, dann soll A0.7 = 1 sein, damit die Gesamtzahl 1-Bits gerade ist. Die S7-200 kennt allerdings keine fertige Operation für die Ermittlung des Paritätsbits. Man könnte nun die Anzahl 1-Bits in A0.0 ... A0.6 zählen oder eine vorberechnete Lookup-Tabelle hinterlegen. Tip für clevere Lösung: Ungerade Parität ist das XOR über alle Bits. Für gerade Parität wird das Ergebnis einfach invertiert. Leider kennt die S7-200 auch keine XOR-Bitverknüpfung, nur XORW (WXOR_W) (auch XORB (WXOR_B) ab neuerer Firmware).

    NACHTRAG: http://de.wikipedia.org/wiki/Paritätsgenerator

    Harald
    Geändert von PN/DP (17.10.2012 um 18:55 Uhr) Grund: Link Paritätsgenerator zugefügt
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Sinix (23.10.2012)

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 29.03.2012, 18:21
  2. BCD Vorwahl-/Dekadenschalter gesucht
    Von Jupp06 im Forum Schaltschrankbau
    Antworten: 0
    Letzter Beitrag: 28.06.2010, 08:22
  3. Antworten: 0
    Letzter Beitrag: 08.01.2010, 16:34
  4. Antworten: 3
    Letzter Beitrag: 17.08.2009, 20:22
  5. Antworten: 33
    Letzter Beitrag: 10.02.2009, 21:14

Lesezeichen

Berechtigungen

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