使用C#从Mettler Toledo秤设备读取数据

时间:2011-07-04 09:56:42

标签: c# .net serial-port

我正在使用C#代码从Mettler Toledo秤设备读取数据。

这是我的完整代码:

private SerialPort port = new SerialPort("COM1", 4800, Parity.None, 8, StopBits.One);

public Inwardsfrm()
{
    InitializeComponent();
    port.DtrEnable = true;
    port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}

private void Inwardsfrm_Load(object sender, EventArgs e)
{
    if (port.IsOpen == false)
    try
    {
        port.Open();
    }
    catch (Exception oex)
    {
        MessageBox.Show(oex.ToString());
    }
}

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


private void DoUpdate(object s, EventArgs e)
{
    Thread.Sleep(30);
    string data = port.ReadExisting() + port.ReadExisting();
    try
    {
        richTextBox1.Text = data.Trim().Remove(0, 3);
    }
    catch (Exception f)
    {
        MessageBox.Show(f.Message.ToString());
    }
}

它工作正常并在名为richTextBox1的标签中显示结果,但有时它会出现以下错误:

  

索引和计数必须引用带有字符串参数名称:Count

的位置

有什么问题?我该如何解决?

1 个答案:

答案 0 :(得分:0)

似乎问题是由Remove()方法引起的,Trim()之后数据中剩下的字符少于3个。

尝试:

 private void DoUpdate(object s, EventArgs e)
    {
        Thread.Sleep(30);
        string data = port.ReadExisting() + port.ReadExisting();
        if(data.Trim().Count() < 3)
            MessageBox.Show("data = " + data);
        else
        try
        {    
            richTextBox1.Text = data.Trim().Remove(0, 3);
        }
        catch (Exception f)
        {
            MessageBox.Show(f.Message.ToString());
        }
    }

这应该有助于弄明白。