作为前言,我使用了python3和bitstring库。
因此,Arinc429字是32位数据字。
位1-8用于存储标签。例如,我希望单词设置纬度,根据标签docs,将纬度设置为八进制
041我可以通过执行以下操作在python中对此进行建模:
label = BitArray(oct='041')
print(label.bin)
>> 000100001接下来的两位可以用来发送源,或者通过给出设备ID来扩展标签。
002因此,我再次将其添加到一个新的BitArray对象中,并将其转换为二进制
>> 000000010接下来是从第11位到第29位的数据字段。假设我想将纬度设置为伦敦的一般区域(51.5072)。这就是我被卡住的地方,因为浮点数只能是32/64位长。
这个词还有另外两个部分,但在我讲到那里之前,我只是在想,我是否沿着正确的轨道前进,或者偏离了你如何构建这样一个词的方式?
谢谢。
发布于 2015-03-27 18:10:15
我认为您在正确的轨道上,但您需要知道或决定您的数据字段的格式。
如果您想要表示浮点数的19位在某个地方被记录为浮点数,那么看看转换是如何完成的(因为这根本不是浮点数的标准位数)。如果这些位是自由格式的,并且您可以选择编码和解码,那么只需选择适当的。
有一个16位浮点数的标准,偶尔会用到,但如果你只想表示一个纬度,我会选择更简单的东西。因为它只能从0到360,所以只需将其缩放为从0到2^19的整数并存储该整数即可。
所以51.5072变成(51.5072/360*(2**19)) = 75012
然后将其存储为无符号整数
> latitude = BitArray(uint=75012, length=19)这为您提供了大约0.0007度的分辨率,这是您所能希望的最好分辨率。要转换回原样,请执行以下操作:
> latitude.uint*360.0/2**19
51.50665283203125https://stackoverflow.com/questions/29238346
复制相似问题