Syntaxfehler S4C im Code angezeigt! Wo ist der Fehler?

  • Hallo ihr lieben, ich möchte meinen ABB2400 an einem S4C+ kontrollieren können. Er soll ein Hexagon in die Luft nachfahren. Übertragen wird per USB an den controller. Leider krieg ich auf dem flexpendant noch 2 Syntaxfehler angezeigt

    40705 Syntaxfehler line =7 , column = 1: Expected Identifier

    40700 Syntaxfehler Expected := but found ,

    Vielleicht kann ja jemand von euch helfen!?


    %%%
    VERSION:1
    LANGUAGE:ENGLISH
    %%%
    MODULE

    VAR robtarget start_pos, target_pos;
    VAR num i := sides;
    CONST num num_sides := 6;
    CONST num side_length := 300; ! Adjust this value to control the size of the hexagon

    PROC main()
    ! Define the starting position (Change the values according to your robot setup)
    start_pos := [[100, 0, 0], [0, 0, 0]];

    ! Set the number of sides for the hexagon
    sides := num_sides;

    ! Move to the starting position
    MoveJ start_pos, v100, fine, tool0;

    ! Loop to draw the hexagon
    FOR i FROM 1 TO sides DO
    ! Calculate the target position for the next point on the hexagon
    target_pos := CalcNextPoint(start_pos, i, side_length);

    ! Move to the target position
    MoveL target_pos, v100, fine, tool0;
    ENDFOR

    ! Move back to the starting position to complete the shape
    MoveL start_pos, v100, fine, tool0;
    ENDPROC

    PROC CalcNextPoint(robtarget start, num side_num, num side_length)
    ! Calculate the angle for each side of the hexagon
    CONST num angle_increment := 360 / num_sides;

    ! Calculate the angle for the current side
    VAR num angle := angle_increment * side_num;

    ! Calculate the target position coordinates based on the side length and angle
    VAR num x_target := start.pos.x + side_length * cos(angle * (pi/180));
    VAR num y_target := start.pos.y + side_length * sin(angle * (pi/180));
    VAR num z_target := start.pos.z; ! Set the same z-coordinate to keep the hexagon flat

    ! Create a new target position variable
    VAR robtarget target;
    target.pos := [x_target, y_target, z_target];
    target.orient := start.orient; ! Keep the same orientation as the starting position

    RETURN target;
    ENDPROC
    ENDMODULE

  • ANZEIGE
  • Ich hab da noch eine Frage. Kann ich auf den S4C Controller via Serviceport zugreifen und wie stelle ich generell die Verbindung her um "online" Zugriff zu haben und so Programme aufspielen zu können!?

  • Startpos is'n robtarget, keine pose. (Hinter "! Define the starting position...")

    Da sind noch mehr Typfehler. Muss heissen target.trans und target.rot statt irgendwas mit pos und orient.

    Und dann Variablendeklaration fehlend und deplaziert usw. , Rückgabewert aus einer Proc statt FUNC usw.

    Da wirste noch ne Zeitlang basteln müssen.

  • Ich hab da noch eine Frage. Kann ich auf den S4C Controller via Serviceport zugreifen und wie stelle ich generell die Verbindung her um "online" Zugriff zu haben und so Programme aufspielen zu können!?

    Per normalen FTP-Client gehts, kannst Dateien ins HOME-Verzeichnis kopieren. 192.168.125.1 ist die Steuerung. Passwort und Username müssen gleich sein, z. B. abb abb.

    Wenn Du Dir selbst die IP *.82 gibst, die Subnetzmaske auf 255.255.255.240 setzt und das Gateway auf *.81, dann wirst Du der Gott der Steuerung.

    Theoretisch geht auch noch mehr, aber nur mit spezieller Software.


    Unter der Klappe am Computer sollte auch noch ein Netzwerkanschluss sein, den Du beliebig konfigurieren kannst.

  • Alles klar! Berichte dann vom Fortschritt sobald wieder am Robi! Danke!

    P.S. Ne, waren sogar 4 oder 5 Syntaxfehler die angezeigt wurden die ich aber beseitigen konnte!

    P.S.S. Im englischen Forum wurde gesagt FTP geht nur über den LAN Anschluss im Controller !? :/

    Per normalen FTP-Client gehts, kannst Dateien ins HOME-Verzeichnis kopieren. 192.168.125.1 ist die Steuerung. Passwort und Username müssen gleich sein, z. B. abb abb.

    Wenn Du Dir selbst die IP *.82 gibst, die Subnetzmaske auf 255.255.255.240 setzt und das Gateway auf *.81, dann wirst Du der Gott der Steuerung.

    Theoretisch geht auch noch mehr, aber nur mit spezieller Software.


    Unter der Klappe am Computer sollte auch noch ein Netzwerkanschluss sein, den Du beliebig konfigurieren kannst.

    Hatte es eigentlich schon genau so probiert, nur halt nur am Serviceport vorne! Versuche es dann mal mit dem LAN im Controller!

  • Über den Serviceport hat man mehr Rechte, wenn man die genannten Einstellungen benutzt. Dann kann man sich über FTP sogar das System kaputtmachen. Ansonsten sollte es aber auch gehen (?), wenn man einfach im gleichen Subnetz auf die 192.168.125.1 zugreift, klassisches, unverschlüsseltes FTP mit Benutzername und Passwort, evtl. passiven Modus. Vielleicht ist das gemeint: dass man es sein lassen sollte, wenn man nicht sicher ist.

    Ansonsten fällt mir aber jetzt kein Fall ein, wo FTP über den Serviceport NICHT gegangen wäre, hab noch vor zwei Jahren auf einer Baustelle mit einer größeren Zahl von S4C+en einen Wlan-AP einfach immer vorne reingesteckt von Robbi zu Robbi.

    In bösen Fällen (bei Speichermangel) hilft es manchmal, über das Service-FTP Müll rauszulöschen.


    Wenn Du fest verkabeln willst, dann natürlich lieber die Schnittstelle innen konfigurieren (geht übers Boot-Menü).


    Das mit der Anzahl der Syntaxfehler variiert. Beim Parsen der Programmdatei guckt er halt, wie weit er kommt, ohne abbrechen zu müssen. Man soll sich halt nicht wundern, wenn nach den vermeintlich "letzten zwei" Syntaxfehlern noch mal zwei auftauchen und dann noch zwei....


    Nachsatz:

    die Dose im Controller muss entsprechend konfiguriert sein, die geht jedenfalls NICHT mit den genannten Daten. Die braucht natürlich eine beliebige andere Einstellung.


    Nachsatz 2:

    Du brauchst u. U. ein gekreuztes Netzwerkkabel am Serviceport. Die aus dem Laden funktionieren nicht zwangsläufig, weil sich die Schnittstelle des ABB das nicht selbst konfiguriert!

  • Hab den code mal mit Hilfe von chatgpt überarbeitet. Sieht ganz gut aus imo. Werde diese Woche dann mal live am Objekt ausprobieren und Feinschliff machen und dann berichten!



    FUNC robtarget CalculateNextPoint(robtarget start, num side_num, num side_length)

    ! Calculate the angle for each side of the hexagon

    CONST num angle_increment := 360 / num_sides;


    ! Calculate the angle for the current side

    VAR num angle := angle_increment * side_num;


    ! Calculate the target position coordinates based on the side length and angle

    VAR num x_target := start.trans.x + side_length * cos(angle * (pi/180));

    VAR num y_target := start.trans.y + side_length * sin(angle * (pi/180));

    VAR num z_target := start.trans.z; ! Set the same z-coordinate to keep the hexagon flat


    ! Create a new target position variable

    VAR robtarget target;

    target.trans := [x_target, y_target, z_target];

    target.rot := start.rot; ! Keep the same orientation as the starting position


    RETURN target;

    ENDFUNC


    VAR robtarget start_pos, target_pos;

    VAR num i, sides;

    CONST num num_sides := 6;

    CONST num side_length := 100; ! Adjust this value to control the size of the hexagon


    PROC main()

    ! Define the starting position (Change the values according to your robot setup)

    start_pos := [[x_start, y_start, z_start], [q1_start, q2_start, q3_start, q4_start]];


    ! Set the number of sides for the hexagon

    sides := num_sides;


    ! Move to the starting position

    MoveJ start_pos, v100, fine, tool0;


    ! Loop to draw the hexagon

    FOR i FROM 1 TO sides DO

    ! Calculate the target position for the next point on the hexagon

    target_pos := CalculateNextPoint(start_pos, i, side_length);


    ! Move to the target position

    MoveL target_pos, v100, fine, tool0;

    ENDFOR


    ! Move back to the starting position to complete the shape

    MoveL start_pos, v100, fine, tool0;

    ENDPROC

  • Nein, bitte nicht berichten.


    Die Grenze ist überschritten, wenn ich damit anfangen soll, von einem Textgenerator erzeugten Text zu lesen. Gar Programme anzusehen. Die Chat-Modelle mögen sich mit ihresgleichen unterhalten, aber nicht mit mir.


    Und noch einmal einen Level drüber sind Berichte über den Auswurf von Texterzeugern.


    Wir müssen mit dem Schiet hier unseren Unterhalt verdienen, da wär's einfach schade um die Lebenszeit.

  • Entschuldige aber es zwingt dich doch niemand zu irgendetwas!

  • Entschuldige aber es zwingt dich doch niemand zu irgendetwas!

    Schon korrekt.


    Aber ich weiß ja vorher nicht unbedingt, ob der Code von einem verzweifelten Programmierer stammt, der Druck von oben bekommt und dem man helfen will. In dem Fall hängt man sich vielleicht rein, kopiert Code der Lesbarkeit halber in seinen eigenen Editor, sucht nach eigenen Projektdaten, wie man es mal selbst realisiert hat, vergleicht zweimal, dass man bloß keinen Mist postet, usw. usf..


    Hat man all das getan und erfährt dann, dass der fragliche Code von einer Labermaschine produziert wurde, wird man sich verarscht fühlen.


    Ich hab' kein Problem damit, wenn solche Tools fachgerecht benutzt werden, ich verfolge selbst aufmerksam die Technik dahinter, hab'n Huggingface-Account, war von ELIZA fasziniert und hab schon vor >35 Jahren auf 'nem Sinclair plausibel klingende Zufallstexte produziert. Nur selber lesen will ich den Quark nirgends.


    Also schreib's bitte in den Titel oder gleich in die Witze-Rubrik, dann fällt es unter optionales Entertainment.

  • Sehe ich auch so.

    Schon das 'Programm' im Ausgangsposition stammt wohl von ChatGpt :(.

    Zumindest die Version 3.5 ist da nicht zu gebrauchen. Hab's auch mal kurz versucht mit der selben Aufgabe jeweils ein Programm für Kuka, Abb und Fanuc zu erstellen. Bis man da die Fehler korrigiert hat (ChatGpt auf die Fehler hingewiesen, und das dumme Geschwafel nochmal kontrolliert :MAD: ) hat man die Programme schon drei mal selbst geschrieben und ausgetestet.

    Der Schwafelautomat mischt die Sprachen wild durcheinander und beachtet die simpelsten Vorgaben der Sprachen nicht, oder ich bin zu blöd den richtigen Prompt zu erstellen :).

    Man benötigt da wohl einen speziell auf Programmieraufgaben trainierten Automaten. Kennt da jemand einen?

  • Ja ist ja alles nicht schlimm denke ich! Gibt es Vorschläge wo ich sauberen Code als Beispiel mal finde den ich auf den Flexpendant mal aufspielen könnte!?

    Einfache geometrische Muster zB die er mal abfährt oder sowas. Ohne Pneumatik aber auch mit etc. etc.

    Einfach mal sauberen Code in Rapid den ich mir angucken könnte um daraus zu lernen halt. Bin da für alles dankbar ...

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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