软文采集系统(发那科(Fanuc)IP地址与FOCAS端口设置|巫迪科技)
优采云 发布时间: 2022-04-13 02:09软文采集系统(发那科(Fanuc)IP地址与FOCAS端口设置|巫迪科技)
一、概述
如前所述,发那科数控数据一般有两种方法采集:
(1)通过FOCAS 1/2开发包二次开发采集数据(仅限windows系统)
(2)通过纯TCP协议方式。此方式不限于CPU架构(x86、ARM、MIPS等),不限于操作系统(Windows、Linux、FreeRTOS、 RT-Thread等)、μC/OS、裸机等),不限于编程语言(Java、Python、C/C++、C#、Go等)。
下面介绍了这两种方法。
PS:建议直接使用纯协议方式。比如产品使用了ARM Cortex-M,可以达到非常高的性价比。
二、FOCAS 1/2开发包方法
1、SDK和Demo可以从以下地址下载
2、代码
namespace FANUC
{
public partial class control_axis : Form
{
public control_axis()
{
InitializeComponent();
}
Fanuc.ODBPOS fos = new Focas1.ODBPOS();
private void duqu_position_rel_info()//读取相对的位置信息
{
short num = Fanuc.MAX_AXIS;
short type = -1; ;
short ret = Fanuc.cnc_rdposition(Fanuc.h, type, ref num, fos);
if (ret == 0)
{
listBox1.Items.Add(fos.p1.rel.name.ToString() + ": " + fos.p1.rel.data * Math.Pow(10, -fos.p1.rel.dec));
listBox1.Items.Add(fos.p2.rel.name.ToString() + ": " + fos.p2.rel.data * Math.Pow(10, -fos.p2.rel.dec));
listBox1.Items.Add(fos.p3.rel.name.ToString() + ": " + fos.p3.rel.data * Math.Pow(10, -fos.p3.rel.dec));
listBox2.Items.Add(fos.p1.dist.name.ToString() + ": " + fos.p1.dist.data * Math.Pow(10, -fos.p1.dist.dec));
listBox2.Items.Add(fos.p2.dist.name.ToString() + ": " + fos.p2.dist.data * Math.Pow(10, -fos.p2.dist.dec));
listBox2.Items.Add(fos.p3.dist.name.ToString() + ": " + fos.p3.dist.data * Math.Pow(10, -fos.p3.dist.dec));
}
}
public void duqu_position_ab_info()//获取绝对位置信息
{
short num = Fanuc.MAX_AXIS;
short type = -1; ;
short ret = Fanuc.cnc_rdposition(Fanuc.h, type, ref num, fos);
if (ret == 0)
{
listBox8.Items.Add(fos.p1.abs.name.ToString() + ": " + fos.p1.abs.data * Math.Pow(10, -fos.p1.abs.dec));
listBox8.Items.Add(fos.p2.abs.name.ToString() + ": " + fos.p2.abs.data * Math.Pow(10, -fos.p2.abs.dec));
listBox8.Items.Add(fos.p3.abs.name.ToString() + ": " + fos.p3.abs.data * Math.Pow(10, -fos.p3.abs.dec));
listBox7.Items.Add(fos.p1.dist.name.ToString() + ": " + fos.p1.dist.data * Math.Pow(10, -fos.p1.dist.dec));
listBox7.Items.Add(fos.p2.dist.name.ToString() + ": " + fos.p2.dist.data * Math.Pow(10, -fos.p2.dist.dec));
listBox7.Items.Add(fos.p3.dist.name.ToString() + ": " + fos.p3.dist.data * Math.Pow(10, -fos.p3.dist.dec));
}
}
public void get_postion()//获取位置信息
{
listBox3.Items.Clear();
listBox4.Items.Clear();
listBox5.Items.Clear();
listBox6.Items.Clear();
short num = Fanuc.MAX_AXIS;
short type = -1;
short ret = Fanuc.cnc_rdposition(Fanuc.h, type, ref num, fos);
if (ret == 0)
{
//绝对
listBox3.Items.Add(fos.p1.abs.name.ToString() + ": " + fos.p1.abs.data * Math.Pow(10, -fos.p1.abs.dec));
listBox3.Items.Add(fos.p2.abs.name.ToString() + ": " + fos.p2.abs.data * Math.Pow(10, -fos.p2.abs.dec));
listBox3.Items.Add(fos.p3.abs.name.ToString() + ": " + fos.p3.abs.data * Math.Pow(10, -fos.p3.abs.dec));
listBox3.Items.Add(fos.p4.abs.name.ToString() + ": " + fos.p4.abs.data * Math.Pow(10, -fos.p3.abs.dec));
listBox3.Items.Add(fos.p5.abs.name.ToString() + ": " + fos.p5.abs.data * Math.Pow(10, -fos.p5.abs.dec));
//相对
listBox4.Items.Add(fos.p1.rel.name.ToString() + ": " + fos.p1.rel.data * Math.Pow(10, -fos.p1.rel.dec));
listBox4.Items.Add(fos.p2.rel.name.ToString() + ": " + fos.p2.rel.data * Math.Pow(10, -fos.p2.rel.dec));
listBox4.Items.Add(fos.p3.rel.name.ToString() + ": " + fos.p3.rel.data * Math.Pow(10, -fos.p3.rel.dec));
listBox4.Items.Add(fos.p4.rel.name.ToString() + ": " + fos.p4.rel.data * Math.Pow(10, -fos.p4.rel.dec));
listBox4.Items.Add(fos.p5.rel.name.ToString() + ": " + fos.p5.rel.data * Math.Pow(10, -fos.p5.rel.dec));
//机器
listBox5.Items.Add(fos.p1.mach.name.ToString() + ": " + fos.p1.mach.data * Math.Pow(10, -fos.p1.mach.dec));
listBox5.Items.Add(fos.p2.mach.name.ToString() + ": " + fos.p2.mach.data * Math.Pow(10, -fos.p2.mach.dec));
listBox5.Items.Add(fos.p3.mach.name.ToString() + ": " + fos.p3.mach.data * Math.Pow(10, -fos.p3.mach.dec));
listBox5.Items.Add(fos.p4.mach.name.ToString() + ": " + fos.p4.mach.data * Math.Pow(10, -fos.p4.mach.dec));
listBox5.Items.Add(fos.p5.mach.name.ToString() + ": " + fos.p5.mach.data * Math.Pow(10, -fos.p5.mach.dec));
//距离
listBox6.Items.Add(fos.p1.dist.name.ToString() + ": " + fos.p1.dist.data * Math.Pow(10, -fos.p1.dist.dec));
listBox6.Items.Add(fos.p2.dist.name.ToString() + ": " + fos.p2.dist.data * Math.Pow(10, -fos.p2.dist.dec));
listBox6.Items.Add(fos.p3.dist.name.ToString() + ": " + fos.p3.dist.data * Math.Pow(10, -fos.p3.dist.dec));
listBox6.Items.Add(fos.p4.dist.name.ToString() + ": " + fos.p3.dist.data * Math.Pow(10, -fos.p4.dist.dec));
listBox6.Items.Add(fos.p5.dist.name.ToString() + ": " + fos.p5.dist.data * Math.Pow(10, -fos.p5.dist.dec));
}
}
Fanuc.ODBACT pindle = new Focas1.ODBACT();
public void get_pindle()//获取主轴的速度
{
short ret = Fanuc.cnc_acts(Fanuc.h, pindle);
if (ret == 0)
{
label5.Text = pindle.data.ToString();
}
else
{
MessageBox.Show(ret+"");
}
}
Fanuc.ODBSVLOAD sv = new Focas1.ODBSVLOAD();
Fanuc.ODBSPLOAD sp = new Focas1.ODBSPLOAD();
public void get_load()//主,伺服轴的加载计//测试成功
{
short a = 6;//伺服轴的数量
short ret = Fanuc.cnc_rdsvmeter(Fanuc.h, ref a, sv);
short type = Convert.ToInt16(textBox1.Text);//1朱轴压力,-1俩者都有,0主轴监控速度表
short ret2 = Fanuc.cnc_rdspmeter(Fanuc.h, type, ref a, sp);
if (ret == 0 && ret2 == 0)
{
listBox9.Items.Add("伺服的加载值:" + sv.svload1.data + " " + sv.svload2.data + " " + sv.svload3.data + " ");
listBox9.Items.Add("主轴的加载值:" + sp.spload1.spload.data);
}
else
MessageBox.Show(ret+"");
}
}
}
三、协议方法
从上面的代码可以看出,不再需要调用官方库文件,直接填充发送缓冲区,通过TCP连接发送,所以适用性很强。
四、机器IP设置
您可以参考下面的链接
Fanuc CNC IP 地址和 FOCAS 端口设置 |无地科技