在CR1000上获取表格编号的正确方法 _Campbellsci论坛问答

大家好!

我目前正在编写一个Python接口,用于与CR 1000(可能还有其他)数据记录器进行通信。到目前为止,我已经实现了来自 BMP5透明命令手册 它们运行良好。

在CR1000上获取表格编号的正确方法
_Campbellsci论坛问答

这是一个手册没有回答的问题。如果您知道表的名称并不知何故知道(或猜测)匹配的表号,那么读取表是相当容易的。但是,从CR1000中自动获取表格编号和名称的正确方法是什么?

我在 BMP5透明命令手册 它使用一个文件上传请求;CPU:Def.tdf";以获取表定义。此命令返回错误代码0xE(文件不可访问)。手册文本要求您请求一个名为“”的文件;。TDF”;。但是,此请求不会返回任何结果。

如果有任何关于如何解决这个问题的提示,我将不胜感激。

致以亲切的问候

干细胞生长因子

*最后更新者:dgf于2009年6月22日上午11:39*

新对话如下:

恐怕该手册有些过时了,因为最近的版本(从CR1000的15开始)引入了允许客户端请求特定表的定义的功能。如果您想要完整的表定义集,则需要请求“”;。TDF”;文件(请注意,在此期间之前没有设备名称或文件名。

新对话如下:

谢谢你的解释。我现在可以通过请求“”来检索表定义;。TDF”;文件

之前它不起作用的原因有点奇怪:如果我为";发送一个文件上传命令;。TDF”;其中Swath>;0x5B4(1460),记录器没有响应。较小的值可以正常工作。在常规文件中,即使是0xFFFF也可以用于Swath。


>;最近的版本(CR1000从15开始)引入了
>;允许客户端请求的定义的功能
>;特定表格。

这确实是一个不错的功能,但对表号并没有真正的帮助。你仍然需要完整的“;。TDF”;表定义来获取此信息。不幸的是,所有的命令都依赖于表编号,但这些编号从未明确提供。

新对话如下:

根据我为GetDataRecord指令所掌握的一些信息,数据表按照程序中出现的顺序进行编号。

*这是基于GetDataRecord的。*我还没有测试过这一点,看看它在您的场景中是否成立,也没有测试公共和状态表如何影响这一点。

只是把它当作一件值得思考的事情。当然,即使这确实成立,也需要您以某种方式了解数据记录器中的表结构。

当做

Dana公司

新对话如下:

尊敬的Dana:,

谢谢你的回复。似乎获取表号的唯一通用方法是通过请求“”来下载完整的表定义列表;。TDF”;文件通过“;一般的“;我的意思是,你没有其他方法可以知道表的编号,例如从源代码中猜出来。

整个问题是一个母鸡和鸡蛋的问题:

-您需要一个表号和表签名来请求数据

-如果只知道表号,则无法检索
表定义->;没有表签名->;没有数据请求!

-如果只知道表名,就可以检索该表
定义(->;表签名)。然而,你没有得到桌子
这样编号->;没有数据请求!

因此,无论您做什么,除了检索完整的表定义列表之外,别无选择。因此,按名称检索单个表定义的有用功能(“TableXX.TDF”)变得毫无用处。

然而,我有一个解决这个问题的建议:状态表在DataTableName字段中有一个表名列表。如果它包含所有表的名称;状态“;以及“;公开的“-按照正确的顺序,可以从中检索表名和相应的表号。有了这些信息,就很容易得到表的定义。

致以亲切的问候

迪特里希

新对话如下:

Getdatarecord表的编号是Dana在程序中从上到下所说的。状态表和公共表不在其中。

然而,我认为这种编号与通信级别使用的编号不同,在通信级别中,必须考虑状态表和公共表以及隐藏表。

多年来,从记录器获取表完整表定义的问题一直是一个小问题。在Loggernet的下一个版本中,我们通过使用CRBasic编辑器在PC上生成TDF文件,Loggernet服务器读取该文件以获得其所需的大部分信息,从而在一定程度上改进了这一点。然后,服务器只进行快速验证,以确保基于PC的TDF文件与记录器中的文件相匹配。

恐怕我无法告诉您是否以及何时将部分或全部功能添加到BMP5开发套件中。然而,一旦CR基本编辑器发布,您将能够在自己的代码中生成和读取这些文件,尽管它们是二进制文件,解释并不那么容易,但应该与解释检索到的TDF文件没有太大区别。

新对话如下:

从CR1000 OS版本15开始,有一种机制可用,客户端可以通过该机制从数据记录器(.TDFS)请求表定义摘要文件。如果从较旧的操作系统请求该文件,数据记录器将使用数据记录器的标准.TDF进行响应。以下是.TDFS格式的EBNF语法:


.tdfs:=fmt版本os版本os sig序列号
加电程序编译状态程序名称
prog-sig编译时编译结果模型
{表摘要}。
fmt版本:=字节;对于.TDFS,始终为0x10
操作系统版本:=asciiz。
os信号:=uint2。
序列号:=asciiz。
加电程序:=asciiz。
编译状态:=字节。
程序名称:=asciiz。
prog-sig:=uint2。
编译时:=nsec。
编译结果:=asciiz。
型号:=asciiz。
表摘要:=表名称[表大小表sig]。
表名:=asciiz;空名称终止列表
表格大小:=uint4。
表sig:=uint2。
表格术语:=字节;零以终止列表

您正在使用的开发工具包中没有记录这一点,因为该文档在操作系统版本15发布之前就没有更新过。

分享到:

原文链接:,转发请注明来源!
海洋仪器网 仪器使用 在CR1000上获取表格编号的正确方法 _Campbellsci论坛问答
「在CR1000上获取表格编号的正确方法 _Campbellsci论坛问答」评论列表

发表评论