Linux中的Pascal Synaser - SendString麻烦 - 在Windows中运行良好

时间:2016-02-11 14:55:52

标签: linux serial-port freepascal beagleboneblack

我对pascal很新,但是在许多其他语言中都是非常有经验的开发人员,我正在使用BeagleBone Black(一个类似于Pi的基于ARM的单板系统)开展项目,我需要一些串行通信。我发现大多数语言对此的支持现在非常差,而且当我使用Java时,串行库只是不能在基于ARM的系统上工作。

我已经使用Synaser在Pascal中创建了一个Windows工具并且给我留下了深刻的印象,所以我开始为我的Beagle创建一些测试代码,我已经有了编译在我的Beagle上的代码(仅使用FPC)比完整的Lazarus安装),我不得不从Synaser单元中删除一些波特率定义来进行编译,但这很好。

现在问题是,我正在与之通信的设备(USB zigbee)需要在每个命令之后发送CR。我正在使用SendString命令,我通过在Windows上的消息末尾发送#13#10来完成此工作,并且还发现Synaser有CR,LF&内置的CRLF常量,所以在Linux中尝试了那些,但我没做什么似乎发送和消息。我通过使用minicom并在beagle和我的笔记本电脑之间发送消息来确保我的硬件正常运行。我还使用了一些pascal代码来监听消息,并且可以确认我可以在Beagle上使用pascal和Synaser接收消息。

我现在没有想法,任何帮助都会受到赞赏!

此代码在Windows上完美运行并在Linux上编译但无效

procedure ABeagleTest.DoRun;
begin
  ser:=TBlockSerial.Create;
  try
    ser.Connect('/dev/ttyUSB0'); //ComPort
    Sleep(1000);
    ser.config(19200, 8, 'N', SB1, False, False);
      writeln('USB Device Connected');
    Sleep(1000);
    ser.SendString('AT+BCAST:00,Hello World!'+#13#10);

  finally
    ser.free;
  end;

  // stop program loop
  Terminate;
end;

我很乐意发布其他任何有用的内容,例如我的序列阅读代码,但据我所知,我觉得现在没有用。

1 个答案:

答案 0 :(得分:1)

您的用户需要位于dialout群组才能获得访问/dev/ttyUSB*的权限。注销然后在将当前用户添加到该组后重新登录,必要时重新启动(不应该,但我没有每个Linux发行版的经验,可能有必要)。否则,只需以root身份运行(使用sudo),它应该已经拥有权限。