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

如何用python写个串口通信的程序?

阅读更多

http://www.douban.com/group/topic/7400483/

 

<script></script>

如何用python写个串口通信的程序?

如影随形

2009-07-26 16:08:18 来自: 如影随形(但行好事,莫问前程)

用tKinter做界面

  • 代码人

    2009-07-26 16:11:05 代码人 (敏而好学,杰而不傲)

    http://pyserial.sourceforge.net/


    使用pySerial模块

  • 如影随形

    2009-07-26 16:57:40 如影随形 (但行好事,莫问前程)

    没有代码啊,我找到过一个http://currentlife.blog.sohu.com/53741351.html,他里面上来就调用 serial,我在我的IDLE中 import serial print serial.__doc__,显示没有这个模块。

  • 如影随形

    2009-07-26 17:18:53 如影随形 (但行好事,莫问前程)

    搜狐博客 > 一二三事 > 日志 2007-07-05 | python 串口通信 标签: python 串口 Jeffu:

    我用的是“线程轮寻”方式。
    就是打开串口后,启动一个线程来监听串口数据的进入,有数据时,就做数据的处理(也可以发送一个事件,并携带接收到的数据)。
    我没有用到串口处理太深的东西。
    客户的原程序不能给你,不过我给你改一下吧。
    里面的一些东西,已经经过了处理,要运行,可能你要自己改一下,把没有用的东西去掉。
    我这里已经没有串口设备了,不能调了,你自己处理一下吧,不过基本的东西已经有了。
    =================================================================
    #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;

  • 如影随形

    2009-07-26 17:20:45 如影随形 (但行好事,莫问前程)

    这是个Tkinter界面,能不能把他们两个做个拼盘,
    # -*- coding: utf-8 -*-
    from Tkinter import *
    import Tkinter
    from tkMessageBox import *

    class EntryDemo(Frame):

    def __init__(self,parent):

    Frame.__init__(self)
    self.pack(expand=YES,fill=BOTH)
    self.master.title("串口通信")

    self.frame1=Frame(self)
    self.frame1.pack(pady=5)
    self.text1=Entry(self.frame1,name="显示")
    self.text1.bind("<Return>",self.showContents)
    self.text1.pack(side=LEFT,padx=5)

    self.frame2=Frame(self)
    self.frame2.pack(pady=5)
    self.text2=Entry(self.frame2,name="显示")
    self.text2.bind("<Return>",self.showContents)
    self.text2.pack(side=LEFT,padx=5)

    self.sendButton = Button(self.frame1, text="发送", command = self.pressedPlain)
    self.sendButton.pack(side=LEFT, padx =5)

    def showContents(self, event):
    theName=event.widget.winfo_name()
    theContents=event.widget.get()
    showinfo("Message", theName +":"+ theContents)

    def pressedPlain(self):
    showinfo("Message","数据")


    def main():
    root = Tkinter.Tk()
    widget = EntryDemo(root)
    root.mainloop()

    if __name__=="__main__":
    main()

  • 如影随形

    2009-07-26 19:40:14 如影随形 (但行好事,莫问前程)

    我下载了pyserial,解压开有example, serials,把serial文件夹里的.py文件拷贝到python安装目录下的lib文件家里面吗?

分享到:
评论

