//从驱动器加载默认设置
//设置 CANOpen通讯接口口为 CAN0
//设置波特率为 1Mbps
//打开 CANOpen
//如果打开失败,返回错误码
}
驱动器的初始化
long CSP_Motion::MC_Init(int NodeID)
{ //定义一个驱动器设置类对象 //设置驱动器参数 //初始化驱动器 //如果初始化失败,返回错误码
}
IO卡的初始化
long CSP_Motion::IO_Init (int IoNum,int NodeID)
{ //初始化 IO卡,即连接 IO卡通讯 //关闭 IO卡中断,使 IO工作在查询模式 //如果初始化失败,返回错误码
}
此外还有驱动器的清除故障、复位、重新初始化、使能、失能等函数,以上函数均为在底层库德基础上的封装。NodeID即为节点号。IO_Init中的 m_io[IoNum].DinSetIntEna(false)语句为 IO卡初始化的时候关中断,这是因为使用 IO卡的中断功能实现 IO数字输入信号的刷新,实时获取 IO输入的最新状态,如果使用查询方式读取,则 CPU会处于非常忙碌的状态,而且实时性上不能满足要求,在面板响应和逻辑流程中非常重要。
- 2电机控制
- 2.1回零方式
- 在底层库的结构体 HomeConfig可配置电机的回零方式,很多中,可根据需要选择,然后使用 m_amp[NodeID-1].GoHome()指令回零。
- 2.2控制模式
电机可工作需要工作在位置模式或力矩模式下,有时需要在位置模式和力矩模式下切换比如印刷刮板电机在印刷时从位置模式转到力矩模式,电机输出印刷时所需要的压力。
long CLogicKernel::LGK_SwitchTorque (int NodeID ,int NodeID)
{ //设置力矩模式 //设置额定力矩 //设置力矩变化率 //设置实际力矩
}
从力矩模式到位置模式的切换只需要调用运行指令。
电机软限位和运行参数的设置,在电机运行之前要设置电机的软限位,速度,加速度,加加速度参数
long CSP_Motion::MC_SetSoftLimit (int NodeID,double dPos,double dNeg,double dAcc)
{ //定义一个软限位实例对象 //正向位置赋值 //负向位置赋值
//加速度赋值 //设置电机轴的软限位 //如果设置失败,返回错误码
} long CSP_Motion::MC_SetParam (int NodeID, double Vel,double Acc,double Jerk)
{ //设置运动曲线类型为 S型曲线 //设置 S曲线速度 //设置曲线加速度 //设置曲线加加速度 //设置驱动器运动模式
}
电机的运行方式有两种运行方式,绝对运动和相对运动,在此基础上还可以分为模态运动和非模态运动,所谓模态运动是指电机完成当前运动后程序再执行下一条运动,而非模态运动值得是发完当前运行指令后立即执行下一条指令,而不需要等待当前动作执行完
long CSP_Motion::MC_WaitMoveDone (int NodeID,int timeout)
{ //等待当前运动指令完成 //如果出错,则返回错误码
}
电机的停止模式有几种,有 HaltMove,HardStop,通过 SetHaltMode可以设置电机停止模式。
- 2.3电机的多轴联动
- Copley底层库提供了 Linkage类,通过此类可实现电机的多轴联动,在电机需要同时运动,同时停止时使用此类,例如印刷机旋转台前预对夹电机、左夹、右夹电机。另外在电机回零时可使多个电机同时回零,以节省设备复位时间。
- IO模块
输入输出包括了电机驱动器自带的输入输出,可以使用 AMP类下的 GetInputs()函数,在电机回零,判断和设置电机状态时使用。主要是 CopleyIO卡,其控制函数主要在 IOModule Class类,包括读数字输入,读写数字数出,输出模拟量等函数。前面提到,使用中断方式实时刷新数字输入信号,主要是在程序中开监控线程,调用信号等待中断函数。
long CSP_Motion::IO_WaitEvent (int IoNum,int timeout)
{ //开 IO卡中断 //等待 IO卡输入引脚的状态突变 //关 IO卡中断 //如果出错,返回错误码
}
3.4程序设计思想
全自动半导体设备逻辑复杂,电机和 IO的数量繁多,不仅对印刷效率要求很高,而且对设备的可靠性、印刷精度的要求也非常高,因此对设备软件的实时性、稳定性设计也提出了更高的要求。
4系统测试及解决方案
很硬,后改为走 S型曲线模式,性能得到很大改善。
- 2机器复位效率,全自动半导体设备电机轴很多,设备复位时各个电机顺序回零速度很慢,需要 10多分钟,使用各部分电机联动回零方式,使得设备复位时间为 5分钟。
- Copley IO的数字输入输出读写有几种方式,一位,八位、十六位、三十二位读写,经过反复实验,选取八位读写方式,因为每个 Io板有 9个 Bank,每个 Bank有八位,可以设置为输入和输出,从地址分配也比较方便。
- IO由查询方式,改为中断模式,因为印刷机的 IO非常多,如果使用 IO查询方式读取数字 IO输入,会使工控机的 CPU的占用率达到 100%,
而且不会得到实时状态。经常出现死机状态。因此选用中断方式刷新数字 IO状态,不仅能实时得到 IO数字输入状态,对 CPU的使用率几乎没有影响,设备运行时,仅为 2%~6%。
4.5由于此半导体设备电机轴也非常繁多,在保证设备可靠性和效率的前提下,逻辑流程的设计难度非常大,所要开启的线程也很多,如果仅靠时间上匹配,是不可能的。因此采用线程之间通过事件相互传递信号,提高了设备的可靠性,现在设备已经经过 24 h的无故障连续运行考核,效率也得到用户认可。
5结束语
该全自动半导体设备的运动控制系统采用 CAN+canopen这种总线解决方案是可行而有效的,针对这种总线解决方案选择使用了 Copley公司的 CAN卡和电机驱动器以及 IO卡,然后在其提供的底层类库封装适合自己的运动类库,然后设计并不断优化软件设计思想、逻辑流程,以保证设备的可靠性和稳定性,提高设备的生产效率。