网站建设资讯

NEWS

网站建设资讯

python串口函数源码 python做串口通讯

如何查看python库函数的代码?

python 所有版本的源代码可以在这里下载到:

在南昌县等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、成都网站制作 网站设计制作按需规划网站,公司网站建设,企业网站建设,品牌网站制作,网络营销推广,外贸网站建设,南昌县网站建设费用合理。

python没有像matlab那样的函数可以直接查看某个函数的源代码,只有去下载整个源代码查看了,不过找起来应该也不难,另外你也可以写一个小程序来查看对应函数的源代码。

Python的函数调用方式是通过import来调用的对应的py文件。

库函数有内建函数build_in(会写python的时候已经可以不用看了,不会写的时候看也看不懂),和通过pip直接下载或者github上下载再安装的函数。本质上都是py文件。后者有时候由于环境的不同需要自行修改(这种情况较少),一般在安装路径下"\Lib\site-packages"文件夹中存在。

学习库函数最好的方法是看网上官方的帮助文档,此外还可以通过python自带的dir()方法查看所有的属性和方法,或者用help()方法查看帮助文档(部分别人造的轮子不一定有)。

另外推荐使用ipython,Python创始人之一的成员编写的交互式系统。

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

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

我没有用到串口处理太深的东西。

客户的原程序不能给你,不过我给你改一下吧。

里面的一些东西,已经经过了处理,要运行,可能你要自己改一下,把没有用的东西去掉。

我这里已经没有串口设备了,不能调了,你自己处理一下吧,不过基本的东西已经有了。

=================================================================

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

python的串口close()函数关闭不成功

用ser.isOpen()查看返回False,说明ser.close()起作用了啊。用管理员身份打开cmd,再执行脚本试试?


标题名称:python串口函数源码 python做串口通讯
网站链接:http://njwzjz.com/article/dosjgos.html