繁体   English   中英

如何从串口获取重量?

[英]How to get weight from serial port?

我有一个WPF应用程序,其中包含一个用于称量负载的模块。 由于串行端口通信从一个地磅到另一个地磅,因此我想将称重模块设置为单独的dll。

我正在创建一个类库,在其中使用串行端口来称量负载。 我需要将权重返回到主程序。

double GetWeights()
{

 spWeigh = new SerialPort("COM1", 2400, Parity.None, 8, StopBits.One);
            spWeigh.RtsEnable = false;
            spWeigh.DtrEnable = false;
            spWeigh.Handshake = Handshake.None;
            spWeigh.ReadTimeout = 10000;
            spWeigh.DataReceived +=spWeigh_DataReceived;

}

但是接收到的数据在另一个线程中。 如何在我的主程序中恢复体重?

 void spWeigh_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
      // code here
    }

您是否可以将事件添加到您的主程序所预订的库中,而该事件是由您的库引发的,并传递回所需的数据?

在您的图书馆中:

class YourLibrary
{
    public delegate void RawDataEventHandler(object sender, RawDataEventArgs e);
    public event RawDataEventHandler RawDataReceived;

    void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string ReceivedData = _serialPort.ReadExisting();
        if (RawDataReceived != null)
            RawDataReceived(this, new RawDataEventArgs(ReceivedData));
    }
}

class RawDataEventArgs : EventArgs
{
    public string Data { private set; get; }

    public RawDataEventArgs(string data)
    {
        Data = data;
    }
}

在您的主程序中:

class MainProgram
{
    YourLibrary library = new YourLibrary();
    library.RawDataReceived += new YourLibrary.RawDataEventHandler(library_RawDataReceived);

    void library_RawDataReceived(object sender, RawDataEventArgs e)
    {
        // Your code here - the data passed back is in e.Data
    }
}

如果数据不需要很快(即每秒少于一次),则可以在一个线程中写入文本文件,然后在主线程中从中读取

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM