EtherCAT运动控制器上位机开发之Python+Qt(三):PDO配置与SDO读写

科技   科技   2024-08-21 07:00   广东  

点击上方正运动小助手,随时关注新动态!

ZMC408CE控制器硬件介绍



ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。

ZMC408CE支持8轴运动控制,最多可扩展至32轴,支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随等功能。

ZMC408CE支持PLC、Basic、HMI组态三种编程方式。PC上位机API编程支持C#、C++、LabVIEW、Matlab、Qt、Linux、VB.Net、Python等接口。

ZMC408CE支持8轴运动控制,可采用脉冲轴(带编码器反馈)或EtherCAT总线轴,通用IO包含24路输入口和16路输出口,部分IO为高速IO,模拟量AD/DA各两路,EtherCAT最快125us的刷新周期。

ZMC408CE支持8个通道的硬件比较输出、硬件定时器、运动中精准输出,还支持8通道PWM输出,对应的输出口为OUT0-7,支持8个通道同时触发硬件比较输出。

ZMC408CE视频介绍
更多关于ZMC408CE的详情介绍,点击推荐|8通道PSO的高性能EtherCAT总线运动控制器查看。


PCIE464M控制卡硬件介绍



PCIE464M是一款基于PCIe的PCI Express的EtherCAT总线运动控制卡,具有多项实时和高精度运动控制控制功能。

用户可直接将PCIE464M嵌入标准PC机实现高性能的EtherCAT运动控制功能,实现高精多轴同步控制,EtherCAT控制周期最小可达100us!

PCIE464M内置多路高速IO输入输出,可满足用户的多样化高速IO应用需求,如:高速色标锁存、高速PWM、多维位置比较输出PSO、视觉飞拍、速度前瞻、编码器位置检测等应用。

PCIE464M运动控制卡上自带16进16出,第三方图像处理工控机或PC无需额外配置IO数据采集卡和PLC,即可实现IPC形态的机器视觉运动控制一体机,简化硬件架构,节省成本,软硬件一体化。


PCIE464M视频介绍

更多关于PCIE464M的详情介绍,点击PCIE464M-高速高精,超高速PCIe EthrtCAT实时运动控制卡查看。


ECI2A18B控制卡硬件介绍



ECI2A18B是正运动推出的一款高性价比10轴脉冲型、模块化的网络型运动控制卡,采用优化的网络通讯协议可以实现实时的运动控制,同时支持多种通信协议,方便与其他工业控制设备连接和集成。安装配置相对便捷,适合于模块化和灵活性要求较高的控制系统。

ECI2A18B控制卡最大可扩展至12脉冲轴,支持8路高速输入和4路高速输出,集成丰富的运动控制功能,包含多轴点位运动、电子凸轮,直线插补,圆弧插补,连续插补运动等,满足多样化的工业应用需求。

ECI2A18B运动控制卡可用于电子半导体设备(检测类设备、组装类设备、锁附类设备、焊锡机)、点胶设备和流水线等10轴以内脉冲的高性价比应用场合。

更多关于ECI2A18B的详情介绍,点击“【加量不加价】正运动网络型运动控制卡ECI2618B/ECI2A18B查看。



Python+Qt开发流程


Python+Qt运动控制开发流程参考EtherCAT运动控制器上位机之Python+Qt(一):链接与单轴运动”



相关PC函数介绍


1.PC函数手册可在光盘资料查看,具体路径如下

2.连接控制器。

指令3

ZAux_OpenEth

指令原型

int32  __stdcall  ZAux_OpenEth(char  *ipaddr, ZMC_HANDLE * phandle)

指令说明

以太网连接控制器。

输入参数

参数名

描述

Ipaddr

连接的IP地址

输出参数

参数名

描述

Phandle

返回的连接句柄

返回值

成功返回值为0,非0详见错误码说明。

指令示例

网口连接控制器

详细说明

1.网口采用RJ45标准网线接口,通讯速率为100Mbit/s。

2.控制器出厂的IP地址为192.168.0.11,端口号为502。对端通讯设备需与控制器处于同一网段,才可进行连接。

3.最常用的控制器连接方式。

4.ZMC_HANDLE类型:Zmotion库中,专门用于控制卡连接数据定义类型;

3.下载bas文件到控制器。

指令268

ZAux_BasDown

指令原型

int32  __stdcall  ZAux_BasDown(ZMC_HANDLE handle,const char *Filename,uint32 run_mode )

指令说明

单个.bas文件生成ZAR并且下载到控制器运行

输入参数

参数名

描述

handle

连接句柄。

Filename

zar文件名带路径。

run_mode

下载模式0-RAM  1-ROM。

输出参数

/

返回值

成功返回值为0,非0详见错误码说明。

指令示例

控制程序的下载及编写

详细说明

.bas文件,可在正运动控制卡直接运行的Basic语法文件

4.下载zar文件到控制器。

指令269

ZAux_ZarDown

指令原型

int32 __stdcall ZAux_ZarDown(ZMC_HANDLE handle,const char *Filename,uint32 run_mode)

指令说明

下载ZAR程序到控制器运行

输入参数

参数名

描述

handle

连接句柄。

Filename

BAS文件名带路径。

run_mode

下载模式0-RAM  1-ROM

输出参数

/

返回值

成功返回值为0,非0详见错误码说明。

指令示例

/

详细说明

Zar文件,正运动控制卡直接运行的程序,经过加密后生成的文件

5.SDO写入

指令251

ZAux_BusCmd_SDOWrite

指令原型

int32 __stdcall ZAux_BusCmd_SDOWrite(ZMC_HANDLE handle, uint32 slot, uint32 node, uint32 index, uint32 subindex, uint32 type, int value);

指令说明

通过设备号和槽位号进行SDO写入

输入参数

参数名

描述

handle

连接句柄。

slot

槽位号

node

节点编号

index

对象字典编号

subindex

对象字典子编号

type

数据类型:

1

boolean

2

integer 8

3

integer 16

4

integer 32

5

unsigned 8

6

unsigned 16

7

unsigned 32

value

写入的数据值

