介绍
该协议为易行机器人底层通信协议。是用地址作为标识分段方式,不同地址表示不同数据的协议。方式为主机往从机发送主动询问。为一问一答式通信。
协议由一个协议帧和多个数据帧组成
|协议帧|数据帧(1个或者多个)|
本协议中使用高字节在前的小端储存模式。
本协议中浮点型数据根据IEEE-754标准定义储存,大小为4个字节。
本协议是基于UDP层的协议。端口为9331。
协议帧
|CRC高八位|CRC底八位|CMD命令字|序号SN|数据帧|
CRC高八位:8位数据
CRC第八位:8位数据
CRC高八位和第八位组成一个CRC16X25。CRC是对除前两个CRC以外。后面所有的数据求CRC16
CMD命令字:8位数据
读数据:0×01
写数据:0×02
读回复:0×03
写回复:0×04
SN序号:8位数据
当发送序号是01,回复数据也是01。发送是什么回复就是什么。用于数据同步
数据帧
|地址(16位)|长度(16位)|数据(不定长度)|
LUA的tabletalk模块已经封装好协议,你只需要调用tabletalk函数接口即可进行数据的读写
以下是table写一个8位数据例子
require "tabletalk"
--固定agv ip
agvip = "192.168.31.7"
--打开tabletalk通信,端口是9331,延时是1000ms,如果接受超过1000毫秒,则返回通信失败
tabletalk.sethost(agvip,9331,1000)
--设置地址0x70为1,意味着OUTPUT0设置为1
--0x70是table地址
--8代表这个数是8位 位宽数
--false 无符号,如果填ture既有有符号
--1内容设置为1
tabletalk.settable(0x70,8,false,1)
print("SET IO OUT0 = 1")
--当程序结束后,关闭table通信
tabletalk.close()
以下是table读取一个8位数据例子
require "tabletalk"
--固定agv ip
agvip = "192.168.31.7"
--打开tabletalk通信,端口是9331,延时是1000ms,如果接受超过1000毫秒,则返回通信失败
tabletalk.sethost(agvip,9331,1000)
--读取地址0x50地址的数据
--input为0x50地址,8位位宽,无符号的数据
--sucess 返回读取成功或者失败的标志
--0x50为INPUT0的输入地址
local input,sucess = tabletalk.readtable(0x50,8,false,1)
if sucess == true then
print("READ IO INPUT0 = "..input)
end
--当程序结束后,关闭table通信
tabletalk.close()
以下是table读取当前AGV坐标例子,table浮点型处理
require "tabletalk"
--固定agv ip
agvip = "192.168.31.7"
--打开tabletalk通信,端口是9331,延时是1000ms,如果接受超过1000毫秒,则返回通信失败
tabletalk.sethost(agvip,9331,1000)
--读取地址0x100地址的数据
--sucess 返回读取成功或者失败的标志
--0x100为定位坐标地址
local x,y,theta,sucess = tabletalk.readtablef(0x100,3)
if sucess == true then
print("position : x = "..x.."\t y="..y.."\t theta="..theta)
end
--当程序结束后,关闭table通信
tabletalk.close()
以下是读取事件和释放事件的例子,table字符串处理
require "tabletalk"
--固定agv ip
agvip = "192.168.31.7"
--打开tabletalk通信,端口是9331,延时是1000ms,如果接受超过1000毫秒,则返回通信失败
tabletalk.sethost(agvip,9331,1000)
--读取地址0x100地址的数据
--sucess 返回读取成功或者失败的标志
--0x2b0为当前AGV的事件
local event,sucess = tabletalk.readtablestr(0x2b0)
if sucess == true and event == “waitstop” then
--释放当前事件
tabletalk.settablestr(0x390,event)
tabletalk.settable(0x230,8,false,1)
end
--当程序结束后,关闭table通信
tabletalk.close()
一个延时
require "tabletalk"
--这里延时1000毫秒
tabletalk.msleep(1000)
临时改变端口和ip
可以用于同一个局域网下的其他设备相连,例如易行的呼叫器和IO盒同样支持table协议
require "tabletalk"
--调用该接口后,table指向另一个ip
tabletalk.setremote(“其他设备IP”,9331,300)