python实现串口通信 要导入serial的包 而且刚开始在等待接受收到0x45退出

[python]  view plain  copy
  1. import sys,threading,time;  
  2. import serial;  
  3. import binascii,encodings;  
  4. import re;  
  5. import socket;  
  6. from struct import *;  
  7.   
  8. class ComThread:  
  9.     def __init__(self, Port=1):  
  10.         self.l_serial = None;  
  11.         self.alive = False;  
  12.         self.waitEnd = None;  
  13.         self.port = Port;  
  14.   
  15.   
  16.     def waiting(self):  
  17.         if not self.waitEnd is None:  
  18.             self.waitEnd.wait();  
  19.   
  20.   
  21.     def SetStopEvent(self):  
  22.         if not self.waitEnd is None:  
  23.             self.waitEnd.set();  
  24.         self.alive = False;  
  25.         self.stop();  
  26.   
  27.   
  28.     def start(self):  
  29.         self.l_serial = serial.Serial();  
  30.         self.l_serial.port = self.port;  
  31.         self.l_serial.baudrate = 9600;  
  32.         self.l_serial.timeout = 2;  
  33.         self.l_serial.open();  
  34.   
  35.         if self.l_serial.isOpen():  
  36.             self.waitEnd = threading.Event();  
  37.             self.alive = True;  
  38.             self.thread_read = None;  
  39.             self.thread_read = threading.Thread(target=self.FirstReader);  
  40.             self.thread_read.setDaemon(1);  
  41.             self.thread_read.start();  
  42.             return True;  
  43.         else:  
  44.             return False;  
  45.   
  46.   
  47.     def FirstReader(self):  
  48.         print "waiting data"  
  49.         while self.alive:  
  50.             time.sleep(0.01);  
  51.             try:  
  52.   
  53.                 data = '';  
  54.                 n = self.l_serial.inWaiting();  
  55.                 if n:  
  56.                     data = data + self.l_serial.read(n);  
  57.                     #for l in xrange(len(data)):  
  58.                     #    print '%02X' % ord(data[l]),  
  59.                     #snddata = '';  
  60.                     #snddata += chr(97)  
  61.                     #tt = 0x12345678;  
  62.                     #snddata += pack('i', tt)  
  63.                     #snddata += chr(0x64)  
  64.                     #print snddata;  
  65.                     #self.l_serial.write(snddata);  
  66.                     snddata= pack('i'0x12345600)  
  67.                     snddata+= pack('B'0x11)  
  68.                     self.l_serial.write(snddata);  
  69.   
  70.                 if len(data) > 0 and ord(data[len(data)-1])==0x0a:  
  71.                     #pass;  
  72.                     break;  
  73.                  
  74.             except Exception, ex:  
  75.                 print str(ex);  
  76.   
  77.   
  78.         self.waitEnd.set();  
  79.         self.alive = False;  
  80.   
  81.   
  82.     def stop(self):  
  83.         self.alive = False;  
  84.         self.thread_read.join();  
  85.         if self.l_serial.isOpen():  
  86.             self.l_serial.close();  
  87.   
  88.   
  89.   
  90. #  
  91. if __name__ == '__main__':  
  92.     rt = ComThread();  
  93.     try:  
  94.         if rt.start():  
  95.             rt.waiting();  
  96.             rt.stop();  
  97.         else:  
  98.             pass;              
  99.     except Exception,se:  
  100.         print str(se);  
  101.   
  102.      
  103.   
  104.     if rt.alive:  
  105.         rt.stop();  
  106.   
  107.   
  108.     print '';  
  109.     print 'End OK .';  
  110.     del rt;  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值