Beiträge von thoms

    Hallo nochmal,


    also es stimmt offenbar doch (entschuldige die Zweifel) aber die Präzision auf 1er ist bei 32 bit Systemen nach IEEE mit 8bit exp und 23bit mantisse offanbar nur bis 1.6777215*10^7 möglich. :wallbash: :wallbash: :wallbash:


    Ärgerlich!!!
    Bedeutet für meinen Zufallsgenerator dass ich die letzten 8 Bit der Integervariable (SIGNAL oZufall2 $OUT[544] to $OUT[575]) also $OUT [568] bis $OUT [575] mit 0 maskieren muss.


    Danke für die Hilfe!
    Gruß Thoms

    Zitat

    Es gibt auf jedem Rechner für bestimmte Datenformate bestimmte zulässige Datenbereiche, d.h. zur Darstellung der Zahlen steht nur eine gewisse Anzahl an Bits zur Verfügung. Soweit ich weiss sind intern die Reals etwa single precision floats (auf 32Bit-Systemen) und die reichen eben nicht um deine Zahl darzustellen.


    Hi,


    also ich glaube daran kann es eigentlich nicht liegen, denn laut Handbuch (Programmierhandbuch expert v 5.2) gehen
    INT bis (2^31)-1 = ca. 2,2*10^9
    und
    REAL bis 3.4*10^38


    Allerdings hab ichs vorhin mal mit ner kleineren Zahl ausprobiert (x*10^5) und da hat es Funktionert.. aber laut dem angegeben Wertebereich.. Ich mein von 10^9 auf 10^38 ist schon noch ein stück Platz.... :nocheck:


    Ich versuch einfach mal die höchstwertigen 3 oder 4 Bits der Intergervariablen mit 0 zu maskieren und guck was da raus kommt.


    Aber wenn jemand noch ne Idee hat dann wäre ich für die Hilfe sehr dankbar!


    Gruß thoms

    Hi,


    ich habe folgendes Problem


    ich habe folgende zahlen
    INT zahl =824036929
    REAL ZahlR


    bei
    ZahlR=Zahl


    bekomme ich allerding
    ZahlR=824036900


    das finde ich etwas verwirrend. woran kann das liegen?


    ich will folgendes implementieren: berechnung modulo (division mit rest)



    Robbi ist ein KR3 mit KRC 2, KRL 5.2.12


    Gruß Thoms

    Grüße,


    da ich gerade beim Schreiben meiner Diplomarbeit bin wolte ich gern mal folgendes wissen:


    Ich hab eine Steuerung KRC 2 - worfür steht das KRC? :huh: Ich nehme mal das KR steht für kuka robotics oder sowas?!
    Wenn ich im Robbi in der Hilfe gucke, hab ich da was stehen von Version KR C 5.2.12 - wofür steht dort das KR C? Soweit ich das verstanden habe ist dort die Softwareversion angegeben - ist das sowas wie die Betriebssystemversion? :huh:


    Wieso ist es eine KRC 2 aber eine KR C 5.2.12- was ist der Unterschied zwischen KRC und KR C? :huh:


    Hat die Programmiersprache von Kuka eigentlich auch nen Namen? Und wo kriege ich die verwendete "Programmiersprachenversion raus? :huh:


    Gruß Thoms

    Hallo,


    habe das Problem dass sich POV=100% nicht einstellen lässt.


    Bin im Expertenmous im T2 (hab auch schon auf T1 und AUT gewechselt). Wenn ich auf der rechten Seite (oben) 100% einstelle, bleibt totzdem unten in der Statuszeile das POV =35% stehen. Hab schon Kaltstart und Warmstart gemacht aber es ändert sich nix.... :bawling:


    habs sogar schon im programm mit

    Code
    if $AUT then
       $OV_POV=100
    endif


    probiert aber selbst das geht nicht. :bawling:


    Bis vor 5 Minuten ging noch alles. Dann hab ich nen Kaltstart gemacht und es geht nicht mehr. :(


    Kann mir jemand weiterhelfen?


    Gruß Thoms

    Danke erstmal für die Antworten.


    Kann es sein dass die SAK fahrt nicht in Interruptprogrammen auftreten kann?


    Hab folgendes:



    Er sagt mir aber erst SAK erreicht wenn ich beim "home im start" angekommen bin und nicht beim PTP $AXIS_ACT im Interrupt.


    Gruß Thoms

    Hallo,


    erstmal eine Grundlagenfrage:


    Was ist eine SAK fahrt überhaupt und wofür steht das SAK?


    Zweitens: muss ich die immer beim Programmstart machen, auch beim Automatikbetrieb ?


    Ich warte nach dem Programmstar,t auf das setzen eines Schlüsselschalters. Davor befindet sich der Roboter idealerweise in einer Schlaf/Transport-Position {x 559.7709,y 0.168184,z 628,a 0,b 0,c 0,s 6,t 18} was ungefähr {a1 0,a2 0,a3 90,a4 0,a5 -90,a6 0} entspricht.
    Nach setzen des Schlüsselschalters soll er dann folgendes machen:



    Ist es igendwie möglich dass man bis zum ptp home nicht die ganze Zeit die Antriebsfreigabe auf der Rückseite des KCP und Programmstart vorwärts hält sondernn dass er nach kurzem antippen von beidem schon den Rest automatisch anfährt -
    dass er quasi nach dem ersten Punkt den ich mit Antriebsfreigabe und Startplus anfahre alles Automatisch macht? Oder muss der erste Punkt bevor er automatisch fährt unbedingt die Homeposition sein? Ist es egal ob man zu beginn LIN oder PTP fährt?



    Gruß Thoms

    Ja, so geht es sicher auch. Daran hatte ich auch schon gedacht, wollte aber eine elegantere Lösung.
    Wirklich elegant ist das mit einem weitern Programm drum legen und dort den Intterrupt zu deklarieren zwar auch nicht aber gefällt mir etwas besser - wobei GOTO Anweisungen ja in keinem fall wirklich elegant sind :zwink:.


    Danke trotzdem.


    Gruß
    Thoms

    Ok, aber ich will dass der das nicht nur macht wenn er aus unterprogramm3 kommt. Ich will, dass der IMMER egal ob aus unterprogram 1, 2, 3,4,1_1, 1_2, 2_1,2_2, etc. oder dem Hauptprogramm kommend bei auslösung des Interrupts an die Stelle "sprungmarke" (wo immer die sich auch befindet im Hauptprogramm) springt und dort ganz regulär mit dem Hauptprogrammablauf fortfährt.


    Folgendes vielleicht zur Problemherkunft:
    Messestand: Roboter macht verschiedene Logofahrten so lange bis ein Schalter betätigt (das ist der Interrupt--> Schalter betätigt) wird. Die Logofahrten werden zufällig ausgewählt und befinden sich jeweils in seperaten Unterprogrammen, genauso wie die Logofahrt auswahl ein Unterprogramm ist (Hauptprogramm --> UP_Logoauswahl --> UP_Logofahrt). Wenn der Schalter betätigt wird (interrupt anfang) soll er das Logo ablegen und an einen weiteren Schalter fahren. Ist er an dem Schalter wird eine Lichtschranke "deaktivert" (überbrückt), der Messerbesucher kann was in einem bestimmten bereich machen. Ist der Besucher aus der Lichtschranke wieder raus, dann fährt der Robbi auf ne HOME. (hier interrupt ende) Eine Kamera wird getriggert, Bild ausgewertet, der Robbi macht noch zwei drei andere sachen, holt sich entsprechend der Bildauswertung ein Goddie und legt das in ne Ausgabe. Dann wartet er ein bisschen und fängt wieder von vorne an mit den Logofahrten.


    Jetzt soll er immer wenn der Schalter betätigt wurde nach dem ablegen des gerade gegriffenen objektes wieder die Kamera triggern und von dort genauso fortfahren (triggern, auswerten, was machen, Goodie holen, goodie abgeben). Auch wenn er gerade ein Goodie abgeholt hat (und es noch gegriffen hat) soll er das Goodie erst ablegen, an den Schalter fahren, den Messebesucher was machen lassen, dann die Kamera wieder Triggern un auswertung, etc...
    Dabei ist es der Regelfall, dass der Schalter während einer der Logofahrten betätigt wird. Es ist allerdings auch möglich dass er nicht bei der Logofahrt sondern beim triggern, Goodie holen, Goodie ablegen betätigt wird. Dann soll er, je nach dem was er gegriffen hat das Objekt an einer anderen Stelle ablegen. Das Logo immer an der Position wo das Logo normalerweise auch abzulegen ist, das Goodie, wenn er es hält, aber nicht in der Regulären Goodie-Ablage sondern eben woanders.


    Ok.. Sry für so viel Text, aber weiß einfach nicht wie ich das Problem einfacher beschreiben soll. Es steht eigentlich soweit alles: Kameraprogramm, Logofahrten, Zufallsgenerator, Goodie holen, Goodie ablegen,.. nur eben das mit dem Interrupt funktioniert noch nicht so wie ich mir das vorstelle.


    Danke für eure bisherige und weitere Mühe!

    Hmm, also danke erstmal für deine Antowrt, aber ist glaube ich nicht dass was ich meine - liegt sicher daran, dass ich mich auch nicht so deutlich ausgedrückt habe wie ich das vielleicht hätte tun sollen ;)


    Ich schreibs nochmal so auf wie ich weiß dass es nicht funktioniert aber das was ich will wohl besser ausdrückt.


    Er soll also immer das komplette Hauptprogramm ausführen, aber sobald der Interrupt geworfen wird zwei drei sachen machen und dann immer an sprungmarke weiter machen. Ich kann also auch nicht ne WHILE-Schleife mit dem BOOL Interrupted um das Hauptprogramm legen



    weil er ja dann erst, wenn Interrupt z.B. in unterprog3 aufgerufen wurde, noch unterprog4 abarbeitet, ehe er dann aus der While springt.
    noch dazu sind die unterprogramme eben geschachtelt, also in unterprogX kommen teilweise noch 2 weitere Ebenen und BREAK/RESUME bricht ja glaube ich nur eine Unterprogrammebene ab, oder?


    Vielleicht hab ich auch nen Denkfehler bei dem BREAK/RESUME und es funktioniert so?! :denk:


    Gruß
    Thoms

    Hallo,


    ich will folgendes anstellen: Roboter fährt bis Interrupt ausgelöst wird--> Wenn der Interrupt ausgelöst wird fährt der Robbi an bestimmte Koordinaten --> Wartet bis ein bestimmter Eingang TRUE wird.
    Sobald das der Fall ist, soll an einem bestimmten Punkt des Hauptprogramms weiter gemacht werden.


    Geht ja soweit ich das verstanden hab zu einem gewissen teil mit BREAK und RESUME nur dass er eben da mit dem Programm weiter macht wo er aufgehört hat.


    habe allerdings folgendes



    und


    Jetzt will ich, dass er, egal ob er gerade in unterprogramm 1,2,3,1_1,1_2 oder sonstwo ist, nachdem er den Interrupt abgearbeitet hat immer an "sprungmarke:" im hauptprogramm weiter macht (unabhängig davon ob das nun eine wirkliche Sprungmarke für "GOTO" wäre oder zum Beispiel gleich das unterprogramm 2 - allerdings mit der Bedingung, dass danach eben ptp und unterprogramm 3 folgen).


    Geht das überhaupt?
    Wenn ja, wie?


    Gruß thoms

    Hmm, also ich habs bei meinem mit IN ausprobiert, da bringt er mir nen Fehler. Welchen weiß ich nicht mehr.
    Hab deins nicht abgepinselt, nur bei meinem anstatt dem OUT das IN rein geschrieben.


    Naja, ist aber auch nicht weiter tragisch. Mach ichs eben über den Umweg den Text erst in ein CAHR-Feld zu schieben und dann auszugeben. Die zwei Zeilen mehr machens auch nicht mehr fett ;) ... danke trotzdem.


    Vielleicht pinsel ich deins bei gelegenheit mal ab und probiers damit.


    Gruß Thoms

    Sooo.. die Endmeldung:


    Es funktioniert. Und die Lösung ist ziemlich trivial.
    Es geht mit Definition:

    Code
    DEF hinweismeldung (Parameter[]: OUT)
    ...
    CHAR Parameter []
    ...
    SWRITE($MSG_T.KEY[],STATE,OFFSET," %s",Parameter[]
    ...


    Wichtig ist hierbei dass dort OUT und nicht IN steht --> fragt mich aber bitte nicht warum das so sein muss...
    Aufruf:

    Code
    DECL CHAR Meldung[50]
    ...
    Meldung[]= "es funktioniert"
    hinweismeldung(Meldung[])


    Was nicht funktioniert ist Aufruf:

    Code
    ... hinweismeldung ("es funktioniert nicht")


    Schade dass man an sich selber kein "Danke" schicken kann ;)

    AHHHHH.. ich werd hier noch blöde!!! :wallbash: :wallbash: :wallbash:
    Jetzt sagt er mir nicht mehr dass die Parameter nicht verträglich sind - jetzt ist hinweismeldung angeblich nicht als Unterprogamm vereinbart.. AHHHHH :wallbash: :wallbash: :wallbash:


    :hilfe::bawling::bawling::bawling::hilfe:

    Also ich glaube das erste Problem hab ich gelöst:


    Es muss heißen:

    Code
    DEF heinweismeldung (Parameter[50]:IN)
    ...
    DECL CHAR Parameter[]
    ...
    SWRITE($MSG_T.KEY[],STATE,OFFSET," %s",Parameter[])  
    ...


    Allerdings immernoch das Problem in dem anderen Programm dass aktueller/formaler Parameter nicht vertäglich sind :(

    Hallo, ich habe ein neues Problem was damit zu tun hat:


    habe folgenden code:



    dabei tritt erstmal folgendes problem auf:
    zeile 1: Parameter nirgends deklariert
    zeile 3: Keine Feldgrenzen in Parameterspezifikation zulässig
    zeile 25: Name nicht als Feld vereinbart SWRITE($MSG_T.KEY[],STATE,OFFSET," %s",Parameter[])


    wenn ich in der zeile 3 die feldgrenzen raus lasse, also: DECL CHAR Parameter[] dann bringt er mir zwar keine fehler aber sagt mir dann als STOP: Speicherbedarf für Parameterliste zu hoch :waffen100:


    des weiteren habe ich dann in einem anderen programm einen string definiert bei dem das geht


    in der dat:

    Code
    DECL CHAR sVerloren[50]


    in der src:

    Code
    sVerloren="Sie haben verloren!"
    
    
    heinweismeldung (sVerloren)


    Fehlermeldung: Typ aktueller/formaler Parameter nicht verträglich


    wo ist das problem? sind doch beides strings..
    und

    Code
    hinweismeldung ("sie haben verloren")


    bringt die gleiche fehlermeldung.



    des weitern: wenn ich beim ersten problem die deklaration in die dat verschiebe:


    also

    Code
    DEFDAT hinweismeldung PUBLIC
    
    
    DECL CHAR Parameter[50]
    
    
    ENDDAT


    dann sagt er mir bei der dat als fehlermeldung:
    zeile 2: ENDDAT Satz nicht vorhanden :waffen100:


    wäre schön wenn jemand helfen kann