`
f002489
  • 浏览: 271497 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Python 串口设备应用

阅读更多

http://wiki.woodpecker.org.cn/moin/PySerial

http://www.ej38.com/showinfo/Python-147052.html

http://hi.baidu.com/258qq/blog/item/b82e10954e70060e7bf4805e.html

 

1.1. 线程轮寻

-- 分享

就是打开串口后,启动一个线程来监听串口数据的进入,有数据时,就做数据的处理(也可以发送一个事件,并携带接收到的数据)。

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

 

 

2. 反馈

ghostwwl -- 补充一点点 那个串口的pyserial模块到

http://sourceforge.net/project/showfiles.php?group_id=46487 or

http://sourceforge.net/projects/pyserial/files/去下 不然会no model named .....

Border -- 从 http://pyserial.cvs.sourceforge.net/pyserial/pyserial/ 得到些例子。

分享到:
评论

相关推荐

    Python串口调试助手

    用户界面通常包括串口选择控件、波特率设置、数据位、停止位以及校验位等配置选项,这些参数可以根据不同的串口设备和通信协议进行调整。此外,还会包含发送和接收区域,以便实时查看和分析通信数据。 串口调试助手...

    python串口接收源码可以实时绘图

    本项目“python串口接收源码可以实时绘图”结合了这两个工具,旨在实现串口数据接收并实时可视化显示。 项目的核心是通过Python的`pyserial`库来处理串口通信。`pyserial`库提供了一系列API,使得开发者可以方便地...

    python 串口收发 DEMO 源码

    下面我们将详细探讨Python串口通信的基本概念、常用库以及如何实现串口收发。 1. **Python串口通信基础** Python中的串口通信主要依赖于第三方库`pyserial`。`pyserial`提供了丰富的API来操作串口,包括打开、关闭...

    python串口源代码

    这个“python串口源代码”很可能是为了演示如何在Python中实现串口通信而编写的。下面将详细介绍Python中进行串口操作的基本概念和关键知识点。 1. **pySerial库**: Python中处理串口通信的主要库是`pySerial`,...

    python串口助手

    7. **自定义修改**:由于每个串口通信的应用场景都有其独特性,Python串口助手的源码往往允许用户根据实际需求进行修改,例如添加特定的协议解析、数据加密解密功能等。 通过了解和掌握以上知识点,你将能够有效地...

    python串口升级工具

    Python串口升级工具是一种利用Python编程语言开发的实用程序,专为设备的固件更新而设计。这个工具具有用户界面(UI),使得操作更加直观和便捷。它允许用户选择要应用的升级文件,指定版本号,并能清晰地展示升级...

    Python 串口工具(源码+.exe文件)

    Python串口工具是一种基于Python语言开发的用于串行通信的应用程序。这个工具具有源码以及编译后的.exe可执行文件,方便在不安装Python环境的Windows系统上直接运行。通过这个工具,用户可以进行串口数据的收发,...

    Python串口日志小工具

    Python串口日志小工具是一种基于Python编程语言开发的实用程序,主要用于与硬件设备通过串行接口进行通信,实现数据的收发以及日志记录功能。在嵌入式系统、物联网(IoT)项目或者需要与外部设备进行交互的场景中,...

    python开发的基于串口通讯的上位机应用

    通过这样的组合,开发者可以创建出一个功能完善的串口通信上位机应用,用户可以通过简单的操作控制和监控与串口设备的数据交换。对于初学者来说,这个项目提供了一个很好的实践机会,了解如何将Python与GUI库和硬件...

    python串口测试工具源码

    Python串口测试工具是一款强大的应用程序,它允许用户在多种操作系统平台上进行串行通信的测试和调试,包括Windows、macOS和Linux。这个工具的核心是利用Python语言的强大功能,特别是其跨平台的特性,使得开发者...

    Python 串口实时绘图工具

    这个工具可以帮助工程师和开发者在进行硬件测试、数据采集或者控制系统设计时,方便地监控串口设备输出的数据。 首先,我们要了解Python中的串口通信。Python有许多库可以实现串口通信,例如`pyserial`,它是Python...

    Python 串口读写的实现方法

    Python作为一种高级编程语言,凭借其丰富的库支持和易用性,在串口通信方面有着广泛的应用。本文将详细介绍如何利用Python进行串口读写操作,并通过一个简单的示例来演示具体的实现步骤。 #### 1. 安装pyserial库 ...

    python实时读取串口数据并自动保存至excel

    1. **Python串口通信**:Python提供了`pyserial`库来处理串口通信。通过创建`Serial`对象,设置波特率、校验位、数据位和停止位等参数,可以打开串口并与连接的设备进行数据交换。例如,`ser = serial.Serial(port='...

    python编写串口工具

    通过这个串口工具,用户可以轻松地与各种串口设备交互,例如Arduino、ESP8266等微控制器,进行数据传输、设备调试等工作。它不仅是一个实用的工具,也是学习Python GUI编程和串口通信的绝佳实例。学习和理解这个项目...

    Python串口编程

    ### Python串口编程知识点详解 #### 一、Python串口编程概述 串口通信是一种常见的数据传输方式,广泛应用于各种设备之间的小规模数据...通过这些示例,可以帮助读者快速上手Python串口编程,并应用于实际项目中。

    python3+qt4+pyserial 串口调试助手 串口波形显示

    总的来说,这个"python3+qt4+pyserial 串口调试助手 串口波形显示"项目结合了Python3的编程能力,Qt4的界面设计,以及pyserial的串口通信功能,提供了一个实用的工具,帮助开发者和工程师更高效地进行串口设备的调试...

    python实现的串口工具

    "Python实现的串口工具"就是这样一个应用实例,它允许开发者调试和测试与串口连接的硬件设备。 串口通信是计算机通信的一种方式,广泛应用于嵌入式系统、工业设备以及一些DIY项目中。通过串口,设备间可以传输数据...

    python串口上传文本

    在“python串口上传文本”这个场景下,我们主要关注如何将一个TXT文本文件通过串口发送到指定设备。描述中提到的例子是使用COM1口来上传名为“test.txt”的文本文件。在Python中,你可以这样实现: ```python ...

Global site tag (gtag.js) - Google Analytics