首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rebol3中读取串口

在Rebol3中读取串口
EN

Stack Overflow用户
提问于 2016-11-24 09:46:25
回答 2查看 290关注 0票数 3

我使用的是同时具有/View和串行功能的Rebol3 v3.0.99.4.20。

我正在使用以下命令打开一个端口:

代码语言:javascript
复制
ser: open serial://ttyUSB0/9600

然后,我设置了异步处理程序:

代码语言:javascript
复制
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中写到串口的最后一条命令。

例如:

代码语言:javascript
复制
>> ser: open serial://ttyUSB0/9600
>> write ser "debug on^/"
>> read ser
== "debug on^/"

到目前为止,这看起来还可以,但这是串行设备如何使用Linux命令‘screen’进行操作的:

我的输入:

代码语言:javascript
复制
debug on

串行设备响应:

代码语言:javascript
复制
Debug messages enabled.
>

但是,我永远看不到"Debug messages enabled“。文本。

代码语言:javascript
复制
>> read ser
== "debug on^/"

>> wait ser
== none

>> read ser 
== "debug on^/"

>> copy ser/data      
== "debug on^/"

不知道我错过了什么。

在Rebol2中,这要简单得多,但不是异步的:

代码语言:javascript
复制
>> 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中不是这样的。

EN

回答 2

Stack Overflow用户

发布于 2016-11-29 07:16:44

在聊天组的档案中找到了以下信息:

代码语言:javascript
复制
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]
票数 2
EN

Stack Overflow用户

发布于 2017-02-21 16:38:09

您在问题中提供的事件循环实际上应该为您读取数据。如果您希望继续读取数据,则不应在返回true的情况下退出循环,而应在read事件中执行另一次读取。您应该在事件循环内处理数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40776861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档