读取串口

时间:2013-07-20 22:19:14

标签: c# scale barcode-scanner

我有一个涉及串口读取方式和处理代码的问题。

我正在使用的设备是扫描仪/秤我使我的程序显示恒定的重量以及扫描条形码

comport.NewLine = "\r";
comport.Write("S14\r");
while (comport.BytesToRead > 0)
{
    data = comport.ReadLine();

    if (data.StartsWith("S08"))
    {
        try
        {
            string data1 = data.Substring(4);
            data1 = data1.Trim();

            textBox1.Clear();
            textBox1.AppendText(data1);
            timer3.Stop();
            scan();
            timer3.Start();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        comport.DiscardInBuffer();
    }
    else if (data.StartsWith("S144"))
    {
        if (data == "S1440000")
        {
            label8.Text = "0.00";
        }
        else
        {
            string data3 = data.Substring(4);
            data3 = data3.Trim();
            var data4 = data3.Insert(2, ".");
            string data5 = double.Parse(data4).ToString("F", CultureInfo.GetCultureInfo("en-US"));

            label8.Text = data5;
            comport.DiscardInBuffer();
        }
    }
    else if (data == "S143")
    {
        label8.Text = "0.00";
    }
    else if(data =="S145")
    {
        label8.Text = "- - - - -";
    }
    else if(data == "S141")
    {
        label8.Text = "- - - - -";
    }
}

这将不断显示重量,只要没有重量就会扫描条形码我试图弄清楚为什么当有重量时它不会扫描,请注意如果我扫描7次它可能会抓住它一次1 10次​​

编辑确定我现在知道为什么它没有通过,它只处理upc,当它是第一次从扫描仪收到的数据,但我不知道如何正确排序这我看了数据是如何进入和它是以多种方式进行的

有时我会从扫描仪接收到这个

S143.S08A07166200024。 有时 S1440050.S08A0716620024。 有时 S08A0716620024.S143。

有没有人对我应该如何阅读本文有任何建议,所以我的所有if语句都会触发,无论接收数据的顺序是什么?

2 个答案:

答案 0 :(得分:0)

  

我试图找出为什么当有重量时它不会扫描,   请注意,如果我扫描7次,它可能会在10次中有一次捕获

您需要调试代码,设置断点和/或/或Debug.Print(数据)语句,以了解为什么只有十分之一符合第一个{{1条件:

if

修改

  

有没有人对如何阅读本文有任何建议   所以无论数据的顺序如何,我的所有if语句都会触发   收到了?

不要让他们if (comport.BytesToRead > 0) { if (data.StartsWith("S08")) { textBox1.Text = data.Substring(4).Trim(); timer3.Stop(); scan(); timer3.Start(); } if (data.StartsWith("S144")) { if (data == "S1440000") { label8.Text = "0.00"; } else { string data3 = data.Substring(4); data3 = data3.Trim(); var data4 = data3.Insert(2, "."); string data5 = double.Parse(data4).ToString("F", CultureInfo.GetCultureInfo("en-US")); label8.Text = data5; } } if (data == "S143") { label8.Text = "0.00"; } if (data =="S145") { label8.Text = "- - - - -"; } if (data == "S141") { label8.Text = "- - - - -"; } comport.DiscardInBuffer(); } 。让每个人都有自己的else if。显然,如果有大量的if,你会想要更聪明一点,例如:Alternative to writing many if statements?

答案 1 :(得分:0)

comport.NewLine = "\r";
comport.Write("S14\r");
while (comport.BytesToRead > 0)
{
    data = comport.ReadLine();

if (data.StartsWith("S08"))
{
    try
    {
        string data1 = data.Substring(4);
        data1 = data1.Trim();

        textBox1.Clear();
        textBox1.AppendText(data1);
        timer3.Stop();
        scan();
        timer3.Start();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    comport.DiscardInBuffer();
}
else if (data.StartsWith("S144"))
{
    if (data == "S1440000")
    {
        label8.Text = "0.00";
    }
    else
    {
        string data3 = data.Substring(4);
        data3 = data3.Trim();
        var data4 = data3.Insert(2, ".");
        string data5 = double.Parse(data4).ToString("F", CultureInfo.GetCultureInfo("en-US"));

        label8.Text = data5;
        comport.DiscardInBuffer();
    }
}
else if (data == "S143")
{
    label8.Text = "0.00";
}
else if(data =="S145")
{
    label8.Text = "- - - - -";
}
else if(data == "S141")
{
    label8.Text = "- - - - -";
}
}

将我的if更改为while循环