11. Periféricos do Robô
11.1. Configurar Garra
1/**
2* @brief Configura a garra
3* @param [in] company Fabricante da garra, a definir
4* @param [in] device Número do dispositivo, não usado no momento, padrão 0
5* @param [in] softvesion Número da versão do software, não usado no momento, padrão 0
6* @param [in] bus Posição do barramento onde o dispositivo está montado, não usado no momento, padrão 0
7* @return Código de erro
8*/
9int SetGripperConfig(int company, int device, int softvesion, int bus);
11.2. Obter Configuração da Garra
1/**
2* @brief Obtém a configuração da garra
3* @param [in] company Fabricante da garra, a definir
4* @param [in] device Número do dispositivo, não usado no momento, padrão 0
5* @param [in] softvesion Número da versão do software, não usado no momento, padrão 0
6* @param [in] bus Posição do barramento onde o dispositivo está montado, não usado no momento, padrão 0
7* @return Código de erro
8*/
9int GetGripperConfig(int *company, int *device, int *softvesion, int *bus);
11.3. Ativar Garra
1/**
2* @brief Ativa a garra
3* @param [in] index Número da garra
4* @param [in] act 0-reset, 1-ativar
5* @return Código de erro
6*/
7int ActGripper(int index, byte act);
11.4. Controlar Garra
1/**
2* @brief Controla a garra
3* @param [in] index Número da garra
4* @param [in] pos Porcentagem de posição, faixa [0~100]
5* @param [in] vel Porcentagem de velocidade, faixa [0~100]
6* @param [in] force Porcentagem de torque, faixa [0~100]
7* @param [in] max_time Tempo máximo de espera, faixa [0~30000], unidade ms
8* @param [in] block 0-bloqueado, 1-não bloqueado
9* @param [in] type Tipo de garra, 0-garra paralela; 1-garra rotativa
10* @param [in] rotNum Número de rotações
11* @param [in] rotVel Porcentagem de velocidade de rotação [0-100]
12* @param [in] rotTorque Porcentagem de torque de rotação [0-100]
13* @return Código de erro
14*/
15int MoveGripper(int index, int pos, int vel, int force, int max_time, byte block, int type, double rotNum, int rotVel, int rotTorque);
11.5. Obter Estado de Movimento da Garra
1/**
2* @brief Obtém o estado de movimento da garra
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] status 0-movimento não concluído, 1-movimento concluído
5* @return Código de erro
6*/
7int GetGripperMotionDone(ref int fault, ref int status);
11.6. Obter Estado de Ativação da Garra
1/**
2* @brief Obtém o estado de ativação da garra
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] status bit0~bit15 correspondem aos números das garras 0~15, bit=0 não ativado, bit=1 ativado
5* @return Código de erro
6*/
7int GetGripperActivateStatus(ref int fault, ref int status);
11.7. Obter Posição da Garra
1/**
2* @brief Obtém a posição da garra
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] position Porcentagem de posição, faixa 0~100%
5* @return Código de erro
6*/
7int GetGripperCurPosition(ref int fault, ref int position);
11.8. Obter Velocidade da Garra
1/**
2* @brief Obtém a velocidade da garra
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] speed Porcentagem de velocidade, faixa 0~100%
5* @return Código de erro
6*/
7int GetGripperCurSpeed(ref int fault, ref int speed);
11.9. Obter Corrente da Garra
1/**
2* @brief Obtém a corrente da garra
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] current Porcentagem de corrente, faixa 0~100%
5* @return Código de erro
6*/
7int GetGripperCurCurrent(ref int fault, ref int current);
11.10. Obter Tensão da Garra
1/**
2* @brief Obtém a tensão da garra
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] voltage Tensão, unidade 0.1V
5* @return Código de erro
6*/
7int GetGripperVoltage(ref int fault, ref int voltage);
11.11. Obter Temperatura da Garra
1/**
2* @brief Obtém a temperatura da garra
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] temp Temperatura, unidade ℃
5* @return Código de erro
6*/
7int GetGripperTemp(ref int fault, ref int temp);
11.12. Calcular Ponto de Pré-Captura - Visão
1/**
2* @brief Calcula o ponto de pré-captura - Visão
3* @param [in] desc_pos Pose cartesiana do ponto de captura
4* @param [in] zlength Deslocamento no eixo Z
5* @param [in] zangle Deslocamento de rotação em torno do eixo Z
6* @param [out] pre_pos Ponto de pré-captura
7* @return Código de erro
8*/
9int ComputePrePick(DescPose desc_pos, double zlength, double zangle, ref DescPose pre_pos);
11.13. Calcular Ponto de Retirada - Visão
1/**
2* @brief Calcula o ponto de retirada - Visão
3* @param [in] desc_pos Pose cartesiana do ponto de retirada
4* @param [in] zlength Deslocamento no eixo Z
5* @param [in] zangle Deslocamento de rotação em torno do eixo Z
6* @param [out] post_pos Ponto de retirada
7* @return Código de erro
8*/
9int ComputePostPick(DescPose desc_pos, double zlength, double zangle, ref DescPose post_pos);
11.14. Exemplo de Código para Operações com a Garra do Robô
1private void button36_Click(object sender, EventArgs e)
2{
3 int company = 4;
4 int device = 0;
5 int softversion = 0;
6 int bus = 2;
7 int index = 2;
8 byte act = 0;
9 int max_time = 30000;
10 byte block = 0;
11 int status=0;
12 int fault=0;
13 int active_status = 0;
14 int current_pos = 0;
15 int current = 0;
16 int voltage = 0;
17 int temp = 0;
18 int speed = 0;
19
20 robot.SetGripperConfig(company, device, softversion, bus);
21 Thread.Sleep(1000);
22 robot.GetGripperConfig(ref company, ref device, ref softversion, ref bus);
23 Console.WriteLine("gripper config:{0},{1},{2},{3}\n", company, device, softversion, bus);
24
25 robot.ActGripper(index, act);
26 Thread.Sleep(1000);
27 act = 1;
28 robot.ActGripper(index, act);
29 Thread.Sleep(1000);
30
31 robot.MoveGripper(index, 90, 50, 50, max_time, block, 0, 0, 0, 0);
32 Thread.Sleep(1000);
33 robot.MoveGripper(index, 30, 50, 0, max_time, block, 0, 0, 0, 0);
34
35 robot.GetGripperMotionDone(ref fault, ref status);
36 Console.WriteLine("motion status:{0},{1}\n", fault, status);
37
38 robot.GetGripperActivateStatus(ref fault, ref active_status);
39 Console.WriteLine("gripper active fault is: {0}, status is: {1}\n", fault, active_status);
40
41 robot.GetGripperCurPosition(ref fault, ref current_pos);
42 Console.WriteLine("fault is:{0}, current position is: {1}\n", fault, current_pos);
43
44 robot.GetGripperCurCurrent(ref fault, ref current);
45 Console.WriteLine("fault is:{0}, current current is: {1}\n", fault, current);
46
47 robot.GetGripperVoltage(ref fault, ref voltage);
48 Console.WriteLine("fault is:{0}, current voltage is: {1} \n", fault, voltage);
49
50 robot.GetGripperTemp(ref fault, ref temp);
51 Console.WriteLine("fault is:{0}, current temperature is: {1}\n", fault, temp);
52
53 robot.GetGripperCurSpeed(ref fault, ref speed);
54 Console.WriteLine("fault is:{0}, current speed is: {1}\n", fault, speed);
55
56 int retval = 0;
57 DescPose prepick_pose = new DescPose();
58 DescPose postpick_pose = new DescPose();
59
60 DescPose p1Desc = new DescPose(-419.524f, -13.000f, 351.569f, -178.118f, 0.314f, 3.833f);
61 DescPose p2Desc = new DescPose(-321.222f, 185.189f, 335.520f, -179.030f, -1.284f, -29.869f);
62
63 retval = robot.ComputePrePick(p1Desc, 10, 0, ref prepick_pose);
64 Console.WriteLine("ComputePrePick retval is: {0}\n", retval);
65 Console.WriteLine("xyz is: {0}, {1}, {2}; rpy is: {3}, {4}, {5}\n",
66 prepick_pose.tran.x, prepick_pose.tran.y, prepick_pose.tran.z,
67 prepick_pose.rpy.rx, prepick_pose.rpy.ry, prepick_pose.rpy.rz);
68
69 retval = robot.ComputePostPick( p2Desc, -10, 0, ref postpick_pose);
70 Console.WriteLine("ComputePostPick retval is: {0}\n", retval);
71 Console.WriteLine("xyz is: {0}, {1}, {2}; rpy is: {3}, {4}, {5}\n",
72 postpick_pose.tran.x, postpick_pose.tran.y, postpick_pose.tran.z,
73 postpick_pose.rpy.rx, postpick_pose.rpy.ry, postpick_pose.rpy.rz);
74
75}
11.15. Obter Número de Rotações da Garra Rotativa
1/**
2* @brief Obtém o número de rotações da garra rotativa
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] num Número de rotações
5* @return Código de erro
6*/
7int GetGripperRotNum(ref UInt16 fault, ref double num);
11.16. Obter Porcentagem de Velocidade de Rotação da Garra Rotativa
1/**
2* @brief Obtém a porcentagem de velocidade de rotação da garra rotativa
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] speed Porcentagem de velocidade de rotação
5* @return Código de erro
6*/
7int GetGripperRotSpeed(ref UInt16 fault, ref int speed);
11.17. Obter Porcentagem de Torque de Rotação da Garra Rotativa
1/**
2* @brief Obtém a porcentagem de torque de rotação da garra rotativa
3* @param [out] fault 0-sem erro, 1-com erro
4* @param [out] torque Porcentagem de torque de rotação
5* @return Código de erro
6*/
7int GetGripperRotTorque(ref UInt16 fault, ref int torque);
11.18. Exemplo de Código para Obter Estado da Garra Rotativa
1int MoveRotGripper(int pos, double rotPos)
2{
3 robot.ResetAllError();
4 robot.ActGripper(1, 1);
5 Thread.Sleep(1000);
6 int rtn = robot.MoveGripper(1, pos, 50, 50, 5000, 1, 1, rotPos, 50, 100);
7 Console.WriteLine($"move gripper rtn is {rtn}" );
8 UInt16 fault = 0;
9 double rotNum = 0.0;
10 int rotSpeed = 0;
11 int rotTorque = 0;
12 robot.GetGripperRotNum(ref fault, ref rotNum);
13 robot.GetGripperRotSpeed(ref fault, ref rotSpeed);
14 robot.GetGripperRotTorque(ref fault, ref rotTorque);
15 Console.WriteLine($"gripper rot num :{ rotNum}, gripper rotSpeed :{rotSpeed}, gripper rotTorque : { rotTorque}");
16 return 0;
17}
11.19. Iniciar/Parar Esteira Transportadora
1/**
2* @brief Inicia/para a esteira transportadora
3* @param [in] status Estado, 1-iniciar, 0-parar
4* @return Código de erro
5*/
6int ConveyorStartEnd(byte status);
11.20. Registrar Ponto de Detecção IO
1/**
2* @brief Registra o ponto de detecção IO
3* @return Código de erro
4*/
5int ConveyorPointIORecord();
11.21. Registrar Ponto A
1/**
2* @brief Registra o ponto A
3* @return Código de erro
4*/
5int ConveyorPointARecord();
11.22. Registrar Ponto de Referência
1/**
2* @brief Registra o ponto de referência
3* @return Código de erro
4*/
5int ConveyorRefPointRecord();
11.23. Registrar Ponto B
1/**
2* @brief Registra o ponto B
3* @return Código de erro
4*/
5int ConveyorPointBRecord();
11.24. Detecção IO de Peça na Esteira
1/**
2* @brief Detecção IO de peça na esteira
3* @param [in] max_t Tempo máximo de detecção, unidade ms
4* @return Código de erro
5*/
6int ConveyorIODetect(int max_t);
11.25. Obter Posição Atual do Objeto
1/**
2* @brief Obtém a posição atual do objeto
3* @param [in] mode 1-captura com rastreamento, 2-movimento com rastreamento, 3-rastreamento TPD
4* @return Código de erro
5*/
6int ConveyorGetTrackData(int mode);
11.26. Iniciar Rastreamento da Esteira
1/**
2* @brief Inicia o rastreamento da esteira
3* @param [in] status Estado, 1-iniciar, 0-parar
4* @return Código de erro
5*/
6int ConveyorTrackStart(byte status);
11.27. Parar Rastreamento da Esteira
1/**
2* @brief Para o rastreamento da esteira
3* @return Código de erro
4*/
5int ConveyorTrackEnd();
11.28. Configurar Parâmetros da Esteira
1/**
2* @brief Configura os parâmetros da esteira
3* @param [in] para[0] Canal do encoder 1~2
4* @param [in] para[1] Número de pulsos do encoder por rotação
5* @param [in] para[2] Distância percorrida pela esteira por rotação do encoder
6* @param [in] para[3] Número do sistema de coordenadas da peça (para movimento de rastreamento, escolha o número do sistema de coordenadas; para captura com rastreamento e rastreamento TPD, defina como 0)
7* @param [in] para[4] Se usa visão 0-não usa 1-usa
8* @param [in] para[5] Relação de velocidade (para a opção de captura com rastreamento da esteira [1-100]; para outras opções, padrão 1)
9* @param [in] followType Tipo de movimento de rastreamento, 0-movimento de rastreamento; 1-movimento de verificação
10* @param [in] startDis Necessário para captura com verificação, distância inicial de rastreamento, -1: cálculo automático (a verificação começa automaticamente quando a peça chega abaixo do robô), unidade mm, valor padrão 0
11* @param [in] endDis Necessário para captura com verificação, distância final de rastreamento, unidade mm, valor padrão 100
12* @return Código de erro
13*/
14int ConveyorSetParam(int encChannel, int resolution, double lead, int wpAxis, int vision, double speedRadio, int followType, int startDis=0, int endDis=100);
11.29. Definir Compensação do Ponto de Captura da Esteira
1/**
2* @brief Define a compensação do ponto de captura da esteira
3* @param [in] cmp Compensação de posição double[3]{x, y, z}
4* @return Código de erro
5*/
6int ConveyorCatchPointComp(double[] cmp);
11.30. Movimento Linear com Rastreamento da Esteira
1/**
2* @brief Movimento linear com rastreamento da esteira
3* @param [in] name Nome do ponto de movimento
4* @param [in] tool Número da ferramenta, faixa [0~14]
5* @param [in] wobj Número da peça, faixa [0~14]
6* @param [in] vel Porcentagem de velocidade, faixa [0~100]
7* @param [in] acc Porcentagem de aceleração, faixa [0~100], temporariamente não disponível
8* @param [in] ovl Fator de escala de velocidade, faixa [0~100]
9* @param [in] blendR [-1.0]-movimento concluído (bloqueado), [0~1000.0]-raio de suavização (não bloqueado), unidade mm
10* @return Código de erro
11*/
12int ConveyorTrackMoveL(string name, int tool, int wobj, float vel, float acc, float ovl, float blendR);
11.31. Detecção de Entrada de Comunicação da Esteira
1/**
2* @brief Detecção de entrada de comunicação da esteira
3* @param [in] timeout Tempo limite de espera ms
4* @return Código de erro
5*/
6public int ConveyorComDetect(int timeout)
11.32. Acionamento da Detecção de Entrada de Comunicação da Esteira
1/**
2* @brief Acionamento da detecção de entrada de comunicação da esteira
3* @return Código de erro
4*/
5int ConveyorComDetectTrigger();
11.33. Exemplo de Programa de Acionamento da Detecção de Entrada de Comunicação da Esteira
1private void button3_Click(object sender, EventArgs e)
2{
3
4 // Desabilita o botão para evitar cliques repetidos
5 button3.Enabled = false;
6
7 // Executa a operação demorada em uma thread em segundo plano
8 Thread conveyorThread = new Thread(ConveyorTest);
9 conveyorThread.IsBackground = true;
10 conveyorThread.Start();
11}
12
13private void button4_Click(object sender, EventArgs e)
14{
15 // Obtém a entrada do usuário
16 string input = texBox.Text;
17 Console.WriteLine($"please input a number to trigger:{input}");
18
19 int rtn = robot.ConveyorComDetectTrigger();
20 Console.WriteLine($"ConveyorComDetectTrigger 返回值: {rtn}");
21
22}
23
24private void ConveyorTest()
25{
26 // Usa Invoke para atualizar os controles na thread da UI
27 this.Invoke((MethodInvoker)delegate {
28 Console.WriteLine("开始传送带测试...");
29 });
30
31 int retval = 0;
32 int index = 1;
33 int max_time = 30000;
34 bool block = false;
35 retval = 0;
36
37 /* 传送带抓取流程 */
38 DescPose startdescPose = new DescPose(139.176f, 4.717f, 9.088f, -179.999f, -0.004f, -179.990f);
39 JointPos startjointPos = new JointPos(-34.129f, -88.062f, 97.839f, -99.780f, -90.003f, -34.140f);
40
41 DescPose homePose = new DescPose(139.177f, 4.717f, 69.084f, -180.000f, -0.004f, -179.989f);
42 JointPos homejointPos = new JointPos(-34.129f, -88.618f, 84.039f, -85.423f, -90.003f, -34.140f);
43
44 ExaxisPos exaxisPos = new ExaxisPos(0, 0, 0, 0);
45 DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
46
47 // Move para posição segura
48 retval = robot.MoveL(homejointPos, homePose, 1, 1, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 1, 1);
49 Console.WriteLine($"MoveL 到安全位置返回值: {retval}");
50
51 // Detecção da esteira
52 retval = robot.ConveryComDetect(1000 * 10);
53 Console.WriteLine($"ConveyorComDetect 返回值: {retval}");
54
55 // Obtém dados de rastreamento
56 retval = robot.ConveyorGetTrackData(2);
57 Console.WriteLine($"ConveyorGetTrackData 返回值: {retval}");
58
59 // Inicia rastreamento
60 retval = robot.ConveyorTrackStart(2);
61 Console.WriteLine($"ConveyorTrackStart 返回值: {retval}");
62
63 // Move para posição inicial
64 robot.MoveL(startjointPos, startdescPose, 1, 1, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 1, 1);
65 robot.MoveL(startjointPos, startdescPose, 1, 1, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 1, 1);
66
67 // Encerra rastreamento
68 retval = robot.ConveyorTrackEnd();
69 Console.WriteLine($"ConveyorTrackEnd 返回值: {retval}");
70
71 // Retorna à posição segura
72 robot.MoveL(homejointPos, homePose, 1, 1, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 1, 1);
73
74 this.Invoke((MethodInvoker)delegate {
75 Console.WriteLine("传送带测试完成!");
76 button3.Enabled = true;
77 });
78}
11.34. Exemplo de Programa de Operação da Esteira do Robô
1private void btnConvert_Click(object sender, EventArgs e)
2{
3 // Conveyor belt tracking
4 DescPose pos1 = new DescPose(-354.549, 63.914, 270.176, -179.679, -0.134, 2.468);
5 DescPose pos2 = new DescPose(-351.203, -213.393, 351.054, -179.932, -0.508, 2.472);
6
7 double[] cmp = { 0.0, 0.0, 0.0 };
8 int rtn = robot.ConveyorCatchPointComp(cmp); // Set conveyor pick-up point compensation
9 if (rtn != 0)
10 {
11 return;
12 }
13 Console.WriteLine("ConveyorCatchPointComp: rtn " + rtn);
14
15 rtn = robot.MoveCart(pos1, 1, 0, (float)30.0, (float)180.0, (float)100.0, (float)-1.0, -1);
16 Console.WriteLine("MoveCart: rtn " + rtn);
17
18 rtn = robot.ConveyorIODetect(10000); // Conveyor workpiece I/O detection
19 Console.WriteLine("ConveyorIODetect: rtn " + rtn);
20
21 robot.ConveyorGetTrackData(1); // Configure conveyor tracking for picking
22 rtn = robot.ConveyorTrackStart(1); // Start tracking
23 Console.WriteLine("ConveyorTrackStart: rtn " + rtn);
24
25 rtn = robot.ConveyorTrackMoveL("cvrCatchPoint", 1, 0, (float)100.0, (float)0.0, (float)100.0, (float)-1.0, 0, 0);
26 Console.WriteLine("ConveyorTrackMoveL: rtn " + rtn);
27
28 rtn = robot.MoveGripper(2, 30, 60, 30, 30000, 0, 0, 0, 50, 50);
29 Console.WriteLine("ConveyorTrackMoveL: rtn " + rtn);
30
31
32 rtn = robot.ConveyorTrackMoveL("cvrRaisePoint", 1, 0, (float)100.0, (float)0.0, (float)100.0, (float)-1.0, 0, 0);
33 Console.WriteLine("ConveyorTrackMoveL: rtn " + rtn);
34
35 rtn = robot.ConveyorTrackEnd(); // Stop conveyor tracking
36 Console.WriteLine("ConveyorTrackEnd: rtn " + rtn);
37
38 rtn = robot.MoveCart(pos2, 1, 0, (float)30.0, (float)180.0, (float)100.0, (float)-1.0, -1);
39 Console.WriteLine("MoveCart: rtn " + rtn);
40
41 rtn = robot.MoveGripper(2, 100, 60, 30, 30000, 0,0,0,50,50);
42 Console.WriteLine("MoveGripper: rtn " + rtn);
43
44}
11.35. Configurar Sensor de Extremidade
1/**
2* @brief Configura o sensor de extremidade
3* @param [in] idCompany Fabricante, 18-JUNKONG;25-HUIDE
4* @param [in] idDevice Tipo, 0-JUNKONG/RYR6T.V1.0
5* @param [in] idSoftware Versão do software, 0-J1.0/HuiDe1.0 (temporariamente não disponível)
6* @param [in] idBus Posição de montagem, 1-porta 1 da extremidade; 2-porta 2 da extremidade...8-porta 8 da extremidade (temporariamente não disponível)
7* @return Código de erro
8*/
9int AxleSensorConfig(int idCompany, int idDevice, int idSoftware, int idBus);
11.36. Obter Configuração do Sensor de Extremidade
1/**
2* @brief Obtém a configuração do sensor de extremidade
3* @param [out] idCompany Fabricante, 18-JUNKONG;25-HUIDE
4* @param [out] idDevice Tipo, 0-JUNKONG/RYR6T.V1.0
5* @return Código de erro
6*/
7int AxleSensorConfigGet(ref int idCompany, ref int idDevice);
11.37. Ativar Sensor de Extremidade
1/**
2* @brief Ativa o sensor de extremidade
3* @param [in] actFlag 0-reset; 1-ativar
4* @return Código de erro
5*/
6int AxleSensorActivate(int actFlag);
11.38. Escrita no Registrador do Sensor de Extremidade
1/**
2* @brief Escrita no registrador do sensor de extremidade
3* @param [in] devAddr Endereço do dispositivo 0-255
4* @param [in] regHAddr 8 bits altos do endereço do registrador
5* @param [in] regLAddr 8 bits baixos do endereço do registrador
6* @param [in] regNum Número de registradores 0-255
7* @param [in] data1 Valor 1 a ser escrito no registrador
8* @param [in] data2 Valor 2 a ser escrito no registrador
9* @param [in] isNoBlock 0-bloqueado; 1-não bloqueado
10* @return Código de erro
11*/
12 int AxleSensorRegWrite(int devAddr, int regHAddr, int regLAddr, int regNum, int data1, int data2, int isNoBlock);
11.39. Exemplo de Código do Sensor de Extremidade
1private void button2_Click_1(object sender, EventArgs e)
2{
3 robot.AxleSensorConfig(18, 0, 0, 1);
4 int company = -1;
5 int type = -1;
6 robot.AxleSensorConfigGet(ref company, ref type);
7 Console.WriteLine("company is " + company + ", type is " + type);
8
9 int rtn = robot.AxleSensorActivate(1);
10 Console.WriteLine("AxleSensorActivate rtn is " + rtn);
11
12 Thread.Sleep(1000);
13
14 rtn = robot.AxleSensorRegWrite(1, 4, 6, 1, 0, 0, 0);
15 Console.WriteLine("AxleSensorRegWrite rtn is " + rtn);
16}
11.40. Obter Protocolo de Periféricos do Robô
Novo na versão C#SDK-v1.0.6.
1/**
2* @brief Obtém o protocolo de periféricos do robô
3* @param [out] protocol Número do protocolo de periféricos do robô 4096-placa de controle do eixo de extensão; 4097-ModbusSlave; 4098-ModbusMaster
4* @return Código de erro
5*/
6int GetExDevProtocol(ref int protocol);
11.41. Definir Protocolo de Periféricos do Robô
Novo na versão C#SDK-v1.0.6.
1/**
2* @brief Define o protocolo de periféricos do robô
3* @param [in] protocol Número do protocolo de periféricos do robô 4096-placa de controle do eixo de extensão; 4097-ModbusSlave; 4098-ModbusMaster
4* @return Código de erro
5*/
6int SetExDevProtocol(int protocol);
11.42. Exemplo de Programa para Definir Protocolo de Periféricos do Robô
1private void btnSetProto_Click(object sender, EventArgs e)
2{
3 int protocol = 4096;
4 int rtn = robot.SetExDevProtocol(protocol);
5 Console.WriteLine("SetExDevProtocol rtn " + rtn);
6 rtn = robot.GetExDevProtocol(ref protocol);
7 Console.WriteLine("GetExDevProtocol rtn " + rtn + " protocol is: " + protocol);
8}
11.43. Obter Parâmetros de Comunicação da Extremidade
1/**
2* @brief Obtém os parâmetros de comunicação da extremidade
3* @param param Parâmetros de comunicação da extremidade
4* @return Código de erro
5*/
6int GetAxleCommunicationParam(ref AxleComParam getParam);
11.44. Definir Parâmetros de Comunicação da Extremidade
1/**
2* @brief Define os parâmetros de comunicação da extremidade
3* @param param Parâmetros de comunicação da extremidade
4* @return Código de erro
5*/
6int SetAxleCommunicationParam(AxleComParam param);
11.45. Definir Tipo de Transferência de Arquivo da Extremidade
1/**
2* @brief Define o tipo de transferência de arquivo da extremidade
3* @param type 1-arquivo de atualização MCU; 2-arquivo LUA
4* @return Código de erro
5*/
6int SetAxleFileType(int type);
11.46. Ativar Execução LUA na Extremidade
1/**
2* @brief Ativa a execução LUA na extremidade
3* @param enable 0-desativar; 1-ativar
4* @return Código de erro
5*/
6int SetAxleLuaEnable(int enable);
11.47. Recuperação de Erro de Arquivo LUA na Extremidade
1/**
2* @brief Recuperação de erro de arquivo LUA na extremidade
3* @param status 0-não recuperar; 1-recuperar
4* @return Código de erro
5*/
6int SetRecoverAxleLuaErr(int status);
11.48. Obter Estado de Ativação da Execução LUA na Extremidade
1/**
2* @brief Obtém o estado de ativação da execução LUA na extremidade
3* @param [out] status 0-desativado; 1-ativado
4* @return Código de erro
5*/
6int GetAxleLuaEnableStatus(ref int status);
11.49. Definir os tipos de dispositivo de extremidade habilitados para LUA
1/**
2* @brief Define os tipos de dispositivo de extremidade habilitados para o LUA
3* @param [in] forceSensorEnable Status de habilitação do sensor de força, 0-desabilitado; 1-habilitado
4* @param [in] gripperEnable Status de habilitação da garra, 0-desabilitado; 1-habilitado
5* @param [in] IOEnable Status de habilitação do dispositivo IO, 0-desabilitado; 1-habilitado
6* @param [in] dexhandEnable Status de habilitação da mão destra, 0-desabilitado; 1-habilitado
7* @return Código de erro
8*/
9public int SetAxleLuaEnableDeviceType(int forceSensorEnable, int gripperEnable, int IOEnable, int dexhandEnable)
11.50. Obter os tipos de dispositivo de extremidade habilitados para LUA
1/**
2* @brief Obtém os tipos de dispositivo de extremidade habilitados para o LUA
3* @param [out] forceSensorEnable Status de habilitação do sensor de força, 0-desabilitado; 1-habilitado
4* @param [out] gripperEnable Status de habilitação da garra, 0-desabilitado; 1-habilitado
5* @param [out] IOEnable Status de habilitação do dispositivo IO, 0-desabilitado; 1-habilitado
6* @param [out] dexhandEnable Status de habilitação da mão destra, 0-desabilitado; 1-habilitado
7* @return Código de erro
8*/
9public int GetAxleLuaEnableDeviceType(ref int forceSensorEnable, ref int gripperEnable, ref int IOEnable, ref int dexhandEnable)
11.51. Obter os dispositivos de extremidade atualmente configurados
1/**
2* @brief Obtém os dispositivos de extremidade atualmente configurados
3* @param [out] forceSensorEnable Número do dispositivo de sensor de força habilitado, 0-desabilitado; 1-habilitado
4* @param [out] gripperEnable Número do dispositivo de garra habilitado, 0-desabilitado; 1-habilitado
5* @param [out] IODeviceEnable Número do dispositivo IO habilitado, 0-desabilitado; 1-habilitado
6* @param [out] decHandEnable Número do dispositivo de mão destra habilitado, 0-desabilitado; 1-habilitado
7* @return Código de erro
8*/
9public int GetAxleLuaEnableDevice(ref int[] forceSensorEnable, ref int[] gripperEnable, ref int[] IODeviceEnable, ref int[] decHandEnable)
11.52. Definir as funções de controle de ação da garra habilitadas
1/**
2* @brief Define as funções de controle de ação da garra habilitadas
3* @param [in] id Número do dispositivo da garra
4* @param [in] func func[0]-habilitação da garra; func[1]-inicialização da garra; func[2]-definição de posição; func[3]-definição de velocidade; func[4]-definição de torque; func[6]-leitura do estado da garra;
5 func[7]-leitura do estado de inicialização; func[8]-leitura do código de falha; func[9]-leitura da posição; func[10]-leitura da velocidade; func[11]-leitura do torque; func[12]-definição do número de rotações para garra rotativa;
6 func[13]-definição da velocidade de rotação para garra rotativa; func[14]-definição do torque de rotação para garra rotativa; func[15]-leitura do estado da garra rotativa; func[16]-leitura do estado de inicialização da garra rotativa;
7 func[17]-leitura do número de rotações da garra rotativa; func[18]-leitura da velocidade da garra rotativa; func[19]-leitura do torque da garra rotativa; func[20]-definição de movimento síncrono multi-eixo; func[21]-comando de limpeza de falhas;
8 func[22]-estado de operação de eixo único; func[23]-estado de operação de todos os eixos;
9* @return Código de erro
10*/
11public int SetAxleLuaGripperFunc(int id, int[] func)
11.53. Obter as funções de controle de ação da garra habilitadas
1/**
2* @brief Obtém as funções de controle de ação da garra habilitadas
3* @param [in] id Número do dispositivo da garra
4* @param [out] func func[0]-habilitação da garra; func[1]-inicialização da garra; func[2]-definição de posição; func[3]-definição de velocidade; func[4]-definição de torque; func[6]-leitura do estado da garra;
5 func[7]-leitura do estado de inicialização; func[8]-leitura do código de falha; func[9]-leitura da posição; func[10]-leitura da velocidade; func[11]-leitura do torque; func[12]-definição do número de rotações para garra rotativa;
6 func[13]-definição da velocidade de rotação para garra rotativa; func[14]-definição do torque de rotação para garra rotativa; func[15]-leitura do estado da garra rotativa; func[16]-leitura do estado de inicialização da garra rotativa;
7 func[17]-leitura do número de rotações da garra rotativa; func[18]-leitura da velocidade da garra rotativa; func[19]-leitura do torque da garra rotativa; func[20]-definição de movimento síncrono multi-eixo; func[21]-comando de limpeza de falhas;
8 func[22]-estado de operação de eixo único; func[23]-estado de operação de todos os eixos;
9* @return Código de erro
10*/
11public int GetAxleLuaGripperFunc(int id, ref int[] func)
11.54. Escrita de Arquivo no Escravo Ethercat do Robô
1/**
2* @brief Escrita de arquivo no escravo Ethercat do robô
3* @param [in] type Tipo de arquivo do escravo, 1-arquivo de atualização do escravo; 2-arquivo de configuração do escravo
4* @param [in] slaveID Número do escravo
5* @param [in] fileName Nome do arquivo a ser enviado
6* @return Código de erro
7*/
8int SlaveFileWrite(int type, int slaveID, string fileName);
11.55. Enviar Arquivo de Protocolo Aberto LUA da Extremidade
1/**
2* @brief Envia arquivo de protocolo aberto LUA da extremidade
3* @param filePath Caminho do arquivo lua local ".../AXLE_LUA_End_DaHuan.lua"
4* @return Código de erro
5*/
6int AxleLuaUpload(string filePath);
11.56. Entrar no Modo Boot do Escravo Ethercat do Robô
1/**
2* @brief Entrar no modo boot do escravo Ethercat do robô
3* @return Código de erro
4*/
5int SetSysServoBootMode();
11.57. Exemplo de Código para Operações com Arquivos LUA da Extremidade do Robô
1private void button41_Click(object sender, EventArgs e)
2{
3 ROBOT_STATE_PKG pkg = new ROBOT_STATE_PKG();
4 robot.AxleLuaUpload("D://zUP/AXLE_LUA_End_JunDuo_V0.4_20260602.lua");
5
6 AxleComParam param = new AxleComParam(7, 8, 1, 0, 5, 3, 1);
7 robot.SetAxleCommunicationParam(param);
8
9 AxleComParam getParam = new AxleComParam();
10 robot.GetAxleCommunicationParam(ref getParam);
11 Console.WriteLine("GetAxleCommunicationParam param is {0} {1} {2} {3} {4} {5} {6}",
12 getParam.baudRate, getParam.dataBit, getParam.stopBit, getParam.verify,
13 getParam.timeout, getParam.timeoutTimes, getParam.period);
14
15 robot.SetAxleLuaEnable(1);
16 int luaEnableStatus = 0;
17 robot.GetAxleLuaEnableStatus(ref luaEnableStatus);
18 robot.SetAxleLuaEnableDeviceType(0, 1, 0, 0);
19
20 int forceEnable = 0;
21 int gripperEnable = 0;
22 int ioEnable = 0;
23 int dexhandEnable = 0;
24 robot.GetAxleLuaEnableDeviceType(ref forceEnable, ref gripperEnable, ref ioEnable, ref dexhandEnable);
25 Console.WriteLine("GetAxleLuaEnableDeviceType param is {0} {1} {2}", forceEnable, gripperEnable, ioEnable);
26
27 int[] func = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
28 robot.SetAxleLuaGripperFunc(1, func);
29
30 int[] getFunc = new int[32];
31 robot.GetAxleLuaGripperFunc(1, ref getFunc);
32 int[] getforceEnable = new int[16];
33 int[] getgripperEnable = new int[16];
34 int[] getioEnable = new int[16];
35 int[] dexhandEnable1 = new int[16];
36 robot.GetAxleLuaEnableDevice(ref getforceEnable, ref getgripperEnable, ref getioEnable,ref dexhandEnable1);
37 Console.WriteLine("\ngetforceEnable status : ");
38 foreach (int i in getforceEnable)
39 {
40 Console.Write(i + ",");
41 }
42 Console.WriteLine("\ngetgripperEnable status : ");
43 foreach (int i in getgripperEnable)
44 {
45 Console.Write(i + ",");
46 }
47 Console.WriteLine("\ngetioEnable status : ");
48 foreach (int i in getioEnable)
49 {
50 Console.Write(i + ",");
51 }
52 Console.WriteLine();
53 robot.ActGripper(1, 0);
54 Thread.Sleep(3000);
55 robot.ActGripper(1, 1);
56 Thread.Sleep(4000);
57 robot.MoveGripper(1, 50, 10, 100, 50000, 0, 0, 0, 0, 0);
58 int pos = 0;
59 while (true)
60 {
61 robot.GetRobotRealTimeState(ref pkg);
62 Console.WriteLine("gripper pos is " + pkg.gripper_position);
63 Thread.Sleep(100);
64 }
65}
11.58. Obter Estado dos Botões do SmartTool
Novo na versão C#SDK-V1.1.3: Web-3.8.2
1/**
2* @brief Obtém o estado dos botões do SmartTool
3* @param [out] state Estado dos botões do SmartTool; (bit0:0-comunicação normal; 1-comunicação perdida; bit1-operação de desfazer; bit2-limpar programa;
4 bit3-tecla A;bit4-tecla B;bit5-tecla C;bit6-tecla D;bit7-tecla E;bit8-tecla IO;bit9-manual/automático;bit10-iniciar)
5* @return Código de erro
6*/
7int GetSmarttoolBtnState(ref int state);
11.59. Exemplo de Código
Novo na versão C#SDK-V1.1.3: Web-3.8.2
1private void button11_Click(object sender, EventArgs e)
2{
3
4 ROBOT_STATE_PKG pkg = new ROBOT_STATE_PKG();
5 int state = 0;
6 while (true)
7 {
8 int rtn = robot.GetSmarttoolBtnState(ref state);
9 string binaryString = Convert.ToString(state, 2).PadLeft(32, '0');
10 Console.WriteLine($"GetSmarttoolBtnState rtn (binary): {binaryString}");
11 Thread.Sleep(100);
12 }
13
14}
11.60. Enviar Arquivo Lua de Protocolo Aberto
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Envia arquivo Lua de protocolo aberto
3* @param filePath Caminho do arquivo lua de protocolo aberto local
4* @return Código de erro
5*/
6public int OpenLuaUpload(string filePath)
11.61. Obter Parâmetros da Placa Escrava
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Obtém os parâmetros da placa escrava
3* @param type 0-Ethercat,1-CClink, 3-Ethercat, 4-EIP
4* @param version Versão do protocolo
5* @param connState 0-desconectado 1-conectado
6* @return Código de erro
7*/
8public int GetFieldBusConfig(int[] type, int[] version, int[] connState)
11.62. Escrever DO no Escravo
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Escreve DO no escravo
3* @param DOIndex Número do DO
4* @param wirteNum Número a ser escrito
5* @param status Valor a ser escrito, máximo de 8
6* @return Código de erro
7*/
8public int FieldBusSlaveWriteDO(int DOIndex, int wirteNum, int[] status)
11.63. Escrever AO no Escravo
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Escrever AO da estação escrava
3* @param [in] AOIndex Número AO
4* @param [in] writeNum Número de valores a escrever
5* @param [in] status Matriz de valores a escrever (máximo 8), AO0~AO15 são do tipo inteiro, AO16~AO31 são do tipo ponto flutuante
6* @return Código de erro
7*/
8public int FieldBusSlaveWriteAO(int AOIndex, int writeNum, double[] status)
11.64. Ler DI do Escravo
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Lê DI do escravo
3* @param DOIndex Número do DI
4* @param readNum Número a ser lido
5* @param status Valor lido, máximo de 8
6* @return Código de erro
7*/
8public int FieldBusSlaveReadDI(int DOIndex, int readNum, int[] status)
11.65. Ler AI do Escravo
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Lê AI do escravo
3* @param AIIndex Número do AI
4* @param readNum Número a ser lido
5* @param status Valor lido, máximo de 8
6* @return Código de erro
7*/
8public int FieldBusSlaveReadAI(int AIIndex, int readNum, double[] status)
11.66. Aguardar Entrada DI de Extensão
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Aguarda entrada DI de extensão
3* @param DIIndex Número do DI
4* @param status 0-nível baixo;1-nível alto
5* @param waitMs Tempo máximo de espera (ms)
6* @return Código de erro
7*/
8public int FieldBusSlaveWaitDI(int DIIndex, int status, int waitMs)
11.67. Aguardar Entrada AI de Extensão
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Aguarda entrada AI de extensão
3* @param AIIndex Número do AI
4* @param waitType 0-maior que;1-menor que
5* @param value Valor do AI
6* @param waitMs Tempo máximo de espera (ms)
7* @return Código de erro
8*/
9public int FieldBusSlaveWaitAI(int AIIndex, int waitType, double value, int waitMs)
11.68. Exemplo de Código para Interfaces de Instrução do Modo Escravo
1private void button101_Click(object sender, EventArgs e)
2{
3 int rtn = 0;
4
5 int type = 0, version = 0, connState = 0;
6 int[] ctrl = new int[8];
7 double[] ctrlAO = new double[8];
8 int[] DI = new int[8];
9 double[] AI = new double[8];
10 if (rtn != 0)
11 {
12 return;
13 }
14 // Upload and load open protocol file
15 robot.OpenLuaUpload("E://temp/CtrlDev_field.lua");
16 Thread.Sleep(2000);
17 robot.SetCtrlOpenLUAName(3, "CtrlDev_field.lua");
18 robot.UnloadCtrlOpenLUA(3);
19 robot.LoadCtrlOpenLUA(3);
20 Thread.Sleep(8000);
21
22 // Get protocol type, software version, and connection status with PLC
23 robot.GetFieldBusConfig(ref type, ref version, ref connState);
24 Console.WriteLine($"type is {type}, version is {version}, connState is {connState}");
25
26 // Write DO0 = 1, DO1 = 0, DO2 = 1
27 ctrl[0] = 1;
28 ctrl[1] = 0;
29 ctrl[2] = 1;
30 robot.FieldBusSlaveWriteDO(0, 3, ctrl);
31
32 // Write AO2 = 0x1000
33 ctrlAO[0] = 0x1000;
34 robot.FieldBusSlaveWriteAO(2, 1, ctrlAO);
35
36 for (int i = 0; i < 100; i++)
37 {
38 robot.FieldBusSlaveReadDI(0, 4, ref DI);
39 Console.WriteLine($"DI0 is {DI[0]}, DI1 is {DI[1]}, DI2 is {DI[2]}, DI3 is {DI[3]}");
40 robot.FieldBusSlaveReadAI(0, 3, ref AI);
41 Console.WriteLine($"AI0 is {AI[0]}, AI1 is {AI[1]}, AI2 is {AI[2]}");
42 Thread.Sleep(10);
43 }
44 int ret = robot.FieldBusSlaveWaitDI(0, 1, 100);
45 Console.WriteLine($"FieldBusSlaveWaitDI result is {ret}");
46
47 ret = robot.FieldBusSlaveWaitAI(0, 0, 400.00f, 100);
48 Console.WriteLine($"FieldBusSlaveWaitAI result is {ret}");
49}
11.69. Controlar Matriz de Ventosas
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Controla a matriz de ventosas
3* @param slaveID Número do escravo
4* @param len Comprimento
5* @param ctrlValue Valor de controle 1-sucção com vácuo máximo 2-sucção com vácuo definido 3-parar sucção
6* @return Código de erro
7*/
8public int SetSuckerCtrl(int slaveID, int len, int[] ctrlValue)
11.70. Obter Estado da Matriz de Ventosas
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Obtém o estado da matriz de ventosas
3* @param slaveID Número do escravo
4* @param state Estado de sucção 0-objeto solto 1-objeto detectado e sucção bem-sucedida 2-objeto não detectado 3-objeto desprendido
5* @param pressValue Vácuo atual unidade kPa
6* @param error Código de erro atual da ventosa
7* @return Código de erro
8*/
9public int GetSuckerState(int slaveID, int[] state, int[] pressValue, int[] error)
11.71. Aguardar Estado da Ventosa
Novo na versão C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Aguarda o estado da ventosa
3* @param slaveID Número do escravo
4* @param state Estado de sucção 0-objeto solto 1-objeto detectado e sucção bem-sucedida 2-objeto não detectado 3-objeto desprendido
5* @param ms Tempo máximo de espera
6* @return Código de erro
7*/
8public int WaitSuckerState(int slaveID, int state, int ms)
11.72. Exemplo de Código para Instruções de Controle da Matriz de Ventosas
1private void TestSucker(Robot robot)
2{
3
4 int[] ctrl = new int[20];
5 int state=0;
6 int pressValue=0;
7 int error=0;
8 int rtn;
9
10
11 // Upload and load open protocol file
12 robot.OpenLuaUpload(@"C:\SDK\CtrlDev_sucker.lua");
13 Thread.Sleep(2000);
14 robot.UnloadCtrlOpenLUA(1);
15 robot.LoadCtrlOpenLUA(1);
16 Thread.Sleep(1000);
17
18 // Control sucker in broadcast mode with maximum adsorption capacity
19 ctrl[0] = 1;
20 robot.SetSuckerCtrl(0, 1, ctrl);
21
22 // Monitor states of sucker 1 and sucker 12 in a loop
23 for (int i = 0; i < 100; i++)
24 {
25 robot.GetSuckerState(1, ref state, ref pressValue, ref error);
26 Console.WriteLine($"sucker1 state is {state}, pressValue is {pressValue}, error num is {error}");
27 robot.GetSuckerState(12, ref state, ref pressValue, ref error);
28 Console.WriteLine($"sucker12 state is {state}, pressValue is {pressValue}, error num is {error}");
29 Thread.Sleep(100);
30 }
31 // Wait for sucker 1 to reach adsorbed state, timeout 100ms
32 int ret = robot.WaitSuckerState(1, 1, 100);
33 Console.WriteLine($"WaitSuckerState result is {ret}");
34
35 // Unicast mode to turn off sucker 1 and 12
36 ctrl[0] = 3;
37 robot.SetSuckerCtrl(1, 1, ctrl);
38 robot.SetSuckerCtrl(12, 1, ctrl);
39
40 robot.CloseRPC();
41}
11.73. Função de Ligar/Desligar Periférico Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Função de ligar/desligar periférico laser
3 * @param [in] OnOff 0-desligar 1-ligar
4 * @param [in] weldId ID da solda, padrão 0
5 * @return Código de erro
6 */
7public int LaserTrackingLaserOnOff(int OnOff, int weldId)
11.74. Função de Iniciar/Parar Rastreamento a Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Função de iniciar/parar rastreamento a laser
3 * @param [in] OnOff 0-parar 1-iniciar
4 * @param [in] coordId Número do sistema de coordenadas da ferramenta do periférico laser
5 * @return Código de erro
6 */
7public int LaserTrackingTrackOnOff(int OnOff, int coordId)
11.75. Busca de Posição a Laser - Direção Fixa
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Busca de posição a laser - Direção Fixa
3 * @param [in] direction 0-x+ 1-x- 2-y+ 3-y- 4-z+ 5-z-
4 * @param [in] vel Velocidade unidade %
5 * @param [in] distance Distância máxima de busca unidade mm
6 * @param [in] timeout Tempo limite de busca unidade ms
7 * @param [in] posSensorNum Número do sistema de coordenadas da ferramenta calibrado para o laser
8 * @return Código de erro
9 */
10public int LaserTrackingSearchStart_xyz(int direction, int vel, int distance, int timeout, int posSensorNum)
11.76. Busca de Posição a Laser - Direção Arbitrária
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Busca de posição a laser - Direção Arbitrária
3 * @param [in] directionPoint Coordenadas xyz do ponto de entrada da busca
4 * @param [in] vel Velocidade unidade %
5 * @param [in] distance Distância máxima de busca unidade mm
6 * @param [in] timeout Tempo limite de busca unidade ms
7 * @param [in] posSensorNum Número do sistema de coordenadas da ferramenta calibrado para o laser
8 * @return Código de erro
9 */
10public int LaserTrackingSearchStart_point(DescTran directionPoint, int vel, int distance, int timeout, int posSensorNum)
11.77. Fim da Busca de Posição a Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2* @brief Fim da busca de posição a laser
3* @return Código de erro
4*/
5public int LaserTrackingSearchStop()
11.78. Configuração de IP do Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Configuração de IP do laser
3 * @param [in] ip Endereço IP do periférico laser
4 * @param [in] port Número da porta do periférico laser
5 * @return Código de erro
6 */
7public int LaserTrackingSensorConfig(string ip, int port)
11.79. Configuração do Período de Amostragem do Periférico Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Configuração do período de amostragem do periférico laser
3 * @param [in] period Período de amostragem do periférico laser unidade ms
4 * @return Código de erro
5 */
6public int LaserTrackingSensorSamplePeriod(int period)
11.80. Carregar Driver do Periférico Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Carregar driver do periférico laser
3 * @param [in] type Tipo de protocolo do driver do periférico laser 101-Ruiniu 102-Chuangxiang 103-Quanshi 104-Tongzhou 105-Aotai
4 * @return Código de erro
5 */
6public int LoadPosSensorDriver(int type)
11.81. Descarregar Driver do Periférico Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Descarregar driver do periférico laser
3 * @return Código de erro
4 */
5public int UnLoadPosSensorDriver()
11.82. Gravação da Trajetória da Solda a Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Gravação da trajetória da solda a laser
3 * @param [in] status 0-parar gravação 1-rastreamento em tempo real 2-iniciar gravação
4 * @param [in] delayTime Tempo de atraso unidade ms
5 * @return Código de erro
6 */
7public int LaserSensorRecord1(int status, int delayTime)
11.83. Reprodução da Trajetória da Solda a Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Reprodução da trajetória da solda a laser
3 * @param [in] delayTime Tempo de atraso unidade ms
4 * @param [in] speed Velocidade unidade %
5 * @return Código de erro
6 */
7public int LaserSensorReplay(int delayTime, double speed)
11.84. Reprodução do Rastreamento a Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Reprodução do rastreamento a laser
3 * @return Código de erro
4 */
5public int MoveLTR()
11.85. Gravação e Reprodução da Trajetória da Solda a Laser
1/**
2* @brief Gravação e reprodução da trajetória da solda a laser
3* @param [in] delayMode Modo de atraso 0-tempo de atraso 1-distância de atraso
4* @param [in] delayTime Tempo de atraso unidade ms
5* @param [in] delayDisExAxisNum Número do eixo de extensão
6* @param [in] delayDis Distância de atraso unidade mm
7* @param [in] sensitivePara Coeficiente de sensibilidade de compensação
8* @param [in] trackMode Tipo de rastreamento pontual. 0-movimento assíncrono do eixo de extensão;1-robô
9* @param [in] triggerMode Modo de acionamento do rastreamento pontual. 0-duração do rastreamento;1-IO
10* @param [in] runTime Duração do rastreamento pontual do robô (s)
11* @param [in] speed Velocidade unidade %
12* @return Código de erro
13*/
14public int LaserSensorRecordandReplay(int delayMode, int delayTime, int delayDisExAxisNum,double delayDis, double sensitivePara, int trackMode, int triggerMode,double runTime, double speed)
11.86. Mover para o Início da Gravação da Solda
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Mover para o início da gravação da solda
3 * @param [in] moveType 0-PTP 1-LIN
4 * @param [in] ovl Velocidade unidade %
5 * @return Código de erro
6 */
7public int MoveToLaserRecordStart(int moveType, double ovl)
11.87. Mover para o Fim da Gravação da Solda
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Mover para o fim da gravação da solda
3 * @param [in] moveType 0-PTP 1-LIN
4 * @param [in] ovl Velocidade unidade %
5 * @return Código de erro
6 */
7public int MoveToLaserRecordEnd(int moveType, double ovl)
11.88. Mover para o Ponto de Busca do Sensor a Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Mover para o ponto de busca do sensor a laser
3 * @param [in] moveFlag Tipo de movimento: 0-PTP;1-LIN
4 * @param [in] ovl Fator de escala de velocidade, 0-100
5 * @param [in] dataFlag Seleção de dados de cache da solda: 0-executar dados planejados;1-executar dados gravados
6 * @param [in] plateType Tipo de placa: 0-placa ondulada;1-placa corrugada;2-placa de cerca;3-barril de óleo;4-aço de casco ondulado
7 * @param [in] trackOffectType Tipo de deslocamento do sensor a laser: 0-sem deslocamento;1-deslocamento no sistema de coordenadas base;2-deslocamento no sistema de coordenadas da ferramenta;3-deslocamento com base nos dados brutos do sensor a laser
8 * @param [in] offset Valor de deslocamento
9 * @return Código de erro
10 */
11public int MoveToLaserSeamPos(int moveFlag, double ovl, int dataFlag, int plateType, int trackOffectType, DescPose offset)
11.89. Obter Informações de Coordenadas do Ponto de Busca do Sensor a Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Obter informações de coordenadas do ponto de busca do sensor a laser
3 * @param [in] trackOffectType Tipo de deslocamento do sensor a laser: 0-sem deslocamento;1-deslocamento no sistema de coordenadas base;2-deslocamento no sistema de coordenadas da ferramenta;3-deslocamento com base nos dados brutos do sensor a laser
4 * @param [in] offset Valor de deslocamento
5 * @param [out] jPos Posição articular [°]
6 * @param [out] descPos Posição cartesiana [mm]
7 * @param [out] tool Sistema de coordenadas da ferramenta
8 * @param [out] user Sistema de coordenadas da peça
9 * @param [out] exaxis Posição do eixo de extensão [mm]
10 * @return Código de erro
11 */
12public int GetLaserSeamPos(int trackOffectType, DescPose offset, ref JointPos jPos, ref DescPose descPos, ref int tool, ref int user, ref ExaxisPos exaxis)
11.90. Exemplo de Código para Configuração e Depuração de Parâmetros do Periférico Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1void testLaserConfig()
2{
3 int[] ctrl = new int[20];
4 int state;
5 int pressValue;
6 int error;
7 robot.LaserTrackingSensorConfig("192.168.58.20", 5020);
8 robot.LaserTrackingSensorSamplePeriod(20);
9 robot.LoadPosSensorDriver(101);
10 robot.LaserTrackingLaserOnOff(0, 0);
11 System.Threading.Thread.Sleep(3000);
12 robot.LaserTrackingLaserOnOff(1, 0);
13}
11.91. Exemplo de Código para Digitalização e Reprodução de Trajetória a Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1void testLaserRecordAndReplay()
2{
3 int[] ctrl = new int[20];
4 int state;
5 int pressValue;
6 int error;
7 robot.OpenLuaUpload("D://zUP/CtrlDev_laser_ruiniu-0117.lua");
8 System.Threading.Thread.Sleep(2000);
9 robot.SetCtrlOpenLUAName(0, "CtrlDev_laser_ruiniu-0117.lua");
10 robot.UnloadCtrlOpenLUA(0);
11 robot.LoadCtrlOpenLUA(0);
12 System.Threading.Thread.Sleep(8000);
13 for (int i=0;i<10;++i)
14 {
15 JointPos startjointPos = new JointPos(56.205, -117.951, 141.872, -118.149, -94.217, -122.176);
16 DescPose startdescPose = new DescPose(-97.552, -282.855, 26.675, 174.182, -1.338, -91.707);
17 ExaxisPos exaxisPos = new ExaxisPos(0, 0, 0, 0);
18 DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
19
20 robot.MoveL(startjointPos, startdescPose, 1, 0, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 0);
21 robot.LaserSensorRecord1(2, 10);
22
23 JointPos endjointPos = new JointPos(68.809, -87.100, 121.120, -127.233, -95.038, -109.555);
24 DescPose enddescPose = new DescPose(-103.555, -464.234, 13.076, 174.179, -1.344, -91.709);
25 robot.MoveL(endjointPos, enddescPose, 1, 0, 50, 100, 100, -1, exaxisPos, 0, 0, offdese, 0);
26
27 robot.LaserSensorRecord1(0, 10);
28 robot.MoveToLaserRecordStart(1, 30);
29 robot.LaserSensorReplay(10, 100);
30 robot.MoveLTR();
31 robot.LaserSensorRecord1(0, 10);
32 Console.WriteLine($"Number of completions : {i+1} ");
33 }
34
35}
11.92. Exemplo de Código para Busca de Posição e Rastreamento em Tempo Real a Laser
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1public static void testLasertrack()
2{
3 int[] ctrl = new int[20];
4 int state;
5 int pressValue;
6 int error;
7 robot.OpenLuaUpload("D://zUP/CtrlDev_laser_ruiniu-0117.lua");
8 System.Threading.Thread.Sleep(2000);
9 robot.SetCtrlOpenLUAName(0, "CtrlDev_laser_ruiniu-0117.lua");
10 robot.UnloadCtrlOpenLUA(0);
11 robot.LoadCtrlOpenLUA(0);
12 System.Threading.Thread.Sleep(8000);
13 for (int i = 0; i < 10; ++i)
14 {
15 JointPos startjointPos = new JointPos(56.205, -117.951, 141.872, -118.149, -94.217, -122.176);
16 DescPose startdescPose = new DescPose(-97.552, -282.855, 26.675, 174.182, -1.338, -91.707);
17 ExaxisPos exaxisPos = new ExaxisPos(0, 0, 0, 0);
18 DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
19 DescTran directionPoint = new DescTran();
20
21 robot.MoveL(startjointPos, startdescPose, 1, 0, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 0);
22 robot.LaserTrackingSearchStart_xyz(3, 100, 300, 1000, 3);
23 robot.LaserTrackingSearchStop();
24 robot.MoveToLaserSeamPos(1, 30, 0, 0, 0, offdese);
25
26 robot.LaserTrackingTrackOnOff(1, 3);
27
28 JointPos endjointPos = new JointPos(68.809, -87.100, 121.120, -127.233, -95.038, -109.555);
29 DescPose enddescPose = new DescPose(-103.555, -464.234, 13.076, 174.179, -1.344, -91.709);
30 robot.MoveL(endjointPos, enddescPose, 1, 0, 20, 100, 100, -1, exaxisPos, 0, 0, offdese, 0);
31 robot.LaserTrackingTrackOnOff(0, 3);
32 Console.WriteLine($"Number of completions : {i + 1} ");
33 }
34}
11.93. Exemplo de Código para Rastreamento a Laser Síncrono com Eixo de Extensão e Robô
Novo na versão C#SDK-V1.1.8: Web-3.8.6
1public void TestLaserTrackAndExitAxis()
2{
3 ExaxisPos startexaxisPos = new ExaxisPos(0, 0, 0, 0);
4 ExaxisPos seamexaxisPos = new ExaxisPos(-10, 0, 0, 0);
5 ExaxisPos endexaxisPos = new ExaxisPos(-30, 0, 0, 0);
6 DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
7 JointPos startjointPos = new JointPos(58.337, -119.628, 146.037, -116.358, -92.224, -117.654);
8 DescPose startdescPose = new DescPose(-53.375, -255.363, 0.919, 178.054, 1.077, -94.026);
9 for (int i=0;i<10;++i)
10 {
11 robot.ExtAxisSyncMoveJ(startjointPos, startdescPose, 1, 0, 100, 100, 100, startexaxisPos, -1, 0, offdese);
12 Console.WriteLine("11111");
13 int ret = robot.LaserTrackingSearchStart_xyz(3, 100, 300, 1000, 2);
14 robot.LaserTrackingSearchStop();
15 Console.WriteLine("2222");
16 int tool = 0;
17 int user = 0;
18 JointPos seamjointPos = new JointPos();
19 DescPose seamdescPose = new DescPose();
20 robot.GetLaserSeamPos(0, offdese, ref seamjointPos, ref seamdescPose, ref tool, ref user, ref startexaxisPos);
21 Console.WriteLine($"{seamjointPos.jPos[0]}, {seamjointPos.jPos[1]}, {seamjointPos.jPos[2]}, " +
22 $"{seamjointPos.jPos[3]}, {seamjointPos.jPos[4]}, {seamjointPos.jPos[5]}, " +
23 $"{seamdescPose.tran.x}, {seamdescPose.tran.y}, {seamdescPose.tran.z}, " +
24 $"{seamdescPose.rpy.rx}, {seamdescPose.rpy.ry}, {seamdescPose.rpy.rz}");
25 if (ret == 0)
26 {
27 robot.ExtAxisSyncMoveJ(seamjointPos, seamdescPose, 1, 0, 100, 100, 100, seamexaxisPos, -1, 0, offdese);
28 Console.WriteLine("3333");
29 robot.LaserTrackingTrackOnOff(1, 2);
30 JointPos endjointPos = new JointPos(70.580, -90.918, 126.593, -125.154, -92.162, -105.403);
31 DescPose enddescPose = new DescPose(-53.375, -419.020, 0.920, 178.054, 1.076, -94.026);
32 robot.ExtAxisSyncMoveL(endjointPos, enddescPose, 1, 0, 20, 100, 100, -1, endexaxisPos, 0, offdese);
33 robot.LaserTrackingTrackOnOff(0, 2);
34 }
35 Console.WriteLine($"Number of completions : {i + 1} ");
36 }
37}
11.94. Ativar/Desativar Função de Passagem Direta na Extremidade
1/**
2* @brief Ativa/desativa a função de passagem direta na extremidade
3* @param [in] enable, 0-desativar, 1-ativar
4* @return Código de erro
5*/
6public int SetAxleGenComEnable(int mode)
11.95. Transmissão e Recepção de Dados Aperiódicos na Função de Passagem Direta na Extremidade
1/**
2* @brief Envia dados aperiódicos na extremidade e aguarda resposta
3* @param [in] len_snd, comprimento do envio
4* @param [in] sndBuff[], dados a serem enviados
5* @param [in] len_rcv, comprimento da recepção selecionada
6* @param [out] rcvBuff[], dados de resposta
7* @return Código de erro
8*/
9public int SndRcvAxleGenComCmdData(int len_snd, int[] sndBuff, int len_rcv, ref int[] rcvdata)
11.96. Exemplo de Código para Comunicação de Dados Aperiódicos do Cabeçote de Moxabustão Beiyikang Baseado na Função de Passagem Direta na Extremidade
1void testAxleGenCom()
2{
3 int[] led_on = new int[6] { 0xAB, 0xBA, 0x12, 0x01, 0x01, 0x79 };
4 int[] led_off = new int[6] { 0xAB, 0xBA, 0x12, 0x01, 0x00, 0x78 };
5 int[] version = new int[5]{ 0xAB, 0xBA, 0x11, 0x00, 0x76 };
6 int[] state = new int[6] { 0xAB, 0xBA, 0x1B,0x01, 0xAA, 0x2B };
7 int[] cycleState = new int[6] { 0xAB, 0xBA, 0x12, 0x01, 0x00, 0x78 };
8
9 int[] rcvdata = new int[16];
10 int ret = 0;
11 int cnt = 1;
12
13 JointPos p1Joint = new JointPos(88.708, -86.178, 140.989, -141.825, -89.162, -49.879);
14 DescPose p1Desc = new DescPose(188.007, -377.850, 260.207, 178.715, 2.823, -131.466);
15
16 JointPos p2Joint = new JointPos(112.131, -75.554, 126.989, -139.027, -88.044, -26.477);
17 DescPose p2Desc = new DescPose(368.003, -377.848, 260.211, 178.715, 2.823, -131.465);
18
19 ExaxisPos exaxisPos = new ExaxisPos(0, 0, 0, 0);
20 DescPose offdese = new DescPose(0, 0, 0, 0, 0, 0);
21
22 // Ativar função de passagem direta na extremidade
23 robot.SetAxleGenComEnable(1);
24 robot.SetAxleLuaEnable(1);
25
26 while(cnt<=10)
27 {
28 // Ler número da versão
29 ret = robot.SndRcvAxleGenComCmdData(5, version, 10, ref rcvdata);
30 Console.WriteLine($" hard version : {rcvdata[4]},hard code:{rcvdata[5]}, soft version:{rcvdata[6]} {rcvdata[7]}, soft code:{rcvdata[8]}");
31 if (ret != 0)
32 {
33 break;
34 }
35 Thread.Sleep(1000);
36 // Ler estado de presença do cabeçote de moxabustão
37 ret = robot.SndRcvAxleGenComCmdData(6, state, 6, ref rcvdata);
38 Console.WriteLine($" state : {rcvdata[4]}");
39 Thread.Sleep(1000);
40 // Ativar laser do cabeçote de moxabustão
41 ret = robot.SndRcvAxleGenComCmdData(6, led_on, 6, ref rcvdata);
42 Console.WriteLine($"led on rcv data is: {rcvdata[0]},{rcvdata[1]}, {rcvdata[2]}, {rcvdata[3]}, {rcvdata[4]}, {rcvdata[5]}");
43 robot.MoveJ(p1Joint, p1Desc, 0, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
44 Thread.Sleep(4000);
45 // Desativar laser do cabeçote de moxabustão
46 ret = robot.SndRcvAxleGenComCmdData(6, led_off, 6, ref rcvdata);
47 Console.WriteLine($"led off rcv data is: {rcvdata[0]},{rcvdata[1]}, {rcvdata[2]}, {rcvdata[3]}, {rcvdata[4]}, {rcvdata[5]}");
48 robot.MoveJ(p2Joint, p2Desc, 0, 0, 100, 100, 100, exaxisPos, -1, 0, offdese);
49 Thread.Sleep(1000);
50 Console.WriteLine($"***********************complate No. {cnt} SDK test*****************************");
51 cnt++;
52 }
53
54}
11.97. Download do Arquivo Lua de Protocolo Aberto
1/**
2* @brief Download do arquivo Lua de protocolo aberto
3* @param [in] fileName Nome do arquivo de protocolo aberto "CtrlDev_XXX.lua"
4* @param [in] savePath Caminho para salvar o arquivo de protocolo aberto
5* @return Código de erro
6*/
7public int OpenLuaDownload(string fileName, string savePath)
11.98. Excluir Arquivo Lua de Protocolo Aberto
1/**
2* @brief Excluir arquivo Lua de protocolo aberto
3* @param [in] fileName Nome do arquivo lua de protocolo aberto a ser excluído "CtrlDev_XXX.lua"
4* @return Código de erro
5*/
6public int OpenLuaDelete(string fileName)
11.99. Excluir Todos os Arquivos Lua de Protocolo Aberto
1/**
2* @brief Excluir todos os arquivos Lua de protocolo aberto
3* @return Código de erro
4*/
5public int AllOpenLuaDelete()
11.100. Exemplo de Código SDK para Operações com Arquivos Lua de Protocolo Aberto
1public int TestCtrlOpenLuaOperate()
2{
3 int rtn;
4
5 // Upload do arquivo Lua para o robô
6 rtn = robot.OpenLuaUpload("D://zUP/openlua/CtrlDev_WELDING_A.lua");
7 Console.WriteLine($"OpenLuaUpload rtn is {rtn}");
8 rtn = robot.OpenLuaUpload("D://zUP/openlua/CtrlDev_SWDPOLISH.lua");
9 Console.WriteLine($"OpenLuaUpload rtn is {rtn}");
10
11 // Download do arquivo Lua do robô
12 rtn = robot.OpenLuaDownload("CtrlDev_WELDING_A.lua", "D://zDOWN/");
13 Console.WriteLine($"OpenLuaDownload rtn is {rtn}");
14 rtn = robot.OpenLuaDownload("CtrlDev_SWDPOLISH.lua", "D://zDOWN/");
15 Console.WriteLine($"OpenLuaDownload rtn is {rtn}");
16
17 // Definir nome do Lua de protocolo aberto de controle
18 rtn = robot.SetCtrlOpenLUAName(0, "CtrlDev_WELDING_A.lua");
19 Console.WriteLine($"SetCtrlOpenLUAName rtn is {rtn}");
20 rtn = robot.SetCtrlOpenLUAName(1, "CtrlDev_SWDPOLISH.lua");
21 Console.WriteLine($"SetCtrlOpenLUAName rtn is {rtn}");
22
23 // Obter nome do Lua de protocolo aberto de controle
24 string[] name = new string[4];
25 rtn = robot.GetCtrlOpenLUAName(ref name);
26 Console.WriteLine($"ctrl open lua names : {name[0]}, {name[1]}, {name[2]}, {name[3]}");
27
28 // Carregar e descarregar protocolo aberto Lua
29 rtn = robot.LoadCtrlOpenLUA(1);
30 Console.WriteLine($"LoadCtrlOpenLUA rtn is {rtn}");
31 robot.Sleep(2000);
32 rtn = robot.UnloadCtrlOpenLUA(1);
33 Console.WriteLine($"UnloadCtrlOpenLUA rtn is {rtn}");
34
35 // Excluir arquivo Lua específico e todos os arquivos Lua
36 rtn = robot.OpenLuaDelete("CtrlDev_WELDING_A.lua");
37 Console.WriteLine($"OpenLuaDelete rtn is {rtn}");
38 rtn = robot.AllOpenLuaDelete();
39 Console.WriteLine($"AllOpenLuaDelete rtn is {rtn}");
40
41 return 0;
42}
11.101. Controlar o movimento da mão destra
1/**
2* @brief Controlar o movimento da mão destra
3* @param [in] idstart Número da estação escrava inicial
4* @param [in] slaveNum Número de escravos
5* @param [in] pos[16] Posição (-360~360)
6* @param [in] speed[16] Percentual de velocidade, intervalo [0~100]
7* @param [in] force[16] Percentual de torque, intervalo [0~100]
8* @param [in] max_time Tempo máximo de espera, intervalo [0~30000], unidade ms
9* @return Código de erro
10*/
11public int SetDexterousHandsMove(int idstart, int slaveNum, double[] pos, int[] speed, int[] force, int max_time)
11.102. Controlar o reset e ativação da mão destra
1/**
2* @brief Controlar o reset e ativação da mão destra
3* @param [in] id Número da estação escrava
4* @param [in] act 0-reset 1-ativação
5* @return Código de erro
6*/
7public int SetDexterousHandsAct(int id, int act)
11.103. Limpar erro da mão destra
1/**
2* @brief Limpar erro da mão destra
3* @return Código de erro
4*/
5public int ClearDexterousHandsError()
11.104. Definir as funções de controle de ação da mão destra habilitadas
1/**
2* @brief Define as funções de controle de ação da mão destra habilitadas
3* @param [in] id Número da estação escrava da mão destra
4* @param [in] func 0-acionamento de aperto, 1-inicialização da garra, 2-definição de posição, 3-definição de velocidade, 4-definição de torque, 6-leitura do estado da garra, 7-leitura do estado de inicialização, 8-leitura do código de falha, 9-leitura da posição, 10-leitura da velocidade, 11-leitura do torque, 12-definição do número de rotações, 13-definição da velocidade de rotação, 14-definição do torque de rotação, 15-leitura do estado da garra rotativa, 16-leitura do estado de inicialização da rotação, 17-leitura do número de rotações, 18-leitura da velocidade de rotação, 19-leitura do torque de rotação, 20-definição de movimento síncrono multi-eixo, 21-comando de limpeza de falhas, 22-estado de operação de eixo único, 23-estado de operação de todos os eixos
5* @return Código de erro
6*/
7public int SetDexterousHandsFunc(int id, int[] func)
11.105. Obter as funções de controle de ação da mão destra habilitadas
1/**
2* @brief Obtém as funções de controle de ação da mão destra habilitadas
3* @param [in] id Número do dispositivo da mão destra
4* @param [out] func 0-acionamento de aperto, 1-inicialização da garra, 2-definição de posição, 3-definição de velocidade, 4-definição de torque, 6-leitura do estado da garra, 7-leitura do estado de inicialização, 8-leitura do código de falha, 9-leitura da posição, 10-leitura da velocidade, 11-leitura do torque, 12-definição do número de rotações, 13-definição da velocidade de rotação, 14-definição do torque de rotação, 15-leitura do estado da garra rotativa, 16-leitura do estado de inicialização da rotação, 17-leitura do número de rotações, 18-leitura da velocidade de rotação, 19-leitura do torque de rotação, 20-definição de movimento síncrono multi-eixo, 21-comando de limpeza de falhas, 22-estado de operação de eixo único, 23-estado de operação de todos os eixos
5* @return Código de erro
6*/
7public int GetDexterousHandsFunc(int id, ref int[] func)
11.106. Exemplo de código de configuração e movimento da mão destra no efetuador final
1private void button105_Click(object sender, EventArgs e)
2{
3 int id = 1; // Número da estação escrava
4 int slaveNum = 4; // Controla 4 dedos
5 int max_time = 8000; // Tempo máximo de espera 8 segundos
6 int[] speed = new int[16]; // Array de velocidade, todos 0 significa usar velocidade padrão
7 int[] force = new int[16]; // Array de torque
8
9 // Inicializar array de torque: primeiros 4 dedos definidos como 50%, o resto 0 (valores enviados via comando Move)
10 for (int i = 0; i < 16; i++)
11 force[i] = (i < 4) ? 50 : 0;
12
13 // Função auxiliar: definir array de posição (apenas os primeiros 4 dedos são efetivos)
14 double[] pos = new double[16];
15 void SetPositions(double v1, double v2, double v3, double v4)
16 {
17 for (int i = 0; i < 16; i++)
18 pos[i] = 0;
19 pos[0] = v1;
20 pos[1] = v2;
21 pos[2] = v3;
22 pos[3] = v4;
23 }
24
25 JointPos j1 = new JointPos(-91.876, -85.920, 109.279, -86.239, -96.664, -28.563);
26 JointPos j2 = new JointPos(-40.954, -85.920, 109.279, -86.239, -96.664, -28.563);
27 ExaxisPos epos = new ExaxisPos(0, 0, 0, 0);
28 DescPose offset_pos = new DescPose(0, 0, 0, 0, 0, 0);
29
30 Console.WriteLine("===== Teste de Função Completa da Mão Destra Iniciado =====");
31
32 // 1. Limpar erro
33 int ret = robot.ClearDexterousHandsError();
34 Console.WriteLine($"ClearDexterousHandsError -> {ret}");
35
36 // ========== 2. Definir chaves de função ==========
37 int[] setFunc = new int[32];
38 setFunc[2] = 1; // Habilitar função de definição de posição
39 setFunc[4] = 1; // Habilitar função de definição de torque
40 setFunc[9] = 1; // Ler posição
41 setFunc[10] = 1; // Ler torque
42 setFunc[11] = 1; // Ler status
43 setFunc[22] = 1; // Status de movimento de eixo único
44
45 ret = robot.SetDexterousHandsFunc(id, setFunc);
46 Console.WriteLine($"SetDexterousHandsFunc(init + funções de posição/torque habilitadas) -> {ret}");
47
48 // ========== 3. Ler status da função (verificar se as configurações foram aplicadas) ==========
49 int[] getFunc = new int[32]; // GetDexterousHandsFunc retorna 32 inteiros
50 ret = robot.GetDexterousHandsFunc(id, ref getFunc);
51 Console.WriteLine($"GetDexterousHandsFunc -> {ret}");
52 if (ret == 0)
53 {
54 // Imprimir todos os 32 valores
55 Console.WriteLine("Todos os 32 valores retornados por GetDexterousHandsFunc:");
56 for (int i = 0; i < getFunc.Length; i++)
57 {
58 Console.Write($" [{i}]={getFunc[i]}");
59 if ((i + 1) % 8 == 0)
60 Console.WriteLine(); // Nova linha a cada 8 itens
61 else if (i < getFunc.Length - 1)
62 Console.Write(", ");
63 }
64 if (getFunc.Length % 8 != 0)
65 Console.WriteLine(); // Adicionar nova linha se a última linha tiver menos de 8 itens
66 }
67
68 // ========== 4. Ativar mão destra ==========
69 ret = robot.SetDexterousHandsAct(id, 1);
70 Console.WriteLine($"SetDexterousHandsAct(ativar) -> {ret}");
71 if (ret != 0)
72 {
73 Console.WriteLine("Falha na ativação, teste abortado");
74 return;
75 }
76
77 // ========== 5. Movimento inicial para 20° (enviar valores de posição e torque via comando Move) ==========
78 SetPositions(20, 20, 20, 20);
79 ret = robot.SetDexterousHandsMove(id, slaveNum, pos, speed, force, max_time);
80 Console.WriteLine($"Movimento inicial para 20° -> {ret}");
81 robot.Sleep(5000);
82
83 // ========== 6. Movimento alternado 10 vezes (10° ↔ 50°) ==========
84 Console.WriteLine("Iniciando 10 movimentos alternados...");
85 for (int iteration = 1; iteration <= 10; iteration++)
86 {
87 robot.MoveJ(j1, 0, 0, 100, 100, 100, epos, -1, 0, offset_pos);
88
89 SetPositions(10, 10, 10, 10);
90 ret = robot.SetDexterousHandsMove(id, slaveNum, pos, speed, force, max_time);
91 Console.WriteLine($"[{iteration}] Movimento para 10° -> {ret}");
92 robot.Sleep(1000);
93
94 robot.MoveJ(j2, 0, 0, 100, 100, 100, epos, -1, 0, offset_pos);
95
96 SetPositions(50, 50, 50, 50);
97 ret = robot.SetDexterousHandsMove(id, slaveNum, pos, speed, force, max_time);
98 Console.WriteLine($"[{iteration}] Movimento para 50° -> {ret}");
99 robot.Sleep(1000);
100 }
101
102 Console.WriteLine("Teste concluído (definição/leitura de chaves de função + ativação + 10 movimentos alternados).");
103}