型号: PXF3002
CAN总线系统解决方案是利用 CAN总线1 CAN和 Canopen协议 的优点及其特长为机器自动化设备提供高效、可靠、性价比高的解决方案。CAN+Canopen是机CAN是最早也是应用最为广泛的现场总线。 器自动化领域最为成功的总线解决方案,在欧CANopen是欧洲 CIA组织定义最为成功的 CAN美被广泛应用。本文将以一种全自动半导体设应用层协议,在基于 CAN自动化系统中居于领导备为具体实例,介绍一种基于 CAN+Canopen解地位。CAN现场总线技术是集自动控制技术、通讯决方案的工业控制模型的软件实现。 技术、传感技术、计算机技术等于一体,是个革命性
的技术,正广泛应用于自动化各个领域。目前广泛使用的其它现场总线还有 Profibus、DeviceNet、 ControlNet、HART、FF等等,但是 CAN总线也是所有现场纵向中最早出现的,也是最适合机器自动化领域的现场总线。
CAN总线除了具有一般总线所具有的优点外,还根据机械自动化的特点,提供了一些非常有优势的技术特点:
(1)高速的数据传输速率可达 1M bit/s;
Canopen协议已经成为欧洲最重要的工业现场总线标准 EN-50325-4。ED系列伺服是标准的 CAN从站设备,严格遵循 Canopen,任何支持该协议的上位机均可以与其进行通讯。ED伺服内部使用了一种严格定义的对象列表,被称之为对象辞典,这种对象辞典的设计方式基于 Canopen国际标准,所有对象有明确的功能定义。对象类似于内存地址,有些对象如速度和位置可以由外部控制器修改,如状态、错误信息。
2系统结构
该工业控制模型即全自动半导体设备就采用这种总线解决方案,由主控单元: Copley CAN卡和受控单元( Copley IO板和 Copley驱动器)组成,使用 CANopen协议进行通讯。
在软件编程前首先在硬件上进行相应的设置:
图 1运动控制系统机构
曲线,首先是电流环,其次是速度环、最后是位置环;
(5)IO卡的输入输出 Bank需要由 CME2来设置等等。
3软件编程实现
软件编程的实现,在 Windows平台下,使用 VC++6.0作为开发工具。Copley公司提供了功能强大的底层运动控制库,此库提供很多底层类,从功能上可以分为运动控制类和信号输入输出类。根据需要,封装底层库。因为使用 Copley驱动器和 Copley的 IO卡,所以主要使用 CanOpen类、Amp类、IOModule类以及 Error类等。根据需要在 Copley底层库的基础上封装合适的运动类库。
首先要进行软件参数包括设备工艺参数、电机软限位、速度、加速度、加加速度等参数的初始化,然后打开 CAN卡,设置波特率, CanOpen初始化。
long CSP_Motion::MC_CardOpen(void)
{
//从驱动器加载默认设置
//设置 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会处于非常忙碌的状态,而且实时性上不能满足要求,在面板响应和逻辑流程中非常重要。
电机可工作需要工作在位置模式或力矩模式下,有时需要在位置模式和力矩模式下切换比如印刷刮板电机在印刷时从位置模式转到力矩模式,电机输出印刷时所需要的压力。
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可以设置电机停止模式。
输入输出包括了电机驱动器自带的输入输出,可以使用 AMP类下的 GetInputs()函数,在电机回零,判断和设置电机状态时使用。主要是 CopleyIO卡,其控制函数主要在 IOModule Class类,包括读数字输入,读写数字数出,输出模拟量等函数。前面提到,使用中断方式实时刷新数字输入信号,主要是在程序中开监控线程,调用信号等待中断函数。
long CSP_Motion::IO_WaitEvent (int IoNum,int timeout)
{ //开 IO卡中断 //等待 IO卡输入引脚的状态突变 //关 IO卡中断 //如果出错,返回错误码
}
3.4程序设计思想
全自动半导体设备逻辑复杂,电机和 IO的数量繁多,不仅对印刷效率要求很高,而且对设备的可靠性、印刷精度的要求也非常高,因此对设备软件的实时性、稳定性设计也提出了更高的要求。
4系统测试及解决方案
4.1电机运行模式设为 T型曲线时,电机动作
图 2程序设计思想
很硬,后改为走 S型曲线模式,性能得到很大改善。
而且不会得到实时状态。经常出现死机状态。因此选用中断方式刷新数字 IO状态,不仅能实时得到 IO数字输入状态,对 CPU的使用率几乎没有影响,设备运行时,仅为 2%~6%。
4.5由于此半导体设备电机轴也非常繁多,在保证设备可靠性和效率的前提下,逻辑流程的设计难度非常大,所要开启的线程也很多,如果仅靠时间上匹配,是不可能的。因此采用线程之间通过事件相互传递信号,提高了设备的可靠性,现在设备已经经过 24 h的无故障连续运行考核,效率也得到用户认可。
5结束语
该全自动半导体设备的运动控制系统采用 CAN+CanOpen这种总线解决方案是可行而有效的,针对这种总线解决方案选择使用了 Copley公司的 CAN卡和电机驱动器以及 IO卡,然后在其提供的底层类库封装适合自己的运动类库,然后设计并不断优化软件设计思想、逻辑流程,以保证设备的可靠性和稳定性,提高设备的生产效率。