c#Serialport问题:数据以“clumps”发送

时间:2010-10-03 19:48:45

标签: c#

我正在尝试使用蓝牙串行连接远程控制lego mindstorms NXT机器人。程序连接没有任何问题,但是当我发送单个命令时,它们在发送其他几个命令之前不会出现。然后它们全部出现在nxt上。

我已经尝试了所有东西(我可以想到或谷歌告诉我)但是我发不出缝来让缓冲区在命令发送后刷新。

任何人都知道我能做什么? 这是我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;

namespace NXTBtRemote
 {
  public class BTHandler
  {
    SerialPort comm;
    private string comPort;
    public BTHandler()
    {
        comm = new SerialPort(); 
    }

    public Boolean Connect(string _comPort)
    {
        this.comPort = _comPort;
        comm.PortName = comPort;
        comm.Open();

        if (comm.IsOpen) return true;
        else return false; 
    }

    public void sendCommand(Command command)
    {
        string msg = command.cmdType + "#" + command.arguments;
        if (!comm.IsOpen) comm.Open();
        comm.WriteLine(msg);
        comm.DiscardOutBuffer();
    }
}
}

希望索莫可以提供帮助。提前致谢 亲切的问候 - 肯尼思

1 个答案:

答案 0 :(得分:1)

    comm.DiscardOutBuffer();

非常坏。你丢弃了刚写的字节。 WriteLine()方法将命令写入输出缓冲区,然后从缓冲区将命令缓慢写入串行端口。只有在调试代码时,单步执行代码,串口驱动程序才有足够的机会实际发送内容。如果芯片本身具有FIFO缓冲器,它将被击中或未命中。只需删除DiscardOutBuffer()调用,它只会造成伤害。

除此之外,你真的在​​抱怨收到回复的问题。但是没有显示任何进行任何Read调用的代码。