最近太忙,一直没时间更新,使用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.read(len_return_data)  # 读取缓冲数据str_return_data = str(return_data.hex())print(str_return_data)print(agreement_add_crc)# 判断设置成功与否if str_return_data == agreement_add_crc:print("设置成功")# messagebox.showinfo(title='提示信息', message='设置成功')else:print("设置失败")# messagebox.showinfo(title='提示信息', message='设置失败')ser.close()# 关闭窗口回调函数
def on_closing():if messagebox.askokcancel("退出", "   是否确定关闭程序?"):window.destroy() # 电机servo ON
def motor_servo_on():print("电机启动")# 设置P2-10 为 1send_485_cmd('010602140001')# 电机servo OFF
def motor_servo_off():print("电机停止")# 设置P2-10 为 101send_485_cmd('010602140101')   # 电机寸动(JOG)控制 顺时针
def motor_ccw():print("电机顺时针转")# 设置P4-05地址 040A 040B  十进制为4998send_485_cmd('0106040a1386')# 电机寸动(JOG)控制 逆时针
def motor_cw():print("电机逆时针转")# 设置P4-05地址 040A 040B  十进制为4999send_485_cmd('0106040a1387')# 电机寸动(JOG)控制 停止运转
def motor_stop():print("电机停止运转")# 设置P4-05地址 040A 040B  十进制为0send_485_cmd('0106040a0000')def motor_speed_set():print("电机速度设置")# 设置P4-05地址 040A 040B  十进制范围:1~5000# 获取设置的值speedVar = speed_entry.get()toHexStr = hex(int(speedVar))[2:]print(toHexStr)# 补位 补0if len(toHexStr) < 4:toHexStr = toHexStr.zfill(4)print(toHexStr)# 组帧speedCMD = '0106040a' + toHexStrprint(speedCMD)send_485_cmd(speedCMD)window = tk.Tk()
# 设置窗口大小
winWidth = 515
winHeight = 295
# 获取屏幕分辨率
screenWidth = window.winfo_screenwidth()
screenHeight = window.winfo_screenheight()x = int((screenWidth - winWidth) / 2)
y = int((screenHeight - winHeight) / 2)# 设置主窗口标题
window.title("台达A2-M 485控制")
# 设置窗口初始位置在屏幕居中
window.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
# 设置窗口图标
# 获取当前路径下的CAN动态库路径
ico_realPath = os.path.join(os.path.dirname(os.path.realpath(__file__)), '123.ico')
window.iconbitmap(ico_realPath)
# 设置窗口宽高固定
window.resizable(0, 0)# 电机 servo on
Button1 = Button(window, text='电机servo ON', borderwidth=2, relief="groove", width=14, height=1, font=('Microsoft YaHei', 13), fg='white', bg='Purple', command=lambda :thread_another(motor_servo_on))
Button1.grid(row=0, column=0, columnspan=2, rowspan=1, padx = 10, pady = 10)# 电机 servo off
Button2 = Button(window, text='电机servo OFF', borderwidth=2, relief="groove", width=14, height=1, font=('Microsoft YaHei', 13), fg='white', bg='Purple', command=lambda :thread_another(motor_servo_off))
Button2.grid(row=0, column=2, columnspan=2, rowspan=1, padx = 10, pady = 10)# 电机寸动 逆时针
Button3 = Button(window, text='寸动(顺时针)', borderwidth=2, relief="groove", width=14, height=1, font=('Microsoft YaHei', 13), fg='white', bg='Purple', command=lambda :thread_another(motor_ccw))
Button3.grid(row=1, column=0, columnspan=2, rowspan=1, padx = 10, pady = 10)# 电机寸动 顺时针
Button4 = Button(window, text='寸动(逆时针)', borderwidth=2, relief="groove", width=14, height=1, font=('Microsoft YaHei', 13), fg='white', bg='Purple', command=lambda :thread_another(motor_cw))
Button4.grid(row=1, column=2, columnspan=2, rowspan=1, padx = 10, pady = 10)# 电机停止运转
Button5 = Button(window, text='停止运转', borderwidth=2, relief="groove", width=14, height=1, font=('Microsoft YaHei', 13), fg='white', bg='Purple', command=lambda :thread_another(motor_stop))
Button5.grid(row=1, column=4, columnspan=2, rowspan=1, padx = 10, pady = 10)# 寸动速度 标签
speed_label = Label(window, text='寸动速度(r/min):', width=14, height=1, font=('Microsoft YaHei', 13), fg='blue')
speed_label.grid(row=2, column=0, columnspan=2, rowspan=1, padx = 10, pady = 10)# 寸动速度 输入框
speed_num = StringVar()
speed_entry = Entry(window, textvariable = speed_num, width=14, font=('Microsoft YaHei', 13), fg='blue')
speed_entry.grid(row=2, column=2, columnspan=2, rowspan=1, padx = 10, pady = 10)# 寸动速度 设置按钮
Button6 = Button(window, text='速度设置', borderwidth=2, relief="groove", width=14, height=1, font=('Microsoft YaHei', 13), fg='white', bg='Purple', command=lambda :thread_another(motor_speed_set))
Button6.grid(row=2, column=4, columnspan=2, rowspan=1, padx = 10, pady = 10)#window.protocol("WM_DELETE_WINDOW", on_closing)
window.mainloop()

