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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: CM1241 Empfangsprobleme mit Endzeichen

  1. #11
    HarryHirn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    09.11.2012
    Ort
    Hamburg
    Beiträge
    15
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    bitte nicht hauen für den Code, aber es war nur zum ausprobieren...
    (und ich bin Neuling :P )

    "Datenbaustein_1".Message ist ein String
    "Datenbaustein_1".Buffer ist ein Array of Char

    An den Eingängen meiner SPS ist das Kippschalter Tool.

    Mit Schalter 0 kann ich nun einen Nachrichtenversand triggern und mit Kippschalter 1 die Nachrichten jede für sich aus dem Puffer holen.

    Der Port ist 271 und ist in der Bausteinansicht konfiguriert mit Nachrichtenende durch 0x0d erkennen als Endzeichen 5.

    Ansonsten ist nur noch die Baudrate und Leitungsvorbelegung eingestellt...


    Code:
    "In0_0_M_Old" := "In0_0_M";"In0_1_M_Old" := "In0_1_M";
    "In0_7_M_Old" := "In0_7_M";
    
    
    "In0_0_M" := "In0_0";
    "In0_1_M" := "In0_1";
    "In0_7_M" := "In0_7";
    
    
    
    IF "In0_0_M" = TRUE AND "In0_0_M_Old" = FALSE THEN
      "Datenbaustein_1".Message := '#1$$$R';
      "Datenbaustein_1".RS_Length := 4;  
      "RS_SendReq" := TRUE;
    END_IF;
    
    
    IF "In0_1_M" = TRUE AND "In0_1_M_Old" = FALSE THEN
      "RS_RecReq" := TRUE;
      "RS_Received" := FALSE;
    END_IF;
    
    
    IF "In0_7_M" = TRUE AND "In0_7_M_Old" = FALSE THEN
      "Datenbaustein_1".temp[0] := '';
    
      FILL_BLK(IN:="Datenbaustein_1".temp[0],
             COUNT:=128,
             OUT=>"Datenbaustein_1".Buffer[0]);
    
    END_IF;
    
    
    
    
    
    
    IF "RS_SendReq" = TRUE THEN
    
      "SEND_PTP_DB"(REQ:=1,
                    PORT:=271,
                    BUFFER:="Datenbaustein_1".Message,
                    DONE=> "RS_SendDone",
                    LENGTH:="Datenbaustein_1".RS_Length
      );
    
      IF "RS_SendDone" = TRUE THEN
        "RS_SendReq" := FALSE;
    
        "SEND_PTP_DB"(REQ:=0,
                    PORT:=271,
                    BUFFER:="Datenbaustein_1".Message,
                    DONE=> "RS_SendDone",
                    LENGTH:="Datenbaustein_1".RS_Length
                    );
    
      END_IF;
    END_IF;
    
    
    IF "RS_RecReq" = TRUE THEN
    
      "RCV_PTP_DB"(EN_R:=TRUE,
                   PORT:=271,
                   NDR=>"RCV_NDR",
                   ERROR=>"RCV_ERROR",
                   STATUS=>"RCV_STATUS",
                   BUFFER:="Datenbaustein_1".Buffer,
                   LENGTH=>"Datenbaustein_1".Length);
    
      IF "RCV_NDR" = TRUE THEN
        "RS_Received" := TRUE;
        "RS_RecReq" := FALSE;
    
        "RCV_PTP_DB"(EN_R:=FALSE,
                 PORT:=271,
                 NDR=>"RCV_NDR",
                 ERROR=>"RCV_ERROR",
                 STATUS=>"RCV_STATUS",
                 BUFFER:="Datenbaustein_1".Buffer,
                 LENGTH=>"Datenbaustein_1".Length);
    
      END_IF;
    END_IF;

  2. Folgender Benutzer sagt Danke zu HarryHirn für den nützlichen Beitrag:

    Ottmar (10.04.2013)

  3. #12
    Registriert seit
    26.04.2010
    Beiträge
    292
    Danke
    31
    Erhielt 51 Danke für 50 Beiträge

    Standard

    Hi!

    Ich danke dir für die schnelle Rückmeldung.

    Das Problem kam nicht von meinem Code, sondern durch die Terminierung im BUS.
    Diese habe ich am Modul vorgenommen und auch am letzten BUS-Teilnehmer.
    Seit ich die Terminierung an der CPU abgeschaltet habe (TA und TB abgeklemmt) trat das Problem nicht mehr auf.

    Die Nachrichten waren physikalisch auf dem BUS (Antwort vom Motor kam also), kamen nur in meinem Empfangspuffer nicht an.

    Einen Unterschied zu deinem Code habe ich an der Stelle wo die Rückmeldung "NDR_RCV" verwendet wird.
    Dort habe ich mal einer Quelle entnommen, dass der Baustein "RCV_PTP" an "NDR_RCV" meldet, wenn eine neue Nachricht eingegangen ist.
    Erst dann soll mit "EN_R" die Nachricht aus dem Modul in den Puffer geholt werden. "NDR_RCV" liegt also direkt an "EN_R" an. So hab ich das und es funktioniert zuverlässig.

    Alles in allem ist die Beschreibung der Bausteine aber mehr als schlecht.


    Gruß,

    Ottmar
    Geändert von Ottmar (10.04.2013 um 18:27 Uhr)

  4. #13
    HarryHirn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    09.11.2012
    Ort
    Hamburg
    Beiträge
    15
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    da stimme ich dir zu, die beschreibung ist echt mies...

    aber die idee mit ndr and en_r finde ich gut
    nur mal schauen wie man das in scl schön umsetzen kann...

Lesezeichen

Berechtigungen

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