python 如何防止串口通信失败
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 如何防止串口通信失败相关的知识,希望对你有一定的参考价值。
参考技术A Python中串口出现异常通常有:1.打开串口时,串口不存在,2.写串口时,3.读串口时。这几个异常是经常会碰到的(有经验的人就深有体会),一旦异常出现了,整个程序很可能会因此就运行不下去了。避免因为这些异常的出现而导致程序死机的方法是对这些可能存在的异常进行捕捉。举一个例子:try:
ComDev.read(1)
print "read Com ok!"
except:
print "read Com error!"
上面的代码意思是:对ComDev这个串口对象读取一个字节,如果读成功,就接着执行print "read Com ok!"而不执行except以下的语句,如果读出现异常,就执行print "read Com error"而不执行
print "read Com ok!"
当然系统还会抛出异常信息,只是我这里没有进行接收,个人觉得很多异常不必接收其信息。追问
我try catch了,程序是没有死,可是程序之后的串口通信都失败了,要干的工作都没干成。
参考技术B 一般不是 try catch 什么的吗如何使用 Linux 的虚拟串口使 C 程序与 Python 程序通信?
【中文标题】如何使用 Linux 的虚拟串口使 C 程序与 Python 程序通信?【英文标题】:How to make C program communicate with Python program using Linux's virtual serial ports? 【发布时间】:2019-03-23 17:47:42 【问题描述】:我想将数据从 C 程序发送到 Python 程序,该程序将可视化这些数据。开发环境是一台Linux(Ubuntu 18.04LTS)计算机。更清楚地说,这两个程序都在同一台计算机上运行。
我在 C 程序中使用 termios 打开串口,在 Python 端使用 pySerial。至于串口,我使用的是“ttyS0”。问题是,当我从 C 程序向 Python 程序发送“Hello”并在终端上打印时,我看到的是空格字符,基本上我得到了这个“”。
我的问题是,我可以为此目的使用“ttyS0”串行端口(我猜那是一个虚拟端口)吗?
这是 C 代码:
#include <stdint.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <termios.h>
#include <time.h>
// Termios init functions are not posted because the configuration
// is correct and proved that they are working.
int main()
char *portname = "/dev/ttyS0";
int fd;
int wlen;
unsigned char writeBuffer[] = "Hello!";
fd = open(portname, O_RDWR | O_NOCTTY | O_SYNC);
if (fd < 0)
printf("Error opening %s: %s\n", portname, strerror(errno));
return -1;
/*baudrate 115200, 8 bits, no parity, 1 stop bit */
set_interface_attribs(fd, B115200);
do
wlen = write(fd, writeBuffer, sizeof(writeBuffer));
printf("Sent data is: \"%s\"\n", writeBuffer);
delay(500);
while(1);
Python 代码:
import serial
from time import sleep
port = "/dev/ttyS0"
ser = serial.Serial(port, 115200, timeout=0.5)
while True:
data = ser.readline()
print(str(data.decode('utf-8')))
ser.close()
【问题讨论】:
【参考方案1】:ttyS0 是您计算机的串行端口——它没有什么“虚拟”的。写入此设备将尝试使用该端口将数据传输出计算机,从该设备读取将尝试从连接到该端口的外部设备接收数据。同一台计算机上的两个程序无法使用串行端口进行有效通信。
我认为您在这里寻找的是pipe、socket pair 或pty。哪一个最合适取决于您的具体要求。
【讨论】:
以上是关于python 如何防止串口通信失败的主要内容,如果未能解决你的问题,请参考以下文章
有人会 用python的 pySerial 进行串口通信的吗