请教python 函数返回值如何读取串口AT命令的返回值

python如何读写串口 - Linux/Unix当前位置:& &&&python如何读写串口python如何读写串口&&网友分享于:&&浏览:256次python怎么读写串口谁有python读写串口的程序实例,只需要有简单的读写操作就可以------解决方案--------------------
http://blog.csdn.net/jakieyoung/article/details/3952783
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有我用的是&线程轮寻&方式。&就是打开串口后,启动一个线程来监听串口数据的进入,有数据时,就做数据的处理(也可以发送一个事件,并携带接收到的数据)。&我没有用到串口处理太深的东西。&客户的原程序不能给你,不过我给你改一下吧。&里面的一些东西,已经经过了处理,要运行,可能你要自己改一下,把没有用的东西去掉。&我这里已经没有串口设备了,不能调了,你自己处理一下吧,不过基本的东西已经有了。&=================================================================&#coding=gb18030&
import sys,threading,&&import binascii,&&&
class ReadThread:&& & def __init__(self, Output=None, Port=0, Log=None, i_FirstMethod=True):&& & & & self.l_serial = N&& & & & self.alive = F&& & & & self.waitEnd = N&& & & & self.bFirstMethod = i_FirstM&& & & & self.sendport = '';&& & & & self.log = L&& & & & self.output = O&& & & & self.port = P&& & & & self.re_num = N&
& & 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 = F&& & & & self.stop();&
& & def start(self):&& & & & self.l_serial = serial.Serial();&& & & & self.l_serial.port = self.&& & & & 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:&& & & & & & & & (u'打开通讯端口');&& & & & & & self.l_serial.open();&& & & & except Exception, ex:&& & & & & & if self.l_serial.isOpen():&& & & & & & & & self.l_serial.close();&
& & & & & & self.l_serial = N&
& & & & & & 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 F&
& & & & if self.l_serial.isOpen():&& & & & & & if not self.output is None:&& & & & & & & & self.output.WriteText(u'创建接收任务\r\n');&& & & & & & if not self.log is None:&& & & & & & & & (u'创建接收任务');&& & & & & & self.waitEnd = threading.Event();&& & & & & & self.alive = T&& & & & & & self.thread_read = N&& & & & & & self.thread_read = threading.Thread(target=self.FirstReader);&& & & & & & self.thread_read.setDaemon(1);&& & & & & & self.thread_read.start();&& & & & & & return T&& & & & else:&& & & & & & if not self.output is None:&& & & & & & & & self.output.WriteText(u'通讯端口未打开\r\n');&& & & & & & if not self.log is None:&& & & & & & & & (u'通讯端口未打开');&& & & & & & return F&
& & 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:&& & & & & & & & (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();&& & & & & &&
& & & & if not self.output is None:&& & & & & & self.output.WriteText(u'开始接收数据\r\n');&& & & & if not self.log is None:&& & & & & & (u'开始接收数据');&& & & & & & self.output.WriteText(u'===================================\r\n');&
& & def SendData(self, i_msg):&& & & & lmsg = '';&& & & & isOK = F&& & & & if isinstance(i_msg, unicode):&& & & & & & lmsg = i_msg.encode('gb18030');&& & & & else:&& & & & & & lmsg = i_&& & & & try:&& & & & & &#发送数据到相应的处理组件&& & & & & & pass&& & & & except Exception, ex:&& & & & & &&& & & & return isOK;&
& & def FirstReader(self):&& & & & data1 = '';&& & & & isQuanJiao = T&& & & & isFirstMethod = T&& & & & isEnd = T&& & & & 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 = T&& & & & & & & & & & & &&& & & & & & & & & & if ord(data[l])==0x8F:&& & & & & & & & & & & & isQuanJiao = F&& & & & & & & & & & & &&& & & & & & & & & & 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 = '';&& & & & & & & & & & & &&& & & & & & except Exception, ex:&& & & & & & & & if not self.log is None:&& & & & & & & & & & self.log.error(u'%s' % ex);&
& & & & self.waitEnd.set();&& & & & self.alive = F&
& & def stop(self):&& & & & self.alive = F&& & & & 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:&& & & & & & & & (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:&& & & & & & & & & & & &&& & except Exception,se:&& & & & print str(se);&
& & if rt.alive:&& & & & rt.stop();&
& & print 'End OK .';&& &
阅读(...) 评论()请教python如何读取串口AT命令的返回值
请教python如何读取串口AT命令的返回值
发布时间: 2:49:41
编辑:www.fx114.net
本篇文章主要介绍了"请教python如何读取串口AT命令的返回值
100qq]",主要涉及到请教python如何读取串口AT命令的返回值
100qq]方面的内容,对于请教python如何读取串口AT命令的返回值
100qq]感兴趣的同学可以参考一下。
在使用python发送AT命令,读取返回值的时候遇到如下问题:
&&&&ser&=&serial.Serial('COM4',&timeout=5)
&&&&ser.write('at+creg=?\r')
&&&&ser.readline()
&&&&ser.readline()
'+CREG:&(0-3)\r\n'
&&&&ser.readline()
&&&&ser.read()
&&&&ser.readlines()&&----这里会用满timeout的5s才返回下面的列表
['\r\n',&'+CREG:&(0-3)\r\n',&'\r\n',&'OK\r\n']
而正常用软件的话应该返回:
+CREG:&(0-3)
求教该使用什么命令可以完整读取ser的返回值?line&=&[]
while&True:
&&&&for&c&in&ser.read():
&&&&&&&&line.append(c)
&&&&&&&&if&c&==&'\n':
&&&&&&&&&&&&print("Line:&"&+&line)
&&&&&&&&&&&&line&=&[]
&&&&&&&&&&&&break引用&1&楼&iasky&的回复:line&=&[]
while&True:
&&&&for&c&in&ser.read():
&&&&&&&&line.append(c)
&&&&&&&&if&c&==&'\n':
&&&&&&&&&&&&print("Line:&"&+&line)
&&&&&&&&&&&&line&=&[]
&&&&&&&&&&&&break
感谢您的回复,但是这并不是我想要的答案。
解释下,当我发送ser.write的时候可以看到如下状态,
&&&&ser.write('at+creg=?\r')
&&&&type(ser)
&class&'serial.serialwin32.Serial'&
&&&&type(ser.read())
&type&'str'&
&&&&type(ser.readline())
&type&'str'&
&&&&type(ser.readlines())
&type&'list'&
我不清楚python和串口如何交互的,但这时候的ser.read是字符串,只有ser.readlines()的时候才是列表,比较困惑。
我的希望是ser像一个文本一样,可以一次性读取完整。readlines的定义就是返回为list啊,你可以再对这个list进行处理
你要实时的输出,可以直接使用read来做,例子就是我刚刚上面提到的那个。1.&第一个想法是先试试read(0)(应该没用,理由是2)
2.&这儿的问题是ser(作为可读文件)的内容是随着时间改变的,所以要求read()“把ser的内容一下子读出来”,这个要求不明确,它不知道什么时候ser的内容才完整了,可以停下来。API提供的停止read()的办法有两个:字符数量和timeout,前者的问题是你不知道确切的返回字符的个数,timeout的问题是timeout的值可能太大(浪费时间)或太小(读不完整)。
另外一个办法是你自己判断何时停下来:对每一格输入,持续读取输出,直到读到一行非空的文本(这个规则只是个例子,具体规则取决于你的应用)。可以用二楼的办法自己写或者用readline(如果它会block的话)。
3.&普通的文件,也是read()返回字符串,readlines返回列表。谢谢各位,其实ser.write('at+creg=?\r')这个命令只要发出去了,就会立即回复+CREG:&(0-3)&OK的,而不是需要等几秒,就像ser.readlines()这个等到timeout到了就会包含所有内容,我不清楚的就是这个ser的接收机制到底是什么样的。
本文标题:
本页链接:之前用的时候是用Terminal这个小软件,前几天帮实验室一个哥们对反应器进行自动化改造的时候,发现原来Python可以直接读写串口数据,有个叫做的python组件,安装之后,就可以直接使用Python代码读写以及处理串口数据了。简单、灵活、易用。
pySerial的网站上给出的比较复杂,下面是一个比较简单的测试代码:
import time
import serial
ser = serial.Serial( #下面这些参数根据情况修改
port='COM1',
baudrate=9600,
parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.SEVENBITS
while ser.inWaiting() & 0:
data += ser.read(1)
if data != '':
print data
如转载,请以超链接形式注明:转载自: [
] 本文链接地址:python serial 获取所有的串口名称
#!/usr/bin/env python
# -*- coding: utf-8 -*
import serial
import serial.tools.list_ports
port_list = list(serial.tools.ports())
if len(port_list) &= 0:
print &The Serial port can't find!&
port_list_0 =list(port_list[0])
port_serial = port_list_0[0]
ser = serial.Serial(port_serial,9600,timeout = 60)
print &check which port was really used &&,ser.name
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置.下面介绍几种python中获取异常信息的方法,这里获取异常(Exception)信息采用try...except...程序结构.如下所示 try: ... except Exception, e: ...
1.str(e) 返回字符串类型,只给出异常信息,不包括异常信息的类型, ...
如何采用Python zabbix_api 获取性能数据 最近领导需要一份数据,OpenStack ,VMware,物理机之间的性能报告,在撰写报告之前需要数据支撑,我们采用的是zabbix 监控,需要采取一周内的历史数据作为对比,那数据如何获取,请看以下章节 一:安装zabbix api 接口,修改zabbix api 调用接口,获取数据 ******** ...
c#可以遍历局域网计算机,获取全部计算机的名称和IP地址,网上提供了相关的几种方法,并对效率进行了比较,但是没有对各种方法进行比较,以确定可以使用的情况.这篇文章将对这几种方法进行分析,以帮助了解各种方法适用的情况.
1 using S 2 using System.Collections.G 3 using System.Co ...
在编程过程中,常常需要获取程序的路径,并对路径进行分解和合并,这时就使用到了_splitpath.同时与之相反的功能函数有:_makepath.与之相关的函数有:FindFirstFile等. void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext ...
PostgreSQL数据库中获取表主键名称
一.如下表示,要获取teacher表的主键信息: select pg_constraint.conname as pk_name,pg_attribute.attname as colname,pg_type.typname as typename from pg_constraint inner join ...
原文:/powerwu/articles/3393582.html
大家所熟悉的是通过对象属性来访问该属性的值,或是由字符串通过反射来获取属性,并取值.今天我要说的是,通过对象的属性来获取该属性的名称,其意义在于拼接字符串时显示该名称,特别是自行拼接 SQL语句.下列代码是个简单测试类:
C#实现联系不同版本的EXCEL,excelPath是获取到的文件名称 string fileExt = Path.GetExtension(excelPath); string conn = &&; if (fileExt == &.xls&) { conn = &Provider = Microsof ...
一个matlab获取目录中图像名称及路径的递归实现~
matlab源文件
getImageList.m function [ imageList ] = getImageList( imageListCur, rootDir, imageDir, imageType ) % 输入参数说明: % imageListCur 当 ...}

我要回帖

更多关于 python 返回值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信