EthernetKRL: Auslesen STRING enthält nicht gewollte Zeichen

  • Hallo liebe Kollegen,



    folgendes Problem. Beim Auslesen eines Strings über die EthernetKRL-Schnittstelle werden die Leerstellen mit 'H00'` befüllt.

    Was kann hier die Ursache sein bzw. wie kann ich es verhindern / beseitigen.


    Nachfolgen der Code, Deklaration, EthernetKRL-Configfile und die Systembeschreibung.



    Einlesen des Strings:

    "....

    offset1 = 0

    swrite(sBase_Name[],state,offset1,"Robot/Base/B%d%s",b,"/NAME")

    ; Read Base-Name

    RET=EKI_GetString(sChannel_Base[],sBase_Name[], valueChar_1[])

    ..."


    Deklaration:

    "....

    DECL GLOBAL CHAR valueChar_1[24]

    valueChar_1[]="BASE_32'H00''H00''H00''H00''H00''H00''H00''H00''H00''H00''H00''H00''H00''H00''H00''H00''H00'"

    ....."



    Config: EthernetKRL

    "

    <ETHERNETKRL>

    <CONFIGURATION> <EXTERNAL>

    <IP>XXX.XXX.XXX.XXX</IP>

    <PORT>XXXXX</PORT>

    <TYPE>Server</TYPE>

    </EXTERNAL>

    <INTERNAL>

    <ENVIRONMENT>Program</ENVIRONMENT>

    <BUFFERING Mode="FIFO" Limit="32"/>

    <BUFFSIZE Limit="65534"/>

    <TIMEOUT Connect="5000"/>

    <ALIVE Set_Out="74"/>

    <PROTOCOL>TCP</PROTOCOL>

    <MESSAGES Display="error" Logging="warning" />

    </INTERNAL>

    </CONFIGURATION>

    <RECEIVE>

    <XML>

    <ELEMENT Tag="Robot/Base/MAX" Type="INT"/>

    <ELEMENT Tag="Robot/Base/B1/VALUE" Type="FRAME"/>

    <ELEMENT Tag="Robot/Base/B1/NAME" Type="STRING"/>

    <ELEMENT Tag="Robot/Base/B1/TYPE" Type="STRING"/>

    <ELEMENT Tag="Robot/Base/B2/VALUE" Type="FRAME"/>

    <ELEMENT Tag="Robot/Base/B2/NAME" Type="STRING"/>

    ......"



    System:

    - KR 360 R2830

    - KRC4 Version=V8.5.8

    - EthernetKRL=3.0.3


    Danke für Eure Hilfe.


    Gruß


    mag_de_coco

  • Schritt für Schritt zum Roboterprofi!
  • Das ist normal ....


    KRL kennt den richtigen String-Typ nicht. Was da steht ist ein char-Array und alle Elemente werden aufgelistet ...


    Null Char hat eine spezielle Bedeutung und sagt einfach, dass "String" beendet wurde

  • Code
    DECL BOOL erased
    ;....
    RET=EKI_GetString(sChannel_Base[],sBase_Name[], valueChar_1[])
    IF valueChar_1[1]==0 THEN
      erased=StrClear(valueChar_1[])
    ENDIF

    oder besser


    3 Mal editiert, zuletzt von panic mode ()

  • doch...

    es ist ganz einfach EKI_GetString() anzupassen....

    es gibt jedoch Probleme damit, da EthernetKRL.src ueberschrieben werden kann....

    deshalb lieber ne eigene Function machen..

  • Das würde empfangene Daten verfälschen. Zum Beispiel würde eine Nullzeichenfolge immer noch als einzelnes Leerzeichen angezeigt: " ". Außerdem ist immer noch nicht klar, was genau "falsch" ist, wenn Daten genau so gespeichert werden, wie sie sind.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden