Step 7 eingang auf einen zahlenwert abfragen

Ich gehe mal davon aus, du meinst ein Eingangsbyte oder Eingangswort?

Möglichkeiten gibt es wie immer mehrere, hier mal ein Bsp. für ein Word

Code:
      L     EW     0
      L     0
      ==I   
      =     M    100.0

      L     EW     0
      L     1
      ==I   
      =     M    100.1


      L     EW     0
      L     2
      ==I   
      =     M    100.2

...

      L     EW     0
      L     6
      ==I   
      =     M    100.6

Für Byte 0 statt Word 0 schreibst du EB.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Verstehe die Frage nicht.
AnalogEingang oder DigitalEingang?
Wenn digital, wieviele Bit (mindestens 3)? Welche?
Was heisst "zwischen 0 und 6"?
Also, ob der Wert im Berech 1 bis 5 liegt oder im Bereich 0 bis 6?
 
Zuletzt bearbeitet:
also es geht um eine led leuchte sie hat 3 ausgänge für die farbenwahl (0bis6) und 3 ausgänge für 6 segmente
ich habe mir gedacht ich programmiere mir einen baustein wo 6 eing#nge hat für die segmente und dort soll dann
eine zahl abgefragt werden für die farbe also 0 bis 6
0 = aus
1 = rot
2 = grün
3 = blau
4 = gelb
5 = weiß
6 = violett


für die farbe wollte ich dann wie vorgeschlagen
l xxx ( byte)
l 2
==I
spb grün


grün: set xxx
set xxx
clr xxx


für dei segment whal wollte ich dann abfragen ob eine zahl zwischne 0 bis 6 vorhanden und ja ich könnte es dann so wie oben machen
aber dachte das geht einfacher als jede zahl abzufragen
 
In AWL gibt es noch die Sprungleiste (Befehl heißt SPL), das ist ähnlich wie case in SCL oder Pascal.
Kannst dir in der Hilfe zu Step7 genauer ansehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für die Farben würde ich 3 Eingänge nehmen bzw. die Zahlen 0 bis 7. Z.B.:
0 - AUS
1 - rot
2 - grün
4 - blau
3 - gelb (= rot + grün)
5 - violett (= rot + blau)
6 - türkis (= grün + blau)
7 - weiss (= rot + grün + blau)
So kannst Du die drei GrundFarben (R, G, B) einzeln ein-/ausschalten und auch die Kombinationen daraus bilden.
 
ich habe das bis jetzt so gemacht :
ich glaub ich habe noch ein problem mit dem confirm bit
dass die led das gar nicht mitbekommt wenn ich es setze und gleich wieder rücksetze wie mache ich am besten
eine verzögerung

U(
L #seg1_color_i
L 1
>=I
)
U(
L #seg1_color_i
L 6
<=I
)
SPBN off1


SET
= #seg1_o
CLR
= #seg2_o
= #seg4_o




L #seg1_color_i
L 1
==I
SPB rd1


L #seg1_color_i
L 2
==I
SPB gr1


L #seg1_color_i
L 3
==I
SPB bl1


L #seg1_color_i
L 4
==I
SPB yel1


L #seg1_color_i
L 5
==I
SPB whi1


L #seg1_color_i
L 6
==I
SPB prp1
//---------------------------------------------


L #seg1_color_i
L 0
==I
SPB off1




rd1: SET
= #color1_o
CLR
= #color2_o
= #color4_o
SPA M001


gr1: CLR
= #color1_o
SET
= #color2_o
CLR
= #color4_o
SPA M001
bl1: SET
= #color1_o
= #color2_o
CLR
= #color4_o
SPA M001
yel1: CLR
= #color1_o
= #color2_o
SET
= #color4_o
SPA M001


whi1: SET
= #color1_o
CLR
= #color2_o
SET
= #color4_o
SPA M001




prp1: CLR
= #color1_o
SET
= #color2_o
= #color4_o
SPA M001


off1: SET
= #seg1_o
CLR
= #seg2_o
= #seg4_o


CLR
= #color1_o
= #color2_o
= #color4_o
SPA M001


M001: SET
= #confirm_o
CLR
= #confirm_o


NOP 0
 
