Hi pnsStarter,
dann eher FTP, denn png kann er nicht mal einzeln laden.
Hab gelesen, Ethernet/IP ist eine bezahlte Sonderausstattung. Geht die Verbindung dann trotzdem? Gibt es da eine Doku? (FANUC Downloadcenter fand ich nichts)
LG
Hi pnsStarter,
dann eher FTP, denn png kann er nicht mal einzeln laden.
Hab gelesen, Ethernet/IP ist eine bezahlte Sonderausstattung. Geht die Verbindung dann trotzdem? Gibt es da eine Doku? (FANUC Downloadcenter fand ich nichts)
LG
Hallo zusammen,
ich habe eine Aufgabe, die ich bisher so noch nie erledigen musste und daher keine Ahung wie ich dies bewerkstellige.
Ich habe einen Ordner "PICTURES" mit einigen .png Dateien. Diese muss ich auf FR legen, samt Ordner. Leider funktioniert "LOAD" so nicht. Nichtmal einzeln kann ich .png Dateien laden um sie später in den Ordner zu kopieren. Meldung "not loadable".
Hat jemand eine Idee wie ich den Ordner samt Bilder auf FR ablegen kann?
Vielen Dank im Voraus.
Hab nun die Lösung für mich gefunden, die sich sogar 1:1 übernehmen lässt und nur noch etwa TP Code dazu benötigt wird.
Von TitusLepic: MAKEUF
KAREL Übergabe: GET_TPE_PRM
Und Punkte auslesen mit: GET_POS_REG
Drei Punkte PR[1] PR[2] PR[3] wie gewollt per JPOS einlesen, die Frame Nummer [1] angeben wo es gespeichert werden soll und das KAREL Programm damit aufrufen:
Call MAKEUF(1,2,3,1)
Lösungsweg mit $mnuframe[1,#] von KaiF schonmal der richtige Ansatz um die Lösung zu finden. Danke euch.
Hier TitusLepic`s KAREL Programm:
PROGRAM MAKEUF
VAR
origPR : INTEGER
xPR : INTEGER
YPR : INTEGER
origLoc : XYZWPREXT
xLoc : XYZWPREXT
yLoc : XYZWPREXT
frameNum: INTEGER
prmType : INTEGER
realVal : REAL
strVal : STRING[1]
STATUS : INTEGER
BEGIN
GET_TPE_PRM(1,prmType,origPR,realVal,strVal,STATUS)
IF (STATUS <> 0) OR (prmType <> 1) then
WRITE TPERROR('Problem getting origin', cr)
ENDIF
GET_TPE_PRM(2,prmType,xPR,realVal,strVal,STATUS)
IF (STATUS <> 0) OR (prmType <> 1) then
WRITE TPERROR('Problem getting X position', cr)
ENDIF
GET_TPE_PRM(3,prmType,yPR,realVal,strVal,STATUS)
IF (STATUS <> 0) OR (prmType <> 1) then
WRITE TPERROR('Problem getting Y value PR', cr)
ENDIF
GET_TPE_PRM(4,prmType,frameNum,realVal,strVal,STATUS)
IF (STATUS <> 0) OR (prmType <> 1) then
WRITE TPERROR('Invalid uframe', cr)
ENDIF
origLoc = GET_POS_REG(origPR,STATUS)
xLoc = GET_POS_REG(xPR,STATUS)
yLoc = GET_POS_REG(yPR,STATUS)
$MNUFRAME[1,frameNum] = FRAME(origLoc,xLoc,yLoc)
END MAKEUF
Alles anzeigen
Hallo Kai,
Jain, verschieben oder ein bereits bekannter Punkt ist es nicht.
Dies sollte wie beim teachen über aktuelle JPOS Position im Code erfolgen (dachte da an 3x wie beim teachen üblich OP XP YP), macht man dies 1x wie vorgeschlagen, hängt der Frame sonst wo im Raum.
Ich habe mal versucht es übertrieben Bildlich darzustellen:
A (grün) und Frame (rot) ist der bekannte Frame von Beginn an.
Nun sollte aber ein Frame "variabel" sein und über den Code neu setzbar.
Wie zB auf Roboter Position B (orange) und Frame (blau)
Der Frame wird nicht nur in X / Y / Z verschoben, sondern ggf auch W P R.
Daher sollten für die Position vermutlich alle drei Punkte beschreibbar sein.
$MNUFRAMENUM[group_no] > Die stelle im Skript fand ich, aber nur eine maue Beschreibung dort.
Leider fällt mir da nichts ein, wie ich den Frame so manipuliere, dass er dort ist, wo er sein sollte.
Geht meist eigentlich nur um mm Bereich vor allem in W P R.
(Warum Frame vorher nicht bekannt? Antwort, ggf im Betrieb bauliche Abweichung der Abnahmestelle (schräger, versetzter). Der Frame muss ggf durch den Bediener korrigiert werden. Nicht im iPendant, sondern er sollte schnell den Roboter in WORLD auf die drei Punkte fahren und im Terminal 1 Button drücken. Quasi modifiziertes, ohne FANUC Bediener Lehrgang, teachen)
Hallo zusammen,
ich habe mal wieder eine Frage, die ich bisher nirgends fand.
Ich sollte die FRAMES und TOOLS mit eigenen Punkten über einen Code, TP, KAREL etc befüllen.
Wie bekomme ich das hin, das ich Approach point 1-3, beschreibe und er dann als initialisiert gilt?
Habt ihr Tipps, Doku etc pp?
Danke euch im Voraus.
Hallo KaiF,
bei mit macht der Parser was er soll, bringt zwar nicht alle
Ausgaben, die ich erwarte, aber am Ende sind alle
Daten der XML in den KAREL Vars drin.
Ich muss eben das vorgegebene Struct anpassen und die XML
sollte dann übereinstimmen.
Falls das geholfen hat.
Grüße
Guten morgen Hermann,
ja das stimmt, mit Roboguide und KAREL ist es leider nicht so easy wie mit VisualStudio
Den Fehler habe ich nun entdeckt. Mir konnte mal die Zelle nicht geladen werden und Roboguide erstellte eine Kopie. Statt in den neuen Pfad zu gehen, ging er in den alten. Dort erstellte er die leere Datei xml_file. Danach erstellte ich für den xmlParser eine neue Zelle. Pfade waren dann OK und er konnte auch die xml_file lesen.
Der Tipp, mit:
XMLSTRCT XMLSTRCT_T
dort draufgehen und "Enter" drücken.
für einen Anfänger in KAREL Gold Wert, Danke Ihnen vielmals für die Hilfe.
Dann wäre das Thema erfolgreich erledigt.
____________________________________________________________________
Nur noch eine kleine Zusatz Frage:Leider ist der Teil des Dokumentes hier mager auf 2 Seiten. Man könne sie am TP mittels Buttons in ein File speichern, was aber sinnfrei ist, von file in file.
Auf die schnelle nichts per google oder in dem vorliegenden FANUC Dokument gefunden.
Wie in Hochsprachen
R[1]=xmlstrct_t.first
wird der Zugriff vermutlich nicht gehen.
Da ist der KAREL Editor wieder mager ohne IntelliSense Funktion und nur der Anzeige beim übersetzen "Error in line xy" ohen Korrektur Vorschlag.
Wie bekomme ich per KAREL diese Variable in das Register?
Benötige leider doch nochmal Hilfe von ihnen.
Ich habe mal alles wie sie versucht, es läuft wie sie sagen auch durch, aber es scheint nicht die Datei zu öffnen und daraus zu lesen, denn dann sind nur folgende KAREL Var zu sehen:
Leider sind dies nicht die Attribute aus der xml Datei von XMLSTRUCT_T
Ich vesuchte auch RW, anstelle von RO wie in dieser PDF aufgeführt ist.
Demnach solle dann die Datei erstellt werden wenn sie nicht vorhanden ist.
Ich nannte sie mal xml_file2 etc pp doch sie tauchte nie unter "Robot_1\MC" auf.
Es scheint eher, als das Programm (von ihnen) ab Zeile 76 überspringt.
Entschuldigung, hier natürlich der Code.
Versucht es:
1. normal über File > UT1 zu laden.
2. Über ColdStart und CTRL Start
3. und wie von rob76 hier beschrieben:
"Im File MENU auf COPY, Device FR: auswählen und rüberkopieren....so sollte es gehen"
Bei mir auch nach Anpassung dennoch "file not found".
Jedoch ist es zumindest dort drauf:
Code xmlparser
PROGRAM xmlparse
%COMMENT = 'XML Parse'
%NOLOCKGROUP
%NOPAUSESHFT
%NOPAUSE = ERROR + COMMAND + TPENABLE
%NOABORT = ERROR + COMMAND
%ENVIRONMENT xml
%INCLUDE klerxmlf
CONST
MYXML_CONST = 3
TYPE
xmlstrct_t = STRUCTURE
first : INTEGER
second : REAL
third : BOOLEAN
fourth : STRING[20]
ENDSTRUCTURE
-- Local Vars
VAR
xml_name : STRING[20]
tag_name : STRING[32]
text : ARRAY[32] OF STRING[128]
attrnames : ARRAY[32] OF STRING[32]
attrvalues : ARRAY[32] OF STRING[64]
xml_file : FILE
status : INTEGER
xmlstrct: xmlstrct_t
tag_ident: INTEGER
func_code: INTEGER
text_idx: INTEGER
numattr: INTEGER
textdone: BOOLEAN
done: BOOLEAN
console: FILE
startdata: BOOLEAN
--
--
-- There are two types of XML file constructs. In one the end tag is
-- embedded IN the start tag IN the other the END tag is separate. A
-- proper parser must handle both tag constructs
--
-- For the case that the end tag is separate from the start tag
-- (Figure 1.1)the following writes show the sequence OF returns:
-- Scanned (Rev D) xmlstrct_t 3 100 129015
-- Start Tag processing...
-- Scanned (Rev D) xmlstrct_t 3 101 129015
-- End Tag
-- Processed at start tag...
-- Scanned (Rev D) xmlstrct_t 0 101 0
--
-- For the case where the end tag and start tag are together (Figure 1.2)
-- the following writes show the sequences OF returns:
-- Scanned (Rev D) xmlstrct_t 3 101 129015
-- End Tag
-- End Tag processing...
-- Scanned (Rev D) xmlstrct_t 0 101 0
--
BEGIN
SET_FILE_ATR(console, ATR_IA, 0) -- ATR_IA is defined in flbt.ke
OPEN FILE console ('RW', 'CONS:')
IF UNINIT(xml_name) THEN
xml_name = 'mc:kl16004.xml'
ENDIF
SET_FILE_ATR (xml_file, ATR_XML) -- XML
CLR_IO_STAT(xml_file)
OPEN FILE xml_file ('RO', xml_name) -- Open does new operation
status = IO_STATUS(xml_file)
IF status <> 0 THEN
POST_ERR(status, '', 0, 0)
ABORT
ENDIF
XML_ADDTAG(xml_file, 'xmlstrct_t', 32, FALSE, MYXML_CONST, status)
textdone = TRUE
done = FALSE
startdata=FALSE
WHILE (done = FALSE) DO
XML_SCAN(xml_file, tag_name, tag_ident, func_code, status)
IF(status = 0) THEN
done= TRUE
ENDIF
WRITE console ('Scanned (Rev D) ', tag_name,' ', tag_ident, ' ',func_code, ' ',STATUS,' ', CR)
IF (status = XML_FUNCTION) THEN
status = 0
SELECT tag_ident OF
CASE (MYXML_CONST) :
SELECT func_code OF
CASE (XML_START) :
WRITE console ('Start Tag processing...', CR)
text_idx = 1
XML_SETVAR(xml_file, 'kl16004', 'xmlstrct', status)
-- Already looked at the attribtues get the text
XML_GETDATA(xml_file, numattr, attrnames, attrvalues,
text[text_idx], textdone, status)
startdata = TRUE
CASE (XML_STEND) :
-- This tag is never returned
WRITE console ('StEnd Tag', CR)
CASE (XML_END) :
WRITE console ('End Tag', CR)
IF(startdata = TRUE) THEN
startdata=FALSE
WRITE console ('Processed at start tag...', CR)
ELSE
WRITE console ('End Tag processing...', CR)
text_idx = 1
XML_SETVAR(xml_file, 'kl16004', 'xmlstrct', status)
-- Already looked at the attribtues get the text
XML_GETDATA(xml_file, numattr, attrnames, attrvalues,
text[text_idx], textdone, status)
ENDIF
CASE (XML_TXCONT) :
-- Usually the user will do one or the other but not both of
-- these calls
text_idx = text_idx + 1
XML_GETDATA(xml_file, numattr, attrnames, attrvalues,
text[text_idx], textdone, status)
ELSE:
ENDSELECT
ELSE:
ENDSELECT
ELSE
IF(status <> XML_SCANLIM) THEN
POST_ERR(status, '', 0, 0)
done = TRUE
ENDIF
ENDIF -- Good status from xml_parse
ENDWHILE
-- This is NOT required but allows the user TO dynamically remove
-- AND add tags
XML_REMTAG(xml_file, 'xmlstrct_t', status)
CLOSE FILE xml_file
status = IO_STATUS(xml_file)
IF status <> 0 THEN
POST_ERR(status, '', 0, 0)
ENDIF
END xmlparse
Alles anzeigen
Code xml_name
Hallo zusammen,
da ich recht neu mit der Arbeit mit Robotern bin, muss ich mich von Beispiel zu Beispiel hangeln.
Nun würde ich gerne eine XML erstellen, wo Daten in Strukturen abgelegt werden (einfach und erledigt).
ABER nun kommt das komplett neue, KAREL und das Zusammenspiel im Roboter.
Ich versuchte das Beispiel von FANUC:
Dokument: MARRC75KR07091E Rev L
Seite: 10.5.3 Example KAREL Program Referencing an XML File ab 10-20
XML File: xml_name (Leider benomme ich die xml_name nichtmal im Roboguide geladen. Meldung "file not loadable". Natürlich gut für ein Example.)
KAREL: xmlparse (Lässt sich problemlos ausführen, aber findet natürlich die XML dann nicht.)
In viele Roboter-/Software Seiten findet man nichts zu dem Thema oder nur fast exakt dieses Beispiel von anderen Usern,
die ebenfalls Probleme damit haben und nur mal 2-3 kleine Änderung tätigten, wie xml File name ändern etc pp.
Nun meine Frage, kennt sich jemand damit aus und kann dieses erklären oder ein eigenes kurzes Bsp bringen?
ODER Tipps, wie ich in einem externen File, "das sich auch in den Roboter laden lässt", lesen kann und somit die Register befüllen kann.
Viele Dank im Voraus
Hallo R47,
das hört sich nach dem richtigen Weg an. Konnte mit dem Sharepointdesigner2007 auch
STM Seite erstellen und im iPendant öffnen.
Jedoch finde ich nichts und auch nach nun 2 Tagen "rumspielen", wie ich auf die HTML Seiten wie "PALREG.VA" oder "POSREG.VA" etc zugreifen kann, um diese zu manipulieren.
Gibt es hierzu Links oder PDFs in die man sich einlesen kann?
Ggf kurzes Beispiel wie ich Register R[1] oder Positions Register PR[1] lesen/ schreiben könnte / Zugriff bekomme?
Bei Fanuc downlad center fand ich nichts.
Online einen Link, der zu einem ähnlichen Thema hier von ihnen führt:
RE: HTML Seite auf TP erstellen
Hallo zusammen,
zu mir kurz:
Bin recht neu im Job (PLC Grundkenntnisse / FANUC Grundschulung für Roboter /Aufbau Kurs folgt / Hochsprachen Programmieren, dies und das) und ganz neu im Forum, habt Nachsicht mit mir.
Nun zu meiner Frage:
Ich bin zz im Roboguide dran, den Variablen Zugriff zu versuchen. Dies sollte über den Wizard geschehen. Dort würden wir eine HTML
Seite im iPendant erstellen. Dort sollten wir Zugriff auf die Register und PR-Daten haben (lesen und schreiben). Am besten mit einem Befehl anfahren können.
Fand bisher nichts funktionierendes. Im Wizard könne man KAREL Programme starten und damit Variablen vom Webserver ändern oder lesen. Im Webserver
sind ja alle Daten vorhanden, die man sich nur vorstellen kann, also optimal. Sogar Einzelwerte der X Position etc. Nur bekomme ich keine Werte gesetzt oder abgerufen über KAREL.
Hat jemand Erfahrung damit?
Über Wizard mit den "vorgefertigten Bausteinen" ist dies leicht (im Fall Register Wert), jedoch zu eingeschränkt für das was benötigt wird.
Daher die Vermutung KAREL oder HTML via Webserver.
Danke im Voraus für die Hilfe