python打开串口失败_python 如何防止串口通信失败?
python 对串口的操作
我用的是“线程轮寻”方式。
就是打开串口后,启动一个线程来监听串口数据的进入,有数据时,就做数据的处理(也可以发送一个事件,并携带接收到的数据)。
我没有用到串口处理太深的东西。
客户的原程序不能给你,不过我给你改一下吧。
里面的一些东西,已经经过了处理,要运行,可能你要自己改一下,把没有用的东西去掉。
我这里已经没有串口设备了,不能调了,你自己处理一下吧,不过基本的东西已经有了。
=================================================================
#coding=gb18030
import sys,threading,time;
import serial;
import binascii,encodings;
import re;
import socket;
class ReadThread:
def __init__(self, Output=None, Port=0, Log=None, i_FirstMethod=True):
self.l_serial = None;
self.alive = False;
self.waitEnd = None;
self.bFirstMethod = i_FirstMethod;
self.sendport = '';
self.log = Log;
self.output = Output;
self.port = Port;
self.re_num = None;
def waiting(self):
if not self.waitEnd is None:
self.waitEnd.wait();
def SetStopEvent(self):
if not self.waitEnd is None:
self.waitEnd.set();
self.alive = False;
self.stop();
def start(self):
self.l_serial = serial.Serial();
self.l_serial.port = self.port;
self.l_serial.baudrate = 9600;
self.l_serial.timeout = 2;
self.re_num = re.compile('\d');
try:
if not self.output is None:
self.output.WriteText(u'打开通讯端口\r\n');
if not self.log is None:
self.log.info(u'打开通讯端口');
self.l_serial.open();
except Exception, ex:
if self.l_serial.isOpen():
self.l_serial.close();
self.l_serial = None;
if not self.output is None:
self.output.WriteText(u'出错:\r\n %s\r\n' % ex);
if not self.log is None:
self.log.error(u'%s' % ex);
return False;
if self.l_serial.isOpen():
if not self.output is None:
self.output.WriteText(u'创建接收任务\r\n');
if not self.log is None:
self.log.info(u'创建接收任务');
self.waitEnd = threading.Event();
self.alive = True;
self.thread_read = None;
self.thread_read = threading.Thread(target=self.FirstReader);
self.thread_read.setDaemon(1);
self.thread_read.start();
return True;
else:
if not self.output is None:
self.output.WriteText(u'通讯端口未打开\r\n');
if not self.log is None:
self.log.info(u'通讯端口未打开');
return False;
def InitHead(self):
#串口的其它的一些处理
try:
time.sleep(3);
if not self.output is None:
self.output.WriteText(u'数据接收任务开始连接网络\r\n');
if not self.log is None:
self.log.info(u'数据接收任务开始连接网络');
self.l_serial.flushInput();
self.l_serial.write('\x11');
data1 = self.l_serial.read(1024);
except ValueError,ex:
if not self.output is None:
self.output.WriteText(u'出错:\r\n %s\r\n' % ex);
if not self.log is None:
self.log.error(u'%s' % ex);
self.SetStopEvent();
return;
if not self.output is None:
self.output.WriteText(u'开始接收数据\r\n');
if not self.log is None:
self.log.info(u'开始接收数据');
self.output.WriteText(u'===================================\r\n');
def SendData(self, i_msg):
lmsg = '';
isOK = False;
if isinstance(i_msg, unicode):
lmsg = i_msg.encode('gb18030');
else:
lmsg = i_msg;
try:
#发送数据到相应的处理组件
pass
except Exception, ex:
pass;
return isOK;
def FirstReader(self):
data1 = '';
isQuanJiao = True;
isFirstMethod = True;
isEnd = True;
readCount = 0;
saveCount = 0;
RepPos = 0;
#read Head Infor content
self.InitHead();
while self.alive:
try:
data = '';
n = self.l_serial.inWaiting();
if n:
data = data + self.l_serial.read(n);
#print binascii.b2a_hex(data),
for l in xrange(len(data)):
if ord(data[l])==0x8E:
isQuanJiao = True;
continue;
if ord(data[l])==0x8F:
isQuanJiao = False;
continue;
if ord(data[l]) == 0x80 or ord(data[l]) == 0x00:
if len(data1)>10:
if not self.re_num.search(data1,1) is None:
saveCount = saveCount + 1;
if RepPos==0:
RepPos = self.output.GetInsertionPoint();
self.output.Remove(RepPos,self.output.GetLastPosition());
self.SendData(data1);
data1 = '';
continue;
except Exception, ex:
if not self.log is None:
self.log.error(u'%s' % ex);
self.waitEnd.set();
self.alive = False;
def stop(self):
self.alive = False;
self.thread_read.join();
if self.l_serial.isOpen():
self.l_serial.close();
if not self.output is None:
self.output.WriteText(u'关闭通迅端口:[%d] \r\n' % self.port);
if not self.log is None:
self.log.info(u'关闭通迅端口:[%d]' % self.port);
def printHex(self, s):
s1 = binascii.b2a_hex(s);
print s1;
#测试用部分
if __name__ == '__main__':
rt = ReadThread();
f = open("sendport.cfg", "r")
rt.sendport = f.read()
f.close()
try:
if rt.start():
rt.waiting();
rt.stop();
else:
pass;
except Exception,se:
print str(se);
if rt.alive:
rt.stop();
print 'End OK .';
del rt;
python打开串口失败_python 如何防止串口通信失败?相关推荐
- python 打开文件夹_python打开目录
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python dirtree.py e:programmingpythonapp ...
- micropython 串口中断_python读取uart串口
怎么通过UA串口接收多个字符? 希望功能:在这里小编想通过上位机向单片机发送2835,并通过串口返回,而每接收一个字符,单片机就会UA中断,在中断过程中,你把读取的那个SBUF字符,全部赋值给RxdD ...
- python打开方式包括_python打开文件的方式有哪些
python下打开文件超级简单,不用导入任何包,直接输入 f =open('your_file.txt','r') 就可以打开一个文件进行操作.第二个参数为对文件的操作方式,'w'是写文件,已存在的同 ...
- python打开.mat文件_python怎么打开mat文件?
在编程中,使用.mat文件可以连同数据的变量名一同保存下来,在程序调试的过程中十分方便,并且不需要控制数据的存储格式,matlab会自动保存并区分我们所存储的内容.那你知道如何使用python打开.m ...
- python进程间通信时间开销_python 进程间的通信
python3,进程间的通信 本文来源于python 3.5版本的官方文档 multiprocessing模块为进程间通信提供了两种方法: 1.进程队列queue The Queue class is ...
- python 打开targz文件_Python下使用pandas打开excel文件并进行处理
单位有较多账户报表,经常要知道哪些账户的金额是多少. 最近python很火,感觉可以搞一下,但是0基础,自己摸索,著文以记之. 安装python.安装最新版,可以多活一段时间,什么都选择默认就好. 安 ...
- python打开文件对话框_python实战演练:如何通过对话框打开文件并对文件进行对比...
python是目前最受欢迎的脚本语言之一,在很多简单功能实现中,python就有不可替代的优势,下面是针对本人遇到的一个小问题而写的一个python脚本,代码中含有注释,这里由于浏览器本身的格式原因, ...
- python打开autocad软件_python 使用pyautocad操作AutoCAD
一.python 连接AutoCAD的两种基本方法 1.使用pyautocad from pyautocad import Autocad pyacad = Autocad(create_if_not ...
- python打开jpg照片_python打开图像
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python有很多库可以进行图像文件的读写,比如图像处理包pillow,科学绘图 ...
最新文章
- [optee]-optee中的异常向量表的实现
- 【bzoj3280】小R的烦恼 费用流
- 信息学奥赛一本通C++语言——1093:计算多项式的值
- redis源码剖析(7):基础数据结构quicklist
- 步进电机驱动器单片机控制电路
- 【数学建模之Python】13.手撕抛物型方程的差分解法(如一维热传导方程)
- win7计算机里的桌面不见了怎么办,win7桌面图标不见了怎么办,教您解决win7桌面图标不见了...
- 六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序
- echarts去除网格线_echarts实现去掉X轴、Y轴和网格线效果实例分享
- 【Django | 开发】面试招聘网站(增加csv,excel导出企业域账号集成日志管理功能)
- Web前端作业:Html+JS实现的图片镜像、黑白、红色、绿色、蓝色及还原
- SQL在MySQL中是如何执行的
- 打不开win10自带计算器和防火墙、应用商店闪退及误删等问题解决
- 基于二维码的设备巡检系统相关技术
- 百万级深空天体数据库获取
- 【Java】Log4j日志
- 三星Samsung手机平板安装Google Play商店,安装谷歌服务框架,解决闪退奔溃GMS
- 旅游指南之十四----西藏风土人情
- 仓储服务-领取采购单
- 【环境部署】华为云ECS安装MySQL
热门文章
- Linux 命令之 ps -- 显示进程状态/查看进程信息
- 腾讯为什么不开发linux软件下载,你认为国产操作系统如何搭建生态?为什么腾讯不给Linux系统适配QQ?...
- 基于自定义Mybatis框架实现数据库操作
- oracle system用户创建job 其他用户,oracle创建表空间、用户和表以及sys和system的区别...
- layui按钮展开、_layui可折叠的组织架构树形图
- python上一行的代码打错了怎么办_写Python代码过程中碰到各种错误异常要怎么样去处理?...
- Python3实现队列
- js读取外部json指定字段值完整代码_前端工程化 剖析npm的包管理机制(完整版)...
- 网站开发用什么语言好_网站开发教程:企业如何用网站开启在线业务?
- 用计算机怎么弹离人愁数字,拇指琴新手入门曲谱——离人愁