通过CN3口直接控制台达伺服电机A2-M(三)

最近太忙,一直没时间更新,使用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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值