通讯协议原始指令日志Python脚本分析

news2024/9/23 3:16:13

一.通讯协议格式:
在这里插入图片描述
二.通讯协议原始日志
[2024-04-18 14:58:59.659 D] 99 99 0E 00 01 0A 04 00 01 00 00 00 1E FN FN
[2024-04-18 14:58:59.959 D] 99 99 0E 00 01 0C 03 03 01 00 BC FN FN

三.通讯协议原始指令日志Python脚本分析(仅解析指令的PC版和CMD部分)

#!/usr/bin/python3
class File:
    #分析log路径
    __path='PC_log.log'
    __data=[]
    #指令中【电路板】集合
    __PC_dict = {'电路板':{'Board0': '00','Board1': '01','Board2': '02','Board3':'03'}
                 }
    #指令中【CMD】集合
    __CMD_dict={
        '读取':{'状态查询':'0800','版本号':'0820'},
        '写入':{'写入(直接)':'03','写入(间接)':'83'},
        '动作指令': {'单电机动作': '0400', '组合动作':'0500'},
        '复位指令': {'模块普通复位':'0303', '模块快速复位': '0302'}
    }
    def analysis_log(self):
        '''
        analysis_log():定义打开分析日志文件及获取分析结果
        '''
        try:
            with open(File.__path, 'r', encoding='utf-8', errors='ignore') as f:
                for line in f:
                    # 截取日期
                    Date_time=line.split('D')[0]+'D] '
                    #【协议头】
                    HD_order='9999'
                    #协议未
                    ED_order='FEFE'
                    #截取长度
                    LEN_order=line.replace(' ', '').split('9999')[-1][0:4]
                    #截取【PC版号】
                    PC_order = line.replace(' ', '').split('9999')[-1][4:6]
                    #截取【电机号】
                    MOTOR_order = line.replace(' ', '').split('9999')[-1][6:8]
                    #截取【CMD]
                    CMD_order = line.replace(' ', '').split('9999')[-1][8:12]
                    #截取【数据】
                    DATA_order = line.replace(' ', '').split('9999')[-1][12:-6]
                    #截取校验位
                    CRC_order=line.replace(' ', '').split('9999')[-1][-6:-4]

                    NEW_order=(Date_time+HD_order+LEN_order+' '+PC_order+' '+MOTOR_order+' '+CMD_order+' '+DATA_order+
                               ' '+CRC_order+ED_order+'------'+File.pc_analyze(self,PC_order)[0]+' --- '+File.cmd_analyze(self,CMD_order)[0]+'指令')
                    File.__data.append(NEW_order)
                return File.save_to_file(self,File.__data)
        except Exception as ex:
            print(ex)

    def save_to_file(self,arr):
        '''
        save_to_file():定义日志解析后内容保存至文件中
        '''
        try:
            with open('解析日志.txt', 'w') as file:
                for row in arr:
                    line = ' '.join(str(element) for element in row)
                    file.write(line + '\n')
        except Exception as ex:
            print(ex)
    def find_keys_by_value(self,order_dict,value):
        '''
        find_keys_by_value:定义根据字典值查找关键字
        return:返回关键字
        '''
        keys_found = []
        for key1 in order_dict:
            if isinstance(order_dict[key1], dict):
                for key2 in order_dict[key1]:
                    if order_dict[key1][key2] == value:
                        keys_found.append((key1+'->'+key2))
            else:
                if order_dict[key1] == value:
                    keys_found.append(key1)
        return keys_found

    def pc_analyze(self,value):
        '''
        pc_analyze():定义指令中pc查询
        '''
        try:
            JH=File.find_keys_by_value(self,File.__PC_dict, value)
            return JH
        except Exception as ex:
            print(ex)
    def cmd_analyze(self,value):
        '''
        cmd_analyze():定义指令中CMD查询
        '''
        try:
            CMD=File.find_keys_by_value(self,File.__CMD_dict, value)
            return CMD
        except Exception as ex:
            print(ex)

f=File()

if __name__ == "__main__":
    # arg1='[2024-04-18 14:58:59.659 D] 99 99 0E 00 01 0A 04 00 01 00 00 00 1E FN FN'
    # arg2='[2024-04-18 14:58:59.959 D] 99 99 0E 00 01 0C 03 03 01 00 BC FN FN'
    print('第86行:',f.analysis_log())

解析日志内容保存至文件中,文件内容如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1976766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

反制攻击者-蚁剑低版本

目录 安装 攻击者获取防守方的权限 防守方反制攻击者 防守方获取攻击者的shell权限 安装 安装蚁剑2.0.7版本 链接:https://pan.baidu.com/s/1t40UxkZ2XuSWG6VCdGzvDw?pwd8888 提取码:8888 下载好后先打开Loader文件夹下的.exe文件,打…

常见cms漏洞之dedecms

DedeCMS是织梦团队开发PHP 网站管理系统,它以简单、易用、高效为特色,组建出各种各样各具特色的网站,如地方门户、行业门户、政府及企事业站点等。 下载地址请网上自行寻找 搭建方式选择php study 首先搭建环境 #前台http://localhost/dedecm…

医院患者押金原路退回系统源码,一键操作秒到账,无需设备收银设备 押金+身份证+电子押金单 解决方案

科技之力赋能医院押金原路退回,安全可靠账目清晰 一、医院押金管理必要性 以下是一些可用于销售软件、突出医院管理方便的优点总结: 1. 高效便捷的押金原路退回流程:利用科技之力,简化操作,节省时间和人力成本&#…

