一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种同时兼容倍福PLC和西门子PLC的控制方法与流程

2022-08-24 01:42:13 来源:中国专利 TAG:

一种同时兼容倍福plc和西门子plc的控制方法
技术领域
1.本发明属于电子技术领域,尤其涉及一种同时兼容倍福plc和西门子plc的控制方法。


背景技术:

2.在3d打印机系统中plc控制系统连接上位机控制软件与机械设备之间的通信与交互。plc全称是可编程逻辑控制器(programmablelogic controller)。plc控制系统是在传统的顺序控制器的基础上引入了微电子技术、计算机技术、自动控制技术和通讯技术而形成的一代新型工业控制装置。
3.plc系统也有很多不同的分类,例如倍福ads系统plc和西门子系统plc。每种系统都有其自身的特色适用于不同的机械设备,因而他们采用了不同的通讯协议以及支撑协议的不同的传输方式和不同的实现功能的技术方案。例如倍福ads系统plc采用tcp/ip通讯协议,而西门子系统plc采用snap7通讯协议,即使是同样的西门子系统除了snap7协议,还有其他通讯协议,例如s7-200等等。在3d打印机系统中有的设备虽然采用不同的plc系统,但是3d打印机控制的总体逻辑设计都是类似的,而且plc提供的功能也是基本相同的,只是采用了不同的plc系统来实现而已。
4.目前的传统技术是针对倍福ads系统plc采取了一套逻辑架构,软件设计提供了一套代码设计方案,使用tcp/ip协议实现上位机控制软件通过倍福ads系统plc对下端机械部件的操作与控制,实现 3d打印机系统的逐层铺粉、打印、激光燃烧熔接。针对西门子系统 plc采取另外一套软件设计方案,上位机控制软件通过snap7协议实现上位机控制软件通过西门子系统plc对下端机械部件的操作与控制,实现3d打印机系统的运行。这样就会出现两套软件架构,在这两套软件架构中软件的总体设计方案都是相同的,软件架构都是一致的,不同的地方仅仅是plc系统不同,一个是倍福ads系统,另一个是西门子系统plc。然后这两个plc系统对外提供的接口功能都是相同的。对于同一个厂商来说,拥有两个不同的plc系统,就会拥有两套软件系统与设计方案。然而这两套设计方案存在很多相似之处或重复代码,对于这个厂商来说在软件开发、集成与后期的维护来说,必然造成软件代码的冗余和开发工作量的堆积浪费。


技术实现要素:

