用于智能仪器数据交互的浮点数低损编码方法与流程

文档序号:31277899发布日期:2022-08-27 01:05阅读:72来源:国知局

1.本发明涉及电子测量技术领域,尤其是一种用于智能仪器数据交互的浮点数低损编码方法。


背景技术:

2.对于现代智能仪器,特别是电子测量仪器而言,上位机与下位机的数据交互普遍采用scpi协议。该协议是将需要交互的数据直接以字符串编码的形式由下位机通过通信接口发送至上位机。其优点在于通信内容含义明确、易于编程;而缺点则是数据量过大、吞吐量低。比如:测量读数为1.23456,则浮点数编码为字符串后为“+1.23456e+0”共10个字节。而一个单精度浮点数的全部信息量原本只有4个字节,可以看出scpi协议对测量读数的编码是十分冗余的。


技术实现要素:

3.本发明要解决的技术问题是:提供一种用于智能仪器数据交互的浮点数低损编码方法,在不违背scpi协议的同时可大大提高智能仪器上位机与下位机之间的数据交互效率。
4.本发明解决其技术问题所采用的技术方案是:一种用于智能仪器数据交互的浮点数低损编码方法,包括以下步骤:
5.s1、将浮点数格式化为字符串形式,保留6位十进制有效位数;
6.s2、从字符串中依次提取范围在0~255的数值信息,得到符号位、尾数位以及指数位三部分信息;
7.s3、将尾数位信息进行拆分并对拆分后的数字分别进行编码,得到三个码元;
8.s4、将符号位的信息附加在第一个码元中;
9.s5、将指数位的信息单独编码成最后一个码元;
10.s6、以三个码元表征尾数位和符号位,一个码元表征指数位,每个码元占一个字节,在assic码表中均为可见字符串,得到四个字节的字符串编码;
11.s7、发送至上位机通过scpi协议进行读取、解码即完成数据交互。
12.进一步的说,本发明所述的步骤s3中,当码元为不可见字符串时,则在原有的基础上统一增加一定数值将码元变为可见字符。
13.进一步的说,本发明所述的步骤s6中,设编码后的四个码元分别为x[0],x[1],x[2],x[3];设符号位为s、数据位从高到低的三个字节分别是nh、nw、n
l
;指数位是e;则编码算法由下式表述:
[0014][0015]
式中,s的取值是0或1;如符号位为正,则s=0;如符号位为负,则s=1。
[0016]
进一步的说,本发明所述的步骤s7中,在智能仪器的数据交互系统中,下位机将测量读数编码后发送给上位机,上位机接收到字符串形式的数据编码后进行解码即得到浮点数形式的测量读数。
[0017]
再进一步的说,本发明所述的解码方法是编码方法的逆过程。
[0018]
本发明的有益效果是,解决了背景技术中存在的缺陷,针对scpi协议的弱点,将测量读数由浮点数编码为4个字节以内的可见字符串,避开assic前32个不可见的控制字符,编码输出的每一个字节在assic码表中均为可见字符;编码输出不多于4个字节,解码后保留至少6位十进制有效精度;在缩减编码数据的同时,仍遵循了scpi协议基于可读字符串的原则,保持了原通信方式。
具体实施方式
[0019]
现在结合实施例对本发明作进一步详细的说明。
[0020]
一种用于智能仪器数据交互的浮点数低损编码方法,是在保留至少6位十进制精度的基础上对浮点数进行低损编码,并以可见字符串的形式输出。
[0021]
首先把浮点数格式化为字符串;然后从字符串中依次提取范围在0~255的数值信息;最后以三个码元表征尾数和符号,一个码元表征指数位,于是得到四个字节的字符串编码。
[0022]
以浮点数-123.456789为例,编码过程如下:
[0023]
1、首先将浮点数转码成科学计数法形式的字符串,保留6位十进制有效数字,得
“‑
1.23456e+02”。
[0024]
2、从字符串
“‑
1.23456e+02”提取三部分信息,分别是

符号位

尾数位

指数位。本例中,符号为负,尾数是123456,指数是+2。
[0025]
3、将上一步中的三部分信息分别编码为可见字符串。具体方法为:
[0026]

将尾数位123456分别编码为0x0c、0x22、0x38,各占一个字节,对应的十进制assic码为12、34、56;此时第一个码0x0c为不可见字符串。
[0027]

为避开assic码表中前32个不可见字符,将上一步中得到的三个码元统一加50。因为两位十进制数的最大取值为99,再加50最大是149,远未超过一个字节所能表示的最大十进制数255。本例中,加50后的三个码元分别是:0x3e、0x54、0x6a,在assic码表中皆为可见字符。
[0028]
4、如符号位是负数,则将第一个编码加100。本例中,第一个码元加100后变为0xa2。在assic码表中仍为可见字符。
[0029]
5、最后对指数位进行编码。指数位一般在
±
50范围内,对于智能仪器的测量读数而言,指数位小于-50或大于+50时,数据已失去实际意义。将指数位加128后作为第四个码元,在assic表中也必然是可见字符。在本例中,指数位是+2,加上128后得到码元0x82。至此得到浮点数编码的全部四个码元,最终得到编码结果:0x3e 0x54 0x6a 0x82。
[0030]
综上述所,设编码后的四个码元分别为x[0],x[1],x[2],x[3];设符号位为s、数据位从高到低的三个字节分别是nh、nw、n
l
;指数位是e。则编码算法可由下式表述:
[0031][0032]
式中,s的取值是0或1。如符号为正,则s=0;如符号为负,则s=1。
[0033]
在智能仪器的数据交互系统中,下位机将测量读数编码后发送给上位机。上位机接收到字符串形式的数据编码后进行解码即得到浮点数形式的测量读数。解码方法是编码方法的逆过程。
[0034]
接上例,假设编码为0x3e 0x54 0x6a 0x82,解码过程如下:
[0035]
1、首先判断第一个码元是否大于150,是则符号位为负,否则符号位为正。记符号位为y1,其取值为
±
1。取值方法如下式:
[0036][0037]
2、按以下公式计算浮点数的尾数:
[0038][0039]
式中,y2是解码后的尾数位,x[0]、x[1]、x[2]分别是编码后第一、第二、第三个码元。
[0040]
3、将编码结果的第四个码元减去128,得到指数。指数记为y3,计算方法如下:
[0041]
y3=x[3]-128
[0042]
式中,x[3]是第四个码元。
[0043]
4、将尾数、指数、符号数相乘后,得到最终解码结果。计算方法如下:
[0044]
y4=y1*y2*y3[0045]
代入编码0x 3e 0x54 0x6a 0x82,解码后得到浮点数-12.3456。
[0046]
以上说明书中描述的只是本发明的具体实施方式,各种举例说明不对本发明的实质内容构成限制,所属技术领域的普通技术人员在阅读了说明书后可以对以前所述的具体实施方式做修改或变形,而不背离发明的实质和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1