众所周知,Python作为一门面向对象的新兴开发语言,具有完善的基础代码库,实用性与代码可读性强,被越来越多的人应用于智能装备的运动控制。

  今天正运动技术与大家分享一下运动控制卡应用开发教程之Python。

  在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618。这两款产品分别是4轴,6轴运动控制卡。

  

  

  

  ECI2418支持4轴脉冲输入与编码器反馈,板载24点输入,16点输出,2AD,2DA,支持手轮接口,其中特定输出支持高速PWM控制。

  

  

  

  ECI2618支持6轴脉冲输入与编码器反馈,板载24点输入,16点输出,2AD,2DA,支持手轮接口,其中特定输出支持高速PWM控制。

  

  

  

  ECI2418,ECI2618均使用同一套API函数,均支持C、C++、C#、LabView、Python、Delphi等开发语言,支持VC6.0、VB6.0、Qt、.Net等平台,支持Windows、Linux、WinCE、iMac等操作系统。

   以下是Python语言的开发流程。

   1、新建项目。

  打开Pycharm软件进行操作,点击Create New Project新建项目。

  

  

  

   2、设置Python项目存放路径。

  此过程主要包含三步:

  选择Python项目→选择Python项目将存放的路径→创建Python项目。

  

  

  

  3、新建Python文件。

  在Python项目中新建Python文件,右键CratPython文件夹,选择“New→PythonFile”,创建新的Python 文件。

  

  

  

  选择“New→Python File”

  创建新的Python 文件

   4、将Python动态库复制到Python项目中。

  

  

  

   5、模块导入并加载动态链接库。

  首先把Python中的两个模块导入(platform和ctypes模块),其中ctypes模块提供和C语言兼容的数据类型,能够很方便地调用动态链接库中输出的C接口函数。

   importplatform

   import ctypes

   #运行环境判断

  systype = platform.system()

   ifsystype == 'Windows':

       ifplatform.architecture()[0] == '64bit':

              zauxdll = ctypes.WinDLL( './zauxdll64.dll')

              print( 'Windows x64')

   else:

              zauxdll = ctypes.WinDLL( './zauxdll.dll')

              print( 'Windows x86')

   elifsystype == 'Darwin':

          zmcdll = ctypes.CDLL( './zmotion.dylib')

          print( "macOS")

   elif systype == 'Linux':

          zmcdll = ctypes.CDLL( './libzmotion.so')

          print( "Linux")

   else:

  print( "Not Supported!!")

   6、通过加载导入的动态库链接库,调用ZMotion PC函数手册中的函数。

  1)使用操作。

  首先根据控制器连接方式用连接函数连接控制器,输出控制器句柄,利用控制器的句柄我们就可以对库函数进行操作。

  即“打开PC函数手册→搜索想要的函数功能→查看函数说明→通过刚才加载的动态链接库返回的zauxdll对象进行调用”。

  

  

  

  2)通过ip连接函数接口返回的控制器句柄handle,对控制器的句柄handle操作。

  

  

  

  #####控制器连接#####

   def connect(self, ip, console=[]):

           ifself.handle.value is not None:

              self.disconnect()

  ip_bytes = ip.encode( 'utf-8')

             p_ip = ctypes.c_char_p(ip_bytes)

          print( "Connecting to", ip, "...")

          ret = zauxdll.ZAux_OpenEth(p_ip, ctypes.pointer(self.handle))

          msg = "Connected"

           ifret == 0:

              msg = ip + " Connected"

              self.sys_ip = ip

              self.is_connected = True

       else:

              msg = "Connection Failed, Error " + str(ret)

              self.is_connected = False

      console.append(msg)

      console.append(self.sys_info)

       returnret

   # 断开连接

   def disconnect(self):

  ret = zauxdll.ZAux_Close(self.handle)

  self.is_connected = False

   return ret

  3)轴参数设置。

   #####轴参数设置####

  # 设置轴类型

   def set_atype(self, iaxis, iValue):

          ret = zauxdll.ZAux_Direct_SetAtype(self.handle, iaxis, iValue)

   ifret == 0:

              print( "Set Axis (", iaxis, ") Atype:", iValue)

           else:

              print( "Set Axis (", iaxis, ") Atype fail!")

           returnret

   # 设置脉冲当量

   def set_units(self, iaxis, iValue):

          ret = zauxdll.ZAux_Direct_SetUnits(self.handle, iaxis, ctypes.c_float(iValue))

           if ret == 0:

              print( "Set Axis (", iaxis, ") Units:", iValue)

           else:

              print( "Set Axis (", iaxis, ") Units fail!")

           returnret

  # 设置轴加速度

   def set_accel(self, iaxis, iValue):

          ret = zauxdll.ZAux_Direct_SetAccel(self.handle, iaxis, ctypes.c_float(iValue))

           ifret == 0:

              print( "Set Axis (", iaxis, ") Accel:", iValue)

           else:

              print( "Set Accel (", iaxis, ") Accel fail!")

           returnret

   # 设置轴减速度

   def set_decel(self, iaxis, iValue):

          ret = zauxdll.ZAux_Direct_SetDecel(self.handle, iaxis, ctypes.c_float(iValue))

           ifret == 0:

              print( "Set Axis (", iaxis, ") Decel:", iValue)

           else:

              print( "Set Axis (", iaxis, ") Decel fail!")

           returnret

   # 设置轴运行速度

   def set_speed(self, iaxis, iValue):

          ret = zauxdll.ZAux_Direct_SetAccel(self.handle, iaxis, ctypes.c_float(iValue))

           ifret == 0:

              print( "Set Axis (", iaxis, ") Speed:", iValue)

           else:

              print( "Set Axis (", iaxis, ") Speed fail!")

           returnret

  4)轴参数读取。

  #####轴参数读取####

  # 读取轴类型

   def get_atype(self, iaxis):

          iValue = (ctypes.c_int)()

          ret = zauxdll.ZAux_Direct_GetAtype(self.handle, iaxis, ctypes.byref(iValue))

           ifret == 0:

              print( "Get Axis (", iaxis, ") Atype:", iValue.value)

           else:

              print( "Get Axis (", iaxis, ") Atype fail!")

           return ret

   # 读取轴脉冲当量

   def get_units(self, iaxis):

          iValue = (ctypes.c_float)()

          ret = zauxdll.ZAux_Direct_GetUnits(self.handle, iaxis, ctypes.byref(iValue))

           if ret == 0:

              print( "Get Axis (", iaxis, ") Units:", iValue.value)

           else:

              print( "Get Axis (", iaxis, ") Units fail!")

           returnret

   # 读取轴加速度

   def get_accel(self, iaxis):

          iValue = (ctypes.c_float)()

          ret = zauxdll.ZAux_Direct_GetAccel(self.handle, iaxis, ctypes.byref(iValue))

           ifret == 0:

              print( "Get Axis (", iaxis, ") Accel:", iValue.value)

           else:

              print( "Get Axis (", iaxis, ") Accel fail!")

           returnret

   # 读取轴减速度

   def get_decel(self, iaxis):

          iValue = (ctypes.c_float)()

          ret = zauxdll.ZAux_Direct_GetDecel(self.handle, iaxis, ctypes.byref(iValue))

           if ret == 0:

              print( "Get Axis (", iaxis, ") Decel:", iValue.value)

           else:

              print( "Get Axis (", iaxis, ") Decel fail!")

           returnret

   # 读取轴运行速度

   def get_speed(self, iaxis):

          iValue = (ctypes.c_float)()

          ret = zauxdll.ZAux_Direct_GetSpeed(self.handle, iaxis, ctypes.byref(iValue))

           ifret == 0:

              print( "Get Axis (", iaxis, ") Speed:", iValue.value)

           else:

              print( "Get Axis (", iaxis, ") Speed fail!")

           returnret

  5)单轴运动。

  #####运动调用####

  # 直线运动

   def move(self, iaxis, iValue):

          ret = zauxdll.ZAux_Direct_Single_Move(self.handle, iaxis, iValue)

           ifret == 0:

              print( "Axis (", iaxis, ") Move:",iValue)

           else:

              print( "Axis (", iaxis, ") Move Fail")

           returnret

  6)运行程序,输出结果。

  调用封装好的函数→运行→输出程序运行结果。

   #####功能使用####

  zaux = ZMCWrapper()

   # 连接控制器ip 默认192.168.0.11

  zaux.connect( "192.168.0.11")

   # 设置轴0参数

  zaux.set_atype(0, 1)

  zaux.set_units(0, 100)

  zaux.set_accel(0, 1000)

  zaux.set_decel(0, 1000)

  zaux.set_speed(0, 1000)

   # 获取轴0参数

  zaux.get_atype(0)

  zaux.get_units(0)

  zaux.get_accel(0)

  zaux.get_decel(0)

  zaux.get_speed(0)

   # 运动

  zaux.move(0, 100) # 轴0直线运动移动100

  

  

  

  运行并输出程序运行结果

  正运动技术运动控制卡应用开发教程之Python就分享到这里,更多精彩内容,请关注我们的公众号。

  本文由正运动小助手原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

  

  

