导航:首页 > 编程语言 > python与电脑com口通信

python与电脑com口通信

发布时间:2024-07-11 06:08:35

1. python 如何防止串口通信失败

Python中串口出现异常通常有:1.打开串口时,串口不存在,2.写串口时,3.读串口时。这几个异常是经常会碰到的(有经验的人就深有体会),一旦异常出现了,整个程序很可能会因此就运行不下去了。避免因为这些异常的出现而导致程序死机的方法是对这些可能存在的异常进行捕捉。举一个例子:
try:
ComDev.read(1)
print "read Com ok!"
except:
print "read Com error!"
上面的代码意思是:对ComDev这个串口对象读取一个字节,如果读成功,就接着执行print "read Com ok!"而不执行except以下的语句,如果读出现异常,就执行print "read Com error"而不执行
print "read Com ok!"
当然系统还会抛出异常信息,只是我这里没有进行接收,个人觉得很多异常不必接收其信息。

2. 如何用python实现串口通信

Python非常适合写一些测试的脚本,如快速的串口通信测试等。如果使用VC++ QT开发,可能用时较多,使用python,如果掌握使用方法,可以直接读写测试,配合设备或是串口助手,很快验证与实现。
Python有没有现成的串口API直接调用呢?经过实践验证,需要安装一个叫 Pyserial的组件即可。这个可以在github上下载。

在windows 7 64bit 上可以使用吗?当然可以使用,我安装的python3.5为64位的。把下载后的文件,其中有一个serial的文件夹,拷贝到python35安装路径, C:\Python35\Lib\site-packages\serial
网上可以搜一下windows的安装包,安装完也是:C:\Python35\Lib\site-packages\serial ,可以用最新的版本,替换即可。
测试的方法:在python IDE里测试:
>>> import serial
这里如果报错,是python版本与pyserial版本没有配合好。如果正常,不返回,即可以导入serial模块。
>>> ser=serial.Serial("COM5",115200)
这里为COM5,115200的波特率。如果打不开,请检查安装环境。
>>> ser.write('hello,serial test'.encode())
17
发送测试(如果返回字节数,说明返回成功),这里需要转换一个编码为字节。
以上测试,可以使用现在的设备或是串口助手,如安装Virtual Serial Port Driver 7.2 虚拟串口软件,设置一对串口,进行自发自收的测试。
>>> print(ser.readline())
b'abcdefg\r\n'
这里是串口接收,有接收的超时。设备或是串口助手发送一个字符串,以回车换行结束,这里就可以收到打印出来。
也可以用ser.read(),这里只接收一个字符来实现。
上面已经实现了基本的串口操作。
关闭串口为:
>>> ser.close()
如果使用python,一般写个py文件,就像windows bat 批处理一样,这是python强大的地方。如果写一个py脚本呢?其实只要把上面的命令,一条条写下来,就是一个脚本,测试如下:
import serialser=serial.Serial("COM5",115200,timeout=0.5)for i in range(0,100-1):ser.write('hello\r\n'.encode())print(ser.readline());ser.close()

3. xdm,,pythonsocket一台电脑可以通信,两台电脑

xdm,pythonsocket一台电脑可以通信两台电脑。使用python的socket编程实现两台电脑之间的通信可以使用两种方式完成。python开发简单socket程序在两台电脑之间传输消息,分为客户端和服务端,分别在两台电脑上运行后即可进行简单的消息传输,也可在一台电脑上测试,设置两个不同的端口。

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

打开串口后启动一个线程来监听串口数据的进入,有数据时,就做数据的处理。

5. 濡备綍鐢╬ython鍐欎釜涓插彛阃氢俊镄勭▼搴

