今天,正运动小助手给大家分享一下全国产ethercat运动控制边缘控制器zmc432h如何使用python+qt实现连续轨迹加工。
01功能简介
全国产ethercat运动控制边缘控制器zmc432h是正运动的一款软硬件全国产自主可控,运动控制接口兼容ethercat总线和脉冲型的独立式运动控制器,最多支持32轴运动控制,同时支持正运动远程hmi功能,能提供网络组态显示,可实时监控和调整参数配置。
zmc432h具备丰富的硬件接口和控制功能模块,能实现高效稳定的运动控制和实时数据采集,以满足工业控制协同工业互联网的应用需求。
zmc432h内置了linux系统,可以使用本地的local接口进行连接,可以做到更快速的指令交互,单条指令与多条指令一次性交互时间为40us左右。
02python+qt进行运动控制开发
一.配置好python+qt开发环境,以及安装好所需工具 1、下载python解释器。 2、安装pyside2或者pyside6根据python解释器的版本来选择,高版本的解释器使用pyside6。
安装pyside2有以下两种方式:
方式一:使用win+r打开运行界面,然后输入cmd(在安装python解释器的时候要根据安装向导配置好环境变量,否则后面的指令不会执行成功),pip install pyside2 -i https://pypi.douban.com/simple/; 方式二:在pycharm中安装。
3、安装好pycharm community edition,在如下界面点击+号,安装所需的工具,如pyside2。
4、在pycharm中配置自定义工具(用于qt的界面编辑)。
(1)按照如图步骤打开tool的编辑框。
(2)自定义pyside2-uic:
a.program填写:python安装目录 scriptspyside2-uic.exe;
b.arguments填写:$filename$ -o $filenamewithoutextension$.py;
c.working directory填写:$filedir$。
(3)自定义qtdesigner:
a.program填写:python安装目录 scriptspyside2-designer.exe;
b.working directory填写:$projectfiledir$。
将自定义工具配置好之后就可以直接在pycharm的菜单中直接使用了。
1、点击tools → qt → qtdesigner即可进入ui的设计界面。
2、右键ui文件,点击qt → pyside2-uic即可生成ui文件的py文件。
二.新建python项目并添加函数库
1、使用pycharm community edition 2022打开一个新建的文件夹或者在进入pycharm community edition 2022之后新建一个目录,并在目录中添加python文件。
2、找到找到厂家提供的光盘资料,路径如下。
a.进入厂商提供的光盘资料找到“04.pc函数”文件夹,并点击进入。
b.选择“pc函数库v2.1.1”文件夹。
c.选择“windows平台”文件夹。
d.选择“库文件与例程”文件夹。
e.选择“python例程”文件夹。
f.解压对应位数的压缩包。
g.解压后如下图所示。
3、对于windows系统来说将zauxdll.dll、zmotion.dll以及zauxdllpython.py文件加入所创建的文件夹内即可。
三.查看pc函数手册,熟悉相关函数接口。
1、pc函数手册也在光盘资料里面,具体路径如下:“光盘资料�4.pc函数motionpc函数库编程手册及其例程源码motionpc函数库编程手册 v2.1.1.pdf”。
2、链接控制器,获取链接句柄。
(1)zaux_openeth()接口说明。
指令7 zaux_openeth
指令原型 int32 __stdcall zaux_openeth(char *ipaddr, zmc_handle * phandle)
指令说明 以太网链接控制器。
输入参数 输入参数1个,详细见下面说明。
ipaddr 链接的ip地址。
输出参数 输出参数1个,详细见下面说明。
phandle 返回的链接句柄。
返回值 详细见错误码说明。
(2)下载“.bas”文件到控制器中运行的接口说明。
指令12 zaux_basdown
指令原型 int32 __stdcall zaux_basdown(zmc_handle handle,const char *filename,uint32 run_mode )
指令说明 单个bas文件生成zar并且下载到控制器运行
输入参数 共有3个输入参数,见下方说明。
handle 链接句柄。
filename bas文件名带路径。
run_mode 下载模式0-ram 1-rom。
(3)暂停和恢复控制器内部basic程序的接口说明。
指令10 zaux_pause
指令原型 int32 __stdcall zaux_pause(zmc_handle handle)
指令说明 暂停控制器内部运行的basic程序。
输入参数 输入参数1个,见下方说明。
handle 链接句柄。
指令11 zaux_resume
指令原型 int32 __stdcall zaux_resume(zmc_handle handle)
指令说明 继续控制器内部运行的basic程序。
输入参数 输入参数1个,见下方说明。
四.rtbasic文件下载与连续轨迹加工的python+qt开发例程。
1、例程界面如下。
2、通过“光盘资料” → “工具软件”里面的“zmotioncadv1.0导图工具”将cad图纸里面的图形转换成“.bas”的运动控制代码。
a.打开该工具软件,点击“文件”→“导入”。选择需要转换的dxf格式的cad图纸并打开。
b.打开后效果如下。
c.点击“文件”→“导出”,导出“.bas”文件。到时候可下载到控制卡里面进行以上轨迹的运动控制。
d.cad导图软件的具体使用方法参考往期文章正运动技术cad导图软件配合控制器的使用方法。
3、程序示例如下。 (1)python中加载qt的ui文件;
from pyside2.qtwidgets import qmessageboxfrom pyside2.qtcore import qfile, qtimerfrom pyside2.qtuitools import quiloaderq_state_file = qfile(mainweiget.ui)q_state_file.open(qfile.readonly)self.ui = quiloader().load(q_state_file)q_state_file.close()
注:此时self.ui表示了qt中的ui。
(2)链接按钮的事件处理函数中调用链接控制器的接口函数zaux_openeth(),与控制器进行链接,链接成功后启动定时器1监控控制器状态。
def on_btn_open_clicked(self): strtemp = self.ui.combobox.currenttext() print(当前的ip是 :, strtemp) if self.zmc.handle.value is not none: self.zmc.close() self.time1.stop() self.ui.setwindowtitle(单轴回零) iresult = self.zmc.open_eth(strtemp) if 0 != iresult: qmessagebox.warning(self.ui, 提示, 连接失败) else: qmessagebox.warning(self.ui, 提示, 连接成功) str_title = self.ui.windowtitle() + strtemp self.ui.setwindowtitle(str_title) self.up_state() self.time1.start(100)(3)通过定时器监控控制器状态。
def up_state(self): idlelist = [ctypes.c_int(-1) for i in range(0, 4)] fdposlist = [ctypes.c_float(0) for i in range(0, 4)] for i in range(0, 4): self.zmc.get_target_pos(i, fdposlist[i]) # 获取当前轴位置 self.zmc.get_idle(i, idlelist[i]) # 判断当前轴状态 str1 = {} {} .format(停止中 if idlelist[0].value else 运行中, round(fdposlist[0].value, 2)) self.ui.lineedit_x.settext(str1) str1 = {} {} .format(停止中 if idlelist[1].value else 运行中, round(fdposlist[1].value, 2)) self.ui.lineedit_y.settext(str1) str1 = {} {} .format(停止中 if idlelist[2].value else 运行中, round(fdposlist[2].value, 2)) self.ui.lineedit_z.settext(str1) str1 = {} {} .format(停止中 if idlelist[3].value else 运行中, round(fdposlist[3].value, 2)) self.ui.lineedit_r.settext(str1)(4)通过“选择bas文件”按钮的事件处理函数选择对应的bas文件。def on_btn_downbas_clicked(self): if self.zmc.handle.value is none: qmessagebox.warning(self.ui, 提示, 未连接控制器) return file_date = qfiledialog.getopenfilename(self.ui, 选择bas文件, .., files(*.bas)) self.file_name = file_date[0].replace(/, \) print(self.file_name) if self.file_name == : return self.ui.textedit_filepath.insertplaintext(self.file_name + )(5)通过“启动”按钮的事件处理函数来下载和启动选择的bas文件。if self.zmc.handle.value is none: qmessagebox.warning(self.ui, 警告, 未连接控制器) return# 设定轴0轴类型str_tmp = self.ui.edit_atype_0.text()float_tmp = int(str_tmp)self.zmc.set_axis_type(0, float_tmp)# 设定轴0轴类型str_tmp = self.ui.edit_atype_1.text()float_tmp = int(str_tmp)self.zmc.set_axis_type(1, float_tmp)# 设定脉冲模式及逻辑方向(脉冲 + 方向)self.zmc.set_invert_step(self.axis_num, 0)# 设置当量str_tmp = self.ui.edit_units_0.text()float_tmp = float(str_tmp)self.zmc.set_units(0, float_tmp)str_tmp = self.ui.edit_units_1.text()float_tmp = float(str_tmp)self.zmc.set_units(1, float_tmp)# 设置速度str_tmp = self.ui.edit_speed_0.text()float_tmp = float(str_tmp)self.zmc.set_speed(0, float_tmp)str_tmp = self.ui.edit_speed_1.text()float_tmp = float(str_tmp)self.zmc.set_speed(1, float_tmp)# 设置加速度str_tmp = self.ui.edit_accel_0.text()float_tmp = float(str_tmp)self.zmc.set_acceleration(0, float_tmp)str_tmp = self.ui.edit_accel_1.text()float_tmp = float(str_tmp)self.zmc.set_acceleration(1, float_tmp)# 设置减速度self.zmc.set_deceleration(0, 0)self.zmc.set_deceleration(1, 0)#开启连续插补str_tmp = self.ui.edit_merge_0.text()float_tmp = int(str_tmp)self.zmc.set_merge(0,float_tmp)str_tmp = self.ui.edit_merge_1.text()float_tmp = int(str_tmp)self.zmc.set_merge(1, float_tmp)if self.file_name == : returnret = self.zmc.bas_down(self.file_name, 1) # 下载到rom 运行if ret != 0: qmessagebox.warning(self.ui, 提示, 文件下载失败! + 错误码为 :{} .format(ret))return注:“.bas”文件也可以通过我们的zdevelop软件下载。zaux_basdown指令会将单个bas文件生成zar并且下载到控制器运行。 (6)通过停止、暂停、继续按钮的事件处理函数来实现控制器。def on_btn_stop_clicked(self): if self.zmc.handle.value is none: qmessagebox.warning(self.ui, 警告, 未连接控制器) return buffer = (ctypes.c_char * 1024)() ret = self.zmc.execute(stoptask 0, buffer, 0) ret = self.zmc.rapid_stop(2)def on_btn_pause_clicked(self): ret = self.zmc.bas_pause() if ret != 0: qmessagebox.warning(self.ui, 提示, 运动暂停失败! + 错误码为 :{} .format(ret)) returndef on_btn_resume_clicked(self): ret = self.zmc.bas_resume() if ret != 0: qmessagebox.warning(self.ui, 提示, 运动恢复失败! + 错误码为 :{} .format(ret)) return
03
调试与监控
编译运行例程,同时通过zdevelop软件连接控制器对控制器状态进行监控。
zdevelop软件连接控制器打开调试模式可以查看控制器里面的“.bas”文件的文件名。
通过zdevelop软件的示波器功能对连续小线段的波形进行抓取,下面是示波器波形和cad图纸的比较。
比较如下图所示。
例程讲解视频。
本次,正运动技术全国产ethercat运动控制边缘控制器(六):rtbasic文件下载与连续轨迹加工的python+qt开发,就分享到这里。
Windows CE.NET 4.2下的串行通信技术讲解
独立式有源EMI滤波器 IC 如何缩小共模滤波器尺寸
UOS 操作系统开发商统信软件成功完成 A 轮 11 亿元人民币融资
Cyntec 高效uPOL模块MUN3C1HR6-FB 600mA的特性
用FPGA做流水灯
全国产EtherCAT运动控制边缘控制器ZMC432H如何使用Python+QT实现连续轨迹加工
10G DAC和40G光模块在叶脊架构中的应用
布线人的烦恼:超六类网线七类网线如何选择
物联网和全球互联设备正在为互联汽车开拓新的商业模式
堆的实现思路
基于计算机视觉的多维图像智能
Python的几个自然语言处理工具介绍
基于开关电源原理分析、组成和作用及电路图
ABB:打造绿色智能充电生态是应对未来能源挑战的途径
苹果正式推送iPadOS13.1 新的布局在每一页上可显示更多app
李开新已经离职,不再担任360手机掌门人
显示屏业务热度依旧,小间距国内市场直逼海外
WCDMA的软搬迁软割接
当今世界谁的5G实力最强_看了就知道
半导体行业拯救者,系统级封装迎来好时光