输出参数

/

返回值

成功返回值为0,非0详见错误码说明。

指令示例

SDO读写最大扭矩

详细说明

需连接好设备,扫描总线后才能执行。

只有可写的数据字典才能写入。

6.SDO读取

指令252

ZAux_BusCmd_SDORead

指令原型

int32 __stdcall ZAux_BusCmd_SDORead(ZMC_HANDLE handle, uint32 slot, uint32 node, uint32 index, uint32 subindex, uint32 type, int *value);

指令说明

通过设备号和槽位号进行SDO读取。

输入参数

参数名

描述

handle

连接句柄。

slot

槽位号

node

节点编号

index

对象字典编号

subindex

对象字典子编号

type

数据类型:

1

boolean

2

integer 8

3

integer 16

4

integer 32

5

unsigned 8

6

unsigned 16

7

unsigned 32

输出参数

参数名

描述

value

读取的数据值。

返回值

成功返回值为0,非0详见错误码说明。

指令示例

SDO读写最大扭矩

详细说明

需连接好设备,扫描总线后才能执行。

7.读取轴类型。

指令17

ZAux_Direct_GetAtype

指令原型

int32  __stdcall  ZAux_Direct_GetAtype(ZMC_HANDLE  handle, int  iaxis, int  *piValue)

指令说明

读取指定轴的轴类型。

输入参数

参数名

描述

handle

控制器连接句柄

iaxis

轴号

输出参数

参数名

描述

piValue

轴类型(见下方详细说明)

返回值

成功返回值为0,非0详见错误码说明。

指令示例

轴基本运动参数设置获取

详细说明

轴类型

描述

0

虚拟轴。

1

脉冲方向方式的步进或伺服。

8.设置轴使能。

指令47

ZAux_Direct_SetAxisEnable

指令原型

int32 __stdcall ZAux_Direct_SetAxisEnable(ZMC_HANDLE handle, int iaxis, int  iValue);

指令说明

设置轴的使能。

输入参数

共有2个输入参数,见下方说明。

handle

连接句柄。

axis

槽位号

iValue

状态:0-关闭 1-打开

输出参数

一个参数

返回值

成功返回值为0,非0详见错误码说明。

指令示例

EthrCat总线轴的使能

9.设置脉冲当量。

指令18

ZAux_Direct_SetUnits

指令原型

int32 __stdcall ZAux_Direct_SetUnits(ZMC_HANDLE handle,int  iaxis, float  fValue)

指令说明

设置脉冲当量,当设置为1时,表示单位为1个脉冲。

脉冲当量,控制器基本单位。指定每单位发送的脉冲数,支持5位小数精度。

控制器以脉冲当量作为基本单位,修改后坐标显示会随脉冲当量改变比例变化。

输入参数

参数名

描述

handle

控制器连接句柄

iaxis

轴号

fValue

设置的脉冲当量

输出参数

/

返回值

成功返回值为0,非0详见错误码说明。

指令示例

轴基本运动参数设置获取

详细说明

如何设置

假设电机U=3600脉冲转一圈,丝杠一圈螺距P=2mm:

电机转1°对应的脉冲当量UNITS:

UNITS=U/360=3600/360=10;//此时MOVE(1),电机转1°

工作台走1mm对应的脉冲当量UNTIS:

UNITS=U/P=3600/2=1800,//此时MOVE(1),工作台走1mm

机台存在减速比时,要把减速比算上,假设减速比i=2:1

UNITS=U*i/P=3600*2/2=3600

10.单轴持续运动。

指令94

ZAux_Direct_Single_Vmove

指令原型

int32  __stdcall  ZAux_Direct_Single_Vmove(ZMC_HANDLE handle, int  iaxis, int  idir)

指令说明

单轴连续运动指令,连续往一个方向运动。

输入参数

参数名

描述

handle

连接标识。

iaxis

轴号。

idir

方向-1—负向  1—正向。

输出参数

/

返回值

成功返回值为0,非0详见错误码说明。

指令示例

单轴持续运动

详细说明

当前面的VMOVE运动没有停止时,此VMOVE指令会自动替换前面的VMOVE指令并修改方向,因此无需CANCEL前面的VMOVE指令。



例程演示


1.连接控制器。

#连接控制器, 控制器默认IP是192.168.0.11,此处使用comboBox内输入的ipdef on_btn_open_clicked(self):    strtemp = self.ui.comboBox.currentText()    print("当前的ip是 :", strtemp)    if self.Zmc.handle.value is not None:        self.Zmc.ZAux_Close()        self.time1.stop()        self.ui.setWindowTitle("单轴运动")    iresult = self.Zmc.ZAux_OpenEth(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)#开启定时器
2.下载BAS文件到控制器
#下载BAS文件到控制器def on_btn_down_bas_clicked(self):  # 下载BAS文件到控制器    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)    self.ui.textEdit_file_path.insertPlainText(self.file_Name + "\n")    # 读取BAS文件中的变量判断是否有加载BAS文件    temp = self.Zmc.ZAux_Direct_GetUserVar("BUS_TYPE")[1].value      self.Bus_type = float(temp)    # BAS文件下载到ROM    ret = self.Zmc.ZAux_BasDown(self.file_Name, 1)      if ret != 0:        QMessageBox.warning(self.ui, "提示""文件下载失败!" + "错误码为 :%1 ".format(ret))
3.下载ZAR文件到控制器
#下载ZAR文件到控制器def on_btn_down_zar_clicked(self):  # 下载zar件到控制器    if self.Zmc.handle.value is None:        QMessageBox.warning(self.ui, "提示""未连接控制器")        return    file_Date = QFileDialog.getOpenFileName(self.ui, "选择zar文件""..""Files(*.zar)")    self.file_Name = file_Date[0].replace("/""\\")    print(self.file_Name)    self.ui.textEdit_file_path.insertPlainText(self.file_Name + "\n")    # 读取zar文件中的变量判断是否有加载zar文件    temp = self.Zmc.ZAux_Direct_GetUserVar("BUS_TYPE")[1].value    self.Bus_type = float(temp)    # zar文件下载到ROM    ret = self.Zmc.ZAux_ZarDown(self.file_Name, 1)    if ret != 0:        QMessageBox.warning(self.ui, "提示""zar文件下载失败!" + "错误码为 :%1 ".format(ret))
4.SDO写入数据。