der ausgang kommt nie. das paa wird erst am ende des zyklus beschrieben.
und wann soll der ausgang gesetzt werden? doch vermutlich dann wenn sich eine änderung ergeben hat.
 

Anhänge

  • Zwischenablage02.jpg
    Zwischenablage02.jpg
    39,6 KB · Aufrufe: 21
ja genau wenn die farbe gewechselt wird soll sich die nummer ändern und jedesmal muss das mit einem bit bestätigt werden ...wie mache ich das ? .....die grafik soll dann die lösung sein.....mit dem zyklus am ende beschreiben habe ich nicht verstanden ich schaue es mir nochmals an.....
 
Ich nehme an, das war jetzt das Programm für Segment1. Kommt jetzt noch 5-mal das gleiche hinzu für die anderen 5 Segmente?
Ehe Du noch ein paar km Code eintippst, verrat uns doch mal, …
- wo die Information über die gewählte SegmentNr herkommt und in welcher Form (6 einzelne Bits? Für jedes Segment 1 eigenes Bit? Sollen mehrere Segmente gleichzeitig auf dieselbe Farbe eingestellt werden? ODER als Zahl, z.B. 1 bis 6 so dass immer nur in 1 einzigen Segment die Farbe angewählt werden kann?)
- wo die Information über die gewählte Farbe herkommt und in welcher Form (7 einzelne Bits? Für jede Farbe 1 eigenes Bit? ODER als Zahl, z.B. 0 bis 6)
- Warum beschränkst Du die Anzahl Farben von 7 auf 6?
Mein Vorschlag:
- 7 Farben + AUS
- FarbAnwahl über die Zahlen 0 bis 7
- die Zuordnung der Zahlen zu den Farben sinnvoll wählen (wie bereits in #6 beschrieben)
- SegmentAnwahl über die Zahlen 0 bis 5 oder 1 bis 6 oder … - … was erwartet Deine LED-Ansteuerung?
Ich verstehe nämlich nicht, warum EinzelBits mühsam auf verschiedene Zahlen umjongliert werden sollen/müssen.
Kennst Du die BinärDarstellung der Zahlen 0 bis 7?
Fällt es Dir schwer, Dir zu merken "1 für rot; 2 für grün, 4 für blau"? Die Zuordnung der Farben rot, grün und blau zu den Zahlen 1, 2 und 4 hängt davon ab, was Deine LED-Angelegenheit daraus macht.
Fällt es Dir schwer, Dir zu merken "rot und grün ergibt gelb; rot und blau ergibt violett; grün und blau ergibt türkis; rot und grün und blau ergibt weiss; weder rot noch grün noch blau ergibt schwarz (= AUS)"?
Du brauchst doch eigentlich nur die beiden Zahlen (Farbe und SegmentNr) 1:1 an die LED-Mimik (fast?) unverändert "durchzureichen" und musst nur noch ein ConfirmBit dazuzaubern - oder habe ich das so falsch verstanden?
Code:
L FarbNr  // INT-Variable für FarbNr; IN; 0 bis 7
T MW0
U M1.0
= #color1_o // Ausgang für Farbe1, z.B. rot
U M1.1
= #color2_o // Ausgang für Farbe2, z.B. grün
U M1.2
= #color4_o // Ausgang für Farbe2, z.B. blau
L SegmentNr// INT-Variable für SegmentNr; IN; 1 bis 6
T MW2
U M3.0
= #segment1_o // Ausgang für Segment1
U M3.1
= #segment2_o // Ausgang für Segment2
U M3.2
= #segment4_o // Ausgang für Segment4
L FarbNrAlt // "neue" INT-Variable 
L FarbNr  // INT-Variable für FarbNr (s.o.)
T FarbNrAlt // "neue" INT-Variable - muss im jeweils folgenden PLC-Zyklus noch unverändert zur Verfügung stehen (z.B. IN-OUT)
<>I
// hier ggfs noch ImpulsVerlängerung einbauen - erstmal ohne Verlängerung testen!
= ConfirmBit // Ausgang für ConformBit - ist doch dasselbe Bit für alle Segmente?
// dieser Code ist schon der komplette Inhalt des FC! Es fehlen nur noch die VariablenDeklarationen.

Gruss, Heinileini
PS:
Dir HexZahlen in den farbigen Feldern sowie die Angaben "RGB(..., ..., ...)" gelten u.a. in Excel.

RGB.jpg
 
Zuletzt bearbeitet:
Hallo heinileini

also diese Segment ledanzeige hat ein Datenblatt die Folgendes sagt

Farbe 1. Farbe 2. Farbe 4.
aus
rot X
grün. X
blau X. X
gelb X
weiss. X. X
violett. X. X


Pin 9. pin 10. pin 11
seg1. X
seg2. X
seg3 X. X
seg4. X
seg5. X. X
seg6. X. X


meine Idee war dass der Baustein 6 Eingänge(6Segment) hat und da jeweils eine Zahl eingetragen wird 0bis 6 für die Farbe
also der Code funktioniert für ein Segment wenn ich aber nur die Bestätigung über die Variable beobachten steuern das bist auf 1 und dann auf 0 setze
habe das condition ganz am Ende in meinem Code set und Clear auskommentiert
Und wie löse ich das ohne dass ich es über die Variable beobachte steuern mache
ich dachte in meinem Code wird das so schnell gesetzt und ruckgesetzt dass die led die bitänderung nicht mitbekommt oder habe ich ein Programmierfehler

zu. Testen trage ich die Zahlen selbst ein

aber Ende soll für eine bestimmten Schritt wenn z.b Störung anliegt soll dann eine feste Zahl geladen werden und dementsprechend das Segment mit der Farbe angesteuert werden
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaub ich muss diesen Confirm bit ausschaltverzögern in awl Code und wo schreibe ich diesen Code also an welcher Stelle bei meinem Code ..... Brauche ich für einen Timer in dB weil momentan habe ich in einem fc geschrieben
 
Meinst Du so in dieser Art?

Code:
      Farbe 1. Farbe 2. Farbe 4. 
aus
rot      X
grün              X
blau                       X
gelb     X        X
weiss    X        X        x
violett  X                 X
       Pin 9.   pin 10.  pin 11
seg1     X
seg2              X
seg3     X        X
seg4                       X
seg5     X                 X
seg6              X        X
Gelb und blau habe ich getauscht - da bin ich hartnäckig ;o)

