2016-03-17 38 views
1

我有一台徕卡DISTO D3a BT。 这是一个测量设备,它通过蓝牙发送测量结果。如何通过蓝牙从Leica DISTO读取数据?

我写了一些代码来获取蓝牙流,我收到的数据,但我总是得到“错误240”的消息。

这意味着(从用户手册),我不确认数据传输的成功。

我该怎么办呢?

这里是我的代码:

int bytesRead = 0; 
System.IO.Stream stream = client_.GetStream(); 
byte[] buffer = new byte[k_BUFFER_BYTES]; 
while(true) 
{ 
    Task.Delay(100); 
    if (client_.Available > 0) // Available contains the available bytes 
    { 
     int counter = 0; 
     string output = ""; 

     while (counter < client_.Available) 
     { 
      bytesRead = stream.Read(buffer, 0, k_BUFFER_BYTES); 
      counter += bytesRead ; 

      output += System.Text.Encoding.ASCII.GetString(buffer, 0, bytesRead); 
     } 
     stream.Write(Encoding.ASCII.GetBytes("\r\n"), 0, 2); 
     stream.Flush(); 

     Console.WriteLine(output + " - " + counter + " - " + client_.Available); 
    } 
} 

在此先感谢您的帮助!

回答

1

最后我得到了答案! 我安装了串行端口嗅探器,发现确认字符串回应是:

CFM \ n

因此,代码是现在:

await stream.WriteAsync(Encoding.ASCII.GetBytes("cfm\n"), 0, 4); 
await stream.FlushAsync(); 

enter image description here

PS:我想非常感谢徕卡客户关心而不是回答我的邮件和电话。

+1

发送“cfb 0 \ r \ n”以关闭E240;或“cfb 128 \ r \ n”将其重新打开。 “此命令仅适用于BT 2.1设备,但不适用于BT 4.0”。 – ali

0

尝试发送CRLF上的流。之后冲洗。

我在这里检查了这一点:https://www.b4x.com/android/forum/threads/connect-leica-disto-via-bluetooth-spp.53104/

虽然语言不同的是,这个概念应该是相同的。

希望这会有所帮助!

+0

感谢Octanic,我添加了这两行:'stream.Write(Encoding.ASCII.GetBytes(“\ r \ n”),0,2); stream.Flush();'但它没有解决问题!我做错了吗? – Michele

+0

@Michele这似乎是正确的。但是,您可以考虑流不接受ASCII编码。你有没有尝试过另一种编码,比如UTF-8?除了错误,流是否有额外的数据?我的意思是,你会得到任何其他信息以及错误吗? – Octanic

+1

如果我使用UTF-8编码,字节是相同的两个(13,10)。如果我使用的Unicode字节是四(13,0,10,0)而不是两个,我收到@ E203答案。但它不能很好地解决我的问题 – Michele

1

使用Disto Transfer PC应用程序关闭公认的信号(E240)

(你需要最大限度的应用程序,看看它的附加功能)