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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Mega Problem bei meinem Programm

  1. #1
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hey Leute ich weis zwar nich ob ich das darf aber ich Poste euch mal den FB wie ich ihn bisher jetz soweit geschrieben habe.
    Code:
    CASE SchrittNr OF
    0:    i:=0;
        FOR i:=0 TO 4 BY 1 DO
            LastReceivedByte[i]:=0;
        END_FOR;
        i:=0;
        ReceivedByte:=0;
        ReceiveCounter:=0;
        SchrittNr:=1;
        READDone:=FALSE;
    
    1:    Receive(
            RXbuffer:= RxBuffer2,
            Error=> ReceiveErrorID, );
        IF Receive.ByteReceived (*Byte Received*)THEN
            ReceivedByte:=Receive.ReceivedByte;
        END_IF;
        IF ReceivedByte=2 THEN
            SchrittNr:=5;
        END_IF;
    
    5:    FOR i:=0 TO 4 BY 1 DO
            Receive(
                RXbuffer:= RxBuffer2,
                Error=> ReceiveErrorID, );
            IF Receive.ByteReceived (*Byte Received*) AND LastReceivedByte[ReceiveCounter] = 0 THEN
                ReceivedByte:=Receive.ReceivedByte;
                IF ReceivedByte>127 THEN
                    ReceivedByte:=ReceivedByte-128;
                END_IF;
                LastReceivedByte[ReceiveCounter] := ReceivedByte;
                ReceiveCounter := ReceiveCounter + 1;
            END_IF
        END_FOR;
        SchrittNr:=10;
    
    10:    Receive(
                RXbuffer:= RxBuffer2,
                Error=> ReceiveErrorID, );
            IF Receive.ByteReceived(*Byte Received*)THEN
                ReceivedByte:=Receive.ReceivedByte;
            END_IF;
            IF ReceivedByte = 3 THEN
                SchrittNr:=15;
            END_IF;
    
    15:    Receive(
                RXbuffer:= RxBuffer2,
                Error=> ReceiveErrorID, );
            IF Receive.ByteReceived(*Byte Received*)THEN
                ReceivedByte:=Receive.ReceivedByte;
            END_IF;
            IF ReceivedByte = 24 THEN
                ReadDone:=TRUE;
            END_IF;
    END_CASE;
        IF ReceiveCounter>=4 THEN
            ReceiveCounter:=0;
        END_IF;
    So mein Problem is das er in der For Schleife nich auf die Bytes wartet sondern das ganze einfach überspringt. und ins LastReceiveByte Array nix reinschreibt. Kann mir da wer helfen?
    Mfg
    COOLT
    Zitieren Zitieren Mega Problem bei meinem Programm  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Ja, wie soll er denn warten?
    Wo genau in der For-Schleife sollte er anhalten und auf die Bytes warten?
    Das (warten) geht mit einer SPS normalerweise gar nicht, die Zykluszeitüberwachung würde dann anschlagen.

    Ich denke mal

    Code:
    Receive(
                RXbuffer:= RxBuffer2,
                Error=> ReceiveErrorID, );
    ist eine Funktion.
    Die führt er aus, danach rödelt das Programm 5 Mal durch die For-Schleife.
    Ist die erste IF-Bedingung nicht erfüllt, wird auch

    Code:
    LastReceivedByte[ReceiveCounter] := ReceivedByte;
    nicht abgearbeitet. Die For-Schleife endet, ohne daß etwas geschrieben wurde.
    Nach der For-schleife wird auf jeden Fall in Schritt 10 gesprungen.
    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

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo,
    beschreib doch mal, was du möchtest was passieren soll ...

    Gruß
    LL

  4. #4
    COOLT ist offline Benutzer
    Themenstarter
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Naja ich hätte gerne, dass das Programm in der For Schleife darauf wartet das die Karte über den Kartenleser gezogen wird. Welcher das RXBuffer schickt. Ich brauch halt das er in der For schleife wartet bis der Kartenleser etwas schickt.

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von COOLT Beitrag anzeigen
    Naja ich hätte gerne, dass das Programm in der For Schleife darauf wartet das die Karte über den Kartenleser gezogen wird. Welcher das RXBuffer schickt. Ich brauch halt das er in der For schleife wartet bis der Kartenleser etwas schickt.
    Das kannst du bei einer SPS so nicht machen, da geht die in STOP, weil ja in der Zeit nichts anderes mehr läuft. Du mußt vor der For-Schleife abfragen, ob der Leser Daten gebracht hat. so lange springt ja das Programm zyklisch immer wieder in den Schritt 5. Erst wenn der Datenempfang klar ist, gehst du durch die For-Schleife. Die 10 für Schritt 10 lädst du erst, wenn alle Daten fertig empfangen sind, also im letzten For-Schleifen-Durchlauf!
    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

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    also z.B. so :
    Code:
    0 :
    Empfangspointer := 0 ;
    Schritt_Nr := 1 ;
     
    1 :
    EmpfangeZeichen ;
    if Zeichen_empfangen then 
       Empfangspointer := Empfangspointer + 1 ;
       Puffer[Empfangspointer] := Zeichen ;
    end_if ;
    if Empfangspointer = max_Zeichen then 
       Schritt_Nr := 5 ;
    end_if ;
     
    usw.
    den Code bitte als Vorschlag und nicht als Lösung verstehen ...

    Gruß
    LL

  7. #7
    COOLT ist offline Benutzer
    Themenstarter
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also ich hab das vorhin auf der Arbeit nochmal umgeschrieben werde am Montag dann mal das ergebnis nochmal posten.
    Danke euch nochmal
    Gute Nacht
    Mfg
    COOLT

  8. #8
    COOLT ist offline Benutzer
    Themenstarter
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also das Einlesen hab ich jetzt soweit in den Griff bekommen. Jetzt hab ich wieder ein neues Problem. Und zwar die Auswertung. Bei der Auswertung brauche ich von den Byte typen (die Zahlen die ich eingelesen habe) die 2. stelle der Hex werte. Mit der Funktion Byte_TO_INT bekomm ich das ganze schonmal in Int werte. Aber wie bekomm ich die int werte nun auf ihre Hexwerte und davon dann nur die zweite stelle?
    Code:
    var:
    aData:Array[0..4] of byte;
    End_var
    aData[i]:=Byte_TO_INT(aData[i]);
    aData[i]:=Int_TO_Hex(aData[i]);//funktioniert nicht.
    Hättet ihr da nützliche vorschläge?
    Mfg
    COOLT

  9. #9
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    X_TO_Y konvertiert zwischen Datentypen. "Hex" ist aber kein Datentyp, sondern eine Darstellungsform.

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... soll heißen :
    die Zahl 17 dezimal entspräche 11 hex und 10001 binär - es ist aber immer noch der gleiche Zahlenwert.

    Gruß
    LL

Ähnliche Themen

  1. Wscad mega v3.2
    Von sonyvaio59 im Forum E-CAD
    Antworten: 2
    Letzter Beitrag: 03.07.2011, 11:36
  2. Problem mit SPS-Programm
    Von Puch14 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 21.05.2009, 14:43
  3. WSCAD 4.0 Mega updatefähig auf 4.4 zu verkaufen
    Von scheuren im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 31.12.2007, 13:32
  4. Suche mega grosses 24V Netzgerät
    Von maxi im Forum Antriebstechnik
    Antworten: 15
    Letzter Beitrag: 16.01.2007, 13:52
  5. Programm Problem??
    Von Anonymous im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.08.2005, 10:37

Lesezeichen

Berechtigungen

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