Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: Simples C-Skript

  1. #1
    Registriert seit
    28.07.2010
    Beiträge
    80
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi, da meine C-Programmier-Zeiten schon ne ganze Weile her sind muss ich euch bei diesem simplen C-Skript um Hilfe bitten ...

    Ich habe eine Maschine, welche mit 4 versch. Betriebszuständen (1, 2, 3 und 4) laufen kann. Wenn ich über das OP einen anderen Zustand auswähle, z.B. von 2 auf 1, möchte ich das 2 resettet wird. Ist es jetzt am günstigsten sowas in einem OP zu realisieren, oder sollte sowas besser in dem AG passieren?

    Könntet ihr mir einen Tipp geben, wie der entspr. Quelltext aussehen muss?
    Warum mit dem Teufel einlassen,
    ich brauche keine Untergebenen!
    Zitieren Zitieren Simples C-Skript  

  2. #2
    Registriert seit
    13.10.2007
    Beiträge
    12.024
    Danke
    2.784
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    Betriebsarten gehören in der Steuerung gegeneinander verriegelt.

    Was hast du den für Hardware, das dein OP mit C projektiert wird?
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  3. #3
    cyrix ist offline Benutzer
    Themenstarter
    Registriert seit
    28.07.2010
    Beiträge
    80
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Sütron TP151T ... ich muss zugeben (mein Fehler!), dass ich mir das noch nicht genauer angesehen habe und da dort Skript steht habe ich auf C geschlossen!

    hast du n Tipp für mich wie ich die gegeneinander verriegele und gleichzeitig so einstelle das es zu resetten geht?

    Ich sollte evtl. dazusagen das ich hier nicht mit Schaltern, sondern mit Tastern auf dem OP arbeiten möchte!
    Geändert von cyrix (23.11.2010 um 09:09 Uhr)
    Warum mit dem Teufel einlassen,
    ich brauche keine Untergebenen!

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    unabhängig von der Programmiersprache würde ich diese Verriegelung erstmal in der Visu zu machen versuchen. Hast du ein Event oder etwas ähnliches, dass durch den Druck der jeweiligen Schaltfläche ausgelößt wird ? Schreibst du mit allen 4 Schaltflächen in die gleiche Variable oder unterschiedliche ?

    Gruß
    Larry

  5. #5
    cyrix ist offline Benutzer
    Themenstarter
    Registriert seit
    28.07.2010
    Beiträge
    80
    Danke
    11
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Für jeden Modus gibt es ein eigenes Status-Bit und ich kann ein Skript auführen lassen, sobald die Taste gedrückt würd ... Allerdings scheitert es ja gerade an eben diesem ...

    also zu beidem "Ja" ...
    Warum mit dem Teufel einlassen,
    ich brauche keine Untergebenen!

  6. #6
    Registriert seit
    24.10.2010
    Beiträge
    9
    Danke
    6
    Erhielt 10 Danke für 9 Beiträge

    Standard

    Für den Fall, dass es in der SPS programmiert werden soll und es hier nicht 'off topic' ist:

    Betriebsarten eines Systems, bei dem nur eine aktiv sein darf programmiere ich am liebsten als Zeiger auf ein Bitfeld. Im ersten Teil des Programms setze ich die Nummer der Betriebsart in ein Merkerwort, dann lösche ich das ganze Bitfeld und schließlich schreibe ich eine logische 1 in das gerade aktive Betriebsmerkerbit.
    Wenn die Betriebsart wechselt so wird lediglich das "neue" Bit gesetzt, um das löschen des "alten" Bits braucht man sich nicht zu kümmern, da es beim Löschen des gesamten Bitfelds ohnehin gelöscht wurde.

    STEP 7 bietet zwar den Vorteil, dass die Bits und die Worte gemeinsam sind (z.B. jedes MW hat 16 Merker). Leider hat sich SIEMENS aber der von INTEL eingeführten Umkehrung von Highbyte und Lowbyte unterworfen, was die einfachste Sache der SPS Welt etwas undurchsichtig macht:

    Im Zentrum steht ein Wort in dem jeder Betriebsart eine Nummer zugeordnet wird. Das könnte z.B. auch jene gemeinsame Variable sein, in die alle 4 Buttons ("Radiobuttons?") geschrieben werden, wie Larry Laffer schreibt

    z.B. MW 8:

    1 = Hand
    2 = Halbautomatik
    3 = Vollautomatik
    4 = Einrichtbetrieb
    .. etc.

    Nun legt man die Betriebsartmerker in gleicher Ordnung an, allerdings im HighByte. Im Interesse eines fairen Programmierstils reserviert man die "freien" Bits des unteren Bytes Also z.B.:
    M 10.0 Reserve 8
    M 10.1 Reserve 9
    M 10.2 Reserve 10
    M 10.3 Reserve 11
    M 10.4 Reserve 12
    M 10.5 Reserve 13
    M 10.6 Reserve 14
    M 10.7 Reserve 15

    M 11.0 Reserve 0
    M 11.1 Hand
    M 11.2 Halbautomatik
    M 11.3 Vollautomatik
    M 11.4 Einrichtbetrieb
    .. etc.
    Zunächst schreibt man eine Sequenz mit Netzwerken in denen der jeweilige Betriebszustand gesetzt wird. Wenn Larry Laffer's "Radiobuttons" möglich sind, sinnvoll, wenn manche Betriebszustände nur unter besonderen Voraussetzungen erreichbar sein sollen (z.B. "Chargenende" nur aus Automatikbetrieb heraus). Besonders gut lesbar, wenn solche Verriegelungen in KOP oder FUP geschrieben werden.

    Da in einer Wortzelle nur eine Nummer stehen kann, steht am Ende dieser Sequenz fest, welches die aktive Nummer ist, also welche die aktive Betriebsart ist.
    Nun werden alle Betriebsmerker zurückgesetzt:
    L KW 0 //sämtliche 16 Bits des Akkus auf Null setzen
    T MB 10 //die 16 Nullen in das Bitfeld kopieren,
    //also alle Betriebsmerker löschen
    und gleich darauf eine log. 1 relativ auf den indizierten Betriebsmerker schreiben:
    L MW 8 //Betriebsartnummer als Zeiger in das Bitfeld der Betriebsartenmerker
    LAR1 //Adressregister 1 als Index für den folgenden Schreibzugriff
    SET //Bitakku (VKE) auf 'high' setzen
    = M[AR1, P#10.0]
    (*)
    Falls beim Umschalten der Betriebsart Zustände (z.B. Zeiten und Zähler) zurückgesetzt werden sollen, so kann direkt vor dem Rücksetzen der Betriebsmerker eine Sequenz eingefügt werden, die einen Wechsel der Betriebszustandsnummer erkennt und die Zustände löscht.


    Konsistenz:

    Die kurze Unterbrechung zwischen dem Löschen der Betriebsmerker und dem relativen Setzen des aktuellen Betriebszustandsmerkers werden von allen Programmen der gleichen Task (z.OB 1) nicht "bemerkt".
    Problematisch kann das bei parallel laufenden Tasks, wie z.B. Interrupt oder OB 30 werden.

    Falls man in diesen Parallelprogrammen überhaupt auf Betriebsmerker zugreifen muß kann man sich mit Spiegelmerkern behelfen:

    Das oben vorgeschlagene Merkerfeld von M 10.0 bis M 11.7 ist lediglich ein internes (Spiegel-) Merkerfeld. Das allgemeingültige Merkerfeld befindet sich z.B. von M 20.0 bis M 21.7.

    Direkt nach der letzten Anweisung im obigen Beispiel wird umkopiert:
    L MW 10
    T MW 20
    Schlägt nun ein Interrupt genau zwischen den beiden obigen Anweisungen zu so "sieht" er noch den alten Zustand der Betriebsmerker.
    Kommt der Interrupt während der Anweisung T MW 20, so muß er warten bis die Anweisung fertig ausgeführt ist und "sieht" dann den neuen Zustand der Betriebsmerker. Es wird aber nie geschehen, dass keiner der Betriebsmerker gesetzt ist, während des Interruptprogramms

    Der ganz große Vorteil dieser Programmiermethode ist, dass man vorwärts orientiert schreiben kann, und dass man die Netzwerke freihält von internen Querverriegelungen. Da z.B. nur entweder "Hand" oder "Auto" sein kann, sind gegenseitige Verriegelungen überflüssig. Ebenso kann nachträglich relativ einfach ein neuer Betriebszustand z.B. "Schichtende" eingefügt werden: Es genügt nur, das Netzwerk zu programmieren, das zu diesem Betriebszustand führt, und dann die entsprechende Nummer in MW8 schreibt.

    Ein besonderer Vorteil besteht für Freunde der S7 "SPL" Anweisung: Das Byte zur Steuerung der Sprungliste steht bereits in MB 9!


    Nun habe ich einige kryptische Dinge geschrieben, 'mal sehen ob überhaupt Interesse an einer weiteren Erläuterung besteht... *gähn* morgen ist ein Arbeitstag und ich muß in die Falle.





    bis demnächst,

    BFlat
    der bald flach liegt

    *sorry, mehrfache Leerzeichen oder gar ein TAB zur besseren Lesbarkeit der AWL läßt das Forum nicht zu
    Geändert von BFlat (08.12.2010 um 22:38 Uhr) Grund: Formatänderung bei Eintrag in den Thread
    Zitieren Zitieren Betriebsarten  

  7. Folgender Benutzer sagt Danke zu BFlat für den nützlichen Beitrag:


  8. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von BFlat Beitrag anzeigen
    *sorry, mehrfache Leerzeichen oder gar ein TAB zur besseren Lesbarkeit der AWL läßt das Forum nicht zu
    Dafür gibt es die [CODE]-Tags (im Beitrags-Editor mit dem #-Button einfügbar). Dann werden mehrfache Leerzeichen korrekt angezeigt und es wird automatisch die Schriftart Courier New verwendet, wo alle Zeichen gleich breit sind:
    Code:
          L     MW 10
          T     MW 20
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren [CODE] ... [/CODE]-Tags  

  9. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    BFlat (09.12.2010)

Ähnliche Themen

  1. VB-Skript/CSV/SQL
    Von c.wehn im Forum HMI
    Antworten: 10
    Letzter Beitrag: 01.02.2010, 09:23
  2. Skript um das OS zu ermitteln
    Von Black_Eagle im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 22.10.2008, 15:30
  3. VBS-Skript
    Von johnij im Forum HMI
    Antworten: 7
    Letzter Beitrag: 06.06.2008, 14:16
  4. VB - Skript
    Von tarzipan7 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 17.11.2007, 07:41
  5. Vb Skript
    Von Reblaus im Forum HMI
    Antworten: 6
    Letzter Beitrag: 23.10.2005, 11:26

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •