2. Spiegazione della Struttura Dati
2.1. Tipo di Dati Posizione Giunti
1/**
2* @brief Tipo di dati posizione giunti
3*/
4public class JointPos
5{
6 double J1;
7 double J2;
8 double J3;
9 double J4;
10 double J5;
11 double J6;
12
13 public JointPos(double j1, double j2, double j3, double j4, double j5, double j6)
14 {
15 J1 = j1;
16 J2 = j2;
17 J3 = j3;
18 J4 = j4;
19 J5 = j5;
20 J6 = j6;
21 }
22
23 public JointPos()
24 {
25
26 }
27}
2.2. Tipo di Dati Posizione Spazio Cartesiano
1/**
2* @brief Tipo di dati posizione spazio cartesiano
3*/
4public class DescTran
5{
6 public double x = 0.0; /* Coordinata asse x, unità mm */
7 public double y = 0.0; /* Coordinata asse y, unità mm */
8 public double z = 0.0; /* Coordinata asse z, unità mm */
9 public DescTran(double posX, double posY, double posZ)
10 {
11 x = posX;
12 y = posY;
13 z = posZ;
14 }
15
16 public DescTran()
17 {
18
19 }
20
21}
2.3. Tipo di Dati Orientamento Angoli di Eulero
1/**
2* @brief Tipo di dati orientamento angoli di Eulero
3*/
4public class Rpy
5{
6 public double rx = 0.0; /* Angolo di rotazione attorno all'asse X fisso, unità: deg */
7 public double ry = 0.0; /* Angolo di rotazione attorno all'asse Y fisso, unità: deg */
8 public double rz = 0.0; /* Angolo di rotazione attorno all'asse Z fisso, unità: deg */
9 public Rpy(double rotateX, double rotateY, double rotateZ)
10 {
11 rx = rotateX;
12 ry = rotateY;
13 rz = rotateZ;
14 }
15}
2.4. Tipo di Dati Posa Spazio Cartesiano
1/**
2* @brief Tipo posa spazio cartesiano
3*/
4public class DescPose
5{
6 public DescTran tran = new DescTran(0.0, 0.0, 0.0); /* Posizione spazio cartesiano */
7 public Rpy rpy = new Rpy(0.0, 0.0, 0.0); /* Orientamento spazio cartesiano */
8
9 public DescPose()
10 {
11
12 }
13
14 public DescPose(DescTran descTran, Rpy rotateRpy)
15 {
16 tran = descTran;
17 rpy = rotateRpy;
18 }
19
20 public DescPose(double tranX, double tranY, double tranZ, double rX, double ry, double rz)
21 {
22 tran.x = tranX;
23 tran.y = tranY;
24 tran.z = tranZ;
25 rpy.rx = rX;
26 rpy.ry = ry;
27 rpy.rz = rz;
28 }
29
30 public String toString()
31 {
32 return String.valueOf(tran.x) + "," + String.valueOf(tran.y) + "," +String.valueOf(tran.z) + "," +String.valueOf(rpy.rx) + "," +String.valueOf(rpy.ry) + "," +String.valueOf(rpy.rz);
33 }
34}
2.5. Tipo di Dati Posizione Assi Estesi
1/**
2* @brief Tipo di dati posizione assi estesi
3*/
4public class ExaxisPos
5{
6 public double axis1 = 0.0;
7 public double axis2 = 0.0;
8 public double axis3 = 0.0;
9 public double axis4 = 0.0;
10
11 public ExaxisPos()
12 {
13
14 }
15 public ExaxisPos(double[] exaxisPos)
16 {
17 axis1 = exaxisPos[0];
18 axis2 = exaxisPos[1];
19 axis3 = exaxisPos[2];
20 axis4 = exaxisPos[3];
21 }
22
23 public ExaxisPos(double pos1, double pos2, double pos3, double pos4)
24 {
25 axis1 = pos1;
26 axis2 = pos2;
27 axis3 = pos3;
28 axis4 = pos4;
29 }
30}
2.6. Tipo di Dati Sensore di Coppia/Forza
1/**
2* @brief Componenti forza e coppia del sensore di forza
3*/
4public class ForceTorque
5{
6 public double fx; /* Componente forza lungo l'asse x, unità N */
7 public double fy; /* Componente forza lungo l'asse y, unità N */
8 public double fz; /* Componente forza lungo l'asse z, unità N */
9 public double tx; /* Componente coppia attorno all'asse x, unità Nm */
10 public double ty; /* Componente coppia attorno all'asse y, unità Nm */
11 public double tz; /* Componente coppia attorno all'asse z, unità Nm */
12 public ForceTorque(double fX, double fY, double fZ, double tX, double tY, double tZ)
13 {
14 fx = fX;
15 fy = fY;
16 fz = fZ;
17 tx = tX;
18 ty = tY;
19 tz = tZ;
20 }
21}
2.7. Tipo di Dati Parametri Spirale
1/**
2* @brief Tipo di dati parametri spirale
3*/
4public class SpiralParam
5{
6 public int circle_num; /* Numero di giri della spirale */
7 public double circle_angle; /* Angolo di inclinazione della spirale */
8 public double rad_init; /* Raggio iniziale della spirale, unità mm */
9 public double rad_add; /* Incremento del raggio */
10 public double rotaxis_add; /* Incremento direzione asse di rotazione */
11 public int rot_direction; /* Direzione di rotazione, 0-orario, 1-antiorario */
12 public int velAccMode; /* Modalità parametri velocità/accelerazione: 0-velocità angolare costante; 1-velocità lineare costante */
13 public SpiralParam(int circleNum, double circleAngle, double radInit, double radAdd, double rotaxisAdd, int rotDirection,int vel_AccMode)
14 {
15 circle_num = circleNum;
16 circle_angle = circleAngle;
17 rad_init = radInit;
18 rad_add = radAdd;
19 rotaxis_add = rotaxisAdd;
20 rot_direction = rotDirection;
21 velAccMode=vel_AccMode;
22 }
23}
2.8. Tipo di Stato Assi Estesi
1/**
2* @brief Tipo di stato assi estesi
3*/
4public class EXT_AXIS_STATUS
5{
6 public double pos = 0; //Posizione asse esteso
7 public double vel = 0; //Velocità asse esteso
8 public int errorCode = 0; //Codice errore asse esteso
9 public int ready = 0; //Servo pronto
10 public int inPos = 0; //Servo in posizione
11 public int alarm = 0; //Allarme servo
12 public int flerr = 0; //Errore di inseguimento
13 public int nlimit = 0; //Al limite negativo
14 public int pLimit = 0; //Al limite positivo
15 public int mdbsOffLine = 0; //Driver bus 485 offline
16 public int mdbsTimeout = 0; //Timeout comunicazione 485 scheda controllo/box controllo
17 public int homingStatus = 0; //Stato homing asse esteso
18}
2.9. Tipo di Sensore
1/**
2* @brief Tipo di sensore
3*/
4public class DeviceConfig
5{
6 int company = 0; // Produttore
7 int device = 0; // Tipo/Numero dispositivo
8 int softwareVersion = 0; // Versione software
9 int bus = 0; // Posizione montaggio
10
11 public DeviceConfig()
12 {
13
14 }
15
16 public DeviceConfig(int company, int device, int softwareVersion, int bus)
17 {
18 this.company = company;
19 this.device = device;
20 this.softwareVersion = softwareVersion;
21 this.bus = bus;
22 }
23}
2.10. Configurazione Assi Estesi 485
1/**
2* @brief Configurazione assi estesi 485
3*/
4public class Axis485Param
5{
6 int servoCompany; // Produttore driver servo, 1-DynaTech
7 int servoModel; // Modello driver servo, 1-FD100-750C
8 int servoSoftVersion; // Versione software driver servo, 1-V1.0
9 int servoResolution; // Risoluzione encoder
10 double axisMechTransRatio; // Rapporto trasmissione meccanico
11
12 public Axis485Param(int company, int model, int softVersion, int resolution, double mechTransRatio)
13 {
14 servoCompany = company;
15 servoModel = model;
16 servoSoftVersion = softVersion;
17 servoResolution = resolution;
18 axisMechTransRatio = mechTransRatio;
19 }
20
21 public Axis485Param()
22 {
23
24 }
25}
2.11. Stato Controller Servo
1/**
2* @brief Stato controller servo
3*/
4public class ROBOT_AUX_STATE
5{
6 public int servoId = 0; //ID driver servo
7 public int servoErrCode = 0; //Codice errore driver servo
8 public int servoState = 0; //Stato driver servo
9 public double servoPos = 0; //Posizione corrente servo
10 public float servoVel = 0; //Velocità corrente servo
11 public float servoTorque = 0; //Coppia corrente servo 25
12}
2.12. Stato Interruzione Saldatura
1/**
2* @brief Stato interruzione saldatura
3*/
4public class WELDING_BREAKOFF_STATE
5{
6 public int breakOffState = 0; //Stato interruzione saldatura
7 public int weldArcState = 0; //Stato interruzione arco saldatura
8}
2.13. Parametri Comunicazione Assi Estesi UDP
1/**
2* @brief Parametri comunicazione assi estesi UDP
3*/
4public class UDP_EXT_AXIS_PARAM
5{
6 public String ip = "192.168.58.88";//Indirizzo IP
7 public int port = 2021; //Porta
8 public int period = 2; //Periodo comunicazione (ms, default 2, non modificare)
9 public int lossPkgTime = 50; //Tempo rilevamento perdita pacchetti (ms)
10 public int lossPkgNum = 2; //Numero perdite pacchetti
11 public int disconnectTime = 100; //Durata conferma disconnessione comunicazione
12 public int reconnectEnable = 0; //Abilita riconnessione automatica 0-disabilitato 1-abilitato
13 public int reconnectPeriod = 100; //Intervallo periodo riconnessione (ms)
14 public int reconnectNum = 3; //Numero tentativi riconnessione
15 public int selfConnect =0; //Connessione automatica dopo riavvio alimentazione; 0-non connettere; 1-connetti
16}
2.14. Tipo Struttura Feedback Stato Robot
1/**
2* @brief Tipo struttura feedback stato robot
3*/
4public class ROBOT_STATE_PKG
5{
6 public short frame_head = 0; //Intestazione frame 0x5A5A
7 public byte frame_cnt = 0; //Contatore frame
8 public short data_len = 0; //Lunghezza dati 5
9 public int program_state = 0; //Stato esecuzione programma, 1-fermo; 2-in esecuzione; 3-in pausa
10 public int robot_state = 0; //Stato movimento robot, 1-fermo; 2-in esecuzione; 3-in pausa; 4-trattamento 7
11 public int main_code = 0; //Codice errore principale
12 public int sub_code = 0; //Codice errore secondario
13 public int robot_mode = 0; //Modalità robot, 0-modalità automatica; 1-modalità manuale 16
14 public double[] jt_cur_pos =new double[6]; //Posizione corrente giunti
15 public double[] tl_cur_pos = new double[6]; //Posa corrente utensile
16 public double[] flange_cur_pos = new double[6]; //Posa corrente flangia terminale
17 public double[] actual_qd = new double[6]; //Velocità corrente giunti robot
18 public double[] actual_qdd = new double[6]; //Accelerazione corrente giunti robot
19 public double[] target_TCP_CmpSpeed = new double[2]; //Velocità istruzione sintetica TCP robot
20 public double[] target_TCP_Speed = new double[6]; //Velocità istruzione TCP robot
21 public double[] actual_TCP_CmpSpeed = new double[2]; //Velocità reale sintetica TCP robot
22 public double[] actual_TCP_Speed = new double[6]; //Velocità reale TCP robot
23 public double[] jt_cur_tor = new double[6]; //Coppia corrente
24 public int tool = 0; //Numero utensile
25 public int user = 0; //Numero pezzo
26 public int cl_dgt_output_h = 0; //Uscite digitali 15-8
27 public int cl_dgt_output_l = 0; //Uscite digitali 7-0
28 public int tl_dgt_output_l = 0; //Uscite digitali utensile 7-0 (solo bit0-bit1 validi)
29 public int cl_dgt_input_h = 0; //Ingressi digitali 15-8
30 public int cl_dgt_input_l = 0; //Ingressi digitali 7-0
31 public int tl_dgt_input_l = 0; //Ingressi digitali utensile 7-0 (solo bit0-bit1 validi)
32 public short[] cl_analog_input = new short[2]; //Ingressi analogici box controllo
33 public short tl_anglog_input = 0; //Ingresso analogico utensile
34 public double[] ft_sensor_raw_data = new double[6]; //Dati grezzi sensore forza/coppia
35 public double[] ft_sensor_data = new double[6]; //Dati sensore forza/coppia in sistema di riferimento
36 public int ft_sensor_active = 0; //Stato attivazione sensore forza/coppia, 0-reset, 1-attivo
37 public int EmergencyStop = 0; //Segnale emergenza
38 public int motion_done = 0; //Segnale in posizione
39 public int gripper_motiondone = 0; //Segnale completamento movimento pinza
40 public int mc_queue_len = 0; //Lunghezza coda movimento
41 public int collisionState = 0; //Rilevamento collisione, 1-collisione; 0-nessuna collisione
42 public int trajectory_pnum = 0; //Numero punto traiettoria
43 public int safety_stop0_state = 0; /* Segnale arresto sicurezza SI0 */
44 public int safety_stop1_state = 0; /* Segnale arresto sicurezza SI1 */
45 public int gripper_fault_id = 0; /* Numero pinza errore */ // + 19 = 567
46 public short gripper_fault = 0; /* Guasto pinza */
47 public short gripper_active = 0; /* Stato attivazione pinza */
48 public int gripper_position = 0; /* Posizione pinza */
49 public int gripper_speed = 0; /* Velocità pinza */
50 public int gripper_current = 0; /* Corrente pinza */
51 public int gripper_tmp = 0; /* Temperatura pinza */
52 public int gripper_voltage = 0; /* Tensione pinza */
53 public ROBOT_AUX_STATE auxState = new ROBOT_AUX_STATE(); /* Stato assi estesi 485 */
54 public EXT_AXIS_STATUS extAxisStatus0 = new EXT_AXIS_STATUS();
55 public EXT_AXIS_STATUS extAxisStatus1 = new EXT_AXIS_STATUS();
56 public EXT_AXIS_STATUS extAxisStatus2 = new EXT_AXIS_STATUS();
57 public EXT_AXIS_STATUS extAxisStatus3 = new EXT_AXIS_STATUS();
58 public short[] extDIState = new short[8]; //Ingressi digitali estesi
59 public short[] extDOState = new short[8]; //Uscite digitali estese
60 public short[] extAIState = new short[4]; //Ingressi analogici estesi
61 public short[] extAOState = new short[4]; //Uscite analogiche estese
62 public int rbtEnableState = 0; //Stato abilitazione robot --robot enable s
63 public double[] jointDriverTorque =new double[6]; //Coppia corrente driver giunti
64 public double[] jointDriverTemperature = new double[6]; //Temperatura corrente driver giunti
65 public ROBOT_TIME robotTime = new ROBOT_TIME();
66 public int softwareUpgradeState = 0; //Stato aggiornamento software robot 0-inattivo o caricamento pacchetto; 1~100: percentuale completamento; -1: fallimento aggiornamento; -2: fallimento verifica; -3: fallimento verifica versione; -4: fallimento decompressione; -5: fallimento aggiornamento configurazione utente; -6: fallimento aggiornamento configurazione periferiche; -7: fallimento aggiornamento configurazione assi estesi; -8: fallimento aggiornamento configurazione robot; -9: fallimento aggiornamento parametri DH
67 public int endLuaErrCode; //Stato esecuzione LUA terminale
68
69 public int[] cl_analog_output = new int[2]; //Uscite analogiche box controllo
70 public int tl_analog_output; //Uscita analogica utensile
71 public float gripperRotNum; //Numero giri corrente pinza rotante
72 public int gripperRotSpeed; //Velocità rotazione percentuale corrente pinza rotante
73 public int gripperRotTorque; //Coppia rotazione percentuale corrente pinza rotante
74
75 public WELDING_BREAKOFF_STATE weldingBreakOffstate=new WELDING_BREAKOFF_STATE();//Stato interruzione saldatura
76
77 public double[] jt_tgt_tor = new double[6]; //Coppia istruzione giunti
78 public int smartToolState; //Stato pulsanti manopola SmartTool
79
80 public float wideVoltageCtrlBoxTemp; //Temperatura box controllo tensione ampia
81 public int wideVoltageCtrlBoxFanVel; //Velocità ventilatore box controllo tensione ampia (mA)
82
83 public double[] toolCoord=new double[6]; //Sistema di coordinate utensile
84 public double[] wobjCoord=new double[6]; //Sistema di coordinate pezzo
85 public double[] extoolCoord=new double[6]; //Sistema di coordinate utensile esterno
86 public double[] exAxisCoord=new double[6]; //Sistema di coordinate assi estesi
87 public double load; //Massa carico
88 public double[] loadCog=new double[3]; //Baricentro carico
89
90 public double[] lastServoTarget=new double[6]; //Ultima posizione target servo in coda
91 public int servoJCmdNum; //Conteggio istruzioni servo
92
93 public short check_sum = 0; /* Checksum */
94
95 public ROBOT_STATE_PKG()
96 {
97
98 }
99}