您好,我是CRBasic的新手。
我正试图将收集到的大气压力值表写入连接到数据记录器的CF卡读取器中。它是一张2GB的卡,因此使用CardOut(0,-1)指令会创建一个大得令人绝望的表。我想更改记录大小以存储大约1个月的数据。。每小时拍摄两次,共有1440条记录。。卡片输出(1440)。这是正确的指示吗?还是比这更复杂?
此外,如果我想向表中添加更多数据,例如其他传感器信息,如温度,1440是否指的是行数,而不是列数?
如有任何反馈,我们将不胜感激。
非常感谢。
新对话如下:
交流电,
CardOut(01440)将写入最后1440个数据“;行”;到卡片上的一张桌子。
新对话如下:
嗨,Sam
谢谢你的回复,欢迎你。我还有另一个疑问。自从发布后,我在CRBasic帮助菜单的帮助下编写了一个小程序
公用临时(_T)
公众压力
单位压力=毫巴
数据表(通量,真值,-1)
数据间隔(0,2,最小值,0)
卡片输出(0,2)
样品(1,压力,IEEE4)
床头柜
开始进度
扫描(1,秒,3.0)
‘CS100气压传感器测量BP_:
电压S(P_temp,1,mV5000,1,0250,0.2600.0)
如果IfTime(1,2,min),则WriteIO(&B10,&B10)
如果(IfTime(0,2,min))那么
压力=P_temp
写入IO(&b10,&b0)
结束如果
呼叫表流量
下一次扫描
结束程序
我惊讶地发现,尽管我在查看CF卡上的数据时写了CardOut(0,2),但有两行以上的数据。你知道为什么吗?
答案很长,需要一些关于数据记录器在卡存储器中分配存储的方式的细节。数据记录器使用一种有点复杂的格式,即TOB3,将记录存储在卡存储器中。这种格式将文件划分为多个段,称为主框架,用于存储表数据。这种格式的目的是允许数据记录器“;压缩“;仅通过在帧边界上写入记录的时间戳来写入数据。CardOut()指令中的记录数参数成为编译器的输入之一,因为它确定了为表文件分配的这些主要帧的数量。
对于在“0”下运行的数据记录器程序;正常的“;在这种情况下(没有断电事件,没有写入文件标记,也没有跳过扫描),具有连续时间戳序列的间隔驱动的数据记录可以非常有效地并排放置在这些主要帧中。然而,如果某些事件(如跳过扫描或断电事件)导致序列记录时间戳中断,则数据记录器通过在保存新的基本时间戳的主帧内创建子结构(小帧)进行补偿。自然地,这个“;小框架”;耗尽原本可以用来存储记录数据的存储空间。
我想在这个冗长的描述中证明的是,数据记录器实际能够存储的记录数量存在一定程度的可变性。数据记录器编译器在考虑CardOut()指令中指定的记录数时,尝试应用“;软糖因子“;它可以用来补偿跳过的扫描,并且仍然能够将指定的数量作为记录的最小数量。这种篡改的结果是,在没有跳过扫描等情况下,表文件的实际容量将略大于指定的容量。