專利名稱:單元和可編程控制器以及用戶程序的處理方法
技術領域:
本發明涉及一種單元和可編程控制器以及用戶程序的處理方法。
然后,作為有關PLC的一方案,準備多個根據每個功能制作的單元,通過電連接、機械連接而構成。作為構成有關類型的單元,是這樣的各種單元向構成PLC的各單元中供給電源的電源單元;根據由IN更新而輸入的信號執行保存在程序存儲器中的用戶程序的CPU單元;與CPU單元可以進行總線通信的、與輸入儀器或者輸出儀器連接的I/O單元等。
又,在最近,在I/O單元中也搭載CPU(MPU)、程序存儲器,同時在該程序存儲器中保存所希望的用戶程序,在該I/O單元中也運算執行上述用戶程序,進行指定的控制。
另一方面,考察PLC(包含各單元)的流通路徑,作為一例,首先存在制造PLC的廠商。然后,制造自動包裝機器或者注塑成型機以及其它產業機械的公司,從有關廠商購入PLC,根據該產業機械的使用內容和控制動作在編程開發器上編制必要的用戶程序,同時將該用戶程序下載到PLC中,制造出利用有關PLC控制動作的產業機械。即,制造該產業機械的公司,將成為PLC制造廠商的用戶(中間用戶)。然后,有關產業機械被設置在最終用戶的工廠中,組成生產設備系統,制造出各種產品。
然而,上述用戶程序,包括有各中間用戶的技術秘訣,是該用戶的資產。因此,要求盡可能防止向競爭對手等泄露該用戶程序的內容。但是,作為記敘序列程序的語言,一般采用為通用語言的梯形圖語言編制用戶程序并將其保存在程序存儲器中時,可以以開發裝置將有關用戶程序讀出、解析。因此,對于1個最終用戶,常常會和多個中間用戶交易,這時,各中間用戶會進出最終用戶的工廠內。這樣,就有可能出現在將用PLC控制的產業機械設置之后,生產、交付該產業機械的公司的競爭對手進入到相關的最終用戶的工廠內,將控制該產業機械的PLC的用戶程序讀出,獲得該用戶程序。
為此,為了防止向第三者泄漏,雖然有通過設置密碼等禁止讀出用戶程序的保護方法,但如果出現密碼泄漏,或者被解密的情況,第三者也能獲取用戶程序。然而,當設置了用密碼禁止讀出用戶程序的保護時,分為用戶程序全部禁止讀出的方法、和用戶程序部分禁止讀出(部分保護)的方法。上述中間用戶可以提供這樣的單元,即只將用戶程序中的技術秘訣部分實施部分保護后向最終用戶提供,可以防止技術秘訣的泄漏,同時技術秘訣以外的可讀出部分可以由最終用戶變更。但是,該方法所存在的問題是,部分保護的對象由于是1個用戶程序中的部分程序,容易受到保護以外的程序編輯的影響。
另一方面,如果將包含技術秘訣部分的控制(動作控制等)功能部分采用專用微處理板(microcomputer board)實現,雖然可以防止向第三者泄漏,但必須準備微處理板那樣的專用品,存在增加了麻煩等問題。又,由于微處理板不能對應梯形圖語言和序列編程語言,不能使用在PLC中利用的梯形圖語言的用戶程序開發環境(包含開發裝置),需要微處理板上的程序開發的專用開發環境,存在著成本提高的問題。
又,用戶方面如果沒有專用的開發環境,或者沒有能使用專用的開發環境編制微處理板上的程序的開發人員時,就必須要得到其它廠商(PLC的制造廠商等)的幫助。特別是,如果用戶委托PLC的制造廠商編制相當于用戶程序的程序時,PLC的制造廠商就可以在單元的系統程序中組合入該用戶程序,作為特定用戶的專用單元提供。采用這種方式,雖然可以防止泄露,但這不僅需要向有關廠商公開技術秘訣,而且即使公開該技術秘訣,這些廠商要充分把握用戶所持有的技術秘訣的知識是很困難的,因此有可能不能實現滿足用戶的控制、功能。而且,用戶不能簡單地修改程序,存在著各種這樣的問題。
依據本發明的單元,是PLC用單元,包括保存用戶程序的第1存儲裝置、對保存在上述第1存儲裝置中的上述用戶程序的至少一部分進行庫化(ライブラリ化)并保存在第2存儲裝置中的庫(ライブラリ)生成裝置、執行保存在上述第2存儲裝置中的庫化后的程序的程序執行裝置,上述第2存儲裝置安裝在上述單元內,并且不能被上載上述用戶程序的開發器所訪問。
在此,“單元”是指構成PLC的單元,是具有下載用戶作成的用戶程序并保存在單元內部、執行該用戶程序的功能的單元。具體講,也包含CPU單元和在實施方案中說明的I/O單元。其它也包括內藏用戶程序執行功能、執行處理特殊功能的“特殊功能單元”。作為該特殊功能單元,例如有遙控IO用主單元。
“第1存儲裝置”與實施方案中的RAM14對應,“第2存儲裝置”與閃存15對應。在本實施方案中,第1存儲裝置和第2存儲裝置雖然采用象RAM和閃存那樣的在物理上不同存儲器種類的存儲器實現,也可以采用2個相同種類的存儲器,分別作為第1、第2存儲裝置實現。進一步,也可以在單個存儲器中分割成區域,以開發器可訪問的區域作為第1存儲裝置,開發器不能訪問的區域作為第2存儲區域。更進一步,也可以在2個存儲器的兩者上都設置開發器不能訪問的區域,這2個區域合起來作為第2存儲裝置處理。
“庫化(ライブラリ化)”是指轉換成由MPU等程序執行裝置可以調出執行的程序形式并保存到指定存儲器中的流程。作為庫化的一例,要執行的處理整體的一部分作為給定處理的集合的“子程序形式的程序”,從整體處理用的程序中調出執行該子程序。此外,作為執行庫化后的程序的方式,附加識別符號并在給定存儲器(第2存儲裝置在實施方案中為閃存)中預先保存庫化后的程序,將識別符號和專用命令插入到主程序中。然后,通過掃描執行該主程序,也執行該專用命令,從給定存儲器中調出執行由識別符號識別的庫化程序。(這是實施方案中的部件庫的例子)。
又,“庫生成裝置”,在實施方案中與實施圖4的流程圖的功能部分對應,“程序執行裝置”在實施方案中與實施圖8~
圖10的流程圖的功能部分對應。
“開發器不能訪問”是指,用開發器不能讀出存儲裝置中的存儲內容的構成。“開發器不能訪問第2存儲裝置”是指,單元在接收到來自開發器的讀出用戶程序的要求或者讀出其它數據的要求時,該單元的處理部(在實施方案中為MPU)只進行返送第1存儲裝置中的相應數據的處理。實際上,由PLC制造廠商,對開發器訪問該單元的規則預先如下確定。即,對于來自開發器的讀出請求命令可以響應的存儲器區域作為第1存儲裝置,而第2存儲裝置不能由開發器讀出。換言之,通過預先準備了開發器針對第1存儲裝置的讀寫請求命令,而針對第2存儲裝置的讀出請求命令或者調出命令沒有預先準備實現。這樣通過在命令上的設置可以實現。又,也可以用其它方法實現,例如,即使開發器訪問單元的第2存儲裝置,也可以在單元的內部系統處理中,禁止從第2存儲裝置讀出數據。即,通過單元側的設定,禁止讀出存儲器的一部分(第2存儲裝置)。在任何一種方式中,不要在第1存儲裝置中殘留不想讓讀出的程序,而只保存在不能訪問的第2存儲裝置中。簡言之,只要在單元的存儲器中設置禁止讀出區域,只在該禁止讀出的區域中保存不想讓讀出的程序即可。此外,在實施方案中不可訪問的區域是閃存15的庫信息區域15c和庫數據區域15b。又,不想讓讀出的程序,在實施方案中相當于庫化后的程序。
依據本發明,由于在開發器不能訪問的第2存儲裝置中將用戶程序的至少一部分進行庫化后保存,該用戶程序成為開發器等不能訪問的庫化后的程序。因此,可以確切保護技術秘訣等需要保密的庫化程序。此外,在庫化的作業中,庫化對象的程序由于是保存在第1存儲裝置中的用戶程序的給定部分,用戶等可以直接利用至今用戶程序的開發環境(例如采用梯形圖語言等作成的開發器等)制作程序。即,不需要專門針對庫化的特別的開發環境,就可以確切地保護庫化后的程序。
此外,將保存在第1存儲裝置中的用戶程序庫化后保存在第2存儲裝置中,在本發明中所謂的“一部分程序”是指庫化時保存在第1存儲裝置中的庫化之前的用戶程序的一部分。此外,對于要庫化的部分和不要庫化的部分采用某種信息進行區分。又,“用戶程序的全部”是指庫化時保存在第1存儲裝置中的用戶程序的全部。因此,在實施方案中對于整體庫是顯然的事,即使是部件庫化時,只保存在第1存儲裝置中成為部件庫化對象的1個或者多個子程序,將其庫化后保存在第2存儲裝置中時,與本發明中所謂的“將保存在第1存儲裝置中的用戶程序的全部進行庫化”相對應。
然后,上述庫生成裝置可以將上述用戶程序編譯成執行目標碼后保存在上述第2存儲裝置中。“編譯成執行目標碼”是指通過程序執行處理編譯成可執行的處理語言,具體講將程序編譯成機械語言。這樣,即使從第2存儲裝置萬一惡意讀出程序信息,也是通常不能理解的語言,不能按通常方式進行反編譯,不容易明白,不會泄漏程序中的技術秘訣等,可以讓用戶程序作成者安心。當然,也可以保存編譯成執行目標碼之前的用戶程序。
又,上述庫化程序是子程序,上述程序執行裝置,在保存在上述第1存儲裝置中的主程序中包含上述子程序庫調出的專用命令時,執行指定子程序庫的子程序,同時包括返回到上述主程序的功能。該構成表示庫化處理后的狀態下,由單元執行庫化程序時的構成。在此所謂的“返回功能”是指,在指定的子程序執行結束后,返回到主程序中,接著前面(即調用該子程序的專用命令的下一命令)執行。通過這樣子程序化,作為程序部件,可以反復利用,或者在作成其它程序時利用,可以簡化程序開發,并且提高生產效率。
又,上述庫化程序是上述用戶程序的整體,上述程序執行裝置,成為可以執行保存在上述第2存儲裝置中的庫化程序的狀態。這相當于在實施方案中說明的整體庫的利用。在此所謂的成為可執行狀態是指,在實施方案中,如果是庫化后保存在存儲裝置中的庫化程序被編譯后的程序,通過設置讓執行該編譯對象的標志位等,或者如果實際保存在第2存儲裝置中的程序是編譯前的程序,將其編譯(編譯后也可以在第1存儲裝置中展開)。又,可以對所有的用戶程序進行保護。
另一方面,上述庫生成裝置也可以具有將要庫化的程序與用于選定的庫名關聯并保存在第2存儲裝置中的功能,包括讀出保存在上述第2存儲裝置中的上述庫名并保存在上述第1存儲裝置中的庫名讀出裝置。
如果將庫名等保存在第2存儲裝置中,根據該庫名,可以選定執行庫化后的程序。但是,由于保存在第2存儲裝置中,不能從外部參照。其結果,如果不對庫化后的程序另外管理,以后將不能確認。為此,通過設置庫名讀出裝置,在從外部可訪問的第1存儲裝置中寫入庫名,利用開發器等可以讀出庫名,用戶等可以知道什么樣的庫(程序)保存在第2存儲裝置中。
更進一步,也可以讓上述庫生成裝置具有在第2存儲裝置中保存庫化后的程序、同時與選定該庫的庫識別信息關聯進行保存的功能,包括將保存在上述第2存儲裝置中的信息備份到外部存儲裝置中的備份裝置,上述備份裝置,判斷所輸入的庫識別信息是否與預先保存在上述第2存儲裝置中的正規識別信息是否一致,在一致時將上述信息保存到上述外部存儲裝置中。
依據有關構成,只有知道庫識別信息的被授權的人才可以將庫化后的保存在第2存儲裝置中的信息備份到外部存儲裝置中,即,因為庫識別信息保存在第2存儲裝置中,即使利用開發器訪問單元也不能知道,被授權之外的人不能進行備份。
在此,庫識別信息在實施方案中與庫ID對應。又,外部存儲裝置在實施方案中與存儲卡對應。外部存儲裝置可以安裝在其它單元上,也可以安裝在本身的單元中。此外,作為外部存儲裝置優選采用可以攜帶、并可以從單元中裝卸的存儲卡。
又,本發明并不限定于單個單元,在PLC中也可以包括上述各種機構。作為一例,可以通過包括保存用戶程序的第1存儲裝置、對保存在上述第1存儲裝置中的上述用戶程序的至少一部分進行庫化并保存在第2存儲裝置中的庫生成裝置、執行保存在上述第2存儲裝置中的庫化后的程序的程序執行裝置、上述第2存儲裝置,上述第2存儲裝置不能被上載上述用戶程序的開發器所訪問的構成來實現。當然,在該PLC的發明中,可以附加和上述各單元的發明相同的附帶功能。
又,有關本發明的用戶程序的處理方法,是在包括保存用戶程序的第1存儲裝置、不能被上載上述用戶程序的開發器所訪問的第2存儲裝置的PLC用單元中的用戶程序的處理方法,將保存在上述第1存儲裝置中的上述用戶程序的至少一部分進行庫化并保存在上述第2存儲裝置中,保護上述庫化后的部分。又,上述用戶程序執行時,適當執行保存在上述第2存儲裝置中的庫化后的程序。
在此所謂的“保護”是指,利用上載用戶程序的開發器不能讀出的事情,所謂施加保護的意思。又,有關本發明的可編程控制器用單元,是包括接收輸入信號的輸入電路、根據該輸入信號執行用戶程序的程序執行裝置、輸出執行結果的輸出電路的可編程控制器用單元,包括預先保存部件庫化后的程序的第2存儲裝置、對插入有調出執行所述部件庫化后的程序用的專用命令的用戶程序利用開發器作成后進行保存的第1存儲裝置,上述程序執行裝置,掃描執行保存在上述第1存儲裝置中的用戶程序,通過執行上述用戶程序中的專用命令從上述第2存儲裝置中調出執行上述部件庫化后的程序,當調出執行結束后,返回執行上述用戶程序,通過讓上述開發器不能訪問上述第2存儲裝置,使得不能讀出部件庫化后的程序。在此所謂的“輸入電路”、“輸出電路”也包括連接輸入儀器或者輸出儀器的電路,或者與由單元之間連接總線連接的其它單元之間進行數據通信的接口部。
又,有關本發明的可編程控制器用單元,是包括接收輸入信號的輸入電路、根據該輸入信號執行用戶程序的程序執行裝置、輸出執行結果的輸出電路的可編程控制器用單元,包括預先保存整體庫化后的程序的第2存儲裝置、通過開發器的操作、保存用于調出執行上述整體庫化后的程序的設定標志位的第1存儲裝置,上述程序執行裝置,根據上述第1存儲裝置的設定標志位從第2存儲裝置中調出執行整體庫化后的程序,通過讓上述開發器不能訪問上述第2存儲裝置,使得不能讀出整體庫化后的程序。
又,有關本發明的可編程控制器用單元,其特征是包括保存在開發器上作成的用戶程序(在該用戶程序中插入有調出執行庫化后的程序的專用命令)的第1存儲裝置;保存預先庫化后的程序的第2存儲裝置;掃描執行上述用戶程序、通過執行上述用戶程序中的專用命令、從上述第2存儲裝置中調用執行上述庫化后的程序的程序執行裝置,上述第2存儲裝置中的庫化程序預先保存,并且通過不能利用作成用戶程序時所使用的開發器讀出庫化程序,可以保護庫化程序的內容。
又,有關本發明的可編程控制器用單元,其特征是包括保存在開發器上調出執行庫化后的程序的設定標志位的第1存儲裝置;保存預先庫化后的程序的第2存儲裝置;讀出上述第1存儲裝置的設定標志位、當是表示執行的標志位設定時、從上述第2存儲裝置中調出執行上述庫化后的程序的程序執行裝置,上述第2存儲裝置中的庫化程序預先保存,并且通過不能利用對設定標志位進行設定的開發器讀出庫化程序,可以保護庫化程序的內容。
進一步,在本實施方案中,如后面所述,在CPU單元2中安裝MPU和用戶程序存儲器,在I/O單元3中也安裝作為微處理器的處理部(MPU)和用戶程序存儲器,通過在有關用戶程序存儲器中保存在開發器上編制的用戶程序,可以在CPU單元和I/O單元中執行所要求的序列控制。并且,在CPU單元2和I/O單元3中也包括與開發器5通訊的端口P,在開發器5上編制的給定的用戶程序通過各單元的端口P可以下載到用戶程序存儲器中。
此外,在此所說的I/O單元3,是指具有將用戶在開發器5上編制的用戶程序(編制之后也可以進行變更或者編輯)下載,保存在內部,并在內部執行該用戶程序的功能,同時可以進行與連接在該單元上的外部儀器之間的輸入輸出處理。例如有計數器單元、模擬處理單元、位置控制單元等。“計數器單元”是指,對從編碼器等輸入的脈沖輸入進行計數處理,根據其計數結果執行用戶程序,將基于其執行結果的輸出信號輸出給伺服驅動部(這可以在單元之外,也可以在單元內)等,為控制伺服電機而利用的單元。作為輸出給伺服電機的信號的種類,可以是速度控制電機用模擬輸出信號,也可以是控制脈沖電機用脈沖信號。此外,輸入信號也可以不是脈沖信號,而是從變位傳感器等輸入的模擬信號。又,“模擬處理單元”是指從壓力傳感器、變位傳感器等輸入模擬信號,將該信號進行A/D變換后,根據該變換信號執行用戶程序,其執行結果以模擬信號的形式輸出的單元。這樣的計數器單元、模擬處理單元、位置控制單元等執行某種特定功能的單元也稱為“高性能單元”或者“特殊功能單元”。在該實施方案中,也可以適用于被稱為高性能單元或者特殊功能單元的單元中。
I/O單元3的內部構造,如圖2所示。即,I/O單元3包括接收從傳感器等其它輸入儀器輸入的信號的外部輸入電路11、向輸出儀器輸出給定控制信號的外部輸出電路12。I/O單元,通過從與這些外部輸入電路11連接的輸入儀器(圖中未示)輸入輸入信號,同時向與外部輸出電路12連接的輸出儀器(圖中未示)發送輸出信號,進行I/O信息的收發。進一步包括作為存儲裝置的ROM13、RAM14以及閃存15、執行保存在該存儲裝置中的程序而控制I/O單元3本身的動作的MPU16,這些通過設置在I/O單元3內的內部總線相互連接。
即,在ROM13中,保存系統程序。系統程序是指,有關在該I/O單元內執行的系統控制處理的程序信息,具體講,包括后述的用戶程序內的一條一條命令本身的處理內容、和后述的為執行庫化所必要的控制處理內容。又,在RAM14中,包括執行時保存用戶程序等的PRG存儲區域14a、I/O單元的系統條件設定用的系統存儲區域14b、從外部輸入電路11取出的輸入信號和作為程序執行結果向外部輸出電路12輸出的輸出信號、即、保存I/O信息的參數存儲區域(工作區域)14c。進一步,在閃存15中包括保存庫化數據的庫數據存儲區域15b、保存為讀出所保存的庫化數據的信息的庫信息存儲區域15c。
然后,MPU16與連接在I/O單元3上的輸入儀器通信(輸入處理),根據輸入信號適當執行在RAM14上展開的用戶程序。該用戶程序是保存在RAM14的PRG存儲區域14a的程序和從閃存15的庫信息15c中傳入到RAM14的PRG存儲區域14a中的程序中的任一個(后面將詳細說明)。然后,MPU16參照保存在ROM13中的系統程序處理該用戶程序執行的各命令內容(用戶程序執行處理)。然后,根據執行結果向I/O單元3連接的外部輸出儀器發送輸出信號(輸出處理)。I/O單元3,反復執行該輸入處理、用戶程序執行處理、輸出處理的3個處理。
此外,也可以輸出處理之后設置周邊處理期間,以這4個處理作為循環處理。作為周邊處理,包括根據開發器的要求進行的處理,經由PLC的通信單元接收到的要求進行的處理,遙控IO通信等的處理。又,也可以不將輸入處理和輸出處理分開,作為一系列處理。進一步,也可以在循環處理的前面設置前處理,反復執行前處理、用戶程序執行處理、輸入輸出處理、周邊處理的4個處理。此外,前處理是指例如單元本身的異常檢查處理等。又,在前處理中也可以包含狀態辨別處理。該狀態辨別處理是指例如檢查后述的庫執行標志位的有無或者庫讀出處理標志位的有無,檢查模式設定(編程模式/運行模式)的處理。該前處理的狀態辨別處理根據標志位的狀態和模式狀態對處理進行分支。如果上述標志位沒有設立,并且模式為運行模式,進入到用戶程序執行處理(這之后進入到輸入輸出處理),如果各標志位處于設立狀態(即有標志位)并且是編程模式,不進行用戶程序執行處理,而分支到與標志位對應的處理(標志位執行處理)或者與編程模式對應的處理。在該狀態辨別處理中對處理流程分支,但無論怎樣,都在后面的周邊處理解除分支,之后仍然返回到前處理。結果是,反復執行前面所述的4個處理。此外,后述的特殊中繼服務處理,進行循環處理中的狀態辨別處理以及標志位執行處理。
此外,作為MPU16的處理,也可以與該循環處理不同步,通過單元間連接總線與CPU單元2等進行信息的收發。這是,作為該信息的發送或者接收,來自CPU單元的I/O信息讀出要求由本單元接收后,返回對應的I/O信息的處理(收發處理)。
在本發明中,對保存在RAM14中的用戶程序(采用梯形圖語言等通用語言編制)的一部分或者全部進行庫化,保存在從開發器不能訪問的存儲區域在本實施方案中為閃存15中。在此所謂的“從開發器不能訪問的存儲區域”是指,對于I/O單元3的閃存15,由于開發器不帶有讀出命令,因此成為開發器不能訪問的存儲區域。作為其它方式,有即使開發器有讀出要求,在I/O單元3側也不處理該要求的方式。無論如何,只要是禁止讀出I/O單元3的閃存15的構成即可。
這樣,開發器可以以讀出命令讀出保存在RAM14中的數據等,而不能讀出保存在閃存15中的數據。為此,通過對包含技術秘訣的程序部分進行庫化后只保存在閃存15中(進一步,將包含技術秘訣的程序信息從RAM14中刪除,或者不讓其殘留),可以確切地保護包含技術秘訣的程序信息。進一步,由于在保存在閃存15中時,不是以用戶編制的梯形圖語言,而是以執行目標化的狀態進行保存,所以萬一有人惡意將閃存解析等將其內部的內容讀出,也是普通人不能理解的語言,或者不能進行通常的反編譯,所以不會泄漏包含技術秘訣的程序信息,具有更高的安全性。當然,象上述那樣,由于利用開發器5不能讀出閃存15,所以即使保存可復原的狀態的用戶程序,也就能足夠進行保護。所謂可復原,包含復原到梯形圖狀態,或者復原到助記憶碼的狀態。
此外,在此所指的用戶,當然是指在背景技術欄中說明的中間用戶,有時也指可以包含廠商(PLC的制造廠商)、最終用戶的總稱。即,包含可以開發用戶程序,或者將該用戶程序下載到單元中,或者進行庫化等正當行為的人員。對此,在以后的說明中也相同。
為了實現上述功能,進一步包括,對保存在RAM14中的用戶程序進行庫化后保存在閃存15中的庫生成功能(通過MPU16實現)。庫生成功能,在圖3、圖4中詳細說明。在庫化中以“部件庫”和“整體庫”兩種情況進行說明。
首先對部件庫進行說明。該部件庫有多個種類。作為一例,對“主程序構成的用戶程序的一部分”進行部件庫化。這時,成為部件庫化的對象的程序是子程序。即,在主程序中包含子程序,將該子程序作為部件庫處理。庫化后的子程序的執行,由主程序執行專用的命令將部件庫化后的子程序調出進行執行。又,作為另一例,“只由子程序構成的用戶程序的全部”進行部件庫化。這時,成為部件庫化對象的一個或者多個子程序,分別成為作為部件庫的子程序。然后,庫化后的子程序的執行,通過后面另外編制的主程序執行專用的命令,將該子程序調出進行執行。如這2個例所述,將作為從主程序調出執行的對象程序的進行庫化后的程序稱為部件庫。此外,在該部件庫中,在本實施方案中,保存有從主程序將所希望的部件庫讀出用的專用命令(后面將詳細敘述)。將該部件庫保存在存儲器中,在本實施方案中,在圖4的ST4~ST7中說明。又,實際的程序執行在圖10的ST32、ST36、ST37中進行說明。
此外,該部件庫的優點在于,只要將專用命令插入到用戶程序的必要處就可以簡單并且有效組成程序,使得用戶將多用途處理程序部分作為部件庫進行子程序化,在另外編制的用戶程序(主程序)中調出該部件庫進行執行。即,只要一次做成部件庫,而在后面的主程序編制時可以作為1種應用命令活用。又,這樣部件庫化后的子程序,由于與主程序分離存在,不會受到主程序的編程、編輯的影響。又,單元提供者只是將成為應用程序的核心的處理部分進行部件庫化,如果將該實施方案的單元提供給用戶,用戶可以活用該部件庫的程序,自由編制主程序,可以以適合系統的形式簡單定制程序。
以下對整體庫化進行說明。這是想要對普通的用戶程序(即,假定不是只由子程序構成的那樣的特別用戶程序)的整體進行庫化時,該用戶程序的整體成為整體庫的對象,作為一個庫處理。然后對給用戶程序整體進行整體庫化。在使用該整體庫時,作為一個整體的主程序執行。此外,該整體庫的存儲器保存,在實施方案的圖4的ST4~ST7中說明。又,整體庫的執行在實施方案的圖10的ST34、ST35、ST36、ST37中進行說明。這樣,作為一個主程序相同的處理,(與上述的部件庫相比),所以稱為整體庫。該整體庫可以適用于下面的情況,即,在用戶的控制程序所有都要保護時的情況,或者以預安裝所有特定用途的應用程序的形式,由單元提供者以“特殊用途的××控制單元”的形式向用戶提供時的情況。
以下說明庫生成功能。首先,有關庫生成功能的RAM14和閃存15之間的關系如圖3所示。RAM14的PRG存儲區域14a是在開發器上編制的用戶程序變換成中間編碼(中間語言)進行保存的區域。RAM14的參數存儲器14c的參數存儲區域中,由開發器設定以中間語言保存的程序是否是被庫化的程序的標志位。又,在系統存儲區域14b中,由開發器設定庫的種類(整體庫/部件庫)等進行庫化時的各種系統設定信息(在后述的ST3中說明)。這些設定,由I/O單元3在編程模式下進行。
然后,先將I/O單元切換到RUN模式。切換成RUN模式是為了對在RAM14的PRG存儲區域14a中保存的用戶程序進行編譯。通過執行用戶程序,所產生的執行目標碼數據(編譯成機器語言的用戶程序)被保存到RAM14的參數存儲器14c的執行目標碼區域中(此外,如后面所述,在此保存的執行目標碼,如果對象的用戶程序的種類是部件庫,在圖4的ST5中利用。進一步,與用戶程序編譯時同時產生的子程序表等程序執行所必要的信息也保存在系統存取區域14b中)。
又,當切換到RUN模式時,通過MPU16的處理,將RAM14的PRG存儲區域14a中的用戶程序保存到閃存的PRG存儲備份區域15a中。這是為了用于在必要時再現RAM14的PRG存儲器的用戶程序。例如,作為一例,對于應該進行庫化的程序,對編制中的程序進行編輯并下載到單元中,在切換到RUN模式反復執行時,即使由于切斷了單元的電源使得編輯中的用戶程序從RAM14中刪除或者處于不定狀態,用戶也可以根據需要從所作的備份中再現上次下載的編輯中的程序,進行再現利用。
此外,庫化處理結束后,刪除該閃存的備份區域的內容,在RAM14中再現展開,不能通過開發器讀出。此外,也可以不刪除內容,而如實施方案中說明的那樣,更新為非秘密的其它程序(只有END命令的程序等)。
再補充說明一下,該RAM14中的內容,當切斷單元的電源時全部被刪除。因此,即使將用戶程序保存在RAM14中,在庫化結束后通過切斷單元的電源,用戶程序(包含需要保密的程序部分的程序)被刪除,之后即使通過開發器對RAM14進行訪問,也不用擔心會被讀取需要保密的程序。又,而在閃存15中,即使切斷單元的電源,所保存的內容也不會被刪除。
又,在RAM14的參數存儲區域14c中,保存在圖4的ST1中說明的為進行庫化的標志位(庫化執行標志位)。該標志位,是在用戶利用開發器編制用戶程序并下載到I/O單元之后,想進行庫化時,設置成庫化執行標志位。
在有關狀態下,庫生成功能,通過由MPU16執行圖4所示的流程圖實現。I/O單元3的模式從RUN模式返回到編程模式后,MPU16,針對用開發器制作的用戶程序,讀出RAM14的參數存儲區域14c中的庫化執行標志位。MPU16,在讀出的標志位為ON時(第ST1步),將保存在RAM14的系統存儲區域14b中的各種系統設定讀出(第ST2步),根據讀出的設定內容判斷庫的種類是部件庫還是整體庫。實際上是判定庫的種類是否指定為部件庫(第ST3步)。
此外,對于要部件庫化的程序,雖然在開發器上作成,作成之后進行庫化處理的方法至少有2種。第1種方法是在開發器上選定對象程序,只將部件庫對象部分下載到I/O單元中的方法。這時,如上所述,在進行部件庫化時,庫化對象是保存在RAM中的子程序所構成的用戶程序整體。第2種方法,將開發器上作成的用戶程序(包括需要庫化的部分和不需要庫化的部分的程序)全部下載到I/O單元中,然后由開發器選定庫化對象部分的方法。這時,只是將保存在RAM中的一部分即庫化對象部分進行部件庫化。
指定部件庫化時,即庫化對象是用戶程序的一部分或者全部時,跳至第4步,MPU16讀出保存在RAM14的PRG存儲區域14a中的對象用戶程序,同時將讀出的程序以中間語言的狀態保存在閃存15的庫數據存儲區域15b中(第ST4步)。該第4步,是將編譯成執行目標碼之前的用戶程序保存在閃存15上。該內容是可以反編譯的,根據需要可以復原到梯形圖狀態,也可以復原到助記憶符狀態。
然后,MPU16將保存在RAM14的參數存儲區域14c的執行目標碼用區域中的該用戶程序的執行目標碼讀出,同時將該執行目標碼(編譯成機器語言的用戶程序)保存到閃存15的庫數據存儲區域15b中(第ST5步)。在此,如上所述,雖然采用的是將I/O單元3切換到RUN模式下,執行用戶程序,然后將所產生的執行目標碼預先保存到RAM14的參數存儲區域14c的執行目標碼用區域中的方式,但并不限定于此,也可以預先進行編譯后并不保存,而在該第5步中,重新對RAM14的用戶程序進行編譯,將編譯后的執行目標碼保存在閃存15的庫數據存儲區域15b中。所保存的內容由于是通常不能理解的語言,或者不能進行反編譯,因此不能復原到梯形圖狀態或者助記憶符的狀態。又,在第ST4步和第ST5步,在庫數據存儲區域15b中雙重保存了用戶程序,即將編譯成執行目標碼之前的用戶程序和編譯成執行目標碼之后的用戶程序兩者均保存在庫數據存儲區域15b中,也可以省略第ST4步和第ST5步中的一步。
進一步,MPU16,對成為對象的用戶程序進行編譯時所產生的子程序表等的程序執行所必要的信息從RAM14的系統存儲區域14b中讀出,同時保存到閃存15的庫信息存儲區域15c中(第ST6步)。子程序表包括子程序、各個子程序的編號、分別保存在閃存中的地址范圍等關聯信息。進一步,產生其它庫信息并保存到閃存15的庫信息存儲區域15c中(第ST7步)。作為該庫信息,例如有用于識別庫的編碼的庫ID、為便于用戶容易明白而附加在登錄庫上的固有名稱(庫名)、在庫內使用特殊命令時的參照信息表(庫命令表)等各種信息。該庫信息,如后面所述,對于授權用戶可以在向存儲卡上備份時或者從存儲卡上下載時使用。又,對于庫ID和庫名,是將用戶在進行庫化處理時在開發器上預先設定并保存在RAM14的系統存儲區域14b中的內容讀出后產生。庫命令表,在進行庫化處理時進行的單元系統處理中作成。進一步,除了上述預先保存、設定的信息以外,例如保存了用戶程序和執行目標碼的庫數據存儲區域內的地址和指針等用于讀出用戶程序的信息也作為庫信息保存。
然后,庫ID,由于仍然殘留在可讀出的RAM14中,為了不讓授權用戶之外的人利用,將庫ID初始化,讓庫化執行標志位OFF,結束庫化的所有處理(第ST8步)。此外,雖然只是以將庫ID刪除的方式進行了說明,也可以將庫ID之外的庫信息同樣也初始化后進行刪除。此外,作為將保存在RAM14中的用戶程序等進行庫化(部件庫化)后保存在閃存15中的處理概念的說明圖的一例,例如如圖5所示。
另一方面,當庫種類是整體庫時,作為MPU16的處理,在第3步的分支判斷中為NO,直接調轉到第9步,MPU16將保存在RAM14的PRG存儲區域14a中的用戶程序讀出,同時將讀出的用戶程序保存在閃存15的庫數據存儲區域15b中(第ST9步)。然后,MPU16讀出保存在RAM14的系統存儲區域14b中的各種系統設定,同時保存到閃存15的庫信息存儲區域15c中(第ST10步)。進一步,由MPU16產生其它庫信息,保存到閃存15的庫信息存儲區域15c中(第ST11步)。作為該庫信息,例如有用于識別庫的編碼的庫ID、為便于用戶容易明白而附加在登錄庫上的固有名稱(庫名)、在庫內使用特殊命令時的參照信息表(庫命令表)等各種信息。該庫信息的作成處理和部件庫時的情況基本相同。然后,讓庫化執行標志位OFF,結束庫化的所有處理(第ST8步)。此外,作為將保存在RAM14中的用戶程序整體進行庫化(整體庫化)后保存在閃存15中的處理概念的說明圖的一例,例如如圖6所示。此外,這樣進行庫化后保存在閃存中的庫程序(ST4、5、9中保存的程序),在圖8、9、10中所說明的執行環境下執行。
最后,將RAM14的存儲內容和閃存15的PRG存儲備份區域中的存儲內容刪除,刪除的方式可以有各種各樣的方法。舉例講,在第ST8步后,用戶在開發器上作成只包括END命令的用戶程序,然后將其下載到I/O單元3中。于是,在RAM14的PRG存儲區域14a中保存只包括END命令的用戶程序。這時通過在進行庫化處理時的上一次的用戶程序上覆蓋保存,而將其刪除,留下新的只包括END命令的用戶程序。然后,通過將I/O單元3切換到RUN模式,在閃存15的PRG存儲備份區域15a中也將只包括END命令的用戶程序備份進行覆蓋保存,這樣將前次的庫化對象的用戶程序刪除。然后切斷I/O單元3的電源,將RAM14的存儲內容刪除。通過這樣的方式,將庫化對象的程序從可讀出的存儲區域中刪除。作為另一例,也可以將第ST8步的庫化執行標志位設定成OFF,結束整個庫化處理,同時殘留在RAM14的PRG存儲區域14a和閃存的PRG存儲備份區域15a中的庫化對象的用戶程序,通過I/O單元的系統處理將其刪除。又,作為其它例,在第ST8步之前或者之后,從開發器上發出刪除的操作進行刪除。
然后說明啟動設置在MPU16中的庫生成功能,采用按照上述流程將用戶程序進行庫化后的I/O單元3,實際進行控制時的庫化后的程序的執行過程。
首先,用戶(假定是與進行上述庫化的用戶不同的用戶)利用開發器新建用戶程序。這時在閃存15中保存了部件庫,而要利用該部件庫時,在主程序(采用梯形圖語言作成)中,寫入調用子程序用的專用命令。在此準備了“LIB A B C”的專用命令。即,“LIB”表示調用保存在閃存15中的部件庫(子程序庫)的命令,“A”表示定位閃存15內的庫子程序的庫子程序的編號,“B”表示指定傳遞到庫中的數據的區域的開始部分用的輸入CH開始編號,“C”表示指定保存庫的執行結果的數據的區域的開始部分用的輸出CH開始編號。A的子程序編號,由進行庫化的用戶在I/O單元的操作手冊等中說明子程序的處理內容和該子程序的編號,通過參照操作手冊可以知道。又,參數數據的區域B、C,由編制用戶程序的用戶在I/O單元3內的數據存儲區域(圖2中未示)設定即可。此外,用戶程序作成后,從開發器通過接口向I/O單元3下載。下載后,將用戶程序保存在RAM14中。然后,將I/O單元3切換到RUN模式,保存在RAM14中的用戶程序,作為備份保存在閃存的PRG存儲備份區域中,同時編譯成執行目標碼,保存在RAM14的執行目標碼保存裝置中。此外,RUN模式下的初始化,在圖10中詳細說明。
然后,在RUN模式下的I/O單元3,由MPU16執行保存在RAM14的參數存儲器的執行目標碼區域中的主程序。在執行中,如果存在上述專用命令,MPU16識別出該子程序的庫子程序編號,根據該子程序編號參照保存在閃存15的庫信息存儲區域15c中的庫信息中的子程序表,找出在相應部件庫的閃存中的保存地址,啟動該部件庫。這時程序計數器,從用戶程序(主程序)在RAM14的PRG存儲器上的地址,切換到閃存15的保存部件庫的庫數據區域的特定地址。該部件庫啟動時,在庫用子程序工作表中壓入返回地址等必要的數據。然后,從庫內的子程序返回主程序執行時,將彈出的返回地址輸入到程序計數器中,繼續進行主程序的處理。圖7是主程序中的子程序的執行的概念的示意圖。圖7中的梯形圖主程序中的“LIB#001*** ***”相當于上述的“LIB A B C”。
執行上述處理的具體處理過程,為圖8、圖9所示的流程圖。首先,MPU16執行主程序。執行中如果出現專用命令(LIB),MPU16啟動圖8所示的庫子程序執行處理。然后,MPU16首先判斷是否指定了指定庫(第ST20步),指定了時,保存子程序執行后用于返回到主程序中的信息,在庫執行用工作區中壓入主程序的執行狀態等信息(執行地址等)(第ST21步)。
然后,由MPU16將PC(程序計數器)從主程序執行地址空間切換到庫執行地址空間(第ST22步),執行庫化后的程序(第ST23步)。即,根據庫信息,從閃存15中讀出指定的部件庫,執行該程序。另一方面,沒有指定庫時,在第20步的分支判斷中為NO,跳轉到第24步,在執行命令錯誤處理后,結束處理(第ST25步)。
又,第23步的庫執行中執行完庫子程序之后,返回到原來的主程序時,MPU16按照圖9的流程圖進行處理。此外,在本實施方案中,該返回處理與通常的子程序返回處理共用。通常的子程序是指作為保存在RAM14中的梯形圖主程序的一部分作成的,而不是庫化后保存在閃存中的子程序。為此,首先,判斷當前的子程序處理是否是庫執行(第ST26步)。然后,是庫執行時,從壓入的庫用工作區的主程序執行狀態(執行地址等)中返回(第ST27步)。即,獲取在第21步中壓入的數據(主程序的執行狀態)。然后,根據所獲取的數據,將程序計數器切換到主程序執行地址上(第ST28步)。這樣,返回處理結束,依次執行以后的主程序。
此外,從通常的子程序返回時,在第26步的分支判斷中為NO,跳轉到第29步,從通常的子程序工作區中進行數據恢復(獲取執行子程序之前進行壓入處理的數據),結束返回處理。
另一方面,整體庫的執行,是庫化后的程序本身作為主程序執行。這與在通常的用戶程序中執行部分庫的情況不同。即,通常的用戶程序的執行,由于保存在RAM14的PRG存儲區域14a中,從該區域讀出作為主程序的用戶程序,進行編譯后執行程序,而執行該整體庫時,讀出對象的用戶程序在RAM14中不存在,而是作為庫保存在閃存15中,以保存在該閃存15中的程序作為編譯對象,執行編譯后的程序。
此外,在本實施方案中的I/O單元3,不僅可以執行部件庫和整體庫的程序,而且可以執行沒有庫化的通常的用戶程序。為此,需要進行啟動后的RUN初始化處理。該RUN初始化處理采用圖10所示的流程圖進行說明。
用戶(與進行庫化的用戶不同的用戶)在開發器上作成用戶程序,下載到I/O單元3的RAM14的PRG存儲區域14a中執行時,如果在作成的用戶程序中要調用部件庫,將RAM14的系統存儲區域14b中的庫的指定信息設定成部件庫。如果不利用庫,只處理通常的用戶程序(包含通常的子程序處理的情況),將RAM14的系統存儲區域14b中的庫的指定信息設定成執行既不是部件庫也不是整體庫的通常的用戶程序。
然后,I/O單元3從編程模式切換到RUN模式。(此外,如上所述,在切換到RUN模式時,MPU16在閃存15的備份區域15a中備份保存下載到RAM14的PRG存儲區域14a中的用戶程序。并且,接通電源時,在閃存15的備份區域15a中保存有用戶程序,而在RAM14的PRG存儲區域14a中為空時,MPU16將閃存15的備份區域15a中的用戶程序展開到RAM14的PRG存儲區域14a中)。
在切換到RUN模式后,首先,MPU16讀出保存在RAM14的系統存儲區域14b中的系統設定,判斷是否指定了庫(第ST30、31步)。然后,如果沒有指定庫,只執行通常的用戶程序,所以將保存在RAM14的PRG存儲區域14a中的程序(用戶程序)設定成編譯對象(第ST32步)。
又,即使指定了庫(在第31步的分支判斷中為YES)而指定的是部件庫(在第33步的分支判斷中為NO),主程序執行保存在RAM14中的用戶程序,跳轉到第32步,執行上述處理。這時,不對部件庫進行編譯,是因為在圖4的第ST5步的處理中,已經進行了編譯并以執行目標碼的狀態保存在閃存中。在圖4的處理中,如果不執行第ST5步而只執行第ST4步時,雖然在圖10中未示出,只要增加將在第ST4步保存在閃存中的用戶程序(編譯成執行目標碼之前的程序)讀出并進行編譯,然后以執行目標碼的形式保存在閃存中的處理即可。
然后,如果指定了庫(在第31步的分支判斷中為YES)而且指定的是整體庫時(在第33步的分支判斷中為YES),設置保存在閃存15內的庫信息存儲區域15c中的命令表系統設定(第ST34步)。這樣,可以知道編譯處理對象的整體庫保存在閃存15內的那一個區域。然后,將保存在閃存15的庫數據存儲區域15b中的程序(整體庫)作為編譯對象(第ST35步)。
在執行上述第32步或者第35步之后,MPU16將保存在閃存15的庫數據存儲區域15b中的對象庫程序讀出并進行編譯(第ST36步),以執行目標碼的狀態保存在RAM14中。然后,執行作為通常的RUN模式的用戶程序。此外,上述第34、35、36步是執行整體庫的處理。換言之,對于只采用整體庫的I/O單元而言,可以省略第30~33步的處理步驟。
如上所述,可以執行部件庫或者整體庫的生成/讀出。又,當為部件庫時,要庫化的程序,如圖3中說明的那樣先保存在RAM14中,在庫化處理結束后,不需要保存在有關RAM14中的程序,進行刪除。然后,實質的用戶程序是保存在RAM14中的主程序和保存在閃存15中的部件庫,只有部件庫化的程序部分不需要保存在RAM14的區域中(該部分保存在閃存中),因此對于RAM14而言增加了可以使用的程序容量。即,通過適當分配部件庫化的程序和保存在RAM14中的用戶程序,可以作成實質上RAM14的PRG存儲區域14a的存儲容量以上大小的用戶程序。
然而,庫化后的程序只保存在不能訪問的閃存中,其內容不能通過開發器等讀出,所以有可能出現不知道怎樣的程序庫化后保存在閃存15中的情況。為此,在本實施方案中,設置了庫名讀出功能。即,MPU16具有實施圖11所示的流程圖的功能。首先,用戶想讀出庫名時,通過開發器讀出設置存在于RAM14的參數存儲器14c中的庫名并設置標志位。然后,I/O單元3在循環處理中執行特殊中繼服務處理。作為該特殊中繼服務處理內的一個處理,首先讀出庫名讀出標志位(第ST41步),在有讀出指定(標志位為ON)時(在第42步的分支判斷中為YES),檢查庫的有無(第ST43步)。然后,庫存在時(在第43步為YES),將閃存15內的庫名設置到RAM14的參數存儲器14c的預先確定區域中(第ST44步)。這樣,用戶利用開發器參照RAM14的預先確定區域,通過讀取可以獲得庫名,可以判斷庫化程序的內容。
以下說明應用上述I/O單元3的各功能的實施方案。保存在上述I/O單元3的RAM14和閃存15中的信息,可以備份在通過單元之間連接總線連接的CPU單元2上裝載的存儲卡(例如緊湊閃存卡等)上。當然,存儲卡的裝載并不限定于CPU單元,也可以在該I/O單元上增加裝載存儲卡的結構,也可以另外設置裝載了存儲卡、具有對I/O單元的RAM14和閃存15控制數據讀寫功能的新單元。利用任一個單元,通過對保存在I/O單元3的RAM14和閃存15中的程序信息進行備份(上載),可以進行各種各樣的應用。又,也可以將保存在存儲卡中的信息,保存到I/O單元3的RAM14和閃存15中(下載),進行各種各樣的應用。
然后,通過利用該備份功能,保存在閃存15中的庫可以保存在存儲卡中,將該存儲卡轉入其它PLC中,通過下載,可以將庫化后的程序植入到有關其它PLC中。
然后,在本實施方案中,為了不讓授權用戶以外的人不正當進行備份而植入有關其它PLC中,設置了上載時的保護功能。這樣,可以防止庫的不正當使用(防止向存儲卡的備份)。其具體的處理功能如下。
首先,向存儲卡的上載(單元→存儲卡)操作,通過使用開發器在RAM14的系統存儲區域14b中的系統設定(圖中未示)中保存庫ID,然后分配給單元的中繼區域(CPU單元和I/O單元之間循環進行數據交換的區域)的標志位操作進行。然后,如圖12所示,備份文件形式與編號和文件名關聯,標志位操作包括單元數據上載和單元數據下載,均在從0變化到1時,進行存儲卡的寫入或者讀出。進一步,作為狀態顯示,包括存儲卡傳送錯誤和傳送忙。這些狀態顯示,作為表示該狀態的數據保存在單元內。根據所保存的數據可以向單元外部報知(LED等顯示),或者在開發器上顯示。此外,在向存儲卡的上載操作和下載操作(后面說明)中使用的標志位操作對象的標志位設置在I/O單元3內的給定部分(例如,參數存儲器14c)中。該標志位操作對象的標志位,也可以設置在CPU單元和I/O單元之間循環進行數據交換的區域中。這樣,對CPU單元的指定區域(相當于上述分配給單元的中繼區域)通過標志位操作可以進行上載/下載操作,通過與CPU單元連接的開發器以外的儀器(例如可編程顯示器)也可以進行上載/下載操作。
在該狀態下,向存儲卡的上載功能如下述那樣由MPU16執行(作為特殊中繼服務處理之一)。即,向存儲卡寫入數據時,以下信息①~③設置成庫關聯數據寫入。
①頭信息②備份數據(庫關連數據)③SUM值在將上載對象的保存數據寫入到存儲卡之前,在存儲卡中生成名為“unit**.prm”(**表示單元編號)的文件,寫入到頭信息中。頭信息,如圖13所示,包括表示單元種類信息的單元形式、單元的軟件版本信息、最大內部參數長度。此外,在圖13中,備份數據是上載對象的用戶程序和庫等。又,庫ID也作為備份數據保存在存儲卡中。此外,上述的頭信息以及備份數據的數據結構,由于是在制作、編輯用戶程序的開發器上不能解析的結構,利用該開發器不能復原成梯形圖語言或者其它語言程序。
然后,將保存在I/O單元3的閃存15內的庫ID和在系統設定中設置的庫ID(在上載操作時由用戶通過開發器輸入的ID)進行比較,判斷是否一致。只有在一致時才允許向存儲卡寫入,執行處理。這樣,可以防止由第三者從搭載在本庫上的某個單元復寫到其它存儲卡上的情況,進一步,可以防止上載后的數據再次下載到其它單元中使用(防止拷貝)。因此,本上載操作,只有知道本庫的庫ID的用戶才能進行操作。
即,庫ID由于保存在閃存15中,即使訪問I/O單元3也不可能獲取(雖然在庫化處理時在RAM中保存有庫ID,但在圖4的第8步的執行中對庫ID進行了初始化而將其刪除)。因此授權用戶以外不知道庫ID,能正確輸入該庫ID的人判定為授權用戶,允許向存儲卡備份。為此,可以防止非授權用戶通過向存儲卡中備份不正當獲取庫化程序等的情況。
此外,如上所述,為了核對該授權用戶,要預先在RAM14中輸入庫ID,如果這樣留下來,有可能出現不正當獲取庫ID的情況。為此,在備份處理結束后,或者確認授權用戶后的給定時刻,刪除保存在RAM14中的庫ID。
另一方面,下載功能(存儲卡→單元)如下所述。向單元的下載操作,通過用戶操作分配給單元的中繼區域的指定標志位進行執行。具體的下載處理,作為特殊中繼服務處理之一由MPU16執行。即,下載處理時,I/O單元3先從存儲卡中讀出頭信息,這時,如果在存儲卡上不能找到該文件名的文件時,或者保存在頭信息中的單元形式與本身單元的形式不一致時,判斷出現了錯誤,讓存儲卡傳送錯誤標志位ON,并結束。
這樣,可以將上載(備份)到存儲卡上的庫,按照給定順序下載到I/O單元3中。然后,在下載時I/O單元3,可以和上載時的I/O單元3是同一個,也可以是其它I/O單元3。是同一個I/O單元3時,上載就是數據(信息)的備份。而下載到其它I/O單元3中時,由于已經由用戶等制作的庫化程序作為包化(部件化)產品,可以在其它I/O單元3中進行程序開發、安裝中使用。
即,對于PLC或者PLC用單元的制造廠商,或者購入該PLC、單元并組裝到產業機械中的用戶等,在各交易中,不僅可以提供裝載了用戶程序、庫的單元,而且對于已經持有包含庫生成裝置等的本發明的單元、PLC的用戶,通過提供上述備份后的存儲卡,可以進行產品的交易。當然,也可以下載到同一用戶內的其它I/O單元中。
即使這種情況下,如果是不知道保存在存儲卡中的庫ID的人,從利用存儲卡將庫下載到閃存15中的I/O單元,也不能再次備份到存儲卡中。
此外,在上述實施方案中,雖然是以適用于I/O單元中為例進行了說明,但本發明并不限定于此,顯然也可以適用于CPU單元或者其它單元中。適用于CPU單元時,其基本構成也大致相同,在I/O單元中說明的外部輸入/輸出電路可能在CPU單元中不具有,而代替為具有單元之間連接總線的接口電路的構成。又,在“遙控用I/O用主單元”中適用時,在I/O單元中說明的外部輸入/輸出電路是與遙控用I/O用從單元的接口電路。作為適用可能的單元,包括在實施方案中涉及到的“計數器單元”、“模擬單元”、“位置控制單元”等。在位置控制單元中適用時,從實施方案中的圖2的外部輸入電路11輸入的信號是表示位置信息的模擬信號或者脈沖信號,程序執行的內容是有關定位的控制,從外出輸出電路12輸出的信號是用于定位的命令信號,是脈沖信號或者模擬信號。進一步,包含這些各單元構成的PLC也包含在本發明中。更進一步,有關本發明的PLC,并不限定于連接上述那樣的多個單元構成的PLC,對于一體形成的PLC,只要包括將用戶程序庫化的功能等,都包含在本發明中。“一體型PLC”,也是稱為微PLC的PLC,是將在實施方案中說明的電源單元具有的功能、CPU單元的功能、I/O單元的功能不分離成各個單元,而集成并內藏在一個單元外殼中的PLC。
如上所述,在該發明中,將用戶作成的程序的一部分或者全部進行庫化,保存在用開發器不能訪問的第2存儲裝置中,所以可以進行簡單而確切的保護。
權利要求
1.一種單元,是可編程控制器用單元,其特征在于,包括保存用戶程序的第1存儲裝置;對保存在所述第1存儲裝置中的所述用戶程序的至少一部分進行庫化并保存在第2存儲裝置中的庫生成裝置;執行保存在所述第2存儲裝置中的庫化后的程序的程序執行裝置,所述第2存儲裝置安裝在所述單元內,并且不能被上載所述用戶程序的開發器所訪問。
2.根據權利要求1所述的單元,其特征在于,所述庫生成裝置是將所述用戶程序編譯成執行目標碼后保存在所述第2存儲裝置中。
3.根據權利要求1所述的單元,其特征在于,所述庫化程序是子程序,所述程序執行裝置,在保存在所述第1存儲裝置中的主程序中包含所述子程序庫調用的專用命令時,執行指定的子程序庫,同時包括返回到所述主程序的功能。
4.根據權利要求1所述的單元,其特征在于,所述庫化程序是所述用戶程序的整體,所述程序執行裝置,成為可以執行保存在所述第2存儲裝置中的庫化程序的狀態。
5.根據權利要求1所述的單元,其特征在于,所述庫生成裝置具有將要庫化的程序與用于選定的庫名關聯并保存在第2存儲裝置中的功能,包括讀出保存在所述第2存儲裝置中的所述庫名并保存在所述第1存儲裝置中的庫名讀出裝置。
6.根據權利要求1所述的單元,其特征在于,所述庫生成裝置具有在第2存儲裝置中保存庫化后的程序、同時與選定該庫的庫識別信息關聯進行保存的功能,包括將保存在所述第2存儲裝置中的信息備份到外部存儲裝置中的備份裝置,所述備份裝置,判斷所輸入的庫識別信息與預先保存在所述第2存儲裝置中的正規識別信息是否一致,在一致時將所述信息保存到所述外部存儲裝置中。
7.一種可編程控制器,其特征在于,包括保存用戶程序的第1存儲裝置;對保存在所述第1存儲裝置中的所述用戶程序的至少一部分進行庫化并保存在第2存儲裝置中的庫生成裝置;執行保存在所述第2存儲裝置中的庫化后的程序的程序執行裝置;所述第2存儲裝置,所述第2存儲裝置不能被上載所述用戶程序的開發器所訪問。
8.一種用戶程序的處理方法,是在包括保存用戶程序的第1存儲裝置、不能被上載所述用戶程序的開發器所訪問的第2存儲裝置的可編程控制器用單元中的用戶程序的處理方法,其特征在于,將保存在所述第1存儲裝置中的所述用戶程序的至少一部分進行庫化并保存在所述第2存儲裝置中,保護所述庫化后的部分,所述用戶程序執行時,適當執行保存在所述第2存儲裝置中的庫化后的程序。
9.一種可編程控制器用單元,包括接收輸入信號的輸入電路、根據該輸入信號執行用戶程序的程序執行裝置、輸出執行結果的輸出電路,其特征在于,包括預先保存部件庫化后的程序的第2存儲裝置;對插入有調出執行所述部件庫化后的程序用的專用命令的用戶程序利用開發器作成后進行保存的第1存儲裝置,所述程序執行裝置,是掃描執行保存在所述第1存儲裝置中的用戶程序,通過執行上述用戶程序中的專用命令從所述第2存儲裝置中調出執行所述部件庫化后的程序,當調出執行結束后,返回執行所述用戶程序,通過讓所述開發器不能訪問上述第2存儲裝置,使得不能讀出部件庫化后的程序。
10.一種可編程控制器用單元,包括接收輸入信號的輸入電路、根據該輸入信號執行用戶程序的程序執行裝置、輸出執行結果的輸出電路,其特征在于,包括預先保存整體庫化后的程序的第2存儲裝置;通過開發器的操作、保存用于調出執行所述整體庫化后的程序的設定標志位的第1存儲裝置,所述程序執行裝置,是根據所述第1存儲裝置的設定標志位從第2存儲裝置中調出執行整體庫化后的程序,通過讓所述開發器不能訪問上述第2存儲裝置,使得不能讀出整體庫化后的程序。
11.一種可編程控制器用單元,其特征在于,包括保存在開發器上作成的用戶程序的第1存儲裝置,該用戶程序插入有調出執行庫化后的程序用的專用命令;保存預先庫化后的程序的第2存儲裝置;掃描執行所述用戶程序,通過執行所述用戶程序中的專用命令,從所述第2存儲裝置中調出執行所述庫化后的程序的程序執行裝置,所述第2存儲裝置中的庫化程序預先保存,并且通過不能利用作成用戶程序時所使用的開發器讀出庫化程序,可以保護庫化程序的內容。
12.一種可編程控制器用單元,其特征在于,包括保存用于在開發器上調出執行庫化后的程序的設定標志位的第1存儲裝置;保存預先庫化后的程序的第2存儲裝置;讀出所述第1存儲裝置的設定標志位,當是表示執行的標志位設定時,從所述第2存儲裝置中調出執行所述庫化后的程序的程序執行裝置,所述第2存儲裝置中的庫化程序預先保存,并且通過不能利用對設定標志位進行設定的開發器讀出庫化程序,可以保護庫化程序的內容。
全文摘要
本發明涉及一種對用戶作成的程序的一部分或者全部可以實施簡單而確切的保護的可編程控制器用單元。在可編程控制器(PLC)用I/O單元3中,將保存在RAM14中的用戶程序的一部分或者全部進行庫化并保存在閃存15中,進一步,庫化后的程序根據需要被執行。由于閃存不能由開發器訪問,第三者不能將其讀出,可以確切實施保護。
文檔編號G06F21/60GK1431570SQ0310142
公開日2003年7月23日 申請日期2003年1月10日 優先權日2002年1月10日
發明者大谷修史, 和泉俊郎 申請人:歐姆龍株式會社