#SDO写入数据def on_btn_Ecat_write_clicked(self):  # ETHERCAT写    if self.Zmc.handle.value is None:        QMessageBox.warning(self.ui, "提示""未连接控制器")        return    #节点编号    m_sdo_node1 = int(self.ui.edit_node_1.text())    # 对象字典编号    m_sdo_index1 = int(self.ui.edit_dir_1.text())    # 对象字典子编号    m_sdo_sub1 = int(self.ui.edit_sub_node_1.text())    # 数据类型    m_sdo_type1 = self.ui.comboBox_type_1.currentIndex() + 1    #写入数据字典值的数据值     m_sdo_data1 = int(self.ui.edit_date_1.text())    if self.Bus_type == 0:        #SDO写入        ret = self.Zmc.ZAux_BusCmd_SDOWrite(0, m_sdo_node1, m_sdo_index1, m_sdo_sub1, m_sdo_type1, m_sdo_data1)        if ret != 0:            QMessageBox.warning(self.ui, "提示", "写入失败")            return    else:        QMessageBox.warning(self.ui, "提示", "非ETHERCAT模块")        return
5.SDO读取数据。

#SDO读取数据def on_btn_Ecat_read_clicked(self):  # ETHERCAT读取    if self.Zmc.handle.value is None:        QMessageBox.warning(self.ui, "提示""未连接控制器")        return    #节点编号    m_sdo_node2 = int(self.ui.edit_node_2.text())    #对象字典编号    m_sdo_index2 = int(self.ui.edit_dir_2.text())    #对象字典子编号    m_sdo_sub2 = int(self.ui.edit_sub_node_2.text())    #数据类型    m_sdo_type2 = self.ui.comboBox_type_2.currentIndex() + 1    m_sdo_data2 = ctypes.c_int(0)    print(self.Bus_type)    if self.Bus_type == 0:        #通过设备号和槽位号进行 SDO 读取。        ret = self.Zmc.ZAux_BusCmd_SDORead(0, m_sdo_node2, m_sdo_index2, m_sdo_sub2, m_sdo_type2)        #读取的数据值        m_sdo_data2 = int(ret[1].value)        if ret != 0:            QMessageBox.warning(self.ui, "提示""读取失败")            return        self.ui.edit_date_2.setText(str(m_sdo_data2))    else:        QMessageBox.warning(self.ui, "提示""非ETHERCAT模块")        return


运行效果


运行python程序,通过RTSys软件观察运行情况。

通过驱动器软件查看sdo读写情况(对象字典为10进制数据):此处以雷赛驱动为例读写驱动器SDO。

1.SDO_READ读取驱动器SDO参数,比如先在驱动器软件设置单圈脉冲数量为5000后,通过SDO_READ读取驱动器单圈脉冲数。

2.SDO_WRITE写入驱动器SDO参数,比如使用SDO_WRITE写入单圈脉冲数量为10000后,通过驱动器软件查看修改结果。



总线初始化bas文件


总线初始化BAS文件下载到控制器ROM里面掉电保存。


1.EtherCAT总线扩展接线

每个EIO扩展模块在扩展接线完成后,不需要进行进行二次开发,只需手动在EtherCAT主站控制器配置扩展模块唯一的IO地址和轴地址,配置完成即可访问。

IO地址编号通过总线指令NODE_IO来设置,控制器上程序只需通过IO编号就可以访问到扩展模块上的资源。轴地址的配置使用AXIS_ADDRESS指令映射绑定轴号,绑定完成通过BASE或AXIS指令指定轴号。

接线时注意EtherCAT IN连接上一级模块,EtherCAT OUT连接下一级模块,IN和OUT口不可混用。

EIO扩展模块接线参考

上图涉及的编号概念如下;总线相关指令参数会用到如下编号:

1)槽位号(slot):

槽位号是指控制器上总线接口的编号,EtherCAT总线槽位号为0。

2)设备号(node):

设备号是指一个槽位上连接的所有设备的编号,从0开始,按设备在总线上的连接顺序自动编号,可以通过NODE_COUNT(slot)指令查看总线上连接的设备总数。

3)驱动器编号:

控制器会自动识别出槽位上的驱动器,编号从0开始,按驱动器在总线上的连接顺序自动编号。

驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略,映射轴号时将会用到驱动器编号。


2.EtherCAT总线扩展资源映射

1)IO映射

控制器上程序只需通过IO编号就可以访问到扩展模块上的资源,EtherCAT总线扩展模块IO编号通过总线指令NODE_IO来设置,同时配置输入和输出。

IO映射时先查看控制器自身的最大IO编号(包括外部IO接口和脉冲轴内的接口),再使用指令设置。

若扩展的IO与控制器自身IO编号重合,二者将同时起作用,所以IO映射的映射的编号在整个控制系统中均不得重复。

IO映射语法:
NODE_IO(slot,node)=iobase
slot:槽位号,0-缺省

node:设备编号,编号从0开始

iobase:映射IO起始编号,设置结果只会是8的倍数

2)轴映射

扩展模块的轴使用前需要使用AXIS_ADDRESS指令映射轴号,轴映射也需要注意整个系统的轴号不得重复。EIO系列扩展轴的映射与总线驱动器的轴映射语法相同。

轴映射语法:

AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1


