
本發明涉及電工電子
技術領域:
,特別涉及一種電機控制器的可視化編程方法及系統。
背景技術:
:目前,隨著軟件技術的發展,編程的方式除了傳統的文本編輯外,還有可視化編程。可視化編程通過提供符號和視圖,可形象的表示每一步程序動作,而程序動作直接與所需步驟方法吻合,這種編程方式符合人類的思維方式,所以,在電機的控制領域采用可視化編程可使得編程變得直觀清楚。電機的控制方式主要有脈沖型控制和總線型控制,這兩種方式都需要上位機發送脈沖或者命令,而利用上位機進行相關操作時,會使電機的布線復雜,成本增加,為避免這些弊端,可將相關控制邏輯通過編程寫入控制器中,讓控制器自動執行,目前很多編程方式是采用專用編輯器進行語法輸入,然后再編譯成二進制文件燒寫到控制器,這種編程方式需要工作人員熟悉程序的語法,程序結構,代碼序列等知識,可是,很多一線工作人員是非專業編程人員或不會編程的人員,對有嚴格要求的文本程序編程知之甚少,所以,要求他們對控制器進行專業編程操作,這無疑會增加工作人員的操作和調試困難,加重其工作負擔,降低其工作效率。為解決文本程序編程帶來的困難,現有文獻具有人機交互界面的電機控制器設計.徐正平,徐永森,匡海鵬.液晶與顯示.2012.27(4):515-52,提出采用陣列式鍵盤及lcd作為交互設備,通過按鍵,用戶可現場輸入代碼或參數,操作過程中的信息將實時顯示在lcd上,但是采用這種方式的前提是用戶需要熟知代碼指令,編程方式不方便,不直觀。技術實現要素:為解決以上技術問題,本發明提供一種電機控制器的可視化編程方法及系統,使非專業編程人員或不會編程人員能自如地使用電機控制器,即采用該可視化編程方式,用戶只需根據應用場景需要,列出相應操作步驟、選取相關命令來完成編程,不需要用戶學習編程相關知識和記憶相關命令指令。本發明的電機控制器的可視化編程方法,包括可視化離線編寫程序,將離線編寫的程序寫入控制器的存儲區,運行寫入控制器的存儲區的程序;所述可視化離線編寫程序包括:打開可視化編程軟件,加載配置文件到內存中,進行程序編輯并存入一個動態數組,將動態數組保存為第一自定義文件。優選地,所述加載配置文件到內存中,進行程序編輯并存入一個動態數組,包括:從電機控制器的buffer讀出第二自定義文件,將第二自定義文件與內存中的配置文件進行對比,若第二自定義文件的文件格式與內存中的配置文件的文件格式一致,則進行程序編輯并存入一個動態數組。優選地,所述加載配置文件到內存中包括在內存中采用包括以下自定義結構體的結構體成員來表示:離線編程結構體,包含定義的命令集合、最大命令數和離線指針參數;命令結構體,包含命令字母、命令名稱、選項段名和選項;命令選項結構體,包含選項值、選項名、數據默認值、數據范圍最大值、數據范圍最小值和選項說明。優選地,自定義結構體中所有結構體成員采用嵌套型桶式散列儲存方式儲存。優選地,采用嵌套型桶式散列儲存方式儲存包括,主存儲桶目錄表以命令字母為關鍵字,次存儲桶目錄表以各命令的選項值為關鍵字,分別將命令字母和選項值直接轉換為數字,轉換而得的數字與各自存儲桶目錄表中的存儲桶號對應,每個桶號對應一個桶指針;主存儲桶目錄表中存放的指針數目為命令字母總數,次存儲桶目錄表中存放指針數目為各命令所需選項值數目,每個指針對應主或次存儲桶的第一個元素地址。優選地,所述進行程序編輯并存入一個動態數組包括:通過添加一條空白命令添加為編程命令,選定所需命令名稱,通過命令名稱對應的關鍵字找到其主桶指針,定位該主桶,然后再根據離線編程界面上選擇的選項所對應的關鍵字,找到其子桶指針,顯示該子桶部分信息,將編程命令按順序存入一個動態數組。優選地,第一自定義文件的文件格式包括:文件頭、命令數和命令三部分;所述命令由命令字母、選項值、用戶設置數據值三部分封裝而成。優選地,第二自定義文件的文件格式包括:文件頭、命令數和命令三部分;所述命令由命令字母、選項值、用戶設置數據值三部分封裝而成。優選地,所述將離線編寫的程序寫入控制器的存儲區包括采用動態分配內存方式將第一自定義文件寫入控制器的buffer或者寫入控制器的eeprom,具體包括:控制器根據命令總數動態分配命令buffer;設置指針變量i,其初始值為0;判斷命令是否寫入完成;如完成,命令寫入控制器內存操作結束;若未完成,設置控制器命令指針i,寫入命令,然后指針i=i+1,返回判斷命令是否寫入完成的步驟。優選地,所述運行寫入控制器的存儲區的程序包括:步驟一:判定離線暫停開關是否使能,若使能,執行步驟二,若不使能,執行步驟四;步驟二:判定離線暫停輸入端口是否有效,若有效,則進入步驟三,若無效,執行步驟四;步驟三:翻轉離線自動運行開關的狀態;步驟四:判定離線自動運行開關是否打開,若打開,則執行離線命令,進入步驟五,若沒打開,進入步驟六;步驟五:判斷離線指針i是否小于離線命令數n,若小于,離線指針+1,若不小于,進入步驟六;步驟六:判斷離線停止開關是否使能,若使能,進入步驟七,若不能使,進入步驟九;步驟七:判斷離線停止端口輸入是否有效,若有效,進入步驟八,若無效,進入步驟九;步驟八:關閉離線自動運行開關;步驟九:結束。本發明的電機控制器的可視化編程系統,包括上位機、電機以及它們之間的通訊接口:所述上位機裝載有可視化編程軟件,加載配置文件到內存中,進行程序編輯并存入一個動態數組,將動態數組保存為第一自定義文件,將第一自定義文件通過通訊接口發送給電機的控制器;顯示運行結果。所述加載配置文件到內存包括在內存中用以下自定義結構體成員來表示:離線編程結構體,包含定義的命令集合、最大命令數和離線指針參數;命令結構體,包含命令字母、命令名稱、段名和命令選項;命令選項結構體,包含選項值、選項名、數據默認值、數據范圍最大值、數據范圍最小值和選項說明;所述第一自定義結構體中所有成員采用嵌套型桶式散列儲存方式儲存;第一自定義文件的文件格式包括:文件頭、命令數和命令三部分;所述命令由命令字母、選項值、數據值三部分封裝而成;所述電機通過通訊接口接收上位機發來的第一自定義文件并存儲于電機控制器的存儲區,電機控制器運行其存儲區中的第一自定義文件所定義的程序,并將運行結果通過通訊接口發送給上位機;所述存儲于電機控制器的存儲區包括采用動態分配內存方式將第一自定義文件寫入控制器的buffer或者寫入控制器的eeprom。本發明利用電機控制器的可視化編程方式,工作人員無需清楚語法,程序結構,代碼序列等編程相關專業知識,不需知道程序預處理、編譯、匯編、鏈接等操作在計算機或控制器中的具體執行過程。只需根據應用場景的執行流程,在離線編程界面選擇所需命令,點擊相關命令控件即可,使得電機控制器的編程簡單、清晰且直觀。附圖說明圖1為本發明電機控制器的可視化編程方法流程示意圖;圖2為本發明電機控制器的可視化編程系統結構示意圖;圖3為本發明可視化離線編寫程序流程示意圖;圖4為本發明自定義結構體關系示意圖;圖5為本發明寫入控制器buffer流程示意圖;圖6為本發明從eeprom讀取離線指令到buffer的流程示意圖;圖7為本發明離線命令運行處理流程示意圖。具體實施方式為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖對本發明實施例進一步詳細說明。本發明可視化編程方法的實施例與可實可視化編程系統的實施例之間的相應實施方式可以相互引用。如圖1所示,本發明的電機控制器的可視化編程方法流程示意圖,包括可視化離線編寫程序,將離線編寫的程序寫入控制器的存儲區,運行寫入控制器的存儲區的程序。如圖2所示,本發明的電機控制器的可視化編程系統結構示意圖,包括上位機、電機以及它們之間的通訊接口。上位機與電機之間通過通訊接口(比如:uart/rs485/can/ethernet等)連接,用戶通過上位機打開可視化編程軟件,配置文件被自動加載,進入離線編程界面后,用戶可進行編程或加載已有程序。所述上位機裝載有可視化編程軟件,加載配置文件到內存中,進行程序編輯并存入一個動態數組,將動態數組保存為第一自定義文件,將第一自定義文件通過通訊接口發送給電機的控制器;顯示運行結果;所述電機通過通訊接口接收上位機發來的第一自定義文件并存儲于電機控制器的存儲區,電機控制器運行其存儲區中的第一自定義文件所定義的程序,并將運行結果通過通訊接口發送給上位機;所述存儲于電機控制器的存儲區包括采用動態分配內存方式將第一自定義文件寫入控制器的buffer或者寫入控制器的eeprom。所述可視化離線編寫程序流程如圖3所示,包括:打開可視化編程軟件,加載配置文件到內存中,進行程序編輯并存入一個動態數組,將動態數組保存為第一自定義文件。作為一種可實現方式,用戶打開可視化編程軟件,加載配置文件到內存中,根據編程需求選擇所需命令,設置相關數據,所選命令相關信息和設置的數據信息將會被封裝成自定義命令數據結構,并儲存于一個動態數組中,將動態數組保存為第一自定義文件。然后第一自定義文件的命令數據將可能通過通訊接口下發給電機控制器,儲存于控制器buffer中,以便于進行實時運行與調試;或者儲存于控制器eeprom中,以便于進行離線運行。上述實現方式是針對所有程序命令都重新進行編寫的情況,但一般來說,電機控制器中的現有程序命令(屬于一種第二自定義文件)可能有部分或全部不適合本電機,于是可能需要修改其中的部分或者全部命令,那么這時需要將該第二自定義文件讀出來進行部分或者全部修改;甚至或者不經修改(本發明將不做修改當作一種特殊的程序編輯方式看待)直接存為一個動態數組,將動態數組保存為第一自定義文件。因而,作為另一種可實現方式,用戶打開可視化編程軟件,加載配置文件到內存中,進行程序編輯并存入一個動態數組,包括:從電機控制器的buffer讀出第二自定義文件,將第二自定義文件與內存中的配置文件進行對比,若第二自定義文件的文件格式與內存中的配置文件的文件格式一致,則對第二自定義文件進行程序編輯并存入一個動態數組。特別地,上位機本地可能存儲有電機控制器中的現有程序命令(屬于另一種第二自定義文件),也可以將上位機本地存儲的該現有程序命令進行部分或者全部修改,甚至或者不經修改直接存為一個動態數組,將動態數組保存為第一自定義文件。對于此種方式,也理應屬于本發明保護范圍。一般來說,只要第二自定義文件的文件格式與內存中的配置文件的文件格式一致,則說明電機控制器采用了與配置文件相同的數據結構,修改第二自定義文件的方式具有良好的可調試性。例如,通過讀命令buffer可讀取控制器中儲存的離線程序,并將其顯示于離線編程界面,用戶可根據應用場景需求進行編程、調試,以及查看運行效果。優選地,第二自定義文件的文件格式包括:文件頭、命令數和命令三部分;所述命令由命令字母、選項值、用戶設置數據值三部分封裝而成。為調試方便,還可單獨運行單條命令,運行該命令,控制器的離線命令指針將指向當前命令,然后運行該命令。在實現電機控制器的可視化編程時,可視化編程軟件的配置文件被加載到內存中可采用三個自定義結構體表示,分別為:離線編程結構體:包括最大命令數、定義的命令集合和離線指針參數;命令結構體:包括命令字母、命令名稱、選項段名和選項;命令選項結構體:包括選項值、選項名、數據默認值、數據范圍最大值、數據范圍最小值和選項說明。三個自定義結構體的關系示意圖如圖4調試工具配置文件的自定義結構體示意圖所示。其中定義的命令集合包含n個命令結構體,選項段名包含m個命令選項結構體。打開可視化編程軟件,其配置文件的所有信息將自動被加載到自定義結構體中;對于自定義結構體中所有成員可以采用常規關系型數據庫進行儲存,但此儲存方式不利于數據的管理,優選地,所述自定義結構體中所有成員采用嵌套型桶式散列儲存方式儲存。利用嵌套型桶式散列儲存方式儲存自定義結構體時,其主存儲桶目錄表以命令字母為關鍵字,次存儲桶目錄表以各命令的選項值為關鍵字,分別將命令字母和選項值直接轉換為數字,轉換而得的數字與各自存儲桶目錄表中的存儲桶號對應,每個桶號對應一個桶指針(指向儲存桶的指針);主存儲桶目錄表中存放的指針數目為命令字母總數,次存儲桶目錄表中存放指針數目為各命令所需選項值數目,每個指針對應主或次存儲桶的第一個元素地址。在可視化編程界面進行離線程序編輯時,通過添加一條空白命令添加待編程命令,在命令下拉選項中(定義的命令集合)選定所需命令名稱,可視化編程軟件將通過命令名稱對應的關鍵字(命令字母),找到其主桶指針,定位該主桶,然后再根據離線編程界面上選擇的選項(命令選項),根據其對應的關鍵字(選項值),找到其子桶指針,并在離線編程界面上顯示該子桶部分信息,如:選項名,數據默認值,數據范圍最小值,數據范圍最大值,選項說明等信息;添加的每條命令均按順序存入一個動態數組中,在對命令進行編輯(添加、刪除、上移和下移)時,根據相關操作修改動態數組即可。離線程序編輯完成后,離線程序可保存為第一自定義文件格式,該文件格式包括文件頭、命令數和命令。格式如下:文件頭(64byte)命令數n(4byte)命令(n×4byte)其中,每條命令由32比特構成,每條命令是由查找該命令中的命令字母、選項值以及利用自定義類的成員函數讀取到的用戶設置數據值三個部分封裝而成,其中,命令字母為1byte,選項值為1byte,數據值為2byte。具體數據幀結構如下:命令字母定義一條命令的操作,數據類型為char類型。命令選項為命令的選項,數據類型為uint8類型。命令數據為該命令的具體數據,數據類型為uint16類型。所述將離線編寫的程序寫入控制器的存儲區包括采用動態分配內存方式將第一自定義文件寫入控制器的buffer或者寫入控制器的eeprom;或者將第一自定義文件保存在上位機本地;第一自定義文件可以覆蓋第二自定義文件,在某些特殊情況下也可以不覆蓋第二自定義文件。所述將第一自定義文件寫入控制器的buffer具體包括:控制器根據命令總數動態分配命令buffer;設置指針變量i,其初始值為0;判斷命令是否寫入完成;如完成,命令寫入控制器內存操作結束;若未完成,設置控制器命令指針i,寫入命令,然后指針i=i+1,返回判斷命令是否寫入完成的步驟。如圖5所示,具體包括:步驟一:設置命令總數,通過通信接口將數據下發到到控制器,控制器根據命令總數動態分配命令buffer;步驟二:設置指針變量i,其初始值為0。步驟三:判斷命令是否寫入完成。步驟四:如完成,命令寫入控制器內存操作結束。步驟五:若未完成,設置控制器命令指針i,寫入離線命令,然后命令指針變量i=i+1,返回步驟三。所述運行寫入控制器的存儲區包括直接運行buffer中的控制程序。所述將第一自定義文件寫入控制器的eeprom具體包括,將離線程序寫入控制器eeprom中,存儲在eeprom中的每條指令由32位構成,分別是命令字母(1byte),選項值(1byte),數據值(2byte)。保存離線程序后,控制器可斷開與上位機的通訊鏈接,通過重新上電,控制器自動將eeprom中的離線程序讀取到buffer中,可實現離線程序自動運行,也可實現利用連接外部觸發信號或i/o的狀態變化觸發離線程序運行,需要停止離線程序運行時,可通過連接外部觸發信號或傳感器來實現。優選地,所述運行寫入控制器的存儲區包括將eeprom中的離線程序讀取到buffer中運行,具體流程如圖6所示,包括:所述將eeprom中的離線程序讀取到buffer中運行,可以采用以下方式:對eeprom中的離線程序分配固定大小的存儲空間,但此種方式會導致存儲空間的浪費。但是,作為另一種優選方式,采用動態分配內存大小的方式可實現按需分配,對控制器進行初始化,從eeprom中讀取命令總數,控制器根據該命令總數n動態分配內存大小,依次從eeprom中讀取所有離線命令到命令buffer。減少內存浪費。本發明采用動態分配內存大小的方式從eeprom讀取離線指令到buffer的流程圖如6所示。具體流程如下所示:步驟一:開始,判斷buffer是否為空,如果不為空,進入步驟二,如果為空,進入步驟三;步驟二:釋放buffer;步驟三:動態分配一個buffer空間;步驟四:判斷離線命令指針是否小于離線命令數,如果小于,進入步驟五,如果不小于,進入步驟六;步驟五:寫入buffer,離線命令指針加1,返回步驟四;步驟六:結束。特別地,作為一種特殊的方式,離線程序存入eeprom中,重新上電后,控制器可執行該離線命令,離線命令處理流程如圖7所示:步驟一:控制器上電后,判定離線暫停是否使能,若使能,執行步驟二,若不使能,執行步驟四。步驟二:判定離線暫停輸入是否有效,若有效,則進入步驟三,若無效,執行步驟四。步驟三:翻轉離線自動運行狀態。步驟四:判定離線自動運行是否打開,若打開,則執行離線命令,若沒打開,進入步驟六。步驟五:判斷離線指針大小是否小于離線命令數,若小于,離線指針+1,若不小于,進入步驟六。步驟六:判斷離線停止是否使能。若使能,進入步驟七,若不能使,進入步驟九。步驟七:判斷離線停止輸入是否有效,若有效,進入步驟八,若無效,進入步驟九。步驟八:關閉離線自動運行。步驟九:結束。采用本發明的電機控制器的可視化編程方式,用戶只需在離線編程界面根據應用場景需要選擇相關命令、設置所需參數,將編輯完畢的程序寫入控制器儲存器中,然后運行控制器存儲器中的程序即可實現對電機控制器相應的操作。本發明可實現在線編程、調試以及單條命令執行,便于工作人員的程序設計與調試。還可實現離線運行功能,工作人員將應用場景的邏輯程序流程寫入控制器中,保存后斷開與上位機的通訊連接,通過上電執行或i/o的狀態變化去觸發和停止程序,以便適應一些簡單或固定邏輯的應用場景。采用本發明方式,不需要特定且昂貴的上位機,節省了成本,又不需要專業的編程知識,電機控制器的編程簡單、清晰且直觀。當前第1頁12