如何以编程方式访问存储的数据值

经过珍妮特·阿尔伯斯|更新日期:01/13/2016 |评论:16

标签

CRBasic

搜索博客


订阅博客

在将新的博客文章发布符合您感兴趣的领域时,请设置您的首选项以接收电子邮件通知。


区域/应用程序

产品类别

活动

公司/新闻

请输入您的电子邮件地址:



显示一篇文章

你有想了解更多的话题吗?让我们知道。请尽量说得具体些。

让这个字段为空

所有访问通过

在数据记录器的表中存储了测量值和其他数据之后,如何访问这些数据以在CRBasic程序中执行操作呢?您可以从哪里获得访问数据的全部权限?本文将解释如何使用特殊的CRBasic语法来简化程序的编码,以便访问数据和执行各种操作。

数据表结构()

通常,为Campbell Scientific数据记录器编写的程序使用一个或多个数据表来存储测量、计算和变量状态。数据表中的行称为记录,列称为字段。

带有字段名和记录的表

存储数据记录的表定义DataTable()/最终目标指令,以及由输出处理的指令。下面是这类定义的一个例子:

数据表定义

CRBasic语法

当数据存储在表中后,你可以使用特殊的CRBasic语法来访问它,该语法遵循以下形式:表名。字段名.该语法访问存储在特定表的特定字段中的值。您还可以使用字段名索引附加语法,并使用TableName格式返回记录。字段名(FieldName索引,记录返回)

笔记:当Records Back = 1时,您正在访问最近的记录。

例子

此示例显示了如何使用CRBasic语法来获取一些数据(昨天的最大空气温度),该数据存储在数据表中,并将其写入a公共变量命名yesterdaymaxairtemp..为此,请使用语法yesterdaymaxairtemp =Daily.airtemp_max.,其中Daily是TableName, AirTemp_Max是FieldName。

你的DataTable()可能是这样的:

DataTable()计划代码

此外,要计算过去七天平均气温的变化,你的表达式应该是这样的:

AirTempDiff =每日。airtemp_avg(1,1) -每日。airtemp_avg (1,7)

更多信息

您可以在CRBasic Editor中找到更多关于其他数据表语法的信息,以及编程示例。按照以下步骤访问该资源:

  1. 在CRBasic编辑器中,单击帮助选项在菜单栏的顶部。
  2. 在下拉菜单中选择CRBasic编辑的帮助

    CRBasic编辑的帮助

  3. 在左侧窗格中,单击指数选项卡,并输入DataTable Access.在关键字框中。
  4. 点击概述以访问语法的完整列表。

    数据表访问语法选项

  5. 您可以单击每个语法选项以了解更多信息。
    1. 单击一个选项后,将打开一个窗口。
    2. 在窗口中,单击该窗口例子链接。
    3. 使用使用该语法的示例程序打开一个较小的窗口。

我希望这篇文章有助于您发现全权访问数据。通过使用CRBasic语法来简化您的编码,您应该可以轻松访问和使用存储的数据。如果您有任何疑问或意见,请随时在下面发布。


分享这篇文章


关于作者

珍妮特·阿尔伯斯Janet Albers拥有技术沟通经理的头衔;她办公室门口的牌子上写着"教练"她将分享技巧,简化概念,并指导你成功的项目。她在坎贝尔科学公司工作的时间万博matex网页登录比CR1000长,但没有CR10X长。下班后,珍妮特喜欢和她的儿子和狗在户外活动。

查看作者的所有文章。


评论

爱好者|01/13/2016在10:43 AM

需要注意的一个微妙但重要的区别是,FieldName并不一定等同于变量名,这在上面的示例中有说明。程序员应该认识到是否“_Max”,“_Min”,“_Avg”或其他附件是必要的,以完全描述FieldName。

Curt_Ingram|2016年1月15日晚上10:03

我非常喜欢你发的博客,珍妮特!坚持下去:)

JRA.|01/18/2016在08:17 AM

右IRA。变量名称通常是字段名称的一部分,但它们不是(通常)相同的。

谢谢柯特!如果您对其他主题有建议,请告诉我。

Curt_Ingram|02/22/2016 08:30 PM

珍妮特,我想要一篇关于如何“正确地”根据每月或每年的变化来规划事件的文章。例如,我想让我的数据记录器跟上每月的kWhr使用量。为了让它现在对我有用,我必须记住每个月重置为0(我从来没有这样做过):)

JRA.|02/23/2016在08:53 AM

嗨柯特!从OS 28开始,timeIntoInterval()和datainerval()指令有一个月选项。您的程序中的一行,你的CallTable(),像这样:

如果TimeIntoInterval(0, 1,我的)那么Total_kWhr = 0

应该做诀窍。

MONTH选项与我们的其他时间间隔有点不同。当使用MONTH作为间隔时,TIME INTO参数的单位是秒。这里有一个到变更日志描述的链接//m.ocbeachreo.com/revisions?dl=103&sval=month

