Python中文
首页
教程
问答
标签
搜索
登录
注册
在Python中如何从线程打开串行端口
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>几个星期以来,我一直在思考如何从线程打开串行COM端口, 能够从另一个线程写入/读取它。在我的示例中,当我从另一个线程写入端口时,存在拒绝访问的情况。 当我从主GUI打开端口时,它工作得很好,我可以从线程中编写它,但我需要给用户选择COM编号的可能性。 这是我的代码,如果有人能帮我看看,那就太好了。。。在</p> <pre><code>class Connect(QThread): connectResult = QtCore.pyqtSignal(str) position1 = QtCore.pyqtSignal(str) actuPosResult = QtCore.pyqtSignal(str) def __init__(self, myvar, parent=None): QThread.__init__(self, parent) self.myvar = str(myvar) # value from spinbox def run(self): self.pserial = serial.Serial() try: COMnumber= self.myvar self.pserial = serial.Serial('COM'+COMnumber, 115200,timeout=None) r='COM '+COMnumber+' connected.' self.pserial.write("c".encode('ascii')+"\n".encode('ascii')) incomingByte = self.pserial.read() decodedByte = incomingByte.decode("utf-8") if decodedByte == ('c'): r='Atmega On-Line' self.connectResult.emit(r) pos1='---' self.position1.emit(pos1) else : r=' No answer from Atmega.' self.connectResult.emit(r) def stop(self): self.terminate() class ReadingEncoder(QThread): actuPosResult = QtCore.pyqtSignal(str) def __init__(self, mojazmienna, parent=None): QThread.__init__(self, parent) self.mojazmienna = str(mojazmienna) def run(self): Try: self.pserial = serial.Serial() self.pserial = serial.Serial('COM3', 115200,timeout=1) self.pserial.write("p".encode('ascii')+"\n".encode('ascii')) incomingByte = self.pserial.read() decodedByte = incomingByte.decode("utf-8") actualPos = '' if decodedByte == ('a'): while decodedByte != ('\n'): incomingByte = self.pserial.read() decodedByte = incomingByte.decode("utf-8") actualPos = actualPos + decodedByte pos= actualPos.rstrip('\n')# pozycja w formacie string print(pos) self.actuPosResult.emit(pos) except (EOFError, OSError, IOError, ValueError, RuntimeError, BrokenPipeError, InterruptedError, TimeoutError): print('Thread readingEncoder error') self.pserial.close() </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>你试图打开端口多次。在</p> <p>而不是这样做,你有几个选择</p> <ul> <li>创建一个<code>Serial</code>对象,并将其传递给必须使用它的线程。在</li> <li>提供要使用的串行端口的名称,并让它打开该端口。在</li> </ul> <p>在这两种情况下,请确保线程在退出时正确关闭端口!在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何根据与其他行比较的列表筛选序列?
3 回答
如何根据与前一行的差异对行进行分组?
4 回答
如何根据与另一个图像匹配的图像特征来变换图像?
7 回答
如何根据与另一个模型的关系在模板视图中查询另一个Django模型
8 回答
如何根据与已知参考轨迹的距离过滤出位置数据?
2 回答
如何根据与现有值比较的下限和上限创建新的pandas系列
4 回答
如何根据与输入字符串共享的特征从数据集中获取值
2 回答
如何根据与长生不老药的多对多关系排序?
6 回答
如何根据世代显示,x'攻击'和y'防御'
8 回答
如何根据两个CSV文件中的公共信息用Python合并两个CSV文件?
7 回答
如何根据两个CSV文件的相似性比较它们的行?
1 回答
如何根据两个不同列的值在一列中填充NaN
9 回答
如何根据两个不同列的日期获取交叉联接表的唯一记录?
2 回答
如何根据两个不同列表中的相应值创建if语句?
6 回答
如何根据两个不同栏目的分数组成三个不同的班级,有人能指导我吗,请参考我的代码
4 回答
如何根据两个不同的字符串检查变量?9行examp
6 回答
如何根据两个值对词典进行分组?
6 回答
如何根据两个列表获得自定义元组的计数
8 回答
如何根据两个变量的条件打印特定输出
7 回答
如何根据两个变量重新采样以均匀地派生类?
8 回答