2

我正在尝试打开Scilab和 Arduino 之间的串行通信。/dev/tty**ACM0**但是,Arduino 在端口中始终被 Linux Ubuntu 识别。当我在 Scilab 中写作h=openserial(1,"9600,n,8,1)时,我知道我是在对它说,打开与LinuxCOM1/dev/tty**S0**在 Linux 中的串行通信。

但是,例如,如果我使用h=openserial(N,"9600,n,8,1),假设在 Windows 和LinuxN=port number中,我将始终拥有 COMN 。/dev/tty**S**(N-1)

如何通过/dev/tty**ACM0**Scilab for Linux 中的端口打开串行通信?

4

3 回答 3

2

从Scilab 存储库openserial.sci串行通信工具箱中查看

function h=openserial(p,smode,translation,handshake,xchar,timeout)
//port name
  if ~exists("p","local") then p=1; end
  if type(p)==1 | type(p)==8 then
    if p<=0 then error("port number must be greater than zero"); end
    if getos() == "Windows" then
      port="COM"+string(p)+":"
    else
      port="/dev/ttyS"+string(p-1)
    end
  elseif type(p)==10
     port=p
  else
     error("port to open must be either a number or a string")
  end

端口始终设置为/dev/ttyS<PORT_NUMBER>。因此,在您的本地工具箱文件中,您可以尝试将以下行编辑为如下内容openserial.sci

function h=openserial(p,smode,translation,handshake,xchar,timeout)
//port name
  if ~exists("p","local") then p=1; end
  if type(p)==1 | type(p)==8 then
    if p<=0 then error("port number must be greater than zero"); end
    if getos() == "Windows" then
      port="COM"+string(p)+":"
    else
      port="/dev/ttyS"+string(p-1)
    end
  elseif type(p)==10
     port=p
  elseif type(p)=="ACM0"
     port="/dev/ttyACM0"
  else
     error("port to open must be either a number or a string")
  end

然后按如下方式调用openserial:

h=openserial("ACM0","9600,n,8,1)

还要确保这/dev/ttyACM0是正确的设备节点。这是来自 的示例输出ls -l,您可以运行以确认:

$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 188,  0 Mar 12 18:16 /dev/ttyACM0

如果您以普通用户身份打开串行端口时遇到错误,您可以将自己添加到正确的组中。根据上面的例子,组名dialout在我的 openSUSE 发行版上。您的可能会有所不同,因此请在以下命令中替换该组名:

sudo usermod -a -G dialout <USER_NAME>
于 2013-03-20T21:03:26.760 回答
0

只需输入:

h = openserial("/dev/ttyACM0", "9600, n, 8, 1");

你就完成了。

于 2014-10-13T18:26:54.017 回答
0

保持简单,STRINGS 是一个有效的移植选项,因此 Luis 发布:

“......只需输入:

h = openserial("/dev/ttyACM0", "9600, n, 8, 1");

然后你就完了……”

例如,假设您的 arduino 在 Scilab 上使用串行端口“/dev/ttyACM0”类型:

n=300 // plot 300 data points from serial port "/dev/ttyACM0"
h=openserial("/dev/ttySACM0","9600,n,8,1")
i=1;
while i<=n
data(i) = strtod(readserial(h)); // char to number
plot(i,data(i),'b-o'); // real time plot
drawnow(); // show data
i=i+1;
end
于 2014-12-03T12:16:28.867 回答