MoteLab:返回串口数据处理(python)

从MoteLab返回的串口数据,包含messages.pickle文件这是MoteLab系统中串口收集数据的总和,但是这些数据需要解析后才能进行分析。下面的代码就是在python环境下提取message有效数据的代码。

 

使用命令 python TestOutput.py messages.pickle
生成的test.log就是获得的有效数据

返回数据的示例

1252985727.66  received from0Message <mviz_msg>  :时间 接收/发送 节点号 消息类型
  [version=0x0]
  [interval=0x400]                                                           :消息内容 和Mviz.h定义中相同
  [origin=0x4f]
  [count=0x0]
  [reading=0x0]
  [etx=0x0]
  [link_route_value=0x0]
  [link_route_addr=0x0]
1252985727.66  received from0Message <mviz_msg>
  [version=0x0]
  [interval=0x400]
  [origin=0x52]
  [count=0x0]
  [reading=0x0]
  [etx=0x0]
  [link_route_value=0x0]
  [link_route_addr=0x0]

源代码只要修改消息类就可以(代码中的mviz_msg)对其它数据进行分析

源代码

import os,sys,traceback,time,cPickle
sys.path.append(os.path.join(os.environ["TOSROOT"], "support/sdk/python"))

from tinyos.message import Message
import mviz_msg

logfile = open('test.log', 'w')
picklefile = open(sys.argv[1])
counters = {}

def checkmessage(m):

  if m.dest == 0xFFFF:
    return True
  if not counters.has_key(m.addr):
    counters[m.addr] = 0
    return True
  else:
    return True

while True:
  try:
    m = cPickle.load(picklefile)
    if m.amType() == mviz_msg.AM_TYPE:
      Mviz_msg = /
        mviz_msg.mviz_msg(data=m.dataGet(),
                                      addr=m.getAddr(),
                                      gid=m.getGid())
      Mviz_msg.dest = m.dest
      Mviz_msg.time = m.time
      Mviz_msg.sent = m.sent
      Mviz_msg.received = m.received
      print (Mviz_msg.time,)
      logfile.write(str(Mviz_msg.time,))
      if Mviz_msg.received:
        print ("received from", int(Mviz_msg.addr))
        logfile.write(str("received from"))
        logfile.write(str(int(Mviz_msg.addr)))
      else:
        print ("sent to", Mviz_msg.dest)
        logfile.write(str("sent to"))
        logfile.write(str(Mviz_msg.dest))
      print (Mviz_msg)
      logfile.write(str(Mviz_msg))
    else:
      passlogfile = open('test.log', 'w')
  except EOFError:
    sys.exit(0)
  except:
    traceback.print_exc()
    sys.exit(-1)

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值