Beiträge von BernhardK

    Hallo Zusammen,


    ich hab mal eine .csv Datei in einen String Array eingelesen , natürlich kommt es bei Überschreitung der max.Zeichenlänge zum Zeilenumbruch.

    RobiMan

    In deinem Fall mit robtarget

    Erste Zeile Stringlänge mit StrLen die Länge des Strings ermitteln , dann mit StrMatch nach ]] suchen , gefunden robtarget komplett

    Hab dann angefangen den String zu zerlegen zb. mit StrMatch nach [[ oder ],[ suchen dann mit StrPart string vor und nach dem Suchergebis zwischenspeichern

    Immer wieder die Stringlänge von der zweiten Zeile ermittelt und dort mit StrMatch nach ]] oder suchen. Ist die Gesamtstringlänge kleiner 80 Zeichen

    den String speichern . Igendwann hat man einen Array von Teilstrings die den Inhalt der robtarget ergibt .

    Hab dann aus diesen Teilstrings ein Programmmodul erstellt.Die Konvertierung hab ich im Task 2 abgearbeitet das Modul ins Home Verzeichnis geladen.Task 1 hats geladenund abgearbeitet. Was einfacheres ist mir nicht eingefallen. Viel Spass beim konvertieren


    LG Bernhard

    Könnte man statt ein Programm automatisch erstellen natürlich auch mit PERS Variablen umsetzen. Wichtig war vor mich die Konvertierung in der SPS

    abzuarbeiten, da diese so taktzeitneutral gegenüber dem Robotertask läuft und die Anzahl der Variablen im überschaubarem Bereich gehalten werden kann.

    Ich hab das mal so in der SPS gelöst,das ich mit OPEN die xx.csv geöffnet und mit ReadString den Inhalt gelesen habe. Dann mit einem selbst erstellten

    Konvertierungsprogramm die Strings in robtargets gewandelt habe. (War ein riesen Aufwand da sich die Struktur in der xx.csv immer geändert hat ) und Strings mit 80 Zeichen begrenzt sind Zeilenumbruch... Hab dann ein Programm automatisch erstellt und das ins HOME Verzeichnis geladen. Haupttask hat das Programm abgeholt und verarbeitet (Zwischenspeicher) das Programm dann im Home gelöscht.SPS hat mit ISFILE aufs Homeverzeichnis zugegriffen wenn kein Programm existierte hat die SPS ein neues erstellt aus der nächsten xx.csv Datei. Natürlich kam es nach der Abarbeitung des Programms vom Roboter zu einem ganz kurzen Stillstand. aber ca.400 RecordVariablen (Startposition,Endposition,Kontur,Drehzahl .... )einlesen dauert ja nicht so lange.... Hab damit gebohrt und gefräst .

    Hallo zusammen


    Ist sichergestellt das von der SPS der richtige Wert (eb_position) gesendet wird .

    Würde diesen vor der Berechnung kontrollieren ob im richtigen Bereich oder ev. die Schnittstelle um das Signal "Daten gültig " erweitern.


    Dann klappts


    Bernhard

    Hallo


    Hab das mal in der SPS realisiert mit einer Schrittkette .

    Schritt 1: wenn alle Achsen stehen (SO_MechanicalUnitNotMoving=True ) hab ich die aktuelle Positionen gespeichert. Schrittzähler auf 1

    Schritt 2: wenn der Roboter bewegt wird (SO_MechanicalUnitNotMoving=False ) ,Schrittzähler auf 2

    Schritt 3: wenn alle Achsen stehen (SO_MechanicalUnitNotMoving=True ) hab ich die aktuelle Positionen gespeichert und mit Position aus Schritt 1

    verglichen . Sollte die Position ausserhalb eines vorgegebenen Fensters sein hab ich eine Variable (ManMove=true) gesetzt mit der ich dann im Haupttask eine

    Aktion ausgelöst habe

    Schrittkette und ManMove Variable rücksetzen nach PZ-Main oder durch Programm


    Gruss Bernhard

    Hallo


    Mit dem Befehl SetDataSearch kannst du nach Daten suchen
    weiter Befehle GetNextSym , SetDataVal ..


    Neue Module erstellen :


    SearchBase_Mod:= " "+SearchSetBase_Vorbelegung{SearchBase_ModNr};
    IF ModExist(SearchBase_Mod) THEN
    !(Datei vorhanden )
    ELSE
    !(Datei nicht vorhanden )
    !neues Modul erstellen
    CreateBase_Mod:=SearchBase_Mod+".mod" ;
    UIMsgBox\Header:="Neues Module "+SearchBase_Mod ,
    "Soll das Module erzeugt werden?"
    \Buttons:=btnOk
    \Icon:=iconINFO
    \Result:=t_Answer;
    IF t_Answer=resOk THEN
    TPErase ;
    TPWrite "Erzeuge Module "+CreateBase_Mod ;
    ! Textdatei erzeugen:
    Open diskhome\File:=""+CreateBase_Mod,t_deDatei;
    Write t_deDatei,"MODULE "+SearchBase_Mod;
    Write t_deDatei,"! Points are read in order of declaration. ";
    Write t_deDatei,"! Please do not change the order of points ";
    Write t_deDatei,"";
    Write t_deDatei,"LOCAL PERS robtarget pWobj_U_PointX1:="\NoNewLine;
    Write t_deDatei,"[[0,0,0],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];";
    Write t_deDatei,"LOCAL PERS robtarget pWobj_U_PointX2:="\NoNewLine;
    Write t_deDatei,"[[0,0,0],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];";
    Write t_deDatei,"LOCAL PERS robtarget pWobj_U_PointY1:="\NoNewLine;
    Write t_deDatei,"[[0,0,0],[1,0,0,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];";
    Write t_deDatei,"";
    Write t_deDatei,"";
    Write t_deDatei,"ENDMODULE";
    CLOSE t_deDatei;
    IF ModExist(SearchBase_Mod) EraseModule SearchBase_Mod;
    Load diskhome\File:=CreateBase_Mod;
    TPWrite "Module "+CreateBase_Mod+" erfolgreich erstellt " ;
    WaitTime 3 ;
    TPErase;
    ELSE
    TPErase ;
    TPWrite "Programmneustart " ;
    WaitUntil FALSE ;
    ENDIF
    ENDIF


    Probiers mal ,
    Viel Spass Bernhard