5.本发明的目的是提供一种同时兼容倍福plc和西门子plc的控制方法,解决了采用创建plc基类接口,然后利用类的继承特性创建倍福plc和西门子plc两个派生类,从而实现一套控制逻辑兼容倍福 plc和西门子plc的各自逻辑功能的技术问题。
6.为实现上述目的,本发明采用如下技术方案:
7.一种同时兼容倍福plc和西门子plc的控制方法,包括如下步骤:
8.步骤1:建立客户端服务器和程序控制服务器,客户端服务器通过互联网与程序控制服务器通信,在客户端服务器中创建应用程序和配置文件config.ini,在配置文件
config.ini中设置当前所支持的 plc系统的种类;
9.步骤2:在程序控制服务器中建立一个接口作为plc基类接口,在plc基类接口中以公共函数的形式定义plc基类的所有属性与成员函数;
10.定义倍福plc派生类,倍福plc派生类用于定义倍福plc的控制特性以及属性,倍福plc派生类继承plc基类;
11.在倍福plc派生类中设置倍福plc的adsamsnetid和adsport, adsamsnetid和adsport用于在创建倍福plc的连接时配合进行访问连接;
12.定义西门子plc派生类,西门子plc派生类用于定义西门子plc 的控制特性以及属性,西门子plc派生类继承plc基类;
13.在西门子plc派生类中定义类ts7client()和类ts7server(),类 ts7client()代表pc客户端,用于创建通信客户端实例,类 ts7server()代表plc服务器端,用于为客户端提供具体链接的plc 服务器;
14.步骤3:根据步骤2的方法在程序控制服务器中定义多款倍福plc 的倍福plc派生类和多款西门子plc的西门子plc派生类;
15.步骤4:程序控制服务器读取并解析客户端服务器的配置文件 config.ini,获取配置文件config.ini中包含所需要支持的plc的种类以及型号;
16.根据plc的种类以及型号,利用类工厂模式选择一个适用的plc 派生类a,采用单例模式为plc派生类a创建唯一标识;
17.创建plc派生类a的单例模式对象,通过单例模式对象对plc进行操作;
18.步骤5:操作完毕后,销毁plc派生类a的单例模式对象。
19.优选的,在执行步骤4时,具体包括如下步骤:
20.步骤s4-1:采用类工厂模式选择适用于配置文件config.ini中支持的plc的plc派生类,即plc派生类a;
21.步骤s4-2:采用单例模式对plc派生类a创建唯一标识,程序控制服务器对plc派生类a的成员函数以及属性的访问、修改或读写的操作,都通过plc派生类a的唯一标识进行校验;
22.步骤s4-4:为plc派生类a创建单例模式对象;
23.步骤s4-5:程序控制服务器创建中间过渡类device,在中间过渡类device中调用plc基类的公有函数,根据单例模式对象来访问plc 进行相关操作。
24.优选的,所述plc基类中的成员函数均为纯虚函数。
25.优选的,所述adsamsnetid为倍福plc中的ads路由器,adsport 为指定通信的虚拟设备。
26.优选的,在执行步骤2时,所述继承plc基类即为继承plc基类中的所有成员函数和属性。
27.优选的,在执行步骤2时,在倍福plc派生类中定义通过tcp/i p 协议在客户端控制软件与机械部件之间传输plc变量,实现数据通讯;在西门子派生类中定义通过snap7协议在客户端软件与机械部件之间传输plc变量,实现数据通讯。
28.本发明所述的一种同时兼容倍福plc和西门子plc的控制方法,解决了采用创建plc基类接口,然后利用类的继承特性创建倍福plc 和西门子plc两个派生类,从而实现一
套控制逻辑兼容倍福plc和西门子plc的各自逻辑功能的技术问题,本发明采用设计模式中类工厂模式,通过plc基类接口创建倍福plc类和西门子plc类两个子类,在子类中实现各自的功能特性与运行逻辑,本发明使用配置文件设置当前系统到底是使用哪一种plc类型,即倍福plc或西门子plc,本发明在实际运行时采用设计模式中的单例模式,具备唯一性,减少多次创建类实例的麻烦。
附图说明
29.图1是本发明的系统架构图;
30.图2是本发明的基类与派生类的继承关系的示意图;
31.图3是本发明的流程图。
具体实施方式
32.由图1-图3所示的一种同时兼容倍福plc和西门子plc的控制方法,包括如下步骤:
33.步骤1:建立客户端服务器和程序控制服务器,客户端服务器通过互联网与程序控制服务器通信,在客户端服务器中创建应用程序和配置文件config.ini,在配置文件config.ini中设置当前所支持的 plc系统的种类;
34.本实施例在配置文件config.ini中设置当前上位机控制软件系统是支持哪种plc系统。例如倍福ads系统plc和西门子系统plc,
35.[plctype]
[0036]
plc=siemens
[0037]
或者
[0038]
[plctype]
[0039]
plc=ads
[0040]
读取配置文件config.ini中plctype项数据的值,如果是西门子系统plc就创建siemens系统plc类,如果是倍福ads系统plc就创建ads系统plc类,然后进行相关操作完成任务执行。
[0041]
本实施例中,用户通过客户端服务器提供与3d打印机控制的总体逻辑设计相关的数据以及配置文件,程序控制服务器完成对两种plc 的兼容逻辑流程。
[0042]
步骤2:在程序控制服务器中建立一个接口作为plc基类接口,在plc基类接口中以公共函数的形式定义plc基类的所有属性与成员函数;
[0043]
在执行步骤2时,所述继承plc基类即为继承plc基类中的所有成员函数和属性。
[0044]
所述plc基类中的成员函数均为纯虚函数。
[0045]
所述adsamsnetid为倍福plc中的ads路由器,adsport为指定通信的虚拟设备。
[0046]
在执行步骤2时,在倍福plc派生类中定义通过tcp/ip协议在客户端控制软件与机械部件之间传输plc变量,实现数据通讯;在西门子派生类中定义通过snap7协议在客户端软件与机械部件之间传输plc变量,实现数据通讯。
[0047]
在plc基类接口中以public形式定义plc基类的所有属性与成员函数,这样任何派生类都可以继承基类的所有属性与成员函数;同时把成员函数全部定义成纯虚函数,充分利用纯虚函数的特性即基类不需要定义函数实现内容,派生子类中必须要去具体定义实现
方法,毕竟不同子类的成员函数有不同的行为与实现方式。
[0048]
在实际应用时,根据上位机控制软件系统中当前配置文件里配置的是哪种plc就调用具体哪种plc的实现方式来解决plc通讯与服务的功能。所有派生类都会继承基类中定义的成员函数和属性,同时任何派生类可以定义体现其自身特性的方法和属性,来实现带有自身特色的plc的业务逻辑处理。例如,倍福plc是通过tcp/ip协议在上位机控制软件与机械部件之间传输plc变量,实现数据通讯;西门子 plc是通过snap7协议在上位机软件与机械部件之间进行数据通讯的。
[0049]
本实施例中,定义plc基类plccomm,其中包括基类的成员函数和属性。其成员函数全部是纯虚函数,例如:定义plc连接函数 virtual int plcconnect()=0表示plc链接。基类中定义的成员函数和属性被定义成public类型的,这样所有派生类中都会被继承而具有了。
[0050]
定义plc基类plccomm如下所示:
[0051]
[0052][0053]
定义倍福plc派生类,倍福plc派生类用于定义倍福plc的控制特性以及属性,倍福plc派生类继承plc基类;
[0054]
在倍福plc派生类中设置倍福plc的adsamsnetid和adsport, adsamsnetid和
adsport用于在创建倍福plc的连接时配合进行访问连接;
[0055]
在本实施例中,倍福ads的plc派生类是以公有形式publ ic继承于plc基类plccomm,继承基类的所有成员函数和属性。同时可以用 private形式定义体现自身特性的方法和属性,private类型方法和属性不能被任何派生类继承,只能被自身调用。例如private部分就是自身特性的部分,举例来说openads(const qstringlist&strlist),通过tcp/ip协议在上位机控制软件与底层机械部件之间建立通讯,用于打开ads倍福系统,便于plc变量数据的传输与数据读写操作; closeads(),用于关闭ads倍福系统,断开上位机软件与底层机械部件的通讯连接;readbool(qstring address,bool&bvalue),借助于tcp/ip协议用于读取倍福ads系统里bool类型plc变量;amsaddraddr,用于定义ads系统地址;pamsaddr paddr=&addr,用于访问ads地址值;等等。
[0056]
定义倍福ads系统plc类的申明如下所示:
[0057]
[0058][0059]
定义西门子plc派生类,西门子plc派生类用于定义西门子plc 的控制特性以及属性,西门子plc派生类继承plc基类;
[0060]
在西门子plc派生类中定义类ts7client()和类ts7server(),类 ts7client()代表pc客户端,用于创建通信客户端实例,类 ts7server()代表plc服务器端,用于为客户端提供具体链接的plc 服务器;
[0061]
西门子系统plc类是以公有形式public继承于plc基类plccomm,继承基类的所有成员函数和属性。同时可以用private形式定义体现自身特性的方法和属性,private类型方法和属性不能被任何派生类继承,只能被自身调用。例如private部分就是自身特性的部分,举例来说mreadbool(qstring address,bool&bvalue),其中,qstringaddress表示plc变量的地址名称;bool&bvalue表示读取plc变量之后得到的值,借助于snap7协议进行数据通讯,在上位机控制软件中读取西门子plc类里bool型plc数据变量;mwritebool(qstringaddress,bool bvalue),借助于snap7协议写入上位机控制软件中西门子plc类里bool型plc数据变量;定义一个snap7客户端对象的指针类型变量,以便后面代码中使用snap7协议进行数据传输,即 ts7client*m_client=nullptr,西门子plc类使用snap7协议传输plc变量值,这里进行数据协议传输指针变量的初始化。
[0062]
如下所示定义西门子系统plc的类申明:
[0063][0064][0065]
步骤3:根据步骤2的方法在程序控制服务器中定义多款倍福plc 的倍福plc派生类和多款西门子plc的西门子plc派生类;
[0066]
步骤4:程序控制服务器读取并解析客户端服务器的配置文件 config.ini,获取配置文件config.ini中包含所需要支持的plc的种类以及型号;
[0067]
根据plc的种类以及型号,利用类工厂模式选择一个适用的plc 派生类a,采用单例模式为plc派生类a创建唯一标识;
[0068]
创建plc派生类a的单例模式对象,通过单例模式对象对plc进行操作;
[0069]
步骤5:操作完毕后,销毁plc派生类a的单例模式对象。
[0070]
在本实施例中,倍福系统内各个软件模块之间的信息交换通过 twincat ads系统而完成,是通过tcp/ip协议进行通讯的。每台ads 设备都有各自不同的adsamsnetid和adsport端口号,也是其最重要的两个属性。adsamsnetid指定ads路由器,是tcp ip地址的扩展。一台pc的ip为“192.168.10.10”时,adsamsnetid就是“192.168.10.10.1.1”。adsport指定通信的虚拟设备,各不相同且固定不变,而ads客户端应用程序的port则是可变的。创建plc 程序的时候默认端口为851。
[0071]
所以,当创建ads系统plc的连接时通过adsamsnetid和adsport 配合进行访问连接,通过twincat系统的api接口完成的。在 plcconnect()成员函数内,定义ams地址变量amsaddr addr,定义端口地址变量pamsaddr paddr=&addr。设置端口为851,即 paddr-》port=851;使用ads系统api函数adssyncreadstatereq 实现plc连接通讯,即nerr=adssyncreadstatereq(paddr, &nadsstate,&ndevicestate);nadsstate表示ads系统的状态; ndevicestate表示打算连接ads系统的当前设备的状态。
[0072]
当读取倍福系统plc变量时,先判断当前倍福系统是否连接成功,即使用ads系统api函数adssyncreadstatereq()判断是否连接成功。如果连接成功,然后使用ads系统api函数adssyncreadwritereq设置访问特定plc变量地址的句柄,再使用ads系统api函数 adssyncreadreq读取当前plc变量地址的值,最后使用ads系统api 函数adssyncwritereq释放句柄。这里包括读取整形、布尔型、浮点型等多种数据类型。
[0073]
当写入倍福系统plc变量时,先判断当前倍福系统是否连接成功,即使用ads系统api函数adssyncreadstatereq()判断是否连接成功。如果连接成功,然后使用ads系统api函数adssyncreadwritereq设置访问特定plc变量地址的句柄,再使用ads系统api函数 adssyncwritereq写入当前plc变量地址的值,最后使用ads系统api 函数adssyncwritereq释放句柄。再次调用读取该plc变量值接口获取当前plc变量值,然后与写入之前值比较是否相等,用来判断写入操作是否成功。这里包括写入整形、布尔型、浮点型等多种数据类型。
[0074]
西门子plc系统是以snap7作为通讯协议的。snap7是一个基于以太网与西门子s7系列plc通讯的开源库。snap7实现通讯的时候,是将plc作为服务端,pc以客户端的身份主动连接的,所以最开始的时候,我们应该创建通讯需要使用的客户端。首先定义一个类ts7client()和一个类ts7server(),用于实现pc客户端与plc服务器的通讯连接。创建通讯客户端实例,例如plcobj= snap7.client.client;然后连接到具体的plc服务器, plcobj.connect(“192.168.0.203”,0,1);plcobj表示创建的pc 客户端实例。
[0075]
当读取某个plc变量值时,先调用客户端ts7client类的函数接口checkascompletion判断通讯是否建立成功。如果通讯建立成功,就调用ts7client类的函数接口readarea读取特定plc变量地址的值。这里包括读取整形、布尔型、浮点型等多种数据类型。
[0076]
当写入某个plc变量值时,先调用客户端ts7client类的函数接口checkascompletion判断通讯是否建立成功。如果通讯建立成功,就调用ts7client类的函数接口writearea()写入特定plc变量地址的值。然后再调用客户端ts7client类的函数接口 checkascompletion判断通讯是否建立成功。如果通讯建立成功,就调用ts7cl ient类的函数接口readarea读取特定plc变量地址的值与写入的值是否相等。如果相等表示,写入plc变量值成功;否则失败。这里包括写入整形、布尔型、浮点型等多种数据类型。
[0077]
在执行步骤4时,具体包括如下步骤:
[0078]
步骤s4-1:采用类工厂模式选择适用于配置文件config.ini中支持的plc的plc派生类,即plc派生类a;
[0079]
类工厂模式说明:在类工厂模式中,在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个类,类工厂模式使其创建过程延迟到子类进行。明确地计划不同条件下创建不同实例时,让其子类实现类接口,返回的也是一个抽象的产品。创建过程在其子类执行。
[0080]
步骤s4-2:采用单例模式对plc派生类a创建唯一标识,程序控制服务器对plc派生类a的成员函数以及属性的访问、修改或读写的操作,都通过plc派生类a的唯一标识进行校验;
[0081]
本发明采用的单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
[0082]
单例模式具有以下优点:单例类只能有一个实例;单例类必须自己创建自己的唯一实例;单例类必须给所有其他对象提供这一实例。
[0083]
步骤s4-4:为plc派生类a创建单例模式对象;
[0084]
步骤s4-5:程序控制服务器创建中间过渡类device,在中间过渡类device中调用plc基类的公有函数,根据单例模式对象来访问plc 进行相关操作。
[0085]
本实施例中,在倍福ads系统plc类和西门子系统plc类之上设计一个与主程序交互的中间过渡类device,在主程序中当应用程序需要访问plc时,主程序先调用中间过渡类device,在中间过渡类device 中调用基类plccom的公有函数,该公有函数的执行取决于所依赖当前基类plccomm所派生出来的子类到底是倍福ads系统plc类还是西门子系统plc类。当前派生类可能是倍福ads系统plc类也可能是西门子系统plc类,当系统一旦运行之后它就是唯一的,对于该类中的成员函数与属性也随着当前类的唯一确定也跟着唯一确定,所以使用设计模式中的单例模式,让当前类一旦确定了,就用类的单例模式来唯一标识这个类,在整个程序的运行过程中当前类的指示对象不论是倍福ads系统plc类还是西门子系统plc类都是唯一存在运行的,直到整个系统终止运行。在主程序中对该plc类的成员函数和属性的访问、修改、读写都是通过这个类来唯一标识的。
[0086]
一旦确定了是哪个plc系统,随后上位机控制软件程序的执行就会调用那个plc类的成员函数去完成特定的plc功能。不论是倍福 ads系统plc还是西门子系统plc,当他们继承于基类plc时,就实现了自身功能特性。例如在倍福plc类中读取bool型变量的值,就用倍福plc类的成员函数readbool;在西门子plc类中读取bool型变量的值,就用西门子plc类的
成员函数mreadbool。调用不同plc 类,实现同样的功能,会有各自类中不同的调用方式。
[0087]
本发明所述的一种同时兼容倍福plc和西门子plc的控制方法,解决了采用创建plc基类接口,然后利用类的继承特性创建倍福plc 和西门子plc两个派生类,从而实现一套控制逻辑兼容倍福plc和西门子plc的各自逻辑功能的技术问题,本发明采用设计模式中类工厂模式,通过plc基类接口创建倍福plc类和西门子plc类两个子类,在子类中实现各自的功能特性与运行逻辑,本发明使用配置文件设置当前系统到底是使用哪一种plc类型,即倍福plc或西门子plc,本发明在实际运行时采用设计模式中的单例模式,具备唯一性,减少多次创建类实例的麻烦。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献