ah jetzt komm ich dahinter.
Danke LindePaul für deine schnelle Hilfe.
Und nen schönen Feierabend.
ah jetzt komm ich dahinter.
Danke LindePaul für deine schnelle Hilfe.
Und nen schönen Feierabend.
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???
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 , 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.
Gruß
Blender
Alles anzeigen
Handshake:
Daten wieder zurücksenden ist nicht das gelbe vom Ei.
Das Beste wäre, Du schickst mit dem Telegramm ein eigenes Checkbyte mit.
Das Checkbyte baust Du selbst auf (z.B alle Sendedaten - ausser Checkbyte- in das Checkbyte
"XORen oder ANDen oder addieren,...). Auf der KRCseite machst Du das gleiche mit den Empgangsdaten und vergleichst das empfange Checkbyte mit dem eigenen.
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 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.
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?
Alles anzeigen
zu 1. wenn Du das 3964r-Protokoll benutzt kannst du fast sichere Übertragung durch eingebauten BCC-Check.
wenn Du XONOFF oder pure Datenübertragung nutzt wäre es sicherer einen eigenen Chech einzubauen oder zurüchzuschicken und wieder auf das ok warten bevor zu die Daten weiterverarbeitest.
zu 2. beim ENDLOOP
das ENDIF soll wahrscheinlich ENDSWITCH heissen
zu 3. wie AtoK09 schon schrieb - hängt vom Kunden ab
Ich benutze das XonXoff Protokoll. Also einen definierten String an den PC und wieder zurück zur KRC1?
Und es sollte Endswitch lauten.
Einen richtigen Kunden habe ich leider nicht, es ist ein FH-Projekt.
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
Tja Blender, wer die Wahl hat, hat die Qual
Da hast du recht.
Aber deine Variante schließt von vornherein schon einige Fehlerquellen aus.
Da fällt die entscheidung nicht allzu schwer.
Einen schön Tag noch und Danke für die Hilfe.
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.
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.....
CREAD(HANDLE,Lesestatus,Lesemodus,Timeout,Satzanfang,"%r",Eingabe[])
Naja jetzt hab ich zwei verschiedene Lösungen die Funktionieren.
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.
Jetzt bin ich schon zum zweiten mal auf den Kaltstart reingefallen.
Danke das hat geholfen.
gruß
blender
Mal ne andere Frage.
Hast die Anlage auch mal mit nem Kaltstart neu gestartet?
Nee noch nicht. Ich hab doch noch keine änderungen am System durchgeführt.
Oder was bewirkt der noch?
Ja der zweite Punkt ist da...
Wenn ich es manuell nummeriere funktioniert es.
Zeigt er nicht automatisch die fortlaufende nummer an?
Das hat er mal, tut er im Moment aber leide nicht mehr.
Du musst bei dem Inlineformular beim erstellen des Punktes ne 2 für P2 eintragen usw.
Mit dem Inlineformular meinst du den Menüpunkt wo ich den Bewegungsbefehl hinzufüge?
Ok, und wie bekomme ich die Standard einstellungen wieder?Die Jungs die hier dran waren sind ja nur als Anwender angemeldet, was können die denn geändet haben?
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