搞一个生成modbus报文的CRC校验码的可视化工具

news2024/11/7 16:38:18

用python搞个可视化界面:

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton, QMessageBox

# 生成 Modbus 格式的 CRC 校验码
def crc16_modbus(data):
    crc = 0xFFFF
    for byte in data:
        crc ^= byte
        for _ in range(8):
            if (crc & 0x0001):
                crc >>= 1
                crc ^= 0xA001
            else:
                crc >>= 1
    crc = format(crc, '04X')
    # 将高位字节和低位字节交换位置
    crc = crc[2:] + crc[:2]
    return crc

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("CRC校验码计算器")
        self.setGeometry(100, 100, 300, 200)

        # 创建界面元素
        self.label_input = QLabel("请输入数据(以空格分隔):", self)
        self.label_input.setGeometry(20, 30, 200, 20)
        self.input_data = QLineEdit(self)
        self.input_data.setGeometry(30, 60, 240, 20)
        self.btn_calculate = QPushButton("计算", self)
        self.btn_calculate.setGeometry(30, 100, 240, 30)
        self.btn_calculate.clicked.connect(self.calculate_crc)
        self.label_output = QLabel("CRC校验码:", self)
        self.label_output.setGeometry(20, 150, 200, 20)
        self.output_data = QLabel("", self)
        self.output_data.setGeometry(120, 150, 150, 20)

    def calculate_crc(self):
        # 获取输入数据
        input_text = self.input_data.text().strip()
        if not all(c in '0123456789ABCDEFabcdef ' for c in input_text):
            QMessageBox.warning(self, "警告", "请输入有效的十六进制数!")
            return
        input_list = input_text.split(" ")
        input_bytes = []
        for num in input_list:
            try:
                input_bytes.append(int(num, 16))  # 将基数改为 16(十六进制)
            except ValueError:
                QMessageBox.warning(self, "警告", "请输入有效的十六进制数!")
                return
        # 计算 CRC
        crc = crc16_modbus(input_bytes)
        # 更新结果标签
        self.output_data.setText(crc)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

来看效果:

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

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

相关文章

C++类和对象(二)(类对象的存储方式)

类对象模型 1 如何计算类对象的大小 class A { public: void PrintA() {cout<<_a<<endl; } private: char _a; }; 问题&#xff1a;类中既可以有成员变量&#xff0c;又可以有成员函数&#xff0c;那么一个类的对象中包含了什么&#xff1f;如何计算一个类的大小&…

混淆矩阵绘制

import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import confusion_matrix# 示例的真实标签和预测标签 true_labels [cat, dog, bird, cat, dog, bird, cat, bird, bird] predicted_labels [cat, bird, dog, cat, bird, dog, cat, cat, bird]# 确定…

vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法

vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法 先看一下效果图&#xff08;想在表单里动态的增删 form-item&#xff0c;然后添加rules&#xff0c;校验其必填项&#xff1b; &#xff09;: html部分 <div v-for"(item, index) in …

Spring创建复杂对象

目录 一、什么是复杂对象 二、创建复杂对象的3种方式 2.1 实现FactoryBean接口 2.1.1 普通的创建方式 2.1.1 依赖注入的方式 2.1.3 FactoryBean的工作原理 2.2 实例工厂 2.3 静态工厂 一、什么是复杂对象 书接上回&#xff0c;我们已经分析了Spring是怎么去创建对象的了。那什…

【公众号开发】访问第三方接口应用于开发 · 回复图文消息

【公众号开发】&#xff08;2&#xff09; 文章目录 【公众号开发】&#xff08;2&#xff09;1. 第三方接口1.1 申请免费接口1.2 解读接口文档1.3 postman测试接口1.4 公众号开发访问第三方接口原理1.5 访问第三方接口示例1.5.1 引入依赖1.5.2 获取form格式的body字符串的方法…

EPLAN_005#宏边框、页宏、窗口宏/符号宏

一、宏边框 红边框不能用&#xff0c;变成了灰色 要在项目属性中更改位宏项目——才能使用宏边框功能 注意&#xff1a;创建宏边框时候要打开——显示隐藏元素 框选目标后&#xff0c;双击红边框的边——弹出红边框创建属性对话框——输入名称——更改变量ABC等 最后——自动…

10个设计人士应该关注的国内外资源网站

设计师网站1&#xff1a;即时设计 即时设计内拥有上万款来自于优秀设计师的精美设计作品&#xff0c;包括设计规范、页面、插画、图标、产品原型、作品集等等&#xff0c;这些作品往往都是由大厂团队精心总结的设计规范&#xff0c;对应着完善的设计系统与配套组件库。除此之外…

innoDB如何解决幻读

