栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【用文本方式做数据处理】基于Python的串口协议数据处理(可以用Python调用GPIO口模拟串口数据处理 如树莓派)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【用文本方式做数据处理】基于Python的串口协议数据处理(可以用Python调用GPIO口模拟串口数据处理 如树莓派)

【用文本方式做数据处理】基于Python的串口协议数据处理(可以用Python调用GPIO口模拟串口数据处理 如树莓派)

通讯协议如下:

数据位定义功能:

比如23 55 00 01 52 02 02 00 CF 0D 0A
功能就是“右”

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.
"""

def trans(x):
    x=str(x)
    start_byte = [0x23,0x55]
    data_len = 0
    device_address = []
    data = []
    datasum = "0x"
    command_list = [None,"左","右","上","下","前","后"]   
    checksum = 0
    stop_byte = [0x0D,0x0A]
    x_list = []
    y_list = []
    re_list = []
    command_str = ""
    try:
        x_list = x.split(" ")
        for i in x_list:
            i = int("0x"+i,16)
            y_list.append(i)    
    except:
        return "Trans Error"
        
    print(x_list,y_list)
    
    try:
        if y_list[0] == start_byte[0] and y_list[1] == start_byte[1]:
            print("Start Success")
        else:
            return "Start Error"
    except:
        return "Start Error"
    
    try:
        data_len = int(str('0x'+x_list[2]+x_list[3]),16)
        print("Data Length = "+str(data_len))
    except:
        return "Data Length Error"
    
    try:
        if y_list[8+data_len] == stop_byte[0] and y_list[9+data_len] == stop_byte[1]:
            print("Stop Success")
        else:
            return "Stop Error"
    except:
        return "Stop Error"
    
    try:
        device_address.append('0x'+x_list[4])
        device_address.append('0x'+x_list[5])
        print("Device Address = "+str(device_address))    
    except:
        return "Device Address Error"
    
    try:
        for i in range(0,data_len):
            data.append(x_list[6+i])
        print("Data = "+str(data))
    except:
        return "Data Error"
 
    try:
        for i in data:
            datasum = datasum + str(i)
        datasum = int(datasum,16)
        print("Datasum = "+str(datasum))
    except:
        return "Datasum Error" 
    
    try:
        for i in range(0,6+data_len):
            checksum = checksum + y_list[i]
        print("Checksum = "+str(checksum))
        if checksum == int(str('0x'+x_list[6+data_len]+x_list[7+data_len]),16):
            print("Check Success")
        else:
            return "Check Error"
    except:
        return "Check Error" 
    
    try:
        command_str = command_list[datasum]
    except:
        return "Command Error" 
    
    re_list.append(device_address)
    re_list.append(datasum)
    re_list.append(command_str)
    
    return re_list

if __name__ == '__main__':
    x='23 55 00 01 52 02 02 00 CF 0D 0A'
    print(trans(x))
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号