相关推荐

    实现两个设备之间的串口通信(python源程序)

    这是基于串口通信的python源程序,亲自调试没有问题。将自己PC通过串口连接其他PC或者兼容串口通信的设备或者传感器,可以读取到对方发送的数据。注意第一次发送的cmd地址指令集中的数据要符合自己的报文通信格式。

    树莓派串口通信Python程序

    利用python开发上位机,串口通信,源码

    利用python开发上位机,用于串口通信,将串口通信访问到的数据,并将数据以表格和波形的形式显示出来,注释清晰,对小白相当友好,文件夹中,main.py为主函数,MyWindow.py存放按键响应,串口通信等等各个控件的子...

    基于python编写的串口调试助手,内含.exe程序和源代码

    总之,这个基于Python的串口调试助手提供了一种简单易用的方式来测试和调试串行通信,对于学习串口通信、开发硬件设备或物联网项目的人来说,是一个非常有价值的工具。提供的源代码和DLL文件则进一步增强了其实用性...

    python编写的串口调试工具

    在本文中,我们将深入探讨Python的串口通信库PySerial以及如何使用它来创建串口调试工具。 PySerial是Python的一个扩展模块,专门用于处理串行通信。它提供了丰富的功能,如打开和关闭串口、发送和接收数据、设置...

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

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

    python 实现RFID串口数据读取(csdn)————程序.pdf

    总结来说,Python实现RFID串口数据读取涉及的关键点是使用pyserial模块进行串口通信,初始化串口参数,以及正确地读取和处理RFID数据。在实际应用中,可能还需要考虑到数据的解析、错误处理、实时性等问题,以适应...

    树莓派与STM32串口通信程序

    3. **编写通信程序**:在树莓派上,你可以编写一个Python程序,使用`serial`库(也称为pySerial)来读写串口。而在STM32端,你需要编写C/C++代码,使用STM32的HAL或LL库的串口发送和接收函数。 4. **测试通信**:...

    三菱FX3U与串口调试助手进行串口通信程序示例及配置步骤

    本文将详细介绍三菱FX3U PLC与串口调试助手进行串口通信的配置步骤、特殊寄存器使用、指令说明及示例程序,从而为初学者和非专业人士提供指导。 ### 通信准备与配置 在进行串口通信之前,首先需要准备相应的硬件...

    串口通信程序及调试软件

    此资源提供的串口通信程序可能是用编程语言(如C、C++或Python)编写的,具有发送和接收数据的功能。用户可以通过这个程序学习如何设置串口参数,如何打开和关闭串口,以及如何处理数据传输。调试软件则可能提供图形...

    python+pyqt串口发送程序

    通过这个程序,开发者可以学习到如何使用Python的PySide库创建GUI,以及如何结合`pyserial`库进行串口通信。同时,对于需要开发类似串口应用的人来说,这个软件提供了一个很好的起点,他们可以在此基础上修改和扩展...

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

    本文将详细解析使用Python进行串口通信的上位机应用开发,结合给定的标签"python pyside2 pyserial",我们可以看到这个项目涉及到的技术栈。 首先,`Python`是一种高级编程语言,以其简洁的语法和丰富的库资源深受...

    serial_串口通信_python_seriousmm6_

    本文将深入探讨如何使用Python进行串口通信,并结合SeriousMM6工具,构建一个简易的串口通信系统。 串口通信,又称串行通信,是一种数据传输方式,它将数据逐位按顺序进行传输。在Python中,我们通常使用`pySerial`...

    .net调用Python进行串口通信

    本文将详细介绍如何使用.NET调用Python脚本来实现串口通信,并探讨涉及的关键技术点。 首先,我们要了解.NET调用Python的基础:IronPython。IronPython是一个开源的.NET实现,它允许.NET应用程序直接运行Python代码...

    基于python实现串口GUI编程

    这样的方法适合初学者快速上手Python串口编程,同时也为更复杂的项目提供了基础。随着技能的提升,开发者还可以进一步完善GUI界面,添加错误处理机制,以及支持更多高级功能,如波特率动态调整、多种设备连接管理等...

    python串口传输.rar

    python串口通信,读取文件内容并通过串口传输至接收程序。

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

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

    Python 串口实时绘图工具

    Python有许多库可以实现串口通信,例如`pyserial`,它是Python中广泛使用的串口通信库。通过`pyserial`,我们可以打开、配置(如设置波特率、数据位、停止位等)和读写串口。在这个工具中,它能自动检测串口端口的...

    CKTH.rar_串口通信_串口通信程序_读取串口

    在标题“CKTH.rar_串口通信_串口通信程序_读取串口”中,我们可以推测这是一个关于串口通信的程序资源包,包含了实现串口读取功能的代码或工具。描述指出,这个程序模块简单高效,适用于直接集成到其他项目中进行...

Global site tag (gtag.js) - Google Analytics