Mysql的事务隔离级别 Mysql 有四种事务隔离级别&#xff0c;这四种隔离级别代表当存在多个事务并发冲突时&#xff0c;可能出现的脏读、不可重复读、幻读的问题。其中 InnoDB 在 RR 的隔离级别下&#xff0c;解决了幻读的问题 事务隔离级别脏读不可重复读幻读未提交读&#xff…

openEuler 服务器安装 JumpServer (all-in-one 模式)

openEuler 服务器安装 JumpServer JumpServer 简介什么是 JumpServer &#xff1f;JumpServer 的各种类型资产JumpServer 产品特色或优势JumpServer 符合 4A 规范 JumpServer 系统架构应用架构组件说明 JumpServer 安装部署环境要求网络端口网络端口列表防火墙常用命令 在线脚本…

上万份订单里,读懂中国互联网企业ESG

【潮汐商业评论/原创】 “残障到底意味着什么&#xff1f;”知乎上有个高赞回答提到&#xff0c;对于大多数残障者而言&#xff0c;他们和家人鼓足了干劲、费劲了心思&#xff0c;只为过上“正常的生活”。 但我们可曾想过&#xff1a;这个世界有没有一开始就准备好接纳所有降…

记一次TheadLocal使用方式不正确导致内存泄漏问题的排查和修复过程

一、背景 一个部门其他同事的上线了很久的项目近期频繁的内存溢出——几乎每天内存溢出一次&#xff0c;而且频率越来越高。在添加了进程守护之后&#xff0c;虽然可以在内存溢出后自动重启&#xff0c;但并没有解决内存溢出的问题。不甘其扰之后&#xff0c;决定仔细排查导致内…

C++string的模拟实现

CSDN的uu们&#xff0c;大家好。这里是C入门的第十六讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. string类的成员变量 2. 构造函数 3. 析构函数 4. const char* c_str(…

ESP32网络开发实例-连接信号最强的热点

连接信号最强的热点 文章目录 连接信号最强的热点1、软件准备2、硬件准备3、代码实现在本文中,将向您展示如何使用 ESP32 WiFiMulti 库。 这使我们能够使用多个网络,ESP32 可以连接到列表中可用的最强 WiFi 网络。 每当它失去连接时,它都会重新连接到列表中下一个最强的网络…

数据结构-----图(Graph)论必知必会知识

目录 前言 图的基本概念 1.什么是图&#xff1f; 2 .图的相关术语 3 .有向图和无向图 4.简单图和多重图 5.连通图、强连通图、非连通图 6.权与网 7.子图和(强)连通分量 8.生成树和生成森林 前言 今天我们学习一种新的数据结构-----图&#xff0c;大家在日常生活中经常都…

KingBase用户与角色及对象访问权限(Kylin)

用户与角色 角色的概念 将一组具有相同权限的用户组织在一起&#xff0c;这一组具有相同权限的用户就称为角色&#xff08;Role&#xff09;角色在生产系统中一般被视为用户组&#xff0c;利用角色对用户进行批量授权 创建用户角色 CREATE USER name WITH [option]授予权限…

理解内存,让Android性能没有问题

内存优化一直是一个很重要但却缺乏关注的点&#xff0c;内存作为程序运行最重要的资源之一&#xff0c;需要运行过程中做到合理的资源分配与回收&#xff0c;不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏&#xff0c;重则导致用户应用程序发生 OOM&#xff08;out…

Sarscape5.6版本中导入外部控制点、写入精密轨道文件与GACOS用于大气相位

SARscape中导入外部GCP点用于轨道精炼 https://www.cnblogs.com/enviidl/p/16524645.html在SAR处理时&#xff0c;有时会加入GCP点文件&#xff0c;SAR处理中用到的控制点分为两类&#xff1a;用于校正地理位置的几何控制点&#xff08;Geometry GCP&#xff09;和用于轨道精炼…

C++类和对象(三) (this指针)

this指针 1 this指针的引出 我们先来定义一个日期类 Date class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout << _year << "-" << _month << "-" << …

【电子通识】USB接口三大类型图册

基本概念 不同时期的USB接口有不同的类型&#xff0c;USB接口分为插头和插座&#xff1a; 插头&#xff0c;plug&#xff0c;对应的也叫公口&#xff0c;即插别人的。 插座&#xff0c;receptacle&#xff0c;对应也叫做母口&#xff0c;即被插的。 USB的接口类型&#xff0…

《动手学深度学习 Pytorch版》 9.6 编码器-解码器架构

为了处理这种长度可变的输入和输出&#xff0c; 可以设计一个包含两个主要组件的编码器-解码器&#xff08;encoder-decoder&#xff09;架构&#xff1a; 编码器&#xff08;encoder&#xff09;&#xff1a;它接受一个长度可变的序列作为输入&#xff0c;并将其转换为具有固定…