鎴戠敤镄勬槸钬灭嚎绋嬭疆瀵烩濇柟寮忋
灏辨槸镓揿紑涓插彛钖庯纴钖锷ㄤ竴涓绾跨▼𨱒ョ洃钖涓插彛鏁版嵁镄勮繘鍏ワ纴链夋暟鎹镞讹纴灏卞仛鏁版嵁镄勫勭悊锛堜篃鍙浠ュ彂阃佷竴涓浜嬩欢锛屽苟鎼哄甫鎺ユ敹鍒扮殑鏁版嵁锛夈
鎴戞病链夌敤鍒颁覆鍙e勭悊澶娣辩殑涓滆タ銆
瀹㈡埛镄勫师绋嫔簭涓嶈兘缁欎綘锛屼笉杩囨垜缁欎綘鏀逛竴涓嫔惂銆
閲岄溃镄勪竴浜涗笢瑗匡纴宸茬粡缁忚繃浜嗗勭悊锛岃佽繍琛岋纴鍙鑳戒綘瑕佽嚜宸辨敼涓涓嬶纴鎶婃病链夌敤镄勪笢瑗垮幓鎺夈
鎴戣繖閲屽凡缁忔病链変覆鍙h惧囦简锛屼笉鑳借皟浜嗭纴浣犺嚜宸卞勭悊涓涓嫔惂锛屼笉杩囧熀链镄勪笢瑗垮凡缁忔湁浜嗐
=================================================================
#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'阃氲绔鍙f湭镓揿紑\r\n');
if not self.log is None:
self.log.info(u'阃氲绔鍙f湭镓揿紑');
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'鍏抽棴阃氲繀绔鍙o细[%d] \r\n' % self.port);
if not self.log is None:
self.log.info(u'鍏抽棴阃氲繀绔鍙o细[%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;

6. python Tkinter GUI 串口通信 显示。

后台线程将数据写到一个缓冲区,也就是全局变量(可以用队列)里。然后在界面上使用一个timer,定时刷新,从缓冲区获取数据后写到控件上。

原理是这样子。你摸索一下就解决了。有一本书,python tkiner编程,有电子版的。基本上你所要的所有东西都可以找到。

7. Python如何进行多串口通信一个串口控制电机 一个串口采集数据

下载 pyserial包
def OpenCom(self,*args): #设置端口和波特率 selComPort =‘com2’ #波特率 selBaudRate =9600 #奇偶校验 selParity = 'N' try: if(not self.mySerial): self.mySerial = serial.Serial(port=selComPort, baudrate=selBaudRate,bytesize=8,parity=selParity,stopbits=1,timeout=5) else: if(self.mySerial.isOpen()): self.mySerial.close() self.mySerial = serial.Serial(port=selComPort, baudrate=selBaudRate, bytesize=8, parity=selParity, stopbits=1, timeout=5) self.lblInfo['text'] = '打开成功!' except Exception as ex: self.lblInfo['text'] = '打开失败!'

#使用com口发送modbus协议给终端设备。
def btnEmId_Click(self):
barray = bytearray([0x05, 0x03, 0xA#, 0x54, 0x00, 0x08])
vOldEmId = self.txbOldEmId.get()
vNewEmId = self.txbNewEmId.get()
barray[0] = int(vOldEmId)
barray[5] = int(vNewEmId)
#crc校验
strInput = utils.crc16_append(barray)
print(barray)
n = self.mySerial.write(barray)
if(n > 0):
str = self.mySerial.readall()
self.lblInfo['text'] = 'success!'
# for s in str:
# print (hex(s))
else:
self.lblInfo['text'] = 'error!'

阅读全文

与python与电脑com口通信相关的资料

热点内容
安卓路由表怎么看 浏览:74
10个小孩分糖果python 浏览:823
安卓app小红点怎么取消 浏览:286
马哥linux面授 浏览:768
2345程序员 浏览:371
怎么开启网速显示安卓 浏览:204
索尼950app怎么样 浏览:391
计算机毕设论文源码 浏览:148
小米手机怎么下载易媒体App 浏览:191
还原系统设计可以怎样清理文件夹 浏览:670
北京时间校准服务器云服务器 浏览:844
pythonexcel数据计算 浏览:49
内医附院党建APP怎么下载 浏览:356
荣耀v20刷加密门禁卡 浏览:329
app缓冲视频怎么保存在手机 浏览:433
广度优先算法c语言 浏览:680
提高程序员竞争力 浏览:108
nfc可以开加密门卡吗 浏览:675
如何知道网页使用的服务器是什么 浏览:224
单片机接反电源会烧吗 浏览:287