本发明涉及计算机领域,具体而言,涉及一种数据的监视方法及装置、存储介质和电子装置。
背景技术:
随着可编程逻辑控制器(programmablelogiccontroller,简称为plc)技术的广泛应用,plc编程软件也成为plc开发技术中不可缺少的一部分。plc控制系统的控制逻辑是由编程软件完成的,只要对应用程序进行修改就可以满足不同控制领域需求。所以plc编程软件具备实时监视和调试功能以检验程序设计的正确性及完备性具有非常广泛的通用性。
现在主流完备的plc编程软件都是由国外制造,很多使用的是专门的监视模块对plc内部进行读写操作,也有通过plc地址数据进行读写实时操作,还有通过开发仿真plc模拟真实plc,实现程序监视读写。但现有的技术方案,如专门的监视模块方案,没有与编程软件架构融为一体,操作起来不方便,需要维护两套代码实现功能;此外,开发仿真plc软件模拟真实plc,需要创建与实际plc功能完全相同的软件,存在开发周期长难度大,功能不一致问题。
针对相关技术中的上述问题,目前尚未存在有效的解决方案。
技术实现要素:
本发明实施例提供了一种数据的监视方法及装置、存储介质和电子装置,以至少解决相关技术中通过专门的监视模块对plc内部进行读写操作需要维护两套代码的问题。
根据本发明的一个实施例,提供了一种数据的监视方法,包括:对待编译的工程进行编译后,将编译后的工程序列化为本地文件;访问所述本地文件并从当前被执行的工程体中收集不同工作单中工程变量的地址信息,其中,所述地址信息包括偏移量和长度;在所述可编程逻辑控制器plc运行的过程中,根据所述地址信息实时监视与所述地址信息对应的工程变量。
根据本发明的另一个方面,提供了一种数据的监视装置,包括:第一处理模块,用于对待编译的工程进行编译后,将编译后的工程序列化为本地文件;第二处理模块,用于访问所述本地文件并从当前被执行的工程体中收集不同工作单中工程变量的地址信息,其中,所述地址信息包括偏移量和长度;监视模块,用于在所述可编程逻辑控制器plc运行的过程中,根据所述地址信息实时监视与所述地址信息对应的工程变量。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述数据的处理方法。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述上述数据的处理方法。
通过本发明,采用对待编译的工程进行编译后,将编译后的工程序列化为本地文件,进而访问本地文件并从当前被执行的工程体中收集不同工作单中工程变量的地址信息,其中,地址信息包括偏移量和长度;在可编程逻辑控制器plc运行的过程中,根据地址信息实时监视与地址信息对应的工程变量,以实现对工程变量的实施监视。本申请的上述方法步骤简单易于实现,而且无需维护不同的代码,从而解决了相关技术中通过专门的监视模块对plc内部进行读写操作需要维护两套代码的问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的数据的监视方法的流程图;
图2是根据本发明实施例的数据的监视装置的结构示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
在本实施例中提供了一种数据的监视方法,图1是根据本发明实施例的数据的监视方法的流程图,如图1所示,该流程包括如下步骤:
步骤s102,对待编译的工程进行编译后,将编译后的工程序列化为本地文件;
其中,对于该步骤在具体的应用场景中其工程编译的过程可以是按照固件库->全局变量->用户pou->任务1程序实例集合->任务1->任务2程序实例集合->任务2->任务3程序实例集合->任务3->......过程来执行。
编译成功后将用户工程序列化为本地文件是为了工程存储监视启动做准备。
步骤s104,访问本地文件并从当前被执行的工程体中收集不同工作单元中工程变量的地址信息,其中,地址信息包括偏移量和长度;
步骤s106在可编程逻辑控制器plc运行的过程中,根据地址信息实时监视与地址信息对应的工程变量。
通过上述步骤s102至步骤s104,采用对待编译的工程进行编译后,将编译后的工程序列化为本地文件,进而访问本地文件并从当前被执行的工程体中收集不同工作单中工程变量的地址信息,其中,地址信息包括偏移量和长度;在可编程逻辑控制器plc运行的过程中,根据地址信息实时监视与地址信息对应的工程变量,以实现对工程变量的实施监视。本申请的上述方法步骤简单易于实现,而且无需维护不同的代码,从而解决了相关技术中通过专门的监视模块对plc内部进行读写操作需要维护两套代码的问题。
在本实施例的可选实施方式中,对于步骤s104中涉及到的访问本地文件并从当前被执行的工程体中收集不同工作单元中工程变量的偏移量和长度的方法步骤,可以通过如下方式来实现:
步骤s104-11,基于第一预设函数从本地文件中当前被执行的工程体中获取工作单中工程变量的总的偏移量和长度;和/或,
步骤s104-12,基于第二预设函数从本地文件中当前被执行的工程体中获取工作单中工程变量列表中每一个工程变量的偏移量和长度。
对于上述步骤s104-11和步骤s104-12,中涉及到的第一预设函数可以是:getxxxobjattribute函数,该函数是用于获取某一种变量(如整个全局变量列表)的总的偏移量和长度信息的;而第二预设函数可以是:getelementattributeinctype函数,该函数是用于获取具体的每个变量(如全局变量列表中的每一个变量)的偏移量和长度信息的。
需要说明的是,本实施例中涉及到的工程变量类型以及工程变量的偏移量和长度至少包括:
全局变量:startoffset,length
局部基础变量:startoffset,length
programinstance:startoffset,length
fbinstance:startoffset,length
当然,上述工程变量仅仅是举例说明,并不对本发明构成限定,也可以根据实际情况进行相应的设置。
在本实施例的另一个可选实施方式中,步骤s106中涉及到的在可编程逻辑控制器plc运行的过程中,根据所述地址信息实时监视与所述地址信息对应的工程变量的方式,可以通过如下方式来实现:
步骤s106-11,获取当前打开的一个或多个工作单中的工程变量;
步骤s106-12,将从一个或多个工作单中获取到的工程变量添加到订阅表中;
步骤s106-13,在可编程逻辑控制器plc运行的过程中,基于地址信息查找到与地址信息对应的工程变量的实时值,并基于实时值对所述订阅表中的工程变量的值进行更新。
在本实施例的另一个可选实施方式中,本实施例的方法步骤还可以包括:
步骤s108,在用户触发用于修改所述地址信息和/或所述工程变量的值的写入事件的情况下,根据所述写入事件将待修改的地址信息和/或待修改的工程变量的值写入到所述订阅表中。
下面结合本申请的具体实施例对本申请进行举例说明;
需要说明的是,plc编程软件的实时监视功能主要监视program或fb或结构体或数组的变量列表,监视program或fb图形,全局变量列表,与第三方通讯实时值,plc的i/o硬点实时值,同时还包括以上描述的强制写入功能。因此,在本具体实施例中所阐述的plc编程软件变量值实时监视,其实质是实现了plc编程软件的实时监视功能。因为在第三方通讯和plc的i/o实时采集开发时已经将第三方通讯变量和plc的i/o硬点均关联映射在全局变量上。
所以,在本申请的具体实施例中plc编程软件变量值实时监视主要是监视program或fb或结构体或数组的变量列表,监视program或fb图形,全局变量列表以及以上内容的变量值的实时写入。
基于此,本申请的具体实施例提供了一种plc编程软件变量值实时监视方法,该方法的步骤包括:
步骤s202,工程编译;
其中,工程编译:工程编译按照固件库->全局变量->用户pou->任务1程序实例集合->任务1->任务2程序实例集合->任务2->任务3程序实例集合->任务3->...过程执行;编译成功后将用户工程序列化到本地文件为工程存储监视启动做准备。
步骤s204,监视启动;
其中,监视启动主要是通过访问本地工程,获取控制器当前工程执行体,并从工程体中获取工程变量的偏移量和长度;具体获取工程变量的偏移量和长度的方法步骤包括:
步骤s204-11,开始initstdebuger;如果失败则流程结束,如果成功执行步骤204-12;
步骤s204-12,getglobalobjattribute;如果成功执行步骤s204-13,如果失败执行步骤s204-15;
步骤s204-13,getelementattrinctype;
步骤s204-14,暂不支持数组;
步骤s204-15,getobjattrfromtask;如果失败执行步骤s204-16,接着流程结束;如果成功执行步骤s204-17;
步骤s204-16,destrorystdebugger;
步骤s204-17,getelementattrinctype;
步骤s204-18,判断是否存在pou变量,如果不存在则执行步骤s204-16,接着流程结束;如果存在执行步骤s204-19;
步骤s204-19,getobjattribute;
步骤s204-20,getelementattrinctype。
需要说明的是,getxxxobjattribute函数是获取某一种变量(如整个全局变量列表)的总的偏移量和长度信息,getelementattributeinctype函数是获取具体的每个变量(如全局变量列表中的每一个变量)的偏移量和长度信息。
此外,通过上述步骤s204-11至步骤s204-20,将获取到的偏移量和长度信息序列化到本地文件中供监视逻辑使用,序列化文件的数据模板采用json格式。
步骤s206,监视中逻辑实现;
其中,对于该步骤s206在具体的实施过程中可以通过如下方式实现:该步骤的监视过程包括一个界面刷新过程,即用户打开哪个界面(相当于上述实施例中的工作单)就会进入监视刷新,如果打开一个,就会把一种界面的变量添加到后台的订阅表。如果打开多个界面就会把多个界面的变量添加到后台的订阅表中。打开后,又关闭订阅表不会改变,仍会继续监视。如果进入监视时,一个界面都没有打开,则会进入空的循环状态。监视任务是一个周期性任务。
需要说明的是,只有在打开监全局变量列表后局部变量列表或program或fb时才会给后台读取实时数据工作线程添加monitorjob。
步骤s208,数据刷新逻辑实现。
其中,数据刷新逻辑是:不论programinstance还是fbinstance,均使用上面获得的offset+length(偏移量+长度),与plc运行时通讯获取实时值buffer,并从里面挑出变量,实现获取实时值和覆盖实时值。
例如,对于全局变量的数据刷新,基于上述步骤s204生成的序列化文件,能得全局变量列表的总的起始偏移量global_variable_start_offset和数据长度global_variable_data_length,以及每个变量的variable_start_offset和variable_data_length。再根据每个变量类型和名称,从plc运行时通讯获取实时值buffer中挑出每个变量,实现实时值的覆盖。也就是说,当用户进行实时修改变量值操作时,将会触发写入事件,写入事件会将要修改的变量的start_offset,length和要更改的值传至后台工作线程。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
在本实施例中还提供了一种数据的监视装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图2是根据本发明实施例的数据的监视装置的结构示意图,如图2所示,该装置包括:第一处理模块22,用于对待编译的工程进行编译后,将编译后的工程序列化为本地文件;第二处理模块24,与第一处理模块22耦合连接,用于访问本地文件并从当前被执行的工程体中收集不同工作单中工程变量的地址信息,其中,该地址信息包括偏移量和长度;监视模块26,与第二处理模块24耦合连接,用于在可编程逻辑控制器plc运行的过程中,根据地址信息实时监视与地址信息对应的工程变量。
可选地,本实施例中的该第二处理模块24还可以进一步包括:第一处理单元,用于基于第一预设函数从本地文件中当前被执行的工程体中获取工作单中工程变量列表的总的偏移量和长度;和/或,第二处理单元,用于基于第二预设函数从本地文件中当前被执行的工程体中获取工作单中工程变量列表中每一个工程变量的偏移量和长度。
可选地,本实施例中的该监视模块26还可以进一步包括:获取单元,用于获取当前打开的一个或多个工作单中的工程变量;添加单元,用于将从一个或多个工作单中获取到的工程变量添加到订阅表中;监视单元,用于在可编程逻辑控制器plc运行的过程中,基于地址信息查找到与地址信息对应的工程变量的实时值,并基于实时值对订阅表中的工程变量的值进行更新。
在本实施例的可选实施方式中,本实施例的装置除了包括上述图2中的模块外,还可以进一步包括:写入模块,用于在用户触发用于修改地址信息和/或工程变量的值的写入事件的情况下,根据写入事件将待修改的地址信息和/或待修改的工程变量的值写入到订阅表中。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
实施例3
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
s1,对待编译的工程进行编译后,将编译后的工程序列化为本地文件;
s2,访问本地文件并从当前被执行的工程体中收集不同工作单中工程变量对应的地址信息,其中,地址信息包括偏移量和长度;
s3,在可编程逻辑控制器plc运行的过程中,根据地址信息实时监视与地址信息对应的工程变量。
可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
s1,对待编译的工程进行编译后,将编译后的工程序列化为本地文件;
s2,访问本地文件并从当前被执行的工程体中不同工作单中工程变量对应的地址信息,其中,地址信息包括偏移量和长度;
s3,在可编程逻辑控制器plc运行的过程中,根据地址信息实时监视与地址信息对应的工程变量。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。