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

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

Thema: IP_USEND und IP_URCV

  1. #1
    Registriert seit
    11.09.2015
    Ort
    Bremen
    Beiträge
    13
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Tag!

    Ich versuche die TCP/IP-Kommunikation mit dem Barcodereader in PC WORX zu implementieren. Dafür sind FB IP_Connect, IP_USND und IP_URCV nützlich. Gesendet und empfangen müssen STRINGs.
    Die folgenden Fehler treten auf:

    Der VAR_IN_OUT-Parameter 'SD_1' ist mit keiner Variablen verbunden!
    Der VAR_IN_OUT-Parameter 'RD_1' ist mit keiner Variablen verbunden!

    Woran kann es liegen?

    Danke im Voraus. Der Code ist beigefügt.

    P:S. Noch eine Frage: Wie kann man ENUM in PC WORX erstellen?

    Code:
    Inhalt von Datentypen/basic:
    
    TYPE
        STRING12: STRING(12);
        STRING15: STRING(15);
        T_SendeDaten :
        STRUCT
            LaengeDerNutzdaten : INT;
            Nutzdaten : STRING;
        END_STRUCT;
    END_TYPE;
    
    Inhalt von BarcodereaderV: bEnable BOOL VAR_INPUT xComScan BOOL VAR_INPUT xComReset BOOL VAR_INPUT xComDone BOOL VAR_OUTPUT xComError BOOL VAR_OUTPUT sTraycode STRING12 VAR_OUTPUT stSendToServer T_SendeDaten VAR sToServer STRING VAR fbIPConnect IP_CONNECT VAR fbIPSend IP_USEND VAR fbIPReceive IP_URCV VAR bStartSending BOOL VAR bStartReceiving BOOL VAR state INT VAR
    Inhalt von POE Barcodereader: fbIPConnect(EN_C := bEnable, PARTNER := '/ACTIVE /PORT=9005 /IP=192.168.3.201'); stSendToServer.LaengeDerNutzdaten := LEN(sToServer); stSendToServer.Nutzdaten := sToServer; fbIPSend(REQ:=bStartSending, ID:=fbIPConnect.ID, SD_1 := stSendToServer); fbIPReceive(EN_R:=bStartReceiving, ID:=fbIPConnect.ID); CASE state OF 0:(* init state *) xComDone := FALSE; xComError := FALSE; bStartSending := FALSE; bStartReceiving := FALSE; state := 1; 1: (* check connection *) IF fbIPConnect.VALID THEN IF (xComScan) THEN bStartSending := TRUE; bStartReceiving := FALSE; state := state + 1; END_IF; ELSE state := 0; END_IF; 2: (* send string to server *) IF fbIPConnect.VALID THEN IF fbIPSend.DONE THEN bStartSending := FALSE; bStartReceiving := TRUE; state := state + 1; ELSIF fbIPSend.ERROR THEN state := 60; END_IF; ELSE state := 0; END_IF; 3: (* receive string from server *) IF fbIPConnect.VALID THEN IF fbIPReceive.NDR THEN sTraycode := fbIPReceive.RD_1; state := state + 1; ELSIF fbIPReceive.ERROR THEN state := 60; END_IF; ELSE state := 0; END_IF; 4: xComDone := TRUE; IF NOT(xComScan) THEN state := 0; END_IF; 60: sTraycode := ''; state := 0; END_CASE;
    Geändert von vmolchanov (20.05.2016 um 11:50 Uhr)
    Zitieren Zitieren IP_USEND und IP_URCV  

  2. #2
    vmolchanov ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.09.2015
    Ort
    Bremen
    Beiträge
    13
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    OK, habe die Fehlermeldungen rausgekriegt. Die Korrekturen am Anfang des Codes sind wie folgt (ob der Code funktioniert, habe ich noch nicht getestet wegen fehlender Hardware):

    Code:
    ...
    fbIPSend(REQ:=bStartSending, ID:=fbIPConnect.ID, SD_1 := stSendToServer);
    stSendToServer := fbIPSend.SD_1;
    
    fbIPReceive(EN_R:=bStartReceiving, ID:=fbIPConnect.ID, RD_1 := sTraycode);
    ...
    Geändert von vmolchanov (20.05.2016 um 11:50 Uhr)

  3. #3
    Registriert seit
    08.09.2010
    Ort
    Blomberg
    Beiträge
    421
    Danke
    1
    Erhielt 66 Danke für 63 Beiträge

    Standard

    Hallo vmolchanov,


    bist du dir sicher, dass du PC Worx benutzt?
    Eigentlich kann man Typen Definitionen nicht in ST POEs einfügen.

    Gruß
    Mark
    PHOENIX CONTACT Deutschland GmbH
    Hotline: 05281-946-2888
    automation-service@phoenixcontact.com
    www.phoenixcontact.de

  4. #4
    vmolchanov ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.09.2015
    Ort
    Bremen
    Beiträge
    13
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    ja, ich benutze PC Worx. Ich war mir sicher, die Trennungslinien zwischen den Codeabschnitten zeigen es deutlich an, dass sie nicht in einem POE sind. Gut, habe zusätzlich Kommentare in bold hinzugefügt.

    Was ist mit ENUM in PC Worx? Wie kann man es definieren?

    Grüße
    Geändert von vmolchanov (20.05.2016 um 09:05 Uhr)

  5. #5
    Registriert seit
    08.09.2010
    Ort
    Blomberg
    Beiträge
    421
    Danke
    1
    Erhielt 66 Danke für 63 Beiträge

    Standard

    Ok, wir wunderten uns nur

    Enum gibt es so leider nicht in PC Worx.
    PHOENIX CONTACT Deutschland GmbH
    Hotline: 05281-946-2888
    automation-service@phoenixcontact.com
    www.phoenixcontact.de

  6. #6
    vmolchanov ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.09.2015
    Ort
    Bremen
    Beiträge
    13
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Schade, dass ENUM nicht da ist. Gibt es dann eine Alternative?

    Die Deklaration
    TON_ARR_32: ARRAY[1..32] OF TON;
    verursacht Fehler:
    Betreffender Datentyp 'TON' nicht deklariert!

    Gibt es eine Möglichkeit, ein Array von Timers oder anderen FBs zu deklarieren? Wenn nicht, kann man eine Alternative vorschlagen? Sonst muss man mehrere Zeilen anstatt 3-Zeilen FOR-Schleife schreiben, was sehr unattraktiv ist.

    Danke

  7. #7
    Registriert seit
    08.09.2010
    Ort
    Blomberg
    Beiträge
    421
    Danke
    1
    Erhielt 66 Danke für 63 Beiträge

    Standard

    Da muss ich dich leider schon wieder enttäuschen.

    Eine richtige Alternative gibt es nicht. Auch können Arrays und Strukturen nur Elemente enthalten die auf elementaren Datentypen beruhen.
    PHOENIX CONTACT Deutschland GmbH
    Hotline: 05281-946-2888
    automation-service@phoenixcontact.com
    www.phoenixcontact.de

  8. #8
    vmolchanov ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.09.2015
    Ort
    Bremen
    Beiträge
    13
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wiedermal schade...

    Gut, können Sie bitte mir sagen, ob das Einlesen bei mir richtig implementiert ist - ich bekomme den Fehler 0x0033:
    Allgemeiner Timeout, Empfänger antwortet nicht mehr bzw. Sender hat Übertragung nicht beendet.
    Die Variable sTraycode ist vom Type STRING(12).

    Es kann auch daran liegen, dass das Senden falsch ist. Soll LEN(sToServer) in die STRUCT T_SendeDaten? Aus Doku: "Im ersten Wort des Sendepuffers SD_1 müssen Sie die Anzahl der nachfolgenden Datenbytes eintragen (Intel-Format beachten)."

    Code:
    ...
    stSendToServer.LaengeDerNutzdaten := LEN(sToServer);
    stSendToServer.Nutzdaten := sToServer;
    fbIPSend(REQ:=bStartSending, ID:=fbIPConnect.ID, SD_1 := stSendToServer);
    
    fbIPReceive(EN_R:=bStartReceiving, ID:=fbIPConnect.ID, RD_1 := sTraycode);
    ...
    CASE step OF
    ...
        3:
            (* receive string from server *)
            IF fbIPConnect.VALID THEN
                IF fbIPReceive.NDR THEN
                    sTraycode := fbIPReceive.RD_1;
                    state := state + 1;
                ELSIF fbIPReceive.ERROR THEN
                    state := 60;
                END_IF;
            ELSE
                state := 0;
            END_IF;
    ...
    Geändert von vmolchanov (20.05.2016 um 12:16 Uhr)

  9. #9
    Registriert seit
    25.06.2008
    Ort
    Blomberg/Lippe
    Beiträge
    1.293
    Danke
    51
    Erhielt 130 Danke für 124 Beiträge

    Standard

    RD_1 ist als Datentyp ANY. Also ich würde da ein Word-Array nehmen. Und mit BUF_TO_STRING kannst du dann den Inhalt zu einem String konvertieren und in sTraycode eintragen.
    Gruß
    Mobi


    „Das Einfache kompliziert zu machen ist alltäglich. Das Komplizierte einfach zu machen –
    das ist Kreativität“ (Charles Mingus).

  10. #10
    vmolchanov ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.09.2015
    Ort
    Bremen
    Beiträge
    13
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So, gesendet muss die Zeile '[ESC]LON[CR]'. Wie lautet die entsprechende STRING? Ist das Format für Sonderzeichen richtig? Ich komme damit nicht klar... Ein funkzionierendes Beispiel der TCP/IP-Kommunikation wäre sehr hilfreich...

    Code:
    sToServer := ''$1BLON$0D'';
    stSendToServer.LaengeDerNutzdaten := LEN(sToServer);
    stSendToServer.Nutzdaten := sToServer;
    fbIPSend(REQ:=bStartSending, ID:=fbIPConnect.ID, SD_1 := stSendToServer);
    stSendToServer := SD_1;
    ...

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 02.08.2008, 13:21

Stichworte

Lesezeichen

Berechtigungen

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