什么是串行超时?

2024-10-02 10:18:35 发布

您现在位置:Python中文网/ 问答频道 /正文

以前是interCharTimeout,自3.0版起inter_byte_timeout。在

API:http://pyserial.readthedocs.org/en/latest/pyserial_api.html#serial.Serial.inter_byte_timeout

我怀疑以下是正则timeout和{}之间的区别是:

  • 超时:调用read函数时开始倒计时。即使字节不断出现,当从调用read函数到指定的时间量后,它也将停止读取/抛出异常。在
  • 字节间超时:每次接收到一个字节时,开始倒计时时钟。如果字符以连续流的形式出现,字节间的fx为1ms,如果字节间的超时仅仅大于1ms,那么它可以一直持续下去

我说的对吗?在

我怀疑没有,因为我不能让函数超时。我试过下面的例子。我希望inter_byte_超时使它一次读取和打印一个“字符串”,就像arduino写的那样,每秒一个。相反,它每三秒钟超时一次,然后打印该时段的数据。在

Arduino草图,写入序列号:

void setup() {
  Serial.begin(9600);
  while(!Serial); //wait for connection
  for (int i=0;true;i++){
    Serial.printf("=== iteration %d ===\n", i);
    delay(1000); //ms
  }
}

void loop() {
}

Python脚本:

^{pr2}$

命令行输出:

~$ python test.py
0 60 '=== iteration 0 ===\n=== iteration 1 ===\n=== iteration 2 ===\n'
1 60 '=== iteration 3 ===\n=== iteration 4 ===\n=== iteration 5 ===\n'
2 60 '=== iteration 6 ===\n=== iteration 7 ===\n=== iteration 8 ===\n'

我在Ubuntu上使用serial3.0.1。另一端的串行设备是Teensy(Arduino模拟)。在


Tags: 函数apiforread字节timeoutserialbyte
1条回答
网友
1楼 · 发布于 2024-10-02 10:18:35

你的理解似乎是正确的(参见本页关于UNIX termios VMIN and VTIME)的内容。我仔细研究了code of serialposix.py,发现在POSIX系统(如Linux和android)上,字节间的超时设置为十分之一秒。所以当你要求0.01的值时,pyserial中的这行代码。。。在

vtime = int(self._inter_byte_timeout * 10)

…将其转换为vtime为零,这就是代码失败的原因。设置为0.1或更高,它应该可以工作。在

您可能还希望查看the url_handlers documentation,特别是alt://处理程序,看看是否可以成功地为read()使用{}替代处理程序。在


注:我没有检查非POSIX系统的代码。在

相关问题 更多 >

    热门问题