问题提出
使用Python写上位机软件时,若通过网口向硬件端发送命令参数对仪器进行控制,此时需要将多个参数打包为字节流数据后进行网络传输,那么,在Python中怎样将多个参数打包为字节流进行网络传输呢?
如对于一个具体的例子,将下列参数打包成字节流通过网络传输到硬件部分,要求如下:
整个包大小为64Byte
包头为0X“FAA5 FBB5 FCC4 FDD5”
包尾为0X“5FA5 5FB5 5FC5 5FD5”
中间不足部分补0
所有参数皆为有符号整型数字,且初始值、占用字节数定义如下:
解决方法
对于这个问题,可以使用struct、ctypes、socket等模块完成,其具体步骤思路为:
1、用ctypes模块创建64个字节大小的发送缓冲区sendBuffer,代码如下:
2、用struct模块,分别定义包头(fmt_head)、包身(fmt_body,存储待发的具体参数)、包尾(fmt_tail)在字节流中的数据格式,代码如下:
3、利用struct模块的pack_into函数将待发内容打包到缓冲区sendBuffer,代码如下:
其中,headInfo和tailInfo定义的是包头、包尾的信息,即
4、通过socket模块发送到服务器端,代码如下:
备注说明
上面struct模块中支持的格式如下图所示:
打包的后的字节顺序默认上是由操作系统的决定的,struct模块提供了自定义字节顺序的功能,可以指定大端存储、小端存储等特定的字节顺序,对于底层通信的字节顺序是十分重要,不同的字节顺序和存储方式也会导致字节大小的不同。在format字符串前面加上特定的符号即可以表示不同的字节顺序存储方式,例如采用小端存储 s = struct.Struct(‘
领取专属 10元无门槛券
私享最新 技术干货