一种基于API的工业运动控制系统及方法
技术领域
本发明涉及自动化控制技术领域,特别涉及一种基于API(ApplicationProgramming Interface,应用程序接口)的工业运动控制系统及方法。
背景技术
目前,在工业运动控制领域中,主要有两种控制方式:一种通过运动控制卡来实现;一种是通过PLC(Programmable Logic Controller,可编程逻辑控制器)来实现。
在通过运动控制卡实现的方式中,通过PCI(Peripheral ComponentInterconnect,外设组件互连标准)插槽将控制卡插在PC(Personal Computer,个人电脑)的主机上;利用高级编程语言C++、C#、VB、VB.NET、LabVIEW等编程语言进行开发;编程中使用运动控制卡厂商提供的控制卡API接口函数,来实现对控制卡资源的使用;运动控制卡通过发送脉冲的方式控制伺服或步进驱动器来控制伺服电机或步进电机、通过读取输入信号、控制输出信号来实现对继电器、传感器、气缸等输入输出设备的控制。运动控制卡主要的优势在于集成PC强大的功能,比如CAD(Computer Aided Design,计算机辅助设计)功能、机器视觉功能、软件高级编程等。由于PC机的强大功能,因此与其一起组成的运动控制器的功能最强,但其工作稳定性、可靠性较差。
在通过PLC实现的方式中,通过PLC对开关量进行逻辑控制,还可实现运动控制(直线轨迹控制)、运算、数据处理等功能。因此,具有工作可靠、编程简单等优点。但是,由于其通常采用触摸屏做人机界面,这就导致可视化界面受到极大地限制。在实际应用过程中,其最大的问题就是不能实现导图功能;难于与机器视觉等其他应用相结合。
因此,如果能将两种方式进行结合,就可以同时兼顾稳定性和可视化。但是,工业PC和PLC是两个不同实体的设备,两者之间通过Modbus TCP协议进行通信。由于Modbus TCP协议是以一问一答式的方式进行通信,通信需要一定的时间,当有很多命令时,通信时间叠加在一起会出现相当明显的延时。而这种延时反映在运动控制上是动作卡顿,这明显不能满足要求。
发明内容
本发明的目的在于提供一种基于API的工业运动控制系统及方法以减少通信数据冗余,达到了提高通信速度。
本发明为了达到上述目的,采用的技术方案是:一种基于API的工业运动控制系统,包括工业个人PC控制子系统和PLC控制子系统,所述工业PC控制子系统包括控制模块和API库,所述PLC控制子系统包括PLC运动控制器和多个伺服驱动器,其中:
所述控制模块,用于生成运动控制指令以及处理来自PLC控制子系统的反馈数据;
所述API库,用于缓存来自所述控制模块的运动控制指令并将多个运动控制指令一次性发送到所述PLC控制子系统,以及将所述PLC控制子系统的反馈数据一次性读取到所述工业PC控制子系统;
所述PLC运动控制器,用于根据所述多个运动控制指令控制所述多个伺服驱动器并生成反馈数据;
所述多个伺服驱动器,用于在所述PLC运动控制器的控制下,控制相应的电机运动。
优选地,所述工业PC控制子系统和所述PLC控制子系统之间通过扩展的ModbusTCP协议通信,所述扩展的Modbus TCP协议包括批量读功能码和批量写功能码。
优选地,所述PLC运动控制器包括多个数据存储单元,用于存储所述PLC控制子系统的反馈数据;所述PLC控制子系统的反馈数据包括所述多个伺服驱动器控制电机运动的执行结果数据和电机状态数据;
所述多个伺服驱动器还用于将所述执行结果数据和所述电机状态数据返回至所述多个数据存储单元。
优选地,所述API库包括动态链接库、处理单元、指令存储单元,其中:
所述动态链接库,用于为所述控制模块提供API接口函数,以使所述控制模块通过调用所述API接口函数来将多个所述运动控制指令依次存储到所述指令存储单元;
所述处理单元,用于将所述指令存储单元存储的所述多个运动控制指令同一次性发送至所述PLC控制子系统,以及一次性读取所述执行结果数据和所述电机状态数据;
所述指令存储单元,用于暂存所述多个运动控制指令。
优选地,所述处理单元还用于:
在所述指令存储单元为空时,将所述电机状态数据一次性读取到所述工业PC控制子系统。
相应地,本发明还提供一种基于API的工业运动控制方法,包括以下步骤:
步骤S1:生成运动控制指令并向PLC控制子系统一次性发送多个运动控制指令;
步骤S2:PLC运动控制器根据所述多个运动控制指令控制多个伺服驱动器;
步骤S3:所述多个伺服驱动器控制相应的电机运动;
步骤S4:将所述PLC控制子系统的反馈数据一次性读取到所述工业PC控制子系统。
优选地,所述工业PC控制子系统和所述PLC控制子系统之间通过扩展的ModbusTCP协议通信,所述扩展的Modbus TCP协议包括批量读功能码和批量写功能码。
优选地,所述PLC控制子系统的反馈数据包括所述多个伺服驱动器控制电机运动的执行结果数据和电机状态数据;
在所述步骤S4中,所述PLC控制子系统将所述执行结果数据和所述电机状态数据同时发送至所述工业PC控制子系统。
优选地,所述步骤S1包括:
步骤S11:工业PC控制子系统的控制模块生成运动控制指令;
步骤S12:调用API库的API接口函数将多个所述运动控制指令依次存储到指令存储单元;
步骤S13:将所述指令存储单元存储的所述多个运动控制指令一次性发送至所述PLC控制子系统。
优选地,所述基于API的工业运动控制方法还包括:
在所述指令存储单元为空时,将所述电机状态数据一次性读取到所述工业PC控制子系统。
本发明有如下优点:本发明提供的基于API的工业运动控制系统和方法,工业PC控制子系统通过API库向PLC控制子系统一次性发送多个运动控制指令;PLC控制子系统根据该多个运动控制指令控制电机轴完成相应的运动后,工业PC控制子系统再一次性读取PLC控制子系统的反馈数据。由此,既可以通过工业PC控制子系统提供可视化功能,又可以利用PLC的稳定性能来实现对电机轴的控制;同时,工业PC控制子系统可以向PLC控制子系统一次性发送多个运动控制指令,且一次性同时读取PLC控制子系统的反馈数据,由此,大大减少了通信数据冗余,达到了提高通信速度,满足系统需求的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1所示是本发明一实施例提供的基于API的工业运动控制系统的原理图;
图2所示是本发明一实施例提供的API库的原理图;
图3所示是本发明一实施例提供的基于API的工业运动控制方法的流程图;
图4所示是本发明一实施例提供的步骤S1的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1所示是本发明一实施例提供的基于API的工业运动控制系统的原理图。如图1所示,本发明的基于API的工业运动控制系统包括工业PC控制子系统10和PLC控制子系统20。所述工业PC控制子系统10包括控制模块110和API库120,所述PLC控制子系统20包括PLC运动控制器210和多个伺服驱动器220。
在本发明一实施例中,所述工业PC控制子系统10和所述PLC控制子系统20之间通过扩展的Modbus TCP协议通信,所述扩展的Modbus TCP协议包括批量读功能码和批量写功能码。通过该批量读功能码0x61,上位机可以一次性读取离散寄存器数据;通过该批量写功能码0x62,上位机可以将数据一次性写多个离散的寄存器。
所述控制模块110,用于生成运动控制指令以及处理来自PLC控制子系统的反馈数据。具体地,在本发明一实施例中,运动控制指令是指控制电机轴转动的指令,例如,启动电机轴指令、停止指令、加速指令及减速指令等。在系统需要控制某一个电机轴以一定的方式运动时,就会通过控制模块110来将相应的多个运动控制指令一次性同时发送至PLC控制子系统,而不是将控制指令一个一个发送过去。
所述API库120,用于缓存来自所述控制模块110的运动控制指令并将多个运动控制指令一次性发送到所述PLC控制子系统20,以及将所述PLC控制子系统20的反馈数据一次性读取到所述工业PC控制子系统10。具体地,API库120为控制模块110提供数据缓冲,负责把控制模块110指令传送至PLC控制子系统,再把执行结果反馈到业务层。控制模块110只需调用API库120提供的接口函数,就能实现轴的启动、停止、加速减速,获取轴的各种状态等。
所述PLC运动控制器210,用于根据所述多个运动控制指令控制所述多个伺服驱动器220并生成反馈数据。所述多个伺服驱动器220,用于在所述PLC运动控制器210的控制下,控制相应的电机运动。具体地,PLC运动控制器210通过EtherCAT(EtherControlAutomation Technology,以太网控制自动化技术)总线与多个伺服驱动器220相连接,组成PLC控制子系统20。PLC运动控制器210根据控制需要,预先通过梯形图、ST(StructuredText,结构文本)等PLC编程语言编好对应于不同运动控制指令的功能模块。根据工业PC控制子系统10发来的运动控制指令,PLC运动控制器210调取相应的功能模块,通过EtherCAT总线控制对应的伺服驱动器220,从而实现对相应电机轴的运动控制。
进一步地,在本发明一实施例中,所述PLC运动控制器210包括多个数据存储单元,用于存储所述PLC控制子系统20的反馈数据;所述PLC控制子系统20的反馈数据包括所述多个伺服驱动器220控制电机运动的执行结果数据和电机状态数据;所述多个伺服驱动器220还用于将所述执行结果数据和所述电机状态数据返回至所述多个数据存储单元。具体地,伺服驱动器在控制电机轴运动后,需要返回根据一个执行结果,这个执行结果就存储在PLC运动控制器的数据存储单元中;同时,电机也将自身的状态数据(例如,电机此时的转速、位置等数据)实时通过伺服驱动器更新到数据存储单元中。由此,可以方便工业PC控制子系统读取。其中,多个数据存储单元为多个离散寄存器,分别存储有不同的伺服驱动器反馈的执行结果数据以及各个电机的电机状态数据。
进一步地,如图2所示,在本发明一实施例中,所述API库120包括动态链接库122、指令存储单元124、处理单元126。所述动态链接库122用于为所述控制模块110提供API接口函数,以使所述控制模块110通过调用所述API接口函数来将多个运动控制指令依次存储到所述指令存储单元124;所述处理单元126,用于将所述指令存储单元124存储的所述多个运动控制指令一次性发送至所述PLC控制子系统20,以及一次性读取所述执行结果数据和所述电机状态数据;所述指令存储单元124,用于暂存所述多个运动控制指令。
具体地,如上所述,所述工业PC控制子系统10和所述PLC控制子系统20之间通过扩展的Modbus TCP协议通信。因此,控制模块110需要向PLC控制子系统20发送多个运动控制指令时,可以通过调用所述API接口函数来将所述多个运动控制指令按先后顺序依次读取到所述指令存储单元124;处理单元126对上述指令存储单元124进行轮询,当指令存储单元124不为空时(即有运动控制指令时),处理单元126读取指令存储单元124,通过批量写功能码把多个命令同时下发到PLC控制子系统;PLC控制子系统响应时,处理单元不但要读取执行结果数据,而且要将电机状态数据也一起读上来,即通过批量读功能码将PLC控制子系统的多个离散寄存器中存储的数据一次更新到工业PC控制子系统的内存。由此,大大减少了通信数据冗余,达到了提高通信速度,满足系统需求的目的。
进一步地,在本发明一实施例中,所述处理单元126还用于在所述指令存储单元124为空时,将所述电机状态数据一次性读取到所述工业PC控制子系统10。具体地,当指令存储单元124为空时(即没有运动控制指令时),处理单元126通过0x61功能码,把PLC控制子系统的反馈数据一次性读取到工业PC控制子系统存入内存。这样,当工业PC控制子系统需要时,可以直接从内存中读取,大大提高了效率。
有利地,本实施例提供的基于API的工业运动控制系统,工业PC控制子系统通过所述API库向所述PLC控制子系统一次性发送多个运动控制指令;PLC控制子系统根据该多个运动控制指令控制电机轴完成相应的运动后,工业PC控制子系统一次性读取PLC控制子系统的反馈数据。由此,既可以通过工业PC控制子系统提供可视化功能,又可以利用PLC的稳定性能来实现对电机轴的控制;同时,工业PC控制子系统和PLC控制子系统之间通过扩展的Modbus TCP协议通信,工业PC控制子系统可以通过批量写功能码同时将多个运动控制指令一次性发送到PLC控制子系统,通过批量写功能码一次性读取PLC控制子系统的反馈数据,由此可以大大减少了通信数据冗余,达到了提高通信速度,满足系统需求的目的。
需要说明的是,本发明实施例中多个运动控制指令和反馈数据可以一次性地发送和读取,也可以根据应用场景分为多次进行发送和读取,再此不做限制。
图3所示是本发明一实施例提供的基于API的工业运动控制方法的流程图。如图3所示,该基于API的工业运动控制方法包括以下步骤:
步骤S1:生成运动控制指令并向PLC控制子系统一次性发送多个运动控制指令;
具体地,在本发明一实施例中,运动控制指令是指控制电机轴转动的指令,例如,启动电机轴指令、停止指令、加速指令及减速指令等。在系统需要控制某一个电机轴以一定的方式运动时,就会通过控制模块来将相应的多个运动控制指令一次性同时发送至PLC控制子系统,而不是将控制指令一个一个发送过去。
步骤S2:PLC运动控制器根据所述多个运动控制指令控制多个伺服驱动器;
步骤S3:所述多个伺服驱动器控制相应的电机运动;
具体地,PLC运动控制器通过EtherCAT总线与多个伺服驱动器相连接。PLC运动控制器根据控制需要,预先通过梯形图、ST(Structured Text,结构文本)等PLC编程语言编好对应于不同运动控制指令的功能模块。根据工业PC控制子系统发来的运动控制指令,PLC运动控制器调取相应的功能模块,通过EtherCAT总线控制对应的伺服驱动器,从而实现对相应电机轴的运动控制
步骤S4:将所述PLC控制子系统的反馈数据一次性读取到所述工业PC控制子系统。
进一步地,在本发明一实施例中,PLC控制子系统的反馈数据包括所述多个伺服驱动器控制电机运动的执行结果数据和电机状态数据;在所述步骤S4中,所述PLC控制子系统将所述执行结果数据和所述电机状态数据同时发送至所述工业PC控制子系统。所述多个伺服驱动器将所述执行结果数据和所述电机状态数据返回至PLC运动控制器的多个数据存储单元。具体地,伺服驱动器在控制电机轴运动后,需要返回根据一个执行结果,这个执行结果就存储在PLC运动控制器的数据存储单元中;同时,电机也将自身的状态数据(例如,电机此时的转速、位置等数据)实时通过伺服驱动器更新到数据存储单元中。由此,可以方便工业PC控制子系统读取。其中,多个数据存储单元为多个离散寄存器,分别存储有不同的伺服驱动器反馈的执行结果数据以及各个电机的电机状态数据。
在本发明一实施例中,所述工业PC控制子系统10和所述PLC控制子系统20之间通过扩展的Modbus TCP协议通信,所述扩展的Modbus TCP协议包括批量读功能码和批量写功能码。通过批量读功能码0x61,上位机可以通过新的功能码一次性读取离散寄存器数据;另外一个功能是批量写0x62,即上位机可以通过该功能码一次性写多个离散的寄存器。
进一步地,如图4所示,上述步骤S1包括以下步骤:
步骤S11:工业PC控制子系统的控制模块生成运动控制指令;
步骤S12:
调用API库的API接口函数将多个所述运动控制指令依次存储到指令存储单元;
步骤S13:将所述指令存储单元存储的所述多个运动控制指令一次性发送至所述PLC控制子系统。
具体地,如上所述,所述工业PC控制子系统和所述PLC控制子系统之间通过扩展的Modbus TCP协议通信。因此,控制模块需要向PLC控制子系统发送多个运动控制指令时,可以通过调用所述API接口函数来将所述多个运动控制指令按先后顺序依次存储到所述指令存储单元;处理单元对指令存储单元进行轮询,当指令存储单元不为空时(即有运动控制指令时),处理单元读取指令存储单元,通过批量写功能码把多个命令同时下发到PLC控制子系统;PLC控制子系统响应时,处理单元不但要读取执行结果数据,而且要将电机状态数据也一起读上来,即通过批量读功能码将PLC控制子系统的多个离散寄存器中存储的数据一次更新到工业PC控制子系统的内存。由此,大大减少了通信数据冗余,达到了提高通信速度,满足系统需求的目的。
进一步地,在本实施例中,所述基于API的工业运动控制方法还包括:
在所述指令存储单元为空时,将所述电机状态数据一次性读取到所述工业PC控制子系统。
具体地,当指令存储单元为空时(即没有运动控制指令时),处理单元通过0x61功能码,把PLC控制子系统的反馈数据一次性读取到工业PC控制子系统存入内存。这样,当工业PC控制子系统需要时,可以直接从内存中读取,大大提高了效率。
有利地,本实施例提供的基于API的工业运动控制方法,工业PC控制子系统通过所述API库向所述PLC控制子系统一次性发送多个运动控制指令;PLC控制子系统根据该多个运动控制指令控制电机轴完成相应的运动后,工业PC控制子系统一次性读取PLC控制子系统的反馈数据。由此,既可以通过工业PC控制子系统提供可视化功能,又可以利用PLC的稳定性能来实现对电机轴的控制;同时,工业PC控制子系统和PLC控制子系统之间通过扩展的Modbus TCP协议通信,工业PC控制子系统可以通过批量写功能码同时将多个运动控制指令一次性发送到PLC控制子系统,通过批量写功能码一次性读取PLC控制子系统的反馈数据,由此可以大大减少了通信数据冗余,达到了提高通信速度,满足系统需求的目的。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。