展开全部

打开串口后启动一个线程来监听串口数据的进入,有数据时,就做数据的处理。

用python写串口通信e68a84e8a2ad3231313335323631343130323136353331333365633839程序的示例:

#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.WriteTex;

if not self.log is None:

self.log.info;

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;

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;

if not self.log is None:

self.log.info;

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;

if not self.log is None:

self.log.info;

return False;

def InitHead(self):

try:

time.sleep(3);

if not self.output is None:

self.output.WriteText;

if not self.log is None:

self.log.info;

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;

if not self.log is None:

self.log.error(u'%s' % ex);

self.SetStopEvent();

return;

if not self.output is None:

self.output.WriteText;

if not self.log is None:

self.log.info;

self.output.WriteText(u'===================================\r\n');

def SendData(self, i_msg):

lmsg = '';

isOK = False;

if isinstance(i_msg, unicode):

lmsg = i_msg.encode('gb18030');

lmsg = i_msg;

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;

if not self.log is None:

self.log.info;

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写个串口通信的程序?相关推荐

  1. python write 写多行_如何用 Python 执行单行命令

    一般来说,面对日常处理的一些小任务,直接用 sed,grep 之类的就可以搞定,更复杂一点的就会考虑 awk 或者用一些现成的轮子,要是 awk 搞不定我就只好用 Python 了.但有些时候,我仅仅 ...

  2. python能写什么脚本_如何用python编写一个阴阳师脚本(自动刷御魂,业原火)(2)...

    在上一篇文章里,我们已经安装好了python,安装好了所有需要的库,现在可以开始码代码了嗷 先让我们来分析一下需要实现的脚本功能,首先就是这个开始战斗此时队友还没来... 当队友(舍友)进来时,开始战 ...

  3. python 矩阵运算 for循环_如何用 Python 科学计算中的矩阵替代循环

    展开全部 因为在Mathematica中使用循环确实是低效的.32313133353236313431303231363533e78988e69d8331333361313961..... 深层次的原 ...

  4. 用python画机器猫代码_如何用Python画一只机器猫?| 原力计划

    原标题:如何用Python画一只机器猫?| 原力计划 作者 | 人邮异步社区 责编 | 胡巍巍 出品 | CSDN博客 自信心是成功的源泉,对刚入门编程行业的初级程序员来说,多敲代码多做项目就是构建自 ...

  5. python 文本翻译 项目_如何用python批量翻译文本?

    首先,看一下百度翻译的官方api文档. http://api.fanyi.baidu.com/api/trans/product/apidoc # coding=utf-8 #authority:bi ...

  6. python怎么输入程序代码_学习用 Thonny 写代码: 一个面向初学者的Python IDE

    学习编程很难.即使当你最终怎么正确使用你的冒号和括号,但仍然有很大的可能你的程序不会如果所想的工作. 通常,这意味着你忽略了某些东西或者误解了语言结构,你需要在代码中找到你的期望与现实存在分歧的地方. ...

  7. python每天20分钟_每天用 Jupyter 写 5 分钟的日记

    用 Jupyter 和 Python 在你的日常写作背后实现一些自动化. 有些人会遵循传统,制定一年的计划.不过,一年的时间很长,所以我以季节性的主题或轨迹来规划.每个季度,我都会坐下来,看看即将到来 ...

  8. thonny和python有什么关系_学习用 Thonny 写代码: 一个面向初学者的Python IDE

    学习编程很难.即使当你最终怎么正确使用你的冒号和括号,但仍然有很大的可能你的程序不会如果所想的工作. 通常,这意味着你忽略了某些东西或者误解了语言结构,你需要在代码中找到你的期望与现实存在分歧的地方. ...

  9. python画动物代码_如何用python画简单的动物_后端开发

    python3.x完全兼容python2.x吗?_后端开发 可以说是完全不兼容.相对于Python的早期版本,Python3是一个较大的升级,为了不带入过多的累赘,Python 3.0在设计的时候没有 ...

最新文章

  1. 华为2011上机笔试题2+参考程序
  2. 【洛谷P1816 忠诚】线段树
  3. 七种武器——.NET工程师求职面试必杀技
  4. 2021牛客暑期多校训练营2 L-WeChat Walk(分块)
  5. 【甘道夫】CDH5.2的Maven依赖
  6. Java实现ActiveMQ之队列的生产者和消费者(一)
  7. 人生这场牌,怎么打才是最优解?
  8. linux打开python3_linux 进入python
  9. operator() error
  10. 安装Oracle问题总结
  11. 软考(软件设计师)考点总结 -- 信息安全分析与设计
  12. 模拟信号和数字信号的区别
  13. 深入理解PHP原理之PHP与WEB服务器交互
  14. mysql 按照年龄段分组查询
  15. 数据库脏读、不可重复读、幻读以及对应的隔离级别
  16. 汉白玉产地在哪里_汉白玉产地在哪里?
  17. Qt编写物联网管理平台17-记录清理
  18. android雪花飘落效果,【OpenGL】Shader实例分析(七)- 雪花飘落效果
  19. mac os linux pageup pagedown,教你巧用Mac上的Page UpDown键
  20. 一个实现粒子爆炸效果的控件

热门文章

  1. Java培训教程之this关键字讲解
  2. OpenCASCADE:拓扑 API之偏移、拔模、管道和演变形状
  3. wxWidgets:窗口删除
  4. boost::spirit模块演示了 AST 的生成,然后将其转储为人类可读的格式
  5. boost::process::on_exit相关的测试程序
  6. 展示使用 boost bind 和 phoenix 处理删除的不同方法的测试程序
  7. 使用 BOOST.ASSERT 机制替换库断言
  8. boost::mpl模块AUX_ASSERT_IS_SEQ的测试程序
  9. boost::function模块boost::lambda::bind用法的测试程序
  10. GDCM:gdcm::CodeString的测试程序