在Scilab consol上复制Arduino的串行监视器

时间:2019-02-28 21:53:46

标签: serial-port tcl serial-communication scilab

如果使用Arduino IDE的串行监视器,我可以读取一对逗号分隔的值,如下所示:

  

enter image description here

我想首先在SciLab终端中复制此行为。我使用了Serial Communication Toolbox

h = openserial(7, "9600,n,8,1") // open COM7
disp(readserial(h))
closeserial(h)

返回空或

  

169

     

228,179

     

228,

     

228,205

     

228,209228,

disp(readserial(h))放入while循环也无济于事。不仅有太多的空行,如果我停止while循环,它也不会关闭端口(我认为应该使用try-catch之类的东西)。如果您能帮助我知道如何获得与Arduino的串行监视器相同的行为,我将不胜感激。

PS 。接下来,我想实时绘制这两个值。因此,也许可以使用csvTextScan函数将字符串分成两个整数。

1 个答案:

答案 0 :(得分:0)

好吧,经过几天的苦苦挣扎,我发现了这一点。事实证明SciLab不具有本机串行通信功能,并且Toolbox开发人员已使用TCL_EvalStr在外部运行Tcl命令。我必须深入研究Tcl串行通信语法(即readopengetsfconfigure ...),询问another question,得到{{ 3}},最后为工具箱提供了一个新功能,我已将其提交为some help

function buf = readserialline(h)
    tmpbuf = emptystr();
    while tmpbuf == emptystr()
        TCL_EvalStr("gets " + h + " ttybuf");
        tmpbuf = TCL_GetVar("ttybuf");
    end
    buf = tmpbuf;
endfunction 

现在可以通过运行以下行为来达到上述目的:

h = openserial(7, "9600,n,8,1") // open COM7

for ii = 1:40
    disp(readserialline(h))
end

closeserial(h)

逐行读取串行端口并将其打印到SciLab控制台。现在要解析CSV数据,您可以使用:

 csvTextScan(part(readserialline(h), 1:$-1), ',')
  

a pull request

P.S.1。我在SimulIDE中使用了一个虚拟Arduino板,并使用com0com创建了虚拟串行端口。更多信息enter image description here

P.S.2。。与Toolbox开发人员Aditya Sengupta here on SourceForge的更多讨论。

P.S.3。here on Twitter

上有更多讨论

P.S.4。。完整的演示以及说明Tcl Google group

P.S.5。。对于那些可能会在这里生活的人,我决定对Aditya Sengupta的存储库here on Reddit进行一些改进。