3.总线初始化BAS程序
'********************************ECAT总线初始化***********************global CONST BUS_TYPE = 0         '总线类型。可用于上位机区分当前总线类型global CONST Bus_Slot  = 0        '槽位号0(单总线控制器缺省0)global CONST PUL_AxisStart   = 0    '本地脉冲轴起始轴号global CONST PUL_AxisNum   = 0    '本地脉冲轴轴数量global CONST Bus_AxisStart   = 0      '总线轴起始轴号global CONST Bus_NodeNum   = 1      '总线配置节点数量,用于判断实际检测到的从站数量是否一致global  MAX_AXISNUM        '最大轴数MAX_AXISNUM = SYS_ZFEATURE(0)global Bus_InitStatus      '总线初始化完成状态Bus_InitStatus = -1global  Bus_TotalAxisnum    '检查扫描的总轴数delay(3000)        '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时?"总线通讯周期:",SERVO_PERIOD,"us"Ecat_Init()      '初始化ECAT总线 while (Bus_InitStatus = 0)    Ecat_Init()wend'*****************ECAT总线初始********************************************************************'初始流程:  slot_scan(扫描总线) ->   从站节点映射轴/io  ->  SLOT_START(启动总线) -> 初始化成功'**************************************************************************************************global sub Ecat_Init()    local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias    RAPIDSTOP(2)    for i=0 to MAX_AXISNUM - 1        '初始化还原轴类型                  AXIS_ENABLE(i) = 0        atype(i)=0          AXIS_ADDRESS(i) =0        DELAY(10)            '防止所有驱动器全部同时切换使能导致瞬间电流过大    next    Bus_InitStatus = -1    Bus_TotalAxisnum = 0      SLOT_STOP(Bus_Slot)            delay(200)    slot_scan(Bus_Slot)        '扫描总线    if return then         ?"总线扫描成功","连接从站设备数:"NODE_COUNT(Bus_Slot)        if NODE_COUNT(Bus_Slot) <> Bus_NodeNum then    '判断总线检测数量是否为实际接线数量            ?"扫描节点数量与程序配置数量不一致!" ,"配置数量:"Bus_NodeNum,"检测数量:"NODE_COUNT(Bus_Slot)            Bus_InitStatus = 0    '初始化失败。报警提示        endif           '"开始映射轴号"        for Node_Num=0 to NODE_COUNT(Bus_Slot)-1            '遍历扫描到的所有从站节点            Drive_Vender = NODE_INFO(Bus_Slot,Node_Num,0)        '读取驱动器厂商            Drive_Device = NODE_INFO(Bus_Slot,Node_Num,1)        '读取设备编号            Drive_Alias = NODE_INFO(Bus_Slot,Node_Num,3)          '读取设备拨码ID            if NODE_AXIS_COUNT(Bus_Slot,Node_Num) <> 0  then        '判断当前节点是否有电机                '根据节点带的电机数量循环配置轴参数(针对一拖多驱动器)                for j=0 to NODE_AXIS_COUNT(Bus_Slot,Node_Num)-1                          Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum    '轴号按NODE顺序分配                    'Temp_Axis = Drive_Alias    '轴号按驱动器设定的拨码分配(一拖多需要特殊处理)                              base(Temp_Axis)                    AXIS_ADDRESS(Temp_Axis)= (Bus_Slot<<16)+ Bus_TotalAxisnum + 1  '映射轴号                    ATYPE=65    '设置控制模式 65-位置 66-速度 67-转矩                       DRIVE_PROFILE=0                    Sub_SetPdo(Node_Num,Drive_Vender,Drive_Device)      '设定PDO参数                    '映射驱动器IO  IO映射到控制器IO32-以后每个驱动器间隔32                    Sub_SetDriverIo(Drive_Vender,Temp_Axis,32 + 32*Temp_Axis)                              Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j)      '设置特殊总线参数                    disable_group(Temp_Axis)                  '每轴单独分组                    Bus_TotalAxisnum=Bus_TotalAxisnum+1              '总轴数+1                next            else                            'IO扩展模块                Sub_SetNodeIo(Node_Num,Drive_Vender,Drive_Device,32 + 32*Node_Num)'映射扩展模块IO              endif        next        ?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum        wa 200        SLOT_START(Bus_Slot)        '启动总线        if return then             wdog=1              '使能总开关            for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1                 BASE(i)                DRIVE_CLEAR(0)                DELAY 50                '?"驱动器错误清除完成"                datum(0)            '清除控制器轴状态错误"                wa 100                  '"轴使能"                AXIS_ENABLE=1            next            Bus_InitStatus  = 1            ?"轴使能完成"            '本地脉冲轴配置            for i = 0 to PUL_AxisNum - 1                base(PUL_AxisStart + i)                AXIS_ADDRESS  = (-1<<16) +  i                ATYPE = 4            next            ?"总线开启成功"              else            ?"总线开启失败"            Bus_InitStatus = 0        endif      else        ?"总线扫描失败"        Bus_InitStatus = 0    endifend sub'*********************************从站节点特殊参数配置*******************************************'通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)'**************************************************************************************************global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)    if  iVender = $41B and iDevice = $1ab0   then    '正运动24088脉冲扩展轴        SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4)  '设置扩展脉冲轴ATYPE类型        SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0)  '设置扩展脉冲轴INVERT_STEP脉冲输出模式        NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode      '设置240808上IO的起始映射地址            elseif iVender = $66f then              '松下驱动器        SDO_WRITE(Bus_Slot,iNode,$3741,0,3,0)      '以拨码为ID        SDO_WRITE(Bus_Slot,iNode,$3401,0,4,$10101)    '正限位电平 $818181        SDO_WRITE(Bus_Slot,iNode,$3402,0,4,$20202)    '负限位电平 $828282        SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1)      '齿轮比        SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1)          SDO_WRITE(Bus_Slot,iNode,$6092,1,7,10000)    '电机一圈脉冲数        SDO_WRITE(Bus_Slot,iNode,$607E,0,5,224)      '电机方向0  反转224           SDO_WRITE(Bus_Slot,iNode,$6085,0,7,4290000000)  '异常减速度        'SDO_WRITE(Bus_Slot,iNode,$1010,1,7,$65766173)  '写EPPROM(写EPPROM后驱动器需要重新上电)        '?"写EPPR0M OK 请断电重启"        elseif iVender = $100000 then            '汇川驱动器        SDO_WRITE(Bus_Slot,iNode,$6091,1,7,1)      '齿轮比        SDO_WRITE(Bus_Slot,iNode,$6091,2,7,1)      endifend sub

