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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 26

Thema: Einschränkungen beim Programmieren

  1. #11
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von EinsNull Beitrag anzeigen
    Wie würde denn z.B. ein Baustein zum bitweisen rücksetzen in einem byte aussehen?
    Ich würde nicht groß über optimierungen nachdenken, sondern es so programmieren wie es die Funktionen hergeben. Da ich es in allen anderen Sprachen immer mit Schieben und Verodern mache, würde ich es in SCL so schreiben.
    Code:
    FUNCTION "SetBitsInByte" : Byte
    { S7_Optimized_Access := 'TRUE' }
    VERSION : 0.1
       VAR_INPUT 
          Bit0 : Bool;
          Bit1 : Bool;
          Bit2 : Bool;
          Bit3 : Bool;
          Bit4 : Bool;
          Bit5 : Bool;
          Bit6 : Bool;
          Bit7 : Bool;
       END_VAR
    
       VAR_TEMP 
          tmp : Byte;
       END_VAR
    
    BEGIN
    	#tmp := B#16#0;
    	#tmp := #tmp OR SHL(IN := BOOL_TO_BYTE(#Bit0), N := 0);
    	#tmp := #tmp OR SHL(IN := BOOL_TO_BYTE(#Bit1), N := 1);
    	#tmp := #tmp OR SHL(IN := BOOL_TO_BYTE(#Bit2), N := 2);
    	#tmp := #tmp OR SHL(IN := BOOL_TO_BYTE(#Bit3), N := 3);
    	#tmp := #tmp OR SHL(IN := BOOL_TO_BYTE(#Bit4), N := 4);
    	#tmp := #tmp OR SHL(IN := BOOL_TO_BYTE(#Bit5), N := 5);
    	#tmp := #tmp OR SHL(IN := BOOL_TO_BYTE(#Bit6), N := 6);
    	#tmp := #tmp OR SHL(IN := BOOL_TO_BYTE(#Bit7), N := 7);
    	#SetBitsInByte := #tmp;
    END_FUNCTION

  2. #12
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von EinsNull Beitrag anzeigen
    Aber wenn ich 2000 bools so umlegen soll, dann weiss ich noch nicht ganz was das ganze mit dem optimieren bringen soll.
    Ich würde mir ein anderes Konzept überlegen. Wer beschreibt denn diese 2000 Bits? Warum musst du von den 2000 Bits nochmal ein Zustand generieren? Das wird doch bestimmt für eine Sammelstörmeldung oder ähnliches benötigt. Ich habe sowas noch nie benötigt, weil ich einen Baustein zur Störerfassung habe, welcher die Funktion "Sammelstörmeldung" mit beinhaltet. Dann entfällt das Problem des späteren Sammelns von unstrukturierten Einzelbits ganz einfach.

  3. #13
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.716
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Wenn ich das richtig getestet habe, geht das mit AT z.Bsp. nicht von 32 Einzel-Bits auf ein Word, sondern nur anders herum?
    Da musst eher Du mir weiter helfen:

    Wenn Du 32 Einzelbit in einem DB hast, kannst Du doch sicher eine Struktur drumherum legen und auf diese kannst Du dann die Sicht machen, oder?
    Wenn die Bits alle von irgendwo anders herkommen, sollte man sich m.M.n. Gedanken um eine andere Strukturgestaltung machen.

    Aber insgesamt fehlt mir da als Hobby-Programmierer wahrscheinlich der Gesamteinblick, was da sinnvoll machbar ist und was nicht.



    Zitat Zitat von EinsNull Beitrag anzeigen
    Leider geht das mit AT nur in FBs, FCs dürfen nicht optimiert sein.
    Ist ja auch schwierig beim FC, die Remanenz auf "Im IDB setzen" einzustellen, wenn man keinen IDB hat.
    Ich find' das bei Siemens auch mit "Codebausteinen" blöd formuliert, da ja außer FBs keine anderen Codebausteine in Frage für diese Einstellung kommen, oder?

  4. #14
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    @hucki
    Ist schon geklärt (siehe oben), man muß eben eine Struktur nutzen. Das ist bei meinem 100 Jahre alten DB für Störmeldungen nicht der Fall, war nie nötig. Nun aber schon eher.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #15
    Registriert seit
    04.06.2013
    Ort
    Falkenstein/ Vogtland
    Beiträge
    42
    Danke
    6
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Ich würde mir ein anderes Konzept überlegen. Wer beschreibt denn diese 2000 Bits? Warum musst du von den 2000 Bits nochmal ein Zustand generieren? Das wird doch bestimmt für eine Sammelstörmeldung oder ähnliches benötigt. Ich habe sowas noch nie benötigt, weil ich einen Baustein zur Störerfassung habe, welcher die Funktion "Sammelstörmeldung" mit beinhaltet. Dann entfällt das Problem des späteren Sammelns von unstrukturierten Einzelbits ganz einfach.
    Man muss das im Ganzen sehen. Ja es handelt sich um meine Störmeldungen. Beschrieben werden diese in meinen einzelnen Fehlerbausteinen. Damit dort und in der Visu eine 1:1 Zusammgehörigkeit vorhanden ist, Möchte ich das eben als Bool haben (hat ja auch den Vorteil dass ich im Kommentar den Fehlertext rein schreiben kann.
    Aber die Visu verlangt nun mal ein Word als Trigger. Das passt nicht so ganz zusammen.

    Mal so übern Tellerrand spionieren: Wie setzt du Quittierpflichtige Bitmeldungen zurück?
    Geändert von EinsNull (17.02.2015 um 21:33 Uhr)
    „Whatever can go wrong, will go wrong.“ Edward A. Murphy jr.„Alles, was schiefgehen kann, wird auch schiefgehen“

  6. #16
    Registriert seit
    04.06.2013
    Ort
    Falkenstein/ Vogtland
    Beiträge
    42
    Danke
    6
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Ist ja auch schwierig beim FC, die Remanenz auf "Im IDB setzen" einzustellen, wenn man keinen IDB hat.
    Ich find' das bei Siemens auch mit "Codebausteinen" blöd formuliert, da ja außer FBs keine anderen Codebausteine in Frage für diese Einstellung kommen, oder?
    Eben!

    Aber wieso muss "AT" gespeichert werden?
    „Whatever can go wrong, will go wrong.“ Edward A. Murphy jr.„Alles, was schiefgehen kann, wird auch schiefgehen“

  7. #17
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Ich seh schon wir wollen das Selbe machen.
    AT ist hier auch keine wirkliche Hilfe, das gibt einen Overkill, den ich mir ja genau sparen möchte.

    Meine momentane Lösung für die 1214: Optimierung aus und Peek_DWORD in einer Schleife.

    Etwas so:

    Code:
    //zum Start alles auf Null
    #Signal_is_True := False;
    
    
    //Schleife bilden
    FOR #Count := 0 TO #CountDWord DO
        
        #DataDWord := PEEK_DWORD(area := 16#84, dbNumber := #DBNumber, byteOffset := (#Count * 4));
        IF #DataDWord > 0 THEN
            #Signal_is_True := True;
            EXIT;
        END_IF;
        
    END_FOR;
    Ich halte diese Optimierung irgendwie für ein totes Pferd, man muß es irgendwann doch für einen Baustein ausschelten und so wie ich es hier im Forum gelesen habe heißt es, ein nicht optimierter Baustein und es wird gar nicht mehr optimiert zugegriffen. Ob das so stimmt, kann ich nicht sagen, wäre aber schlimm.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #18
    Registriert seit
    04.06.2013
    Ort
    Falkenstein/ Vogtland
    Beiträge
    42
    Danke
    6
    Erhielt 2 Danke für 2 Beiträge

    Standard



    Weil sonst könnte man sich den Spass schenken, und kann wieder mit den guten alten Adressen arbeiten. Das lief schon mal.
    „Whatever can go wrong, will go wrong.“ Edward A. Murphy jr.„Alles, was schiefgehen kann, wird auch schiefgehen“

  9. #19
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.240 Danke für 973 Beiträge

    Standard

    Wenn es hier "nur" um Bit-Störmeldungen geht, dann schaut euch doch mal die Alarmfunktion von ner 1500er an.
    Damit wird vieles richtig einfacher.

    Gelegentlich muss man halt eben alte Gewohnheiten über Bord schmeissen.
    Ich hab mir vor ein paar Jahren angewöhnt vollsymbolisch zu programmieren.
    War anfangs richtig nervig, da eben eine Schleife über ein paar DW absolut programmiert einfach schnell gemacht ist.
    Wenn du es symbolisch machst, dann brauchst du eben UDTs, Strukturen, Arrays ... und oft auch SCL mit AT.
    Wenn ich jetzt testweise alte Projekte mit TIA migriere, dann sieht man sehr schnell, den Unterschied.
    Aktuelle Programme machen fast keine Probleme ... Projekte von vor 10 Jahren schmeissen nur noch Fehlermeldungen und Warnungen.

    Wir steigen jetzt um von 300 -> 1500 und da müssen eben einige Dinge überarbeitet werden.
    Aber eigentlich finde ich das nicht so schlimm. Und manches macht sogar Spass.

    Gruß
    Dieter

  10. #20
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Blockmove Beitrag anzeigen
    Wenn es hier "nur" um Bit-Störmeldungen geht, dann schaut euch doch mal die Alarmfunktion von ner 1500er an.
    Damit wird vieles richtig einfacher.

    Gelegentlich muss man halt eben alte Gewohnheiten über Bord schmeissen.
    Ich hab mir vor ein paar Jahren angewöhnt vollsymbolisch zu programmieren.
    War anfangs richtig nervig, da eben eine Schleife über ein paar DW absolut programmiert einfach schnell gemacht ist.
    Wenn du es symbolisch machst, dann brauchst du eben UDTs, Strukturen, Arrays ... und oft auch SCL mit AT.
    Wenn ich jetzt testweise alte Projekte mit TIA migriere, dann sieht man sehr schnell, den Unterschied.
    Aktuelle Programme machen fast keine Probleme ... Projekte von vor 10 Jahren schmeissen nur noch Fehlermeldungen und Warnungen.

    Wir steigen jetzt um von 300 -> 1500 und da müssen eben einige Dinge überarbeitet werden.
    Aber eigentlich finde ich das nicht so schlimm. Und manches macht sogar Spass.

    Gruß
    Dieter
    Ich hab gerade eine 1214 am Wicke, k.A., ob die das kann.
    Was genau meinst du mit den Alarmfunktionen der 1500-er, das was bei der 300-er die Alarm-Bausteine machten?
    Da bin ich mit immer unsicher gewesen, wahrscheinlich bin ich zu festgefahren. Wenn mein Programm einen Alarm auswirft, dann sitzt der in meinem Programm als Ausgabe aus einem Baustein (Motor, Error etc.) und will dort auch quittiert werden. Nicht im HMI, denn das über die Alarm-Bausteine mitzubekommen, das hab ich noch nirgends so richtig gesehen. Außerdem kann man dann nur noch ausschließlich die Siemens-Panels nutzen, macht sich also noch abhängiger. Ich fand das Bitmeldeverfahren für meine Zwecke immer sehr gut, aber vielleicht zeigst du mit ja, das es mit der 1500-er besser geht. Ich werde mit die Bausteine auf jeden Fall mal ansehen und mal suchen, was die 1200-er da bietet.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. TIA S7-1200: Hilfe beim Programmieren
    Von myfergy133 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.11.2014, 12:53
  2. Step 7 Problem beim programmieren
    Von SvBrinki im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 08.10.2014, 13:25
  3. Systematik beim Programmieren...
    Von anne im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 12.07.2011, 19:59
  4. Hilfe beim Programmieren (CAN-Bus)
    Von Dennis27 im Forum Feldbusse
    Antworten: 0
    Letzter Beitrag: 14.10.2010, 11:14
  5. Hilfe beim programmieren
    Von Shierasse im Forum CODESYS und IEC61131
    Antworten: 4
    Letzter Beitrag: 14.12.2009, 07:46

Lesezeichen

Berechtigungen

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