全新的V2.4版本发布了,根据实际需要后面会完善基本功能,并开发出更实用的功能模块,欢迎小伙伴们留言。详细更新内容介绍如下:
更新1:新增指定输入值进行移动机器人
更新2:查看数据及变量功能
更新3:可以设置变量的值,包括以下数据类型,string、bool,num,dnum,pose,pos,workobject,tooldata,loaddata,byte,以及string、bool,num,dnum,pose,pos,byte 1-3维数组。
当然SDK中还支持Orient、JointTarget、ExtJoint、RobJoint、RobTarget、ConfData等数据的查看或修改,这里后期修改或示教点位时再开发。
更新4:更新DLL版本,21.3,以及.NETFrameWork4.8,此前为6.02版本DLL,.NETFrameWork4.6。
优化1:热重启控制器按钮,使用API接口实现的,使用SDK重启无效。
按照国际惯例 附上部分源码:
//修改pose数据类型
var varNum = controller.Rapid.GetRapidData(TaskName, Mod, VariableName);
Pose poseVal = (Pose)varNum.Value;
poseVal.FillFromString2(textBoxInputVariable.Text);
varNum.Value = poseVal;
//修改pos数据类型
Pos posVal = (Pos)varNum.Value;
posVal.FillFromString2(textBoxInputVariable.Text);
varNum.Value = posVal;
//修改tooldata数据类型
ToolData toolVal = (ToolData)varNum.Value;
toolVal.FillFromString2(textBoxInputVariable.Text);
varNum.Value = toolVal;
//修改WobjData数据类型
WobjData wobjVal = (WobjData)varNum.Value;
wobjVal.FillFromString2(textBoxInputVariable.Text);
varNum.Value = wobjVal;
//修改byte数据类型
ABB.Robotics.Controllers.RapidDomain.Byte byte_Val = new ABB.Robotics.Controllers.RapidDomain.Byte();
byte_Val.FillFromString2(textBoxInputVariable.Text);
varNum.Value = byte_Val;
//修改string1-3维数组
var rd_Array= controller.Rapid.GetRapidData(TaskName, Mod, VariableName);
ArrayData targets = (ArrayData)rd_Array.Value;
int r = targets.Rank;
String str_Arr = new String();
str_Arr.FillFromString(textBoxInputVariable.Text);
if (r == 1)
{
rd_Array.WriteItem(str_Arr, int.Parse(comboBoxArrX.Text)-1);
}
else if (r == 2)
{
rd_Array.WriteItem(str_Arr, int.Parse(comboBoxArrY.Text)-1, int.Parse(comboBoxArrX.Text) - 1);
}
else
{
rd_Array.WriteItem(str_Arr, int.Parse(comboBoxArrZ.Text) - 1, int.Parse(comboBoxArrY.Text) - 1, int.Parse(comboBoxArrX.Text) - 1);
}
//查看所有数据类型
try
{
var task = controller.Rapid.GetTask("T_ROB1");
if (!string.IsNullOrEmpty(Glable_Task_Name))
{
task = controller.Rapid.GetTask(Glable_Task_Name);
}
RapidSymbolSearchProperties sProp = RapidSymbolSearchProperties.CreateDefault();
sProp.Types = SymbolTypes.Function | SymbolTypes.Data;
sProp.InUse = false;
sProp.Recursive = true;
sProp.SearchMethod = SymbolSearchMethod.Block;
RapidSymbol[] datas = task.SearchRapidSymbol(sProp);
listViewValueShow.Items.Clear();
datas = datas.Where(t => t.Type.ToString() != "Function" && t.Scope[1] != "CalibData" &&
RapidDataType.GetDataType(t).ToString() != "robtarget" && RapidDataType.GetDataType(t).ToString() != "jointtarget" && t.Scope.Count()==3).ToArray();
foreach (RapidSymbol rs in datas)
{
ListViewItem items = new ListViewItem();
RapidDataType theDataType;
theDataType = RapidDataType.GetDataType(rs);
string theDataTypeStr = theDataType.ToString();
items.Text = rs.Name;
items.SubItems.Add(rs.Scope[1]);
items.SubItems.Add(theDataType.ToString());
RapidData val = null;
val = controller.Rapid.GetRapidData(rs.Scope[0], rs.Scope[1], rs.Name);
if (theDataTypeStr == "string")
{
var s = val.StringValue;
items.SubItems.Add(s);
}
else if (theDataTypeStr == "num" || theDataTypeStr == "dnum" || theDataTypeStr == "pos" )
{
var n = val.Value.ToString();
items.SubItems.Add(n);
}
else if (theDataTypeStr == "bool")
{
var b = val.StringValue;
items.SubItems.Add(b);
}
else if (theDataTypeStr == "clock")
{
var n = val.Value;
if (n==null)
{
items.SubItems.Add("");
items.SubItems.Add(rs.Type.ToString());
listViewValueShow.Items.Add(items);
continue;
}
items.SubItems.Add(n.ToString());
}
else
{
string tool = null;
tool = val.Value == null ? tool="": tool = val.StringValue;
items.SubItems.Add(tool);
}
items.SubItems.Add(rs.Type.ToString());
listViewValueShow.Items.Add(items);
}
}
catch (System.Exception ee)
{
errLog = Robot_Control.errLogger(errLog, "[error]:\t" + ee);
richTextBox1.Lines = errLog.ToArray();
}
详细内容请关注公众号: