\Stop can be very hard on the robot, if you have a large payload it's quite ugly too see. \SStop is much better, in my experience the drift is limited, like 5mm at 200mm/s. What are you searching for?
Posts by DPKG
-
-
You can copy your "base" UF and shift it along Z by as many layers as you need, then palletize in this new frame.
-
The values between parentheses are the peaks. They reset at each servo on. The last detected collision data is logged in the reductor's status page.
-
If you move it by program (L PR[x], L PR[x], offset PR[y]) does it move in a straight line? If it does, it ain't mechanical/electrical/mastering related. Do you have wrist jog enabled when in teach? It shows up as W/TOOL, W/USER, W/JGFRM on the pendant.
-
I'm commissioning my first KRC4 Compact with KSS8.6 these days. It can be reached using remote desktop when connected to X69, but not over X66. No idea why. Buuuuuuut... I've installed TightVnc, enabled "Connect to RDP sessions" from its settings panel, created an entry for it in kliconfig and we're back to KRC2 times!
If someone else wants to try to replicate
Password for the vnc auth is the same as for rdp, robot is a profinet one, virtual5 does both profinet io and windows, vnc server listens on 5900 tcp, tvnc 2.8.63 64bit running as a service.
-
It was a feature. They removed it from R-30iAs onwards...
-
On those old controllers if USER1 and USER2 buttons on the SOP get dirty and fail closed, the controller would boot like when PREV and NEXT are pressed on the TP, straight to the boot menu and to controlled/init start selection...
-
Usually I program Staubli robots creating a state machine inside a switch-case statement, this way I can structure the program more like a FANUC robot.
With you Comau as an example, something like unloading 2 parts, with the robot trying to pick each one again, would look like this:
Code
Display MorenStep = 0 while (true) switch (nStep) case 0 if (diUnloadRequest == true) nStep = 10 endIf break case 10 //Unload part 1 movej(pMesa, tool[1], mMesa) movej(appro(pMesa[1], trMesaApprox), tool[1], mMesaApprox) movel(pMesaPega[1], tool[1], mMesaPega) waitEndMove() delay(0.2) ... nStep := 11 break case 11 //Check part unloaded if (diPartPresent[1] == true) //Error: part not unloaded nStep = 12 else //Ok, unload next part nStep = 20 endIf break case 12 //Buzzer on, wait for alarm reset doBuzzer = true wait(diFaultReset == true) doBuzzer = false nStep = 10 //Try picking the part again case 20 //Unload part 2 ... break case 21 //Check part unloaded if (diPartPresent[2] == true) //Error: part not unloaded nStep = 22 else //Ok, unload completed nStep = 0 endIf break case 22 ... break endWhile
Of course, as TygerDawg pointed out, VAL3 is much more powerful compared to the languages used by the other robots.
I would try to take advantage of the many features it offers.
-
On e-series:
- Connect via TCP to the robot's dashboard server (port 29999)
- Send this string: get operational mode, terminate it with \n
- The robot should reply depending on the active mode: MANUAL, AUTOMATIC or NONE
You can get Local/Remote status the same way, just ask it is in remote control, answer is true or false.
For more info check: Dashboard Server e-Series, port 29999
-
-
You could use SET_FILE_ATR to read up to a terminator character (ATR_EOL), by default it's Carriage Return.
Then you'll read a variable length string without specifying the number of bytes:Check out the reference manual, chapter 7, file IO.
-
When you're including iscom_CFG in your getPath the compiler will replace the %INCLUDE iscom_CFG with the contents of iscom_CFG, so you'll get...
... and it will not compile, because there are 2 program declarations.
You can import a variable from another program with the syntax:
as iscom_CFG is doing. (On itself?)Maybe iscom_DECL is just the Var FROM iscom_CFG list you have to include, but I'm only speculating.
-
I'm sorry, I completely missed the last part.
You're correct, the compiler does not allow mixing ANDs and ORs in any way.
It works the same way as the WAIT instruction in TP programs.Assuming you only need to apply ands and ors to IO, you could define your condition in a marker.
The marker cannot be written from KAREL, you'll need a TP program to define it:
Then you can wait on it:
-
Try specifying the desired IO/variable state in the WAIT FOR statement, it should compile:
WAIT FOR DIN[1] = ON OR timeout = TRUE
-
You can try something like:
CodePROGRAM hiddenvar %INVISIBLE VAR Var_B : INTEGER -- I don't want to show this one in the DATA menu of the TP, but need to be global BEGIN END hiddenvar
CodePROGRAM test VAR Var_A : INTEGER --I want this one can be access from the DATA menu of the TP Var_B FROM hiddenvar : INTEGER -- I don't want to show this one in the DATA menu of the TP, but need to be global BEGIN --blablabal END test
Var_B will be stored in hiddenvar.vr and, since hiddenvar.pc is %INVISIBLE. it will not be shown anywhere on the TP.
It will serve normally as a global (external) variable in test.pc. -
When you %INCLUDE something, the contents of the included file will be merged with the main file, replacing the %INCLUDE directive.
Your K_Vars.kl should become:
Then your k_Main.kl will compile correctly.
Beware the %INCLUDE order and position, global variables declarations are on top, routines must be defined before beeing used and so on.
-
You could also use SET_VAR, the variable name is passed as a string, the value needs to be of the correct type:
SET_VAR(ENTRY, '*SYSTEM*', '$SGSCH1[2].$THICKNESS', (intThick/ 10), STATUS)The opposite is GET_VAR, it works the same way.
-
MODE11 signals an anomaly in the mode switch (AUTO, T1, T2).
The AUTO position has 2 channels wired on the switch (MODE11 and MODE12), the first one is not coherent with the other one, hence the error.
You may want to check the wiring of the switch, expecially if it has been remoted.