我使用的是同时具有/View和串行功能的Rebol3 v3.0.99.4.20。
我正在使用以下命令打开一个端口:
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命令‘screen’进行操作的:
我的输入:
debug on串行设备响应:
Debug messages enabled.
>但是,我永远看不到"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
== ""第二次复制不会返回任何内容,因为第一次复制清除了串行缓冲区。如果数据流到串口,额外的'copy命令将从串口缓冲区返回额外的数据,但在Rebol3中不是这样的。
发布于 2016-11-29 07:16:44
在聊天组的档案中找到了以下信息:
ser: open serial://ttyUSB0/9600
written: false
ser/awake: func [evt][
switch evt/type [
read [
attempt [print to-string evt/port/data]
read evt/port
return true
]
wrote [
written: true
return true
]
]
false
]
write ser "debug on^/"
while [not written][
wait [ser 1]
]
read ser
wait [ser 1]发布于 2017-02-21 16:38:09
您在问题中提供的事件循环实际上应该为您读取数据。如果您希望继续读取数据,则不应在返回true的情况下退出循环,而应在read事件中执行另一次读取。您应该在事件循环内处理数据。
https://stackoverflow.com/questions/40776861
复制相似问题