NC
Numerical Control(NC)数字控制,倍福对伺服的控制进行了分层,代码不直接控制伺服,与代码交互的轴称为PLC轴,PLC轴通过轴结构体(AXIS_REF)与NC轴的process image映射实现与NC轴的交互,交互周期是PLC的运行周期(通常默认为10ms),NC轴通过process image与物理轴交互,交互周期为NC SAF任务周期(通常默认为2ms),物理轴的变量是真正伺服驱动器能够提供出来的变量。
实轴
实轴指的是伺服+电机的轴,是现实当中存在的真实的轴,一套伺服+电机的组合就是一个实轴,在倍福的体系中,从IO-configuration中能scan到的drive就是实轴。
虚轴
虚轴是现实中不存在的轴,但是为了测试控制逻辑,或者为了方便做控制层面和物理层面的解耦或耦合等需求而添加的一个“虚拟的”轴,在倍福的体系中,虚轴指的就是没有链接到物理轴的NC轴。
虚轴的典型应用案例是在凸轮方面,在包装行业内,例如需要将一个铝箔药片装进药盒里,那么药盒的展开成型,铝箔药片推入药盒,药盒封口,生产日期印刷,需要在药盒和铝箔药片在传送带行进的过程中完成,以便提高生产效率,这时就可以设置一个“虚轴”,所有这些实轴操作的步骤都可以按凸轮曲线关联到此虚轴上,这个虚轴就扮演了凸轮关系中的主轴角色,这样的设计可以提高可靠性,虚轴模拟出了一个实轴的行为,却不会像实轴那样可能产生各种各样的伺服故障,因为它本质上就是在进行数学运算。
过程映像
倍福NC支持多种伺服类型和编码器类型,通常情况下NC下的Enc和Drive的过程映像在实体伺服scan到以后是自动链接的,无需手动一项一项地进行变量关联,能进行自动链接的伺服都是符合国际标准的,例如DS402标准。在极特殊的情况下,例如TwinCAT的scan功能没有识别出来伺服的类型,此时需要自己手动关联,这种情况需要明白NC的Enc和Drive过程映像每一项参数的含义,以便和实体伺服交互数据。
一个典型的应用情况是例如我们使用的是符合DS402标准CANopen协议的伺服,配合EL6751的CANopen网关实现PLC对该伺服的控制,如果需要直接在PLC的程序中对伺服进行控制,那么CANopen伺服的IO变量可以直接关联到PLC的变量上,但是若想使用NC进行伺服控制,那么就需要自己将伺服的IO变量与NC变量进行关联,关联的原则可以参考同系列伺服EtherCAT协议型号的关联情况,或者参考本片文章下述的方法,一般情况下,对于一些简单的应用场合,我们只关注伺服的以下几个主要参数:
- 伺服的当前位置(actual position),一般关联到Enc下Inputs的nDataIn1
- 伺服的当前速度(actual velocity),一般关联到Enc下Inputs的nDataIn7
- 伺服的当前扭矩(actual torque),一般关联到Drive下Inputs的nDataIn3[0]
- 伺服的当前跟随误差(actual following error),一般关联到Drive下Inputs的nDataIn1
- 伺服的数字输入(digital inputs)
- 伺服的状态字(status word),一般关联到Drive下Inputs的nState1和nState2
- 伺服的控制字(controlword),一般关联到Drive下Outputs的nCtrl1和nCtrl2
- 伺服的工作模式(mode of operation),一般关联到Drive下Outputs的nCtrl5
- 伺服的目标位置(target position),一般关联到Drive下Outputs的nDataOut1
- 伺服的目标速度(target velocity),一般关联到Drive下Outputs的nDataOut2
- 伺服的目标扭矩(target torque),一般关联到Drive下Outputs的nDataOut4[0]
下表列出了一个Axis的Enc过程映像各项参数的含义,这里以汇川SV670N EtherCAT伺服为例,介绍各参数的含义
I/O变量名 | 参数含义 | 备注 |
---|---|---|
nDataIn1 | 伺服的当前位置值,以脉冲数标识,NC当中用这个值配合scaling参数的设置来计算轴的实际位置以mm或°标识出来 | 计量单位:INC(脉冲数) 数据类型:数据类型:2个16位UINT数组 |
nDataIn2 | 未关联到伺服的IO变量上,如果伺服反馈的位置数大于32位,则这个变量也会被关联 | 计量单位:INC(脉冲数) 数据类型:数据类型:2个16位UINT数组 |
nState1 | 可选的状态信息,参与NC SAF周期的数据交换,例如编码器错误,位置锁存信号或者参与伺服的寄存器通信。此参数未关联到伺服的IO变量上 | 这个参数主要跟编码器类型和伺服类型有关 数据类型:8位USINT |
nState2 | 可选的状态信息,作为前一个nState1的补充,参与NC SAF周期的数据交换,例如编码器重置,位置锁存信号或者读取伺服的绝对位置。此参数未关联到伺服的IO变量上 | 这个参数主要跟编码器类型和伺服类型有关,若使用到了nState1而且IO数据类型比USINT大,则IO数据关联的时候会同时使用nState1和nState2两个变量来保证位数能覆盖IO-tree里面变量的位数 数据类型:8位USINT |
nState3 | 保留参数,通常是空的,没有链接任何IO变量。此参数未关联到伺服的IO变量上 | 数据类型:8位USINT |
nState4 | 可选的总线IO状态信息,例如在EtherCAT的CoE伺服中是关联到WcState的值,用来标识总线数据的有效性。 | 关联到WcState的时候,有以下含义 0:数据有效 1:数据无效 数据类型:8位USINT |
nDataIn3 | 伺服驱动器的探针锁存位置1的位置值 | 数据类型:2个16位UINT数组 |
nDataIn4 | 未关联到IO变量上,推测是配合nDataIn3使用,以提供64bit的容量 | 数据类型:2个16位UINT数组 |
nDataIn5 | 伺服驱动器的探针锁存位置2的位置值 | 数据类型:2个16位UINT数组 |
nDataIn6 | 未关联到IO变量上,推测是配合nDataIn5使用,以提供64bit的容量 | 数据类型:2个16位UINT数组 |
nState5 | 伺服驱动器的探针状态字 | 数据类型:8位USINT |
nState6 | 伺服驱动器的探针状态字,因为伺服的探针状态字是16位的UINT类型,所以需要nState5和nState6结合在一起才能提供16位的宽度 | 数据类型:8位USINT |
nState7 | 未关联到IO变量上 | 数据类型:8位USINT |
nState8 | 未关联到IO变量上 | 数据类型:8位USINT |
nDcInputTime | 伺服驱动器的infoData下的DcInputShift | 数据类型:32位DINT 此参数用来计算死区补偿的,在DC sync模式下,伺服采样上来的数据时间和PLC处理该数据的时间存在延迟,这个延迟时间就是DcInputShift |
nDataIn7 | 未关联到IO变量上,此参数通常是伺服的当前速度值 | 数据类型:2个16位UINT数组 |
I/O变量名 | 参数含义 | 备注 |
---|---|---|
nDataOut1 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataOut2 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nCtrl1 | 未关联到IO变量上 | 数据类型:8位USINT |
nCtrl2 | 未关联到IO变量上 | 数据类型:8位USINT |
nCtrl3 | 未关联到IO变量上 | 数据类型:8位USINT |
nCtrl4 | 未关联到IO变量上 | 数据类型:8位USINT |
nDataOut3 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataOut4 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataOut5 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataOut6 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nCtrl5 | 伺服驱动器的探针功能,关联到伺服的Touch Probe Function上 | 数据类型:8位USINT |
nCtrl6 | 伺服驱动器的探针功能,关联到伺服的Touch Probe Function,与nCtrl5配合 | 数据类型:8位USINT |
nCtrl7 | 未关联到IO变量上 | 数据类型:8位USINT |
nCtrl8 | 未关联到IO变量上 | 数据类型:8位USINT |
下面列出来Axis的Drive项下的过程映像各项参数的含义,这里以汇川SV670N EtherCAT伺服为例,介绍各参数的含义
I/O变量名 | 参数含义 | 备注 |
---|---|---|
nDataIn1 | 伺服的当前位置跟随误差 | 计量单位:INC(脉冲数) 数据类型:数据类型:2个16位UINT数组 |
nDataIn2 | 未关联到伺服的IO变量上,如果伺服反馈的位置数大于32位,则这个变量也会被关联,配合nDataIn1使用以提供64位的容量 | 计量单位:INC(脉冲数) 数据类型:数据类型:2个16位UINT数组 |
nState1 | 伺服状态字 | 数据类型:8位USINT |
nState2 | 伺服状态字 | 数据类型:8位USINT,实际伺服的状态字是16位UINT,所以需要nState1和nState2组合来覆盖Status Word |
nState3 | 未关联到IO变量上 | 数据类型:8位USINT |
nState4 | 此参数关联到了伺服的WcState变量和InputToggle变量,其中WcState关联到了nState4的bit0位,InputToggle关联到了nState4的bit1位 | 数据类型:8位USINT |
nDataIn3 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataIn4 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataIn5 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataIn6 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nState5 | 关联到伺服的Modes of operation display变量上 | 数据类型:8位USINT |
nState6 | 未关联到IO变量上 | 数据类型:8位USINT |
nState7 | 未关联到IO变量上 | 数据类型:8位USINT |
nState8 | 未关联到IO变量上 | 数据类型:8位USINT |
nDcOutputTime | 关联到伺服的InfoData下的DcOutputShift项上 | 数据类型:16位DINT数组 |
I/O变量名 | 参数含义 | 备注 |
---|---|---|
nDataOut1 | 关联到伺服的Target position上 | 数据类型:2个16位UINT数组 |
nDataOut2 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nCtrl1 | 关联到伺服control word上 | 数据类型:8位USINT |
nCtrl2 | 关联到伺服control word上 | 数据类型:8位USINT,配合nCtrl1使用,提供16位的容量 |
nCtrl3 | 未关联到IO变量上 | 数据类型:8位USINT |
nCtrl4 | 未关联到IO变量上 | 数据类型:8位USINT |
nDataOut3 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataOut4 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataOut5 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nDataOut6 | 未关联到IO变量上 | 数据类型:2个16位UINT数组 |
nCtrl5 | 关联到伺服的Modes of operation上 | 伺服的操作模式,CoE类型的伺服上,此值一般是8,即CSP模式 数据类型:8位USINT |
nCtrl6 | 未关联到IO变量上 | 数据类型:8位USINT |
nCtrl7 | 未关联到IO变量上 | 数据类型:8位USINT |
nCtrl8 | 未关联到IO变量上 | 数据类型:8位USINT |
总的而言,伺服反馈上来的位置和速度,探针功能是关联到Axis的Enc项下的,NC给定的目标位置,目标速度,控制字等是给定到Axis的Drive项下的,这个比较容易理解,对于伺服驱动器而言,电机的速度和位置信息源于编码器,可以认为是个只读变量,所以与此相关的信息应放到Enc项下,探针功能本质也是和位置相关的,其行为是只读的,所以也放在Enc项下。NC的控制信息都是给定到伺服的,由伺服进一步控制电机的行为,所以针对运动控制的参数和一些限制参数都是由驱动器负责的,故这部分参数是放在Axis的Drive项下的。