最近太忙,一直没时间更新,使用Python和tkinter简单写了一个通过速度模式进行寸动控制的程序,另外外接了一个20倍的减速器,虽然将就可用,但是精度只能控制为0.3°的倍数,没有达到我理想中的1°控制
简单界面如下:
Python的源码如下:(python使用的版本为3.8.3 pyinstaller版本为4.0 )
import tkinter as tk
from tkinter import ttk
from tkinter import *
from tkinter import messagebox
import threading
import os
import datetime
import serial
import time
import serial.tools.list_ports
import crcmod.predefined
# CRC16校验 入参为校验数据(16进制字符串) 返回带校验码的数据
def mk_crc_16(data):
crc16_func = crcmod.predefined.mkCrcFun('modbus')
crc8_func_value = crc16_func(bytes().fromhex(data))
CRC_16_result = hex(crc8_func_value)
# 去掉0x 并且对校验结果补位
CRC_16_result = CRC_16_result[2:]
CRC_16_result = CRC_16_result.zfill(4)
# 高低位颠倒
final_data = data + CRC_16_result[2:] + CRC_16_result[0:2]
return final_data
# 线程函数,用于开启独立线程后台执行,不影响界面刷新
def thread_another(func, *args):
# 创建
t = threading.Thread(target=func, args=args)
# 守护 随主进程消亡
t.setDaemon(True)
# 启动
t.start()
#
def send_485_cmd(cmd):
ser = serial.Serial('COM21', 38400, bytesize=8, parity='E', stopbits=1) # 选择串口,并设置波特率
if ser.is_open:
print("打开串口成功")
# 获取协议数据的CRC16校验码
agreement_add_crc = mk_crc_16(cmd)
print(agreement_add_crc)
# hex(16进制)转换为bytes(2进制)
send_data = bytes.fromhex(agreement_add_crc) # 发送数据转换为b'\xff\x01\x00U\x00\x00V'
ser.write(send_data) # 发送命令
time.sleep(0.1) # 延时,否则len_return_data将返回0,此处易忽视!!!
len_return_data = ser.inWaiting() # 获取缓冲数据(接收数据)长度
if len_return_data:
return_data = ser