11. Roboter-Peripherie
11.1. Greifer konfigurieren
1/**
2* @brief Greifer konfigurieren
3* @param [in] company Greiferhersteller (zur Festlegung)
4* @param [in] device Gerätenummer, vorübergehend nicht verwendet, Standard 0
5* @param [in] softvesion Softwareversionsnummer, vorübergehend nicht verwendet, Standard 0
6* @param [in] bus Position des Geräts am Endeffektor-Bus, vorübergehend nicht verwendet, Standard 0
7* @return Fehlercode
8*/
9int SetGripperConfig(int company, int device, int softvesion, int bus);
11.2. Greiferkonfiguration abrufen
1/**
2* @brief Greiferkonfiguration abrufen
3* @param [out] company Greiferhersteller (zur Festlegung)
4* @param [out] device Gerätenummer, vorübergehend nicht verwendet, Standard 0
5* @param [out] softvesion Softwareversionsnummer, vorübergehend nicht verwendet, Standard 0
6* @param [out] bus Position des Geräts am Endeffektor-Bus, vorübergehend nicht verwendet, Standard 0
7* @return Fehlercode
8*/
9int GetGripperConfig(ref int company, ref int device, ref int softvesion, ref int bus);
11.3. Greifer aktivieren
1/**
2* @brief Greifer aktivieren
3* @param [in] index Greifernummer
4* @param [in] act 0-Zurücksetzen, 1-Aktivieren
5* @return Fehlercode
6*/
7int ActGripper(int index, byte act);
11.4. Greifer steuern
1/**
2* @brief Greifer steuern
3* @param [in] index Greifernummer
4* @param [in] pos Positionsprozentsatz, Bereich [0~100]
5* @param [in] vel Geschwindigkeitsprozentsatz, Bereich [0~100]
6* @param [in] force Drehmomentprozentsatz, Bereich [0~100]
7* @param [in] max_time Maximale Wartezeit, Bereich [0~30000], [ms]
8* @param [in] block 0-blockierend, 1-nicht blockierend
9* @param [in] type Greifertyp: 0-Parallelgreifer; 1-Rotationsgreifer
10* @param [in] rotNum Rotationsanzahl (Umdrehungen)
11* @param [in] rotVel Rotationsgeschwindigkeitsprozentsatz [0-100]
12* @param [in] rotTorque Rotationsdrehmomentprozentsatz [0-100]
13* @return Fehlercode
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. Greifer-Bewegungsstatus abrufen
1/**
2* @brief Greifer-Bewegungsstatus abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] status 0-Bewegung nicht abgeschlossen, 1-Bewegung abgeschlossen
5* @return Fehlercode
6*/
7int GetGripperMotionDone(ref int fault, ref int status);
11.6. Greifer-Aktivierungsstatus abrufen
1/**
2* @brief Greifer-Aktivierungsstatus abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] status Bit0~Bit15 entsprechen Greifernummern 0~15, Bit=0 nicht aktiviert, Bit=1 aktiviert
5* @return Fehlercode
6*/
7int GetGripperActivateStatus(ref int fault, ref int status);
11.7. Greiferposition abrufen
1/**
2* @brief Greiferposition abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] position Positionsprozentsatz, Bereich 0~100%
5* @return Fehlercode
6*/
7int GetGripperCurPosition(ref int fault, ref int position);
11.8. Greifergeschwindigkeit abrufen
1/**
2* @brief Greifergeschwindigkeit abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] speed Geschwindigkeitsprozentsatz, Bereich 0~100%
5* @return Fehlercode
6*/
7int GetGripperCurSpeed(ref int fault, ref int speed);
11.9. Greiferstrom abrufen
1/**
2* @brief Greiferstrom abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] current Stromprozentsatz, Bereich 0~100%
5* @return Fehlercode
6*/
7int GetGripperCurCurrent(ref int fault, ref int current);
11.10. Greiferspannung abrufen
1/**
2* @brief Greiferspannung abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] voltage Spannung, Einheit 0.1V
5* @return Fehlercode
6*/
7int GetGripperVoltage(ref int fault, ref int voltage);
11.11. Greifertemperatur abrufen
1/**
2* @brief Greifertemperatur abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] temp Temperatur [°C]
5* @return Fehlercode
6*/
7int GetGripperTemp(ref int fault, ref int temp);
11.12. Vor-Greifpunkt berechnen (visuell)
1/**
2* @brief Vor-Greifpunkt berechnen (visuell)
3* @param [in] desc_pos Kartesische Pose des Greifpunkts
4* @param [in] zlength Z-Achsen-Versatz
5* @param [in] zangle Rotationsversatz um die Z-Achse
6* @param [out] pre_pos Vor-Greifpunkt
7* @return Fehlercode
8*/
9int ComputePrePick(DescPose desc_pos, double zlength, double zangle, ref DescPose pre_pos);
11.13. Rückzugspunkt berechnen (visuell)
1/**
2* @brief Rückzugspunkt berechnen (visuell)
3* @param [in] desc_pos Kartesische Pose des Rückzugspunkts
4* @param [in] zlength Z-Achsen-Versatz
5* @param [in] zangle Rotationsversatz um die Z-Achse
6* @param [out] post_pos Rückzugspunkt
7* @return Fehlercode
8*/
9int ComputePostPick(DescPose desc_pos, double zlength, double zangle, ref DescPose post_pos);
11.14. Codebeispiel für Roboter-Greiferoperationen
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}
11.15. Rotationsanzahl des Rotationsgreifers abrufen
1/**
2* @brief Rotationsanzahl des Rotationsgreifers abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] num Rotationsanzahl (Umdrehungen)
5* @return Fehlercode
6*/
7int GetGripperRotNum(ref ushort fault, ref double num);
11.16. Rotationsgeschwindigkeitsprozentsatz des Rotationsgreifers abrufen
1/**
2* @brief Rotationsgeschwindigkeitsprozentsatz des Rotationsgreifers abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] speed Rotationsgeschwindigkeitsprozentsatz
5* @return Fehlercode
6*/
7int GetGripperRotSpeed(ref ushort fault, ref int speed);
11.17. Rotationsdrehmomentprozentsatz des Rotationsgreifers abrufen
1/**
2* @brief Rotationsdrehmomentprozentsatz des Rotationsgreifers abrufen
3* @param [out] fault 0-kein Fehler, 1-Fehler
4* @param [out] torque Rotationsdrehmomentprozentsatz
5* @return Fehlercode
6*/
7int GetGripperRotTorque(ref ushort fault, ref int torque);
11.18. Codebeispiel zum Abrufen des Status eines Rotationsgreifers
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. Förderband starten/stoppen
1/**
2* @brief Förderband starten/stoppen
3* @param [in] status Status, 1-starten, 0-stoppen
4* @return Fehlercode
5*/
6int ConveyorStartEnd(byte status);
11.20. IO-Erkennungspunkt aufzeichnen
1/**
2* @brief IO-Erkennungspunkt aufzeichnen
3* @return Fehlercode
4*/
5int ConveyorPointIORecord();
11.21. Punkt A aufzeichnen
1/**
2* @brief Punkt A aufzeichnen
3* @return Fehlercode
4*/
5int ConveyorPointARecord();
11.22. Referenzpunkt aufzeichnen
1/**
2* @brief Referenzpunkt aufzeichnen
3* @return Fehlercode
4*/
5int ConveyorRefPointRecord();
11.23. Punkt B aufzeichnen
1/**
2* @brief Punkt B aufzeichnen
3* @return Fehlercode
4*/
5int ConveyorPointBRecord();
11.24. Förderband-Werkstück IO-Erkennung
1/**
2* @brief Förderband-Werkstück IO-Erkennung
3* @param [in] max_t Maximale Erkennungszeit [ms]
4* @return Fehlercode
5*/
6int ConveyorIODetect(int max_t);
11.25. Aktuelle Objektposition abrufen
1/**
2* @brief Aktuelle Objektposition abrufen
3* @param [in] mode 1-Tracking Greifen, 2-Tracking Bewegung, 3-TPD-Tracking
4* @return Fehlercode
5*/
6int ConveyorGetTrackData(int mode);
11.26. Förderband-Tracking starten
1/**
2* @brief Förderband-Tracking starten
3* @param [in] status Status, 1-starten, 0-stoppen
4* @return Fehlercode
5*/
6int ConveyorTrackStart(byte status);
11.27. Förderband-Tracking stoppen
1/**
2* @brief Förderband-Tracking stoppen
3* @return Fehlercode
4*/
5int ConveyorTrackEnd();
11.28. Förderbandparameter konfigurieren
1/**
2* @brief Förderbandparameter konfigurieren
3* @param [in] encChannel Encoderkanal 1~2
4* @param [in] resolution Impulse pro Encoderumdrehung
5* @param [in] lead Vorschubweg des Förderbands pro Encoderumdrehung [mm]
6* @param [in] wpAxis Werkstückkoordinatennummer (für Tracking-Bewegung, bei Tracking-Greifen/TPD-Tracking auf 0 setzen)
7* @param [in] vision Mit Vision gekoppelt? 0 nein, 1 ja
8* @param [in] speedRadio Geschwindigkeitsverhältnis (für Förderband-Tracking-Greifen Option (1-100)), Standard 1 für andere Optionen
9* @param [in] followType Tracking-Bewegungstyp: 0-Tracking-Bewegung; 1-Nachlauf-Bewegung
10* @param [in] startDis Für Nachlauf-Greifen erforderlich: Startabstand des Trackings. -1: automatische Berechnung (Nachlauf startet, wenn Werkstück unter Roboter ist). Einheit mm, Standard 0
11* @param [in] endDis Für Nachlauf-Greifen erforderlich: Endabstand des Trackings. Einheit mm, Standard 100
12* @return Fehlercode
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. Förderband-Greifpunktkompensation einstellen
1/**
2* @brief Förderband-Greifpunktkompensation einstellen
3* @param [in] cmp Kompensationsposition double[3]{x, y, z}
4* @return Fehlercode
5*/
6int ConveyorCatchPointComp(double[] cmp);
11.30. Förderband-Tracking-Linearbewegung
1/**
2* @brief Förderband-Tracking-Linearbewegung
3* @param [in] name Name des Bewegungspunkts
4* @param [in] tool Werkzeugkoordinatennummer, Bereich [0~14]
5* @param [in] wobj Werkstückkoordinatennummer, Bereich [0~14]
6* @param [in] vel Geschwindigkeitsprozentsatz, Bereich [0~100]
7* @param [in] acc Beschleunigungsprozentsatz, Bereich [0~100], vorübergehend nicht freigegeben
8* @param [in] ovl Geschwindigkeitsskalierungsfaktor, Bereich [0~100]
9* @param [in] blendR [-1.0]-Bewegung abschließen (blockierend), [0~1000.0]-Glättungsradius (nicht blockierend) [mm]
10* @return Fehlercode
11*/
12int ConveyorTrackMoveL(string name, int tool, int wobj, float vel, float acc, float ovl, float blendR);
11.31. Förderband-Kommunikationseingangserkennung
1/**
2* @brief Förderband-Kommunikationseingangserkennung
3* @param [in] timeout Warte-Timeout [ms]
4* @return Fehlercode
5*/
6int ConveyorComDetect(int timeout);
11.32. Förderband-Kommunikationseingangserkennung auslösen
1/**
2* @brief Förderband-Kommunikationseingangserkennung auslösen
3* @return Fehlercode
4*/
5int ConveyorComDetectTrigger();
11.33. Beispielprogramm zum Auslösen der Förderband-Kommunikationseingangserkennung
1private void button3_Click(object sender, EventArgs e)
2{
3
4 // Schaltfläche deaktivieren, um wiederholtes Klicken zu verhindern
5 button3.Enabled = false;
6
7 // Zeitintensive Operation im Hintergrundthread ausführen
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 // Benutzereingabe abrufen
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 return value: {rtn}");
21
22}
23
24private void ConveyorTest()
25{
26 // Invoke verwenden, um Steuerelemente im UI-Thread zu aktualisieren
27 this.Invoke((MethodInvoker)delegate {
28 Console.WriteLine("Starte Förderbandtest...");
29 });
30
31 int retval = 0;
32 int index = 1;
33 int max_time = 30000;
34 bool block = false;
35 retval = 0;
36
37 /* Förderband-Greifprozess */
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 // In Sicherheitsposition bewegen
48 retval = robot.MoveL(homejointPos, homePose, 1, 1, 100, 100, 100, -1, exaxisPos, 0, 0, offdese, 1, 1);
49 Console.WriteLine($"MoveL to safe position return value: {retval}");
50
51 // Förderbanderkennung
52 retval = robot.ConveyorComDetect(1000 * 10);
53 Console.WriteLine($"ConveyorComDetect return value: {retval}");
54
55 // Tracking-Daten abrufen
56 retval = robot.ConveyorGetTrackData(2);
57 Console.WriteLine($"ConveyorGetTrackData return value: {retval}");
58
59 // Tracking starten
60 retval = robot.ConveyorTrackStart(2);
61 Console.WriteLine($"ConveyorTrackStart return value: {retval}");
62
63 // In Startposition bewegen
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 // Tracking beenden
68 retval = robot.ConveyorTrackEnd();
69 Console.WriteLine($"ConveyorTrackEnd return value: {retval}");
70
71 // In Sicherheitsposition zurückkehren
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("Förderbandtest abgeschlossen!");
76 button3.Enabled = true;
77 });
78}
11.34. Beispielprogramm für Roboter-Förderbandoperationen
1private void btnConvert_Click(object sender, EventArgs e)
2{
3 Robot robot = new Robot();
4 robot.RPC("192.168.58.2");
5 DescPose pos1 = new DescPose(0, 0, 0, 0 ,0 ,0);
6 DescPose pos2 = new DescPose(0, 0, 0, 0, 0, 0);
7
8 pos1.tran.x = -351.175;
9 pos1.tran.y = 3.389;
10 pos1.tran.z = 431.172;
11 pos1.rpy.rx = -179.111;
12 pos1.rpy.ry = -0.241;
13 pos1.rpy.rz = 90.388;
14
15 pos2.tran.x = -333.654;
16 pos2.tran.y = -229.003;
17 pos2.tran.z = 404.335;
18 pos2.rpy.rx = -179.139;
19 pos2.rpy.ry = -0.779;
20 pos2.rpy.rz = 91.269;
21 int rtn = -1;
22
23 double[] cmp = new double[3] { 0, 9.99, 0 };
24 rtn = robot.ConveyorCatchPointComp(cmp);
25 if (rtn != 0)
26 {
27 return;
28 }
29 Console.WriteLine($"ConveyorCatchPointComp: rtn {rtn}");
30
31 rtn = robot.MoveCart(pos1, 0, 0, 100.0f, 180.0f, 100.0f, -1.0f, -1);
32 Console.WriteLine($"MoveCart: rtn {rtn}");
33
34 rtn = robot.ConveyorIODetect(10000);
35 Console.WriteLine($"ConveyorIODetect: rtn {rtn}");
36
37 robot.ConveyorGetTrackData(1);
38 rtn = robot.ConveyorTrackStart(1);
39 Console.WriteLine($"ConveyorTrackStart: rtn {rtn}");
40
41 rtn = robot.ConveyorTrackMoveL("cvrCatchPoint", 0, 0, 100.0f, 0.0f, 100.0f, -1.0f);
42 Console.WriteLine($"ConveyorTrackMoveL: rtn {rtn}");
43
44 rtn = robot.MoveGripper(1, 59, 43, 21, 30000, 0, 0, 0, 0, 0);
45 Console.WriteLine($"MoveGripper: rtn {rtn}");
46
47 rtn = robot.ConveyorTrackMoveL("cvrRaisePoint", 0, 0, 100.0f, 0.0f, 100.0f, -1.0f);
48 Console.WriteLine($"ConveyorTrackMoveL: rtn {rtn}");
49
50 rtn = robot.ConveyorTrackEnd();
51 Console.WriteLine($"ConveyorTrackEnd: rtn {rtn}");
52
53 rtn = robot.MoveCart(pos2, 0, 0, 100.0f, 180.0f, 100.0f, -1.0f, -1);
54 Console.WriteLine($"MoveCart: rtn {rtn}");
55
56 rtn = robot.MoveGripper(1, 100, 43, 21, 30000, 0, 0, 0, 0, 0);
57 Console.WriteLine($"MoveGripper: rtn {rtn}");
58}
11.35. Endeffektor-Sensor konfigurieren
1/**
2* @brief Endeffektor-Sensor konfigurieren
3* @param [in] idCompany Hersteller, 18-JUNKONG; 25-HUIDE
4* @param [in] idDevice Typ, 0-JUNKONG/RYR6T.V1.0
5* @param [in] idSoftware Softwareversion, 0-J1.0/HuiDe1.0 (vorübergehend nicht freigegeben)
6* @param [in] idBus Anschlussposition, 1-Endeffektor Port 1; 2-Endeffektor Port 2...8-Endeffektor Port 8 (vorübergehend nicht freigegeben)
7* @return Fehlercode
8*/
9int AxleSensorConfig(int idCompany, int idDevice, int idSoftware, int idBus);
11.36. Endeffektor-Sensorkonfiguration abrufen
1/**
2* @brief Endeffektor-Sensorkonfiguration abrufen
3* @param [out] idCompany Hersteller, 18-JUNKONG; 25-HUIDE
4* @param [out] idDevice Typ, 0-JUNKONG/RYR6T.V1.0
5* @return Fehlercode
6*/
7int AxleSensorConfigGet(ref int idCompany, ref int idDevice);
11.37. Endeffektor-Sensor aktivieren
1/**
2* @brief Endeffektor-Sensor aktivieren
3* @param [in] actFlag 0-Zurücksetzen; 1-Aktivieren
4* @return Fehlercode
5*/
6int AxleSensorActivate(int actFlag);
11.38. In Endeffektor-Sensorregister schreiben
1/**
2* @brief In Endeffektor-Sensorregister schreiben
3* @param [in] devAddr Geräteadresse 0-255
4* @param [in] regHAddr Registeradresse hohes Byte
5* @param [in] regLAddr Registeradresse niedriges Byte
6* @param [in] regNum Anzahl der Register 0-255
7* @param [in] data1 Zu schreibender Registerwert 1
8* @param [in] data2 Zu schreibender Registerwert 2
9* @param [in] isNoBlock 0-blockierend; 1-nicht blockierend
10* @return Fehlercode
11*/
12int AxleSensorRegWrite(int devAddr, int regHAddr, int regLAddr, int regNum, int data1, int data2, int isNoBlock);
11.39. Codebeispiel für Endeffektor-Sensor
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. Roboter-Peripherieprotokoll abrufen
Neu in Version C#SDK-v1.0.6.
1/**
2* @brief Roboter-Peripherieprotokoll abrufen
3* @param [out] protocol Roboter-Peripherieprotokollnummer: 4096-Erweiterungsachsen-Steuerkarte; 4097-ModbusSlave; 4098-ModbusMaster
4* @return Fehlercode
5*/
6int GetExDevProtocol(ref int protocol);
11.41. Roboter-Peripherieprotokoll einstellen
Neu in Version C#SDK-v1.0.6.
1/**
2* @brief Roboter-Peripherieprotokoll einstellen
3* @param [in] protocol Roboter-Peripherieprotokollnummer: 4096-Erweiterungsachsen-Steuerkarte; 4097-ModbusSlave; 4098-ModbusMaster
4* @return Fehlercode
5*/
6int SetExDevProtocol(int protocol);
11.42. Beispielprogramm zum Einstellen des Roboter-Peripherieprotokolls
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. Endeffektor-Kommunikationsparameter abrufen
1/**
2* @brief Endeffektor-Kommunikationsparameter abrufen
3* @param [out] param Endeffektor-Kommunikationsparameter
4* @return Fehlercode
5*/
6int GetAxleCommunicationParam(ref AxleComParam param);
11.44. Endeffektor-Kommunikationsparameter einstellen
1/**
2* @brief Endeffektor-Kommunikationsparameter einstellen
3* @param [in] param Endeffektor-Kommunikationsparameter
4* @return Fehlercode
5*/
6int SetAxleCommunicationParam(AxleComParam param);
11.45. Endeffektor-Dateiübertragungstyp einstellen
1/**
2* @brief Endeffektor-Dateiübertragungstyp einstellen
3* @param [in] type 1-MCU Upgrade-Datei; 2-LUA-Datei
4* @return Fehlercode
5*/
6int SetAxleFileType(int type);
11.46. Endeffektor-LUA-Ausführung aktivieren
1/**
2* @brief Endeffektor-LUA-Ausführung aktivieren
3* @param [in] enable 0-nicht aktivieren; 1-aktivieren
4* @return Fehlercode
5*/
6int SetAxleLuaEnable(int enable);
11.47. Fehlerbehebung bei anomaler Endeffektor-LUA-Datei
1/**
2* @brief Fehlerbehebung bei anomaler Endeffektor-LUA-Datei
3* @param [in] status 0-nicht beheben; 1-beheben
4* @return Fehlercode
5*/
6int SetRecoverAxleLuaErr(int status);
11.48. Aktivierungsstatus der Endeffektor-LUA-Ausführung abrufen
1/**
2* @brief Aktivierungsstatus der Endeffektor-LUA-Ausführung abrufen
3* @param [out] status 0-nicht aktiviert; 1-aktiviert
4* @return Fehlercode
5*/
6int GetAxleLuaEnableStatus(ref int status);
11.49. Aktivierungstyp der Endeffektor-LUA-Endgeräte einstellen
1/**
2* @brief Aktivierungstyp der Endeffektor-LUA-Endgeräte einstellen
3* @param [in] forceSensorEnable Kraftsensor-Aktivierungsstatus, 0-nicht aktivieren; 1-aktivieren
4* @param [in] gripperEnable Greifer-Aktivierungsstatus, 0-nicht aktivieren; 1-aktivieren
5* @param [in] IOEnable IO-Geräte-Aktivierungsstatus, 0-nicht aktivieren; 1-aktivieren
6* @return Fehlercode
7*/
8int SetAxleLuaEnableDeviceType(int forceSensorEnable, int gripperEnable, int IOEnable);
11.50. Aktivierungstyp der Endeffektor-LUA-Endgeräte abrufen
1/**
2* @brief Aktivierungstyp der Endeffektor-LUA-Endgeräte abrufen
3* @param [out] forceSensorEnable Kraftsensor-Aktivierungsstatus, 0-nicht aktiviert; 1-aktiviert
4* @param [out] gripperEnable Greifer-Aktivierungsstatus, 0-nicht aktiviert; 1-aktiviert
5* @param [out] IOEnable IO-Geräte-Aktivierungsstatus, 0-nicht aktiviert; 1-aktiviert
6* @return Fehlercode
7*/
8int GetAxleLuaEnableDeviceType(ref int forceSensorEnable, ref int gripperEnable, ref int IOEnable);
11.51. Aktuell konfigurierte Endgeräte abrufen
1/**
2* @brief Aktuell konfigurierte Endgeräte abrufen
3* @param [out] forceSensorEnable Aktivierte Kraftsensornummern-Array (0-nicht aktiviert; 1-aktiviert) - Implementierung abhängig
4* @param [out] gripperEnable Aktivierte Greifernummern-Array (0-nicht aktiviert; 1-aktiviert) - Implementierung abhängig
5* @param [out] IODeviceEnable Aktivierte IO-Gerätenummern-Array (0-nicht aktiviert; 1-aktiviert) - Implementierung abhängig
6* @return Fehlercode
7*/
8int GetAxleLuaEnableDevice(ref int[] forceSensorEnable, ref int[] gripperEnable, ref int[] IODeviceEnable); // Hinweis: Array-Parameter möglicherweise anders zu handhaben
11.52. Greifer-Aktionssteuerungsfunktion aktivieren
1/**
2* @brief Greifer-Aktionssteuerungsfunktion aktivieren (für LUA-Skript)
3* @param [in] id Greifer-Gerätenummer
4* @param [in] func Funktions-Array: func[0]-Greifer aktivieren; func[1]-Greifer initialisieren; 2-Position einstellen; 3-Geschwindigkeit einstellen; 4-Drehmoment einstellen; 6-Greiferstatus lesen; 7-Initialisierungsstatus lesen; 8-Fehlercode lesen; 9-Position lesen; 10-Geschwindigkeit lesen; 11-Drehmoment lesen
5* @return Fehlercode
6*/
7int SetAxleLuaGripperFunc(int id, int[] func);
11.53. Aktivierte Greifer-Aktionssteuerungsfunktion abrufen
1/**
2* @brief Aktivierte Greifer-Aktionssteuerungsfunktion abrufen
3* @param [in] id Greifer-Gerätenummer
4* @param [out] func Funktions-Array (wie oben)
5* @return Fehlercode
6*/
7int GetAxleLuaGripperFunc(int id, ref int[] func); // Hinweis: Array-Parameter möglicherweise anders zu handhaben
11.54. In Ethercat-Slave-Datei des Roboters schreiben
1/**
2* @brief In Ethercat-Slave-Datei des Roboters schreiben
3* @param [in] type Slave-Dateityp: 1-Upgrade Slave-Datei; 2-Upgrade Slave-Konfigurationsdatei
4* @param [in] slaveID Slave-Nummer
5* @param [in] fileName Name der hochzuladenden Datei
6* @return Fehlercode
7*/
8int SlaveFileWrite(int type, int slaveID, string fileName);
11.55. Endeffektor-Lua-Open-Protocol-Datei hochladen
1/**
2* @brief Endeffektor-Lua-Open-Protocol-Datei hochladen
3* @param [in] filePath Lokaler Pfad zur Lua-Datei ".../AXLE_LUA_End_DaHuan.lua"
4* @return Fehlercode
5*/
6int AxleLuaUpload(string filePath);
11.56. Ethercat-Slave des Roboters in den Boot-Modus versetzen
1/**
2* @brief Ethercat-Slave des Roboters in den Boot-Modus versetzen
3* @return Fehlercode
4*/
5int SetSysServoBootMode();
11.57. Codebeispiel für Roboter-Endeffektor-LUA-Dateioperationen
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_Xinjingcheng.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);
19
20 int forceEnable = 0;
21 int gripperEnable = 0;
22 int ioEnable = 0;
23 robot.GetAxleLuaEnableDeviceType(ref forceEnable, ref gripperEnable, ref ioEnable);
24 Console.WriteLine("GetAxleLuaEnableDeviceType param is {0} {1} {2}", forceEnable, gripperEnable, ioEnable);
25
26 int[] func = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
27 robot.SetAxleLuaGripperFunc(1, func);
28 int[] getFunc = new int[16];
29 robot.GetAxleLuaGripperFunc(1, ref getFunc);
30 int[] getforceEnable = new int[16];
31 int[] getgripperEnable = new int[16];
32 int[] getioEnable = new int[16];
33 robot.GetAxleLuaEnableDevice(ref getforceEnable, ref getgripperEnable, ref getioEnable);
34 Console.WriteLine("\ngetforceEnable status : ");
35 foreach (int i in getforceEnable)
36 {
37 Console.Write(i + ",");
38 }
39 Console.WriteLine("\ngetgripperEnable status : ");
40 foreach (int i in getgripperEnable)
41 {
42 Console.Write(i + ",");
43 }
44 Console.WriteLine("\ngetioEnable status : ");
45 foreach (int i in getioEnable)
46 {
47 Console.Write(i + ",");
48 }
49 Console.WriteLine();
50 robot.ActGripper(1, 0);
51 Thread.Sleep(2000);
52 robot.ActGripper(1, 1);
53 Thread.Sleep(2000);
54 robot.MoveGripper(1, 90, 10, 100, 50000, 0, 0, 0, 0, 0);
55 int pos = 0;
56 while (true)
57 {
58 robot.GetRobotRealTimeState(ref pkg);
59 Console.WriteLine("gripper pos is " + pkg.gripper_position);
60 Thread.Sleep(100);
61 }
62}
11.58. SmartTool-Tastenstatus abrufen
Neu in Version C#SDK-V1.1.3: Web-3.8.2
1/**
2* @brief SmartTool-Tastenstatus abrufen
3* @param [out] state SmartTool-Griff Tastenstatus (Bit0: 0-Kommunikation normal; 1-Kommunikation unterbrochen; Bit1-Rückgängig; Bit2-Programm löschen;
4 Bit3-Taste A; Bit4-Taste B; Bit5-Taste C; Bit6-Taste D; Bit7-Taste E; Bit8-IO-Taste; Bit9-Hand/Automatik; Bit10-Start)
5* @return Fehlercode
6*/
7int GetSmarttoolBtnState(ref int state);
11.59. Codebeispiel
Neu in Version 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}
11.60. Open-Protocol-Lua-Datei hochladen
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Open-Protocol-Lua-Datei hochladen
3* @param filePath Lokaler Pfad zur Open-Protocol-Lua-Datei
4* @return Fehlercode
5*/
6int OpenLuaUpload(string filePath)
11.61. Slave-Kartenparameter abrufen
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Slave-Kartenparameter abrufen
3* @param type Protokolltyp: 0-Ethercat, 1-CClink, 3-Ethercat (Dopplung?), 4-EIP
4* @param version Protokollversion
5* @param connState Verbindungsstatus: 0-nicht verbunden, 1-verbunden
6* @return Fehlercode
7*/
8int GetFieldBusConfig(ref int type, ref int version, ref int connState) // Hinweis: Array-Parameter in C# SDK möglicherweise anders
11.62. In Slave-DO schreiben
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief In Slave-DO schreiben
3* @param DOIndex DO-Nummer
4* @param writeNum Anzahl der zu schreibenden Werte
5* @param status Zu schreibende Werte (max. 8)
6* @return Fehlercode
7*/
8int FieldBusSlaveWriteDO(int DOIndex, int writeNum, int[] status)
11.63. In Slave-AO schreiben
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief AO der Slave-Station schreiben
3* @param [in] AOIndex AO-Nummer
4* @param [in] writeNum Anzahl der zu schreibenden Werte
5* @param [in] status Array der zu schreibenden Werte (maximal 8), AO0~AO15 sind ganzzahlig, AO16~AO31 sind Gleitkommazahlen
6* @return Fehlercode
7*/
8public int FieldBusSlaveWriteAO(int AOIndex, int writeNum, double[] status)
11.64. Slave-DI lesen
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Slave-DI lesen
3* @param DIIndex DI-Nummer
4* @param readNum Anzahl der zu lesenden Werte
5* @param status Gelesene Werte (max. 8)
6* @return Fehlercode
7*/
8int FieldBusSlaveReadDI(int DIIndex, int readNum, ref int[] status)
11.65. Slave-AI lesen
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Slave-AI lesen
3* @param AIIndex AI-Nummer
4* @param readNum Anzahl der zu lesenden Werte
5* @param status Gelesene Werte (max. 8)
6* @return Fehlercode
7*/
8int FieldBusSlaveReadAI(int AIIndex, int readNum, ref double[] status)
11.66. Auf erweiterten DI-Eingang warten (Slave)
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Auf erweiterten DI-Eingang (Slave) warten
3* @param DIIndex DI-Nummer
4* @param status Erwarteter Zustand: 0-niedrig; 1-hoch
5* @param waitMs Maximale Wartezeit [ms]
6* @return Fehlercode
7*/
8int FieldBusSlaveWaitDI(int DIIndex, int status, int waitMs)
11.67. Auf erweiterten AI-Eingang warten (Slave)
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Auf erweiterten AI-Eingang (Slave) warten
3* @param AIIndex AI-Nummer
4* @param waitType Bedingung: 0-größer als; 1-kleiner als
5* @param value Vergleichswert
6* @param waitMs Maximale Wartezeit [ms]
7* @return Fehlercode
8*/
9int FieldBusSlaveWaitAI(int AIIndex, int waitType, double value, int waitMs)
11.68. Codebeispiel für Slave-Modus-Befehle
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) // Ursprünglicher Code, wahrscheinlich überflüssig
11 // {
12 // return;
13 // }
14 // Open-Protocol-Datei hochladen und laden
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 // Protokolltyp, Softwareversion und Verbindungsstatus mit SPS abrufen
23 robot.GetFieldBusConfig(ref type, ref version, ref connState);
24 Console.WriteLine($"type is {type}, version is {version}, connState is {connState}");
25
26 // DO0 = 1, DO1 = 0, DO2 = 1 schreiben
27 ctrl[0] = 1;
28 ctrl[1] = 0;
29 ctrl[2] = 1;
30 robot.FieldBusSlaveWriteDO(0, 3, ctrl);
31
32 // AO2 = 0x1000 schreiben
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. Array-Sauggreifer steuern
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Array-Sauggreifer steuern
3* @param [in] slaveID Slave-Nummer
4* @param [in] len Länge des Steuerarrays (Anzahl der zu steuernden Sauger)
5* @param [in] ctrlValue Steuerwerte: 1-mit maximalem Vakuum ansaugen; 2-mit eingestelltem Vakuum ansaugen; 3-Ansaugen stoppen
6* @return Fehlercode
7*/
8int SetSuckerCtrl(int slaveID, int len, int[] ctrlValue)
11.70. Status des Array-Sauggreifers abrufen
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Status des Array-Sauggreifers abrufen
3* @param [in] slaveID Slave-Nummer
4* @param [out] state Saugzustand: 0-Objekt losgelassen; 1-Werkstück erfolgreich angesaugt; 2-kein Objekt angesaugt; 3-Objekt abgelöst
5* @param [out] pressValue Aktuelles Vakuum [kPa]
6* @param [out] error Aktueller Fehlercode des Saugers
7* @return Fehlercode
8*/
9int GetSuckerState(int slaveID, ref int[] state, ref int[] pressValue, ref int[] error) // Hinweis: Array-Parameter
11.71. Auf Saugerstatus warten
Neu in Version C#SDK-V1.1.7: Web-3.8.5
1/**
2* @brief Auf Saugerstatus warten
3* @param [in] slaveID Slave-Nummer
4* @param [in] state Erwarteter Saugzustand: 0-Objekt losgelassen; 1-Werkstück erfolgreich angesaugt; 2-kein Objekt angesaugt; 3-Objekt abgelöst
5* @param [in] ms Maximale Wartezeit [ms]
6* @return Fehlercode
7*/
8int WaitSuckerState(int slaveID, int state, int ms)
11.72. Codebeispiel für Array-Sauggreifer-Steuerung
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 // Open-Protocol-Datei hochladen und laden
11 robot.OpenLuaUpload(@"C:\SDK\CtrlDev_sucker.lua");
12 Thread.Sleep(2000);
13 robot.UnloadCtrlOpenLUA(1);
14 robot.LoadCtrlOpenLUA(1);
15 Thread.Sleep(1000);
16
17 // Sauger im Broadcast-Modus mit maximaler Saugkraft steuern
18 ctrl[0] = 1;
19 robot.SetSuckerCtrl(0, 1, ctrl);
20
21 // Zustände von Sauger 1 und Sauger 12 in einer Schleife überwachen
22 for (int i = 0; i < 100; i++)
23 {
24 // Hinweis: GetSuckerState erwartet Arrays, die Übergabe von Einzelvariablen ist hier problematisch.
25 // Dies ist eine konzeptionelle Darstellung. Die tatsächliche Implementierung muss die Array-Parameter korrekt behandeln.
26 // robot.GetSuckerState(1, ref state, ref pressValue, ref error);
27 Console.WriteLine($"sucker1 state is {state}, pressValue is {pressValue}, error num is {error}");
28 // robot.GetSuckerState(12, ref state, ref pressValue, ref error);
29 Console.WriteLine($"sucker12 state is {state}, pressValue is {pressValue}, error num is {error}");
30 Thread.Sleep(100);
31 }
32 // Auf angesaugten Zustand von Sauger 1 warten, Timeout 100ms
33 int ret = robot.WaitSuckerState(1, 1, 100);
34 Console.WriteLine($"WaitSuckerState result is {ret}");
35
36 // Unicast-Modus: Sauger 1 und 12 ausschalten
37 ctrl[0] = 3;
38 robot.SetSuckerCtrl(1, 1, ctrl);
39 robot.SetSuckerCtrl(12, 1, ctrl);
40
41 robot.CloseRPC();
42}
11.73. Laser-Peripherie Ein-/Ausschaltfunktion
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Laser-Peripherie Ein-/Ausschaltfunktion
3 * @param [in] OnOff 0-ausschalten, 1-einschalten
4 * @param [in] weldId Schweißnaht-ID, Standard 0
5 * @return Fehlercode
6 */
7int LaserTrackingLaserOnOff(int OnOff, int weldId)
11.74. Laser-Tracking Start-/Endfunktion
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Laser-Tracking Start-/Endfunktion
3 * @param [in] OnOff 0-beenden, 1-starten
4 * @param [in] coordId Werkzeugkoordinatennummer des Laser-Peripheriegeräts
5 * @return Fehlercode
6 */
7int LaserTrackingTrackOnOff(int OnOff, int coordId)
11.75. Lasernahtsuche - feste Richtung
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Lasernahtsuche - feste Richtung
3 * @param [in] direction 0-x+ 1-x- 2-y+ 3-y- 4-z+ 5-z-
4 * @param [in] vel Geschwindigkeit [%]
5 * @param [in] distance Maximale Suchdistanz [mm]
6 * @param [in] timeout Such-Timeout [ms]
7 * @param [in] posSensorNum Nummer des kalibrierten Laser-Werkzeugkoordinatensystems
8 * @return Fehlercode
9 */
10int LaserTrackingSearchStart_xyz(int direction, int vel, int distance, int timeout, int posSensorNum)
11.76. Lasernahtsuche - beliebige Richtung
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Lasernahtsuche - beliebige Richtung
3 * @param [in] directionPoint XYZ-Koordinaten des Eingabepunkts für die Suchrichtung
4 * @param [in] vel Geschwindigkeit [%]
5 * @param [in] distance Maximale Suchdistanz [mm]
6 * @param [in] timeout Such-Timeout [ms]
7 * @param [in] posSensorNum Nummer des kalibrierten Laser-Werkzeugkoordinatensystems
8 * @return Fehlercode
9 */
10int LaserTrackingSearchStart_point(DescTran directionPoint, int vel, int distance, int timeout, int posSensorNum)
11.77. Lasernahtsuche beenden
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2* @brief Lasernahtsuche beenden
3* @return Fehlercode
4*/
5int LaserTrackingSearchStop()
11.78. Laser-IP-Konfiguration
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Laser-IP-Konfiguration
3 * @param [in] ip IP-Adresse des Laser-Peripheriegeräts
4 * @param [in] port Portnummer des Laser-Peripheriegeräts
5 * @return Fehlercode
6 */
7int LaserTrackingSensorConfig(string ip, int port)
11.79. Laser-Peripherie-Abtastperiode konfigurieren
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Laser-Peripherie-Abtastperiode konfigurieren
3 * @param [in] period Abtastperiode [ms]
4 * @return Fehlercode
5 */
6int LaserTrackingSensorSamplePeriod(int period)
11.80. Laser-Peripherie-Treiber laden
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Laser-Peripherie-Treiber laden
3 * @param [in] type Protokolltyp des Laser-Peripherietreibers: 101-RuiNiu; 102-ChuangXiang; 103-QuanShi; 104-TongZhou; 105-AoTai
4 * @return Fehlercode
5 */
6int LoadPosSensorDriver(int type)
11.81. Laser-Peripherie-Treiber entladen
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Laser-Peripherie-Treiber entladen
3 * @return Fehlercode
4 */
5int UnLoadPosSensorDriver()
11.82. Laser-Schweißnaht-Trajektorie aufzeichnen
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Laser-Schweißnaht-Trajektorie aufzeichnen
3 * @param [in] status 0-Aufzeichnung stoppen; 1-Echtzeit-Tracking; 2-Aufzeichnung starten
4 * @param [in] delayTime Verzögerungszeit [ms]
5 * @return Fehlercode
6 */
7int LaserSensorRecord1(int status, int delayTime)
11.83. Laser-Schweißnaht-Trajektorie wiedergeben
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Laser-Schweißnaht-Trajektorie wiedergeben
3 * @param [in] delayTime Verzögerungszeit [ms]
4 * @param [in] speed Geschwindigkeit [%]
5 * @return Fehlercode
6 */
7int LaserSensorReplay(int delayTime, double speed)
11.84. Laser-Tracking-Wiedergabe
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Laser-Tracking-Wiedergabe (Bewegung entlang der aufgezeichneten Trajektorie)
3 * @return Fehlercode
4 */
5int MoveLTR()
11.85. Laser-Schweißnaht-Trajektorie aufzeichnen und wiedergeben
1/**
2* @brief Laser-Schweißnaht-Trajektorie aufzeichnen und wiedergeben (erweiterte Funktion)
3* @param [in] delayMode Modus: 0-Verzögerungszeit; 1-Verzögerungsdistanz
4* @param [in] delayTime Verzögerungszeit [ms] (wenn delayMode=0)
5* @param [in] delayDisExAxisNum Erweiterungsachsennummer für Distanzverzögerung
6* @param [in] delayDis Verzögerungsdistanz [mm] (wenn delayMode=1)
7* @param [in] sensitivePara Kompensations-Empfindlichkeitskoeffizient
8* @param [in] trackMode Punkt-Tracking-Typ: 0-Erweiterungsachse asynchron; 1-Roboter (synchron?)
9* @param [in] triggerMode Punkt-Tracking-Auslösemodus: 0-Tracking-Dauer; 1-IO
10* @param [in] runTime Dauer des Roboter-Punkt-Trackings [s]
11* @param [in] speed Geschwindigkeit [%]
12* @return Fehlercode
13*/
14int LaserSensorRecordandReplay(int delayMode, int delayTime, int delayDisExAxisNum, double delayDis, double sensitivePara, int trackMode, int triggerMode, double runTime, double speed)
11.86. Zum aufgezeichneten Startpunkt der Schweißnaht bewegen
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Zum aufgezeichneten Startpunkt der Schweißnaht bewegen
3 * @param [in] moveType 0-PTP, 1-LIN
4 * @param [in] ovl Geschwindigkeit [%]
5 * @return Fehlercode
6 */
7int MoveToLaserRecordStart(int moveType, double ovl)
11.87. Zum aufgezeichneten Endpunkt der Schweißnaht bewegen
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Zum aufgezeichneten Endpunkt der Schweißnaht bewegen
3 * @param [in] moveType 0-PTP, 1-LIN
4 * @param [in] ovl Geschwindigkeit [%]
5 * @return Fehlercode
6 */
7int MoveToLaserRecordEnd(int moveType, double ovl)
11.88. Zum vom Laser-Sensor gefundenen Nahtpunkt bewegen
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Zum vom Laser-Sensor gefundenen Nahtpunkt bewegen
3 * @param [in] moveFlag Bewegungstyp: 0-PTP; 1-LIN
4 * @param [in] ovl Geschwindigkeitsskalierungsfaktor [0-100]
5 * @param [in] dataFlag Auswahl der Schweißnaht-Cache-Daten: 0-Planungsdaten ausführen; 1-Aufgezeichnete Daten ausführen
6 * @param [in] plateType Plattenmaterial-Typ: 0-Wellenplatte; 1-Wellpappe; 2-Zaunplatte; 3-Ölfass; 4-Wellenpanzerstahl
7 * @param [in] trackOffectType Laser-Sensor-Versatztyp: 0-kein Versatz; 1-Versatz im Basiskoordinatensystem; 2-Versatz im Werkzeugkoordinatensystem; 3-Versatz basierend auf Laser-Sensor-Rohdaten
8 * @param [in] offset Versatzwert (Pose)
9 * @return Fehlercode
10 */
11int MoveToLaserSeamPos(int moveFlag, double ovl, int dataFlag, int plateType, int trackOffectType, DescPose offset)
11.89. Koordinateninformationen des vom Laser-Sensor gefundenen Nahtpunkts abrufen
Neu in Version C#SDK-V1.1.8: Web-3.8.6
1/**
2 * @brief Koordinateninformationen des vom Laser-Sensor gefundenen Nahtpunkts abrufen
3 * @param [in] trackOffectType Laser-Sensor-Versatztyp (siehe oben)
4 * @param [in] offset Versatzwert (Pose)
5 * @param [out] jPos Gelenkposition [°]
6 * @param [out] descPos Kartesische Position [mm]
7 * @param [out] tool Verwendetes Werkzeugkoordinatensystem
8 * @param [out] user Verwendetes Werkstückkoordinatensystem
9 * @param [out] exaxis Position der Erweiterungsachse [mm]
10 * @return Fehlercode
11 */
12int GetLaserSeamPos(int trackOffectType, DescPose offset, ref JointPos jPos, ref DescPose descPos, ref int tool, ref int user, ref ExaxisPos exaxis)
11.90. Codebeispiel für Laser-Peripherie-Sensorparametrierung und -Debugging
Neu in Version 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. Codebeispiel für Laser-Trajektorienscan und -wiedergabe
Neu in Version 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}
11.92. Codebeispiel für Lasernahtsuche und Echtzeit-Tracking
Neu in Version 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. Codebeispiel für synchrones Laser-Tracking mit Erweiterungsachse und Roboter
Neu in Version 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. Endeffektor-Transparentübertragungsfunktion ein-/ausschalten
1/**
2* @brief Aktiviert die allgemeine Transparentübertragungsfunktion des Endeffektors
3* @param [in] Aktivierung, 0-deaktiviert, 1-aktiviert
4* @return Fehlercode
5*/
6public int SetAxleGenComEnable(int mode)
11.95. Endeffektor-Transparentübertragungsfunktion für azyklische Datenübertragung und -empfang
1/**
2* @brief Endeffektor sendet azyklische Daten und wartet auf Antwort
3* @param [in] len_snd, Länge der zu sendenden Daten
4* @param [in] sndBuff[], zu sendende Daten
5* @param [in] len_rcv, Länge der zu empfangenden Daten
6* @param [out] rcvBuff[], Antwortdaten
7* @return Fehlercode
8*/
9public int SndRcvAxleGenComCmdData(int len_snd, int[] sndBuff, int len_rcv, ref int[] rcvdata)
11.96. Codebeispiel für azyklische Datenkommunikation des DIO Health Care Moxibustion-Kopfs basierend auf der Endeffektor-Transparentübertragungsfunktion
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 //Endeffektor-Transparentübertragungsfunktion aktivieren
23 robot.SetAxleGenComEnable(1);
24 robot.SetAxleLuaEnable(1);
25
26 while(cnt<=10)
27 {
28 //Versionsnummer auslesen
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 //Präsenzstatus des Moxibustion-Kopfs auslesen
37 ret = robot.SndRcvAxleGenComCmdData(6, state, 6, ref rcvdata);
38 Console.WriteLine($" state : {rcvdata[4]}");
39 Thread.Sleep(1000);
40 //Laser des Moxibustion-Kopfs einschalten
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 //Laser des Moxibustion-Kopfs ausschalten
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. Open-Protocol-Lua-Datei herunterladen
1/**
2* @brief Open-Protocol-Lua-Datei herunterladen
3* @param [in] fileName Name der Open-Protocol-Datei "CtrlDev_XXX.lua"
4* @param [in] savePath Pfad zum Speichern der Open-Protocol-Datei
5* @return Fehlercode
6*/
7public int OpenLuaDownload(string fileName, string savePath)
11.98. Open-Protocol-Lua-Datei löschen
1/**
2* @brief Open-Protocol-Lua-Datei löschen
3* @param [in] fileName Name der zu löschenden Open-Protocol-Lua-Datei "CtrlDev_XXX.lua"
4* @return Fehlercode
5*/
6public int OpenLuaDelete(string fileName)
11.99. Alle Open-Protocol-Lua-Dateien löschen
1/**
2* @brief Alle Open-Protocol-Lua-Dateien löschen
3* @return Fehlercode
4*/
5public int AllOpenLuaDelete()
11.100. SDK-Codebeispiel für Open-Protocol-Lua-Dateioperationen
1public int TestCtrlOpenLuaOperate()
2{
3 int rtn;
4
5 // Lua-Datei auf Roboter hochladen
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 // Lua-Datei von Roboter herunterladen
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 // Steuerungs-Open-Protocol-Lua-Name festlegen
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 // Steuerungs-Open-Protocol-Lua-Name abrufen
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 // Open-Protocol-Lua laden und entladen
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 // Bestimmte Lua-Datei und alle Lua-Dateien löschen
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}