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

Results 1 to 8 of 8

Thread: SCL in einer Schleife Bitweise ein Byte abfragen

  1. #1
    Join Date
    30.11.2008
    Location
    Baesweiler
    Posts
    984
    Danke
    309
    Erhielt 162 Danke für 112 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Zusammen,

    ich muß ja, gezwungen durch meine Kunden, meine Programme in der Regel in FUP oder KOP
    schreiben. Jetzt habe ich mal ein Problem, wo ich dachte da wäre die Verwendung von SCL ideal,
    aber so einfach wie ich mir das dachte ist es wohl nicht.

    Generell geht es darum:

    Ich habe einen FB, welcher eine Konfiguration als DINT einliest, und diese Konfiguration mit einem Doppelwort
    Eingänge vergleicht. Dabei muss aber über die Konfiguration nur die Eingänge ausgewertet werden die auch angewählt sind.

    Das sieht in KOP dann so aus:

    Sensorauswertung_einzeln.jpg

    Ich habe das Netzwerk auch schon mal nach SCL umgesetzt.

    Jetzt könnte ich das ganze natürlich noch 7 mal kopieren und wäre dann durch,
    ich dachte eine Schleife wäre da aber sinnvoller. (Das ganze muss am Ende für 64 Eingänge gemacht werden, 7 ist jetzt nur zur Vereinfachung)


    Sensorauswertung_schleife.jpg

    Irgendwie war ich der Meinung ist könnte jetzt die #i an an meine Variablen packen, und spare mir das ganze getippe....
    Funktioniert aber nicht. Hat jemand eine Idee was ich da jetzt machen müsste?
    gruss Markus
    Reply With Quote Reply With Quote Answered: SCL in einer Schleife Bitweise ein Byte abfragen  

  2. "
    Quote Originally Posted by mnuesser View Post
    Attachment 44525
    Irgendwie war ich der Meinung ist könnte jetzt die #i an an meine Variablen packen, und spare mir das ganze getippe....
    Funktioniert aber nicht. Hat jemand eine Idee was ich da jetzt machen müsste?
    Vergiss es, indizierter Slice-Zugriff geht nicht!
    Du musst deine Variable vorher in ein Bool-Array umkopieren, dann kannst du mit Indizes arbeiten. Oben ist aber schon gezeigt wie es einfacher geht."


  3. #2
    Join Date
    08.04.2016
    Location
    4040 Linz, Österreich
    Posts
    418
    Danke
    36
    Erhielt 141 Danke für 112 Beiträge

    Default

    Zuerst mal Off-Topic ein paar Dinge zu Logik in SCL - weil hier brennt meiner Ansicht nach der HUT.

    1. Boolsche Logik:
    Code:
    (A AND B) OR (NOT A)
    // entspricht
    (B OR (NOT A))
    2. IF-Statements
    In SCL IF-Statements (und das ist in allen Hochsprachen so) wird niemals auf = true oder = false abgefragt
    Code:
    //Böse:
    IF (A = true) THEN
    //Gut:
    IF (A) THEN
    
    //Böse:
    IF (A = false) THEN
    //Gut:
    IF (NOT A) THEN
    3. IF ... THEN ohne ELSE
    Dies ist in KOP/FUP-Notation vergleichbar mit einer S-Verknüpfung.
    Code:
    IF (A AND B) OR (NOT A) THEN
      C := true;
    END_IF;
    endet mit darin, dass C immer true sein wird. Entweder initialisierst du den Speicher, wo C drinne steht mit 0, oder
    a. du hängst ein ELSE an
    Code:
    IF (A AND B) OR (NOT A) THEN
      C := true;
    ELSE
      C := false;
    END_IF;
    b. du machst eine echte Logik-Verknüpfung in SCL
    Code:
    C := (A AND B) OR (NOT A);
    oder kürzer
    Code:
    C := B OR (NOT A);

  4. Folgende 3 Benutzer sagen Danke zu maxder2te für den nützlichen Beitrag:

    mnuesser (19.02.2019),PN/DP (19.02.2019),Stoky (19.02.2019)

  5. #3
    Join Date
    08.04.2016
    Location
    4040 Linz, Österreich
    Posts
    418
    Danke
    36
    Erhielt 141 Danke für 112 Beiträge

    Default

    Was du eigentlich machen willst, lässt sich Problemlos Doppelwortweise oder Quadwortweise abbilden.

    32 Eingänge am Stück

    Deklaration:
    Code:
    Eingaenge : DWORD;
    Konfiguration : DINT;
    AuswertungKonf1 : DWORD;
    Code:
    Code:
    AuswertungKonf1 := Eingaenge OR (NOT DINT_TO_DWORD(Konfiguration));

    Alle 64 Eingänge

    Deklaration:
    Code:
    Eingaenge : LWORD;
    Konfiguration : LINT;
    AuswertungKonf1 : LWORD;
    Code:
    Code:
    AuswertungKonf1 := Eingaenge OR (NOT LINT_TO_LWORD(Konfiguration));

    Diese Wortweise Logik ist obrigens mit KOP oder FUP auch kein Problem, man benötigt 2 Temp-Variablen.
    Last edited by maxder2te; 19.02.2019 at 09:36.

  6. Folgender Benutzer sagt Danke zu maxder2te für den nützlichen Beitrag:

    mnuesser (19.02.2019)

  7. #4
    Join Date
    08.04.2016
    Location
    4040 Linz, Österreich
    Posts
    418
    Danke
    36
    Erhielt 141 Danke für 112 Beiträge

    Default

    Quote Originally Posted by mnuesser View Post
    Sensorauswertung_schleife.jpg
    Irgendwie war ich der Meinung ist könnte jetzt die #i an an meine Variablen packen, und spare mir das ganze getippe....
    Funktioniert aber nicht. Hat jemand eine Idee was ich da jetzt machen müsste?
    Vergiss es, indizierter Slice-Zugriff geht nicht!
    Du musst deine Variable vorher in ein Bool-Array umkopieren, dann kannst du mit Indizes arbeiten. Oben ist aber schon gezeigt wie es einfacher geht.

  8. #5
    Join Date
    30.11.2008
    Location
    Baesweiler
    Posts
    984
    Danke
    309
    Erhielt 162 Danke für 112 Beiträge

    Default

    Danke für die Nachhilfe
    gruss Markus

  9. Folgender Benutzer sagt Danke zu mnuesser für den nützlichen Beitrag:

    maxder2te (20.02.2019)

  10. #6
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,359
    Danke
    422
    Erhielt 2,517 Danke für 2,095 Beiträge

    Default

    @Markus:
    Beschreib doch mal in Worten (und nicht in Programmcode) genau, was passieren soll.
    Ich denke, es gibt da schon eine elegante SCL-Lösung ...

    Gruß
    Larry

  11. #7
    Join Date
    30.11.2008
    Location
    Baesweiler
    Posts
    984
    Danke
    309
    Erhielt 162 Danke für 112 Beiträge

    Default

    @Larry: eigentlich hat maxder2te es schon treffend beschrieben:

    Vergiss es, indizierter Slice-Zugriff geht nicht!
    Du musst deine Variable vorher in ein Bool-Array umkopieren, dann kannst du mit Indizes arbeiten. Oben ist aber schon gezeigt wie es einfacher geht.
    Denn genau dass wollte ich machen , er hat ja sogar den Weg beschrieben den ich nehmen könnte, wenn ich trotzdem so arbeiten möchte.

    Den SCL Code hatte ich nur zur Darstellung meines Problemes geschrieben, dass der nicht ganz richtig war, weil mir das ELSE fehlte hab ich glatt übersehen

    Prinzipiell hat max mir mein Problem auch schon vereinfacht gelöst, durch den Wortweisen vergleich den er vorgeschlagen hat
    gruss Markus

  12. Folgender Benutzer sagt Danke zu mnuesser für den nützlichen Beitrag:

    maxder2te (19.02.2019)

  13. #8
    Join Date
    30.11.2008
    Location
    Baesweiler
    Posts
    984
    Danke
    309
    Erhielt 162 Danke für 112 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Worum es eigentlich geht:
    Ich habe in der HMI eine Matrix aufgebaut mit den vorhandenen Eingängen, und dazu eine Matrix zum Auswählen, welche Eingänge für eine Funktion abgefragt werden müssen.
    Insgesamt 16 Funktionen und entsprechende Konfigurationen. Es können in den 32 Eingängen auch welche gesetzt sein, die aber nicht konfiguriert sind für diese Funktion, die darf ich dann halt nicht
    auswerten. Am Ende kommt ein Summensignal : "Sensoren ok" aus meinem Baustein und damit arbeite ich weiter...
    gruss Markus

Similar Threads

  1. TIA Byte zugriff eines DInt innerhalb einer FOR schleife
    By Julian0815 in forum Simatic
    Replies: 9
    Last Post: 17.07.2017, 16:13
  2. TIA bitweise auf ein byte in einem db zugreifen
    By Lukas_Ink in forum Simatic
    Replies: 9
    Last Post: 02.02.2016, 13:38
  3. Replies: 6
    Last Post: 16.12.2015, 15:57
  4. Elau: Ein Byte, bitweise in ein Array schreiben?
    By Trashman in forum CODESYS und IEC61131
    Replies: 4
    Last Post: 24.10.2007, 19:27
  5. Replies: 0
    Last Post: 15.02.2007, 16:00

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •