485通讯接受字符串型16进制数据转数组


EC机器人,可以通过以下指令进行485通讯。其中rs485_recv接收到的数据将整体转为字符串类型,例如机器人收到的是0A0B0C0D01020304,则recv_buff收到的是"0A0B0C0D01020304"的字符串。希望把这8个16进制数(每个是8bit)转为对应10进制数存储到table,可以使用如下Str2arr函数,Str2arr会根据传入字符串长度,自动赋值到对应数组内

ret1 =rs485_open ()
rs485_setopt(9600,8,"N",1)
rs485_send("010660020011F606",1)
sleep(0.01)
ret,recv_buff=rs485_recv(100,1) -- 超时时间100ms,接受数据为16进制形式
function Str2arr(str1)
  --将形如''0A0B0C0D01020304''共8个16进制数据(每个数据8bit)的字符串形式数据转为对应10进制并存储到out_arr
  local str_arr={}
  local out_arr={}
  for i=1,#str1/2,1  do
      str_arr[i] = string.sub(str1,2*i-1,2*i)
      out_arr[i] = tonumber(str_arr[i], 16)
  end
  return out_arr
end

local data1={}
ret1 =rs485_open ()
rs485_setopt(9600,8,"N",1)
rs485_send("010660020011F606",1)
sleep(0.01)
ret,recv_buff=rs485_recv(100,1) 
--假设接收到的数据为'0A0B0C0D01020304' ,数据内容16进制数的字符串形式                   
data1 = Str2arr(recv_buff)
--data1数据为[10,11,12,13,1,2,3,4]
elite_print(data1[2]) 
点击显示全文
赞同1
发表评论
分享

手机扫码分享
0
612
收藏
举报
收起
登录
  • 密码登录
  • 验证码登录
还没有账号,立即注册
还没有账号,立即注册
注册
已有账号,立即登录
选择发帖板块
举报
请选择举报理由
举报
举报说明