南宁网站建设优化服务,微信传输助手网页版,东莞市行业网站制作公司,济南莱芜金点子信息港Python4字节浮点数读取 背景读取4字节的浮点数总结 背景
用Python的tkinter开发人机界面。机器是MCU的无线服务器端。Python程序为Client#xff0c;连接MCU TCP server。client发送21个字节帧。按modbusTCP发送。为提高通讯效率#xff0c;server端在接到client发送来的8位… 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(parahi, sleep1.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)对程序注释说明
c_byte(msg[14]).value是将msg[14]的内容转换成带有±的8位数也就是有符号字节数。signed charstruct.unpack(‘f’, struct,pack(‘4b’, *vx)将4字节的浮点数转换成python的浮点数。如果在c语言中会使用sprintf(svy, “%.2f”, vy); 但是用python就变得非常简单了只使用一个是svy %.2f %vy就可以完成这个转换方便。entry的delete的应用。使用0 END)将entry的内容全部清除
总结
python的tkinter做简单的HMI方便免费非常实用。