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方便,免费,非常实用。

相关推荐
୧⍢⃝୨ LonelyCoder5 分钟前
FreePBX修改IP地址和端口以及添加SSL证书开启HTTPS访问
tcp/ip·https·ssl
ROBOT玲玉6 分钟前
Milvus 中,FieldSchema 的 dim 参数和索引参数中的 “nlist“ 的区别
python·机器学习·numpy
轩辰~14 分钟前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
燕雀安知鸿鹄之志哉.32 分钟前
攻防世界 web ics-06
网络·经验分享·安全·web安全·网络安全
Kai HVZ1 小时前
python爬虫----爬取视频实战
爬虫·python·音视频
古希腊掌管学习的神1 小时前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
m0_748244831 小时前
StarRocks 排查单副本表
大数据·数据库·python
B站计算机毕业设计超人1 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
ProcessOn官方账号1 小时前
如何绘制网络拓扑图?附详细分类解说和用户案例!
网络·职场和发展·流程图·拓扑学
路人甲ing..1 小时前
jupyter切换内核方法配置问题总结
chrome·python·jupyter