also der Code funktioniert für ein Segment aber nur wenn ich die Bestätigung über die Variable beobachten steuern das biest auf 1 und dann auf 0 setze
...
ich dachte in meinem Code wird das so schnell gesetzt und ruckgesetzt dass die led die bitänderung nicht mitbekommt oder habe ich ein Programmierfehler
Das Bit wird in Deiner Version gesetzt und wieder rückgesetzt, BEVOR der 1-Zustand auf dem Ausgang ausgegeben werden kann.
Es wird immer nur das wieder rückgesetzte Bit ausgegeben.
Wir wissen also noch nicht, wielange wir die 1 ausgeben müssen. Vielleicht genügt 1 PLC-Zyklus und vielleicht brauchen wir keinen Timer.
Sagt Dein DatenBlatt nichts zu diesem Thema?

Warum funktioniert das nur bei 1 Segment?

aber Ende soll für eine bestimmten Schritt wenn z.b Störung anliegt soll dann eine feste Zahl geladen werden und dementsprechend
das Segment mit der Farbe angesteuert werden
Das geschieht aber ausserhalb des FC!?

Brauche ich für einen Timer in DB weil momentan habe ich in einem FC geschrieben
Erst mal ohne Timer testen!
Falls das nicht funktioniert, überlegen wir weiter ... (S5-Timer? SchiebeRegister? Zähler? ...?)

Ich habe in #13 die Kommentare geändert/ergänzt.
Schau bitte dort mal nach.
Der Code ist eigentlich(?) schon der komplette FC - es fehlen nur die VariablenDeklarationen.

Gruss, Heinileini
 
Zuletzt bearbeitet:
Warum funktioniert das nur bei 1 Segment?

habs nur für ein segment programmiert

Das geschieht aber ausserhalb des FC!?

ja


datenblatt sagt nichts wie lange die 1 gesettz sein muss....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, sosofresh,

