C#与ABB机械手建立通信,并控制机械手动作

第一步:安装软件
VS2017+PCSDK 2019.5 7.0.8721.594
分别在微软官网和ABB官网下载。
第二步:安装完软件后,找到PC SDK的安装目录,默认目录是C:\Program Files (x86)\ABB\SDK\PCSDK 2019。打开目录下的文件

在VS中添加引用。

将ABB.Robotics.Controllers.PC.dll和RobotStudio.Services.RobApi.dll两个DLL文件添加进来。
添加using指令。

第三步:程序实现,建立连接。
public static ABB.Robotics.Controllers.RapidDomain.Task tRob1 = null;//
private NetworkScanner scanner = null;
private Controller controller = null;
ControllerInfoCollection controllers = null;
scanner = new NetworkScanner();
scanner.Scan();
controllers = scanner.Controllers;//扫描到的所有控制器
if (scanner.Controllers.Count == 1)//只搜索到一个机械手的情况,
{
try
{
if (controllers[0].IPAddress.ToString() == "192.168.1.80")
{
controller = Controller.Connect(controllers[0], ABB.Robotics.Controllers.ConnectionType.Standalone, false);
}
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
}
if (controller != null)
{
if (controller.Connected == true)
{
controller.Logon(UserInfo.DefaultUser);
tRob1 = controller.Rapid.GetTask("T_ROB1");
}
if (controller.Connected == true)//指示灯
{
pictureBox3.Image = imageList1.Images[3];
}
else
{
pictureBox3.Image = imageList1.Images[1];
}
}
第四步:向ABB坐标变量、位变量等写入或读取数据。
c# 写ABB布尔变量:
if (controller.IsMaster == false && controller.OperatingMode == ControllerOperatingMode.Auto)
{
try
{
using (var m = Mastership.Request(controller))
{
if (controller.IsMaster == false) MessageBox.Show("ABB主机请求失败");
var rd16 = controller.Rapid.GetRapidData("T_ROB1", "MainModule", "ABB_detection_star");
rd16.Value = new Bool(true);
}
}
catch (Exception ex)
{ MessageBox.Show(ex.ToString());
}
}
C#读ABB布尔变量:
RapidData rd4 = controller.Rapid.GetRapidData("T_ROB1", "MainModule", "ABB_safety_bit");
if (rd4.Value is Bool)
{
Bool rapidBool = (Bool)rd4.Value;
}
C#读坐标变量:
if (MAIN.tRob1 != null)
{
MAIN.rd_repeat = MAIN.tRob1.GetRapidData("MainModule", "ABB_photo_data");
RobTarget rgb1 = (RobTarget)MAIN.rd_repeat.Value;
dataGridView2.Rows[2].Cells[1].Value = rgb1.Trans.X.ToString();
dataGridView2.Rows[3].Cells[1].Value = rgb1.Trans.Y.ToString();
dataGridView2.Rows[4].Cells[1].Value = rgb1.Trans.Z.ToString();
}
C#写入坐标变量:
using (var m = Mastership.Request(controller))
{
RapidData rx5 = controller.Rapid.GetTask("T_ROB1").GetModule("MainModule").GetRapidData("pPlaceA");
RobTarget rgt5 = (RobTarget)rx5.Value;
if (controller.IsMaster == false) MessageBox.Show("ABB主机请求失败2");
rgt5.Trans.X = (float)79.25;;
rgt5.Trans.Y = (float)83.29;
rgt5.Trans.Z = (float)39.55;
//rbg.FillFromString2("[[123.28,1029.42,573.04],[0.241743,-0.666781,0.280356,-0.64681],[0,-2,3,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]]");
rx5.Value = rgt5;//在ABB指定位置写入坐标
}
C#针对网线接触不良,ABB断电等可以加断开连接检测功能:
if (controller != null)//实际测试验证好用,ABB断电,指示灯变为红灯,ABB再次上电,指示灯自动变为绿灯
{
try
{
if (controller.Connected == false)
{
pictureBox3.Image = imageList1.Images[1];
controller = null;//断开连接后,CONTROLLER给NULL值,方便程序自动重连。
// MessageBox.Show("ABB断开连接");
}
else
{
pictureBox3.Image = imageList1.Images[3];
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
到这基本基本可以实现C#与ABB通信并控制ABB运动的各项基本功能。有疑问欢迎一起探讨,邮箱:longtuodz@163.com

posted @ 2020-11-03 21:40  龙拓电子  阅读(1838)  评论(0编辑  收藏  举报