当前位置: 首页 > 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方便,免费,非常实用。

http://www.lryc.cn/news/161338.html

相关文章:

  • javaee springMVC的简单使用 jsp页面在webapp和web-inf目录下的区别
  • Docker容器技术实战-1
  • LeetCode算法题:2. 两数相加
  • ResNet 09
  • 什么是脚本语言,解释脚本语言的特点和应用领域
  • selenium 定位不到元素的几种情况
  • IDEA启动项目很慢,无访问
  • 时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测
  • 简单了解ARP协议
  • 【Linux】Stratis是什么?Stratis和LVM有什么关系和区别?
  • 植物大战僵尸修改金币【Steam下版本可行-其他版本未知】
  • GIS:生成Shp文件
  • 【日常笔记】使用Server过程中可能遇到的一些问题
  • 【Mysql】给查询记录增加序列号方法
  • Linux 安装elasticsearch-7.5.1
  • ElementUI浅尝辄止26:Notification 通知
  • IDEA新建的Moudle失效显示为灰色
  • Protobuf的简单使用
  • OpenCV 12(图像直方图)
  • LeetCode 面试题 03.06. 动物收容所
  • 快速理解DDD领域驱动设计架构思想-基础篇 | 京东物流技术团队
  • C++学习笔记(堆栈、指针、命名空间、编译步骤)
  • Rust Yew应用开发的事件初探
  • 高并发下单例线程安全
  • 【EKF】EKF原理
  • 蓝桥杯官网填空题(古堡算式)
  • Python---集合set
  • LORA项目源码解读
  • Azure + React + ASP.NET Core 项目笔记一:项目环境搭建(一)
  • html 学习 之 文本标签