运动控制卡应用开发教程之Python相关推荐

  1. wince 开发_正运动技术运动控制卡应用开发教程之Python

    众所周知,Python作为一门面向对象的新兴开发语言,具有完善的基础代码库,实用性与代码可读性强,被越来越多的人应用于智能装备的运动控制. 今天正运动技术与大家分享一下运动控制卡应用开发教程之Pyth ...

  2. EtherCAT运动控制卡开发教程之python

    众所周知,Python作为一门面向对象的新兴开发语言,具有非常完善的基础代码库,更注重实用,同时代码可读极强,编写完程序即可直接运行,被越来越多的人广泛将它用于机器视觉和自动化控制. 今天正运动技术与 ...

  3. python 运动控制卡_运动控制卡应用开发教程之Linux

    今天,正运动技术为大家分享一下运动控制卡应用开发教程之Linux.我们将从新建Qt项目,添加函数库讲起,再详细讲解函数的用法,最后通过一个连续插补例程讲解来了解项目实操. 在正式学习之前,我们先了解一 ...

  4. 运动控制卡的函数库与Linux,运动控制卡应用开发教程之ROS(下)

    在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618.这两款产品分别是4轴,6轴运动控制卡. ECI2418支持4轴脉冲输入与编码器反馈,板载24点输入,16点输出,2A ...

  5. 运动控制卡应用开发教程之VC6.0

    今天,我们来讲解一下正运动技术运动控制卡应用开发教程之VC6.0. 在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618.这两款产品分别是4轴,6轴运动控制卡. ECI2 ...

  6. 运动控制卡应用开发教程之LabVIEW

    今天,我们来讲解一下正运动技术运动控制卡应用开发教程之LabVIEW. 在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418和ECI2618.这两款产品分别是4轴,6轴运动控制卡. EC ...

  7. 运动控制卡应用开发教程之MATLAB

    今天,正运动小助手给大家分享一下运动控制卡应用开发教程之MATLAB.  一 ECI2828硬件介绍 ECI2828系列运动控制卡支持多达16 轴直线插补.任意圆弧插补.空间圆弧.螺旋插补.电子凸轮. ...

  8. Linux qt 运动控制卡,运动控制卡应用开发教程之VB6.0

    我们主要从VB6.0的项目新建.函数库引用和PC函数使用方面讲起,最后通过项目实战--总线初始化例程讲解,来让大家熟悉它的项目开发. 在正式学习之前,我们先了解一下正运动技术的运动控制卡ECI2418 ...

  9. 运动控制卡应用开发教程之C++

    今天,正运动技术为大家分享一下应用C++开发一个多段连续插补的运动控制应用. 我们主要从新建MFC项目,添加函数库讲起,再了解PC函数用法,最后通过项目实战--连续插补运动例程讲解,来让大家熟悉C++ ...

  10. 运动控制卡应用开发教程之VB6.0

    今天,正运动小助手为大家分析一下应用VB6.0开发一个总线初始化的运动控制应用. 我们主要从VB6.0的项目新建.函数库引用和PC函数使用方面讲起,最后通过项目实战--总线初始化例程讲解,来让大家熟悉 ...

