使用串行通信记录Gill Windmaster Pro _Campbellsci论坛问答

你好

我目前正在尝试使用串行流将Gill Windmaster Pro Sonic风速计的数据记录到CR3000。我知道Gill正在输出一个恒定的串行流,因为我可以在超级终端中查看该流。

使用串行通信记录Gill Windmaster Pro
_Campbellsci论坛问答

我将Gill的发送和接收线连接到Com3的Tx/Rx端口,我已经编写了以下程序来从Gill检索数据:


'-------------------------------------------
'声明Windmaster变量
公共原始数据字符串*52
公共字节以浮点形式返回
'rmc变量
公用查找为字符串(u_W)
公用字符串形式(_v)
公用w_wind为字符串
公共Ts为字符串

数据表(gill,True,-1)
数据间隔(0100,毫秒,10)
示例(1,u_wind,字符串)
示例(1,v_vind,字符串)
示例(1,w_wind,字符串)
样本(1,Ts,字符串)
床头柜
'主程序
开始进度
SerialOpen(Com319200,0,0500)'打开com端口
扫描(100,毫秒,0,0)
串行输入记录(Com3,原始数据,2,0,3,字节返回,01)
'分析Gill数据
u_wind=中间(原始数据,4,8)
v_vind=中间(原始数据,13,8)
w_wind=中间(原始数据,22,7)
Ts=中间(原始数据,40,7)
CallTable鳃
下一次扫描
结束程序
'-------------------------------------

不幸的是,我的CR3000上没有显示任何数据!字符串变量保持为空,一个数字变量(BytesReturned)位于0。

有人知道我做错了什么吗?

其他一些注意事项:
-我确信波特率是正确的
-我不知道如何计算SerialOpen命令的最后一个参数需要多少字节
-Gill手册指出,输出ASCII字符串的起始字符和结束字符分别为2和3,所以这就是我在SerialInRecord参数中放置数字的地方。

任何帮助都将不胜感激!

谢谢
-布伦特。

新对话如下:

嗨,布伦特,

几周前,我也不得不从一位鳃管测风仪那里读取数据。
以较慢的速率和不同的格式,我让它在CR1000上工作(通过设备配置工具设置ComPort)。
以下是一些我无法再测试的代码,但我认为它应该经过一些调整(baudrate、com端口、定时?)。

'//////////////////////////////////////////////////
Const STX=CHR(2)'ASCII文本开头
Const ETX=CHR(3)'ASCII文本结尾
构造USA_PORT=组件4
Const usa_string_expected_length=39'重要信息:GILL发送具有恒定长度的字符串。检查格式

公用公用事业_公用事业(5)作为浮动
别名usa_token(1)=usa_Dir
别名usa_token(2)=美国速度
别名usa_token(3)=usa_W
别名usa_token(4)=usa_Temp
别名usa_token(5)=美国状态

公共用途字符串*50
公用事业_总成功率为长期
公用事业失败时间为长
公用usa_num_bytes_in_buffer为长

将usa_buffer标注为字符串*100
以布尔值标注成功

'///检查缓冲区>;读取直到STX>;读取直到ETX>;检查长度>;标记化>;检查NAN
函数usa_read_data_from_gill()为布尔值

Dim USA_有效为布尔值
调暗启动为长
变暗为长
调暗i为长

USA_Valid=错误
usa_ buffer=“usa_";
usa_num_bytes_in_buffer=SerialInChk(usa_PORT)'是否收到任何字符?

如果usa_num_bytes_in_buffer>;0然后
SerialIn(usa_buffer,usa_PORT,50,STX,200)'读取缓冲区直到STX
SerialIn(usa_buffer,usa_PORT,50,ETX,200)'读取直到ETX>;完整字符串
结束如果
USA_Valid=IIF(Len(USA_buffer)=USA_string_expected_length,true,false)
如果USA_Valid然后
iStart=InStr(1,usa_buffer,“Q”,2)+2
iEnd=InStr(1,usa_buffer,ETX,2)-1
usa_string=中间(usa_buffer、iStart、iEnd iStart)
分割tr(usa_token(),usa_string,“&”;,5,0)
对于i=1至5'检查值
如果usa_token(i)=NAN或usa_toke(i)>;998然后
USA_Valid=false'如果一个值有腥味,则丢弃所有值
结束如果
下一个i
Else'标记为无效
对于i=1至5步骤1
usa_token(i)=-1
下一个i
结束如果
返回USA_有效
结束函数

'///
数据表(Gill_Table,11000)
数据间隔(0,1,秒,10)
样品(5,usa_token(1),FP2)
床头柜

'///
开始进度
SerialOpen(USA_PORT,9600,0100512)'保持打开状态
扫描(1,秒,0,0)
成功=usa_read_data_from_gill()
如果成功,那么
usa_num_success=usa_num_success+1
其他的
usa_num_failure=usa_num_failure+1
结束如果

呼叫表Gill_Table
下一次扫描
结束程序

'//////////////////////////////////////////////////

对STX/ETX的双重读取;Q”;现在,当我看到这两个字符串缓冲区时,它看起来有点笨拙,但这是在接近工作的最终代码时退出的。
我记得我甚至用过SerialFlush。
希望这能有所帮助。

向artmann致意

*最后更新者:artmann于2009年4月17日下午3:01*

新对话如下:

听起来可能是连接或端口设置有问题。我对此了解不多,只是很容易出错!我认为需要有一个接地连接以及Tx/Rx。最好先使用记录器RS232端口进行尝试,使用与使用HyperTerminal完全相同的连接。

我已经看到Gill串行数据被成功记录,并且我有一些通常可以工作的代码。但它偶尔会漏掉一行数据。这可能是由于Gill和CR1000没有同步。我一直在想,对数据进行轮询是否是一个解决方案,但我不知道时机如何。

西蒙F

新对话如下:

有人试图连接差分频道?我自己使用其他风速计,特别是RM young 81000,使用CR1000或CR5000的经验表明,这种连接比串行COM端口更好。

新对话如下:

你好,布伦特

你终于用windmaster pro为你的CR3000启动了这个程序吗?我对CR1000也有同样的问题。

当做

新对话如下:

早上好,房子。我的电台现在按小时报告数据,不再每天报告,但以前也这样做。我将如何设置为每天报告,以及如何将报告的温度转换为每天,尤其是最高和最低温度以及其他温度。谢谢,等待您的回复。

新对话如下:

早上好,房子。我的电台现在按小时报告数据,不再每天报告,但以前也这样做。我将如何设置为每天报告,以及如何将报告的温度转换为每天,尤其是最高和最低温度以及其他温度。谢谢,等待您的回复。

新对话如下:

早上好,房子。我的电台现在按小时报告数据,不再每天报告,但以前也这样做。我将如何设置为每天报告,以及如何将报告的温度转换为每天,尤其是最高和最低温度以及其他温度。谢谢,等待您的回复。

分享到:

原文链接:,转发请注明来源!
海洋仪器网 仪器使用 使用串行通信记录Gill Windmaster Pro _Campbellsci论坛问答
「使用串行通信记录Gill Windmaster Pro _Campbellsci论坛问答」评论列表

发表评论