Forum: Mikrocontroller und Digitale Elektronik SPS-Programmierung / uC Programmierung in C


von Schweinsleberwurstbrot (Gast)


Lesenswert?

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

von Purzel H. (hacky)


Lesenswert?

> = -> Wert zuweisen
> S -> Wert setzen
>
> Der Unterschied ist wohl jedem hier klar.

Nein. Natuerlich nicht.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

mir ist der Unterschied nicht klar. Erklär mal den Unterschied zwischen 
setzen und zuweisen im Kontext einer SPS (AWL, ST?)

Matthias

von Karl H. (kbuchegg)


Lesenswert?

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).

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

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

von Bierbruder (Gast)


Lesenswert?

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ß

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Im Endeffekt ist es der Unterschied zwischen :

if(A && B)SETBIT(C,0);
if(A && B)RESETBIT(C,0);

und

C.0 = A && B;

von Der Neue (Gast)


Lesenswert?

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

von M. Z. (bierbruder)


Lesenswert?

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.

von Der Neue (Gast)


Lesenswert?

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.

von RP6Conrad (Gast)


Lesenswert?

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.

von DSsS (Gast)


Lesenswert?

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 ...

von Jordan (Gast)


Lesenswert?

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

von Ulli B. (ulli-b)


Lesenswert?

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

von oldmax (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.