4.BAS总线初始化关键函数

1)SLOT_SCAN -- 总线扫描

类型

总线指令

描述

总线扫描

通过RETURN返回成功与否,返回-1扫描成功,0扫描失败。

Rtex扫描失败会直接报错6209。

遇到不支持的设备类型,RETURN会返回0。

Rtex控制器未连接设备时会报错,EtherCAT控制器不会。

扫描后可以使用NODE指令读取相关设备信息,并使用DRIVE相关指令配置。

语法

SLOT_SCAN (slot)

slot:控制器EtherCAT槽位号或RTEX槽位号,0-缺省

适用控制器

带EtherCAT接口或RTEX接口

相关指令

SLOT_STARTSLOT_STOP

2)AXIS_ADDRESS -- 轴地址设置

类型

轴参数

描述

扩展轴时的轴地址配置

1.ZCAN扩展轴时,扩展板上带8位拨码开关(V1.3以上硬件版本)。

受总线带宽限制,ZCAN扩展轴不要设置超过2个。

必须先设置AXIS_ADDRESS,再设置ZCAN扩展轴ATYPE类型,修改后必须重新设置ATYPE。见例一。

位1-4

CAN地址拨码,组合值0-15

位5-6

CAN速度拨码,不同组合值速度不同

位7

特殊功能预留

位8

120欧姆电阻拨码,拨ON时电阻接通

规则:AXIS_ADDRESS(轴号)=(32*0)+ID     '扩展板的本地轴接口0

      AXIS_ADDRESS(轴号)=(32*1)+ID     '扩展板的本地轴接口1

2.总线驱动器映射轴号,将连接的驱动器按编号一一映射。

驱动器编号根据接线顺序排列,编号从0开始到EtherCAT驱动器个数减1。

驱动器编号与设备号不同,设备号包括ECAT接口所有连接的设备,驱动器编号只算连接的驱动器。

必须先设置AXIS_ADDRESS,再设置ECAT轴ATYPE类型,修改后必须重新设置ATYPE。见例二。

位0-15

驱动器编号加1,0-自动指定

位16-31

SLOT编号(多槽位时)

规则:AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1

3.本地脉冲轴号重映射,4系列控制器支持本地脉冲或编码器轴号重新映射,固件160608以上版本支持。

重新映射时注意先把原本地脉冲轴设置为虚拟轴。修改后必须重新设置ATYPE。见例四。

位0-15

映射的本地脉冲轴号

位16-31

高16位全设为1(等同于十进制下高16位= -1)

规则:BASE(重映射的轴号)

      ATYPE=0,设置轴类型为0,低版本不设置会报错

BASE(要修改的本地脉冲轴号)

      ATYPE=0,设置轴类型为0

      AXIS_ADDRESS(重映射的轴号)= (-1<<16) +要修改的本地脉冲轴号

BASE(重映射的轴号)

      ATYPE=1/7

4.MotionRT控制卡子卡上的脉冲轴、编码器轴映射。

映射时必须先设置AXIS_ADDRESS,再设置ATYPE类型,修改后必须重新设置ATYPE。

位0-15

子卡上相对轴号加1

位16-31

子卡CARD编号

规则:

BASE(重映射的轴号)

ATYPE=0,设置轴类型为0,低版本不设置会报错

BASE(要修改的本地脉冲轴号)

ATYPE=0,设置轴类型为0

AXIS_ADDRESS(重映射的轴号)=(子卡号<<16)+子卡上相对物理轴号+1

BASE(重映射的轴号)

ATYPE=X(重新设置所需的轴类型)

语法

VAR1 = AXIS_ADDRESSAXIS_ADDRESS = expression

3)DRIVE_PROFILE -- 驱动器PDO设置

类型

EtherCAT轴参数

描述

每个轴的发送pdo接收pdo的配置选择。

必须设置正确的ATYPE(设置为65/66/67)以后才能操作这个参数。

详细配置请咨询厂家。

EtherCAT总线

-1表示使用驱动器的内置缺省PDO列表,20160601以上版本支持,缺省PDO不带0X6060时,无法使用datum(21)回零指令。

-1-驱动器默认设置,需要控制器版本 20160601 及以上

0-缺省配置,csp位置模式
{0x60400010, 0x607a0020, 0x60600008},  

//控制字      目标位置     模式

{0x60410010, 0x60640020},  

//状态字 反馈位置

1-csp位置模式+力矩反馈
{0x60400010, 0x607a0020, 0x60600008},  

//控制字 目标位置 模式

{0x60410010, 0x60640020, 0x60770010},  

//状态字 反馈位置 当前力矩

2-csp位置模式+力矩反馈+锁存1up

{0x60400010, 0x607a0020, 0x60b80010, 0x60600008}, 

//控制字      目标位置   probe设置    模式

{0x60410010, 0x60640020, 0x60770010, 0x60b90010, 0x60ba0020},  

//状态字      反馈位置   当前力矩   probe状态  probe位置

3-csp位置模式+力矩限制+力矩反馈+锁存1上升沿

{0x60400010, 0x607a0020, 0x60b80010, 0x60720010, 0x60600008},  

//控制字     目标位置   probe设置  力矩限制     模式

{0x60410010, 0x60640020, 0x60770010, 0x60b90010, 0x60ba0020},  

//状态字      反馈位置   当前力矩   probe状态  probe位置

4-csp位置模式+力矩反馈+驱动器IO输入

{0x60400010, 0x607a0020, 0x60600008},  

//控制字      目标位置     模式

{0x60410010, 0x60640020, 0x60770010, 0x60fd0020},  

//状态字      反馈位置   当前力矩  驱动器IO输入

5-csp位置模式+力矩反馈+驱动器IO输出+驱动器IO输入

{0x60400010, 0x607a0020, 0x60fe0120,0x60600008},  

//控制字      目标位置     IO输出    模式

{0x60410010, 0x60640020, 0x60770010, 0x60fd0020},  

//状态字      反馈位置   当前力矩  驱动器IO输入

