SPS-Programmierung / uC Programmierung in C

Gast #2495254
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
Gast #2495279
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ß
Gast #2495284
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
Gast #2495424
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.
Gast #2495505
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
#2495643
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
Gast #2495650
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren