CN102339031A - 一种子程序调用的方法、装置及plc控制系统 - Google Patents

一种子程序调用的方法、装置及plc控制系统 Download PDF

Info

Publication number
CN102339031A
CN102339031A CN2010102387025A CN201010238702A CN102339031A CN 102339031 A CN102339031 A CN 102339031A CN 2010102387025 A CN2010102387025 A CN 2010102387025A CN 201010238702 A CN201010238702 A CN 201010238702A CN 102339031 A CN102339031 A CN 102339031A
Authority
CN
China
Prior art keywords
storage space
subroutine
calling station
data
station information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2010102387025A
Other languages
English (en)
Other versions
CN102339031B (zh
Inventor
张小军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Kechuangsi Technology Co ltd
Original Assignee
CO-TRUST TECHNOLOGIES Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by CO-TRUST TECHNOLOGIES Co Ltd filed Critical CO-TRUST TECHNOLOGIES Co Ltd
Priority to CN 201010238702 priority Critical patent/CN102339031B/zh
Publication of CN102339031A publication Critical patent/CN102339031A/zh
Application granted granted Critical
Publication of CN102339031B publication Critical patent/CN102339031B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Programmable Controllers (AREA)

Abstract

本发明实施例公开了子程序调用的方法,包括:获取子程序的调用位置信息;定位预设的与所述调用位置信息对应的存储数据的存储空间;根据所述存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据。相应地,本发明实施例还公开了子程序调用的装置以及PLC控制系统。实施本发明实施例,可有效解决现有技术中通过共享子程序进行多路控制时传统实现方案编程复杂、调试时间长以及维护难度高的问题,本发明实施例不使用指针和全局变量即可实现共享子程序进行多路控制,简化了编程调试,大大降低了用户的编程调试能力要求,缩短了编程调试周期,并加快了开发的进度。

Description

一种子程序调用的方法、装置及PLC控制系统
技术领域
本发明涉及电子领域,尤其涉及一种子程序调用的方法、装置及PLC控制系统。
背景技术
在传统的可编程逻辑控制器(PLC,Programmable Logic Controller)数据存储空间中,从数据保持和生命周期上分有两类变量:程序运行过程一直保持数据并且全局可见的全局变量和仅过程调用中有效并且局部可见的局部变量。全局变量用于保持全局数据和过程调用中的共享数据,局部变量用于保存过程调用的局部数据,在调用完毕后局部变量的数据存储空间立即释放,并不负责维持数据。
通过运行程序进行过程控制的时候,例如,PLC在进行过程控制的时候,经常需要周期性地调用某子程序(即调用某过程)进行过程控制,这些子程序往往需要保持上一周期或者以前周期运行后的结果数据,作为下一周期运算的基础数据。然而,当需要进行多路控制的时候,例如PLC控制多路电机进行运作,各路的子程序(算法)相同,可以通过共享该子程序进行多路控制,但是由于各路的控制不同步,即输入/输出的数据和中间计算的数据完全不同,所以相同的子程序并不共享数据。那么,若使用全局变量,各路数据将被子程序所共享,若使用局部变量,那么无法使各路在各自不同的周期保持数据。现有技术中,为了在多路控制中的每一路实现共享子程序但是不共享数据,且在某一路的不同调用周期共享数据,通常需要在过程中使用指针类型变量才可以做到,将运行子程序的过程中的变量定义为指针类型,调用子程序前将全局变量指针作为参数传入,不同的调用位置传递不同的全局变量指针。这样做可以实现共享子程序但不共享数据进行多路控制的需求。
但是由于用到了指针,而且需要统筹全局变量的使用,加大了编程调试和维护的复杂性,对用户的编程调试能力要求也大大提高,编程调试周期也会相应变长。包含大量指针变量的PLC系统运行速度也相对较慢。
发明内容
为了解决上述技术问题,提供一种子程序调用的方法、装置及PLC控制系统,可有效解决现有技术中针对进行多路控制的需求,传统实现方案编程复杂、调试时间长以及维护难度高的问题。
本发明实施例提出的一种子程序调用的方法,包括:
获取子程序的调用位置信息;
定位预设的与所述调用位置信息对应的存储数据的存储空间;
根据所述存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据。
其中,所述定位预设的与所述调用位置信息对应的存储数据的存储空间的步骤之前还包括:
设置存储数据的存储空间,所述数据为所述子程序调用运行所需的数据。
其中,所述定位预设的与所述调用位置信息对应的存储数据的存储空间的步骤包括:
根据所述调用位置信息查找预设的映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系;
若查找出所述调用位置信息映射的存储空间,则定位到所述存储空间;若没有查找出所述调用位置信息映射的存储空间,则为所述调用位置信息分配存储空间并定位到所述存储空间。
其中,为所述调用位置信息分配存储空间并定位到所述存储空间的步骤之后还包括:
在所述映射信息中记录所述调用位置信息与所述分配的存储空间的映射关系。
其中,根据所述调用位置信息查找预设的映射信息的步骤之前还包括:
根据设置的存储数据的存储空间,初始化映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系。
其中,所述子程序为可编程逻辑控制器PLC过程控制子程序。
相应地,本发明实施例公开了一种子程序调用装置,包括:
位置获取模块,用于获取子程序的调用位置信息;
定位模块,用于定位预设的与所述调用位置信息对应的存储数据的存储空间;
调用运行模块,用于根据所述定位模块定位的存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据。
其中,所述子程序调用装置还包括:
存储空间设置模块,用于设置存储数据的存储空间,所述数据为所述子程序调用运行所需的数据。
其中,所述定位模块包括:
映射信息查找单元,用于根据所述调用位置信息查找预设的映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系;
存储空间定位单元,用于若所述映射信息查找单元查找出所述调用位置信息映射的存储空间,则定位到所述存储空间;若所述映射信息查找单元没有查找出所述调用位置信息映射的存储空间,则为所述调用位置信息分配存储空间并定位到所述存储空间。
其中,所述子程序调用装置还包括:
映射关系记录模块,用于当所述存储空间定位单元为所述调用位置信息分配存储空间并定位到所述存储空间后,在所述映射信息中记录所述调用位置信息与所述分配的存储空间的映射关系。
其中,所述子程序调用装置还包括:
映射信息初始化模块,用于根据所述存储空间设置模块设置的存储数据的存储空间,初始化映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系。
相应地,本发明实施例公开了一种PLC控制系统,包括上述的子程序调用装置,所述子程序为可编程逻辑控制器PLC过程控制子程序。
实施本发明实施例,具有如下有益效果:
通过根据子程序的调用位置信息定位对应的存储数据的存储空间,根据所述存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据,可有效解决现有技术中通过共享子程序进行多路控制时传统实现方案编程复杂、调试时间长以及维护难度高的问题,本发明实施例不使用指针和全局变量即可实现共享子程序进行多路控制,简化了编程调试,大大降低了用户的编程调试能力要求,缩短了编程调试周期,并加快了开发的进度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明子程序调用的第一实施例的方法流程图;
图2是本发明子程序调用的第二实施例的方法流程图;
图3是本发明映射表的第一实施例的结构示意图;
图4是本发明映射表的第二实施例的结构示意图;
图5是本发明子程序调用装置的第一实施例的结构示意图;
图6是本发明子程序调用装置的第二实施例的结构示意图;
图7是本发明实施例的定位模块的结构示意图;
图8是本发明子程序调用装置的第三实施例的结构示意图;
图9是本发明子程序调用装置的第四实施例的结构示意图;
图10是本发明实施例的PLC控制系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1示出的本发明子程序调用的第一实施例的方法流程图,包括:
步骤S101:获取子程序的调用位置信息;
具体地,系统预先编写至少一个子程序(即可以预先编写多个不同的子程序),然后在整个程序的运行过程中该子程序被周期性地调用运行,那么系统在调用运行该子程序之前,获取该子程序的调用位置信息,该调用位置信息包括但不限于调用该子程序的指令在整个运行的程序中的行数信息等。
步骤S102:定位预设的与所述调用位置信息对应的存储数据的存储空间;
具体地,系统预先编写设置存储数据的存储空间,该数据为该子程序调用运行所需的数据,该存储空间与所述调用位置信息存在对应关系,每个被调用的子程序将被定位到各自对应的存储空间存储的数据,即,若某个子程序在固定的调用位置被周期性地调用,那么给子程序将一直被定位到对应的存储空间存储的数据。
步骤S103:根据所述存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据。
具体地,系统在所述存储空间中保持所述子程序运行后的数据,即系统能够在周期性地调用某个固定调用位置的子程序的过程中一直保持数据,而不同调用位置的子程序之间能够不共享数据。
需要说明的是,现有技术中一般以Function data的格式调用子程序,而本发明实施例中直接以Function即可调用该子程序,系统将根据Function的位置定位到存储空间存储的所需的数据来完成该子程序的调用运行。
还需要说明的是,步骤S102中,可以但不限于通过下面的例子设置定义数据以及存储该数据的存储空间:
struct LMemLocationNode{
    INT8U*pCallPc;
    INT8U mem[MEM_L_RANGE];
};
struct LMemLocationNode lMemLocationNodes[STL_MAX_INS_NUM/2];
进一步地,更详细地说明本发明实施例中定位预设的与所述调用位置信息对应的存储数据的存储空间的步骤,如图2示出的本发明子程序调用的第二实施例的方法流程图,包括:
步骤S201:获取子程序的调用位置信息;
步骤S202:根据所述调用位置信息查找预设的映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系;
具体地,系统预先设置了映射信息,该映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系,该映射信息可以为一映射表,如图3示出的本发明映射表的第一实施例的结构示意图,以调用位置信息为子程序被调用运行的行数为例,该映射表中包括被调用运行的子程序所在的行数映射的存储空间,如在第15行调用的子程序A对应存储空间a、在第17行调用的子程序A对应存储空间b、在第18行调用的子程序B对应存储空间c等等。
步骤S203:若查找出所述调用位置信息映射的存储空间,则定位到所述存储空间;若没有查找出所述调用位置信息映射的存储空间,则为所述调用位置信息分配存储空间并定位到所述存储空间;
具体地,若系统查找出所述调用位置信息映射的存储空间,则定位到所述存储空间,如查找出第17行调用的子程序A对应存储空间b,即表明之前已经调用运行过第17行的子程序A,那么将调用运行第17行的子程序定位到存储空间b存储的数据上;若系统没有查找出所述调用位置信息映射的存储空间,则为所述调用位置信息分配存储空间并定位到所述存储空间,如没有查找出第23行调用的子程序A对应的存储空间,即表明之前没有调用运行过第23行的子程序A,当前第一次调用运行第23行的子程序A,那么为第23行的子程序A分配一个存储空间d,该存储空间d没有对应调用位置信息,即该存储空间d对应的调用位置信息为NULL,然后将第23行的子程序A定位到存储空间d。
步骤S204:根据所述存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据。
需要说明的是,系统可以但不限于通过下面的例子初始化设置映射信息:
void StlLMemLocationNodesInit(void)
{
       int i;
       for(i=0;i<sizeof(lMemLocationNodes)/sizeof(struct LMemLocationNode);
i++)
        {
            lMemLocationNodes[i].pCallPc=NULL;
            memset(lMemLocationNodes[i].mem,0,MEM_L_RANGE);
         }
}
进一步地,步骤S203中,为所述调用位置信息分配存储空间并定位到所述存储空间的步骤之后还包括:在所述映射信息中记录所述调用位置信息与所述分配的存储空间的映射关系。具体地,如为第30行的子程序A分配一个存储空间d后,如图4示出的本发明映射表的第二实施例的结构示意图,在该映射信息中自动记录了第30行的子程序A对应存储空间d,那么当再次调用第30行的子程序A时,系统将定位到存储空间d存储的数据。
需要说明的是,步骤S203中,系统可以但不限于通过下面的例子定位存储空间:
INT8U*getCurrLMemLocation(INT8U*currCallPc)
{
   int i;
   for(i=0;i<sizeof(lMemLocationNodes)/sizeof(struct LMemLocationNode);
i++)
    {
       if(lMemLocationNodes[i].pCallPc==currCallPc)
       {
           return lMemLocationNodes[i].mem;
/*若查找出所述调用位置信息映射的存储空间,则返回该存储空间,即定位到该存储空间*/
}
else if(lMemLocationNodes[i].pCallPc==NULL)
{
     lMemLocationNodes[i].pCallPc=currCallPc;
     return lMemLocationNodes[i].mem;
/*若没有查找出所述调用位置信息映射的存储空间,则为当前该调用位置信息分配存储空间并返回该存储空间,即定位到该存储空间*/
        }
    }
    return NULL;
}
实施上述实施例,根据子程序的调用位置信息定位对应的存储数据的存储空间,根据所述存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据,能够实现在周期性地调用某个固定调用位置的子程序的过程中一直保持数据,即该数据仅对相同的调用位置的过程可见,而不同调用位置的子程序之间能够不共享数据,实现了不使用指针即可完成共享子程序进行多路控制,有效解决了现有技术中通过共享子程序进行多路控制时传统实现方案编程复杂、调试时间长以及维护难度高的问题,简化了编程调试,大大降低了用户的编程调试能力要求,缩短了编程调试周期,并加快了开发的进度。
下面以PLC控制4路电机运作为例进行说明:
假设电机1与电机2的接口参数均相同,通过共享PLC过程控制子程序A来控制(下面简称子程序A),电机3与电机4的接口参数均相同,通过共享PLC过程控制子程序B(下面简称子程序B)来控制。PLC控制系统预先编写子程序A以及子程序B,预先设置子程序A以及子程序B运行所需的数据,以及存储该数据的至少4个存储空间,预先初始化映射信息,如控制电机1的子程序A在整个程序中的第20行被调用运行,控制电机2的子程序A在整个程序中的第30行被调用运行。
当第一次调用运行第20行的子程序A时,PLC控制系统根据所述调用位置信息(第20行)查找预设的映射信息,没有查找出第20行映射的存储空间,则为第20行分配存储空间h,并定位到该存储空间h,PLC控制系统利用存储空间h存储的数据运行子程序A,以控制电机1的运作,并在存储空间h中保持该子程序A运行后的数据;同理,当第一次调用运行第30行的子程序A时,PLC控制系统根据所述调用位置信息(第30行)查找预设的映射信息,没有查找出第30行映射的存储空间,则为第30行分配存储空间j,并定位到该存储空间j,PLC控制系统利用存储空间j存储的数据运行子程序A,以控制电机2的运作,并在存储空间j中保持该子程序A运行后的数据;
当再次调用运行第20行的子程序A,以对电机1进行控制时,PLC控制系统根据所述调用位置信息(第20行)查找预设的映射信息,查找到第20行映射的存储空间h,那么PLC控制系统将定位到存储空间h存储的数据(即为第一次运行后保持的数据),以运行该子程序A,并在存储空间h中保持该子程序A运行后的数据;同理,当再次调用运行第30行的子程序A,以对电机2进行控制时,PLC控制系统根据所述调用位置信息(第30行)查找预设的映射信息,查找到第30行映射的存储空间j,那么PLC控制系统将定位到存储空间j存储的数据(即为第一次运行后保持的数据),以运行该子程序A,并在存储空间j中保持该子程序A运行后的数据。
对电机3和电机4的控制过程与上述过程一致,这里不再赘述。通过上述方法,实现了在周期性地调用某个固定调用位置的子程序的过程中一直保持数据,即该数据仅对相同的调用位置的过程可见,而不同调用位置的子程序,虽然子程序相同,但能够不共享数据。
上面详细说明了本发明实施例的子程序调用的方法,下面相应地,说明本发明实施例的子程序调用装置的结构。
如图5示出的本发明子程序调用装置的第一实施例的结构示意图,子程序调用装置5包括位置获取模块51、定位模块52和调用运行模块53,其中,
位置获取模块51用于获取子程序的调用位置信息;
具体地,系统预先编写至少一个子程序(即可以预先编写多个不同的子程序),然后在整个程序的运行过程中该子程序被周期性地调用运行,那么系统在调用运行该子程序之前,位置获取模块51获取该子程序的调用位置信息,该调用位置信息包括但不限于调用该子程序的指令在整个运行的程序中的行数信息等。
定位模块52用于定位预设的与所述调用位置信息对应的存储数据的存储空间;
具体地,子程序调用装置5预先编写设置存储数据的存储空间,该数据为该子程序调用运行所需的数据,该存储空间与所述调用位置信息存在对应关系,通过定位模块52每个被调用的子程序将被定位到各自对应的存储空间存储的数据,即,若某个子程序在固定的调用位置被周期性地调用,那么给子程序将一直被定位到对应的存储空间存储的数据。
调用运行模块53用于根据定位模块52定位的存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据。
具体地,调用运行模块53在所述存储空间中保持所述子程序运行后的数据,即子程序调用装置5能够在周期性地调用某个固定调用位置的子程序的过程中一直保持数据,而不同调用位置的子程序之间能够不共享数据。
需要说明的是,现有技术中一般以Function data的格式调用子程序,而本发明实施例中直接以Function即可调用该子程序,子程序调用装置5将根据Function的位置定位到存储空间存储的所需的数据来完成该子程序的调用运行。
如图6示出的本发明子程序调用装置的第二实施例的结构示意图,子程序调用装置5包括位置获取模块51、定位模块52和调用运行模块53外,还包括存储空间设置模块54,用于设置存储数据的存储空间,所述数据为所述子程序调用运行所需的数据。
具体地,存储空间设置模块54可以但不限于通过下面的例子设置定义数据以及存储该数据的存储空间:
struct LMemLocationNode{
    INT8U*pCallPc;
    INT8U mem[MEM_L_RANGE];
};
struct LMemLocationNode lMemLocationNodes[STL_MAX_INS_NUM/2];
如图7示出的本发明实施例的定位模块的结构示意图,进一步说明本发明实施例的子程序调用装置5,定位模块52包括映射信息查找单元521和存储空间定位单元522,其中
映射信息查找单元521用于根据所述调用位置信息查找预设的映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系;
具体地,子程序调用装置5预先设置了映射信息,该映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系,该映射信息可以为一映射表,如图3示出的本发明映射表的第一实施例的结构示意图,以调用位置信息为子程序被调用运行的行数为例,该映射表中包括被调用运行的子程序所在的行数映射的存储空间,如在第15行调用的子程序A对应存储空间a、在第17行调用的子程序A对应存储空间b、在第18行调用的子程序B对应存储空间c等等。
存储空间定位单元522用于若映射信息查找单元521查找出所述调用位置信息映射的存储空间,则定位到所述存储空间;若映射信息查找单元521没有查找出所述调用位置信息映射的存储空间,则为所述调用位置信息分配存储空间并定位到所述存储空间。
具体地,若映射信息查找单元521查找出所述调用位置信息映射的存储空间,则存储空间定位单元522定位到所述存储空间,如查找出第17行调用的子程序A对应存储空间b,即表明之前已经调用运行过第17行的子程序A,那么存储空间定位单元522将调用运行第17行的子程序定位到存储空间b存储的数据上;若映射信息查找单元521没有查找出所述调用位置信息映射的存储空间,则存储空间定位单元522为所述调用位置信息分配存储空间并定位到所述存储空间,如没有查找出第23行调用的子程序A对应的存储空间,即表明之前没有调用运行过第23行的子程序A,当前第一次调用运行第23行的子程序A,那么存储空间定位单元522为第23行的子程序A分配一个存储空间d,该存储空间d没有对应调用位置信息,即该存储空间d对应的调用位置信息为NULL,然后将第23行的子程序A定位到存储空间d。
如图8示出的本发明子程序调用装置的第三实施例的结构示意图,子程序调用装置5包括位置获取模块51、定位模块52、调用运行模块53和存储空间设置模块54外,还包括映射信息初始化模块55,用于根据存储空间设置模块54设置的存储数据的存储空间,初始化映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系。具体地,映射信息初始化模块55可以但不限于通过下面的例子初始化设置映射信息:
void StlLMemLocationNodesInit(void)
{
        int i;
        for(i=0;i<sizeof(lMemLocationNodes)/sizeof(struct LMemLocationNode);
i++)
         {
             lMemLocationNodes[i].pCallPc=NULL;
             memset(lMemLocationNodes[i].mem,0,MEM_L_RANGE);
         }
}
如图9示出的本发明子程序调用装置的第四实施例的结构示意图,子程序调用装置5包括位置获取模块51、定位模块52、调用运行模块53、存储空间设置模块54和映射信息初始化模块55外,还包括映射信息存储模块56以及映射关系记录模块57,映射信息存储模块56用于存储子程序调用装置5设置的映射信息;映射关系记录模块57用于当定位模块52中的存储空间定位单元522为所述调用位置信息分配存储空间并定位到所述存储空间后,在映射信息存储模块56存储的映射信息中记录所述调用位置信息与所述分配的存储空间的映射关系。具体地,定位模块52可以但不限于通过下面的例子定位存储空间:
INT8U*getCurrLMemLocation(INT8U*currCallPc)
{
   int i;
   for(i=0;i<sizeof(lMemLocationNodes)/sizeof(struct LMemLocationNode);
i++)
   {
      if(lMemLocationNodes[i].pCallPc==currCallPc)
      {
          return lMemLocationNodes[i].mem;
/*若查找出所述调用位置信息映射的存储空间,则返回该存储空间,即定位到该存储空间*/
}
else if(lMemLocationNodes[i].pCallPc==NULL)
{
     lMemLocationNodes[i].pCallPc=currCallPc;
     retum lMemLocationNodes[i].mem;
/*若没有查找出所述调用位置信息映射的存储空间,则为当前该调用位置信息分配存储空间并返回该存储空间,即定位到该存储空间*/
    }
}
return NULL;
}
需要特别注意的是以上各个实施例中提到的子程序是指的一类特定的子程序,这类子程序需要在程序的反复运行中反复的调用数据,这类数据既不是局部变量中存储的数据,也不是全局变量中存储的数据,而是直接与子程序的调用位置对应的一类数据,这类数据能够在不同的调用周期保持数据,而不同调用位置的这类子程序的调用数据不共享,也就是不会相互影响/改变。可以在PLC系统实现中定义关键字BD(background data)来修饰这类子程序,以区别于其他普通的子程序调用,比如调用一般的全局变量或者局部变量的子程序。
例如:
BD void MotorControl()
有了这种关键字BD加以区分,PLC系统可以方便的查找到需要调用这种映射关系的数据的子程序,因而也方便形成映射表。比如PLC在第一次执行用户程序之前,遍历整个用户程序中包含BD定义的子程序调用,记录该类子程序的调用位置,并根据所需要的数据长度为他们分配相应大小的数据空间,从而形成预设的映射表。
相应地,本发明实施例还公开了一种PLC控制系统,如图10示出的本发明实施例的PLC控制系统的结构示意图,PLC控制系统10包括上述实施例中的子程序调用装置5,该子程序为可编程逻辑控制器PLC过程控制子程序。
下面以PLC控制系统10控制4路电机运作为例进行说明:
假设电机1与电机2的接口参数均相同,通过共享PLC过程控制子程序A来控制(下面简称子程序A),电机3与电机4的接口参数均相同,通过共享PLC过程控制子程序B(下面简称子程序B)来控制。PLC控制系统10预先编写子程序A以及子程序B,预先设置子程序A以及子程序B运行所需的数据,以及存储该数据的至少4个存储空间,预先初始化映射信息,如控制电机1的子程序A在整个程序中的第20行被调用运行,控制电机2的子程序A在整个程序中的第30行被调用运行。
当第一次调用运行第20行的子程序A时,PLC控制系统10根据所述调用位置信息(第20行)查找预设的映射信息,没有查找出第20行映射的存储空间,则为第20行分配存储空间h,并定位到该存储空间h,PLC控制系统10利用存储空间h存储的数据运行子程序A,以控制电机1的运作,并在存储空间h中保持该子程序A运行后的数据;同理,当第一次调用运行第30行的子程序A时,PLC控制系统10根据所述调用位置信息(第30行)查找预设的映射信息,没有查找出第30行映射的存储空间,则为第30行分配存储空间j,并定位到该存储空间j,PLC控制系统10利用存储空间j存储的数据运行子程序A,以控制电机2的运作,并在存储空间j中保持该子程序A运行后的数据;
当再次调用运行第20行的子程序A,以对电机1进行控制时,PLC控制系统10根据所述调用位置信息(第20行)查找预设的映射信息,查找到第20行映射的存储空间h,那么PLC控制系统10将定位到存储空间h存储的数据(即为第一次运行后保持的数据),以运行该子程序A,并在存储空间h中保持该子程序A运行后的数据;同理,当再次调用运行第30行的子程序A,以对电机2进行控制时,PLC控制系统10根据所述调用位置信息(第30行)查找预设的映射信息,查找到第30行映射的存储空间j,那么PLC控制系统10将定位到存储空间j存储的数据(即为第一次运行后保持的数据),以运行该子程序A,并在存储空间j中保持该子程序A运行后的数据。
对电机3和电机4的控制过程与上述过程一致,这里不再赘述。通过上述方法,实现了在周期性地调用某个固定调用位置的子程序的过程中一直保持数据,即该数据仅对相同的调用位置的过程可见,而不同调用位置的子程序,虽然子程序相同,但能够不共享数据。
综上所述,实施本发明实施例,根据子程序的调用位置信息定位对应的存储数据的存储空间,根据所述存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据,能够实现在周期性地调用某个固定调用位置的子程序的过程中一直保持数据,即该数据仅对相同的调用位置的过程可见,而不同调用位置的子程序之间能够不共享数据,实现了不使用指针和全局变量即可完成共享子程序进行多路控制,有效解决了现有技术中通过共享子程序进行多路控制时传统实现方案编程复杂、调试时间长以及维护难度高的问题,简化了编程调试,大大降低了用户的编程调试能力要求,缩短了编程调试周期,并加快了开发的进度。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明实施例中的较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

Claims (12)

1.一种子程序调用的方法,其特征在于,包括:
获取子程序的调用位置信息;
定位预设的与所述调用位置信息对应的存储数据的存储空间;
根据所述存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据。
2.如权利要求1所述的方法,其特征在于,所述定位预设的与所述调用位置信息对应的存储数据的存储空间的步骤之前还包括:
设置存储数据的存储空间,所述数据为所述子程序调用运行所需的数据。
3.如权利要求2所述的方法,其特征在于,所述定位预设的与所述调用位置信息对应的存储数据的存储空间的步骤包括:
根据所述调用位置信息查找预设的映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系;
若查找出所述调用位置信息映射的存储空间,则定位到所述存储空间;若没有查找出所述调用位置信息映射的存储空间,则为所述调用位置信息分配存储空间并定位到所述存储空间。
4.如权利要求3所述的方法,其特征在于,为所述调用位置信息分配存储空间并定位到所述存储空间的步骤之后还包括:
在所述映射信息中记录所述调用位置信息与所述分配的存储空间的映射关系。
5.如权利要求3所述的方法,其特征在于,根据所述调用位置信息查找预设的映射信息的步骤之前还包括:
根据设置的存储数据的存储空间,初始化映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系。
6.如权利要求1-5任一项所述的方法,其特征在于,所述子程序为可编程逻辑控制器PLC过程控制子程序。
7.一种子程序调用装置,其特征在于,包括:
位置获取模块,用于获取子程序的调用位置信息;
定位模块,用于定位预设的与所述调用位置信息对应的存储数据的存储空间;
调用运行模块,用于根据所述定位模块定位的存储空间存储的数据调用运行所述子程序,并在所述存储空间中保持所述子程序运行后的数据。
8.如权利要求7所述的装置,其特征在于,还包括:
存储空间设置模块,用于设置存储数据的存储空间,所述数据为所述子程序调用运行所需的数据。
9.如权利要求8所述的装置,其特征在于,所述定位模块包括:
映射信息查找单元,用于根据所述调用位置信息查找预设的映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系;
存储空间定位单元,用于若所述映射信息查找单元查找出所述调用位置信息映射的存储空间,则定位到所述存储空间;若所述映射信息查找单元没有查找出所述调用位置信息映射的存储空间,则为所述调用位置信息分配存储空间并定位到所述存储空间。
10.如权利要求9所述的装置,其特征在于,还包括:
映射关系记录模块,用于当所述存储空间定位单元为所述调用位置信息分配存储空间并定位到所述存储空间后,在所述映射信息中记录所述调用位置信息与所述分配的存储空间的映射关系。
11.如权利要求9所述的装置,其特征在于,还包括:
映射信息初始化模块,用于根据所述存储空间设置模块设置的存储数据的存储空间,初始化映射信息,所述映射信息包括调用运行所述子程序的调用位置信息与所述存储空间的映射关系。
12.一种PLC控制系统,其特征在于,包括如权利要求7-11任一项所述的子程序调用装置,所述子程序为可编程逻辑控制器PLC过程控制子程序。
CN 201010238702 2010-07-27 2010-07-27 一种子程序调用的方法、装置及plc控制系统 Expired - Fee Related CN102339031B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010238702 CN102339031B (zh) 2010-07-27 2010-07-27 一种子程序调用的方法、装置及plc控制系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010238702 CN102339031B (zh) 2010-07-27 2010-07-27 一种子程序调用的方法、装置及plc控制系统

Publications (2)

Publication Number Publication Date
CN102339031A true CN102339031A (zh) 2012-02-01
CN102339031B CN102339031B (zh) 2013-12-25

Family

ID=45514817

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010238702 Expired - Fee Related CN102339031B (zh) 2010-07-27 2010-07-27 一种子程序调用的方法、装置及plc控制系统

Country Status (1)

Country Link
CN (1) CN102339031B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103064335A (zh) * 2012-12-31 2013-04-24 北京配天大富精密机械有限公司 一种数控系统的功能变更方法、运行方法及运动控制卡
CN103618707A (zh) * 2013-11-21 2014-03-05 福州市勘测院 用于数字化城市管理系统的web前端快速调用系统
CN106325202A (zh) * 2016-09-29 2017-01-11 深圳市合信自动化技术有限公司 一种对子程序进行加密的方法、校验方法及相应的plc编程系统
TWI581081B (zh) * 2014-10-10 2017-05-01 三菱電機股份有限公司 可程式邏輯控制器
CN106776016A (zh) * 2016-11-28 2017-05-31 硅谷数模半导体(北京)有限公司 应用程序处理方法和装置
CN110109703A (zh) * 2019-05-27 2019-08-09 烟台万泉数字科技有限公司 小型plc中实现带静态数据功能的子程序

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1330781A (zh) * 1998-12-15 2002-01-09 因芬尼昂技术股份公司 对只读存储器内存放的程序的流程进行变更的方法
CN1431570A (zh) * 2002-01-10 2003-07-23 欧姆龙株式会社 单元和可编程控制器以及用户程序的处理方法
CN1467626A (zh) * 2002-07-09 2004-01-14 徐肇昌 子序网模块及其调用
CN1567235A (zh) * 2003-06-24 2005-01-19 明基电通股份有限公司 一种检测内存存取错误的方法
US20050162422A1 (en) * 2002-02-19 2005-07-28 Kazuhiko Miyata Display, electronic device, data transmitting method, information terminal, host apparatus, program, recording medium
CN101571810A (zh) * 2009-05-31 2009-11-04 清华大学 执行程序的方法、验证程序结果的方法、装置及系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1330781A (zh) * 1998-12-15 2002-01-09 因芬尼昂技术股份公司 对只读存储器内存放的程序的流程进行变更的方法
CN1431570A (zh) * 2002-01-10 2003-07-23 欧姆龙株式会社 单元和可编程控制器以及用户程序的处理方法
US20050162422A1 (en) * 2002-02-19 2005-07-28 Kazuhiko Miyata Display, electronic device, data transmitting method, information terminal, host apparatus, program, recording medium
CN1467626A (zh) * 2002-07-09 2004-01-14 徐肇昌 子序网模块及其调用
CN1567235A (zh) * 2003-06-24 2005-01-19 明基电通股份有限公司 一种检测内存存取错误的方法
CN101571810A (zh) * 2009-05-31 2009-11-04 清华大学 执行程序的方法、验证程序结果的方法、装置及系统

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103064335A (zh) * 2012-12-31 2013-04-24 北京配天大富精密机械有限公司 一种数控系统的功能变更方法、运行方法及运动控制卡
CN103618707A (zh) * 2013-11-21 2014-03-05 福州市勘测院 用于数字化城市管理系统的web前端快速调用系统
CN103618707B (zh) * 2013-11-21 2016-08-24 福州市勘测院 用于数字化城市管理系统的web前端快速调用系统
TWI581081B (zh) * 2014-10-10 2017-05-01 三菱電機股份有限公司 可程式邏輯控制器
CN106325202A (zh) * 2016-09-29 2017-01-11 深圳市合信自动化技术有限公司 一种对子程序进行加密的方法、校验方法及相应的plc编程系统
CN106776016A (zh) * 2016-11-28 2017-05-31 硅谷数模半导体(北京)有限公司 应用程序处理方法和装置
CN110109703A (zh) * 2019-05-27 2019-08-09 烟台万泉数字科技有限公司 小型plc中实现带静态数据功能的子程序

Also Published As

Publication number Publication date
CN102339031B (zh) 2013-12-25

Similar Documents

Publication Publication Date Title
CN102339031B (zh) 一种子程序调用的方法、装置及plc控制系统
CN106445398B (zh) 一种基于新型存储器的嵌入式文件系统及其实现方法
CN103744726B (zh) 一种Windows系统实时扩展的两级调度方法
CN103019861A (zh) 虚拟机分配方法及装置
CN101387988B (zh) 具有闪速存储器的计算机和运行闪速存储器的方法
CN103608777A (zh) 图形处理单元中的存储器共享
CN102428451A (zh) 用于数据存储装置的命令及中断分组
CN103365668A (zh) 一种动态链接库装载和链接的方法、装置
US20140310453A1 (en) Shiftable memory supporting atomic operation
CN104657111A (zh) 一种并行计算方法和装置
CN103377066A (zh) 在微处理器中访问和管理代码翻译
CN105787986A (zh) 一种三维图形渲染的方法和装置
CN102915386A (zh) 基于HLA的Adams仿真模型集成平台及方法
KR20080105345A (ko) 병렬 처리 장치 및 방법
CN101944011B (zh) 运行程序的装置、芯片和方法
CN104090804B (zh) 一种实时dsp嵌入式系统虚拟内存扩容方法
CN106708481B (zh) 一种控制任务执行的方法
CN100489781C (zh) 对目标文件进行定位的方法和装置
CN111123818B (zh) 一种plc浮点数和定点数相互转换控制系统及方法
US20150269767A1 (en) Configuring resources used by a graphics processing unit
CN106155914A (zh) 实体储存对照表维护方法以及使用该方法的装置
EP2689325A1 (en) Processor system with predicate register, computer system, method for managing predicates and computer program product
CN105677233A (zh) 即时数据的储存方法及储存装置
CN102469357B (zh) 一种用户操作数据的保存方法、系统及数字电视接收终端
CN105446788B (zh) 一种信息处理方法及电子设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: SHENZHEN KECHUANGSI TECHNOLOGY CO., LTD.

Free format text: FORMER OWNER: CO-TRUST TECHNOLOGIES CO., LTD.

Effective date: 20141216

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20141216

Address after: 518000 Guangdong city of Shenzhen province Nanshan District Xili town tea light road on the south side of Shenzhen integrated circuit design and application of Industrial Park 210

Patentee after: SHENZHEN KECHUANGSI TECHNOLOGY Co.,Ltd.

Address before: 518000 Guangdong city of Shenzhen province Nanshan District Xili town tea light road on the south side of Shenzhen integrated circuit design and application of Industrial Park 209

Patentee before: SHENZHEN CO-TRUST TECHNOLOGY Co.,Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20131225