zweidimensionale Felder kopieren ?????

  • Hi wie kann ich den am besten die Toolnamen sichern bzw. ausgeben?
    so gehts leider nicht.


    DECL INT x,y
    DECL CHAR abc[16,24]


    for x=1 to 16
    for y=1 to 24
    abc[x,y]=TOOL_NAME[x,y]
    endfor
    endfor


    die Schleife bricht ab, wenn in einem Feld von TOOL_NAME nichts drin steht.
    TOOL_NAME hat auch [16,24]
    mfg
    :wallbash:

  • Schritt für Schritt zum Roboterprofi!
  • Wenns daran liegt, dass dein Feld leer ist, kannst du dieses ja vorher überprüfen.


    Das würde gehen mit:


    Code
    IF NOT (VARSTATE("TOOL_NAME[x,y]") == #INITIALIZED) THEN
     -> mach was anderes als kopieren
    ENDIF
  • Es ist doch nun letztendlich egal, ob der Text nun gleich lang ist oder nicht.


    Angenommen, er initialisiert sein Tool_Data nur bis zum Buchstaben 3.


    Dann wird der Rest halt nicht kopiert. Abc wird danach natürlich genau so wenig initialisiert sein, aber er könnte ja einfach hingehen und für jeden nicht initialisierten Char einfach ein Leerzeichen einfügen. Dann ist nach dem Kopiervorgang in abc auf jeden Fall jeder Char initialisiert und belegt.

  • Müsste es nicht reichen abc[,]=TOOL_NAME[,] zu schreiben?
    Ich meine ich habe sowas schonmal Programmiert. War zwar kein kopieren im direkten Sinn. Habe so ein Aarry als OUT Parameter einer Funktion übergeben.
    Aber das ist ja auch nichts anderes wie kopieren. Im weiten Sinne.
    Dann müsste es doch auch egal sein, ob die einzelnen Felder initialisiert sind.

  • Das Problem liegt darin, dass KUKA das Auslesen einer nicht initialisierten Variable nicht zulässt, bzw. zur Laufzeit einen Fehler wirft.


    Demnach müsste eigentlich das auslesen eines kompletten Feldes mit nicht initialisierten Werten auch zu einem Fehler führen müsste.


    P.S.


    Bist du der DOS 6.22, der sich auch im SPS-Forum herumtreibt?

  • Grubba Ja, ab und an mal. :angel:


    Arrays sind schon zum Teil sehr nervig beim KUKA. Muss da auch jedesmal rumprobieren bis das so geht, wie ich es gerne hätte.
    Was auch nervt, dass er keine dynamischen kann. bzw. wenn er es kann, hat es bei mir nie geklappt.


    Aber bei der S7 sind Arrays noch schlimmer.

  • Hallo,


    Hat dies jemand schon so probiert????


    DECL INT x,y
    DECL CHAR abc[16,24]


    For x=1 to 16
    For y=1 to 24
    ON_ERROR_PROCEED
    abc[x,y]=TOOL_NAME[x,y]
    IF $ERR.NUMBER == 0 THEN
    ;alles ok!
    ELSE
    ERR_CLEAR($ERR)
    EXIT
    ENDIF
    Endfor
    Endfor


    ON_ERROR_PROCEED umgeht den Fehler auf der nächstfolgenden Zeile.
    Sollte ab V5.5 gehen.


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

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