6-特殊驱动器专用
7-特殊驱动器专用
8-特殊驱动器专用
9-固件版本 160504 支持
{0x60400010,0x607a0020,0x60fe0120,0x60b80010,0x60720010,0x60600008},
//控制字   目标位置  IO输出(32个)  probe设置 力矩限制  模式
{0x60410010,0x60640020,0x60770010,0x60fd0020,x60b90010,0x60ba0020},
//状态字    反馈位置   当前力矩   驱动器IO输入(32个)  probe状态 probe位置
10-固件版本 160504 以上支持,加drive_fe部分

{0x60400010,0x607a0020,0x60fe0120,0x60b80010,0x60720010,0x60600008},

//控制字     目标位置    IO输出     probe设置  力矩限制    模式

{0x60410010,0x60640020,0x60770010,0x60fd0020,0x60b90010,0x60ba0020,0x60f40020},

//状态字    反馈位置   当前力矩 驱动器IO输入 probe状态 probe位置 drive_fe

11-固件版本 160504 以上支持,probe专用测试

{0x60400010, 0x607a0020, 0x60b80010, 0x60600008},

//控制字    目标位置    probe设置    模式

{0x60410010,0x60640020,0x60770010,0x60b90010,0x60ba0020,0x60bb0020, 0x60bc0020, 0x60bd0020},  

//状态字    反馈位置   当前力矩    probe状态 probe位置1/位置2/位置3/位置4

12-固件版本 160504 以上支持,特殊驱动器专用

{0x60400010, 0x607a0020, 0x60600008},  

//控制字 目标位置 模式

{0x60410010, 0x60640020, 0x60fd0020},  

//状态字 反馈位置 驱动器IO输入

13-固件版本 160504 以上支持,带速度前馈与加速度前馈

{0x60400010, 0x60B20010, 0x607a0020, 0x60B10020, 0x60600008},  

//控制字     加速度前馈  目标位置   速度前馈    模式

{0x60410010, 0x60640020, 0x60770010, 0x60fd0020, 0x606c0020},  

//状态字     反馈位置   当前力矩  驱动器IO输入 实际速度

17-固件版本160504以上支持,csp/csv/cst三种模式可以切换

{0x60400010,0x60710010,0x60ff0020,0x607a0020,0x60b80010,0x60720010, x60600008},

//控制字     周期力矩   周期速度  目标位置  probe设置  力矩限制    模式

{0x60410010,0x60770010,0x60640020,0x60fd0020,0x60b90010,0x60ba0020, x60bb0020},

//状态字    当前力矩   反馈位置  驱动器IO输入 probe状态  probe位置1/位置2/

18-固件版本160504以上支持,csp/csv/cst三种模式可以切换+力矩反馈读取

{0x60400010,0x60710010,0x60ff0020,0x607a0020,0x60b80010,0x60720010,0x60600008},

//控制字   周期力矩    周期速度  目标位置   probe设置  力矩限制   模式

{0x60410010,0x60770010,0x60640020,0x60fd0020,0x60b90010,0x60ba0020,0x60bb0020, 0x60bc0020, 0x60bd0020},

//状态字  当前力矩   反馈位置   驱动器IO输入 probe状态  probe位置1/位置2/

probe位置3/位置4

20-固件版本 160504 以上支持,csp位置+csv速度

{0x60400010, 0x60ff0020, 0x607a0020, 0x60600008},

//控制字     目标速度   目标位置     模式

{0x60410010, 0x60640020},

//状态字     反馈位置

4)SDO_READ -- 数据字典读取

类型

总线指令,仅EtherCAT可用

描述

通过设备号和槽位号进行SDO读取

通过RETURN返回成功与否,-1写入成功,0写入失败

需连接好设备,扫描总线后才能执行。

只有可读的数据字典才能读取。

SDO不要频繁读写。

语法

SDO_READ (slot, node, index, subindex ,type,tablenum)

slot:槽位号 0-缺省

node:设备编号 0-

index:数据字典编号,前面可加"$"表示16进制,如$6060

subindex:子编号

type:数据类型

1

 boolean

2

 integer 8

3

 integer 16

4

 integer 32

5

 unsigned 8

6

 unsigned 16

7

 unsigned 32

8

 float

9

 string

tablenum:读取的数据存储的TABLE位置

适用控制器

带EtherCAT接口

相关指令

SDO_READ_AXISSDO_WRITE

5)SDO_WRITE -- 数据字典写入

类型

总线指令,仅EtherCAT可用

描述

通过设备号和槽位号进行SDO写入

通过RETURN返回成功与否,-1写入成功,0写入失败。

需连接好设备,扫描总线后才能执行。

只有可写的数据字典才能写入。

SDO不要频繁读写。

语法

SDO_WRITE (slot, node, index, subindex ,type ,value)

slot:槽位号 0-缺省

node:设备编号 0-

index:数据字典编号,前面可加"$"表示16进制,如$6060

subindex:子编号

type:数据类型

1

boolean

2

integer 8

3

integer 16

4

integer 32

5

unsigned 8

6

unsigned 16

7

unsigned 32

8

float

9

string

value:数据值

适用控制器

带EtherCAT接口

相关指令

SDO_WRITE_AXISSDO_READ


5.教学视频

完整代码获取地址

本次,正运动技术EtherCAT运动控制器上位机开发之Python+Qt(三):PDO配置与SDO读写,就分享到这里。

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

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

回顾往期内容

开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里

送书福利!全自主IDE的《运动控制系统应用与实践》

EtherCAT运动控制器上位机开发之Python+Qt(二):回零

EtherCAT运动控制器上位机开发之Python+Qt(一):链接与单轴运动



C#之Delta并联机械手的视觉同步分拣

C#之Delta并联机械手的视觉相机标定与形状匹配

C#之Delta并联机械手正逆解的建立和手动运动

PCIe EtherCAT实时运动控制卡PCIE464的安装与调试

PCIe EtherCAT实时运动控制卡PCIE464的IO与编码器读写应用

PCIe EtherCAT实时运动控制卡的DXF图形的CAD导图与多条运动指令的快速加工

