2016-03-17 62 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)

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