SPS-Programmierung / uC Programmierung in C

Gast #2495254
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
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
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.
Gast
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
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
Gast
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.