如果您使用的是旧的操作系统该论坛中的技术帖子://m.ocbeachreo.com/forum?forum=1&l=thread&tid=726使用实时()完成同样的事情。

我希望这能有所帮助。

如果你还有其他问题,请告诉我。

Curt_Ingram|02/29/2016上午09:01

耶!谢谢珍妮特!

Minida28.|02/27/2020下午02:44

嗨,珍妮,

我经常使用来自串行或modbus的数据。通常情况下,我收到的数据已经有它们自己的“真实”时间戳。如果我调用数据表来存储这些数据,我最终会得到一个时间戳不准确的数据表。

有没有办法使我呼叫数据表来存储读数,我可以指示DataTable使用与数据一起使用的“真实”时间戳,而不是使用扫描中的时间戳?

谢谢Janet,非常感谢你的启蒙。

JRA.|02/27/2020在PM 03:36

您的数据表将始终存储时间戳和记录编号。当使用TableFile()指令时,您可以对数据文件有更多的控制。https://help.campbellsci.com/crbasic/cr1000x/#instructions/tablefile.htm.看看,和测试,可用的选项。从选项10开始(toa5,标题,record#)。

或者,从LoggerNet Connect窗口可以使用自定义收集。在格式选项区域清除“包含时间戳”复选框。

我希望这能有所帮助。

Makada|05/05/2020 03:46 AM

嗨,珍妮,

我可以问你以下情况吗?:

当我使用“tableName.fieldName”表达式时,例如“剪影”xpape_avg_ws_kph = table1.ws_kph_s_wvt(1,1),并具有来自它的公共数据,“public taple_avg_ws_kph”,那么表1“ws_kph_s_wvt”的实际值是相同的作为公共分钟_avg_ws_kph。到目前为止这么好。

但是一旦我从表1中的“公共分钟_avg_ws_kph”中的示例数据,“sample(1,pape_avg_ws_kph,ieee4,false)”,表1中的样本数据的输出已故已有一分钟(表1是一分钟表格)与来自table1.ws_kph_s_wvt的相同数据相比...

亲切的问候,

马克

JRA.|05/05/2020 12:20 PM

谢谢你的问号。这是在我们的用户论坛上回答//m.ocbeachreo.com/forum?forum=1&l=thread&tid=16306

jlomas.|2020年7月14日上午10:12

你好,珍妮特,我有一个非常基本的问题。我有多个传感器记录数据到一个单一的数据表。如果我修改这个表,例如。增加更多的传感器,我会丢失一些数据吗?更普遍的问题是:创建datatable时应该使用哪些标准?所有需要相同记录周期的东西应该放在一起吗?我知道DataInterval可以帮助我节省与时间戳相关的空间,但我担心修改datatable时的“安全”。提前谢谢。

JRA.|07/14/2020在上午10:47

JLOMAS - 始终收集数据在更改程序之前。您将在数据记录器上丢失数据,但不会丢失已复制到计算机的数据。

存储数据的最佳方法取决于您将如何使用它。如果它让您更容易完成工作以将所有内容存储在一个表中,那么您应该做的同样的记录周期。如果它使您更容易完成工作以在表中拥有一个类型(例如所有温度)的所有数据,那么您可以执行此操作;并将所有,例如水位,在另一个表中。

这有帮助吗?

巴塞尔因车祸|2021年2月27日上午06:28

嗨. .我是巴塞尔协议. .我可以打开一个程序,已经存在的数据记录器RC1000由Loggernet ..程序是后来的CR1 ..我可以修改参数。示例:将风速的测量单位由km修改为m。

谢谢你!

JRA.|2021年3月1日07:41 AM

基于 - 是的,你应该使用CRBasic编辑器(包含在loggernet)中更改程序。有关更多信息,请参阅此教程.要更改测量单元,您可能需要在测量指令中更改乘法器和偏移量。另请参阅该传感器的手册。

scg8|04/27/2021在07:20 AM

你好,

非常感谢博客。我想问一下,在我的情况下,我有一个连接到CR1000x的TDR200,我需要通过RS232发送数据,但是,它是更多或更少10,000个字段的数据帧,它到达不完整。你知道如何改善这个问题吗?

Public OutStringCable1$ As String * 65535
***
TDR代码和DataTables
***
GetRecord(美元OutStringCable1 Cable_1 1)
'将其发送出串口
SerialOut(Comrs232,Outstringcable1 $,“,0,10000)

JRA.|05/10/2021上午09:04

SCG8 - 谢谢你的问题。为您提供最佳技术支持,请访问//m.ocbeachreo.com/contact#dir找到当地的坎贝尔科学公司。

登录或注册置评。

我们在社交媒体上很活跃!
通过以下平台跟踪我们的最新更新,随时了解我们的最新更新:

Baidu