Hallo zusammen,
hatte jetze auch das Problemm FileZilla zu konfigurieren.
Habe die Einstellungen im Forum gefunden und eine kurze Anleitung "geschrieben".
Hoffe es hilft...
PS:
Steuerung war eine R-30iB Plus
Hallo zusammen,
hatte jetze auch das Problemm FileZilla zu konfigurieren.
Habe die Einstellungen im Forum gefunden und eine kurze Anleitung "geschrieben".
Hoffe es hilft...
PS:
Steuerung war eine R-30iB Plus
Hallo Michael,
habe mein Programm jetzt so abgeändert, dass nur das OFrame neu berechnet wird.
Damit funktioniert es so wie ich es mir vorgestellt habe.
Danke für deine Hilfe und das Erklären der Zusammenhänge. Wieder etwas schlauer geworden.
Gruß
Frank
Hallo Michael,
danke für deine Antwort.
Dann liegt mein fehler darin das ich beim einrichten (teachen) der Werkobjekte schon falsch vorgegangen bin.
Das Problem ist, dass man als Tool den externen TCP auswählt diesen aber nicht mit einem Tool0 oder Greifer anfahren kann. Man muss dieses mit einem Werkobjekt machen. Da ich nur mein "wobjFra_Top" hatte, habe ich dieses benutzt.
Wenn ich dich richtig verstanden habe, muss ich ein Werkobjekt definiere, was der Roboter hält, mit "wobjTool0" mit "0" werten oder ein "wobjGripper" mit den TCP koordinaten vom Greifer und dann neu einrichten.
Ich werde es wohl erstmal mit dem neu berechen versuchen. Schauen was dort für ein Ergebniss raus kommen oder ein oFrame nutzen....
Doof ist, wenn ich das "wobjFra_Top" neu einrichte, muss ich alle Punkte neu teachen. Das sind so ca. 140.... und ich habe noch ein zweites Werkobjekt mit dem selben Fehler
Gruß
Frank
Hallo Gemeinde,
bin zur Zeit bei einer Inbetrienahme und stehe etwas auf dem Schlauch.
Steuerung ist eine IRC5 mit Robotware 6.13.
Es geht um eine Anwedung zum Kleber auftragen. Die Düse ist feststehend und das Werkstück im Greifer.
Es ist ein externer TCP für fie Düse eingerichtet. Das Workobejct ist mit hilfe von drei Punkten über das Menü definiert worden.
Jetzt würde ich gerne eine Service Routine schreiben, dass der Roboter diese Punkte anfährt und der Bediener entsprechend korrigieren kann.
Das anfahren der Punkte und entsprechendes Menü funktioniert.
Was ich aber nicht hin bekomme, ist das neu definieren mit dem Befehl "DefFrame". Ich bekomme nicht die Werte vom uframe wie sie übers Menü definiert werden.
! Points for Work object Frame Top side
LOCAL VAR robtarget pwobjFra_Top_X1:=[[-45.11,-0.30,-0.21],[0.00131732,-0.708765,-0.705439,0.00232098],[0,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
LOCAL VAR robtarget pwobjFra_Top_X2:=[[144.97,-0.06,0.05],[0.00131362,-0.708764,-0.70544,0.00232172],[0,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
LOCAL VAR robtarget pwobjFra_Top_Y1:=[[-0.07,119.74,-0.35],[0.00131498,-0.708765,-0.70544,0.00232215],[0,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
!Workobject im Programm definiert
TASK PERS wobjdata wobjTest:=[TRUE,TRUE,"",[[0.0812176,-0.24294,-0.148185],[0.999999,-0.000840581,-0.000684452,0.000630737]],[[0,0,0],[1,0,0,0]]];
!Workobject über Menü definiert
TASK PERS wobjdata wobjFra_Top:=[TRUE,TRUE,"",[[-300.075,-52.1702,280.842],[0.662865,0.245842,0.243477,0.663996]],[[0,0,0],[1,0,0,0]]];
PROC aaa_test()
! Ermitteln der neuen Werkobjekt-Daten
wobjTest.uframe:=DefFrame(pwobjFra_Top_X1,pwobjFra_Top_X2,pwobjFra_Top_Y1\Origin:=3);
ENDPROC
Alles anzeigen
Irgenwie habe ich das Gefühl ich teache die Punkte mit dem Falschen Tool oder sowas. MIr ist einfach nicht ganz klar worauf sich das Workobject, was ja am Robter ist, bezieht.
Vielleicht hat von euch jemand eine Idee was ich falsch mache...
Wünsche einen schönen 1.Mai!
Hallo ludr93,
du könntest das mit Hilfe einer TCP/IP Socket Verbindung machen.
Hier gibt es auf der Stäubli Hompage eine Dokumetation. Diese findest du unter der Technischen Datenbank (müsstest dich Registrieren/Anmelden).
Bei der Suche mal "socket TCP IP" eingeben. Früher gab es auch mal eine Beispiel Applikation dazu....
Hallo ludr93,
ich weiß nicht ob du dein Problem schon gelöst hast.
Um einen Num in String zu wandeln gibt es den Befehl: "toString".
Schau mal unter der VAL3 Hilfe. Dort ist er erklärt.
Das der Text vom Scanner falsch oder gestückelt ankommt,
Könnte dran liegen das du in deiner Schleife immer wieder ein "clearBuffer()" machst,
Normal kannst du bei den Scannern auch immer ein "Endzeichen" einstellen z.b. 13 für "Carriage-Return". Dann wüsstest du wann die gesendeten Daten zu ende sind.
Schau dir mal diesen Code an:
// Lesebuffer löschen
clearBuffer(sioSerialHandscanner)
// Variablen initalisieren
sVis1_Temp=""
sVis1_e=""
bScanOk=false
// Schleife zum auslesen der Daten
while(bScanOk==false)
// Zeichen aus Lesebuffer auslesen
sioGet(sioSerialHandscanner,nReceive)
// Empfagene Zeichen zum String zusammenbauen
if nReceive>31
sVis1_Temp=sVis1_Temp+chr(nReceive)
endIf
// Empfagene Daten wurden mit "Carriage-Return (CR)" abgeschlossen
if nReceive==13
if sVis1_Temp!=""
sVis1_e=sVis1_Temp
sVis1_Temp=""
endIf
endIf
delay(0)
endWhile
Alles anzeigen
Hallo,
das "$" vor dem "getJntForce()" deutet drauf hin, dass es sich um einen Befehl aus einem Addon handelt.
Bei neueren Val 3 Versionen ist der Befehl mittlerweile Standart.
So habe ich es bis jetzt gemacht:
begin
//
// Auswertung für Scara Roboter (4 Achsen)
//
while true
//
// Auto
//
if bModeAuto
// Load Defaults
nJntForceLimMin[0]=-650
nJntForceLimMin[1]=-650
nJntForceLimMin[2]=-250
nJntForceLimMin[3]=-250
//
nJntForceLimMax[0]=650
nJntForceLimMax[1]=650
nJntForceLimMax[2]=250
nJntForceLimMax[3]=250
endIf
//
// Get Force
//
// Read Forces ("nJntForceCurr" = Array mit 4 Elementen)
getJointForce(nJntForceCurr)
//
for i=0 to size(nJntForceCurr)-1
// String converting for logger
ls_i=toString("",i)
ls_ForceCurr=toString(".2",(nJntForceCurr[i]))
ls_ForceLimMin=toString("",(nJntForceLimMin[i]))
ls_ForceLimMax=toString("",(nJntForceLimMax[i]))
//
//
// Check for MIN Forces
if nJntForceCurr[i]<nJntForceLimMin[i]
if bJntForceMinError==false
// Message for event logger
logMsg("Axis torque failure! | Axis(+1): "+ls_i+" | Force: "+ls_ForceCurr+" | Limit: "+ls_ForceLimMin+" | Mode: "+ls_Mode)
endIf
// Set ErrorAxis for User Screen
nErrorAxisForce=i
bJntForceMinError=true
endIf
// Check for MAX Forces
if nJntForceCurr[i]>nJntForceLimMax[i]
if bJntForceMaxError==false
// Message for event logger
logMsg("Axis torque failure! | Axis(+1): "+ls_i+" | Force: "+ls_ForceCurr+" | Limit: "+ls_ForceLimMax+" | Mode: "+ls_Mode)
endIf
// Set ErrorAxis for User Screen
nErrorAxisForce=i
bJntForceMaxError=true
endIf
endFor
//
delay(0)
endWhile
end
Alles anzeigen
Direkt gibt es da nichts.
Es gibt nur die Möglichkeit selber etwas zu programmieren.
Eine Task die die Achswerte überwacht und entsprechend den Roboter anhält.
Schau dir mal den Befehl "getJointForce()" an.
Bleibt aber die Frage ob die Reaktionszeit für deine Anwendung reicht.
Es müsste entweder über Exportieren oder über Speichern gehen. Weiß nicht ob beim Speichern nicht wieder auf den USB zurück geschrieben wird.
Normal übertage ich meine Programme über PC und Ethernet. Deshalb bin ich mir nicht 100% sicher....
Teste es einfach, wenn du beim Kunden bist!
Wenn du das Programm über USB geladen hast, dass Programm im Applications-Manager anwählen. Dann gibt es unten ein Button "Exp." (Exportieren) sollte die Taste "F3" sein. Dort die "Disk" für die Lokale Festplatte wählen und mit "OK" bestätigen.
Wichtig!
Wenn du die Applikation umbenannt hast, wird sie gespeichert. Dann müsstest du sie noch auf "Autostart" stellen, damit sie nach einem Neustart auch geladen und gestartet wird. Dafür im Applications-Manager "Val3 applictions" anwählen und "F7" (Open) drücken. Dort die Application anwählen und mit Taste "F6" (Mode) das Programm auf "Autostart" stellen. Vorher das alte Programm auf die selbe Art auf "Manual" stellen.
Wenn du das Programm nicht umbenannt hast, wirst du gefragt ob die Applikation überschrieben werden soll. Dann musst du nichts weiter machen.
Das sollte so bei einer CS8 Steuerung sein!
Bei einer CS9 funktioniert es prinzipiell genauso aber die Bedienung ist etwas anders....
Wenn du das Programm über den USB-Stick geladen hast, ist es erstmal nur im Arbeitsspeicher. Du musst es dann nochmal auf der Steuerung speichern. Es ist nicht so wie bei anderen Herstellern, daß Programmänderungen direkt dauerhaft gespeichert sind. Änderungen müssen expliziet gespeichert werden.
Es gibt schon eine SPS. Dies soll aber eigentlich für den Fall sein das der Robi nicht in der Grundstellung ist und er vom Bediener kontrolliert docht hin bewegt werden kann.
Es soll für den Automatikbetrieb sein. Da hilft mir der Tot-Mann Schalter nicht so sehr.
Hallo Gemeinde!
Habe schon mal die Suche bemüht aber nichts passendes gefunden.
Ich würde gerne eine Funktionstaste belegen und nur so lange den Roboter bewegen, solange diese Taste betätigt ist.
Das ganze habe ich schon mal mit einem DO und einem Interrupt simuliert. Aber die Lösung gefällt mir nicht so recht, weil das Programm immer von neuem gestartet wird. Lasse ich ExitCycle weg, bleibt der Programmzeiger beim Rücksprung in der Move... Zeile stehen.
PROC main()
!Initialisierung
!Init;
!Produktionsschleife
WHILE DOutput(doIRBinHome)=0 DO
TEST abfrage(usContinue)
CASE 1:
! Abbrechen (Löschen) eines Interrupts
IDelete sig1int;
CONNECT sig1int WITH iroutine1;
WaitDO DO7, 1;
ISignalDO DO7,0,sig1int;
MoveAbsJ jHome,v100,fine,tool0;
ENDTEST
ENDWHILE
ENDPROC
!Reaktion auf Interrupt
TRAP iroutine1
StopMove\Quick;
ClearPath;
StartMove;
ExitCycle;
ENDTRAP
Gibt es da nicht eine andere Lösung?
Gruß
Frank
Hallo Michael,
ich hatte ja schon so etwas befürchtet, weil ich keine Möglichkeit gefunden habe ein Passwort einzugeben.
Wird das Modul wohl ein Rätsel bleiben.
Gruß
Frank
Hallo zuammen!
Da ich hier neu im Forum bin, möchte ich erstmal allen Hallo sagen.
Bis jetzt hab ich die gelben aus der Schweiz programmiert. Nun habe ich ein paar Kollegen von ABB mit IRC5 Steuerung bekommen. Arbeite mich so langsam in die neue "Welt" ein und die erste Schulung ist in 2 Wochen.
Habe hier ein paar Programme von früheren Projekten die ich mir angeschaut habe. In diesem Programm gibt es eine Verschlüsselte Systemdatei.
Kann mir jemand sagen, wie man eine solche Datei im RS öffnen bzw. auch erstellen kann?
Gruß