控制器及程序的制作方法
【專利摘要】提供一種提高了PLC等控制器訪問數(shù)據(jù)庫系統(tǒng)的可靠性的技術(shù)。能夠訪問數(shù)據(jù)庫的PLC通過用戶程序調(diào)出DB訪問處理程序來訪問DB服務(wù)器。DB訪問處理程序按照用戶程序的指令,來將表示訪問DB服務(wù)器的訪問狀況的狀態(tài)信息存儲(chǔ)至非易失性存儲(chǔ)器。在發(fā)生斷電時(shí),PLC能夠通過參照狀態(tài)信息,來獲取在發(fā)生斷電的時(shí)刻的訪問DB服務(wù)器的訪問狀況,由此根據(jù)訪問狀況來進(jìn)行SQL語句的再次發(fā)送等的處理。
【專利說明】控制器及程序
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及可編程邏輯控制器(PLC Programmable Logic Controller)等控制器及程序,特別涉及向數(shù)據(jù)庫系統(tǒng)發(fā)送數(shù)據(jù)的控制器及程序。
【背景技術(shù)】
[0002]PLC等控制器用于對(duì)工廠等的自動(dòng)設(shè)備的控制等中,具有多個(gè)輸入輸出功能,例如依次讀取從傳感器等輸出的值并保持(保存)數(shù)據(jù)。
[0003]另外,近年來PLC通過連接數(shù)據(jù)庫系統(tǒng)來將保持在PLC中的數(shù)據(jù)儲(chǔ)存至數(shù)據(jù)庫系統(tǒng)。由此,能夠使得連接至數(shù)據(jù)庫的信息處理裝置之間的數(shù)據(jù)的共享變得容易,并且能夠通過收集各種數(shù)據(jù)來使得數(shù)據(jù)的統(tǒng)計(jì)及解析等變得容易。例如,日本特開2012 - 108642號(hào)公報(bào)(專利文獻(xiàn)I)公開了具有如下功能的PLC,該功能是指將包含多個(gè)用于訪問數(shù)據(jù)庫的SQL語句的SQL處理組發(fā)送至數(shù)據(jù)庫的功能。
[0004]現(xiàn)有技術(shù)文獻(xiàn)
[0005]專利文獻(xiàn)
[0006]專利文獻(xiàn)1:日本特開2012 — 108642號(hào)公報(bào)
[0007]但是,若對(duì)PLC等控制器的供電因某種原因而不穩(wěn)定,則對(duì)數(shù)據(jù)庫系統(tǒng)的訪問會(huì)被中斷。例如,以往的控制器將數(shù)據(jù)作為“Spool” (Simultaneous Peripheral OperationOn Line:外部設(shè)備聯(lián)機(jī)并行操作,以下稱為“假脫機(jī)”)信息保持在非易失性存儲(chǔ)器中,并將數(shù)據(jù)定期性地移動(dòng)(保存、備份)至外部存儲(chǔ)裝置??刂破骶哂腥缦陆Y(jié)構(gòu),即,在斷電發(fā)生時(shí),對(duì)于未能移動(dòng)至外部存儲(chǔ)裝置的數(shù)據(jù),在從斷電開始到恢復(fù)供電之后,將未能移動(dòng)的量該“Spool”信息再次移動(dòng)至外部存儲(chǔ)裝置。此時(shí),若在控制器正在將數(shù)據(jù)移動(dòng)至外部存儲(chǔ)裝置的過程中發(fā)生斷電,則有可能導(dǎo)致已經(jīng)存在的已移動(dòng)的數(shù)據(jù)發(fā)生破損。因發(fā)生這樣的斷電,會(huì)導(dǎo)致從控制器發(fā)送至數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)消失,從而導(dǎo)致控制器的可靠性下降。
【發(fā)明內(nèi)容】
[0008]因此,本發(fā)明的目的在于,提供一種能夠提高PLC等控制器的訪問數(shù)據(jù)庫系統(tǒng)的可靠性的技術(shù)。
[0009]一個(gè)實(shí)施方式的控制器具有:指令執(zhí)行部,其執(zhí)行用于對(duì)控制對(duì)象進(jìn)行控制的用戶程序;通信接口,其用于連接數(shù)據(jù)庫系統(tǒng);訪問處理部,其通過執(zhí)行包含用于訪問數(shù)據(jù)庫系統(tǒng)的訪問指令在內(nèi)的用戶程序,來生成與訪問指令相對(duì)應(yīng)的指令語句,基于所生成的指令語句來控制對(duì)數(shù)據(jù)庫系統(tǒng)的訪問;狀態(tài)輸出部,其在從訪問處理部開始基于與訪問指令相對(duì)應(yīng)地生成的指令語句來執(zhí)行用于訪問數(shù)據(jù)庫系統(tǒng)的訪問處理起,至基于該指令語句的處理結(jié)束為止的期間內(nèi),生成表示指令語句的執(zhí)行狀況的狀態(tài)信息,并輸出所生成的狀態(tài)信息。
[0010]優(yōu)選地,控制器,還包括非易失性存儲(chǔ)器;訪問處理部,包括指令輸出部,該指令輸出部在到基于指令語句的處理結(jié)束為止的期間內(nèi),將指令語句存儲(chǔ)至存儲(chǔ)器。[0011]優(yōu)選地,狀態(tài)信息,也可以包括用于訪問數(shù)據(jù)庫系統(tǒng)的SQL語句的發(fā)送狀況的信
肩、O
[0012]優(yōu)選地,狀態(tài)信息,也可以包括表示是否將用于訪問數(shù)據(jù)庫系統(tǒng)的SQL語句保留在存儲(chǔ)部中的信息。
[0013]優(yōu)選地,控制器也可以還具有保持部,該保持部保持恢復(fù)程序,該恢復(fù)程序參照狀態(tài)信息,根據(jù)狀態(tài)信息所表示的訪問的狀況來恢復(fù)對(duì)數(shù)據(jù)庫系統(tǒng)的訪問處理;也可以在處于規(guī)定的動(dòng)作狀態(tài)時(shí),執(zhí)行恢復(fù)程序。
[0014]優(yōu)選地,恢復(fù)程序,也可以根據(jù)從控制器向數(shù)據(jù)庫系統(tǒng)發(fā)送的SQL語句的發(fā)送狀況來進(jìn)行恢復(fù)。
[0015]根據(jù)另一實(shí)施方式,提供用于對(duì)控制器的動(dòng)作進(jìn)行控制的程序。控制器具有處理器和用于連接數(shù)據(jù)庫系統(tǒng)的通信接口,該程序的特征在于,程序使處理器執(zhí)行以下步驟:通過執(zhí)行包含用于訪問數(shù)據(jù)庫系統(tǒng)的訪問指令在內(nèi)的用戶程序,來生成與訪問指令相對(duì)應(yīng)的指令語句,并基于所生成的指令語句來控制對(duì)數(shù)據(jù)庫系統(tǒng)的訪問;在訪問處理部開始基于與訪問指令相對(duì)應(yīng)地生成的指令語句來執(zhí)行用于訪問數(shù)據(jù)庫系統(tǒng)的訪問處理起,至基于該指令語句的處理結(jié)束為止的期間內(nèi),生成表示指令語句的執(zhí)行狀況的狀態(tài)信息,并輸出所生成的狀態(tài)信息。
[0016]根據(jù)上述的一個(gè)實(shí)施方式,將控制器訪問數(shù)據(jù)庫系統(tǒng)時(shí)的訪問狀況保持為狀態(tài)信息,因而即使在斷電發(fā)生的情況下也能夠在恢復(fù)時(shí)參照訪問狀況,從而提高了訪問數(shù)據(jù)庫系統(tǒng)的可靠性。
[0017]本發(fā)明的上述及其他目的、特征、方式及優(yōu)點(diǎn),根據(jù)與附圖相關(guān)聯(lián)地理解的本發(fā)明的下面的詳細(xì)說明來明確了解。
【專利附圖】
【附圖說明】
[0018]圖1是示出了本實(shí)施方式的控制系統(tǒng)整體的結(jié)構(gòu)的圖。
[0019]圖2是示出了 PClO的功能的框圖。
[0020]圖3是示出了 DB (數(shù)據(jù)庫)服務(wù)器20的功能的框圖。
[0021]圖4是示出了 PLC30的功能的框圖。
[0022]圖5A、5B是示出了本實(shí)施方式的硬件結(jié)構(gòu)的圖。
[0023]圖6是示出了在狀態(tài)信息51中保持的數(shù)據(jù)的圖。
[0024]圖7是示出了通過DB訪問處理程序35來訪問DB服務(wù)器20的訪問處理和輸出用于表不訪問DB服務(wù)器20的狀態(tài)的輸出變量State的圖。
[0025]圖8是示出了按照用戶程序32的指令通過DB訪問處理程序35來開始訪問DB服務(wù)器20并輸出輸出變量State的處理的圖。
[0026]圖9是示出了斷電時(shí)刻、輸出變量State以及在發(fā)生斷電時(shí)所采取的措施的圖。
[0027]圖10是示出了用于通過DB訪問處理程序35來輸出狀態(tài)信息51的用戶程序的一個(gè)例子的圖。
[0028]圖11是示出了在發(fā)生斷電時(shí)用于恢復(fù)的用戶程序的一個(gè)例子的圖。
[0029]附圖標(biāo)記的說明
[0030]101 CPU[0031]102 ROM
[0032]103 RAM
[0033]104 通信接口
[0034]105顯示器
[0035]106輸入輸出接口
[0036]10 PC
[0037]12編程工具
[0038]14指令執(zhí)行狀態(tài)獲取部
[0039]16編程功能
[0040]20 DB 服務(wù)器
[0041]22 DBMS
[0042]24 DB
[0043]30 PLC
[0044]31 OS
[0045]32用戶程序
[0046]33系統(tǒng)程序
[0047]34序列指令程序
[0048]35 DB訪問處理程序
[0049]36輸入輸出處理程序
[0050]37工具接口處理程序
[0051]38排程器
[0052]39控制程序
[0053]40 PLC
[0054]51連接設(shè)定信息(狀態(tài)信息)
【具體實(shí)施方式】
[0055]下面,參照附圖,說明本發(fā)明的實(shí)施方式。在下面的說明中,對(duì)相同的部件標(biāo)注有相同的附圖標(biāo)記。它們的名稱及功能也相同。因此,不重復(fù)對(duì)它們的詳細(xì)說明。
[0056]<第一實(shí)施方式>
[0057]圖1是示出了本實(shí)施方式的控制系統(tǒng)整體的結(jié)構(gòu)的圖。
[0058]首先說明概要。參照?qǐng)D1,控制系統(tǒng)中包括PC (Personal Computer:個(gè)人計(jì)算機(jī))
10,DB (Data base:數(shù)據(jù)庫)服務(wù)器20、PLC30及PLC40。PClO是用戶用于作成在PLC30中進(jìn)行動(dòng)作的用戶程序的信息處理裝置。DB服務(wù)器20是為了管理數(shù)據(jù)庫而作為DBMS (database management system:數(shù)據(jù)庫管理系統(tǒng))來發(fā)揮功能的服務(wù)器。
[0059]PLC30與PC10、DB服務(wù)器20及PLC40相連接。PLC30保持用于與DB服務(wù)器20連接的設(shè)定(信息),并按照設(shè)定(信息)來訪問DB服務(wù)器20。
[0060]另外,PLC30從外部接收傳感器的輸出信息等并蓄積儲(chǔ)存數(shù)據(jù),并通過后述的DB訪問處理程序35,將所蓄積的數(shù)據(jù)發(fā)送至DB服務(wù)器20。PLC30接收由其他的PLC (在圖1的例子中是PLC40)發(fā)送至DB服務(wù)器20的數(shù)據(jù),并將所接收的數(shù)據(jù)發(fā)送至DB服務(wù)器20。PLC40從外部接收傳感器的輸出信息等來蓄積儲(chǔ)存數(shù)據(jù),并將所蓄積的數(shù)據(jù)經(jīng)由PLC30發(fā)送至DB服務(wù)器20。
[0061]<各設(shè)備的詳細(xì)結(jié)構(gòu)>
[0062]接著,說明各設(shè)備的詳細(xì)結(jié)構(gòu)。
[0063]圖2是示出了 PClO的功能的框圖。
[0064]PClO 是具備有 MClKMicro Control Unit:微控制單兀)、R0M(Read Only Memory:只讀存儲(chǔ)器)、RAM (Random Access Memory:隨機(jī)存取存儲(chǔ)器)等的計(jì)算機(jī)系統(tǒng)(信息處理裝置)。參照?qǐng)D2,PC10發(fā)揮用戶用于作成用戶程序的編程工具12的功能,該用戶程序用于使PLC30進(jìn)行動(dòng)作。編程工具12包括指令執(zhí)行狀態(tài)獲取部14和編程功能16的功能。將用戶通過編程工具12作成的用戶程序發(fā)送至PLC30,并在PLC30中執(zhí)行該用戶程序。
[0065]指令執(zhí)行狀態(tài)獲取部14是用于對(duì)PLC30進(jìn)行如下指示的軟件,該指示是指,使PLC30將保持在PLC30的存儲(chǔ)器中的狀態(tài)信息51的內(nèi)容發(fā)送至PClO的指示。
[0066]編程功能16是輔助用戶用于作成程序的軟件。這些軟件在PClO中被執(zhí)行,由此發(fā)揮指令執(zhí)行狀態(tài)獲取部14和編程功能16等的功能。
[0067]圖3是示出了 DB服務(wù)器20的功能的框圖。DB服務(wù)器20包括大容量的存儲(chǔ)裝置
坐寸ο
[0068]DB服務(wù)器20發(fā)揮DBMS22的功能,管理讀取及寫入數(shù)據(jù)庫。DBMS22控制向發(fā)揮數(shù)據(jù)庫的功能的DB24寫入數(shù)據(jù)以及從該DB24讀取數(shù)據(jù)。DB24是用于保持多條數(shù)據(jù)記錄的存儲(chǔ)區(qū)域,按照DBMS22的控制來進(jìn)行數(shù)據(jù)的保持等。
[0069]圖4是示出了 PLC30的功能的框圖。PLC30周期性執(zhí)行用戶程序。PLC30通過對(duì)PLC30中的存儲(chǔ)器區(qū)域的信息進(jìn)行讀寫,來依次執(zhí)行用戶程序所表示的指令。PLC30具有輸入輸出功能,從PLC30的外部接收傳感器輸出的數(shù)據(jù)并蓄積儲(chǔ)存數(shù)據(jù)。PLC30將所蓄積的數(shù)據(jù)發(fā)送至DB服務(wù)器20。
[0070]參照?qǐng)D4,PLC30的各功能是通過由OS (操作系統(tǒng))31、系統(tǒng)程序33及用戶程序32等進(jìn)行動(dòng)作來發(fā)揮的。PLC30保持狀態(tài)信息51。
[0071 ] 0S31是用于管理PLC30的資源的操作系統(tǒng),使PLC30發(fā)揮工作排程(taskschedule)以及對(duì)DB服務(wù)器20進(jìn)行訪問處理等的功能。
[0072]系統(tǒng)程序33是用于提供PLC30的基本功能的軟件組。具體而言,系統(tǒng)程序33包括序列指令程序34、DB訪問處理程序35、輸入輸出處理程序36、工具接口處理程序37及排程器(scheduler) 38。
[0073]序列指令程序34對(duì)PLC30內(nèi)的存儲(chǔ)器區(qū)域的信息進(jìn)行讀寫,并且使PLC30發(fā)揮依次執(zhí)行用戶程序32的指令的功能。
[0074]隨著PLC30通過序列指令程序34來執(zhí)行用戶程序32,而調(diào)出DB訪問處理程序35,使PLC30執(zhí)行用于使用戶程序32訪問DB服務(wù)器20的處理,例如發(fā)揮執(zhí)行SQL語句生成等的處理的功能。
[0075]輸入輸出處理程序36使PLC30發(fā)揮如下功能,即,控制通過PLC30所具備的多個(gè)輸入輸出功能來向PLC30輸入數(shù)據(jù)以及從PLC30輸出數(shù)據(jù)的處理。各輸入輸出功能分別分配有存儲(chǔ)器的地址。與各輸入輸出功能相對(duì)應(yīng)地保持在存儲(chǔ)器中的數(shù)據(jù),周期性地被一并替換為PLC30外部的數(shù)據(jù)。工具接口處理程序37使PLC30發(fā)揮如下功能,即,通過在PClO中進(jìn)行動(dòng)作的編程工具12的功能來接收從PClO通知給PLC30的指示,并通過使DB訪問處理程序35等進(jìn)行處理,來將處理的結(jié)果等應(yīng)答至PClO。排程器38使PLC30發(fā)揮基于由PLC30所執(zhí)行的工作的優(yōu)先級(jí)來進(jìn)行工作排程的功能。
[0076]用戶程序32是用PClO來作成的,保持在PLC30的存儲(chǔ)器中。參照?qǐng)D4,由用戶程序32和序列指令程序34構(gòu)成控制程序39。即,序列指令程序34從存儲(chǔ)器中讀取用戶程序32并依次執(zhí)行指令,由此使PLC30進(jìn)行動(dòng)作。
[0077]通過DB訪問處理程序35來輸出狀態(tài)信息51,該狀態(tài)信息51保持有DB訪問處理程序35訪問DB服務(wù)器20的訪問狀況。在后面詳細(xì)敘述。
[0078]圖5A、5B是示出了本實(shí)施方式的硬件結(jié)構(gòu)的圖。圖5A示出了作為計(jì)算機(jī)系統(tǒng)的PClO的結(jié)構(gòu)。參照?qǐng)D5A,PClO具有CPUlOl、R0M102、RAM103、通信接口 104、顯示器105及輸入輸出接口 106。CPUlOl通過從R0M102等讀取程序并執(zhí)行該程序來使PClO發(fā)揮各種功能。R0M102是非易失性的存儲(chǔ)區(qū)域,存儲(chǔ)有系統(tǒng)數(shù)據(jù)等。RAM103是易失性存儲(chǔ)器,保存有程序及數(shù)據(jù)。通信接口 104是PClO用于與外部設(shè)備進(jìn)行通信的接口。顯示器105用于將CPUlOl等的計(jì)算結(jié)果通過圖像來輸出的顯示設(shè)備。輸入輸出接口 106是使PClO通過接收用戶的輸入操作等來輸出PClO的動(dòng)作狀態(tài)的接口。
[0079]圖5B是示出了 PLC30的硬件結(jié)構(gòu)的圖。PLC30具有CPUlOl、R0M102、RAM103、通信接口 104及總線107等。PLC40也具有與PLC30相同的硬件結(jié)構(gòu)。
[0080]< 數(shù)據(jù) >
[0081]接著,說明在本實(shí)施方式中所使用的數(shù)據(jù)。
[0082]圖6是示出了保持在狀態(tài)信息51中的數(shù)據(jù)的圖。狀態(tài)信息51含有用于通過DB訪問處理程序35來輸出的輸出變量State,該狀態(tài)信息51保持在非易失性存儲(chǔ)器中。
[0083]在本實(shí)施方式中,在用戶程序中指定輸出變量State的輸出,由此,PLC30通過DB訪問處理程序35來輸出輸出變量State,并將其保持到非易失性存儲(chǔ)器中。狀態(tài)信息51,保持通過DB訪問處理程序35來輸出的輸出變量State所表不的五個(gè)狀態(tài)中的任意狀態(tài)。輸出變量State的數(shù)據(jù)類型是枚舉類型(enumerated type),枚舉數(shù)如圖6所示。例如,枚舉數(shù)具有:“_DBC_SEND_INIT” (初始狀態(tài)),表示通過DB訪問處理程序35來訪問DB服務(wù)器20的初始狀態(tài);“_DBC_SEND_UNSENT” (SQL語句未發(fā)送),表示通過DB訪問處理程序35向DB服務(wù)器20發(fā)送SQL語句之前(未發(fā)送)的狀態(tài);“_DBC_SEND_SENDING”(正在發(fā)送SQL語句),表示正在通過DB訪問處理程序35來向DB服務(wù)器20發(fā)送SQL語句并且尚未發(fā)送結(jié)束的狀態(tài);“_DBC_SEND_SP00LED”(SQL語句已被假脫機(jī)),表示通過DB訪問處理程序35向DB服務(wù)器 20 發(fā)送的 SQL 語句已被假脫機(jī)(SPOOL:Simultaneous Peripheral Operation OnLine)而SQL語句保持在非易失性存儲(chǔ)器中的狀態(tài);“_DBC_SEND_C0MPLETE”(SQL語句發(fā)送結(jié)束),表示通過DB訪問處理程序35向DB服務(wù)器20發(fā)送SQL語句的處理結(jié)束的狀態(tài)。
[0084]< 動(dòng)作 >
[0085]接著,利用附圖,詳細(xì)說明本實(shí)施方式的PLC30的動(dòng)作。第一實(shí)施方式的動(dòng)作的概要如下。PClO基于用戶的操作輸入來作成在PLC30中執(zhí)行的用戶程序。PLC30從PClO接收用戶程序并存儲(chǔ)該用戶程序。PLC30伴隨由序列指令程序34執(zhí)行用戶程序32而調(diào)出DB訪問處理程序35。PLC30執(zhí)行用于使用戶程序32訪問DB服務(wù)器20的處理,例如通過DB訪問處理程序35來進(jìn)行SQL語句的生成和發(fā)送等。[0086]圖7是示出了通過DB訪問處理程序35來訪問DB服務(wù)器20的訪問處理和輸出用于表不訪問DB服務(wù)器20的狀態(tài)的輸出變量State的圖。
[0087]在步驟SI I中,PLC30通過DB訪問處理程序35來讀取用于訪問DB服務(wù)器20的值(既是作為向DB服務(wù)器20寫入的對(duì)象的數(shù)據(jù),又是存儲(chǔ)在存儲(chǔ)器中的數(shù)據(jù)的當(dāng)前值)。此時(shí)輸出的輸出變量State是表示未發(fā)送SQL語句的“_DBC_SEND_UNSENT”。
[0088]在步驟S13中,PLC30通過DB訪問處理程序35來生成用于訪問DB服務(wù)器20的SQL語句并將其發(fā)送至DB服務(wù)器20。此時(shí)輸出的輸出變量State是表示正在發(fā)送SQL語句的狀態(tài) “_DBC_SEND_SENDING”。
[0089]在步驟S15中,PLC30在超時(shí)之前一直待機(jī),并且通過DB訪問處理程序35,對(duì)于向DB服務(wù)器20發(fā)送的SQL語句,來確認(rèn)是否收到來自DB服務(wù)器20的Ack響應(yīng)(發(fā)送Ack)。此時(shí)輸出的輸出變量State是表示正在發(fā)送SQL語句的“_DBC_SEND_SENDING”。
[0090]在步驟S17中,PLC30通過DB訪問處理程序35來判斷出以下兩種情況中的至少任意一種情況,這兩種情況是指:在與DB服務(wù)器20之間的通信中接收到了錯(cuò)誤信息(error);接收Ack響應(yīng)的處理超時(shí)。此時(shí)輸出的輸出變量State是表示正在發(fā)送SQL語句的“_DBC_SEND_SENDING”。在步驟S17中得到肯定的判斷結(jié)果的情況下,PLC30通過DB訪問處理程序35來進(jìn)行步驟S21的處理,在判斷結(jié)果為否定的情況下,通過DB訪問處理程序35來進(jìn)行步驟S19的處理。
[0091]在步驟S19 (通過DB訪問處理程序35來向DB服務(wù)器20發(fā)送SQL語句的處理正常結(jié)束)中,PLC30通過DB訪問處理程序35,來向調(diào)出了 DB訪問處理程序35的程序輸出表示對(duì)DB服務(wù)器20的訪問結(jié)束的響應(yīng)。此時(shí)輸出的輸出變量State是表示SQL語句的發(fā)送結(jié)束的 “_DBC_SEND_COMPLETE”。
[0092]在步驟S21中,PLC30通過DB訪問處理程序35,將向DB服務(wù)器20的發(fā)送未正常結(jié)束的SQL語句被假脫機(jī)至非易失性存儲(chǔ)器。在到假脫機(jī)處理結(jié)束為止的期間內(nèi)輸出的輸出變量State是表示正在發(fā)送SQL語句的“_DBC_SEND_SENDING”。
[0093]在步驟S23中,PLC30將表示通過DB訪問處理程序35對(duì)DB服務(wù)器20的訪問已結(jié)束的響應(yīng),輸出至調(diào)出了 DB訪問處理程序35的程序。此時(shí)輸出的輸出變量State是表示SQL語句已被假脫機(jī)的“_DBC_SEND_SP00LED”。
[0094]圖8是示出了按照用戶程序32的指令通過DB訪問處理程序35來開始訪問DB服務(wù)器20并輸出輸出變量State的處理的圖。
[0095]( I)開始
[0096]就包含在用戶程序32中的DB指令60而言,是用于調(diào)出DB訪問處理程序35來訪問DB服務(wù)器20的指令,包括表示向DB服務(wù)器20進(jìn)行連接的連接指令的DB_C0nnect指令61以及向DB服務(wù)器20插入數(shù)據(jù)的DB_Insert指令62等。通過執(zhí)行包含將輸出變量State輸出至DB訪問處理程序35的DB指令60,PLC30調(diào)出DB訪問處理程序35并開始輸出輸出變量State。
[0097](2)讀取當(dāng)前值
[0098]PLC30通過DB訪問處理程序35來執(zhí)行步驟Sll的處理。
[0099](3)發(fā)送
[0100]PLC30通過DB訪問處理程序35來執(zhí)行步驟S13的處理。[0101](4)發(fā)送 Ack
[0102]PLC30通過DB訪問處理程序35來執(zhí)行步驟S15及步驟S17的處理。
[0103](5 — I)發(fā)生故障時(shí),(5 — 2)指令超時(shí)時(shí)
[0104]PLC30通過DB訪問處理程序35來執(zhí)行步驟S21的處理,并將SQL語句假脫機(jī)至非易失性存儲(chǔ)器66。
[0105](6—1)結(jié)束,(6 — 2)結(jié)束(假脫機(jī))
[0106]PLC30通過DB訪問處理程序35來執(zhí)行步驟S19或步驟S23的處理。
[0107]圖9是示出了斷電時(shí)刻、輸出變量State以及在發(fā)生斷電時(shí)所采取的措施的圖。
[0108]圖9中的斷電時(shí)刻(I)開始、(2)當(dāng)前值的讀取、(3)發(fā)送、(4)發(fā)送Ack、(5 — I)發(fā)生故障時(shí)、(5 - 2)指令超時(shí)時(shí)、(6 -1)結(jié)束以及(6 - 2)結(jié)束(假脫機(jī)),與在圖8中說明的各時(shí)刻相對(duì)應(yīng)。參照?qǐng)D9,在斷電時(shí)刻為“(I)開始”和“(2)當(dāng)前值的讀取”的情況下,未通過DB訪問處理程序35來向DB服務(wù)器20發(fā)送SQL語句。因此,發(fā)生斷電時(shí)所采取的措施如下:用戶程序被執(zhí)行而通過再次調(diào)出DB訪問處理程序35來再次發(fā)送SQL語句。
[0109]在斷電時(shí)刻為“(3)發(fā)送、(4)發(fā)送Ack、(5 — I)發(fā)生故障時(shí)以及(5 — 2)指令超時(shí)時(shí)”的情況下,由于未通過DB訪問處理程序35來發(fā)送SQL語句,因而發(fā)生斷電時(shí)所采取的措施如下:確認(rèn)DB服務(wù)器20 —側(cè)有無記錄(record),并在DB服務(wù)器20中未存儲(chǔ)記錄的情況下再次發(fā)送SQL語句。
[0110]在斷電時(shí)刻為“(6 -1)結(jié)束”的情況下,由于通過DB訪問處理程序35向DB服務(wù)器20發(fā)送SQL語句的處理已結(jié)束,因而即使在發(fā)生斷電時(shí)也不需要特別的措施。
[0111]在斷電時(shí)刻為“(6 — 2)結(jié)束(假脫機(jī))”的情況下,由于SQL語句已被假脫機(jī),因而發(fā)生斷電時(shí)所采取的措施如下:通過DB訪問處理程序35來再次發(fā)送已假脫機(jī)的SQL語句。
[0112]<用戶程序的例子>
[0113]如上所述,對(duì)PLC30通過DB訪問處理程序35來輸出訪問DB服務(wù)器20時(shí)將訪問狀況輸出至狀態(tài)信息51的動(dòng)作進(jìn)行了說明。在此,對(duì)用于將狀態(tài)信息51輸出至DB訪問處理程序35的用戶程序的例子和在發(fā)生斷電時(shí)用于恢復(fù)的用戶程序的例子進(jìn)行說明。
[0114]圖10是示出了用于通過DB訪問處理程序35來輸出狀態(tài)信息51的用戶程序的一個(gè)例子的圖。
[0115]參照?qǐng)D10,例如,在由用戶程序32用于調(diào)出DB訪問處理程序35的指令(DB_Insert指令62等)中,包含有用于保存從DB訪問處理程序35輸出的訪問DB服務(wù)器20的訪問狀況的指示。
[0116]圖11是示出了在發(fā)生斷電時(shí)用于恢復(fù)的用戶程序的一個(gè)例子的圖。此外,圖11與用戶程序的一個(gè)例子一同示出了功能塊“DB_InSert”的一個(gè)例子。參照?qǐng)D11,在用戶程序中包含有如下的指令,該指令使得在對(duì)PLC30的供電后的第一周期(“P_First_RunMode”)內(nèi)參照保存在非易失性存儲(chǔ)器中的狀態(tài)信息51。在供電后的第一周期的狀態(tài)信息51中表示為“_DBC_SEND_UNSENT” (SQL語句未發(fā)送)的情況下,再次發(fā)送SQL語句。另外,在狀態(tài)信息51中表示為“_DBC_SEND_SENDING”(正在發(fā)送SQL語句)的情況下,PLC30確認(rèn)DB服務(wù)器20有無記錄,并根據(jù)確認(rèn)結(jié)果來再次發(fā)送SQL語句。這樣,恢復(fù)程序也可以使PLC30執(zhí)行與SQL語句的發(fā)送狀況相對(duì)應(yīng)的處理。
[0117]這樣對(duì)各實(shí)施方式進(jìn)行了說明,但顯然也可以組合這些實(shí)施方式。以上,基于實(shí)施方式具體說明了本發(fā)明人員們做出的發(fā)明,但本發(fā)明并不限定于所述實(shí)施方式,顯然能夠在不脫離其宗旨的范圍內(nèi)進(jìn)行各種變更。
[0118]應(yīng)當(dāng)認(rèn)為本公開的實(shí)施方式是在全部點(diǎn)的例示而非限制。本發(fā)明的范圍并不由無的說明來表示,而是由權(quán)利要求書來表示,意在包括在與權(quán)利要求書均等的意思和范圍內(nèi)的全部變更。
【權(quán)利要求】
1.一種控制器,其特征在于,具有: 指令執(zhí)行部,其執(zhí)行用于對(duì)控制對(duì)象進(jìn)行控制的用戶程序; 通信接口,其用于連接數(shù)據(jù)庫系統(tǒng); 訪問處理部,其通過執(zhí)行包含用于訪問所述數(shù)據(jù)庫系統(tǒng)的訪問指令在內(nèi)的所述用戶程序,來生成與所述訪問指令相對(duì)應(yīng)的指令語句,基于所生成的指令語句來控制對(duì)數(shù)據(jù)庫系統(tǒng)的訪問; 狀態(tài)輸出部,其在從所述訪問處理部開始基于與所述訪問指令相對(duì)應(yīng)地生成的所述指令語句來執(zhí)行用于訪問所述數(shù)據(jù)庫系統(tǒng)的訪問處理起,至基于該指令語句的處理結(jié)束為止的期間內(nèi),生成表示所述指令語句的執(zhí)行狀況的狀態(tài)信息,并輸出所生成的狀態(tài)信息。
2.如權(quán)利要求1所述的控制器,其特征在于, 所述控制器,還包括非易失性存儲(chǔ)器; 所述訪問處理部,包括指令輸出部,該指令輸出部在到基于所述指令語句的處理結(jié)束為止的期間內(nèi),將所述指令語句存儲(chǔ)至所述存儲(chǔ)器。
3.如權(quán)利要求1所述的控制器,其特征在于, 所述狀態(tài)信息,包括表示用于訪問所述數(shù)據(jù)庫系統(tǒng)的SQL語句的發(fā)送狀況的信息。
4.如權(quán)利要求1所述的控制器,其特征在于, 所述狀態(tài)信息,包括表示是否將用于訪問所述數(shù)據(jù)庫系統(tǒng)的SQL語句保留在所述存儲(chǔ)部中的信息。
5.如權(quán)利要求1所述的控制器,其特征在于, 該控制器還具有保持部,該保持部保持恢復(fù)程序,該恢復(fù)程序用于參照所述狀態(tài)信息,根據(jù)狀態(tài)信息所表示的所述訪問的狀況來恢復(fù)對(duì)數(shù)據(jù)庫系統(tǒng)的訪問處理; 該控制器在處于規(guī)定的動(dòng)作狀態(tài)時(shí),執(zhí)行所述恢復(fù)程序。
6.如權(quán)利要求5所述的控制器,其特征在于, 所述恢復(fù)程序,根據(jù)從所述控制器向所述數(shù)據(jù)庫系統(tǒng)發(fā)送的SQL語句的發(fā)送狀況來進(jìn)行恢復(fù)。
7.一種程序,用于對(duì)控制器的動(dòng)作進(jìn)行控制,所述控制器具有處理器和用于連接數(shù)據(jù)庫系統(tǒng)的通信接口,該程序的特征在于, 所述程序使處理器執(zhí)行以下步驟: 通過執(zhí)行包含用于訪問所述數(shù)據(jù)庫系統(tǒng)的訪問指令在內(nèi)的用戶程序,來生成與所述訪問指令相對(duì)應(yīng)的指令語句,并基于所生成的指令語句來控制對(duì)數(shù)據(jù)庫系統(tǒng)的訪問; 在所述訪問處理部開始基于與所述訪問指令相對(duì)應(yīng)地生成的所述指令語句來執(zhí)行用于訪問所述數(shù)據(jù)庫系統(tǒng)的訪問處理起,至基于該指令語句的處理結(jié)束為止的期間內(nèi),生成表示所述指令語句的執(zhí)行狀況的狀態(tài)信息,并輸出所生成的狀態(tài)信息。
【文檔編號(hào)】G05B19/05GK103809502SQ201310566385
【公開日】2014年5月21日 申請(qǐng)日期:2013年11月14日 優(yōu)先權(quán)日:2012年11月14日
【發(fā)明者】岡村弘太郎, 西山佳秀, 太田政則, 矢尾板宏心 申請(qǐng)人:歐姆龍株式會(huì)社