因为项目太赶,原计划是研究如何进行位置控制,但是目前可能只能暂时使用速度模式了。

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

  1. 信捷XD/XC系列PLC 控制台达B2系列伺服电机程序,手动自动,循环,循环次数设定

    信捷XD/XC系列PLC 控制台达B2系列伺服电机程序,手动自动,循环,循环次数设定 YID:4850620589573989猫猫工控

  2. 信捷XD XC系列PLC 控制台达B2系列伺服电机程序,手动自动,循环,循环次数设定

    信捷XD XC系列PLC 控制台达B2系列伺服电机程序,手动自动,循环,循环次数设定 YID:4850620589573989

  3. 信捷plc和台达变频器通信程序通过信捷xc3的modbus通信控制台达vfd-m变频器的正转,反转,加减速,停止

    信捷plc和台达变频器通信程序通过信捷xc3的modbus通信控制台达vfd-m变频器的正转,反转,加减速,停止. 同时可以威纶触摸屏监控变频器的运转频率,电压,电流,资料详细,包括参数的设置和plc ...

  4. 信捷plc和台达变频器通信程序通过信捷xc3的modbus通信控制台达vfd-m变频器的正转

    信捷plc和台达变频器通信程序通过信捷xc3的modbus通信控制台达vfd-m变频器的正转,反转,加减速,停止 同时可以威纶触摸屏监控变频器的运转频率,电压,电流,资料详细,包括参数的设置和plc的 ...

  5. 信捷plc和台达变频器通信程序 通过信捷xc3的modbus通信控制台达vfd-m变频器的正转,反转,加减速,停止

    信捷plc和台达变频器通信程序 通过信捷xc3的modbus通信控制台达vfd-m变频器的正转,反转,加减速,停止. 同时可以威纶触摸屏监控变频器的运转频率,电压,电流,资料详细,包括参数的设置和pl ...

  6. 台达PLC模拟量或台达伺服电机控制模块程序案例

    台达PLC模拟量或台达伺服电机控制模块程序案例,二选一 ID:6958618562901252Anh13309639501 以下内容不属于本博内容,仅仅是相关参考: 台达PLC采用可以编制程序的存储器 ...

  7. 西门子s7 200smart与台达伺服电机 运动控制的学习,目标:用触摸屏和西门子smart 控制

    西门子s7 200smart与台达伺服电机 运动控制的学习,目标:用触摸屏和西门子smart 控制 器件:西门子s7 200 smart PLC,台达伺服电机,昆仑通态触摸屏(带以太网),中途可以加路 ...

  8. ethercat主站soem开发板,stm32f407/stm32h7低成本主站方案,带台达伺服电机,ls伺服电机

    ethercat主站soem开发板,stm32f407/stm32h7低成本主站方案,带台达伺服电机,ls伺服电机,三洋伺服电机,汇川伺服电机,雷塞智能步进电机等支持ethercat的设备. 支持DC ...

  9. 欧姆龙cp系列plc自由口通讯台达VFD-M变频器示例

    欧姆龙cp系列plc自由口通讯台达VFD-M变频器示例 所需硬件:欧姆龙cp系列plc及通讯扩展板,台达VFD-M变频器,威纶通6070触摸屏. 实现功能:通过TXD,RXD指令,ASCII方式,控制 ...

  10. 西门子200smart型PLC通过485modbus通讯控制台达VDF—M型变频器程序

    西门子200smart型PLC通过485modbus通讯控制台达VDF-M型变频器程序2,带PLC和昆仑通泰触摸屏程序,带变频器参数和接线说明6911.75625332947804z***6

最新文章

  1. AI模型落地难?试试这个15分钟搞定的开源工具
  2. 金融风控实战——集成学习
  3. 【java开发系列】—— spring简单入门示例
  4. Android 4.4 Kitkat 使能有线网络 Ethernet
  5. 公平锁非公平锁的实际使用_3. redisson源码公平锁之队列重排序
  6. IPv6终于要取代IPv4了!阿里云将全面提供IPv6服务
  7. linux查看分区访问权限,linux查看分区是否开启acl权限
  8. lock是悲观锁还是乐观锁_图文并茂的带你彻底理解悲观锁与乐观锁
  9. 自己实现java I/O中的BufferedReader对象中的raedLine方法
  10. python3 字符串编解码和UnicodeDecodeError
  11. csp php,CSP策略及绕过方法
  12. java企业项目进度绩效考核管理系统 SSH
  13. discuz的css文件在哪里,谁能告诉我discuz模板文件在哪个文件夹下?
  14. 基于程序员职业对于婚配问题的研究——程序员为何单身?
  15. Softing过程自动化解决方案——助力数字化工业
  16. H3C Neighbor Discovery Protocol,邻居发现协议
  17. IDA*算法实现的数字拼图游戏
  18. php版临时邮箱,Forsaken Mail创建临时邮箱系统| 手把手教程
  19. SpEL之#和$的区别
  20. 滤了asa,cer,cdx,php,aspx等脚本类型的上传情况下添加一个ashx的上传类型

热门文章

  1. ExtJs 系列视频教程
  2. mysql数据库机器人,机器人之解析远程连接管理其他机器上的MYSQL数据库
  3. mysql五日均线代码_通达信均线源码,5日通达信均线公式源码
  4. 局域网传输文件_局域网共享软件,详细教您局域网共享软件如何使用
  5. C语言跨平台游戏开发
  6. MATLAB打开USB摄像头的操作以及常见问题
  7. BISS绝对值编码器_TI方案_线路延迟补偿
  8. 淘宝类目运营方法 怎么快速获取流量和销量
  9. 一部农村小孩学计算机的电影,10部关于教育的电影,每一部都经典!
  10. Pandas直接读取sql脚本