我正在尝试Hello World与一个连接到Vaisala PTB330压力传感器的CR6-WIFI进行串行连接。我试图遵循数据记录器的串行通信白皮书,我收到了一个“NAN”响应。这是我第一次使用来自Arduino的CRBasic,所以我可能遗漏了一些明显的东西。下面是我的代码:
“CR6系列
'声明变量和单元
公共BattV
公共PTemp_C
公共Temp_C
Public PBT330_TQFE as String * 50
单位BattV =伏
单位PTemp_C =摄氏度
单位Temp_C =摄氏度
定义数据表
数据表(testasdf,真的,1)
DataInterval(0 2秒,10)
平均水平(1 Temp_C FP2,假)
样本(1 PBT330_TQFE字符串)
EndTable
数据表(表二,真的,1)
DataInterval(0 1440分钟,10)
最低(1 BattV FP2,假的,假的)
EndTable
的主要项目
BeginProg
“打开串口
SerialOpen(COMU3, 4800,26, 0,25)
的主要扫描
扫描(500年,mSec 4 0)
默认CR6数据记录仪电池电压测量
电池(BattV)
'默认CR6数据记录器接线面板温度测量'PTemp_C'
PanelTemp (PTemp_C 60)
T型热电偶测量Temp_C
TCDiff (Temp_C 1 mv200C U1, TypeT, PTemp_C,真的,0,60岁,1,0)
SerialOutBlock (COMU3“TQFE ?”,6)
延迟(0 5000毫秒)
SerialInRecord (COMU3 PBT330_TQFE &h02 0, &h0D, PBT330_TQFE, 01)
调用数据表并存储数据
CallTable testasdf
CallTable表
NextScan
EndProg
接线是3线RS-232型连接,使用PTB330上的RX/TX/Gnd端子。
简单操作说明
在代码中,我试图通过串行发送' ' TQFE ? ' ',这是Vaisala读取温度值所需的命令(任意选择作为我的Hello World变量)。我延迟片刻,然后请求将该长度的字节存储在PBT330_TQFE中。
结果
预期的结果是一个类似于“T 123.45 C”的字符串。观测到的结果是“NAN”。
我已经试过
我已经使用了这里的部分代码,但无济于事,这包括:更改延迟长度、行开始字符和行终止字符。我特别怀疑行结束字符,因为PTB330的协议指南在这个问题上肯定是模糊的。我通常会假设一个EOL或无效终止,但指南只模糊地暗示了LF和CR符号。
我试图用终端仿真器分析通信。当我这样做时,我只看到OUT消息:
“12.34.56.000 t tqfe ?”
之后就没有了。如果不拿出示波器,我就无法判断发送的信息是否在发送响应。我在数据查看器中看到的“NAN”可能是一个空字符串或溢出字符串。
我的问题
为什么我没有收到来自传感器的响应?是不是我搞砸了什么?有人对这个乐器有经验吗?
1)我得到一个编译错误,如果我运行你的代码在Loggernet/CRbasic:
(版本)E: \ Data_LoggerNet \ Lib \编译器\ CR6Comp.exe版本:CR6.Std.06.08日期:06/21/2017
NoName0。CR6—编译失败!第40行:扫描间隔太短,无法测量4572毫秒。
程序中检测到的错误。双击上面的错误以导航到它。
2) PTB330用户手册提到两个串口..一种叫做“服务”,另一种叫做“用户”。
服务端口应该是唯一的服务(连接到它维护),它的设置将是固定的,不能自定义。另一方面,用户端口可以处于各种状态。
你用的是哪一个?
您是否通过服务端口和计算机访问该单元,以检查用户端口的设置?
https://www.vaisala.com/sites/default/files/documents/PTB330_User_Guide_in_English.pdf
“在代码中,我试图通过串行发送‘TQFE ?’,这是Vaisala读取温度值所需要的命令。”
根据我链接的手册,这个命令设置温度QFE校正压力(第69页)?!?
这是你的第一个串行传感器吗?
你可能想要尝试使用一台只有传感器的终端程序的计算机(把CR6放在一边),并遵循如何与传感器交谈的手册。" how "从第65页开始,在第72页会给出一个最终的例子。
我会尝试‘VERS’或‘SERI’或‘?’首先通过服务端口查看你的终端会话是否建立正确。然后从那里继续前进(见第68页和正在进行的),了解如何询问传感器。我想说'SEND'命令会给你当前的读数格式,这是配置的,你的记录器以后需要切割成块(字符串操作),使合理的值,从你可以存储。
谢谢你的建议,尼科。我发现了造成问题的实际错误,但我会首先回应你的观点。
1)我得到一个编译错误,如果我运行你的代码在Loggernet/CRbasic:
这是奇怪的。我猜是因为延迟线的原因,但我不确定。无论哪种方式,只要有足够的poke就可以编译。
2) PTB330用户手册提到两个串口..一种叫做“服务”,另一种叫做“用户”。
我正在使用“用户”端口与RX/TX线,从Vaisala上的螺丝端子到记录器上的那些。电源通过台式电源连接,因为CR6无法输出12V线时,通过USB连接调试。
您是否通过服务端口和计算机访问该单元,以检查用户端口的设置?
这将是微不足道的终端连接和以太网线,但不,我没有这样做。
根据我链接的手册,这个命令设置温度QFE校正压力(第69页)?!?
我尝试的代码是基于第77页的语法。
这是你的第一个串行传感器吗?
不。我的博士学位使用的是串行传感器。然而,这是我第一次尝试CRBasic。其他的一切都是AVR/Arduino和x1000倍容易!这个程序迫使我使用Windows。恶心。什么时候支持完整的Linux ?
---------------------------------
实际的解决方案:
我接线错了。CR6记录器在我插入的U管脚上不使用12V逻辑,只有C1-4管脚是RS-485兼容的(裁判).U引脚只能做0-5V之间的串行逻辑。
我得稍微调整一下代码才能让人满意。我发送了一个请求字符串“R”(我需要的实际代码而不是“TQFE ?”),行结束密码子是&h0D0A,我使用了一个行开始密码子的前厅(&h20),所以它将允许任意长度的字符串。字符串可以用隐式类型转换为浮点数。
如果有人想看到我最后的“Hello World”这个传感器的代码,让我知道。我会把它贴在这里。我没有这么做的唯一原因是,我现在在家,远离Windows电脑的可怕世界。