Wie aus EB0=12 und EB1=4 ... X1=E12.4 machen?

NW-Trader

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Leider komme ich mit meinen C++ Kenntnissen im Step7 V5.3 nicht weit und hier habe ich eine Aufgabe bekommen, für die ich keine Hilfe in meinen SPS-Büchern finde.
Es soll eine Eingangsadresse aus 2 Eingangsbytes ermittelt werden:
EB0=12 und EB1=4 ... X1=E12.4
und nochmal:
EB2=16 und EB3=0 ... X2=E16.0

Dann sollen diese beiden Eingänge wahlweise durch ein Und, Oder bzw. Exkl.Oder verknüpft werden und das Ergebnis auf Y1 gelegt werden:
EB4=19 und EB5=7 ... Y1=A19.7

Wie kann man das lösen?
Danke und Gruß
 
Hallo,
ich verstehe dein Problem nicht so ganz.
Du liest das Eingangsbyte 12 ein. Aus diesem maskierst du in eine deiner internen Variablen das Bit 2^4 aus. Also etwas so :
Code:
Bit := (Eingangsbyte and 2^4)
In gleicher Weise verfährst du mit dem anderen Bit.
Zum Setzen des Ausgangs veroderst du das Ausgangsbyte mit dem Wert des zu setzenden Bits.
Code:
if Bit then Ausgangsbyte := Ausgangsbyte or 2^7
Hilft dir das weiter ?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf der SPS würde ich das einfach halten:
Mach Dir doch für jeden Eingang einen Zeiger und verwende es indirekt.

Also Byteadresse drei Bits nach links schieben, Bitadresse dazuaddieren, das ganze meinetewegen zwei mal. Oder jeweils neu.

Dann die E-Bits aufrufen und gut ist es.

Klingt doch gar nicht so schwer.

dtsclipper
 
Code:
*
      L     EB     0
      SLD   3
      L     EB     1
      +D    
      LAR1  
      U     E [AR1,P#0.0]
      =     M     10.0
      L     EB     2
      SLD   3
      L     EB     3
      +D    
      LAR1  
      U     E [AR1,P#0.0]
      =     M     10.1
      L     EB     4
      SLD   3
      L     EB     5
      +D    
      LAR1  
      L     EB     6                    //funktionsauswahl
      SPL   noth
      SPA   und
      SPA   oder
      SPA   exod
noth: SPA   end
und:  U     M     10.0
      U     M     10.1
      =     A [AR1,P#0.0]
      SPA   end
oder: U     M     10.0
      O     M     10.1
      =     A [AR1,P#0.0]
      SPA   end
exod: U     M     10.0
      X     M     10.1
      =     A [AR1,P#0.0]
      SPA   end
end:  NOP   0
 
War mal wieder einer schneller,

mein Code ist bei den ersten 14Zeilen genau gleich
inclusive M10.0 und M10.1... bemerkenswert, oder?
 
Ich fand eigentlich den M10.x komisch, ich wollte das eigentlich in eine Tempvariable schreiben, da ich aber nicht wusste was NW-Trader für einen kenntnisstand hat, wollte ich der einfachheit halt nur einen Merker nehmen. Das 4L das dann auch noch mit einem Merker macht , hatte mich dann gewundert.
Aber sonst geb ich dir voll Recht, die Beispiele haben auch bei mir nach 12 Jahren S7 noch so einiges bewirkt .
 
Das 4L das dann auch noch mit einem Merker macht , hatte mich dann gewundert.

wenn du es nur schnell runterschreiben willst, ohne viel zu klicken, ist sone globale variable wesentlich einfacher zu benutzen ... einfach adressieren und gut - da siegte die faulheit :rolleyes: ...außerdem sind die bytes, die die bits vorgeben, ja auch global ... natürlich könnte man das in ne kleine funktion packen, aber da kommt der angesprochene kenntnisstand zum tragen ;)

und die 10er? naja, irgendein bereich muß doch die hure mimen :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hätte ja nicht damit gerechnet, daß ihr beide hier mit Merkern anfangt. :ROFLMAO: Und wenn schon, hätte ich jetzt 200-er Merker erwartet, wie in den guten alten S5-Zeiten, aber dafür ist der 4L einfach zu jung. *ROFL*
 
Aber nach 12 Jahren S7 , hab ich mir die 200'er schon lange aus dem Gedächtnis gestrichen.
Aber damals war es ja wirklich ein Gesetz , alles über 200 ist ein "Schmiermerker", alleine deshalb weil Siemens mit ihren eigenen FB's da ziemlich rumhantiert hatte.

Und ich muss gestehen , das so manche S5-Krücken noch heute in mir schlummern, weil .."das hab ich immer so gemacht, und funktioniert",
ist aber nicht für S7 optimiert :rolleyes:.

Naja, aber teils durch das Forum und durch neue Kunden muss ich sagen, das ich in den letzten 2 jahren mehr über die S7 erfahren habe, als in den 10 Jahren davor.

Deshalb auch wenn ein wenig OT:
Einen herzlichen Dank an das Forum,
auch wenn ich manchmal Pickel an den Fingerspitzen kriege beim beantworten von dubiosen Treads. Aber ich bin halt ein "HB-Männchen", und bin immer wieder über die Geduld von einigen erstaunt.

Deshalb noch mal an alle, DANKE... weiter so.
 
Danke für den guten Tip

Hallo liebe S5/S7-Fangemeinde,
danke erstmal für den guten Tip, der erste sagte mir gar nix.
Die Idee mit dem Einlesen nach links schieben und zuaddieren war der Tip.
Ich wusste einfach nicht, wie ich anfangen sollte.
Das mit dem Schieben hab ich zwar noch nie gemacht, steht aber im SPS-Buch. Und den Tip mit dem "lesen müsste man können" kann man sich auch sparen. Klar steht alles irgendwo, aber erstens ist es immer eine Frage der Suchvariablen und wenn man nicht weiss wie's heißt, wonach soll man suchen? und andererseits gibts Grundlagen AWL-Bücher, die genau da aufhören, wo das hier losgeht.
Funktionen hab ich schon geschrieben und FB's mit DB funtkionieren auch schon. Viel weiter bin ich noch nicht.
Meine SPS-kenntnisse kommen aus 3 Monaten S5 in der Lehre vor 18 Jahren und jetzt seit 3 Monaten bissi S7.
Also bitte bitte habt's Gedult mit mir.
Danke und Gruß
 
Zurück
Oben