串行输出和数据表 _Campbellsci论坛问答

你好
提前,对不起我的英语。。。
我正在使用CR1000数据记录器来记录火山的电位和温度数据。我们有3个多路转换器(两个用于电势,一个用于温度)。
我正在尝试使CR1000与RS232端口通信,以便从该端口收集数据。

我试图发送的数据是3个数据表,对应于从3个多路复用器获取的数据。但我找不到在CRbasic的帮助下使用的语法,而且我对CRbasic一无所知。。。

串行输出和数据表
_Campbellsci论坛问答


我在.CR1程序中添加了如下命令,你能告诉我它是否正确吗?

串行打开(COMRS2329600,010000)
(...)
串行输出(COMRS232、A、B、C、0,0100)

其中A、B和C是较早在.CR1文件中定义的数据表名称

如果您需要更多信息或查看整个.CR1文件,请告诉我
谢谢

新对话如下:

你好,斯蒂芬,

您是否有Loggernet或CR400软件,可以直接与记录仪RS232端口通话并检索数据?这通常是检索数据的方式,不必在程序中设置串行端口。

顺致敬意,
Dave(岛民)

新对话如下:

谢谢你的回复!

我们在CR1000上安装了一个紧凑型闪存模块,我们通常使用CP卡下载数据(只是为了尝试一下,我们还将现场计算机连接到RS232端口,并使用PC400软件下载数据,没有问题)。
事实上,我们需要在RS232端口上发送数据,因为我们想在数据记录器上安装远程传输系统(这是因为我们的CR1000离我们的实验室很远,我们每月只能直接从数据记录器下载一次数据)。我的团队通常在我们网络的其他站点上使用RS232端口进行这种传输。很抱歉在我之前的帖子中没有对此进行解释。

新对话如下:

好的,现在就明白了。
给我一点时间,我会在这里发布解决方案:-)

新对话如下:

非常感谢Dave!
如果您需要查看.CR1文件,请告诉我。。。

顺致敬意,

斯特凡尼

新对话如下:

斯蒂芬,

您可以使用GetRecord将数据从输出表检索回记录器,以便在RS232端口上传输。以下示例记录一分钟的平均面板温度,检查输出表是否已写入,然后获取记录并发送。

祝你好运
戴夫

'CR1000系列数据记录器
'节目作者:IslandMan

'声明变量
公共树面板温度
用于GetRecord结果的Public OutString$As String*50'字符串

'表1数据表
数据表(表1,1,-1)
DataInterval(0,1,Min,10)'每分钟存储数据
平均值(1,Tref,FP2,假)
床头柜

'主程序
开始进度

打开串行端口
串行打开(COMRS2329600,010000)

扫描(1,秒,3.0)
面板温度(TRef,250)

'如果表有输出,则获取最新记录
如果表1.输出(1,1),则
GetRecord(OutString$,表1,1)
'通过串行端口发送
串行输出(COMRS232,输出字符串$,“”,0100)
结束如果

调用表表1

下一次扫描
结束程序

新对话如下:

另请参阅CRBasic帮助文件中的SendData说明和示例。CR1000、CR3000和CR800系列支持此指令。

Dana公司

新对话如下:

关于SerialOpen的注意事项。。。使用此说明:
串行打开(COMRS2329600,010000)
将配置数据记录器的RS-232端口以9000波特进行通信。

如果/当您使用软件(LoggerNet、PC400等)连接到RS-232端口上的数据记录器时,您需要匹配波特率。这是通过设置屏幕中LoggerNet对PakBus端口的设置或PC400的数据记录器设置来完成的。

珍妮特

新对话如下:

斯特凡尼,

另一个注意事项:
请确保OutString$长度足够长,可以容纳数据表中的字符数。

如果您仍然不确定,请将程序发送至n2da@gmail.com我来找你。

当做
戴夫

新对话如下:

感谢所有的回复!!!非常好的论坛!

Dana公司
>>>;在尝试了Dave提出的解决方案后,我将看看这个函数并尝试它。

珍妮特
>>>;9600是我所在组所有工作站使用的波特率,没问题。

戴夫
>>>;非常感谢,我现在试着用你的解决方案完成这个程序。然而,我对外字符串的大小有一个问题:我无法访问此参数。当我通过CP卡从工作站下载数据时,程序(PC400)不允许我看到字符串,它会自动转换为.dat文件。
从文件中,我知道该数据包由以下部分组成:
1字节用于数据包的开头
标头为8个字节
消息的x字节
2个字节用于签名无效器
标记数据包结尾的1个字节

我试图找到“0”中的字节数;消息“;尽快给你一些消息。
:天

斯蒂芬

新对话如下:

斯蒂芬,

.dat文件中的每一行都将是GetRecord中的字符串长度。

例如:
";2008-09-09 09:00:00”;,0,4.337,206.9,18.74,73.65,88.1,69.94,1010.434,14.94
这个记录是76个字符,包括末尾的CR/LF。

在程序中,为了安全起见,我会在长度上加一些。
对于上述数据,我会将OutString$设置为100。

