首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARINC429 Word结构

ARINC429 Word结构
EN

Stack Overflow用户
提问于 2015-03-25 00:46:19
回答 1查看 697关注 0票数 1

作为前言,我使用了python3和bitstring库。

因此,Arinc429字是32位数据字。

位1-8用于存储标签。例如,我希望单词设置纬度,根据标签docs,将纬度设置为八进制

代码语言:javascript
复制
041

我可以通过执行以下操作在python中对此进行建模:

代码语言:javascript
复制
label = BitArray(oct='041')
print(label.bin)
>> 000100001

接下来的两位可以用来发送源,或者通过给出设备ID来扩展标签。

代码语言:javascript
复制
002

因此,我再次将其添加到一个新的BitArray对象中,并将其转换为二进制

代码语言:javascript
复制
>> 000000010

接下来是从第11位到第29位的数据字段。假设我想将纬度设置为伦敦的一般区域(51.5072)。这就是我被卡住的地方,因为浮点数只能是32/64位长。

这个词还有另外两个部分,但在我讲到那里之前,我只是在想,我是否沿着正确的轨道前进,或者偏离了你如何构建这样一个词的方式?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-03-27 18:10:15

我认为您在正确的轨道上,但您需要知道或决定您的数据字段的格式。

如果您想要表示浮点数的19位在某个地方被记录为浮点数,那么看看转换是如何完成的(因为这根本不是浮点数的标准位数)。如果这些位是自由格式的,并且您可以选择编码和解码,那么只需选择适当的。

有一个16位浮点数的标准,偶尔会用到,但如果你只想表示一个纬度,我会选择更简单的东西。因为它只能从0到360,所以只需将其缩放为从0到2^19的整数并存储该整数即可。

所以51.5072变成(51.5072/360*(2**19)) = 75012

然后将其存储为无符号整数

代码语言:javascript
复制
> latitude = BitArray(uint=75012, length=19)

这为您提供了大约0.0007度的分辨率,这是您所能希望的最好分辨率。要转换回原样,请执行以下操作:

代码语言:javascript
复制
> latitude.uint*360.0/2**19
51.50665283203125
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29238346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档