最新文章

  1. mac下安装libpng环境
  2. mysql的基本知识
  3. android--创建自己的内容提供器
  4. 【python数据挖掘课程】二十二.Basemap地图包安装入门及基础知识讲解
  5. matlab错误使用assert,关于异常处理:何时在Matlab中使用assert()?
  6. 适合Web服务器的iptables规则
  7. java jpanel 叠加_java – 如何在JPanel上叠加,调整大小和居中组件?
  8. 吴恩达机器学习训练2:Logistic回归
  9. python之event【事件】
  10. python求5_Python 5 运算符
  11. io 流 txt本地生成
  12. Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货
  13. macOS -- 如何通过终端开启/关闭SSH
  14. 益智类游戏关卡设计:逆推法--巧解益智类游戏关卡设计
  15. 《纽约时报》畅销书作家发布新的COVID安全旅行提示电子书
  16. salt 安装kubernetes集群3节点
  17. 三向振动台的计算机辅助测试实验分析原因,振动试验原理及试验考虑的条件
  18. wps折线图如何画多条折线_怎么用wps制作折线图 wps制作多条折线图的步骤方法...
  19. 基于Qt的网络五子棋游戏对战
  20. 计算机管理映像路径,windows任务管理器显示映像路径和命令行设置参考

热门文章

  1. 8086汇编语言(一) 汇编语言源程序
  2. 数据、数据库、数据库管理系统,数据库系统的概念
  3. 火力发电行业三大知识图谱应用场景,助力火力发电厂清洁高效智慧化运营
  4. php递归返回值只有第一次的结果,php递归函数出现返回值问题的解决
  5. Unable to find setter method for attribute: [commandName]
  6. fastboot模式下无法找到设备,不能使用fastboot命令,需要安装驱动
  7. 基础学习日志 ━━ 变量、函数、类命名时常用的英文词汇
  8. Linux系统死亡之ping,linux下防止syn***,端口扫描和死亡之ping
  9. 获取JSON文本(复嵌对象)转换指定JSON数据并Ajax实现数据初始可视化【附上echarts地图官方数据形式json文件数据】
  10. javaweb小区物业管理系统设计与实现(毕业论文+程序设计+数据库文件)