That is a great improvement. Was the robot moving at programmed speed all the time? If yes, how do you know?
Posts by DrOetker
-
-
Point density is not a fixed limit, but in general any point spacing under a few mm is probably going to be problematic. The motion planner only looks up to five motions ahead (3 by default), so a series of points too closely spaced probably prevents the planner from generating smooth motion approximation on the fly.
With KSS 5.6, the SPLINE type motion is available. Spline blocks are pre-"compiled", so might be more amenable to higher point densities. However, Splines have strict rules about accel/decel and avoiding really sharp corners, so you might have to test this for suitability.I hoped for a fixed limit. So increasing $advance to 5 might improve the capacity to handle close points?
What I do not understand is what limits the path planner to generate smooth motion. Is it cycle time of the controller program? Should the points ahead cover at least a minimum distance?
I did not know SPLINE motions so will research that.
Are you aware of a system variable that I can use to objectively determine an overload situation?
-
The problem is really the number of points too close together. Can you check the program you are using to generate the positions whether a kind of data reduction is available.
We agree on that. And data reduction is possible in many cases. I would like to know if the is a hard constraint (like a maximum number of points per second) so I can 1) assess the need for data reduction beforehand, or 2) program a reduced speed in point-dense areas.
-
At the moment I cannot access the controller. What I do know: $advance = 3,$apo.CDIS = 1 (what will the pathplanner do if the next point is within the cdis radius?), and $apo.CVEL is default, i.e. not overridden in the program.
I will post a copy of the motion program as soon as I have access.
-
Depending on how the robot is programmed the answers differs. what type of movements are used in the program PTP, LIN ,Spline? If i would have to guess it would be LIN.
LIN is used indeed
-
Hi All,
I have a KRC2 (see details below) and use it for printing. This works fine in general, but with high point densities the robot will choke/stutter (don't know the right term) and does not move continuously. This is also the case with points in a straight line, so maximum acceleration limits should not be the problem. Knowing the limits of the robot (spatial point density and speed) would enable me to check the toolpath before the start of the print. I have searched for a system variable that indicates the 'overload' situation but could not find it, neither could I find intricate details about the path planning.
Anyone can put me on the right track? Any help is highly appreciated.
My setup:
Controller: KRC2, WinXP, 256MB RAM, Software version 5.6.8
Manipulator: KR210-2000
-
I finally had time to create and check the archive and it only lists [Archive], [Roboter] ans [Version] sections, nothing concerning additional options installed. Can I install the UserTech option still?
-
Updating the $OUT declarations in /STEU/$machine.dat is not reflected by the IO monitor, which still shows "SYS" at the changed out-address. I did this:
- cancelling the submit interpreter
- make changes in the *.dat files
- start the interpreterbut no succes. What am I doing wrong?
-
That worked! Tx! I used the linux grep route and found the declarations of the signals. I now wonder if it is safe to move the signal to a different digital output. I am sure that no one uses the actual output since it is mapped to a devicenet device which is configured to ignore the data but I might overlook something of how the KRC handles the SYS signals internally. E.g.:
can I update this safely to: -
Hi, the KRC 1 I have has 4 SYS digital outputs defined (50-53), and I want to move them so I have a continuous range of digital IO for devicenet mappings.
I tried to find where they were defined by text searching for "$out[50]" machine.dat, robcor and other files in the R1 folder, but nothing could be found. What could I do more to find the location where the outputs are defined? -
I want to configure an external axis on my KRC1 with KSS4.1.7. Can anyone share this manual if available?
-
I am trying to get my KRC1 to move based on coordinates sent from a DeviceNet slave connected computer. Connection over DeviceNet to my KRC1 is established and message roundtrip time is 24ms (measured from the DeviceNet Slave host) which was predicted by SkyeFire some time ago. Which is fast enough to send coordinates which the robot directly executes.
The problem that I encounter is that approximate positioning is not working with the following code:
Code
Display More&ACCESS RVP &REL 9 &PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe &PARAM EDITMASK = * DEF test_104_01() ; name of the program ;==== Declaration section ---- DECL E6POS MYPOS DECL INT I EXT BAS(BAS_COMMAND: IN, REAL: IN) DECL REAL X_START, Y_START SIGNAL INFIELD01 $IN[33] TO $IN[64] SIGNAL INFIELD02 $IN[65] TO $IN[72] SIGNAL INFIELD03 $IN[73] TO $IN[104] SIGNAL INFIELD04 $IN[105] TO $IN[136] SIGNAL INFIELD05 $IN[137] TO $IN[168] SIGNAL INFIELD06 $IN[169] TO $IN[200] SIGNAL INFIELD07 $IN[201] TO $IN[232] SIGNAL INFIELD08 $IN[233] TO $IN[264] SIGNAL INFIELD09 $IN[265] TO $IN[280] SIGNAL INFIELD10 $IN[281] TO $IN[288] SIGNAL OUTFIELD01 $OUT[33] TO $OUT[64] GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) INTERRUPT ON 3 OUTFIELD01 = 'H00000000' ;=== Initialization section -- BAS(#INITMOV, 0) $BASE = BASE_DATA[1] ; $WORLD ;setting of the base coordinate system $TOOL = TOOL_DATA[1] ; $NULLFRAME ;setting of the tool coordinate system MYPOS = {X 0.000, Y 0.000, Z 100.000, A 0, B 90, C 0, E1 0, E2 0, E3 0, E4 0} $VEL_AXIS[1]=100 ;definition of the axis velocities $VEL_AXIS[2]=100 $VEL_AXIS[3]=100 $VEL_AXIS[4]=100 $VEL_AXIS[5]=100 $VEL_AXIS[6]=100 $ACC_AXIS[1]=100 ;definition of the axis accelerations $ACC_AXIS[2]=100 $ACC_AXIS[3]=100 $ACC_AXIS[4]=100 $ACC_AXIS[5]=100 $ACC_AXIS[6]=100 $APO.CDIS=20 $ADVANCE=4 $VEL.CP=0.1 ; set TCP velocity m/s $ACC.CP=8 ;==== Instruction section ---- PTP {AXIS: A1 -78,A2 -71,A3 121,A4 0,A5 -49,A6 0}; mech zero ; test of $base goed is () LIN {E6POS: X 0.000, Y 0.000, Z 100.000, A 0, B 90, C 0, E1 0, E2 0, E3 0, E4 0} C_DIS LIN {E6POS: X 0.000, Y 0.000, Z 0.000, A 0, B 90, C 0, E1 0, E2 0, E3 0, E4 0} C_DIS X_START = 50 Y_START = 50 MYPOS.X = X_START MYPOS.Y = Y_START LIN MYPOS FOR I = 0 TO 100000 STEP 1 CONTINUE MYPOS.X = INFIELD03 CONTINUE MYPOS.Y = INFIELD04 LIN MYPOS C_DIS CONTINUE OUTFIELD01 = INFIELD01 CONTINUE ENDFOR END
I tried to include CONTINUE statements before every line in the loop, but still the robot stops at every point. Since roundtrip time is 24ms and advance step is set to 4 I do not understand why the movement is not continuous.
All suggestions appreciated. -
Tx! that was it! I got it working and posted the results in https://www.robot-forum.com/robotforum/kuk…2874/#msg112874
-
Some results from testing the DeviceNet speed into a KRC1 controller in the attached image.
This is what was done:
- from a DeviceNet slave device IO-packages (I-only to be precise) were generated
- values were 8-bit, and incremented every generating loop
- a delay was introduced in the generating loop to slow down the generating speedMain observations:
- with a delay of 12ms the controller can keep up the input speed
- there is a glitch in the 12ms where after a "207" value, a "200" value was recorded in the KRC, and next value was "208" again. Not sure if this was caused by the generating device
- the period where identical values are registered by the KRC varies. As above:not sure if this was caused by the generating deviceNext steps will be:
- measure round trip time
- measure round trip time with robot movement
- timestamp the outgoing IO packages on the slave device -
I cannot find the way to write array contents to file on my KRC1 to find out the refresh rate. What am I overlooking?
-
Connection is now working; sending test packets from the pc to the robots results in red IO bullets in the IO monitor. I will dive into preparing the data on the pc side to research the max refresh rate
-
I did not connect the new device (to prevent wiring/baudrate issues) because the devicenet master should be able to handle the situation where one of its slave devices (the new device in this case) is offline. Or is that not correct? In other words: should all devices in the scan list be online at the DNDRV startup?
I found a deviceNet document for KRC2, are you aware of a similar document for KRC1. I could only find dnShow and dnWho as telnet commands for KRC1.
-
Hoped to get back with some nice algorithm question, but the configuration of the DeviceNet card through devnet.ini causes the DNDRV to stop. The details:
DEVNET.INI
Code
Display More[krc] debug=1 ;was 0 baudrate=500 logfile=1 ; new [1] ;existing IO macid=5 [2] ;new DeviceNet node macid=10
Reset and reconfigure IO does not pick up the new settings reliably, so after restart the message "IO configuration error: DNDRV" appears. The contents of IOSYS.INI do not seem to be relevant for this error to appear (I tried many ), only if the DEVNET.INI scanlist is expanded with node [2] the error appears (and disappears if removed). This all happens onKRC1. What am I overlooking?
-
Thanks for the suggestion on how to find the refresh rate. As soon as my DeviceNet card arrives I will test it and will let you know. Thanks again for the great help!
-
I meant raw DeviceNet messages so I think we agee here
QuoteAll right, so not a FIFO buffer or some other type...
The goal is to use the circular buffer as a FIFO buffer, so I am a bit confused by this remark. Can you clarify what you mean?Thanks for the comment about the refresh intervals. I will check it with the DeviceNet slave hard/software which is on its way right now.
Concerning the implementation of the buffer in KRL, I am puzzled how to handle the "parallel processing capabilities" of the KRC1: basically I want something like this:
Code... while Unfinished: ... Get point n from Buffer Move to point n Load new point in Buffer from DeviceNet Slave ;(should work parallel with previous line if $ADVANCE > 1) n=n+1 ...
This will work fine as long as the duration of the moves is sufficiently long, but what if the moves take only few millisecs, will the program wait for the "Load new..." line to be finished? Or are these handled by the Controller as different "threads" ?