Try using USB port 4 inside the controller. I've had the same issue in the past and found that USB4 port is working and the others not. Also remember that when you want to access the USB through Rapid, you need to use RemovableDisk1 instruction.
Beiträge von JMF
-
-
Have you tried a TRAP Routine for the variable? Before your program starts, check the variable and then according to that value, execute respective program.
-
Check to see if all options are selected under Authenticate - Edit User Accounts. Else try and create an ADMIN user and login with it and see if you can access backup and modpos. If that works, your default user uas might have gotten corrupt somehow.
-
Read Up on CheckProgRef.
Your error seems to be happening due to a data type that is used in various locations and when you want to remove the module, you cant because of the data that's being used somewhere.
-
I have tried warm start and I start.
Not the normal procedure for restarting the system. At the back of the Teach Pendant there should be a small button. That will reset the Teach Pendant only and might restore your SM app
-
Have you tried to restart the teach pendant at the back?
-
The OP was looking for a "single liner" type of coding to make it a bit more "elegant".
Simply put, the way the way off p1.X:=p11.trans.x; p1.Y:=p11.trans.y;p1.Z:=p11.trans.z; is three lines of code for one rt. Its elegant as it is and the original way of doing things.
In my example, if you save the TransVal PROC in a System module and make it "NOVIEW", you can use it anywhere and modify each parameter as you like without making the whole program excessively long.
I the end, it is each to their own way of coding Rapid for them and the people working them. I just found it easier to explain to operators in the above way, if they need to change a parameter of a specific robtarget.
Take the following code for example:
rtShaft_1.trans.y:=nY;
rtShaft_1.trans.z:=nZ;
rtShaft_2.trans.y:=nY;
rtShaft_2.trans.z:=nZ;
rtShaft_3.trans.y:=nY;
rtShaft_3.trans.z:=nZ;
rtShaft_4.trans.y:=nY;
rtShaft_4.trans.z:=nZ;
rtShaft_5.trans.y:=nY;
rtShaft_6.trans.z:=nZ;
rtShaft_6.trans.y:=nY;
rtShaft_6.trans.z:=nZ;
Then the same code, just in a more readable and shorter way;
TransVal\rt:=rtShaft_1\Trans_Y:=nY\Trans_Z:=nZ;
TransVal\rt:=rtShaft_2\Trans_Y:=nY\Trans_Z:=nZ;
TransVal\rt:=rtShaft_3\Trans_Y:=nY\Trans_Z:=nZ;
TransVal\rt:=rtShaft_4\Trans_Y:=nY\Trans_Z:=nZ;
TransVal\rt:=rtShaft_5\Trans_Y:=nY\Trans_Z:=nZ;
TransVal\rt:=rtShaft_6\Trans_Y:=nY\Trans_Z:=nZ;
For myself and my operator, this is a lot better and more understanding.
As mentioned, each programmer uses their own way to make it simpler, better, more understandable for them.
-
Code
Alles anzeigenPERS robtarget Pos1:=[[120.68520.39600],[0.0814337,0.702221,-0.704655,0.0609565],[0.0,-1.0],[4345.77.9E+9.9E+9.9E+9 .9E+9.9E+9 ]]; PROC Main() TransVal\rt:=Pos1\Trans_X:=120\Trans_Y:=68520\Trans_Z:=39600; END PROC PROC TransVal(\INOUT robtarget rt\num Trans_X\num Trans_Y\num Trans_Z) rt.trans.x:=Trans_X; rt.trans.y:=Trans_Y; rt.trans.y:=Trans_Z; END PROC
-
You must close the Program Editor and reopen it again then the message box will be back again.
-
Hi There. You can try this code for a WorldZone for HomePos. I use this specific code in my system and working good for me.
-
Look at certain conditions during the times that the Main Task should run and not run. When not running, let the main task run in a loop to run the whole time until the condition is changed. For instance. Task 1 (Main Task) will run from 08:00 - 16:00 and during that time, Task 2 can do anything, but after 16:00 the Main Task switch over to a loop (which will keep it active but not doing anything ) then Task 2 can still continue. Note the coding is very dirty. Hope this might help.
Code
Alles anzeigenVAR string sTimeHour; VAR num nTimeHour; WHILE TRUE DO WHILE nTimeHour> = 8 AND nTimeHour <= 16 DO nTimeHour: = GetTime (\ Hour); ! Run all tasks ENDWHILE WHILE nTimeHour> = 16 AND nTimeHour <= 8 DO nTimeHour: = GetTime (\ Hour); IF nTimeHour <16 AND nTimeHour> = 8 THEN WaitUntil FALSE; ENDIF ENDWHILE ENDWHILE
-
Go to each position as it is currently stored and programmed, then move the Robot (Torch Center Point = Tool attached to the Robot) to the new position and modify the positions one by one. Safest way.
OR
If you know where the Wobj's are located, you can modify the Wobj's one by one and each robtarget, who is referenced to that specific wobj, will be reference to the new updated wobj frame. Quickest way if you know where the location of the wobj should be.
BE CAREFUL PLEASE!!!! If you do not have the knowledge for this to be done correctly, please get someone to assist with the right knowledge in this because Hermann is correct. It could be life-threatening when done wrong or could lead to serious damages.
-
Here is a example out of the manual if you haven't found it yet.
Code
Alles anzeigenExample 2 PROC main () ! Deactivate corner path warning on all ! subsequent movement instructions CornerPathWarning FALSE; ... ! Check if warning is suppressed IF C_MOTSET.corner_path_warn_suppress = TRUE THEN CornerPathWarning TRUE; ENDIF MyProcess; Deactivate corner path warnings in start of program. Later on, check if the corner path warning is suppressed. If it is, activate corner path warning before calling MyProcess.
-
Do you have any input from the external axis like signals to say the axis is working or not?
If you have you can link that signal to a trap routine and a signal from the robot itself so that when the signal for the robot is reset the trap routine will reset the axis signal and stop.
The following trap is for my external axis (non abb) and I have 3 input signals and 2 output signals to it connected through IO's.
ex.
Degrees. USE AT OWN RISK. THIS IS JUST A SAMPLE.
Code
Alles anzeigenLOCAL TRAP Positioner_Fault_Trap VAR robtarget rtPos_Fault_Rob_Curr; VAR num Depart200: = 200; VAR tooldata YourTool; VAR bool bActiveSignal_ClockWise: = FALSE; VAR bool bActiveSignal_AntiClockWise: = FALSE; IF diTT_Healthy = 0 AND doWeld_1 = 1 THEN Reset doWeld_1; IF doTT_Anti_Clock_Wise = 1 THEN bActiveSignal_AntiClockWise: = TRUE; Reset doTT_Anti_Clock_Wise; ELSEIF doTT_Clock_Wise = 1 THEN bActiveSignal_ClockWise: = TRUE; Reset doTT_Clock_Wise; ENDIF StorePath; rtPos_Fault_Rob_Curr: = CRobT (); MoveL RelTool (rtPos_Fault_Rob_Curr, 0.0, - (Depart200)), v1000, fine, YourTool \ WObj: = wobj0; WHILE diTT_Healthy = 0 DO WaitDI diTT_Healthy, 1, \ Visualize \ Header: = "WAITING FOR SIGNAL" \ MsgArray: = ["MOVEMENT WILL NOT START UNTIL", "THE CONDITION BELOW IS MET"] \ Icon: = iconError \ VisualizeTime: = 1; ENDWHILE IF diTT_Healthy = 1 AND diTT_On_Speed = 1 THEN TPPrint "ROBOT WILL RETURN TO ERROR POSITION"; IF bActiveSignal_AntiClockWise = TRUE THEN SetDO doTT_Clock_Wise, 1; WaitDO doTT_Clock_Wise, 1; Reset doTT_Clock_Wise; WaitTime 2; SetDO doTT_Anti_Clock_Wise, 1; WaitDO doTT_Anti_Clock_Wise, 1; ELSEIF bActiveSignal_ClockWise = TRUE THEN SetDO doTT_Anti_Clock_Wise, 1; WaitDO doTT_Anti_Clock_Wise, 1; Reset doTT_Clock_Wise; WaitTime 2; SetDO doTT_Clock_Wise, 1; WaitDO doTT_Clock_Wise, 1; ENDIF MoveL rtPos_Fault_Rob_Curr, v1000, fine, YourTool \ WObj: = wobj0; RestoPath; Start Move; SetDO doWeld_1,1; WaitDO doWeld_1,1; RETURN; ENDIF ENDIF ENDTRAP
-
Doesn't matter i mean if it is not possible for the controller to keep the data it will either way give the error.
Quickest is RS though.
-
I don't think there is a "restriction" but a limitation on what memory the controller uses to "keep" the code till it is pasted.
Why not use RS?
Otherwise try and divide the routine into smaller routines if possible and copy the smaller routines.
-
Have a look at GetSysInfo function.
-