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

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 51

Thema: Dezimalzahl in Datenbaustein laden

  1. #21
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Moin Alexus85,

    jetzt kann man mit Deiner genauen Aufgabenbeschreibung in Beitrag #12 was anfangen.
    Leider habe ich jetzt nicht die Zeit zum helfen, doch vielleicht hilft Dir mittlerweile jemand anders ...

    Harald
    als lösung für mehrere texte würde mir aufbauend auf der schleifenlösung ein meldungspuffer einfallen, der indirekt übers AR2 adressiert wird und alle geänderten zustände einträgt ... nach dem senden an den drucker wird der puffer dann wieder gelöscht...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  2. #22
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Mordor_FRI Beitrag anzeigen
    Sprünge wurden nicht sauber ausgeführt etc.
    ich behaupte: die sprünge waren nicht richtig terminiert! das ein sprung nicht ausgeführt wird obwohl z.b. vke=1 ist mir noch nie untergekommen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #23
    Registriert seit
    02.08.2007
    Ort
    BW im Ostalbkreis
    Beiträge
    249
    Danke
    32
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Zitat von Mordor_FRI
    Sprünge wurden nicht sauber ausgeführt etc.

    Hi,

    #Offtopicmodus AN
    Ja das ist dann der Fall wenn ein Bit querliegt und nicht sauber durch die Leitung geht. Oder das Bit hat den Signalzustand 0,5 angenommen.
    #Offtopicmodus AUS

    Gruß

    PhilippL

    @all: Sorry mußte einfach sein

  4. #24
    Registriert seit
    20.10.2009
    Beiträge
    30
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @vierlagig

    Code:
    *
    //Adressregister initialisieren
          LAR1  P#0.0
          AUF   DB [#iDBNo]
    //Schleife vorbereiten
          L     200
    next: T     #iLoopCounter
    //Eingang Abfragen
          U     E [AR1,P#0.0]
          FP    DBX[AR1,P#0.0]
          SPBN  nich
    //Nummer berechnen und ausgeben
          L     -1
          L     #iLoopCounter
          *I    
          +     200
          T     #iNumber
    //Adressregister erhöhen und solange Schleifenzähler > 0 zurück zu next
    nich: +AR1  P#0.1
          L     #iLoopCounter
          LOOP  next
    Also ich hab mal den quellcode eigegeben und versucht zu verstehen was da gemacht wird. Ganz bin ich nicht durchgestiegen, aber auf alle fälle hab ich nicht das gewünschte Ergebnis. -> Er zähl mir nämlich im OB die einzelnen Eingänge zusammen. Ich brauch ja eine Anzeige von genau dem Eingang der sich geändert hat.

    Ich hab das auch schon mit folgendem versucht zu lösen:

    Code:
    L MW 0
    L EW 0
    XOW 
    L EW 0
    UW
    T DB10.DBW0
    Das ganze eig. mit DWORD. Damit kann ich sehen wo im EW 0 eine postive Flanke vorkam und mir das in den DB schreiben lassen.
    ABER -> er rechnet ja von binär in dezimal um

    E 0.1 : 0000 0001 = 1 -> passt!
    E 0.2 : 0000 0010 = 2 -> passt!
    E 0.3 : 0000 0100 = 4 -> game over!

    Noch hab ich nix passendes gefunden. Ich hoffe ihr habt die entscheidende Idee für die Lösung meines Problems.

  5. #25
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Zitat Zitat von Alexus85 Beitrag anzeigen
    Also ich hab mal den quellcode eigegeben und versucht zu verstehen was da gemacht wird. Ganz bin ich nicht durchgestiegen, aber auf alle fälle hab ich nicht das gewünschte Ergebnis. -> Er zähl mir nämlich im OB die einzelnen Eingänge zusammen. Ich brauch ja eine Anzeige von genau dem Eingang der sich geändert hat.
    Irgendwas machst Du falsch. Bei mir funktioniert's.

    Hast Du vielleicht eine der Lokalvariablen verkehrt deklariert?
    Gruß
    Michael

  6. Folgender Benutzer sagt Danke zu M-Ott für den nützlichen Beitrag:

    Alexus85 (05.10.2010)

  7. #26
    Registriert seit
    20.10.2009
    Beiträge
    30
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von M-Ott Beitrag anzeigen
    Irgendwas machst Du falsch. Bei mir funktioniert's.

    Hast Du vielleicht eine der Lokalvariablen verkehrt deklariert?
    Ich bin davon ausgegangen, dass " i# " für integervariable steht.
    Da hat gleich garnichts funktioniert. Erst alls ich aus den Lokalvariablen allgemein gültige (MW...) gemacht hab hats wenigstens soweit funktioniert, dass er vernünftige Zahlen in den DB schrieb.

  8. #27
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Code:
    *
    DATA_BLOCK DB 2
    TITLE =
    VERSION : 0.1
    
    
      STRUCT 	
       aFlag : ARRAY  [0 .. 119 ] OF BOOL ;	
      END_STRUCT ;	
    BEGIN 
    END_DATA_BLOCK
    
    FUNCTION FC 6 : INT
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      iInDBNo : INT ;	
      iInFirstByte : INT ;	
      iNumberOfIns : INT ;	
    END_VAR
    VAR_TEMP
      iDbNo : INT ;	
      iLoopCounter : INT ;	
      iNumber : INT ;
      dAR1Temp : DWORD ;
      dAR2Temp : DWORD ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
    	  TAR1  #dAR1Temp
    	  TAR2  #dAR2Temp
    
          L     #iInDBNo; 
          T     #iDbNo; 
    
    //Adressregister initialisieren
          L     #iInFirstByte; 
          SLD   3; 
          LAR1  ; 
          LAR2  P#0.0; 
          AUF   DB [#iDbNo]; 
    //Schleife vorbereiten
          L     #iNumberOfIns; 
    next: T     #iLoopCounter; 
    //Eingang Abfragen
          U     E [AR1,P#0.0]; 
          FP    DBX [AR2,P#0.0]; 
          SPBN  nich; 
    //Nummer berechnen und ausgeben
          L     -1; 
          L     #iLoopCounter; 
          *I    ; 
          L     #iNumberOfIns; 
          +I    ; 
          T     #iNumber; 
    //Adressregister erhöhen und solange Schleifenzähler > 0 zurück zu next
    nich: +AR1  P#0.1; 
          +AR2  P#0.1; 
          L     #iLoopCounter; 
          LOOP  next; 
          
          LAR1  #dAR1Temp
    	  LAR2  #dAR2Temp
    
          L     #iNumber; 
          T     #RET_VAL; 
    
    END_FUNCTION
    
    ORGANIZATION_BLOCK OB 1
    TITLE = "Main Program Sweep (Cycle)"
    VERSION : 0.1
    
    
    VAR_TEMP
      OB1_EV_CLASS : BYTE ;	//Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
      OB1_SCAN_1 : BYTE ;	//1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
      OB1_PRIORITY : BYTE ;	//Priority of OB Execution
      OB1_OB_NUMBR : BYTE ;	//1 (Organization block 1, OB1)
      OB1_RESERVED_1 : BYTE ;	//Reserved for system
      OB1_RESERVED_2 : BYTE ;	//Reserved for system
      OB1_PREV_CYCLE : INT ;	//Cycle time of previous OB1 scan (milliseconds)
      OB1_MIN_CYCLE : INT ;	//Minimum cycle time of OB1 (milliseconds)
      OB1_MAX_CYCLE : INT ;	//Maximum cycle time of OB1 (milliseconds)
      OB1_DATE_TIME : DATE_AND_TIME ;	//Date and time OB1 started
      sTemp : STRING  [11 ];	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          CALL FC     6 (
               iInDBNo                  := 2,
               iInFirstByte             := 0,
               iNumberOfIns             := 120,
               RET_VAL                  := MW    10);
          NOP   0; 
    END_ORGANIZATION_BLOCK
    übersetz dir mal die quelle...
    Angehängte Grafiken Angehängte Grafiken
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    Alexus85 (05.10.2010)

  10. #28
    Registriert seit
    20.10.2009
    Beiträge
    30
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok, ok, ich nehme alles zurück. Es funktioniert tatsächlich.

    Hat wohl auch schon vorher funktioniert, aber eine Frage wäre da noch offen.

    Ich hab das ganze über eine Variablentabelle simuliert und mir den DB anzeigen lassen. In dem steht aber immer die Summer der aktiven Eingänge. Aber drucken tut er anscheinend den richtigen. Deswegen dachte ich zunächst auch es funktioniert nicht.

    Also
    E0.1 kommt -> im DB steht die 1 -> gedruckt wird Meldung 1
    E0.3 kommt danach -> Im DB steht die 5 -> gedruckt wird Meldung 3

    Wie kommt das zu stande?

    Seh ich das richtig, dass dieser Quellcode nun ausreicht für Meldungen weit über 100 Stück? Bzw. dass ich das mit #iNumberofIns festlegen muss?

    Danke nochmals!!

  11. #29
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Geh mal in Deinem Baustein mit dem Cursor auf das 'FP' und drück F1. Das sollte Deine Frage beantworten.
    Gruß
    Michael

  12. #30
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Alexus85 Beitrag anzeigen

    Also
    E0.1 kommt -> im DB steht die 1 -> gedruckt wird Meldung 1
    E0.3 kommt danach -> Im DB steht die 5 -> gedruckt wird Meldung 3

    Wie kommt das zu stande?
    der DB stellt nur den flanken-puffer zur verfügung ... also die helpflags für die auswertung der positiven flankenauswertung der "1000" eingänge, für jeden eingang eine...

    Zitat Zitat von Alexus85 Beitrag anzeigen
    Seh ich das richtig, dass dieser Quellcode nun ausreicht für Meldungen weit über 100 Stück? Bzw. dass ich das mit #iNumberofIns festlegen muss?

    Danke nochmals!!
    ja, du kannst weit über 100 eingänge auswerten und gibst die anzahl über #iNumberOfIns an, das startbyte kannst du auch festlegen. einzig auf die arraygröße im db mußt du noch achten.

    achtung: viele schleifendurchläufe verbraten natürlich viel zeit! du bekommst auch immer nur den höchsten (neu getriggerten) eingang angezeigt ... hier ist noch room for improvement siehe stichwort meldungspuffer oder schleife nach gefundenen eingang abbrechen, je nachdem was du willst...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  13. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Alexus85 (05.10.2010)

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 01.06.2011, 17:34
  2. CSV in Datenbaustein laden
    Von McLac im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 02.07.2009, 21:56
  3. DB in Dezimalzahl
    Von tisler im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 15.10.2008, 15:20
  4. Dezimalzahl speichern
    Von Syntaxfehler im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 22.01.2008, 15:25
  5. Datenbaustein bei der S7-200 neu laden
    Von hubert im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 24.05.2005, 21:56

Stichworte

Lesezeichen

Berechtigungen

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