повторить серийный монитор Arduino на консоль Scilab - PullRequest
0 голосов
/ 01 марта 2019

Если я использую последовательный монитор 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, 209 228,

, включая disp(readserial(h)) в цикл while, также не помогает.Не только слишком много пустых строк, но если я остановлю цикл while, он не закроет порт (я думаю, что следует использовать что-то вроде try-catch).Буду признателен, если вы поможете мне узнать, как я могу получить то же поведение, что и последовательный монитор Arduino?

PS Далее я хочу отобразить эти два значения в реальном времени.Поэтому, возможно, используя функцию csvTextScan, чтобы разбить строку на два целых числа.

1 Ответ

0 голосов
/ 02 марта 2019

ОК, после нескольких дней борьбы я понял это.Оказывается, что SciLab не имеет встроенной функции последовательной связи, и разработчик Toolbox использовал TCL_EvalStr для внешнего запуска команд Tcl.Мне пришлось копаться в синтаксисе последовательной связи Tcl (т.е. read, open, gets, fconfigure ...), задать другой вопрос , получить некоторую помощь и, наконец, в итоге получим новую функцию для Toolbox, которую я зафиксировал как запрос на получение :

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), ',')

enter image description here

PS1. У меня естьиспользовал виртуальную плату Arduino внутри SimulIDE и использовал com0com для создания виртуальных последовательных портов.Больше информации здесь на SourceForge .

PS2. Больше обсуждений с разработчиком Toolbox Адитьей Сенгуптой здесь, в Твиттере .

PS3. Больше обсуждений здесь на Tcl Google group

PS4. Полная демонстрация плюс инструкции здесь на Reddit

PS5. Для тех, кто может оказаться здесь, я решил раскошелиться на репозиторий Адитьи Сенгупты здесь с несколькими улучшениями.

...