Я использую Rebol3 v3.0.99.4.20, который имеет как/View, так и серийную функциональность.Чтение последовательного порта в Rebol3
Я открываю порт с:
ser: open serial://ttyUSB0/9600
Затем я создал мой асинхронный обработчик:
ser/awake: func [event /local p][
p: event/port
switch event/type [
lookup [open p]
connect [write p to-binary request]
read [
result: to-string p/data
close p
return true
]
wrote [read event/port]
]
false
]
Проблема у меня есть сейчас, что я не могу понять, как читать данные из последовательный порт. Я всегда возвращаю последнюю команду, которую я написал в последовательный порт в ser/data.
Например:
>> ser: open serial://ttyUSB0/9600
>> write ser "debug on^/"
>> read ser
== "debug on^/"
Это выглядит нормально до сих пор, но это, как последовательное устройство работает с помощью команды Linux, 'экран':
Мой вход:
debug on
Ответ последовательного устройства:
Debug messages enabled.
>
Однако я никогда не могу прочитать сообщение «Отладочные сообщения». текст.
>> read ser
== "debug on^/"
>> wait ser
== none
>> read ser
== "debug on^/"
>> copy ser/data
== "debug on^/"
Не уверен, что мне не хватает.
В Rebol2, это гораздо проще, но не асинхронный:
>> system/ports/serial
== [com1 com2 com4]
>> ser: open/no-wait serial://port3/9600/8/none/1
>> insert ser "debug on^/"
>> copy ser
== "debug on^/Debug messages enabled.^/>"
>> copy ser
== ""
2-ая копия не возвращает ничего, потому что первая копия очищается серийный буфер. Если данные транслировались на последовательный порт, дополнительные команды копирования возвращают дополнительные данные из последовательного буфера. Но в Rebol3 это не работает.