首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python pyserial优化

python pyserial优化
EN

Stack Overflow用户
提问于 2013-09-11 18:34:53
回答 1查看 339关注 0票数 0

我正在从串口读取一些数据。数据打包为9个字符。不需要struct,我知道格式是什么,但有两个问题: 1)如果我保持端口打开,答案是事件发生后1-3秒(有一个led面板,我可以在那里看到实时事件和应该是串行的值)。我认为这与一些缓冲区有关,这些缓冲区只有在满的时候才会刷新(我被迫以非管理员身份在Win32上工作,所以对此并没有太多的控制)。读数是周期性地执行(200ms),因此打开/关闭看起来像是浪费资源。有没有办法保持端口打开,并在读取之前强制刷新缓冲区?(来自python!)

2)为了获得值,我必须找到一个标记- 13 -作为struct的末尾,并按顺序读取(下8个字符或前8个字符)。循环不是最高效的python部分,所以它是一种获取索引,读取数据而不阻塞所有东西的方法吗?(一个连续的读保持处理器启动,即使在其他线程中作为非阻塞解决方案)。如果有任何用途:

代码语言:javascript
复制
class SeReader(object):
    def __init__(self, tata):
        self.ser = serial.Serial()
        self.ser.baudrate = 2400
        self.ser.port = "COM1"
        self.tata = tata # entry point for main gui notification
        self.val, self.status, self.semn, self.data, self.oldVal = None, None, None, None, None
        self.is_stable, self.on = False, False
        self.stable_count = 0
        self.on = False

    def read(self):
        if not self.on: return False
        self.ser.open()
        data = self.ser.read(18)
        self.ser.close()
        start = -1
        for x in xrange(18):
            if data[x] == '\r':
                start = x + 1
                break
        if start == -1:return True
        self.data = val = data[start:start + 9]
        try:
            self.status = val[0]
            self.val = val[2:8]
            self.semn = val[1]
            self.tata.write_data(self.semn, self.val)
        except Exception as e:
            self.tata.set_cs_unstable()
            self.tata.write_data("> ", "Eroare")
            print(self.val, e)
        if self.val == self.oldVal:
            self.stable_count += 1
        else:
            self.oldVal = self.val
            self.stable_count = 0
        if self.stable_count > 8:self.tata.set_cs_stable()
        else:self.tata.set_cs_unstable()
        return True

self.tata等是用来通知主图形用户界面的

EN

回答 1

Stack Overflow用户

发布于 2013-09-11 19:03:01

我使用my_serial.inWaiting()检查是否有等待读取的字节,然后在一个单独的线程中读取所有字节,该线程随后引发一个附加了接收数据的事件。

一旦我有了一个数据块,我就可以使用正则表达式(re)搜索给定的开始/结束序列,如果这些块与其他数据混合在一起的话。

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

https://stackoverflow.com/questions/18738856

复制
相关文章

相似问题

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