Hallo Leute, ich habe schon oft mal was mit einer Siemens S7 programmiert. Dabei gibt es ja den großen Luxus, daß ich Werte ZUWEISEN kann aber auch Werte SETZEN kann. = -> Wert zuweisen S -> Wert setzen Der Unterschied ist wohl jedem hier klar. Da ich momentan einen uC in C programmiere, stelle ich mir gerade die Frage ob man das in C auch machen kann. Denn wenn ich einer boolschen Variablen einen Wert zuweise, z.B. Schalter=1; ist die Variable eigentlich ja automatisch gesetzt und ich muß sie explizit rücksetzen. Für ein paar Infos wäre ich euch sehr dankbar und verbleibe hochachtungsvoll das Schweinsleberwurstbrot
> = -> Wert zuweisen > S -> Wert setzen > > Der Unterschied ist wohl jedem hier klar. Nein. Natuerlich nicht.
Hi mir ist der Unterschied nicht klar. Erklär mal den Unterschied zwischen setzen und zuweisen im Kontext einer SPS (AWL, ST?) Matthias
Schweinsleberwurstbrot schrieb: > es ja den großen Luxus, daß ich Werte ZUWEISEN kann aber auch Werte > SETZEN kann. > > = -> Wert zuweisen > S -> Wert setzen > > Der Unterschied ist wohl jedem hier klar. Eigentlich nicht. Wenn ich eine Schublade aufmache und eine blaue Socke reingebe, dann ist danach eine blauen Socke (= der Wert) in der Schublade (= die Variable).
Beim Setzen und Rücksetzen geht es um eine Zustandsänderung die aus einer Verknüpfung die wahr ist folgt. Ist die Verknüpfung war wird das Bit oder was auch immer gesetzt oder zurückgesetzt. Beim Zuweisen wird der Wert der Verknüpfung einem Merker o.ä. zugewiesen. http://www.tu-harburg.de/et3/students/Skripte_ss11/V744.pdf -> 2.2.4.2
Das geht schon auch in C. Du musst nur einen Logischen Ausdruck verwenden der entsprechend oft aktualisiert wird. Also so etwas wie: x = (Eingang == 1) oder dergleichen. Alternativ könnte man das ganze auch mit einer Funktion lösen, die Werte zurückgibt. Gruß
Im Endeffekt ist es der Unterschied zwischen : if(A && B)SETBIT(C,0); if(A && B)RESETBIT(C,0); und C.0 = A && B;
Soweit ich das noch weis ist die Zuweisung der aktulle Wert (z.B. eines Eingangs). Dagegen ist das Setzen ein FF und kann nur durch das Rücksetzen gelöscht werden. http://www.brix.de/elektrik/sps/sps-grundlagen.html#selbsthaltung_statisch Schweinsleberwurstbrot schrieb: > Denn wenn ich einer boolschen Variablen einen Wert zuweise, z.B. > > Schalter=1; > > ist die Variable eigentlich ja automatisch gesetzt und ich muß sie > explizit rücksetzen. Genauso wie beim Setzten bei einer SPS. Es sei denn Du nimmst immer den aktuellen Registerwert des Eingangs, dann hast Du eine Zuweisung (also immer den aktuellen Wert). Grüße
Der Neue schrieb: > Soweit ich das noch weis ist die Zuweisung der aktulle Wert (z.B. eines > Eingangs). Dagegen ist das Setzen ein FF und kann nur durch das > Rücksetzen gelöscht werden. Das mit dem Rücksetzen ist so nicht ganz Richtig. Der Wert kann durchaus auch noch mit einer Zuweisung überschrieben werden, ist aber extremst unsauber.
Matthias Zöllner schrieb: > Das mit dem Rücksetzen ist so nicht ganz Richtig. Der Wert kann durchaus > auch noch mit einer Zuweisung überschrieben werden, ist aber extremst > unsauber. Ok...gut zu wissen, danke.
Das grosse unterschied nach meine Gedanke ist das folgende : Bei ein SPS gibt eine festgelegte Ablauf : Eingangen Einlezen in Speicher, Program ausfuhren, Ausgangen setzen. Ein komplette Programablauf ist in ms Bereich. Bei ein µ controller kanst du das selbst entscheiden, wo und wen in ihre Ablauf Eingangen gelesen und Ausgangen gesetzt werden. Und ein code regel ist dan in µs oder ns gelaufen. Daneben hat den µ schon relatif fiel Periferie (ADC, DAC, USART, SPI, I2C,...)wodas mit den SPS jeden mal eine Karte extra benotigt wird. Die Sprache C hat sicher mehr Moglichkeiten dan AWL, und ist besser geignet für Data verarbeitung.
RP6Conrad schrieb: > Das grosse unterschied nach meine Gedanke ist das folgende : Bei ein SPS > ... Wie ist es bloß möglich, so viele Fehler in 10 Zeilen unterzubringen ...
Trotz der vielen Fehler ist dies völlig korrekt. Und anscheinend hat er es um einiges mehr drauf als du.... Dein Komma sitzt falsch... "Data verarbeitung" läasst auf engl Sprachgebrauch schließen
DSsS schrieb: > Wie ist es bloß möglich, so viele Fehler in 10 Zeilen unterzubringen ... Ist wohl ein Engländer oder Niederländer ?? Seine Erklärung stimmt ja auch, hat aber nichts mit der Frage zu tun. Hier noch mein Senf zum Thema: Bei einer SPS bedeutet: Setzen => Ein Bit auf TRUE setzen, egal wie sein Zustand vorher war Das Bit ist hinterher auf jeden Fall TRUE Rücksetzen => Ein Bit auf FALSE setzen, egal wie sein Zustand vorher war Das Bit ist hinterher auf jeden Fall FALSE Wert zuweisen => Ein Bit gleich setzen zu einem anderen Wert Das Bit kann hinterher TRUE oder auch FALSE sein, je nach dem wie der Wert seiner "Mutter" ist. Das wurde hier schon angedeutet: Autor: Dennis Heynlein (c-logic) Datum: 10.01.2012 21:24 Allerdings ist nicht unbedingt eine vorherige Verknüpfung notwendig. Beides kann auch einfach so, also ohne vorherige Verknüpfung gemacht werden (ja ich weiss, eine SPS möchte IMMER auf ein VKE reagieren) (ob das Sinn macht ist wieder etwas anderes). Schweinsleberwurstbrot schrieb: > denn wenn ich einer boolschen Variablen einen Wert zuweise, z.B. > Schalter=1; > ist die Variable eigentlich ja automatisch gesetzt und ich muß sie > explizit rücksetzen. Wenn man natürlich eine Konstante zuweist, dann ist das Ergebnis leicht vorhersagbar. Der Fragesteller sollte sich wohl lieber den Unterschied zwischen Konstanten und Variablen klar machen. MfG Ulli-B
Hi Na ja, so ganz richtig ist keine Erklärung. Das Setzen eines Bits kann mit 2 verschiedenen Arten ausgeführt werden. Mal ein paar einfache Beispiele und da ich C ncht beherrsche, mal in Assembler:
1 | LDS Reg_A, 0b11110000 |
2 | ANDI Reg_A, 0b10101111 |
3 | STS Ergebniss, Reg_A |
Bei diesem 2 Zeiler ist es deutlich, es gibt in den Und-verknüpften Bits nur dann eine "1", wenn die Bits an den Stellen übereinstimmen. Ist die Und-Bedingung nicht mehr erfüllt, ist automatisch auch das Bit an der entsprechenden Stelle "0"
1 | LDS Reg_A, 0b11110000 |
2 | ANDI Reg_A, 0b10000000 |
3 | BREQ weiter |
4 | STS Ergebniss, Reg_A |
5 | Weiter: |
6 | ..... |
Beim 2. Beispiel bleibt das Bit gesetzt, auch wenn die Und-Bedngung nicht mehr gegeben ist, da die Variable "Ergebniss" nicht zugewiesen wird. In Basic würde das etwa so lauten
1 | If a and b then |
2 | C = true |
3 | end If |
C wird nicht automatisch "false", wenn die Und-Bedingung nicht mehr erfüllt ist
1 | If a and b then |
2 | C = true |
3 | else C = False |
4 | end If |
Anders bei dieser Anweisung. So könnte man Ein Bit aus einer logischen Verknüpfung bilden oder aber eine Setz- bzw. Löschbedingung, um eine Speicherfunktion zu bekommen. Gruß oldmax
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.