Step 7 Taktmerker nach Bitmuster

Reckers

Level-2
Beiträge
73
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Nachdem ich in der Suchfunktion nicht fündig geworden bin, versuche ich es mal direkt :)

Ich möchte gerne einen bestimmten Takt anhand eines Eingangsbyte ausgeben, hab jedoch noch keine Idee dies zu realisieren.
das Ganze sollte so aussehen:
ich bekomme ein Eingangsbyte (EB2), anhand diesen Inhalts möchte ich den entsprechenden Taktmerker verwenden, also
bei einem Wert von 1 zB M100.1,
bei einem Wert von 2 M100.2
usw.
Ich möchte das gerne über einen FB machen, wobei ich als Eingangsparameter
einmal das Eingangsbyte EB2 bekomme und den Taktmerkerbyte M100.
Als return -Wert dann den passenden Taktmerker als BOOL, bsp. M100.2.

Als Software verwende ich Step 7, SPS eine 315DP.

Kann mir da jemand behilflich sein?

Vielen Dank schonmal im Vorraus!

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum so umständlich?

Code:
U E2.1
U Taktmerker_1
= M100.1

Ich denke er möchte auf das Byte vergleichen.

Dann müsstest du dir eben einen Vergleicher bauen und dieser vergleicht auf die Dezimalzahl
sprich bei 128 = M100.7
usw.

Ansonsten wäre die einfachste Lösung mit Sicherheit die von oben!
 
Danke erstmal für eure Anworten!

Mit meinem Problem bin ich jedoch nicht weiter.

Ich bekomm an meiner Eingangsschnittstelle des FBs das Taktmerkerbyte M100 ( "#Taktbyte" im FB) und ein Bitmuster in einem Byte("#Vorgabe" im FB).
Im FB wird dann gecheckt welches Bitmuster sich in #Vorgabe befindet.
Ist nun da zBsp. eine 1 drin, will ich aus dem #Taktbyte das 1. Bit (10Hz) nehmen und diesen Takt an den Ausgang #Takt(BOOL)
geben und im OB1 weiter verarbeiten. Somit habe ich für weitere FBs den gleichen Takt, der vorgegeben wurde.

Ich hoffe ich konnte mich nun ein wenig verständlicher ausdrücken :)
 
.
Mach eine Sprungleiste, wo du den Inhalt des EB
mit festen Werten vergleichst.
Je nach Ergebnis legst du den jeweiligen Taktmerker
auf den Ausgang.
 
Ich würde das in etwa so machen:

Code:
FUNCTION FC 100 : VOID
TITLE =
{ S7_language := '9(1) Englisch (USA)  17.10.2013  08:22:01' }
VERSION : 0.1




VAR_INPUT
  Eingangsbyte : BYTE ;    
  Taktmerkerbyte : BYTE ;    
END_VAR
VAR_OUTPUT
  Taktbit : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =


      L     P##Taktmerkerbyte; 
      L     #Eingangsbyte; 
      +D    ; 
      LAR1  ; 


      U     M [AR1,P#0.0]; 
      =     #Taktbit; 
END_FUNCTION

Aufruf so:

Code:
  CALL  FC   100
       Eingangsbyte  :=EB10
       Taktmerkerbyte:=MB100
       Taktbit       :=M200.0

In EB 10 stehen Zahlen von 0-7
MB100 ist das Taktmerkerbyte der SPS
M200.0 blinkt je nach Anwahl:

0 mit Takt von M100.0
1 mit Takt von M100.1

7 mit Takt von M100.7

Achtung, wenn man in EB10 Zahlen höher als 8 hineinschreibt, dann werden die Merker 101.0 ….. als "Taktmerker" ausgelesen, was natürlich i.d.R. nicht zu einem Blinken des M200.0 führt.
 
Ich bekomm an meiner Eingangsschnittstelle des FBs das Taktmerkerbyte M100 ( "#Taktbyte" im FB) und ein Bitmuster in einem Byte("#Vorgabe" im FB).
Im FB wird dann gecheckt welches Bitmuster sich in #Vorgabe befindet.

@Ralle
Dein Beispiel erwartet eine Zahl.

Ich habe es so gelesen, das er jeweils 1 Bit von 0...7
als Vorgabe erhält, um damit den jeweiligen Taktmerker
auszuwählen und auf den Ausgang zu schalten.

Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich bekomme ein Eingangsbyte (EB2), anhand diesen Inhalts möchte ich den entsprechenden Taktmerker verwenden, also
bei einem Wert von 1 zB M100.1,
bei einem Wert von 2 M100.2
usw.

@SoftMachine
Na ja, ich hab das hier genommen, da kann er sich ja aussuchen, was im besser paßt. :)
 
Zurück
Oben