專利名稱:一種子程序調(diào)用的方法、裝置及plc控制系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及電子領域,尤其涉及一種子程序調(diào)用的方法、裝置及PLC控制系統(tǒng)。
背景技術:
在傳統(tǒng)的可編程邏輯控制器(PLC,Programmable Logic Controller)數(shù)據(jù)存儲空間中,從數(shù)據(jù)保持和生命周期上分有兩類變量程序運行過程一直保持數(shù)據(jù)并且全局可見的全局變量和僅過程調(diào)用中有效并且局部可見的局部變量。全局變量用于保持全局數(shù)據(jù)和過程調(diào)用中的共享數(shù)據(jù),局部變量用于保存過程調(diào)用的局部數(shù)據(jù),在調(diào)用完畢后局部變量的數(shù)據(jù)存儲空間立即釋放,并不負責維持數(shù)據(jù)。通過運行程序進行過程控制的時候,例如,PLC在進行過程控制的時候,經(jīng)常需要周期性地調(diào)用某子程序(即調(diào)用某過程)進行過程控制,這些子程序往往需要保持上一周期或者以前周期運行后的結(jié)果數(shù)據(jù),作為下一周期運算的基礎數(shù)據(jù)。然而,當需要進行多路控制的時候,例如PLC控制多路電機進行運作,各路的子程序(算法)相同,可以通過共享該子程序進行多路控制,但是由于各路的控制不同步,即輸入/輸出的數(shù)據(jù)和中間計算的數(shù)據(jù)完全不同,所以相同的子程序并不共享數(shù)據(jù)。那么,若使用全局變量,各路數(shù)據(jù)將被子程序所共享,若使用局部變量,那么無法使各路在各自不同的周期保持數(shù)據(jù)?,F(xiàn)有技術中, 為了在多路控制中的每一路實現(xiàn)共享子程序但是不共享數(shù)據(jù),且在某一路的不同調(diào)用周期共享數(shù)據(jù),通常需要在過程中使用指針類型變量才可以做到,將運行子程序的過程中的變量定義為指針類型,調(diào)用子程序前將全局變量指針作為參數(shù)傳入,不同的調(diào)用位置傳遞不同的全局變量指針。這樣做可以實現(xiàn)共享子程序但不共享數(shù)據(jù)進行多路控制的需求。但是由于用到了指針,而且需要統(tǒng)籌全局變量的使用,加大了編程調(diào)試和維護的復雜性,對用戶的編程調(diào)試能力要求也大大提高,編程調(diào)試周期也會相應變長。包含大量指針變量的PLC系統(tǒng)運行速度也相對較慢。
發(fā)明內(nèi)容
為了解決上述技術問題,提供一種子程序調(diào)用的方法、裝置及PLC控制系統(tǒng),可有效解決現(xiàn)有技術中針對進行多路控制的需求,傳統(tǒng)實現(xiàn)方案編程復雜、調(diào)試時間長以及維護難度高的問題。本發(fā)明實施例提出的一種子程序調(diào)用的方法,包括獲取子程序的調(diào)用位置信息;定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間;根據(jù)所述存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù)。其中,所述定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間的步驟之前還包括設置存儲數(shù)據(jù)的存儲空間,所述數(shù)據(jù)為所述子程序調(diào)用運行所需的數(shù)據(jù)。
其中,所述定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間的步驟包括根據(jù)所述調(diào)用位置信息查找預設的映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系;若查找出所述調(diào)用位置信息映射的存儲空間,則定位到所述存儲空間;若沒有查找出所述調(diào)用位置信息映射的存儲空間,則為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間。其中,為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間的步驟之后還包括在所述映射信息中記錄所述調(diào)用位置信息與所述分配的存儲空間的映射關系。其中,根據(jù)所述調(diào)用位置信息查找預設的映射信息的步驟之前還包括根據(jù)設置的存儲數(shù)據(jù)的存儲空間,初始化映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系。其中,所述子程序為可編程邏輯控制器PLC過程控制子程序。相應地,本發(fā)明實施例公開了一種子程序調(diào)用裝置,包括位置獲取模塊,用于獲取子程序的調(diào)用位置信息;定位模塊,用于定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間;調(diào)用運行模塊,用于根據(jù)所述定位模塊定位的存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù)。其中,所述子程序調(diào)用裝置還包括存儲空間設置模塊,用于設置存儲數(shù)據(jù)的存儲空間,所述數(shù)據(jù)為所述子程序調(diào)用運行所需的數(shù)據(jù)。其中,所述定位模塊包括映射信息查找單元,用于根據(jù)所述調(diào)用位置信息查找預設的映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系;存儲空間定位單元,用于若所述映射信息查找單元查找出所述調(diào)用位置信息映射的存儲空間,則定位到所述存儲空間;若所述映射信息查找單元沒有查找出所述調(diào)用位置信息映射的存儲空間,則為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間。其中,所述子程序調(diào)用裝置還包括映射關系記錄模塊,用于當所述存儲空間定位單元為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間后,在所述映射信息中記錄所述調(diào)用位置信息與所述分配的存儲空間的映射關系。其中,所述子程序調(diào)用裝置還包括映射信息初始化模塊,用于根據(jù)所述存儲空間設置模塊設置的存儲數(shù)據(jù)的存儲空間,初始化映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系。相應地,本發(fā)明實施例公開了一種PLC控制系統(tǒng),包括上述的子程序調(diào)用裝置,所述子程序為可編程邏輯控制器PLC過程控制子程序。實施本發(fā)明實施例,具有如下有益效果
通過根據(jù)子程序的調(diào)用位置信息定位對應的存儲數(shù)據(jù)的存儲空間,根據(jù)所述存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù),可有效解決現(xiàn)有技術中通過共享子程序進行多路控制時傳統(tǒng)實現(xiàn)方案編程復雜、調(diào)試時間長以及維護難度高的問題,本發(fā)明實施例不使用指針和全局變量即可實現(xiàn)共享子程序進行多路控制,簡化了編程調(diào)試,大大降低了用戶的編程調(diào)試能力要求,縮短了編程調(diào)試周期,并加快了開發(fā)的進度。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明子程序調(diào)用的第一實施例的方法流程圖;圖2是本發(fā)明子程序調(diào)用的第二實施例的方法流程圖;圖3是本發(fā)明映射表的第一實施例的結(jié)構示意圖;圖4是本發(fā)明映射表的第二實施例的結(jié)構示意圖;圖5是本發(fā)明子程序調(diào)用裝置的第一實施例的結(jié)構示意圖;圖6是本發(fā)明子程序調(diào)用裝置的第二實施例的結(jié)構示意圖;圖7是本發(fā)明實施例的定位模塊的結(jié)構示意圖;圖8是本發(fā)明子程序調(diào)用裝置的第三實施例的結(jié)構示意圖;圖9是本發(fā)明子程序調(diào)用裝置的第四實施例的結(jié)構示意圖;圖10是本發(fā)明實施例的PLC控制系統(tǒng)的結(jié)構示意圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。如圖1示出的本發(fā)明子程序調(diào)用的第一實施例的方法流程圖,包括步驟SlOl 獲取子程序的調(diào)用位置信息;具體地,系統(tǒng)預先編寫至少一個子程序(即可以預先編寫多個不同的子程序),然后在整個程序的運行過程中該子程序被周期性地調(diào)用運行,那么系統(tǒng)在調(diào)用運行該子程序之前,獲取該子程序的調(diào)用位置信息,該調(diào)用位置信息包括但不限于調(diào)用該子程序的指令在整個運行的程序中的行數(shù)信息等。步驟S102 定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間;具體地,系統(tǒng)預先編寫設置存儲數(shù)據(jù)的存儲空間,該數(shù)據(jù)為該子程序調(diào)用運行所需的數(shù)據(jù),該存儲空間與所述調(diào)用位置信息存在對應關系,每個被調(diào)用的子程序?qū)⒈欢ㄎ坏礁髯詫拇鎯臻g存儲的數(shù)據(jù),即,若某個子程序在固定的調(diào)用位置被周期性地調(diào)用, 那么給子程序?qū)⒁恢北欢ㄎ坏綄拇鎯臻g存儲的數(shù)據(jù)。
步驟S103 根據(jù)所述存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù)。具體地,系統(tǒng)在所述存儲空間中保持所述子程序運行后的數(shù)據(jù),即系統(tǒng)能夠在周期性地調(diào)用某個固定調(diào)用位置的子程序的過程中一直保持數(shù)據(jù),而不同調(diào)用位置的子程序之間能夠不共享數(shù)據(jù)。需要說明的是,現(xiàn)有技術中一般以Function data的格式調(diào)用子程序,而本發(fā)明實施例中直接以Function即可調(diào)用該子程序,系統(tǒng)將根據(jù)Function的位置定位到存儲空間存儲的所需的數(shù)據(jù)來完成該子程序的調(diào)用運行。還需要說明的是,步驟S102中,可以但不限于通過下面的例子設置定義數(shù)據(jù)以及存儲該數(shù)據(jù)的存儲空間struct LMemLocationNode{INT8U*pCallPc ;INT8U mem[MEM_L_RANGE];};struct LMemLocationNode IMemLocationNodes[STL_MAX_INS_NUM/2];進一步地,更詳細地說明本發(fā)明實施例中定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間的步驟,如圖2示出的本發(fā)明子程序調(diào)用的第二實施例的方法流程圖,包括步驟S201 獲取子程序的調(diào)用位置信息;步驟S202 根據(jù)所述調(diào)用位置信息查找預設的映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系;具體地,系統(tǒng)預先設置了映射信息,該映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系,該映射信息可以為一映射表,如圖3示出的本發(fā)明映射表的第一實施例的結(jié)構示意圖,以調(diào)用位置信息為子程序被調(diào)用運行的行數(shù)為例,該映射表中包括被調(diào)用運行的子程序所在的行數(shù)映射的存儲空間,如在第15行調(diào)用的子程序A對應存儲空間a、在第17行調(diào)用的子程序A對應存儲空間b、在第18行調(diào)用的子程序 B對應存儲空間c等等。步驟S203 若查找出所述調(diào)用位置信息映射的存儲空間,則定位到所述存儲空間;若沒有查找出所述調(diào)用位置信息映射的存儲空間,則為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間;具體地,若系統(tǒng)查找出所述調(diào)用位置信息映射的存儲空間,則定位到所述存儲空間,如查找出第17行調(diào)用的子程序A對應存儲空間b,即表明之前已經(jīng)調(diào)用運行過第17行的子程序A,那么將調(diào)用運行第17行的子程序定位到存儲空間b存儲的數(shù)據(jù)上;若系統(tǒng)沒有查找出所述調(diào)用位置信息映射的存儲空間,則為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間,如沒有查找出第23行調(diào)用的子程序A對應的存儲空間,即表明之前沒有調(diào)用運行過第23行的子程序A,當前第一次調(diào)用運行第23行的子程序A,那么為第23行的子程序A分配一個存儲空間d,該存儲空間d沒有對應調(diào)用位置信息,即該存儲空間d對應的調(diào)用位置信息為NULL,然后將第23行的子程序A定位到存儲空間d。步驟S204 根據(jù)所述存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù)。需要說明的是,系統(tǒng)可以但不限于通過下面的例子初始化設置映射信息void StlLMemLocationNodesInit(void){int i ;f or (i = O ; i < sizeof (IMemLocationNodes)/sizeof (struct LMemLocationNode);i++){lMemLocationNodes[i], pCallPc = NULL ;memset(IMemLocationNodes[i]. mem, O, MEM_L_RANGE);}}進一步地,步驟S203中,為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間的步驟之后還包括在所述映射信息中記錄所述調(diào)用位置信息與所述分配的存儲空間的映射關系。具體地,如為第30行的子程序A分配一個存儲空間d后,如圖4示出的本發(fā)明映射表的第二實施例的結(jié)構示意圖,在該映射信息中自動記錄了第30行的子程序A對應存儲空間d,那么當再次調(diào)用第30行的子程序A時,系統(tǒng)將定位到存儲空間d存儲的數(shù)據(jù)。需要說明的是,步驟S203中,系統(tǒng)可以但不限于通過下面的例子定位存儲空間INT8U*getCurrLMemLocation(INT8U*currCallPc){int i ;for (i = O ; i < sizeof (IMemLocationNodes) /sizeof (struct LMemLocationNode);i++){if (IMemLocationNodes[i], pCallPc == currCallPc){return IMemLocationNodes[i]. mem ;/*若查找出所述調(diào)用位置信息映射的存儲空間,則返回該存儲空間,即定位到該存儲空間*/}else if (IMemLocationNodes [i]. pCalIPc == NULL){IMemLocationNodes[i]· pCalIPc = currCallPc ;return IMemLocationNodes[i]. mem ;/*若沒有查找出所述調(diào)用位置信息映射的存儲空間,則為當前該調(diào)用位置信息分配存儲空間并返回該存儲空間,即定位到該存儲空間*/}
8
}return NULL ;}實施上述實施例,根據(jù)子程序的調(diào)用位置信息定位對應的存儲數(shù)據(jù)的存儲空間, 根據(jù)所述存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù),能夠?qū)崿F(xiàn)在周期性地調(diào)用某個固定調(diào)用位置的子程序的過程中一直保持數(shù)據(jù),即該數(shù)據(jù)僅對相同的調(diào)用位置的過程可見,而不同調(diào)用位置的子程序之間能夠不共享數(shù)據(jù),實現(xiàn)了不使用指針即可完成共享子程序進行多路控制,有效解決了現(xiàn)有技術中通過共享子程序進行多路控制時傳統(tǒng)實現(xiàn)方案編程復雜、調(diào)試時間長以及維護難度高的問題, 簡化了編程調(diào)試,大大降低了用戶的編程調(diào)試能力要求,縮短了編程調(diào)試周期,并加快了開發(fā)的進度。下面以PLC控制4路電機運作為例進行說明假設電機1與電機2的接口參數(shù)均相同,通過共享PLC過程控制子程序A來控制 (下面簡稱子程序A),電機3與電機4的接口參數(shù)均相同,通過共享PLC過程控制子程序 B (下面簡稱子程序B)來控制。PLC控制系統(tǒng)預先編寫子程序A以及子程序B,預先設置子程序A以及子程序B運行所需的數(shù)據(jù),以及存儲該數(shù)據(jù)的至少4個存儲空間,預先初始化映射信息,如控制電機1的子程序A在整個程序中的第20行被調(diào)用運行,控制電機2的子程序A在整個程序中的第30行被調(diào)用運行。當?shù)谝淮握{(diào)用運行第20行的子程序A時,PLC控制系統(tǒng)根據(jù)所述調(diào)用位置信息 (第20行)查找預設的映射信息,沒有查找出第20行映射的存儲空間,則為第20行分配存儲空間h,并定位到該存儲空間h,PLC控制系統(tǒng)利用存儲空間h存儲的數(shù)據(jù)運行子程序A, 以控制電機1的運作,并在存儲空間h中保持該子程序A運行后的數(shù)據(jù);同理,當?shù)谝淮握{(diào)用運行第30行的子程序A時,PLC控制系統(tǒng)根據(jù)所述調(diào)用位置信息(第30行)查找預設的映射信息,沒有查找出第30行映射的存儲空間,則為第30行分配存儲空間j,并定位到該存儲空間j,PLC控制系統(tǒng)利用存儲空間j存儲的數(shù)據(jù)運行子程序A,以控制電機2的運作, 并在存儲空間j中保持該子程序A運行后的數(shù)據(jù);當再次調(diào)用運行第20行的子程序A,以對電機1進行控制時,PLC控制系統(tǒng)根據(jù)所述調(diào)用位置信息(第20行)查找預設的映射信息,查找到第20行映射的存儲空間h,那么 PLC控制系統(tǒng)將定位到存儲空間h存儲的數(shù)據(jù)(即為第一次運行后保持的數(shù)據(jù)),以運行該子程序A,并在存儲空間h中保持該子程序A運行后的數(shù)據(jù);同理,當再次調(diào)用運行第30行的子程序A,以對電機2進行控制時,PLC控制系統(tǒng)根據(jù)所述調(diào)用位置信息(第30行)查找預設的映射信息,查找到第30行映射的存儲空間j,那么PLC控制系統(tǒng)將定位到存儲空間j 存儲的數(shù)據(jù)(即為第一次運行后保持的數(shù)據(jù)),以運行該子程序A,并在存儲空間j中保持該子程序A運行后的數(shù)據(jù)。對電機3和電機4的控制過程與上述過程一致,這里不再贅述。通過上述方法, 實現(xiàn)了在周期性地調(diào)用某個固定調(diào)用位置的子程序的過程中一直保持數(shù)據(jù),即該數(shù)據(jù)僅對相同的調(diào)用位置的過程可見,而不同調(diào)用位置的子程序,雖然子程序相同,但能夠不共享數(shù)據(jù)。上面詳細說明了本發(fā)明實施例的子程序調(diào)用的方法,下面相應地,說明本發(fā)明實施例的子程序調(diào)用裝置的結(jié)構。如圖5示出的本發(fā)明子程序調(diào)用裝置的第一實施例的結(jié)構示意圖,子程序調(diào)用裝置5包括位置獲取模塊51、定位模塊52和調(diào)用運行模塊53,其中,位置獲取模塊51用于獲取子程序的調(diào)用位置信息;具體地,系統(tǒng)預先編寫至少一個子程序(即可以預先編寫多個不同的子程序),然后在整個程序的運行過程中該子程序被周期性地調(diào)用運行,那么系統(tǒng)在調(diào)用運行該子程序之前,位置獲取模塊51獲取該子程序的調(diào)用位置信息,該調(diào)用位置信息包括但不限于調(diào)用該子程序的指令在整個運行的程序中的行數(shù)信息等。定位模塊52用于定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間;具體地,子程序調(diào)用裝置5預先編寫設置存儲數(shù)據(jù)的存儲空間,該數(shù)據(jù)為該子程序調(diào)用運行所需的數(shù)據(jù),該存儲空間與所述調(diào)用位置信息存在對應關系,通過定位模塊52 每個被調(diào)用的子程序?qū)⒈欢ㄎ坏礁髯詫拇鎯臻g存儲的數(shù)據(jù),即,若某個子程序在固定的調(diào)用位置被周期性地調(diào)用,那么給子程序?qū)⒁恢北欢ㄎ坏綄拇鎯臻g存儲的數(shù)據(jù)。調(diào)用運行模塊53用于根據(jù)定位模塊52定位的存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù)。具體地,調(diào)用運行模塊53在所述存儲空間中保持所述子程序運行后的數(shù)據(jù),即子程序調(diào)用裝置5能夠在周期性地調(diào)用某個固定調(diào)用位置的子程序的過程中一直保持數(shù)據(jù), 而不同調(diào)用位置的子程序之間能夠不共享數(shù)據(jù)。需要說明的是,現(xiàn)有技術中一般以Function data的格式調(diào)用子程序,而本發(fā)明實施例中直接以Function即可調(diào)用該子程序,子程序調(diào)用裝置5將根據(jù)Function的位置定位到存儲空間存儲的所需的數(shù)據(jù)來完成該子程序的調(diào)用運行。如圖6示出的本發(fā)明子程序調(diào)用裝置的第二實施例的結(jié)構示意圖,子程序調(diào)用裝置5包括位置獲取模塊51、定位模塊52和調(diào)用運行模塊53外,還包括存儲空間設置模塊 M,用于設置存儲數(shù)據(jù)的存儲空間,所述數(shù)據(jù)為所述子程序調(diào)用運行所需的數(shù)據(jù)。具體地,存儲空間設置模塊M可以但不限于通過下面的例子設置定義數(shù)據(jù)以及存儲該數(shù)據(jù)的存儲空間struct LMemLocationNode{INT8U*pCallPc ;INT8U mem[MEM_L_RANGE];};struct LMemLocationNode IMemLocationNodes[STL_MAX_INS_NUM/2];如圖7示出的本發(fā)明實施例的定位模塊的結(jié)構示意圖,進一步說明本發(fā)明實施例的子程序調(diào)用裝置5,定位模塊52包括映射信息查找單元521和存儲空間定位單元522,其中映射信息查找單元521用于根據(jù)所述調(diào)用位置信息查找預設的映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系;具體地,子程序調(diào)用裝置5預先設置了映射信息,該映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系,該映射信息可以為一映射表,如圖3示出的本發(fā)明映射表的第一實施例的結(jié)構示意圖,以調(diào)用位置信息為子程序被調(diào)用運行的行數(shù)為例,該映射表中包括被調(diào)用運行的子程序所在的行數(shù)映射的存儲空間,如在第15行調(diào)用的子程序A對應存儲空間a、在第17行調(diào)用的子程序A對應存儲空間b、在第18行調(diào)用的子程序B對應存儲空間c等等。存儲空間定位單元522用于若映射信息查找單元521查找出所述調(diào)用位置信息映射的存儲空間,則定位到所述存儲空間;若映射信息查找單元521沒有查找出所述調(diào)用位置信息映射的存儲空間,則為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間。具體地,若映射信息查找單元521查找出所述調(diào)用位置信息映射的存儲空間,則存儲空間定位單元522定位到所述存儲空間,如查找出第17行調(diào)用的子程序A對應存儲空間b,即表明之前已經(jīng)調(diào)用運行過第17行的子程序A,那么存儲空間定位單元522將調(diào)用運行第17行的子程序定位到存儲空間b存儲的數(shù)據(jù)上;若映射信息查找單元521沒有查找出所述調(diào)用位置信息映射的存儲空間,則存儲空間定位單元522為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間,如沒有查找出第23行調(diào)用的子程序A對應的存儲空間,即表明之前沒有調(diào)用運行過第23行的子程序A,當前第一次調(diào)用運行第23行的子程序AJP 么存儲空間定位單元522為第23行的子程序A分配一個存儲空間d,該存儲空間d沒有對應調(diào)用位置信息,即該存儲空間d對應的調(diào)用位置信息為NULL,然后將第23行的子程序A 定位到存儲空間d。如圖8示出的本發(fā)明子程序調(diào)用裝置的第三實施例的結(jié)構示意圖,子程序調(diào)用裝置5包括位置獲取模塊51、定位模塊52、調(diào)用運行模塊53和存儲空間設置模塊M外,還包括映射信息初始化模塊陽,用于根據(jù)存儲空間設置模塊M設置的存儲數(shù)據(jù)的存儲空間,初始化映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系。具體地,映射信息初始化模塊55可以但不限于通過下面的例子初始化設置映射 η息void StlLMemLocationNodesInit(void){int i ;f or (i = O ; i < sizeof (IMemLocationNodes)/sizeof (struct LMemLocationNode);i++){lMemLocationNodes[i], pCallPc = NULL ;memset(IMemLocationNodes[i]. mem, O, MEM_L_RANGE);}} 如圖9示出的本發(fā)明子程序調(diào)用裝置的第四實施例的結(jié)構示意圖,子程序調(diào)用裝置5包括位置獲取模塊51、定位模塊52、調(diào)用運行模塊53、存儲空間設置模塊M和映射信息初始化模塊陽外,還包括映射信息存儲模塊56以及映射關系記錄模塊57,映射信息存儲模塊56用于存儲子程序調(diào)用裝置5設置的映射信息;映射關系記錄模塊57用于當定位模塊52中的存儲空間定位單元522為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間后,在映射信息存儲模塊56存儲的映射信息中記錄所述調(diào)用位置信息與所述分配的存儲空間的映射關系。具體地,定位模塊52可以但不限于通過下面的例子定位存儲空間INT8U*getCurrLMemLocation(INT8U*currCallPc){int i ;for (i = 0 ; i < sizeof (IMemLocationNodes) /sizeof (struct LMemLocationNode);i++){if (IMemLocationNodes[i], pCallPc == currCallPc){return IMemLocationNodes[i]. mem ;/*若查找出所述調(diào)用位置信息映射的存儲空間,則返回該存儲空間,即定位到該存儲空間*/}else if (IMemLocationNodes [i]. pCalIPc == NULL){IMemLocationNodes[i]. pCallPc = currCallPc ;return IMemLocationNodes[i]. mem ;/*若沒有查找出所述調(diào)用位置信息映射的存儲空間,則為當前該調(diào)用位置信息分配存儲空間并返回該存儲空間,即定位到該存儲空間*/}}return NULL ;}需要特別注意的是以上各個實施例中提到的子程序是指的一類特定的子程序,這類子程序需要在程序的反復運行中反復的調(diào)用數(shù)據(jù),這類數(shù)據(jù)既不是局部變量中存儲的數(shù)據(jù),也不是全局變量中存儲的數(shù)據(jù),而是直接與子程序的調(diào)用位置對應的一類數(shù)據(jù),這類數(shù)據(jù)能夠在不同的調(diào)用周期保持數(shù)據(jù),而不同調(diào)用位置的這類子程序的調(diào)用數(shù)據(jù)不共享,也就是不會相互影響/改變??梢栽赑LC系統(tǒng)實現(xiàn)中定義關鍵字BD (background data)來修飾這類子程序,以區(qū)別于其他普通的子程序調(diào)用,比如調(diào)用一般的全局變量或者局部變量的子程序。例如BD void MotorControl ()有了這種關鍵字BD加以區(qū)分,PLC系統(tǒng)可以方便的查找到需要調(diào)用這種映射關系的數(shù)據(jù)的子程序,因而也方便形成映射表。比如PLC在第一次執(zhí)行用戶程序之前,遍歷整個用戶程序中包含BD定義的子程序調(diào)用,記錄該類子程序的調(diào)用位置,并根據(jù)所需要的數(shù)據(jù)長度為他們分配相應大小的數(shù)據(jù)空間,從而形成預設的映射表。相應地,本發(fā)明實施例還公開了一種PLC控制系統(tǒng),如圖10示出的本發(fā)明實施例的PLC控制系統(tǒng)的結(jié)構示意圖,PLC控制系統(tǒng)10包括上述實施例中的子程序調(diào)用裝置5,該子程序為可編程邏輯控制器PLC過程控制子程序。下面以PLC控制系統(tǒng)10控制4路電機運作為例進行說明假設電機1與電機2的接口參數(shù)均相同,通過共享PLC過程控制子程序A來控制 (下面簡稱子程序A),電機3與電機4的接口參數(shù)均相同,通過共享PLC過程控制子程序 B (下面簡稱子程序B)來控制。PLC控制系統(tǒng)10預先編寫子程序A以及子程序B,預先設置子程序A以及子程序B運行所需的數(shù)據(jù),以及存儲該數(shù)據(jù)的至少4個存儲空間,預先初始化映射信息,如控制電機1的子程序A在整個程序中的第20行被調(diào)用運行,控制電機2的子程序A在整個程序中的第30行被調(diào)用運行。當?shù)谝淮握{(diào)用運行第20行的子程序A時,PLC控制系統(tǒng)10根據(jù)所述調(diào)用位置信息(第20行)查找預設的映射信息,沒有查找出第20行映射的存儲空間,則為第20行分配存儲空間h,并定位到該存儲空間h,PLC控制系統(tǒng)10利用存儲空間h存儲的數(shù)據(jù)運行子程序A,以控制電機1的運作,并在存儲空間h中保持該子程序A運行后的數(shù)據(jù);同理,當?shù)谝淮握{(diào)用運行第30行的子程序A時,PLC控制系統(tǒng)10根據(jù)所述調(diào)用位置信息(第30行) 查找預設的映射信息,沒有查找出第30行映射的存儲空間,則為第30行分配存儲空間j,并定位到該存儲空間j,PLC控制系統(tǒng)10利用存儲空間j存儲的數(shù)據(jù)運行子程序A,以控制電機2的運作,并在存儲空間j中保持該子程序A運行后的數(shù)據(jù);當再次調(diào)用運行第20行的子程序A,以對電機1進行控制時,PLC控制系統(tǒng)10根據(jù)所述調(diào)用位置信息(第20行)查找預設的映射信息,查找到第20行映射的存儲空間h,那么PLC控制系統(tǒng)10將定位到存儲空間h存儲的數(shù)據(jù)(即為第一次運行后保持的數(shù)據(jù)),以運行該子程序A,并在存儲空間h中保持該子程序A運行后的數(shù)據(jù);同理,當再次調(diào)用運行第30行的子程序A,以對電機2進行控制時,PLC控制系統(tǒng)10根據(jù)所述調(diào)用位置信息(第 30行)查找預設的映射信息,查找到第30行映射的存儲空間j,那么PLC控制系統(tǒng)10將定位到存儲空間j存儲的數(shù)據(jù)(即為第一次運行后保持的數(shù)據(jù)),以運行該子程序A,并在存儲空間j中保持該子程序A運行后的數(shù)據(jù)。對電機3和電機4的控制過程與上述過程一致,這里不再贅述。通過上述方法, 實現(xiàn)了在周期性地調(diào)用某個固定調(diào)用位置的子程序的過程中一直保持數(shù)據(jù),即該數(shù)據(jù)僅對相同的調(diào)用位置的過程可見,而不同調(diào)用位置的子程序,雖然子程序相同,但能夠不共享數(shù)據(jù)。綜上所述,實施本發(fā)明實施例,根據(jù)子程序的調(diào)用位置信息定位對應的存儲數(shù)據(jù)的存儲空間,根據(jù)所述存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù),能夠?qū)崿F(xiàn)在周期性地調(diào)用某個固定調(diào)用位置的子程序的過程中一直保持數(shù)據(jù),即該數(shù)據(jù)僅對相同的調(diào)用位置的過程可見,而不同調(diào)用位置的子程序之間能夠不共享數(shù)據(jù),實現(xiàn)了不使用指針和全局變量即可完成共享子程序進行多路控制,有效解決了現(xiàn)有技術中通過共享子程序進行多路控制時傳統(tǒng)實現(xiàn)方案編程復雜、調(diào)試時間長以及維護難度高的問題,簡化了編程調(diào)試,大大降低了用戶的編程調(diào)試能力要求,縮短了編程調(diào)試周期,并加快了開發(fā)的進度。本領域普通技術人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機存儲記憶體(Random Access Memory, RAM)等。 以上所揭露的僅為本發(fā)明實施例中的較佳實施例而已,當然不能以此來限定本發(fā)明之權利范圍,因此依本發(fā)明權利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
權利要求
1.一種子程序調(diào)用的方法,其特征在于,包括獲取子程序的調(diào)用位置信息;定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間;根據(jù)所述存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù)。
2.如權利要求1所述的方法,其特征在于,所述定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間的步驟之前還包括設置存儲數(shù)據(jù)的存儲空間,所述數(shù)據(jù)為所述子程序調(diào)用運行所需的數(shù)據(jù)。
3.如權利要求2所述的方法,其特征在于,所述定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間的步驟包括根據(jù)所述調(diào)用位置信息查找預設的映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系;若查找出所述調(diào)用位置信息映射的存儲空間,則定位到所述存儲空間;若沒有查找出所述調(diào)用位置信息映射的存儲空間,則為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間。
4.如權利要求3所述的方法,其特征在于,為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間的步驟之后還包括在所述映射信息中記錄所述調(diào)用位置信息與所述分配的存儲空間的映射關系。
5.如權利要求3所述的方法,其特征在于,根據(jù)所述調(diào)用位置信息查找預設的映射信息的步驟之前還包括根據(jù)設置的存儲數(shù)據(jù)的存儲空間,初始化映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系。
6.如權利要求1-5任一項所述的方法,其特征在于,所述子程序為可編程邏輯控制器 PLC過程控制子程序。
7.一種子程序調(diào)用裝置,其特征在于,包括位置獲取模塊,用于獲取子程序的調(diào)用位置信息;定位模塊,用于定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間;調(diào)用運行模塊,用于根據(jù)所述定位模塊定位的存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù)。
8.如權利要求7所述的裝置,其特征在于,還包括存儲空間設置模塊,用于設置存儲數(shù)據(jù)的存儲空間,所述數(shù)據(jù)為所述子程序調(diào)用運行所需的數(shù)據(jù)。
9.如權利要求8所述的裝置,其特征在于,所述定位模塊包括映射信息查找單元,用于根據(jù)所述調(diào)用位置信息查找預設的映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系;存儲空間定位單元,用于若所述映射信息查找單元查找出所述調(diào)用位置信息映射的存儲空間,則定位到所述存儲空間;若所述映射信息查找單元沒有查找出所述調(diào)用位置信息映射的存儲空間,則為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間。
10.如權利要求9所述的裝置,其特征在于,還包括映射關系記錄模塊,用于當所述存儲空間定位單元為所述調(diào)用位置信息分配存儲空間并定位到所述存儲空間后,在所述映射信息中記錄所述調(diào)用位置信息與所述分配的存儲空間的映射關系。
11.如權利要求9所述的裝置,其特征在于,還包括映射信息初始化模塊,用于根據(jù)所述存儲空間設置模塊設置的存儲數(shù)據(jù)的存儲空間, 初始化映射信息,所述映射信息包括調(diào)用運行所述子程序的調(diào)用位置信息與所述存儲空間的映射關系。
12.—種PLC控制系統(tǒng),其特征在于,包括如權利要求7-11任一項所述的子程序調(diào)用裝置,所述子程序為可編程邏輯控制器PLC過程控制子程序。
全文摘要
本發(fā)明實施例公開了子程序調(diào)用的方法,包括獲取子程序的調(diào)用位置信息;定位預設的與所述調(diào)用位置信息對應的存儲數(shù)據(jù)的存儲空間;根據(jù)所述存儲空間存儲的數(shù)據(jù)調(diào)用運行所述子程序,并在所述存儲空間中保持所述子程序運行后的數(shù)據(jù)。相應地,本發(fā)明實施例還公開了子程序調(diào)用的裝置以及PLC控制系統(tǒng)。實施本發(fā)明實施例,可有效解決現(xiàn)有技術中通過共享子程序進行多路控制時傳統(tǒng)實現(xiàn)方案編程復雜、調(diào)試時間長以及維護難度高的問題,本發(fā)明實施例不使用指針和全局變量即可實現(xiàn)共享子程序進行多路控制,簡化了編程調(diào)試,大大降低了用戶的編程調(diào)試能力要求,縮短了編程調(diào)試周期,并加快了開發(fā)的進度。
文檔編號G05B19/05GK102339031SQ20101023870
公開日2012年2月1日 申請日期2010年7月27日 優(yōu)先權日2010年7月27日
發(fā)明者張小軍 申請人:深圳市合信自動化技術有限公司