SerialPort.ReadLine 无法正常工作

GntS

我想通过 Windows 窗体中的串行端口读取传感器。当我通过 RealTerm 程序连续发送所需的传感器命令时,我得到如下预期的响应:

//1st Command
OK                                                                            
sS                                                                             
MAz2000145222                                                                                                                                                                                                                                                                  
MAz2000145222                                                                                                                                 
MAz2000145222                                                                                                                                  
SC
//2nd Command  
OK                                                                             
sS                                                                            
MAz2000145222                                                                                                                                 
MAz2000145222                                                                                                                                                                                                 
MAz2000145222                                                                                                                                   
SC
//3rd Command  
OK                                                                             
sS                                                                             
MAz2000145222                                                                                                                                 
MAz2000145222                                                                                                                                                                                                 
MAz2000145222                                                                                                                                   
SC  

但是当我使用我的 windows 窗体应用程序并通过按下按钮发送所需的传感器命令时,我得到了这个:

//Displayed in txtBoxReceived
//1st Command
OK                                                                            
sS                                                                             
MAz2000145222                                                                                                                                                                                                                                                                 
MAz2000145222                                                                                                                                
MAz2000145222
//2nd Command                                                                                                                                    
SC 
OK                                                                            
sS                                                                             
MAz2000145222
//3rd Command                                                                                                                                  
MAz2000145222                                                                                                                                                                                                 
MAz2000145222                                                                                                                                   
SC 
OK                                                                             
sS                                                                             
MAz2000145222                                                                                                                                  
MAz2000145222                                                                                                                                                                                                 

这是我的代码:

public partial class Form1 : Form
{
    string strRecieved;
    static SerialPort _SerialPort = new SerialPort();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        _SerialPort = new SerialPort("COM8", 115200, Parity.None, 8, StopBits.One);
        _SerialPort.ReadTimeout = 1000;
        _SerialPort.Open();
        _SerialPort.DataReceived += new SerialDataReceivedEventHandler(_SerialPort_DataReceived);

    }

    private void _SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        strRecieved = _SerialPort.ReadLine();

        this.Invoke(new EventHandler(UpdateVar));
    }

    private void UpdateVar(object sender, EventArgs e)
    {
       txtBoxReceived.Text += (strRecieved + Environment.NewLine);
    }

我很困惑!有什么建议吗?

根据评论编辑:我按三下按钮发送三个命令,并且有足够的时间接收数据和更新表单。传感器发送的所有字符串都以“\n”0x0A 结尾。请注意 RealTerm 中的响应是正确的。在我看来,所有字符都已正确接收到输入缓冲区,但尚未读取的字符将出现在下一个命令中!

巴达克

在您的DataRecieved活动中,您应该构建一个字符串,直到您拥有整行。您的所有回复都以 CR LF 结尾,太好了,我们可以使用它来确定何时拥有整个字符串。

StringBuilder sb = new StringBuilder();
char LF = (char)10;

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    string Data = serialPort1.ReadExisting();

    foreach (char c in Data)
    {
        if (c == LF)
        {
            sb.Append(c);

            CurrentLine = sb.ToString();
            sb.Clear();

            //do something with your response 'CurrentLine'
            Eval_String(CurrentLine);
        }
        else
        {
            sb.Append(c);
        }
    }
}

获得 后CurrentLine,您可以评估您的回复。我不确定你需要用它做什么,但从下面的例子你应该能够得到你的价值。

private void Eval_String(string s)
{
    txtBoxReceived.Text += (s + Environment.NewLine);
}

请注意,您可能必须调用更新文本框,因为它是在您的串行端口线程中调用的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:无法使readline()正常工作

来自分类Dev

Java readLine()无法正常工作

来自分类Dev

ubuntu更新后,Serialport无法正常工作吗?

来自分类Dev

QSerialPort :: readLine在MS Windows上无法正常工作

来自分类Dev

Scala Stdin.readLine()似乎无法正常工作

来自分类Dev

为什么此readline异步迭代器无法正常工作?

来自分类Dev

无法从SerialPort读取

来自分类Dev

serialPort无法正确读取值

来自分类Dev

C# SerialPort Readline 在缓冲区中有多个换行符

来自分类Dev

ImportError:无法在Twisted上导入名称SerialPort

来自分类Dev

ImportError:无法在Twisted上导入名称SerialPort

来自分类Dev

.Net SerialPort对象将无法通信

来自分类Dev

SerialPort ReadLine VB.Net的最后一个字符中的未定义字符串

来自分类Dev

红宝石无法加载readline

来自分类Dev

我无法编写NodeJS和node-serialport

来自分类Dev

readline rl.write如何工作?

来自分类Dev

很难使readLine()在HackerRank上按需工作

来自分类Dev

重新连接到端口后,node.js serialport事件停止工作

来自分类Dev

@BeforeSuite无法正常工作

来自分类Dev

BringIntoView无法正常工作

来自分类Dev

Selendroid无法正常工作?

来自分类Dev

无法使URLrewritng正常工作

来自分类Dev

substr()无法正常工作

来自分类Dev

slidetoggle无法正常工作

来自分类Dev

onkeypress无法正常工作

来自分类Dev

Bash IF无法正常工作

来自分类Dev

@AfterThrowing无法正常工作

来自分类Dev

httpPost无法正常工作

来自分类Dev

getrusage无法正常工作