当前位置: 首页 > news >正文

Python读取TCP的4字节浮点数

Python4字节浮点数读取

  • 背景
  • 读取4字节的浮点数
  • 总结

背景

用Python的tkinter开发人机界面。机器是MCU的无线服务器端。Python程序为Client,连接MCU TCP server。client发送21个字节帧。按modbusTCP发送。为提高通讯效率,server端在接到client发送来的8位的数据串后给client发送MCU的运行数据。在server端要解释4个字节的浮点数。

读取4字节的浮点数

在MCU端,用

memcpy(&txBuff[14], &fMeterValue, sizeof(MeterValue));

然后向client发送一串字节。
在python程序侧,一般是要建立一个独立的线程来接收从server发送来的数据。比如,我们从server端读取了下面的一串字节:

b'\x00\x00\x00\x00\x00\x00\x19\x01\x10\x00d\x00\t\x12\x8f\xc2\xd5\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

其中的msg[14], msg[15], msg[16], msg[17]是一个浮点数,要在HMI的页面上显示

下面是代码:

def tcp_read(para='hi', sleep=1.0):while True:global stop_threadsif stop_threads:breaktime.sleep(sleep)if ( bConnect == True):try:msg = tcp_client.recv(512)print(len(msg))if ( len(msg) > 0 ):vx = [c_byte(msg[14]).value,c_byte(msg[15]).value,c_byte(msg[16]).value,c_byte(msg[17]).value]vy = struct.unpack('f', struct.pack('4b', *vx))[0]e4.delete(0, END)svy = "%.2f" %vye4.insert(0, svy)#print(msg)print('The meter = %.2f' %vy)                                 except Exception as e:print('time out')logging.debug(e)print('Thread 2 end\r\n')

对程序注释说明:

  1. c_byte(msg[14]).value是将msg[14]的内容转换成带有±的8位数,也就是有符号字节数。signed char
  2. struct.unpack(‘f’, struct,pack(‘4b’, *vx))将4字节的浮点数转换成python的浮点数。
  3. 如果在c语言中会使用sprintf(svy, “%.2f”, vy); 但是用python就变得非常简单了,只使用一个是svy = %.2f" %vy就可以完成这个转换,方便。
  4. entry的delete的应用。使用(0, END)将entry的内容全部清除

总结

python的tkinter做简单的HMI方便,免费,非常实用。

相关文章:

Python读取TCP的4字节浮点数

Python4字节浮点数读取 背景读取4字节的浮点数总结 背景 用Python的tkinter开发人机界面。机器是MCU的无线服务器端。Python程序为Client,连接MCU TCP server。client发送21个字节帧。按modbusTCP发送。为提高通讯效率,server端在接到client发送来的8位…...

javaee springMVC的简单使用 jsp页面在webapp和web-inf目录下的区别

项目结构 依赖文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/…...

Docker容器技术实战-1

1.docker容器 docker就好比传统的货运集装箱 每个虚拟机都有独立的操作系统&#xff0c;互不干扰&#xff0c;在这个虚拟机里可以跑任何东西 如应用 文件系统随便装&#xff0c;通过Guest OS 做了一个完全隔离&#xff0c;所以安全性很好&#xff0c;互不影响 容器 没有虚拟化…...

LeetCode算法题:2. 两数相加

文章目录 题目描述&#xff1a;通过代码创建新一串新链表&#xff1a; 题目描述&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以…...

ResNet 09

一、发展 1989年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet。 1998年&#xff0c;Yann LeCun提出了一种用反向传导进行更新的卷积神经网络&#xff0c;称为LeNet-5 AlexNet是2012年ISLVRC 2012&#xff08;ImageNet Large Sca…...

什么是脚本语言,解释脚本语言的特点和应用领域

1、什么是脚本语言&#xff0c;解释脚本语言的特点和应用领域。 脚本语言是一种编程语言&#xff0c;通常用于自动化任务或脚本。它们通常比传统的编程语言更容易学习和使用&#xff0c;因为它们通常具有更少的语法和更简单的命令。 脚本语言的特点包括&#xff1a; 简单易学…...

selenium 定位不到元素的几种情况

1.动态id定位不到元素for example: //WebElement xiexin_element = driver.findElement(By.id("_mail_component_82_82"));WebElement xiexin_element = driver.findElement(By.xpath("//span[contains(.,写 信)]")); xiexin_element.click(); 上面一段…...

IDEA启动项目很慢,无访问

