2012-03-12 15 views
0

我想讀的數字秤的重量在C#應用程序,發現問題this這 正是我試圖做 但對我下面的功能從來沒有運行。讀取重量從串行梅特勒 - 託利多的數字秤

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
{ 
this.Invoke(new EventHandler(DoUpdate)); 
} 

我已經檢查了設備管理的規模,其位置被設置爲Port_#0004.Hub_#0003,似乎是工作的罰款 我不知道規模的端口號,所以我做了

var test = SerialPort.GetPortNames(); 

和只有COM1得到返回

Edit 1:當我做int a = port.ReadByte();我的應用程序掛起和執行永遠不會從這個語句前進。

+0

也許秤沒有給你任何數據回來?使用portmon查看計算機是否收到任何數據。 – SamFisher83 2012-03-12 16:57:03

+0

如果您還沒有USB接口,可能需要一個驅動程序才能將USB連接轉換爲虛擬COMM端口,否則打開串口將無法連接USB設備。編輯SamFisher83的觀點很好,你可能需要初始化它以獲取它發送信息。 – paul 2012-03-12 16:57:50

+0

@ SamFisher83我在贏得7(x64)portmon現在工作,任何替代品? – PUG 2012-03-12 17:10:52

回答

0

請參閱this後,我用Mike庫連接。

using System; 
using System.Linq; 
using System.Text; 
using HidLibrary; 

namespace MagtekCardReader 
{ 
    class Program 
    { 
     private const int VendorId = 0x0801; 
     private const int ProductId = 0x0002; 

     private static HidDevice _device; 

     static void Main() 
     { 
      _device = HidDevices.Enumerate(VendorId, ProductId).FirstOrDefault(); 

      if (_device != null) 
      { 
       _device.OpenDevice(); 

       _device.Inserted += DeviceAttachedHandler; 
       _device.Removed += DeviceRemovedHandler; 

       _device.MonitorDeviceEvents = true; 

       _device.ReadReport(OnReport); 

       Console.WriteLine("Reader found, press any key to exit."); 
       Console.ReadKey(); 

       _device.CloseDevice(); 
      } 
      else 
      { 
       Console.WriteLine("Could not find reader."); 
       Console.ReadKey(); 
      } 
     } 

     private static void OnReport(HidReport report) 
     { 
      if (!_device.IsConnected) { return; } 

      var cardData = new Data(report.Data); 

      Console.WriteLine(!cardData.Error ? Encoding.ASCII.GetString(cardData.CardData) : cardData.ErrorMessage); 

      _device.ReadReport(OnReport); 
     } 

     private static void DeviceAttachedHandler() 
     { 
      Console.WriteLine("Device attached."); 
      _device.ReadReport(OnReport); 
     } 

     private static void DeviceRemovedHandler() 
     { 
      Console.WriteLine("Device removed."); 
     } 
    } 
} 
0

你可以試着輪詢而不是使用DataReceived事件嗎?另外,我認爲DataReceived事件在觸發之前有一個閾值,您可能也想看看。

+0

我應該輪詢哪些港口的財產? – PUG 2012-03-12 17:00:22

+0

設置一個定時器來定期檢查串行端口上的BytesToRead。然後使用Read讀取數據。查看MSDN頁面瞭解更多詳情:http://msdn.microsoft.com/en-us/library/30swa673。aspx – 2012-03-12 20:33:03

0

你能從天平中獲得序列號嗎?這應該是您連接時首先要做的事情。它會讓你驗證連接建立。如果您無法通過C#界面進行連接,請嘗試先使用超級終端。您可以快速改變很多設置並撥打正確的設置使用。雖然天平應該能夠使用各種波特率和停止位等。他們通常很適應。但是請嘗試超級終端。

我正在尋找pdf,但有一個很長的可用命令列表(取決於您的型號)。該pdf有130頁長。你讀過這個嗎?

+0

謝謝你的回答 1)是的,我已經閱讀了pdf,它說要做的驗證USB連接建立的步驟很好 2)超級終端不可取勝7 3)當你說我能夠得到來自天平的序列號,是否像我可以通過硬件設置訪問的規模屬性? – PUG 2012-03-12 17:19:36

+0

TerraTerm是超級終端的良好替代品。 http://ttssh2.sourceforge.jp/ – drinck 2012-03-12 17:38:03

+0

序列號是您在專門詢問或發出重新啓動命令(兩個響應看起來相同)時餘額返回的響應。這是測試的第一件事。在......之外 – Brad 2012-03-12 18:12:37