Обработка данных буфера, полученных из порта rs232 - PullRequest
1 голос
/ 28 июля 2011

У меня есть проект, в котором я должен читать данные из шкалы, используя rs232. Выходные данные весов имеют формат «L00000». Моя проблема в том, что весы отправляют данные непрерывно, так как они весят, как «L00000, L00001, L00002, L00003, L00004». Мой интерес в этом случае заключается в получении последней части "L00004" для хранения в БД. Вот мой код: Пожалуйста, помогите мне улучшить его. Спасибо

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsFormsApplication5
 {
public partial class Form1 : Form
{
    private List<byte> PortBuffer = new List<byte>();
    SerialPort comPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
    public Form1()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {


        if (comPort.IsOpen)
        {
            comPort.DiscardOutBuffer();
            MessageBox.Show("Data cleared");
            comPort.Close();
        }

        if(!comPort.IsOpen)
        {
        comPort.Open();
        //sample of data as written by the scale. How can I get the last chunk only so that I format it for my needs
        comPort.Write("L00002 L00002 L00002");

        int bytes = comPort.BytesToRead;
        byte[] buffer = new byte[bytes];
        comPort.Read(buffer, 0, buffer.Length);

        comPort.DataReceived += new SerialDataReceivedEventHandler(data_received);

        comPort.Close();
       }
       }
    public void data_received(object sender,SerialDataReceivedEventArgs e)
    {
        MessageBox.Show("test" + comPort.ReadExisting().ToString());

    }

   }
 }

1 Ответ

1 голос
/ 28 июля 2011

Как разделены данные, есть пробел a или нет разделения?

Если это, как в вопросе, то

var data=comPort.ReadExisting().ToString();
var result=data.Split(',').Last();
...