ОК, после нескольких дней борьбы я понял это.Оказывается, что 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), ',')
PS1. У меня естьиспользовал виртуальную плату Arduino внутри SimulIDE и использовал com0com для создания виртуальных последовательных портов.Больше информации здесь на SourceForge .
PS2. Больше обсуждений с разработчиком Toolbox Адитьей Сенгуптой здесь, в Твиттере .
PS3. Больше обсуждений здесь на Tcl Google group
PS4. Полная демонстрация плюс инструкции здесь на Reddit
PS5. Для тех, кто может оказаться здесь, я решил раскошелиться на репозиторий Адитьи Сенгупты здесь с несколькими улучшениями.