irgendwie müssen wir mal "in die Pötte kommen". Meine S7-Phase war nicht sehr lang und liegt schon Jahre zurück. Damals hatte ich zumindest eine Steuerung und ein PG und konnte testen.
Jetzt kann ich nur noch raten, was geht und wie man's hinschreiben muss (nachlesen ist mir zu zeitaufwendig - insbesondere das Finden von geeigneten pdf.Dokumenten).
Du kannst mir aber sicherlich auf die Sprünge helfen.

Ich möchte

1. die MerkerBits bzw. MerkerWorte des Codes möglichst durch lokale Variablen des FC ersetzen.
Wenn ich mich richtig erinnere, könnte man ohne weiteres statt T MW0 T LW0 und statt U M1.0 U L1.0 schreiben (die L-Dinger sind natürlich nur innerhalb des FCs gültig)?

2. die VarialenDeklaration des FC in Angriff nehmen, aber hier verlässt mich mein Gedächtnis, wie man's konkret formulieren muss.
Wir benötigen:
IN-Variablen vom Typ INT:
- für die FarbNr
- für die SegmentNr
IN-OUT-Variablen vom Typ INT:
- für die FarbNrAlt
- vielleicht für ein SchiebeRegister oder eine ZählVariable
OUT-Variablen vom Typ BOOL:
- für Farbe1
- für Farbe2
- für Farbe4
- für Segment1
- für Segment2
- für Segment4
- für ConfirmBit
Lokale Variablen vom Typ WORD:
- für LW 0 (sofern wir damit auch L 1.0 bis L 1.2 zur Verfügung haben)
- für LW 2 (sofern wir damit auch L 3.0 bis L 3.2 zur Verfügung haben)
- für LW 4 (sofern wir damit auch L 4.0 bis L 5.7 zur Verfügung haben)

Könntest Du bitte mal in einem neuen (freien) FC diese Deklarationen anlegen und hier posten!?
FleissArbeit ist nicht gefragt, mir würde schon zu jedem Bereich (IN, IN-OUT, OUT, lokal) und DatenTyp (BOOL, INT) ein Beispiel genügen (hoffe ich)!
Vielsten Dank im Vorhinein!

Gruss, Heinileini

PS:
Der DeklarationsBereich Deines jetzigen FC sollte mir eigentlich auch schon auf die Sprünge helfen.
Da fehlt bisher wahrscheinlich nur ein Beispiel für IN-OUT und für die lokalen Variablen z.B. LW0 ?
 
