Beiträge von blender

    Du hast noch eine alte Software ohne dn2drv.o. Das heisst keine MAC-ID in der iosys.ini angeben, sondern nur den Byteoffset vom Koppler.


    [Devnet]
    INB5=0 ;$OUT[41-56]
    OUTB5=0 ;$OUT[41-56]


    Der KUKA-DevNet-Treiber erwarte eine MAC-ID von 0 (Master) und ob der Treiber überhaupt mit der externen Karte arbeitet ist dahingestellt.
    a+


    Hallo zusammen,


    ich stehe vor einem ähnlichen Problem. Dazu ein paar Fragen:
    1. Was bedeutet Byteoffset?Ich habs versucht zu googln nur keine Antwort gefunden.


    2. INB5=0 ;$OUT[41-56]
    Die 0 steht für die MAC-ID der KRC1 Steuerung, und 41-56 für die Ausgänge.Woher weiß ich denn welche Ausgänge ich setzten muss um den richtigen Eingang am Buskoppler zu setzten?Oder stehen die Zahlen für die Eingänge am Buskoppler??? :huh:


    Danke
    gruß
    Blender

    Hallo miteinander,


    ich versuche gerad meine Dokumentation, über mein KRL Programm, zu ende zu stellen.


    Jetzt bin ich bei der Baudrate angelangt, die ich jetzt noch begründen muss.
    Dazu bräuchte ich jetzt mal ein Feedback von euch, ob ich auf dem richtigen Weg bin.


    Länge Startbit = 1/Baudrate in Sekunden = 1Bit/9600Bd in Sekunden = 104μs.


    1Byte=(7Bit+Startbit+Stopbit+Parität)*Zeit von einem Bit
    1Byte=(7Bit+1Bit+1Bit+1Bit)*104μs= 1,04ms.


    Mein Textstring sieht zb. so aus: 100 100 90 5 sind danach 12 Zeichen.
    12Zeichen*1,04ms=12,84ms


    Das müsste doch für meine Koordinationskoordinaten ausreichen oder?


    Gruß
    blender

    Ok, soweit habe ich jetzt alles fertig.


    Nur stehe ich noch vor einer Frage,


    und zwar muss ich noch beschreiben warum ich die serielle Schnittstelle benutzt habe und nicht das DeviceNet.
    Ich habs einfach versuche zu umgehen, weil ich nicht wusste wie ich das in C programmieren sollte. Oder gibt es da eigene Programmiersoftware?Klar erstmal der Kostenfaktor, nur ist das Bussystem auch vorhanden.


    Gruß
    blender

    Den Greifer habe ich jetzt am laufen :supi:, weiß leider nicht woran es lag.


    Wie sieht denn der Loop-Befehl im Flußdiagramm aus?Einfach eine Do-While ohne die Abbruchbedingung?



    die Einstellung PARITY kannst in der serial.ini einstellen. Das Bit wird bei der Übertragung eines Bytes automatisch von den seriellen Hardwarechips überprüft.
    Bitfehler führt zu einer Meldung "Übertragungsfehler".


    Reicht das denn zur Überprüfung ob alle Daten richtig gesendet wurden?


    Dank eurer Hilfe ist ein positives Ende diese Projekts in Sicht. :merci:


    Gruß
    Blender


    Hab mich gerad mal durch die Entwicklungsumgebung gekämpft! (MS Studio)
    Ich hab ich beim XonXoff die möglichkeit das Paritybit zu setzten, dann setzte ich auf der Robotersteuerung in der ini-datei das Bit auch auf gerade oder ungerade und prüfe im Programmalgorithmus ob es gesendet wurde?Gibt es denn eine Funktion Parity=1 oder was ähnliches?



    Das Problem mit dem Greifer kann ich noch nicht beantworten. Wo ist da genau das Problem ?
    a+ weekend


    Ich Poste den Fehler sobald ich wieder an den Roboter komme.


    gruß
    blender

    Hallo,


    ich bin gestern leider nicht mehr dazu gekommen. Im Anhang jetzt mein erstelltes Prog.


    Dann hab ich noch das Problem, dass ich über das Inlineformular keinen Greifer hinzufügen kann. Wie lässt sich das denn Programmiertechnisch lösen?


    LindePaul
    Was hast du denn mit derFehlerabfrage nach dem Cread gemeint?


    Und ich habe noch ein paar :huh: bezüglich des Software Handshakes per XonXoff.
    Du hast geschrieben, dass man einen eigenen Check einbauen sollte. Wie meinst du das? Einen zusätzlichen Datenaustausch zwischen PC und KRC1? Also einen zweiten String senden?
    Oder meinst du den Befehl WAIT FOR $DATA_SER2>0?


    Danke


    und allen ein schönes Wochenende.


    Wann wird die Zeile
    CCLOSE(HANDLE, Closestatus) ;Kanal schliessen
    ausgeführt?


    Genau das habe ich gemeint. :merci:



    die Loop kannst Du beenden,(wenn's sinnig ist) indem du nach dem ENDIF bzw. vermutlich wie Paul meint ENDSWITCH eine Exitbedingung einfügst.


    Da ich ja eh am Anfag des Loop-Befehls in die Homeposition fahre müsste ich ihn ja nicht zwingen beenden. Müsste derCclose-Befehl dann nicht im Loop ausgeführt werden?



    oh vergessen - vor dem CREAD muss auch noch ein OFFSET=0 stehen.


    eine Fehlerabfrage nach dem CREAD fehlt auch - kannst da schon in einen Timeout laufen


    Offset ist gleich null. Habs vergessen mit anzugeben, musste heute schnell gehen. :???:
    Was meinst du denn mit fehlerabfrage?



    Ich benutze das XonXoff Protokoll. Also einen definierten String an den PC und wieder zurück zur KRC1?
    Und es sollte Endswitch lauten. :zwink:


    Einen richtigen Kunden habe ich leider nicht, es ist ein FH-Projekt. :denk:
    Ich hänge morgen das fertige Programm mal mit an.


    Danke für die Antworten.

    Hallo zusammen,


    nach längerer abwesenheit, stehe ich leider wieder vor ein paar kleinen Problemen.


    1. Wie kann ich sicherstellen, dass die Robotersteuerung meine Daten von der seriellen Schnittstelle korrekt empfangen hat?Schicke ich diese einfach per CWrite zurück?



    2. Wann endet der Loop befehl?


    LOOP


    CREAD(HANDLE, Lesestatus, Lesemodus,TIMEOUT,OFFSET,"%r",String[])


    Offset=0
    SREAD(String[],Auswertstatus,Offset,"%d%d%d%d",dx,dy,dphi,geo)


    SWITCH geo


    case 1


    PTP HOME


    case 2


    ptp ablage


    ENDIF
    ENDLOOP


    CCLOSE(HANDLE, Closestatus) ;Kanal schliessen


    PTP HOME


    END


    Nachdem er den Switch befehl durchlaufen hat oder garnicht?


    3. Versuche ich gerade eine Software Doku zuschreiben. Bis jetzt habe ich ein Ablaudiagramm in Visio und ein Lasten und Pflichtenheft erstellt. Wie handhabt ihr das so? Beschreibt ihr da noch einzelne Quellcode teile?


    Gruß
    Blender

    Hallo,


    ich habe gerad beides getestet und es Funktioniert wunderbar.


    Zu meiner Schande muss ich gestehen, dass ich bei meinem in c# erstellten Übertragungsprogramm einen kleinen Fehler eingebaut habe. :pfeif:
    Ich hatte vergessen die Parität anzugeben.
    Ein einzelnes Zeichen hat er wie unten gesendet:


    CREAD(HANDLE,Lesestatus,Lesemodus,Timeout,Satzanfang,"%d",geo)


    nur nicht den ganzen String..... :denk:


    CREAD(HANDLE,Lesestatus,Lesemodus,Timeout,Satzanfang,"%r",Eingabe[])


    Naja jetzt hab ich zwei verschiedene Lösungen die Funktionieren. :danke:

    Hallo,


    nach langer suche im Forum ohne erforlg, habe ich mal wieder ein paar Fragen oder eher Probleme bei denen ich nicht weiter komme.


    Der Cread Befehl klappt super, wenn ich 1 Zeichen vom PC an den Roboter sende. Versuche ich jetzt einen ganzen String zu verarbeiten klappt nichts mehr.
    Der zu sendene String sieht so aus: 100 200 140 2


    Hierum geht es:
    Er bleibt in der Cread zeile stehen und geht nicht weiter.



    Satzanfang=0
    CREAD(HANDLE,Lesestatus,Lesemodus,Timeout,Satzanfang,"%s",Eingabe[])



    ;dx
    Form[]="%03d"
    Offset=0
    SREAD(Eingabe[],Auswertstatus,Offset,Form[],dx)


    ;dy
    Form[]="%03d"
    Offset=5
    SREAD(Eingabe[],Auswertstatus,Offset,Form[],dy)


    ;dphi
    Form[]="%03d"
    Offset=9
    SREAD(Eingabe[],Auswertstatus,Offset,Form[],dphi)


    ;geo aus Eingabe herausholen


    Offset=13
    Form[]="%01d"
    SREAD(Eingabe[],Auswertstatus,Offset,Form[],geo)


    Die SRC-Datei habe ich angehängt, da sie schon viel text enthält.


    Gruß
    Blender

    Das klappt soweit, komisch das es vorher nicht ging hatte $DATA_SER2 auch schon versucht.
    Ist es denn normal, dass jetzt bei dem Befehl immer das Quittmenü aufgerufen wird?


    Und danke nochmal für die hilfe.


    Gruß
    blender

    Hallo,


    ich hab gerade nen kleines Problem mit meinem Programm und wollte dafür kein neues Thema aufmachen.
    Vielleicht noch ne kleine Info zum Projekt, ich habe mehrere geometrische Körper. Von einem Bilderarbeitungssystem bekomme ich die Koordinaten, und ein Programm was ich in C# geschrieben habe, bestimmt daraus den Körper und sendet diese Information an die KR C1 Steuerung. Diese greift den Körper und positioniert diesen woanders. Die Körper können mehrfach vorkommen.


    &ACCESS RVP
    &REL 105
    &PARAM TEMPLATE = C:\KRC\ROBOTER\TEMPLATE\EXPERTVORGABE
    &PARAM EDITMASK = *
    DEF schoepe1( )


    ;-------Deklarationen
    EXT BAS (BAS_COMMAND :IN,REAL :IN )
    DECL AXIS HOME ; Variable HOME TYp AXIS
    INT HANDLE, Offset


    REAL Timeout


    DECL CHAR c
    DECL CHAR d
    DECL CHAR z
    DECL CHAR geo


    Real R_Wert


    Bool B_Wert
    DECL STATE_T Lesestatus, Schreibstatus, Closestatus, Auswertstatus, Verarbeitungsstatus
    DECL MODUS_T Lesemodus, Schreibmodus


    CHANNEL :xprechner :SER_2 $PSER_2 ;Zuweisung einer Variablen an den Kanal


    ;------Initialisierung


    BAS (#INITMOV,0 ) ;Ini von Geschw. Beschl. Koordiatensystem


    HOME={AXIS: A1 0,A2 -90,A3 90,A4 0,A5 0,A6 0}


    Schreibmodus=#SYNC ;synchrone Datenuebertragung
    Lesemodus=#ABS ;aktives Lesen intialisieren
    c="A"
    d="B"


    GreifPosition={X -859,Y -1109.519,Z 573.3751,A 51.9,B 2.7,C 180, S 'B 010', T 'B 101010'}


    AblagePosition={X 1175,Y 0,Z 811,A 180,B 2.7,C 180, S 'B 010', T 'B 101010'}


    AblagePositionNeu={X 1297.153,Y 94.64316,Z 513.1287,A 180,B 2.7,C 180, S 'B 010', T 'B 101010'}


    WartePosition={X 0,Y -1281,Z 824,A 90,B 7,C 180, S 'B 010', T 'B 101010'}


    WartePositionNeu={X -823.1487,Y -1083.711,Z 829.6237,A 90,B 7,C 180, S 'B 010', T 'B 101010'}


    ;-------Hauptprogramm


    COPEN(:xprechner, HANDLE) ;Kanal oeffnen
    IF (HANDLE==0) THEN ;falls kein Kanal geoeffnet wurde
    HALT ;dann Programmstop
    ENDIF


    ;WAIT FOR ($IN[41] AND NOT $IN[42])
    ;$OUT[41]=TRUE ; Band anfahren


    ;IF ($IN[43] OR IN[44])THEN


    ;CWRITE(HANDLE, Schreibstatus,Schreibmodus,"%c%c",c,d)


    LOOP
    TIMEOUT = 10.0
    OFFSET = 0


    PTP WartePosition


    ;WAIT FOR $DATA_xprechner>0
    CREAD(HANDLE, Lesestatus, Lesemodus,TIMEOUT,OFFSET,"%c",geo)


    IF (geo=="1")THEN ; geo=1 entspricht Quadrat


    PTP HOME


    ENDIF


    IF (geo=="2")THEN ; geo=2 entspricht grosses Dreieck


    LIN WartePositionNeu
    LIN GreifPosition
    PTP AblagePosition
    LIN AblagePositionNeu
    PTP HOME
    ENDIF


    IF (geo=="3")THEN ;kleines Dreieck


    PTP HOME
    ENDIF


    ENDLOOP


    CCLOSE(HANDLE, Closestatus) ;Kanal schliessen


    END


    Die Bewegungsbefehle habe ich rausgelöscht, damit das Programm nicht die ganze Seite hier einnimmt.


    Und zwar schaffe ich es leider nicht diesen Befehl zum laufen zu bringen: ;WAIT FOR $DATA_xprechner>0. // _SER2 habe ich auch schon Probiert.
    Die Variable "geo" darf nach dem Durchlauf der Loopschleife keinen Wert mehr haben, da sie einen neuen von einem externen PC bekommt.


    Oder kann ich die Variable =0 setzten, und dann eine If Abfrage machen, wenn gleich 0 dann mach den cread Befehl???


    Mein zweites Problem ist, dass ich Zahlen von 1 bis 5 zu meinem Robprogramm sende. Diese stehen für Geometrien zb. einem Quadrat usw.
    Dieses gibt es jetzt aber 2 mal und soll auch noch an eine andere Stelle abgesetzt werden. Kann mir dafür jemand einen Tip geben.


    Danke schonmal für eure Antworten und ein schönes Wochenende.

    Hallo bobbl,


    im Anhang erstmal die *.dat Datei. Ich habe mal 3 verchiedene Punkte Geteacht, angefahren wird aber nur der erste. :?:
    Achso ich habe schon versucht ein altes Archive wiederherzustellen => ohne Erforlg.


    Eine andere Frage.
    Stört es Dich, wenn ein Punkt P1 heisst?
    Der Name ist ja nicht aussagekräftig. Nur die Parameter
    die hinter diesen Namen stecken.


    Wie der Punkt heißt ist eigentlich egal.


    gruß
    blender