公共输出字符串$作为字符串*100

希望这能有所帮助,
戴夫

新对话如下:

好的,我理解。问题是我有3个表,我不知道它在字符串中是如何分隔的。最重要的是,在.dat文件中,在不同的行上,我可以有不同的字符串长度,因为值的变化如下:我可以在下一个样本中有5.678的值或123.34的值,第一个样本是5个字符,第二个样本是6个字符。


因此,我看到了三种解决方案:

1-是否有命令要说“;取所有数据“;而不是精确计算外字符串的字符数?在帮助中,我读到定义大小是可选的。如果我写会发生什么 公共输出字符串$As字符串 ?

2-你说我可以在外字符串的长度定义中添加一些。也许这是一个愚蠢的问题,但是。。。为什么我不能加很多来确定?如果我将其定义为 公共输出字符串$As字符串*800 如果现实中只有400个字符?


3-最后的解决方案:
在尝试通过RS232端口发送之前,是否可以获得字符串这一部分的大小?
如果我能获得大小并将相应的数字放入一个名为a的变量中,那么我能写吗 公共输出字符串$As字符串*A
我希望我不要太含糊。。。

再来一次,非常感谢您抽出时间!

斯蒂芬

新对话如下:

斯蒂芬,

如果您有3个不同的表,则必须对每个表使用GetRecord才能发送它们。

所有表格是同时创建的,还是平均15分钟、平均30分钟和平均60分钟?

如果你不告诉变量OutString$要分配多少,我认为它默认为一个非常小的数字,并且不是所有的表都能容纳它。

您只能在将字符串读回内存后才能知道字符串的长度,例如:
OutLength=长度(OutString$)
由于您必须在程序运行之前声明字符串的长度,因此不能在实际运行之后使用此方法来调整变量OutString$。

使OutString$作为String*1000工作,它只是在记录器中使用更多的内存。如果你没有一个很大的程序,那应该没问题。分配得太多总比分配得不够好:-)

希望这能有所帮助。

戴夫

新对话如下:

所有表格都是同时创建的:我们每5分钟对传感器进行一次采样。我们有3张桌子:
表1:25温度记录
表2:32个电位记录
表3:32个其他电位记录
(电位来自两种不同类型的传感器)

好的,现在我想我已经具备了完成这个项目所需的一切。我们下次去车站时会试试。请确保我会保持联系,将结果告知您。
我将您的电子邮件地址添加到我的联系人中!
非常感谢Dave!

斯蒂芬

新对话如下:

因此,我看到了三种解决方案:

1-是否有命令要说“;取所有数据“;而不是精确计算外字符串的字符数?在帮助中,我读到定义大小是可选的。如果我将Public OutString$As String写入,会发生什么?

我仍然建议您在实现解决方案之前查看SendData(ComPort、NeighborAddr、PakBusAddr、DataTable)。与使用GetRecord相比,有几个优点:

*不太复杂的编程(IMO)

*您不必从数据表中获取记录并将其存储到字符串中(因此,您不必担心Outstring的大小:)

*如果失败,您不必处理重新发送代码中的字符串。当LoggerNet获得SendData记录时,它会查找丢失的记录,并自动收集“;孔”;。

2-你说我可以在外字符串的长度定义中添加一些。也许这是一个愚蠢的问题,但是。。。为什么我不能加很多来确定?如果我将其定义为Public OutString$as String*800,而实际上它只有400个字符,会发生什么?

如果未指定“大小”,则字符串的默认大小为16。定义的字符串越大,在编译时分配的内存就越多。这最终会影响所有变量的可用内存(内存是有限的)。对于一个小程序来说,这并不是什么大不了的事情,但如果你有一个包含许多变量的大程序,这可能会成为一个问题。

当做
Dana公司

新对话如下:

这听起来不错,但这个命令有一些我不知道的地方:
CR1000将数据发送到RS232,我们将通过无线电调制解调器将数据远程传输到实验室的计算机。这台计算机不仅专用于CR1000,因此,如果可以的话,我们希望避免在其上安装Loggernet或PC400。我们通常使用Matlab进行所有数据处理。

我开始使用CRBasic。。。两天前。。。我不知道该写什么 邻居地址 数据包总线加法器 如果我们不使用Loggernet或PC400来接收数据。有什么特别的吗 邻居地址 数据包总线加法器 使用Matlab时的代码?

斯蒂芬

*最后更新者:Stephen于2008年9月10日上午10:14*

新对话如下:

这台计算机不仅专用于CR1000,因此,如果可以的话,我们希望避免在上面安装Loggernet或PC400。我们通常使用Matlab来处理所有数据。

那么SendData将无法工作。我没有考虑这个要求。

当做

Dana公司

新对话如下:

很高兴知道Loggernet和PC400也存在此解决方案。谢谢

斯特凡尼

分享到:

原文链接:,转发请注明来源!
海洋仪器网 仪器使用 串行输出和数据表 _Campbellsci论坛问答
「串行输出和数据表 _Campbellsci论坛问答」评论列表

发表评论