Zuletzt bearbeitet:
Null Reaktion? Habe mal im Blindflug weiter improvisiert, nach bestem UnWissen im UnGewissen:
Code:
[FONT=courier new][COLOR=#222222]// === Deklarationen ("improvisiert!") ===[/COLOR]
[COLOR=#222222]VAR_INPUT // --- IN-Variablen vom Typ INT ---[/COLOR]
[COLOR=#222222]    #colorNr_i     : INT[/COLOR]
[COLOR=#222222]    #segmentNr_i   : INT[/COLOR]
[COLOR=#222222]END_VAR[/COLOR]
[COLOR=#222222]VAR_IN_OUT // --- IN-OUT-Variablen vom Typ INT --- [/COLOR]
[COLOR=#222222]    #colorNrOld_io : INT[/COLOR]
[COLOR=#222222]    #ShiftReg_io   : INT[/COLOR]
[COLOR=#222222]END_VAR[/COLOR]
[COLOR=#222222]VAR_OUTPUT // --- OUT-Variablen vom Typ BOOL (BIT?!) ---        [/COLOR]
[COLOR=#222222]    #color1_o      : BOOL[/COLOR]
[COLOR=#222222]    #color2_o      : BOOL[/COLOR]
[COLOR=#222222]    #color4_o      : BOOL[/COLOR]
[COLOR=#222222]    #segment1_o    : BOOL[/COLOR]
[COLOR=#222222]    #segment2_o    : BOOL[/COLOR]
[COLOR=#222222]    #segment4_o    : BOOL[/COLOR]
[COLOR=#222222]    #ConfirmBit_o  : BOOL[/COLOR]
[COLOR=#222222]END_VAR[/COLOR]
[COLOR=#222222]VAR_TEMP // --- Lokale TempVariablen vom Typ WORD ---[/COLOR]
[COLOR=#222222]    LW 0           : WORD // L 1.0 bis L 1.2 werden benötigt)[/COLOR]
[COLOR=#222222]    LW 2           : WORD // L 3.0 bis L 3.2 werden benötigt) [/COLOR]
[COLOR=#222222]    LW 4           : WORD // 1 Bit aus L 4.0 bis L 5.7 wird benötigt)[/COLOR]
[COLOR=#222222]END_VAR[/COLOR]
[COLOR=#222222]// === ausführbare Anweisungen ===[/COLOR]
[COLOR=#222222]// --- SegmentNr (1 bis 6) auf "Bits" umsetzen ---[/COLOR]
[COLOR=#222222]L   #segmentNr_i   // INT-Variable mit SegmentNr[/COLOR]
[COLOR=#222222]T   LW 2[/COLOR]
[COLOR=#222222]U   L 3.0[/COLOR]
[COLOR=#222222]=   #segment1_o    // für Ausgang an LED: Segment1[/COLOR]
[COLOR=#222222]U   L 3.1[/COLOR]
[COLOR=#222222]=   #segment2_o    // für Ausgang an LED: Segment2[/COLOR]
[COLOR=#222222]U   L 3.2[/COLOR]
[COLOR=#222222]=   #segment4_o    // für Ausgang an LED: Segment4[/COLOR]
[COLOR=#222222]// --- FarbNr (0 bis 7) auf "Bits" umsetzen ---[/COLOR]
[COLOR=#222222]L   #colorNr_i     // INT-Variable mit FarbNr [/COLOR]
[COLOR=#222222]T   LW 0[/COLOR]
[COLOR=#222222]U   L 1.0[/COLOR]
[COLOR=#222222]=   #color1_o      // für Ausgang an LED: Farbe1, z.B. rot[/COLOR]
[COLOR=#222222]U   L 1.1[/COLOR]
[COLOR=#222222]=   #color2_o      // für Ausgang an LED: Farbe2, z.B. grün[/COLOR]
[COLOR=#222222]U   L 1.2[/COLOR]
[COLOR=#222222]=   #color4_o      // für Ausgang an LED: Farbe4, z.B. blau[/COLOR]
[COLOR=#222222]// --- Auf Änderung der FarbNr testen --- [/COLOR]
[COLOR=#222222]L   #colorNrOld_io // INT-Variable IN-OUT für FarbNr "vorher" [/COLOR]
[COLOR=#222222]L   #colorNr_i  [/COLOR]
[COLOR=#222222]T   #colorNrOld_io[/COLOR]
[COLOR=#222222]<>I                // >>==> VKE [/COLOR]
[COLOR=#222222]// Beginn ConfirmSignalVerlängerung ...[/COLOR]
[COLOR=#222222]L   #ShiftReg_io   // INT-Variable IN-OUT für ConfirmVerlängerung[/COLOR]
[COLOR=#222222]T   LW 4[/COLOR]
[COLOR=#222222]S   L 4.0          // <==<< VKE // Bit 8 von SR setzen für ConfirmDauer = 8 x PLC-ZyklusZeit  [/COLOR]
[COLOR=#222222]L   LW 4           // wird diese Zeile weggelassen, kommt Confirm 1 Zyklus später[/COLOR]
[COLOR=#222222]SRW 1              // nach rechts schieben[/COLOR]
[COLOR=#222222]T   #ShiftReg_io[/COLOR]
[COLOR=#222222]L   0[/COLOR]
[COLOR=#222222]<>I                // >>==> VKE // solange SR <> 0, ist verlängertes Confirm = 1[/COLOR]
[COLOR=#222222]// ... Ende ConfirmSignalVerlängerung[/COLOR]
[COLOR=#222222]=   #ConfirmBit_o  // <==<< VKE // für Ausgang an LED: ConfirmBit[/COLOR]
[/FONT]
ConfirmationsVerlängerung per SchiebeRegister habe ich hinzugefügt. Falls diese Verlängerung gar nicht nötig sein sollte:
Einfach die Zeilen
// Beginn ConfirmSignalVerlängerung ...
bis
// ... Ende ConfirmSignalVerlängerung
ersatzlos streichen!

Gruss, Heinileini

PS:
Die Semikolonnen (oder wie sagt man?) habe ich lieber gleich weggelassen.
 
Zuletzt bearbeitet:
Zurück
Oben