用idea启动本地项目&#xff0c;然后自测。 今天突然发现用postman访问不到&#xff0c;用浏览器也访问不到&#xff0c;提示信息就跟项目没有启动时一样&#xff08;启动日志过多&#xff0c;并没有发现是项目没有启完&#xff09;。 但是用cmd直接启动jar包&#xff0c;访问…...

时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测

时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测&#xff1b; 2.运行环…...

简单了解ARP协议

目录 一、什么是ARP协议&#xff1f; 二、为什么需要ARP协议&#xff1f; 三、ARP报文格式 四、广播域是什么&#xff1f; 五、ARP缓存表是什么&#xff1f; 六、ARP的类型 6.1 ARP代理 6.2 免费ARP 七、不同网络设备收到ARP广播报文的处理规则 八、ARP工作机制原理 …...

【Linux】Stratis是什么?Stratis和LVM有什么关系和区别?

背景核心特性Stratis与LVM 的联系与区别感谢 &#x1f496; 背景 在过去&#xff0c;Linux 用户通常依赖于多个工具和技术来管理存储资源&#xff0c;包括 LVM、mdadm、文件系统工具等。这些工具各自有自己的特点和用途&#xff0c;但也带来了复杂性和学习曲线。Stratis 的出现…...

植物大战僵尸修改金币【Steam下版本可行-其他版本未知】

#0.目的找到user1.dat文件&#xff0c;并修改其值 先关闭退出游戏 #1.找到植物大战僵尸的启动快捷方式-鼠标右键-属性-Web文档-URL-[steam://rungameid/3590] 记住这个【3590】 #2.Steam安装位置下有个【userdata】文件夹 #3.找到这个目录【xxxx\Steam\userdata\850524626\…...

GIS:生成Shp文件

/*** 生成shape文件** param shpPath 生成shape文件路径&#xff08;包含文件名称&#xff09;* param encode 编码* param geoType 图幅类型&#xff0c;Point和Rolygon* param geoms 图幅集合*/public static void write2Shape(String shpPath, String encode, String geo…...

【日常笔记】使用Server过程中可能遇到的一些问题

使用Server过程中可能遇到的一些问题 1. 如何查找GPU型号与驱动版本之间的关系&#xff1f;2. 如何查看当前Server的内核版本&#xff1f;3. 使用Nvidia过程中可能用到的命令4. 对Jupyter Notebook的一些配置5. TensorFlow的一般操作6. 使用PyTorch的一些操作7. 修改安装源为国…...

【Mysql】给查询记录增加序列号方法

在MySQL 8.0版本中&#xff0c;你可以使用ROW_NUMBER()函数来添加序号。以下是一个示例查询&#xff0c;演示如何添加序号&#xff1a; SELECT ROW_NUMBER() OVER (ORDER BY column_name) AS serial_number,column1, column2, ... FROMyour_table;请将column_name替换为你想要…...

Linux 安装elasticsearch-7.5.1

相关链接 官⽹&#xff1a; https://www.elastic.co/cn/downloads/elasticsearch 下载&#xff1a; wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz 分词器&#xff1a; https://github.com/medcl/elasticsearch-an…...

ElementUI浅尝辄止26:Notification 通知

悬浮出现在页面角落&#xff0c;显示全局的通知提醒消息。 1.如何使用&#xff1f; 适用性广泛的通知栏 //Notification 组件提供通知功能&#xff0c;Element 注册了$notify方法&#xff0c;接收一个options字面量参数&#xff0c;在最简单的情况下&#xff0c;你可以设置tit…...

IDEA新建的Moudle失效显示为灰色

现象&#xff1a;IDEA新建的Moudle失效显示为灰色&#xff01;&#xff01;&#xff01; 解决方案&#xff1a; 1. 右键点击父模块&#xff0c;选择Open Moudle Settings&#xff1a; 2. 点击加号&#xff0c;选择Import Moudle - 导入模块&#xff1a; 3. 找到对应模块的po…...

Protobuf的简单使用

一.protobuf是什么&#xff1f; Protobuf&#xff0c;全称为Protocol Buffers&#xff08;协议缓冲区&#xff09;&#xff0c;是一种轻量级的数据序列化格式。它由Google开发&#xff0c;用于高效地存储和传输结构化数据。 与其他常见的数据序列化格式&#xff08;如XML和JS…...

OpenCV 12(图像直方图)

一、图像直方图 直方图可以让你了解总体的图像像素强度分布&#xff0c;其X轴为像素值&#xff08;一般范围为0~255&#xff09;&#xff0c;在Y轴上为图像中具有该像素值像素数。 - 横坐标: 图像中各个像素点的灰度级. - 纵坐标: 具有该灰度级的像素个数. 画出上图的直方图: …...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...