1. 本节讲解

利用Python程序语言解析攀藤PM2.5传感器G5003存储的16进制的文本文件。

2. 原始数据

3. 实现思路 

根据攀藤相关产品型号手册,可知16进制文本所代表的含义。首先,通过方括号符号 "[ ]" 获取有效时间信息及16进制格式的数据序列;其次,以空格" "对16进制数据串进行拆分,将每一字节根据手册对应到相应位置,并做统一处理。

4. 工程文件(点击下载附件

核心代码如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Dec  7 11:02:53 2017

@author: jack
"""

import time
import matplotlib.pyplot as plt
 
#读取的txt文件, G5003传感器
fileName = 'PTCOM52.txt'
 
#绘图所需数据
xtime = []
yvalue = []

#定义PM1/PM2.5/PM10标准颗粒物和大气颗粒物
sPM1 = []
sPM2_5  = []
sPM10  = []
PM1 = []
PM2_5  = []
PM10  = []

#读取包含攀藤传感器数据的txt文本
for line in open(fileName):
    
    #截取时间数值
    end = line.find(']')
    
    try:
        xtimestamp = time.mktime(time.strptime(line[1:end],"%Y:%m:%d:%H:%M:%S"))

        #以空格拆分字符串,作为数据
        array = line[end+1:].strip().split(' '); 
       
        #判断数据是否符合规则,针对G5003传感器
        if(len(array)) == 32:
            
            xtime.append(xtimestamp)      #存储时刻
            
            data = int(array[4],16)*256+ int(array[5],16)   #标准PM1.0 
            sPM1.append(data)   
        
            data = int(array[6],16)*256+ int(array[7],16)   #标准PM2.5
            sPM2_5.append(data)
            
            data = int(array[8],16)*256+ int(array[9],16)   #标准PM10
            sPM10.append(data)
            
            data = int(array[10],16)*256+ int(array[11],16)  #大气环境PM1.0 
            PM1.append(data)   
        
            data = int(array[12],16)*256+ int(array[13],16)  #大气环境PM2.5
            PM2_5.append(data)
            
            data = int(array[14],16)*256+ int(array[15],16)  #大气环境PM10
            PM10.append(data)
            
    except ValueError:
        continue;         

#将数据存到新的列表
yvalue.append(sPM1) 
yvalue.append(sPM2_5)
yvalue.append(sPM10)  
yvalue.append(PM1) 
yvalue.append(PM2_5)
yvalue.append(PM10)  
    
#将字符串转为整型数据
deta = int(xtime[0])
for j in range(len(xtime)):
    xtime[j] = int(xtime[j])-deta
    for i in range(len(yvalue)):
        yvalue[i][j] = int(yvalue[i][j])
     
#X和Y坐标信息
plt.xlabel("Time(s)")
plt.ylabel("Ug(PT_PM2.5)")  
   
#绘制曲线
for j in range(len(yvalue)):
    if j == 0:
        msg = "PT_sPM1.0"
    elif j == 1 :
        msg = "PT_sPM2.5"
    elif j == 2:
        msg = "PT_sPM10"
    elif j == 3:
        msg = "PT_PM1.0"
    elif j == 4:
        msg = "PT_PM2.5"
    else:
        msg = "PT_PM10"      
    plt.plot(xtime,yvalue[j],label=msg,linewidth=2)  
 
plt.legend()
plt.show()

5. 实验结果

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。 标签:python