-Begin-
最近有运动控制的学员问到这样的问题,能不能通过Modbus协议,实现运动控制卡的数据读取。
经过测试,切实可行。这里采用的是正运动的ECI1408板卡,其他品牌板卡可能不支持,具体咨询供应商。
正运动控制器支持两个存储区,分别是0区和4区。
这里以读取XYZ三轴的位置来进行测试。
//Modbus通信对象
private ModbusTcp modbusTcp = new ModbusTcp();
//取消线程源
private CancellationTokenSource cts;
private void btn_Connect_Click(object sender, EventArgs e)
{
if (modbusTcp.Connect(this.txt_IPAddress.Text, Convert.ToInt32(this.txt_Port.Text)))
{
//如果连接成功,开线程读取
cts = new CancellationTokenSource();
Task.Run(() =>
{
GetMotionData();
}, cts.Token);
}
else
{
MessageBox.Show("运动控制卡连接失败", "建立连接");
}
}
private void btn_DisConn_Click(object sender, EventArgs e)
{
cts?.Cancel();
modbusTcp.DisConnect();
}
private void GetMotionData()
{
while (!cts.IsCancellationRequested)
{
byte[] res = modbusTcp.ReadKeepReg(1, 10000, 6);
this.Invoke(new Action(() =>
{
if (res != null && res.Length == 12)
{
float[] values = FloatLib.GetFloatArrayFromByteArray(res, DataFormat.CDAB);
this.lbl_XAxis.Text = values[0].ToString();
this.lbl_YAxis.Text = values[1].ToString();
this.lbl_ZAxis.Text = values[2].ToString();
}
}));
}
}
上位机软件实时数据显示:
测试软件结果显示:
本案例主要是测试了基于Modbus协议来读取运动控制卡的相关参数,这种情况主要用于第三方软件需要运动控制系统的相关数据。同时,如果后续的运动控制项目,需要提供数据给其他软件,可以将运动控制卡作为一个现成免费的ModbusTCP服务器,不仅可以传递运动控制参数,其他参数都可以实现传递。
-END-
全部0条评论
快来发表一下你的评论吧 !