What Panic said^^
Also, when recording position with interrupt, use $pos_int instead of $pos_act.
What Panic said^^
Also, when recording position with interrupt, use $pos_int instead of $pos_act.
DECL E6AXIS MyAxisVariable
1. why we use E with 6 axis.
E6AXIS is a structure extending AXIS struc with 6 external axes.
2. AXIS_ACT_MES what the mean of MES.
Short for MEaSured. $Axis_act returns programmed positions of axes (as they should be on path), this variable returns them measured (as they are). The difference between them most of the time is minuscule.
and my other question is that if i program in my smart pad like...
PTP {X100, Y30, Z10, A0, B6, C23}
then by this single step, will robot go on this position ? like x100, y30 etc.
You need spaces after component names like: PTP {X 100, Y 30, Z 10, A 0, B 6, C 23}.
Also first movement in robot program cannot be ambiguous- if you are passing Cartesian position, it has to have all components, including Status and Turn (S & T); if it's an axial move, has to have all axes (A1..A6).
Lastly, grab the programing manual and start reading it, otherwise you will just be asking us to rewrite it in post format.
Sounds like you want to take a look at System integrator's manual and Expert Programing manual. Should be able to find these in manual's section of this forum.
If you are as new to programming as I think you are, then maybe you should get acquainted with Pascal (programing language) to learn about variables, their scope, functions (passing parameters by value or reference), logical operators and control flow. You can learn this anywhere you have a computer and not near robot (which is likely on a noisy factory floor).
Afterwards, if you haven't already, take a look at System Variables pdf.
Looks a bit like I/O driver config, not too sure though. Is this from KRC2?
Yes, it does:
As Status in "INVERSE (EndPOS, START_AXIS, STATUS)" will return a not-zero (I think -2 or maybe -3) if position is unreachable.
AFAIK, calling function by variable is not yet possible in KRL. I've hear there were some changes in KSS 8.5 with programs residing on the drive, instead of RAM; maybe you can load different subprograms with the same name?
Otherwise, look into Directory Loader.
A one line function like Moveoffs in ABB 👍
Sorry if I am just ignorant (don't have experience with ABB except for some light reading of the manual), but aren't "lin_rel {x 100, y 100}" or something like "lin tg1:{x 100, y 100}" equivalents to that?
29. Capability to use constants in array declarations, e.g.
decl const int cint_ComNameLen = 60
Decl char ComName[cint_ComNameLen]
30. Forward() and Inverse() could take Tool and Base as parameters instead of using active ones.
20. A way to dynamically create spline blocks without using DirLoader.
21. In Actual position window, either additionally display Status and Turn in decimal or only in decimal. I can think of uses that need binary, but those are rare (at least for me). Could also show current tool and base.
22. Option turn off space mouse indefinitely without having to edit text files tucked away in the controller.
23. A bit of a pie in the sky, but how about object oriented programing?
24. Position of not only flange and TCP, but all the other joints too. Something we can do ourselves, but nice if it were included.
25. Interrupts returning variables without needing those variables to be global.
26. Structures that can have arrays in them of not just char type.
27. Native linux version of Workvisual?
Transfer the movement commands you are going to interrupt to an external procedure, something like
DEF Movement()
PTP {A1 20, A2 -70, A3 132, A4 24, A5 -64, A6 29, E1 0, E2 0, E3 0, E4 0}
$VEL.CP=0.25
$APO.CDIS=1.5
$ADVANCE=3
PTP {E6POS: X 431.593, Y -203.802, Z 223.299, A 0, B 90, C 0, E1 0, E2 0, E3 0, E4 0, S 'B 110'} C_PTP
LIN {E6POS: X 431.593, Y -203.802, Z 223.299, A 0, B 90, C 0, E1 0, E2 0, E3 0, E4 0} C_DIS
END
Display More
Not 100% sure, and can't test at the moment, but I think you need BRAKE before LIN movement in the interrupt procedure and RESUME after it:
BRAKE
LIN_rel {z 10}
RESUME
1. If you want to use run the robot in AUT EXT, you will need at least 3 digital Inputs. If you can send those signals from PLC, then that's it. If not, you will need at least three digital outputs too. If you are running in AUT, then none of that is needed.
2. My guess you need to include the new physical modules in the active project. That is done with WorkVisual.
3. Uninstall EthernetKRL Module if it's not needed. Reinstall if it is.
I rather like using arrays of E6POS. But I'm widely regarded as being a bit strange.Part of the issue here is the look-ahead. You can't move smoothly through multiple points without it, but it means that your checking function would have to stay ahead of the main run pointer by at least $ADVANCE+1. Otherwise, changes to $TOOL won't take effect in time.
Heh, I meant "ugly" as in limited to only movement commands for those parts of the code and unintuitive and more difficult to read/debug later if/when something goes wrong. I haven't yet considered approximate positioning when doing things this way, but it should still work.
$POS_FOR, but IIRC it only contains valid data during PTP motions.You can use the INVERSE system function to convert a Cartesian position into an equivalent set of axis angles, and perform pre-checking on the axes that way.
Part of the issue here is that, since you're using LIN motions, you could easily have a motion whose end point is singularity-free by a healthy margin, but which crosses through a singularity partway through. That is not going to be solved predictably.
Indeed $pos_for is for ptp motions and approximation end point.
The plan for LIN motions was to chop it up into 20mm or so lines and check their endpoints for near singularity with INVERSE() (if A5 at that point is near +-0.5 degrees, angle the tool for the whole lin movement).
For now I will put the movement positions into array(s) and use those. It's ugly, but should work.
Unless anyone could suggest a more elegant solution?
The link to the post you gave me is maybe useful, but from what I understood, it discusses ways of dealing when the robot goes into the singularity. Slowing down with $CP_VEL_TYPE=#VAR_ALL could be used in some applications, but it others I need a constant and preset velocity while still requiring the tcp to stay on the specific trajectory.
What I would like to make is some function running in Sub() that would let the robot avoid the wrist singularity all together (by changing the tool attack angle a bit for the movements that would otherwise cause a singularity).
Is there really nothing like $pos_next, $pos_fin(nish) $target or the like? (I tried these of course).
I want to use the data for avoiding (wrist) singularities: there is an option to angle the tool(s) by up to 7 degrees and usually that would be enough to avoid singularities before the robot gets to them. If the movement is linear, I would chop the line into 20mm blocks and check for near singularities (with INVERSE()) in each one. Then, if robot sees that the movement it's going to make will result in a singularity, it could angle the tool a little by allowed angles (say, it can angle the tool only by the tool's b angle, but not others).
I am unaware of other methods for doing this, except for simulating (or calculating inverse kinematics of) the program before it is uploaded (not always an option). Simulating and the like would also work for one specific robot in specific base with specific tools- a lot more crud for what could be done simpler.
Hello fellow wicked people,
I need a way to look up an upcoming position(s) in the program while the program is being executed. E.g. a program part that looks like this:
$advance=3
ptp {x 1000, y -980, z 1360, a -15, b 3, c 43, s 6, t 50} ; p1
lin {x 1300, y -980, z 1360, a -15, b 3, c 43} ;p2
lin {x 1300, y -380, z 1360, a -15, b 3, c 43} ;p3
lin {x 1300, y -380, z 1060, a -15, b 3, c 43} ;p4
Is there a way to read from some system variable or to write to a variable pos of p2 while the robot is moving to (p1)? How about if it's already at p1 and moving to p2? In other words, where the robot is planning to go, BEFORE it gets there. I am hoping for something simple like $pos_act (which gives the current pos of #tcp).
Some other ideas for tackling this:
1. Advance pointer outputs (if that's even a thing).
2. Parse the current running program with sread and krl_fgets and try and interpret that. Very roundabout and complicated when functions appear in the code or there is a tool or base change or commented lines. So, I would rather not go this way.
3. Put all the positions into struct (movetype, pos) arrays and execute them in a cycle. A bit backwards, but would work. Looking for something easier and/or not changing current code structure.
4. Some other option I haven't even considered yet. Open to suggestions!
Edit: Using KRC 4 and KSS 8.3.37
Solved. Reinstalled both ProconOS and KUKA.CNC, changed the xhome position in the default cnc program, now it works; not sure which of those was needed.
I am working with KR 120 R2700 Extra HA robot with KRC4 controller (KSS8.3.37). The robot executes KRL programs and can be jogged normally. I am trying to use KUKA.CNC package and having some problems with that.
I have installed the ProconOS and then KUKA.CNC interface opens and I can copy, view and edit cnc programs.
When I try to run either gCodeExecute (with a program name) or cncmotion Iget a warning "KSS00156 CNC_ADAPTER: Motion active Originator: 0" (which is understand is supposed to happen) and on the screen the execution stops in cncmotion.src line 82 "MOVE_EMI
cncDeviceName[] "MCS" FLT 0". The robot does not move.
When executing nc program from CNC-HMI I get errors like:
KSS21531 Channel 1: : Axis acceleration exceeds maximum limit. [50120]
KSS23346 Channel 1: Actual MCS-output position of the kinematic forward transformation [292037]
Originator: ISG_NC
KSS23345 Channel 1: Actual WPCS-input position of the kinematic backward transformation [292036]
Originator: ISG_NC
I suspect there may some required steps after installing KUKA.CNC package to finalize the installation and preparation for work. So far I just installed the KUKA.CNC and expected it to work.
Anyone got any experience with this package? How do I make it work? What is Channel 1?