机器视觉运动控制一体机VPLC532E在汽车胶带缠绕的开放式CNC应用

VPLC系列机器视觉运动控制一体机在五轴联动点胶上的应用

机器视觉运动控制快组态软件RTFuse在XYZ三轴运动平台的应用方案

机器视觉运动控制一体机在喇叭跟随点胶上的应用

机器视觉运动控制一体机在光伏汇流焊机器人系统的解决方案

机器视觉运动控制一体机在点胶胶路检测上的应用

机器视觉运动控制一体机在SCARA机械手柔性上下料的应用

开放式激光振镜运动控制器在动力电池模组连接片的焊接应用

开放式激光振镜运动控制器的视觉校正振镜精度解决方案

开放式激光振镜运动控制器的激光清洗应用

基于VPLC711的曲面外观检测XYR运动控制解决方案

基于VPLC532E开放式数控系统在五轴义齿机上的应用

PCIE超高速实时运动控制卡在六面外观视觉检测上的应用

超高速PCIe EtherCAT运动控制卡在高速异形插件机上的应用

运动控制器多工位位置比较输出在转盘式视觉筛选设备中的应用

EtherCAT总线冗余让制造更安全更可靠更智能

机器视觉运动控制一体机结构体功能上线,助力客户高效开发

正运动携手EPLAN,以高效的电气设计助力运动控制的数字化设计

EtherCAT运动控制器PT/PVT实现用户自定义轨迹规划

BissC绝对值编码器在EtherCAT运动控制器中的应用

EtherCAT运动控制器在UVW对位平台中的应用

EtherCAT运动控制器Delta机械手应用

EtherCAT运动控制器的MATLAB开发

运动控制器/运动控制卡配套ZCAN总线ZIO模块的使用

运动控制卡/运动控制器的ZCAN总线ZMIO310扩展模块使用

EtherCAT运动控制器在ROS上的应用(下)

EtherCAT运动控制器在ROS上的应用(上)


皮带同步跟随:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十四)

自定义电子凸轮曲线的运动:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十三)

连续轨迹加工和速度前瞻:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十二)

PT/PVT运动模式介绍:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十一)

项目工程下载与XML配置文件下载:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十)

EtherCAT驱动器回零与控制器回零:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(九)

二维/三维的多轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(八)

单轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(七)

硬件位置比较输出和编码器锁存:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(六)

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(五):通过RTSys进行调试与诊断

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(四):板载IO与总线扩展IO的编码器与脉冲配置的应用

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(三):EtherCAT总线CSP,CSV,CST模式切换

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(二):EtherCAT总线初始化

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(一):驱动安装与建立连接

全国产EtherCAT运动控制边缘控制器(六):RtBasic文件下载与连续轨迹加工的Python+Qt开发

全国产EtherCAT运动控制边缘控制器(五):IO配置与回零运动的Python+Qt开发

全国产EtherCAT运动控制边缘控制器(四):轴参数配置与单轴运动PC上位机C++控制

全国产EtherCAT运动控制边缘控制器(三):外设读写与RTSys开发诊断

全国产EtherCAT运动控制边缘控制器(二):统一的上位机API接口

全国产EtherCAT运动控制边缘控制器(一):ZMC432H硬件接口

简单易用的以太网数据采集卡应用开发之C#

高柔SS加减速曲线在锂电池焊接中的应用

EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?

工业以太网时代,该如何选择总线运动控制器?

正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?


EtherCAT运动控制器Delta机械手应用

EtherCAT运动控制器的MATLAB开发

EtherCAT运动控制器在数控加工手轮随动中的应用

EtherCAT运动控制器在数控加工手轮随动中的应用之C++

EtherCAT运动控制器在LabVIEW中的运动控制与实时数据采集

运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出

运动控制器PSO视觉飞拍与精准输出的C++开发(二):多轴PSO等距/周期输出

运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO

运动控制器八通道PSO的视觉飞拍与精准输出

Windows实时运动控制软核(七):LOCAL高速接口测试之Labview

Windows实时运动控制软核(六):LOCAL高速接口测试之Matlab

Windows实时运动控制软核(五):LOCAL高速接口测试之VC6.0

Windows实时运动控制软核(四):LOCAL高速接口测试之VB.NET

Windows实时运动控制软核(三):LOCAL高速接口测试之C++

Windows实时运动控制软核(二):LOCAL高速接口测试之Qt

Windows实时运动控制软核(一):LOCAL高速接口测试之C#

开放式激光振镜运动控制器:C++ 快速调用图形库应用

开放式激光振镜运动控制器:C++振镜矫正方法与实现

开放式激光振镜运动控制器:C++快速开发


开放式激光振镜运动控制器(五):ZMC408SCAN 光纤激光器的能量控制

开放式激光振镜运动控制器(四):ZMC408SCAN振镜控制光纤激光器加工

开放式激光振镜运动控制器(三):ZMC408SCAN轴控光纤激光器加工

开放式激光振镜运动控制器(二):ZMC408SCAN激光接口与控制

开放式激光振镜运动控制器(一):ZMC408SCAN接口与功能


运动控制器PSO位置同步输出(三):高精度等间距二维三维PSO输出

运动控制器PSO位置同步输出(二):PSO模式详解

运动控制器PSO位置同步输出(一):硬件平台与PSO指令简介


经济型EtherCAT运动控制器(十):EtherCAT总线快速入门

经济型EtherCAT运动控制器(九):示波器使

经济型EtherCAT运动控制器(八):轴参数与运动指令

经济型EtherCAT运动控制器(七):运动缓冲

经济型EtherCAT运动控制器(六):数据储存

经济型EtherCAT运动控制器(五):多任务运行

经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯

经济型EtherCAT运动控制器(三):PLC实现多轴直线插补与电子凸轮

经济型EtherCAT运动控制器(二):ZBasic实现多轴直线插补运动

经济型EtherCAT运动控制器(一):功能简介与应用场景


运动控制+机器视觉Demo软件框架(三):视觉纠偏+连续插补的配方编辑

运动控制+机器视觉Demo软件框架(二):移动标定和形状匹配

