Data declarations NOT included.
jVarJointTarget:=CJointT(); ! Optional arguments may be required
nAx6Value:=jVarJointTarget.robax.rax_6;
Data declarations NOT included.
jVarJointTarget:=CJointT(); ! Optional arguments may be required
nAx6Value:=jVarJointTarget.robax.rax_6;
You did make a backup before altering your program, or if the RobotWare is from before backups could be created you saved the program/module,right
Restore the backup, program, or module
More likely, you will need to recreate the data that was deleted.
Good luck!
As a start to make headway it is suggested to replace the WHILE DO. As written it the program pointer (PP) will NEVER get back to the top of the main routine.
PP enters into WHILE DO loop , PP makes it to Path_10, PP returns from Path_10, PP hits ENDWHILE, PP moves to first line of WHILE ....
You are welcome. Glad to help!
Is the track an ABB track?
The info below applies only to the external axis. If the articulated arm is not moving as expected consider a service visit.
The system parameter that requires changing is in the MOC topic and of the type Transmission.
When a 3rd party's external axis is used (or ABB's if the move distance is incorrect) the steps below have produced satisfactory results. The process can be found in the Application manual - Servo gun tuning.
Before messing with parameters be sure to create to make a backup.
If the gear ratio is unknown, perform the following steps:
ACCURATE measurement of distances traveled is vitally important!
*Move the external axis some distance (1 meter should suffice). Read the jog position value on the FlexPendant. Make note of the distance, call this value A_jog_screen.
*Accurately measure the traveled distance. Make note of the distance, call this value A_measured.
*Move the external axis some farther distance (an additional meter should suffice). Read the jog position value on the FlexPendant. Make note of the distance, call this value B_jog_screen.
*Accurately measure the overall traveled distance. Make note of the distance, call this value B_measured.
*Read the value in Transmission Gear Ratio in the type Transmission. Call this value old_transm_joint.
*Calculate the new transmission gear ratio value with the following equation:
((B_jog_screen - A_jog_screen)/(B_measured - A_measured)) * old_transm_joint
Enter the calculated value in Transmission Gear Ratio in parameters. DO NOT CHANGE THE SIGN. If the original value is negative, ensure the new value is negative, same for a positive original value. Changing the sign will cause the external axis to move in the opposite direction!!
*Restart the control.
*Validate distance moved. Repeat process as needed.
I do not know how to reset the duty time counter.
More importantly changing the duty time counter is, at best, ethically challenged. Some legal jurisdictions might even consider doing so an act of fraud.
Is the subject at the link below what you wish to address?
I never tried Common. I believe that will cause, depending on INFO, WARNING, ERROR type specified, all occurrences to the TRAP routine.
Display More
Thank you for your reply.
I created RAPID code like SomeTekk wrote but my problem is that I can't get into TRAP routine.
I made new normal type task with foreground task T_ROB1 (Motion task, only move instructions) where i wrote this code:MODULE Background
VAR intnum err_interrupt;
VAR trapdata err_data;
VAR errdomain err_domain := 5;
VAR num err_number;
VAR errtype err_type;
VAR num counter := 0;
PROC main()
WHILE TRUE DO
CONNECT err_interrupt WITH trap_err;
IError MOTION_ERR, TYPE_ERR, err_interrupt;
counter := counter + 1; A neverending counter?. A WHILE TRUE loop will run perpetually.
IDelete err_interrupt; - - The Interrupt is deleted as soon as this code is executed. It is suggested to move it BEFORE the CONNECT instruction.
WaitTime 1;
ENDWHILE
ENDPROC
TRAP trap_err
GetTrapData err_data;
ReadErrData err_data, err_domain, err_number, err_type; Since you are only interested in setting a signal high is there really a need to Get and/or Read the error data?
SetDO do1,HIGH; When will you be setting do1 low? Pulse do1 maybe?
ENDTRAP
ENDMODULEFirst of all I want to simply set do1, when error occurs, but as I said it can't go into TRAP routine (do1 is still equals to 0).
What is more it works for Division by zero error. I comment Path_10 in main and write:
result := val1/val2; ! val2 := 0
and then the TRAP working fine. What I'm doing wrong with joint out of range error?
Here's a template:
(A background task is used in this instance)
Data declarations NOT included.
Also, the error domain (for motion domain errors the domain number = 5) is NOT prepended to the text in the RAPID below!
To do so the concatenation used to construct the text string2 could be altered for that purpose.
PROC main()
IDelete intErr_interrupt;
WHILE DOutput(do_Eax_Err1)<>1 AND DOutput(do_Eax_Err2)<>1 DO
IDelete intErr_interrupt;
CONNECT intErr_interrupt WITH trErrLog;
IError MOTION_ERR,err_type,intErr_interrupt; OR IError COMMON_ERR,err_type,intErr_interrupt;
WaitTime 0.01;
ENDWHILE
ENDPROC
TRAP trErrLog
GetTrapData err_data;
ReadErrData err_data,err_domain,err_number,err_type;
-------------- Your solution goes here --------------
This is what has been done SIMILAR to what you are looking to do, I believe ...
IF err_number<10 THEN
string1:=ValToStr(err_number);
string2:="000"+string1;
ELSEIF err_number>=10 AND err_number<=99 THEN
string1:=ValToStr(err_number);
string2:="00"+string1;
ELSEIF err_number>=100 AND err_number<=999 THEN
string1:=ValToStr(err_number);
string2:="0"+string1;
ELSEIF err_number>999 THEN
string2:=ValToStr(err_number);
ENDIF
ok:= (string2,myErrorNumber);
SetGO go_ErrorNumber,myErrorNumber;
...
ENDTRAP
It is suggested to read about IError in a RAPID Instructions Tech Ref Manual.
/Cheers
A lot more information will need to be provided before assistance of any value can be provided.
-What type of external axis, spot weld servo, rotating positioner, linear positioner, etc?
-Is the axis connecting to the SMB inside the manipulator, or through an external SM box?
-Is the new device connecting to a working system or is this a new install?
-What type of control?
That is a good place to start.
Time to break out the M97 Control circuit diagrams and figure out why voltage is not getting to the DC-Link (rectifier).
Depending on the vintage of S3 there MAY be two buttons for motor control. One is Motors On for automatic mode, if a System Input is not used, the other is Motors Off - which can be the E-Stop reset.
For the 509 Sync Error; Counters (NOT SYNC OFFSETS!) will need updating. The pendant stokes vary based on ARLA (ASEA or ABB Robot Language) version. The keystrokes I recall - with my faulty memory - are MAN>SCAN>PARAM>RESOLVE>SYNCOFF>COUNTER or something close to that.
S3s last version were in 1993, so good luck!
IF DInput(di_your_input)=0 THEN
Move ...
ENDIF
If you plug a USB drive into the ports inside the control they will not show up on the pendant as a USB drive. They will show up as a BD device - Bulk Device.
I'm pretty sure that's because the port on the pendant is managed by Windows CE and the ports inside the control are managed by VxWorks.
Look in the Operating Manual for IRC5 with FlexPendant, check in the Index for 'network connections'.
I am using the Service port, so LAN configuration is very basic. Therefore they are both in the same network, both the PC an tthe robot controller. address for the robot in the service port is by default 192.168.125.1, and any PC connected have the 192.168.125.xxx.
This robot does not have the PC option, this is why we are using the service port.
The IRC5 system hands out IP addresses because there is a DHCP server attached to that port. Do you have static IP addresses for for your PCs connected to the service port? If not try assigning them in the range above 192.168.125.010. Where I work a PC has a static IP in the 192.168.125 (above .010 for the final octet) range and it is able to connect to the IRC5.
From the IRC5 Product Manual ( whether you believe ABB's manual, or not, is entirely up to you):
Note
The service port shall only be used for direct connection to a PC as described
in this procedure. It must not be connected to a LAN (local area network), since
it has a DHCP server that automatically distributes IP addresses to all units
connected to the LAN.
Contact your network administrator for more information.
Note
The maximum number of connected network clients using robapi is:
• LAN: 3
• Service: 1
• FlexPendant: 1
The total max. number of applications using robapi running on the same PC
connected to one controller has no built-in maximum however, UAS limits the
number of logged on users to 50.
The total max. number of concurrently connected FTP clients is 4.
Yes, there is bound to drifting of the time in the control. The control is not an atomic clock.
Do you have your LAN port IP setting correct?
From the Ethernet - IP Manual 3HAC04127 (it is suggested to obtain one):
Can I configure the WAN connector and the selected LAN connector on the same subnet?
No, the EtherNet/IP address for the WAN connector must belong to another subnet
than the address of the selected LAN connector.
For example, if the address of the LAN connector is 111.122.133.144, the address
for the selected LAN connector cannot be 111.122.133.145 if you are using a subnet
mask 255.255.255.0 (but it can be 111.122.134.145).
&
My Ethernet/IP network and factory network is on the same logical network but i want to have one
logical network for factory LAN and one logical network for Ethernet/IP and have a switch separate
the traffic. How do I do?
1 In the I/O configuration under I/O bus, configure the IP address, subnet mask,
gateway and destination of the Ethernet/IP network.
2 Do an X-start.
3 Change the network settings (these are used for the WAN connector) and
choose the correct system.
4 Make sure that these two networks are on separate subnets.
5 Restart the controller.
TIA 586A on one end TIA 586B on the other end.