Digitalen Inputs Nummern zuweisen

Amson

Level-2
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

habe hier eine S7-314 stehen mit 6x32 digitalen Eingängen, einer IM 365 und 5x32 digitalen Ausgängen.
Benutze Step7 V5.3+SP3.

Ich habe in meiner Anlage 22 Laststufen von 5kg - 240kg. Jede Laststufe muss durch einen "rastenden" Schalter ausgewählt werden. Also ist jeder der 22 Schalter mit einem digitalen Eingang verbunden. (E2.0 - E4.5)


Mein Problem ist, dass ich jedem Schalter bzw. Laststufe eine Wertigkeit, bzw eine Nummer zuweisen möchte. Mithilfe dieser Nummern möchte ich dann mit einem oder mehreren Vergleichern arbeiten.
Oder gibt es eine möglichkeit, das ich direkt die Eingänge miteinander vergleichen kann? Also E2.3 ist kleiner als E4.5.

Hoffe Ihr versteht worauf ich hinausmöchte.

Danke und mit freundlichem Gruß,

der Amson.
 
Mit SPB also spring bedingt

So könnte es gehen..
Code:
L 5.0
U E 2.0
SPB ENDE
 
L 10.0
U E 2.1
SPB ENDE
 
L 15.0
U E 2.2
SPB ENDE
.
.
.
 
ENDE: T LASTSTUFE

So ungefähr
Am ende müsstze dann noch was hin wenn kein Eingang angewählt ist.
 
Danke euch beiden für die schnelle Antwort.

-Probiere jetzt erstmal beides aus.

@repök
in AWL siehts schon recht gut aus (also keine Fehler) :ROFLMAO: *freu*

@approx:
mit dem "move" in fup versteh ich es nicht richtig. Bei dem "IN" kann ich ja kein Bit eingeben, also z.B. nicht "E2.4". Was würdest du hier eingeben? Out ist denke ich klar, ein "MW50"
Oder bin ich auf dem falschen Dampfer.

Ich melde mich nochmal,

Danke
Amson
 
Danke euch beiden für die schnelle Antwort.

Bei dem "IN" kann ich ja kein Bit eingeben, also z.B. nicht "E2.4". Was würdest du hier eingeben? Out ist denke ich klar, ein "MW50"
Oder bin ich auf dem falschen Dampfer.

Nein am "IN" gibst Du die gewünschte Laststufe (Wert) an. Am "EN" soll der entsprechende Eingang angetragen werden. "OUT" wie Du schon richtig schreibst, kommt die Variable, die dann verglichen werden soll usw.

:p
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ahhh, ok.

Jetzt habe ich es verstanden.
So wie es aussieht, ist es haargenau das, was mir gefehlt hat.

Ich werde mich für den "move" Befehl entscheiden, mit AWL komme ich irgendwie nicht klar. :rolleyes:


Danke an euch beide,

der Amson
 
Hallo zusamm!

Bin kein Profi, aber wäre da ein Sprungverteiler nicht passender?
So in der Art:

Code:
L     ED   2  //falls EB 5 unbelegt ist.
T     MD    10
 
      L     MD    10
      SPL   list
      SPA   pos0
      SPA   pos1
      SPA   pos2
      SPA   pos3
      SPA   pos4
      SPA   pos5
      SPA   pos6
      SPA   pos7
      SPA   pos8
      SPA   pos9
 
list: L     240
pos0: L     5
SPA   ende
pos1: L     10
SPA   ende
pos2: L     15
SPA   ende
pos3: L     20
SPA   ende
pos4: L     25
SPA   ende
pos5: L     30
SPA   ende
pos6: L     35
SPA   ende
pos7: L     40
SPA   ende
pos8: L     45
SPA   ende
pos9: L     50
SPA   ende
 
ende: T     #laststufe
 
Hallo zusamm!

Bin kein Profi, aber wäre da ein Sprungverteiler nicht passender?

Sprungverteiler funkioniert auch. Aber da der Threadstarter offensichtlich erst Erfahrungen mit dem Programmieren sammelt, ist der Sprungverteiler wohl nicht die "richtige" Wahl.

Ich werde mich für den "move" Befehl entscheiden, mit AWL komme ich irgendwie nicht klar.

Gruß Approx;)
 
Hallo Manfred,

so wie Du den Sprungverteiler aufgebaut hast wird er aber nicht funktionieren!
Wenn ich die Aufgabe richtige verstehe, steht immer nur ein Bit im ED2 an. D.h. im ED2 steht dann 0,2,4,8,16....
Beim SPL werden aber alle Zahlen von 0..255 verarbeitet. Zum Einen kannst Du dann nur ein 1 Byte
gebrauchen und zum 2. muss mann massenhaft SPA-Befehle in den Code schreiben.

Meine Lösung (in AWL, da mir KOP oder FUP zu aufwendig wären):
Eine Schleife über alle Bits. Innerhalb der Schleife ein SLW 1 und ein SPP aus der Schleife raus.
Erfolgt kein Sprung, wird der Vergleicher um 5 erhöht.

Grüße
Gebs
 
so hier mal eine awl-quelle
ermittelt das höchstwertige bit
Code:
FUNCTION FC 474 : VOID
TITLE =ermittelt das höchste bit
AUTHOR : Lischnew
NAME : HighestB
VERSION : 1.0

VAR_INPUT
  Startbyte : INT ; 
  Startbit : BYTE ; 
  Anzahl_Bits : INT ; 
END_VAR
VAR_OUTPUT
  Hoechste_Bit : INT ; 
END_VAR
VAR_TEMP
  index : INT ; 
  ende : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =
      L     0; 
      T     #index; 
      T     #Hoechste_Bit; 
anf:  NOP   0; 
      L     #Startbyte; 
      SLD   3; 
      LAR1  ; 
      L     #Startbit; 
      +AR1  ; 
      L     #index; 
      +AR1  ; 
      U     E [AR1,P#0.0]; 
      SPBN  no; 
      L     #index; 
      L     1; 
      +I    ; 
      T     #Hoechste_Bit; 
no:   NOP   0; 
      L     1; 
      L     #index; 
      +I    ; 
      T     #index; 
      L     #index; 
      L     #Anzahl_Bits; 
      >=I   ; 
      SPB   exit; 
      SPA   anf; 
exit: NOP   0; 
NETWORK
TITLE =
 
END_FUNCTION
 
Zuletzt bearbeitet:
Zurück
Oben