【ECJP004】RS485通信で受信した文字列データ(hex)を配列に変換する


EC ロボットは通常、次のコマンドを介して 485 と通信します。rs485_recv の戻り値は文字列型のため、必要に応じて配列に変換する必要があります。

たとえば、ロボットが受信したデータは 0A0B0C0D01020304 で、このrecv_buffのデータ型は文字列です、つまり“0A0B0C0D01020304”。

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 進数形式です。

これらの 8 つの 16 進数 (各データ長は 8 ビット) を対応する 10 進数に変換してテーブルに格納するには、次の Str2arr 関数を使用します。文字列、対応する配列に自動的に割り当てられます。

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]) 
点击显示全文
赞同0
发表评论
分享

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