点击上方“正运动小助手”,随时关注新动态!
ZMC408CE控制器硬件介绍
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的刷新周期。
PCIE464M控制卡硬件介绍
用户可直接将PCIE464M嵌入标准PC机实现高性能的EtherCAT运动控制功能,实现高精多轴同步控制,EtherCAT控制周期最小可达100us!
PCIE464M内置多路高速IO输入输出,可满足用户的多样化高速IO应用需求,如:高速色标锁存、高速PWM、多维位置比较输出PSO、视觉飞拍、速度前瞻、编码器位置检测等应用。
PCIE464M视频介绍
更多关于PCIE464M的详情介绍,点击“PCIE464M-高速高精,超高速PCIe EthrtCAT实时运动控制卡”查看。
ECI2A18B控制卡硬件介绍
ECI2A18B控制卡最大可扩展至12脉冲轴,支持8路高速输入和4路高速输出,集成丰富的运动控制功能,包含多轴点位运动、电子凸轮,直线插补,圆弧插补,连续插补运动等,满足多样化的工业应用需求。
更多关于ECI2A18B的详情介绍,点击“【加量不加价】正运动网络型运动控制卡ECI2618B/ECI2A18B”查看。
一
Python+Qt开发流程
Python+Qt运动控制开发流程参考“EtherCAT运动控制器上位机之Python+Qt(一):链接与单轴运动”。
二
相关PC函数介绍
1.PC函数手册可在光盘资料查看,具体路径如下。
指令3 | ZAux_OpenEth | ||||
指令原型 | int32 __stdcall ZAux_OpenEth(char *ipaddr, ZMC_HANDLE * phandle) | ||||
指令说明 | 以太网连接控制器。 | ||||
输入参数 |
| ||||
输出参数 |
| ||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||
指令示例 | 网口连接控制器 | ||||
详细说明 | 1.网口采用RJ45标准网线接口,通讯速率为100Mbit/s。 2.控制器出厂的IP地址为192.168.0.11,端口号为502。对端通讯设备需与控制器处于同一网段,才可进行连接。 3.最常用的控制器连接方式。 4.ZMC_HANDLE类型:Zmotion库中,专门用于控制卡连接数据定义类型; |
指令268 | ZAux_BasDown | ||||||||
指令原型 | int32 __stdcall ZAux_BasDown(ZMC_HANDLE handle,const char *Filename,uint32 run_mode ) | ||||||||
指令说明 | 单个.bas文件生成ZAR并且下载到控制器运行 | ||||||||
输入参数 |
| ||||||||
输出参数 | / | ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||
指令示例 | 控制程序的下载及编写 | ||||||||
详细说明 | .bas文件,可在正运动控制卡直接运行的Basic语法文件 |
指令269 | ZAux_ZarDown | ||||||||
指令原型 | int32 __stdcall ZAux_ZarDown(ZMC_HANDLE handle,const char *Filename,uint32 run_mode) | ||||||||
指令说明 | 下载ZAR程序到控制器运行 | ||||||||
输入参数 |
| ||||||||
输出参数 | / | ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||
指令示例 | / | ||||||||
详细说明 | Zar文件,正运动控制卡直接运行的程序,经过加密后生成的文件 |
指令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写入 | ||||||||||||||||||||||||||||||
输入参数 |
| ||||||||||||||||||||||||||||||
输出参数 | / | ||||||||||||||||||||||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||||||||||||||||||||||||
指令示例 | 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读取。 | ||||||||||||||||||||||||||||
输入参数 |
| ||||||||||||||||||||||||||||
输出参数 |
| ||||||||||||||||||||||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||||||||||||||||||||||
指令示例 | SDO读写最大扭矩 | ||||||||||||||||||||||||||||
详细说明 | 需连接好设备,扫描总线后才能执行。 |
指令17 | ZAux_Direct_GetAtype | ||||||
指令原型 | int32 __stdcall ZAux_Direct_GetAtype(ZMC_HANDLE handle, int iaxis, int *piValue) | ||||||
指令说明 | 读取指定轴的轴类型。 | ||||||
输入参数 |
| ||||||
输出参数 |
| ||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||
指令示例 | 轴基本运动参数设置获取 | ||||||
详细说明 |
|
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位小数精度。 控制器以脉冲当量作为基本单位,修改后坐标显示会随脉冲当量改变比例变化。 | ||||||||
输入参数 |
| ||||||||
输出参数 | / | ||||||||
返回值 | 成功返回值为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 |
指令94 | ZAux_Direct_Single_Vmove | ||||||||
指令原型 | int32 __stdcall ZAux_Direct_Single_Vmove(ZMC_HANDLE handle, int iaxis, int idir) | ||||||||
指令说明 | 单轴连续运动指令,连续往一个方向运动。 | ||||||||
输入参数 |
| ||||||||
输出参数 | / | ||||||||
返回值 | 成功返回值为0,非0详见错误码说明。 | ||||||||
指令示例 | 单轴持续运动 | ||||||||
详细说明 | 当前面的VMOVE运动没有停止时,此VMOVE指令会自动替换前面的VMOVE指令并修改方向,因此无需CANCEL前面的VMOVE指令。 |
三
例程演示
1.连接控制器。
#连接控制器, 控制器默认IP是192.168.0.11,此处使用comboBox内输入的ip
def 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)#开启定时器
#下载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))
#下载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))
def on_btn_Ecat_write_clicked(self):
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:
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
def on_btn_Ecat_read_clicked(self):
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:
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。
五
总线初始化bas文件
每个EIO扩展模块在扩展接线完成后,不需要进行进行二次开发,只需手动在EtherCAT主站控制器配置扩展模块唯一的IO地址和轴地址,配置完成即可访问。
EIO扩展模块接线参考
上图涉及的编号概念如下;总线相关指令参数会用到如下编号:
2)设备号(node):
3)驱动器编号:
驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略,映射轴号时将会用到驱动器编号。
1)IO映射
2)轴映射
AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1
'********************************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 = -1
global 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
endif
end 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)
endif
end sub
1)SLOT_SCAN -- 总线扫描
类型 | 总线指令 |
描述 | 总线扫描 通过RETURN返回成功与否,返回-1扫描成功,0扫描失败。 Rtex扫描失败会直接报错6209。 遇到不支持的设备类型,RETURN会返回0。 Rtex控制器未连接设备时会报错,EtherCAT控制器不会。 扫描后可以使用NODE指令读取相关设备信息,并使用DRIVE相关指令配置。 |
语法 | SLOT_SCAN (slot) slot:控制器EtherCAT槽位号或RTEX槽位号,0-缺省 |
适用控制器 | 带EtherCAT接口或RTEX接口 |
相关指令 | SLOT_START,SLOT_STOP |
2)AXIS_ADDRESS -- 轴地址设置
类型 | 轴参数 | ||||||||||||||||||||
描述 | 扩展轴时的轴地址配置。 1.ZCAN扩展轴时,扩展板上带8位拨码开关(V1.3以上硬件版本)。 受总线带宽限制,ZCAN扩展轴不要设置超过2个。 必须先设置AXIS_ADDRESS,再设置ZCAN扩展轴ATYPE类型,修改后必须重新设置ATYPE。见例一。
规则:AXIS_ADDRESS(轴号)=(32*0)+ID '扩展板的本地轴接口0 AXIS_ADDRESS(轴号)=(32*1)+ID '扩展板的本地轴接口1 驱动器编号根据接线顺序排列,编号从0开始到EtherCAT驱动器个数减1。 驱动器编号与设备号不同,设备号包括ECAT接口所有连接的设备,驱动器编号只算连接的驱动器。 必须先设置AXIS_ADDRESS,再设置ECAT轴ATYPE类型,修改后必须重新设置ATYPE。见例二。
规则:AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1 重新映射时注意先把原本地脉冲轴设置为虚拟轴。修改后必须重新设置ATYPE。见例四。
规则:BASE(重映射的轴号) ATYPE=0,设置轴类型为0,低版本不设置会报错 BASE(要修改的本地脉冲轴号) ATYPE=0,设置轴类型为0 AXIS_ADDRESS(重映射的轴号)= (-1<<16) +要修改的本地脉冲轴号 BASE(重映射的轴号) ATYPE=1/7 映射时必须先设置AXIS_ADDRESS,再设置ATYPE类型,修改后必须重新设置ATYPE。
规则: BASE(重映射的轴号) ATYPE=0,设置轴类型为0,低版本不设置会报错 BASE(要修改的本地脉冲轴号) ATYPE=0,设置轴类型为0 AXIS_ADDRESS(重映射的轴号)=(子卡号<<16)+子卡上相对物理轴号+1 BASE(重映射的轴号) ATYPE=X(重新设置所需的轴类型) | ||||||||||||||||||||
语法 | VAR1 = AXIS_ADDRESS,AXIS_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位置模式 //控制字 目标位置 模式 {0x60410010, 0x60640020}, //状态字 反馈位置 {0x60400010, 0x607a0020, 0x60600008}, //控制字 目标位置 模式 {0x60410010, 0x60640020, 0x60770010}, //状态字 反馈位置 当前力矩 {0x60400010, 0x607a0020, 0x60b80010, 0x60600008}, //控制字 目标位置 probe设置 模式 {0x60410010, 0x60640020, 0x60770010, 0x60b90010, 0x60ba0020}, //状态字 反馈位置 当前力矩 probe状态 probe位置 {0x60400010, 0x607a0020, 0x60b80010, 0x60720010, 0x60600008}, //控制字 目标位置 probe设置 力矩限制 模式 {0x60410010, 0x60640020, 0x60770010, 0x60b90010, 0x60ba0020}, //状态字 反馈位置 当前力矩 probe状态 probe位置 {0x60400010, 0x607a0020, 0x60600008}, //控制字 目标位置 模式 {0x60410010, 0x60640020, 0x60770010, 0x60fd0020}, //状态字 反馈位置 当前力矩 驱动器IO输入 {0x60400010, 0x607a0020, 0x60fe0120,0x60600008}, //控制字 目标位置 IO输出 模式 {0x60410010, 0x60640020, 0x60770010, 0x60fd0020}, //状态字 反馈位置 当前力矩 驱动器IO输入 {0x60400010,0x607a0020,0x60fe0120,0x60b80010,0x60720010,0x60600008}, //控制字 目标位置 IO输出(32个) probe设置 力矩限制 模式 {0x60410010,0x60640020,0x60770010,0x60fd0020,x60b90010,0x60ba0020}, //状态字 反馈位置 当前力矩 驱动器IO输入(32个) probe状态 probe位置 {0x60400010,0x607a0020,0x60fe0120,0x60b80010,0x60720010,0x60600008}, //控制字 目标位置 IO输出 probe设置 力矩限制 模式 {0x60410010,0x60640020,0x60770010,0x60fd0020,0x60b90010,0x60ba0020,0x60f40020}, //状态字 反馈位置 当前力矩 驱动器IO输入 probe状态 probe位置 drive_fe {0x60400010, 0x607a0020, 0x60b80010, 0x60600008}, //控制字 目标位置 probe设置 模式 {0x60410010,0x60640020,0x60770010,0x60b90010,0x60ba0020,0x60bb0020, 0x60bc0020, 0x60bd0020}, //状态字 反馈位置 当前力矩 probe状态 probe位置1/位置2/位置3/位置4 {0x60400010, 0x607a0020, 0x60600008}, //控制字 目标位置 模式 {0x60410010, 0x60640020, 0x60fd0020}, //状态字 反馈位置 驱动器IO输入 {0x60400010, 0x60B20010, 0x607a0020, 0x60B10020, 0x60600008}, //控制字 加速度前馈 目标位置 速度前馈 模式 {0x60410010, 0x60640020, 0x60770010, 0x60fd0020, 0x606c0020}, //状态字 反馈位置 当前力矩 驱动器IO输入 实际速度 {0x60400010,0x60710010,0x60ff0020,0x607a0020,0x60b80010,0x60720010, x60600008}, //控制字 周期力矩 周期速度 目标位置 probe设置 力矩限制 模式 {0x60410010,0x60770010,0x60640020,0x60fd0020,0x60b90010,0x60ba0020, x60bb0020}, //状态字 当前力矩 反馈位置 驱动器IO输入 probe状态 probe位置1/位置2/ {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 {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:数据类型
tablenum:读取的数据存储的TABLE位置 | ||||||||||||||||||
适用控制器 | 带EtherCAT接口 | ||||||||||||||||||
相关指令 | SDO_READ_AXIS,SDO_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:数据类型
value:数据值 | ||||||||||||||||||
适用控制器 | 带EtherCAT接口 | ||||||||||||||||||
相关指令 | SDO_WRITE_AXIS,SDO_READ |
本次,正运动技术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的视觉飞拍与精准输出
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指令简介
经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯
经济型EtherCAT运动控制器(三):PLC实现多轴直线插补与电子凸轮
经济型EtherCAT运动控制器(二):ZBasic实现多轴直线插补运动
运动控制+机器视觉Demo软件框架(三):视觉纠偏+连续插补的配方编辑
运动控制+机器视觉Demo软件框架(二):移动标定和形状匹配
开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍
开放式激光振镜+运动控制器(四):PSO位置同步输出在激光振镜加工中的应用
快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介
快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门
快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令
快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用
快速入门 | 篇八:如何进行运动控制器EtherCAT总线的基础使用?
快速入门 | 篇七:如何进行运动控制器ZCAN总线扩展模块的使用?
快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?
快速入门 | 篇二:如何进行运动控制器ZBasic程序开发?
EtherCAT与RTEX驱动器轴回零的配置与实现
EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续
EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用
EtherCAT运动控制卡的PWM与模拟量输出和运动速度同步
EtherCAT运动控制卡的硬件接线与C#的硬件外设读写与回零运动
简单易用的运动控制卡(十四):PWM、模拟量输出与运动控制的同步
简单易用的运动控制卡(六):Basic文件下载和连续轨迹加工
EtherCAT运动控制卡和LabVIEW构建智能装备(五)
EtherCAT运动控制卡和LabVIEW构建智能装备(四)
EtherCAT运动控制卡和LabVIEW构建智能装备(三)
EtherCAT运动控制卡和LabVIEW构建智能装备(二)
EtherCAT运动控制卡和LabVIEW构建智能装备(一)
关于正运动技术
深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。
正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。
正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。
经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。