运动控制+机器视觉Demo软件框架(一):机械参数和配方文件的管理

运动控制+机器视觉Demo软件框架系统概述


开放式激光振镜+运动控制器(六):双振镜运动

开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍

开放式激光振镜+运动控制器(四):PSO位置同步输出在激光振镜加工中的应用

开放式激光振镜+运动控制器(三):振镜矫正

开放式激光振镜+运动控制器(二):振镜填充

开放式激光振镜+运动控制器(一):硬件接口


EtherCAT轴扩展模块EIO16084在运动控制系统中的应用
EtherCAT运动控制器中脉冲接口的快速调试与诊断
EtherCAT运动控制器之ZMIO300模块的使用
EtherCAT运动控制器的PLC编程(四) 电子凸轮
EtherCAT运动控制器的PLC编程(三) 电子齿轮
EtherCAT运动控制器的PLC编程(二) 圆弧插补
EtherCAT运动控制器的PLC编程(一) 直线插补


快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

快速入门 | 篇二十一:正运动技术运动控制器自定义通讯

快速入门 | 篇二十:正运动技术运动控制器MODBUS通讯

快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介


快速入门 | 篇十八:正运动技术脉冲型运动控制器的使用

快速入门 | 篇十七:运动控制器多轴插补运动指令的使用

快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门

快速入门 | 篇十五:运动控制器运动缓冲简介

快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令

快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用


快速入门 | 篇十二:正运动技术运动控制器U盘接口的使用

快速入门 | 篇十一:正运动技术运动控制器中断的应用

快速入门 | 篇十:运动控制器多任务运行特点

快速入门 | 篇九:如何进行运动控制器示波器的应用?

快速入门 | 篇八:如何进行运动控制器EtherCAT总线的基础使用?

快速入门 | 篇七:如何进行运动控制器ZCAN总线扩展模块的使用?


快速入门 | 篇六:如何进行运动控制器数据与存储的应用?

快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?

快速入门 | 篇四:如何进行运动控制器与触摸屏通讯?

快速入门 | 篇三:如何进行运动控制器ZPLC程序开发?

快速入门 | 篇二:如何进行运动控制器ZBasic程序开发?

快速入门 | 篇一:如何进行运动控制器固件升级?


EtherCAT与RTEX驱动器轴回零的配置与实现

G代码在运动控制器上的应用

运动控制器的自定义G代码编程应用

离线仿真调试,加快项目进度!

8轴EtherCAT轴扩展模块EIO24088的使用

运动控制器之追剪应用Demo

运动控制器激光振镜控制
运动控制器轴回零的配置与实现

运动控制器位置锁存功能的应用

ZMC运动控制器SCARA机械手应用快速入门

运动控制器RTEX总线使用入门

正运动技术CAD导图软件配合控制器的使用方法

EtherCAT总线运动控制器应用进阶一


EtherCAT运动控制卡开发教程之Qt(下):SCARA机械手正反解的建立

EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用


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

EtherCAT运动控制卡的SCARA等机器人指令的应用

EtherCAT运动控制卡的PWM与模拟量输出和运动速度同步

EtherCAT运动控制卡硬件比较输出以及编码器锁存

EtherCAT运动控制卡IO动作与运动控制的同步

EtherCAT运动控制卡实时程序的运行和读写控制


EtherCAT运动控制卡的运动暂停、恢复与系统安全设置

EtherCAT运动控制卡小线段前瞻的连续插补运动

EtherCAT运动控制卡的多轴插补运动和手轮运动

EtherCAT运动控制卡的辅助调试工具与方法介绍

EtherCAT运动控制卡的总线轴参数设置和轴运动

EtherCAT运动控制卡的硬件接线与C#的硬件外设读写与回零运动

EtherCAT运动控制卡的硬件接线与C#的单轴运动控制


简单易用的运动控制卡(十六):螺距补偿和反向间隙补偿

简单易用的运动控制卡(十五):PC启停控制器的实时程序

简单易用的运动控制卡(十四):PWM、模拟量输出与运动控制的同步

简单易用的运动控制卡(十三):IO动作与运动控制的同步

简单易用的运动控制卡(十二):运动控制系统的安全设置

简单易用的运动控制卡(十一):运动的暂停恢复和速度倍率设置


简单易用的运动控制卡(十):连续插补和小线段前瞻

简单易用的运动控制卡(九):圆弧插补和螺旋插补

简单易用的运动控制卡(八):直线插补和手轮运动

简单易用的运动控制卡(七):一次性加载多条连续小线段数据

简单易用的运动控制卡(六):Basic文件下载和连续轨迹加工


简单易用的运动控制卡(五):IO配置与回零运动

简单易用的运动控制卡(四):函数库的封装

简单易用的运动控制卡(三):轴参数配置和单轴运动控制

简单易用的运动控制卡(二):外设读写与ZDevelop诊断

简单易用的运动控制卡(一):硬件接线和上位机开发


运动控制卡在ROS上的应用(下)

运动控制卡在ROS上的应用(上)


EtherCAT运动控制卡和LabVIEW构建智能装备(五)

EtherCAT运动控制卡和LabVIEW构建智能装备(四)

EtherCAT运动控制卡和LabVIEW构建智能装备(三)

EtherCAT运动控制卡和LabVIEW构建智能装备(二)

EtherCAT运动控制卡和LabVIEW构建智能装备(一)

EtherCAT运动控制卡在LabVIEW中的运动控制与数据采集


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

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

运动控制卡应用开发教程之Python

运动控制卡应用开发教程之C#

运动控制卡应用开发教程之Linux

运动控制卡应用开发教程之VB.NET


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

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

运动控制卡应用开发教程之使用Qt

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

运动控制卡应用开发教程之激光振镜控制

运动控制卡应用开发教程之硬件比较输出


关于正运动技术



深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。

正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。

正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。

经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。

正运动小助手
正运动小助手是正运动技术旗下技术资料平台,可第一时间发布最新产品技术文档,为您奉上最全面的运动控制产品基础知识介绍、使用注意事项及操作步骤指引等资料。
 最新文章