入门级Python应用程序---伺服电机控制
v信@宝德,百度@baode_w
前言
本文只适合像作者这样的入门级小白,大虾级别的请忽略。
由于作者水平有限,不当之处,欢迎批评指正。
本文所述应用程序只考虑功能实现,不考虑程序优化。
一、应用环境
系统环境:Window 10;
Python版本:3.7;
IDE:PyCharm;
界面设计:PYQT5;
电机:光毓机电RMD-S系列电机;
控制端口:RS-485,使用USB转485模块。
二、准备环境
软件安装及环境变量设置方法网上较多,请自行查阅,这里不再赘述。
双击打开PyCharm,新建一个New Project,注意添加项目的环境依赖venv。配置下Python3.7的依赖环境库venv library root,External Libraries—>Python 3.7(venv) —>venv library root—>pyvenv.cfg,将值改成“true”,如下图。
为PyCharm添加外部工具,File→Settings→Tools→External Tools→“+”。
以PYQT5为例,单击“+”,弹出新建外部工具对话框,如下图所示。
对话框中Name是在IDE中的显示名字,可以自定义填写。Tool Settings需填写两项,Program项单击浏览Python3.7根目录“Python37\Lib\site-packages\pyqt5_”(当然,你得先安装有PYQT5,>_<),Working directory项填入“$ProjectFileDir$”,其他选项默认即可,单击“OK”保存。
其他外部工具如PYUIC、PYRCC等,添加过程类似。
三、编写程序
在项目中新建两个py文件,其中一个py文件(PTContrl.py)关联QT界面的信号(Signal)和槽(Slot),另外一个py文件(PTMainPRO.py)用来编写主程序,如此便于分离QT界面和逻辑程序,避免修改界面时对主程序存在干扰,当修改QT界面时,QT只会更新PTContrl.py,不会更新主程序。
主程序中需要包含PTContrl完成调用,以及主程序需要加载一些要用到的模块,如sys、serial、Qtimer等,如下图所示。
主程序功能包括,串口端口检测、波特率设置、打开端口,串口实时发送两个电机的角度值、速度值、转动方向,定时从串口接收两个电机编码器数据,并解码显示角度值。
主程序PTMainPRO.py完整代码如下:
import sys
import serial
import binascii
ls.list_ports
#from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog
from PyQt5.QtWidgets import QMessageBox
from time import sleep
python入门教程非常详细下载import PTContrl
哪些网页游戏好玩
#import PDial
#from ActiveMain import RulerProgress
#主程序
class MainControl(QMainWindow,PTContrl.Ui_SFmotorcontrol):
def __init__(self):
QMainWindow.__init__(self)
PTContrl.Ui_SFmotorcontrol.__init__(self)
self.setupUi(self)
self.ser = serial.Serial()
self.data_num_sended = 0
self.speed1_H = 1#电机1速度高8位
self.speed1_L = 244  # 电机1速度,0x1F4,5dps
self.speed2_H = 1#电机2速度5dps高8位
self.speed2_L = 244  # 电机2速度5dps,低8位
self.BaudSelect_box.addItem("115200")
self.BaudSelect_box.addItem("19200")
self.BaudSelect_box.addItem("57600")
self.BaudSelect_box.addItem("9600")
<_dir = 0
<_dir1 = 0
self.address1 = 1
self.address2 = 2
self.dir_left = 0
self.dir_right = 1
self.dir_up = 0
self.dir_down = 1
self.ask_flag = 0
self.auto_flag = 0
self.auto_stop = 0
<_auto_act =0
self.timer1 = QTimer(self)
self.timer1_timeout = 250#timer1溢出时间250ms
#for addr in range(1,33,1):
#  self.AddrSelect1.addItem(str(addr))
#  self.AddrSelect2.addItem(str(addr))达芬奇直方图怎么看
self.port_check()
self._Connect)#按钮点击事件链接到自定义对象
#self.dial_le1_change)#拨盘值改变事件链接到自定义对象
#self.dial_le1_change)
#self.dial_le1_change)
#self.port_check_button.setVisible(False)
self.port_check_t(self.port_check)
#self.dial_t(self.data_send)
linux基本命令使用实验报告
#self.dial_t(self.data_send)
#self.H_speed_t(self.speed_change)
#self.V_speed_t(self.speed_change)
self.left_ll_send1)
self.right_ll_send2)
self.up_t(self.pitch_send1)
self.down_t(self.pitch_send2)
self.ll_stop)
self.ll_stop)
self.t(self.pitch_stop)
self.t(self.pitch_stop)
self.auto_t(self.auto_send)aspnet基本内置对象
self.t(self.ask_send)
self.Serialselect_t(self.port_check)
self.dial_engle1.setValue(18000)
#self.dial_engle1.setEnabled(True)
self.left_Button.setEnabled(False)
self.right_Button.setEnabled(False)
self.up_Button.setEnabled(False)
self.down_Button.setEnabled(False)
self.auto_Button1.setEnabled(False)
self.auto_Button1.setStyleSheet("background-color:rgb(0,200,0);border:2px groove gray;border-radius:10px;padding:2px 4px;")
self.left_Button.setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;font:12pt;")
self.right_Button.setStyleSheet("border:2px groove
gray;border-radius:10px;padding:2px 4px;font:12pt;")
self.up_Button.setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;font:12pt;")
self.down_Button.setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;font:12pt;")
self.dial_engle1.setStyleSheet("border-color:rgb(0,0,255);gridline-color:rgb(0,0,255);color: rgb(0,170,0);border-left-color: rgb(255, 0, 0);")
self.Connect.setStyleSheet(
service七个字母含义"background-color:rgb(0,200,0);border:2px groove
gray;border-radius:10px;padding:2px 4px;font:12pt;")
self.port_check_button.setStyleSheet("border:2px groove
gray;border-radius:10px;padding:2px 4px;font:12pt;")
#self.SetupConnect.setStyleSheet("border:2px groove gray;border-radius:10px;")
#self.dial_engle1.setStyleSheet("handle{background:blue;}")
#border:0px solid transparent;
#border-radius:2px;}  ")
#while True:
#在下面编写自己的子程序
#端口打开或关闭

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。