Python读取TCP的4字节浮点数

Python4字节浮点数读取

背景

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

读取4字节的浮点数

在MCU端,用

cpp 复制代码
memcpy(&txBuff[14], &fMeterValue, sizeof(MeterValue));

然后向client发送一串字节。

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

cpp 复制代码
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的页面上显示

下面是代码:

cpp 复制代码
def tcp_read(para='hi', sleep=1.0):
    while True:
        global stop_threads
        if stop_threads:
            break
        time.sleep(sleep)
        if ( bConnect == True):
            try:
                msg = tcp_client.recv(512)
                print(len(msg))
                if ( len(msg) > 0 ):
                    vx = bytes([msg[13], msg[14], msg[15], msg[16]])
                    vy = struct.unpack('f', vx)[0]
                    e4.delete(0, END)
                    svy = "%.2f" %vy
                    e4.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. 可以用bytes来定义8位数据串
  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方便,免费,非常实用。

相关推荐
张琪杭6 分钟前
pytorch tensor创建tensor
人工智能·pytorch·python
CodeAaron8 分钟前
智慧城市新基建:AI代理IP如何让城市管理“耳聪目明”?
人工智能·tcp/ip·智慧城市
星星点点洲16 分钟前
【RAG】RAG 系统的基本搭建流程(ES关键词检索示例)
python·elasticsearch
带娃的IT创业者37 分钟前
《Python实战进阶》No18: 使用 Apache Spark 进行分布式计算
python·spark·apache
Tomorrow'sThinker1 小时前
Python零基础学习第三天:函数与数据结构
开发语言·windows·python
喝养乐多长不高1 小时前
HTTPS加密原理详解
网络·网络协议·http·https·证书·非对称加密·对称加密
元媛媛1 小时前
Python - 轻量级后端框架 Flask
开发语言·python·flask
疏狂难除1 小时前
基于Rye的Django项目通过Pyinstaller用Github工作流简单打包
后端·python·django
囚~徒~1 小时前
flask 接口文档自动化
python·flask·自动化
D-river1 小时前
【Academy】HTTP 请求走私 ------ HTTP request smuggling
网络·网络协议·安全·web安全·http·网络安全