使用WPF调用Python进行图像灰度处理

1. 前言 在本文中,我们将通过WPF应用程序调用Python脚本进行图像灰度处理。我们将使用Python的OpenCV库来处理图像,并将其转换为灰度图像,然后通过WPF界面来启动Python进程并展示结果。 2. 准备工作 在开始之前,请确保系统已经…

PDF隐写思路

文章目录 使用工具技术细节小结 使用工具 工具:WPS、010Editor、WbStego 技术细节 步骤: 使用 WPS 查看文件,看是否能打开。 若不能打开则使用 010Editor 查看是否少了头文件等。 正常的 PDF 缺少头文件的 PDF 如果缺少头文件则使用 010…

【初阶数据结构题目】9. 链表分割

链表分割 点击链接做题 例如: 排序前:1->6->2->3->5 X:X 3 排序后:1->2->6->3->5 思路: 排序前:1->6->2->3->5 小链表:malloc->1->2 大链表&#…

一文看懂STL标准模板中的set用法(C++)详细源码与例题

在 C 中,集合通常指的是标准模板库(STL)中的 std::set 或 std::unordered_set。这两个都是用来存储不重复元素的容器,但在实现和使用方式上有一些区别。 集合(set)是一个内部自动有序且不含重复元素的容器…

C++的STL简介(三)

目录 1.vector的模拟实现 1.1begin() 1.2end() 1.3打印信息 1.4 reserve() 1.5 size() 1.6 capacity() 1.7 push_back() 1.8[ ] 1.9 pop_back() 1.10 insert&…

扑克游戏(函数规范化,拆分事件)

前言: 题目链接 进入链接后,点击实践项目,以下两道题分别为6.8.15和6.8.16, 这两道题算不上难,特别是第二道在之前某个比赛中遇到过一次,当时没做出来,想着去找的,没找着,现在又看…

Midjourney小技巧-提升出图质量的常用公式

一个公式让你的Midjourney生成更具韵味的人像身影图 step1-测试:输入提示词 - 一个面容精致的亚洲女性 - An Asian woman with a delicate face 生成的图片还是挺唯美的,就是过于单调,稀疏平常 step2-使用公式: 谁谁&#xff0…

Windows调大虚拟内存来代替升级物理运行内存(RAM)真的有用吗?

前言 前段时间有个粉丝突发奇想说:电脑运行内存不足,调大虚拟内存来代替升级物理运行内存(内存条)不就可以了?剩下的大几百块钱吃香的喝辣的不好吗? 嗯。。。直到2024年的今天,估计还有很多小…

微信VX多开 免扫码 登录 互斥体 可视化 Exui v1.1 易语言源码附成品软件

UI设计: 1. EXUI界面库20240204 调用的模块: 1. wow64_hook_3.02.ec(压缩包内含) 2. 精易模块[v11.1.0].ec(自行下载) 更新日志: v1.1 2024年7月25日13:28:43 { 1. 有人反馈 设置了V…

“论数据湖技术及其应用”写作框架,软考高级论文系统架构设计师论文

论文真题 近年来,随着移动互联网、物联网、工业互联网等技术的不断发展,企业级应用面临的数据规模不断增大,数据类型异常复杂。针对这一问题,业界提出“数据湖(Data Lake)”这一新型的企业数据管理技术。数据湖是一个…

YOLOv1-v5总结

文章目录 1、yolov11.2、预测阶段1.3、后处理阶段1.4、模型训练阶段1.5、损失函数1.6、yolov1网络1.7、为什么使用1*1的卷积? 2、yolov22.1、添加BN层2.2、高分辨力分类器(仅仅使用分类而不是目标检测)2.3、anchor机制2.4、关于anchor boxes&…

Python 爬虫项目实战(二):爬取微博热搜榜

前言 网络爬虫(Web Crawler),也称为网页蜘蛛(Web Spider)或网页机器人(Web Bot),是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…

iPhone苹果密码解锁工具专业版_不限制电脑

iPhone苹果密码解锁工具专业版_不限制电脑 Aiseesoft iPhone Unlocker:轻松解锁iPhone。功能强大:一键移除4位、6位密码、Touch ID和Face ID。 隐私保护:创建密码,安全无忧。数据提醒:解锁时,注意数据和设…

自制安卓车机软件(含APP)

本软件使用APPinventor2编程软件,耗时5天和3天调试,具有高德导航,视频播放,网易云音乐,酷狗,抖音,(需下载车机版软件)和自定义添加软件,网页有哔哩哔哩&#…

STM32F103 SPI详解及示例代码1

1 SPI协议详解 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是美国摩托罗拉公司(Motorola)最先推出的一种同步串行传输规范,也是一种单片机外设芯片串行扩展接口,是一种高速、全双工…

学习笔记-JWT 保持登录状态

目录 一、解析 token 1. 在 JWT 工具类添加解析 token 的方法 2. 在 Controller 添加获取用户数据的方法 二、获取用户信息 1. 发起 axios 请求用户信息 2. 在路由守卫中调用方法 3. 使用 三、token 时效性 1. 设置 token 过期时间 2. 判断 token 是否过期 3. 在拦截…

Golang是如何实现动态数组功能的?Slice切片原理解析

Hi 亲爱的朋友们,我是 k 哥。今天,咱们聊一聊Golang 切片。 当我们需要使用数组,但是又不能提前定义数组大小时,可以使用golang的动态数组结构,slice切片。在 Go 语言的众多特性里,slice 是我们经常用到的数…