【问题标题】:Send data with serial port用串口发送数据
【发布时间】:2019-12-02 09:34:50
【问题描述】:

我想编写一个滚动基地。底座的 TX、RX 和 GND 的连接是用 rs232 连接的,但我的笔记本电脑上没有这个端口。所以我使用的是 USB-RS232 适配器。连接有效,因为当我在 Putty 中输入不同的命令时,机器人会移动。 所以在visual studio中,我用这条线创建了一个串口:

SerialPort serialPort1 = new SerialPort("COM7", 115200, Parity.None, 8, StopBits.One);

之后,我连接它:

try
{
    serialPort1.Open();
}
catch (Exception ex)
{
    MessageBox.Show("Please connect to the base");
}

这样串口就打开了。最后,我发送缓冲区:

if (serialPort1.IsOpen)
{
    string str = "!m 1 300";
    serialPort1.Write(str);
    System.Console.WriteLine(str);
}

但它不起作用,机器人不动。在 Putty 中,我输入相同的命令:

!m 1 300

也许我忘记了什么?

【问题讨论】:

  • 您正在向控制台写信?你的意思是写到serialPort吗?
  • 机器人是否有更基本的命令,例如 ping 或状态类型命令,您可以尝试验证您的串行通信是否正常工作?什么是机器人?您尝试使用的协议是什么?您可能只需要发送一个 CR 或某种行尾序列。可能喜欢:"!m 1 300\n"(或使用serialPort1.WriteLine 来完成同样的事情)
  • 使用Putty让机器人移动时,是否需要在输入!m 1 300后按Enter?如果是这样,那么这将确认您需要发送一个行尾序列,正如我在之前的评论中描述的那样。

标签: c#


【解决方案1】:

使用 serialPort1.Write(string) 可能更合适。
如果您使用 serialPort1.WriteLine(string) ,它将在字符串之后发送一个换行符,另一端的设备可能不希望这样做。

【讨论】:

    【解决方案2】:

    您正在写入控制台而不是串行端口。试试这个:

    if (serialPort1.IsOpen)
    {
        string str = "!m 1 300";
        serialPort1.Write(str);
    }
    

    您还应该知道overloads 并知道它使用的默认编码是ASCII 编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多