1. 上位机实时采集机器人各轴扭矩,如何实现?
2. PCSDK未提供直接读取扭矩接口,但RAPID中可以通过指令
GetJointDataMechUnit:=ROB_1,1Torque:=reg1,读取1轴的扭矩并存储于reg1
3. 可以在RAPID创建后台程序,实时读取各轴扭矩。
4. 上位机根据选择,读取对应各轴扭矩数值并以曲线形式显示。
5. 机器人创建后台任务,并编写代码。编写完毕将后台任务设为semistatic,即开机自启动
var num axis_tor_arr{6}:=[0,0,0,0,0,0];
PROC main()
WHILETRUEDO
FOR i FROM 1 TO 6 DO
GetJointDataMechUnit:=ROB_1,iTorque:=axis_tor_arr{i};
!将各轴扭矩存储于数组中
ENDFOR
waittime 0.1;
ENDWHILE
ENDPROC
6. 为方便以曲线形式显示数据,这里使用HSLcomponent库中的user_curve控件(HSLcomponent获取方式见 上位机仪表盘实时显示机器人速度)
7. 在上位机插入user_curve控件,做相应设置。
8. 对“启动记录”按钮创建代码如下:
Timer timer;
//通过定时器定时获取当前各轴扭矩
bool t_record = false;
privatevoid button2_Click_1(object sender, EventArgs e)
{
if (t_record == false)
{
userCurve1.SetLeftCurve("A", newfloat[] { }, Color.Tomato);
//创建空曲线
timer.Tick += (sender1, e1) =>
{
RapidData rd = controller.Rapid.GetRapidData("t2", "module1", "axis_tor_arr");
//获取任务t2下的module1下的axis_tor_arr数组
if (rd.IsArray)
{
ArrayData ad = (ArrayData)rd.Value;
//转化数组
float t1 = Convert.ToSingle(ad[comboBox1.SelectedIndex].ToString());
//根据选择的comboBox1序号,显示对应轴扭矩
if (comboBox1.SelectedIndex > 2)
{
userCurve1.ValueMaxLeft = 10;
userCurve1.ValueMinLeft = -10;
}
//调整Chart的显示上下限
else
{
userCurve1.ValueMaxLeft = 300;
userCurve1.ValueMinLeft = -300;
}
userCurve1.AddCurveData("A", t1);
//将当前数据填入
}
};
timer.Start();
t_record = true;
button2.Text = "停止记录扭矩";
}
else
{
timer.Stop();
t_record = false;
button2.Text = "开始记录扭矩";
}
以上内容转载于网络
更多:ABB机器人配件