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

在数据记录器的表中存储了测量值和其他数据之后,如何访问这些数据以在CRBasic程序中执行操作呢?您可以从哪里获得访问数据的全部权限?本文将解释如何使用特殊的CRBasic语法来简化程序的编码,以便访问数据和执行各种操作。
通常,为Campbell Scientific数据记录器编写的程序使用一个或多个数据表来存储测量、计算和变量状态。数据表中的行称为记录,列称为字段。

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

当数据存储在表中后,你可以使用特殊的CRBasic语法来访问它,该语法遵循以下形式:表名。字段名.该语法访问存储在特定表的特定字段中的值。您还可以使用字段名索引附加语法,并使用TableName格式返回记录。字段名(FieldName索引,记录返回).
笔记:当Records Back = 1时,您正在访问最近的记录。
此示例显示了如何使用CRBasic语法来获取一些数据(昨天的最大空气温度),该数据存储在数据表中,并将其写入a公共变量命名yesterdaymaxairtemp..为此,请使用语法yesterdaymaxairtemp =Daily.airtemp_max.,其中Daily是TableName, AirTemp_Max是FieldName。
你的DataTable()可能是这样的:

此外,要计算过去七天平均气温的变化,你的表达式应该是这样的:
AirTempDiff =每日。airtemp_avg(1,1) -每日。airtemp_avg (1,7)
您可以在CRBasic Editor中找到更多关于其他数据表语法的信息,以及编程示例。按照以下步骤访问该资源:


我希望这篇文章有助于您发现全权访问数据。通过使用CRBasic语法来简化您的编码,您应该可以轻松访问和使用存储的数据。如果您有任何疑问或意见,请随时在下面发布。
评论
爱好者|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找到当地的坎贝尔科学公司。
请登录或注册置评。