專利名稱::一種從UML模型轉換至SmartC模型的轉換方法
技術領域:
:本發(fā)明涉及嵌入式集成開發(fā)環(huán)境技術,主要是實現(xiàn)一種從UML模型轉換至SmartC模型的轉換方法。
背景技術:
:UML模型在描述系統(tǒng)結構與行為時的強大表述能力,是其成為通用建模語言的重要因素之一。但是正因為其廣泛的通用性,在特定的領域(例如嵌入式領域)的某些方面的描述能力還有所欠缺。嵌入式系統(tǒng)的一個很重要的特性就是實時性,很多系統(tǒng)對于實時性有著十分嚴格的要求,例如汽車,航空等領域。由于UML語言主要是一種針對面向對象的軟件開發(fā)方式而提出的,所以UML圖對于基于時間的系統(tǒng)沒有辦法進行很好的描述。SmartC模型的出現(xiàn)填補了UML模型在這方面描述能力的空白。SmartC語言的設計是基于模型驅動的,面向嵌入式領域的建模語言。SmartC語言具有多種針對汽車電子嵌入式軟件開發(fā)的特點,包括支持層次化的建模、支持OSEK/VDX標準以及AutoSAR軟件架構體系等特點,能夠滿足復雜分布式汽車電子嵌入式軟件開發(fā)的需求。在SmartC模型中,用戶可以使用預先已經(jīng)定義好的SmartC庫,以最大程度地達到模塊的復用;其次,SmartC語言提供對基于數(shù)據(jù)流的控制算法的描述;第三,SmartC平臺是基于SmartOSEKOS的,用戶可以方便地對平臺相關性的屬性進行配置,例如任務優(yōu)化級,硬件相關屬性等。但同樣,SmartC模型也存在著其不足之處。首先,SmartC語言對于需求建模的表述能力還有待提高,因為SmartC語言最上層為系統(tǒng)層,描述的是系統(tǒng)的組成結構,對系統(tǒng)層進行建模就已經(jīng)進入到了系統(tǒng)開發(fā)的設計階段,而對于在開發(fā)之前的需求分析階段,SmartC語言并未能涉足。其次,SmartC語言還處在推廣階段,不為外人所熟悉,一個普通開發(fā)人員想要使用SmartC語言,就必須要先花很多的時間進行學習,不利于開發(fā)的快速進行。而UML語言作為一種廣為人知的建模語言,相比較SmartC而言,其用戶接受度更高,開發(fā)成本更低。因此,將UML語言與SmartC語言結合起來,揚長避短,發(fā)揮各自的優(yōu)勢,能快速提高開發(fā)效率。因此,面對嵌入式領域的特殊需求,以及UML建模語言與SmartC建模語言各自的特點,我們提出了以UML建模語言作為第一層次的建模語言,以方便用戶進行需求建模和系統(tǒng)建模,以SmartC建模語言作為第二層次的建模語言,方便用戶進行任務,控制流,數(shù)據(jù)流的開發(fā)。并在兩層模型之間提供模型轉換工具,以方便用戶從UML模型自動轉換至SmartC模型。
發(fā)明內容本發(fā)明要解決上述UML模型不擅于表達實時控制、算法建模方面的缺陷,以及SmartC在需求建模上的弱勢,提供一種從UML模型轉換至SmartC模型的轉換方法。本發(fā)明解決其技術問題所采用的技術方案:一種從UML模型轉換至SmartC模型的轉換方法,包括如下步驟-1)分析UML模型中的對象圖和狀態(tài)圖,提取UML模型狀態(tài)圖中狀態(tài)與轉移條件可執(zhí)行代碼中的OSEK標準API;2)分析OSEK標準API中涉及不同實體之間交互的函數(shù),并以此為標準,將UML狀態(tài)圖轉換成為支持OSEK標準的SmartC模型。進一步的,步驟l)中分析UML模型中的對象圖和狀態(tài)圖為將對象在系統(tǒng)中的整個生命周期轉換為SmartC模型中任務層中的Task,并通過分析狀態(tài)圖中所屬狀態(tài)和狀態(tài)轉移條件判斷任務間的邏輯關系和任務對于外部資源的調用關系,確定Task與其它SmartC元素之間的關系。更進一步的,所述Task與其它SmartC元素之間的關系包括(1)、任務與任務之間的關系;(2)、任務與事件之間的關系;(3)、任務與資源之間的關系;(4)、任務與定時器之間的關系。進一步的,所述步驟l)是以UML模型數(shù)據(jù)為輸入數(shù)據(jù),圍繞著對象圖中的對象為核心概念,分析對象與其它模型元素之間的關素。進一步的,所述步驟1)是在狀態(tài)圖中的DefaultConnector,作為狀態(tài)自動機的初始狀態(tài),賦予了判定該狀態(tài)圖,是否需要Alarm的開關變量isAlarm,當isAlarm為true是,則表示該任務需要Alarm激活;當isAlarm為false時,則表示該任務不需要Alarm激活,可能被其它任務激活,或被事件激活。進一步的,所述步驟O中,通過分析狀態(tài)圖中狀態(tài)與轉移條件可執(zhí)行代碼OSEK標準API,從中提取出對其它對象產生影響的操作。更進一步的,所述的操作包J舌ActivateTask,GetResource,ReleaseResource,SetEvent,WaitEvent。進一步的,所述步驟l)為讀取對象模型圖中的所有擁有狀態(tài)圖的對象,由一個狀態(tài)圖生成一個代表自身的Task,讀取等待庫,若等待庫中有與本Task同名的項,則創(chuàng)建;對于每個狀態(tài)圖,讀取其中的DefaultConnector,isAlarm值是否為tme,若為true,為該Task生成一個Alarm,并生成一條連線,從Alarm連至Task;若為false,則不生成Alarm;所述歩驟2)為遍歷該狀態(tài)圖中的所有Transition與State,判斷Transition中的Action與State中的Actionln、ActipnOut:若包含SetEvent,則生成名為Mask的Event,并連接本Task與Event,然后判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接Event與新創(chuàng)建的Task;若有,則僅連接Event與目標Task;若包含ActivateTask,判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接本Task與新創(chuàng)建的Task;若有,則僅連接本Task與目標Task;若包含GetResource,判斷目標Resource是否已被創(chuàng)建,若有則將源Task與目標Resource進行連接,若無則創(chuàng)建目標Resource,并連接;若包含ReleaseResource,判斷目標Resource是否己被創(chuàng)建,若有則將目標Resource與Task相連,若無則創(chuàng)建目標Resource,并連接。另外,本發(fā)明也提到在步驟l)之前,從項目文件夾下的對象圖與狀態(tài)圖中讀取數(shù)據(jù),通過處理XML文件,將其還原成為UML建模環(huán)境中所定義的數(shù)據(jù)結構;在步驟2)之后,系統(tǒng)將啟動一個創(chuàng)建向導,用以創(chuàng)建目標SmartC文件。下面對本發(fā)明作進一步的描述本方法通過分析UML模型中的對象圖和狀態(tài)圖,提取其中的OSEK標準API,并分析由此產生的不同對象實體之間的交互關系,轉換成為支持OSEK標準的SmartC模型。該方法的的創(chuàng)新之處在于建立了UML模型與SmartC模型之間的關系。一種從UML模型轉換至SmartC模型的轉換方法通過分析UML建模環(huán)境中的對象(模型)圖以及其從屬的狀態(tài)圖,將對象在系統(tǒng)中的整個生命周期(即由對象從屬的一張狀態(tài)圖所描述的對象狀態(tài)的變化,以及狀態(tài)變化的觸發(fā)條件)轉換為SmartC模型中任務層中的Task,并通過分析狀態(tài)圖中所屬狀態(tài)(State)的Actionln,ActionOut,狀態(tài)轉移條件(Transition)的Trigger,Guard,Action,判斷任務間的邏輯關系,以及任務對于外部資源的調用關系,確定Task與其它SmartC元素之間的關系。模型轉換方法以UML模型數(shù)據(jù)為輸入數(shù)據(jù),圍繞著對象(模型)圖中的對象(即SmartC模型中的Task)為核心概念,分析對象與其它模型元素之間的關素,并最終轉換為SmartC模型元素。由于在狀態(tài)圖描述的是該對象在整個生命周期中的狀態(tài)變化,其所可能進行的操作可被分為兩類1、只對自身有影響的操作;2、對其它對象有影響的操作。在轉換成SmartC模型的Task元素時,只對自身有影響的操作將都被包含在Task元素內部,不對其它元素產生影響,所以在進行模型轉換時,只需要考慮對其它對象產生影響的操作。通過分析OSEK標準API,可以從中提取出對其它對象產生影響的操作,包括ActivateTask,GetResource,ReleaseResource,SetEvent,WaitEvent。其中ActivateTask影響任務與任務之間的關系,GetResource/ReleaseResource影響任務與資源之間的關系,SetEvent/WaitEvent影響任務與事件之間的關系。另外,在狀態(tài)圖中的DefaultConnector,作為狀態(tài)自動機的初始狀態(tài),賦予了判定該狀態(tài)圖(即SmartC模型中的Task)是否需要Alarm的開關變量isAlarm,當isAlarm為true是,則表示該任務需要Alarm激活;當isAlarm為false時,則表示該任務不需要Alarm激活,可能被其它任務激活,或被事件激活。本發(fā)明實現(xiàn)的具體步驟如下一.讀取對象模型圖中的所有擁有狀態(tài)圖的對象,由一個狀態(tài)圖生成一個代表自身的Task(以后簡稱為本Task),讀取等待庫,若等待庫中有與本Task同名的項,則創(chuàng)建;二.對于每個狀態(tài)圖,讀取其中的DefaultConnector,isAlarm值是否為true,若為true,為該Task生成一個Alarm,并生成一條連線,從Alarm連至Task;若為'false,貝U不生成Alarm;三.遍歷該狀態(tài)圖中的所有Transition與State,判斷Transition中的Action與State中的Actionln、ActionOut:a)若包含SetEvent(TaskTypeTaskID,EventMaskTypeMask),則生成名為Mask的Event,并連接本Task與Event,然后判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接Event與新創(chuàng)建的Task;若有,則僅連接Event與目標Task;b)若包含ActivateTask(TaskTypeTaskID),判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接本Task與新創(chuàng)建的Task;若有,則僅連接本Task與目標Task;c)若包含GetResource,判斷目標Resource是否已被創(chuàng)建,若有則將源Task與目標Resource進行連接,若無則創(chuàng)建目標Resource,并連接;d)若包含ReleaseResource,判斷目標Resource是否已被創(chuàng)建,若有則將目標Resource與Task相連,若無則創(chuàng)建目標Resource,并連接。本發(fā)明的有益效果為1.本發(fā)明分析了UML模型的總體特點,從所有的模型圖中提取出對象圖與狀態(tài)圖兩種模型用于模型轉換,而不需要分析UML中的所有模型。2.本發(fā)明分析了所有的OSEK標準API,并從中提取了5個涉及對象之間進行交互的標準API,忽略其余的API,簡化了模型轉換的復雜性。3.本發(fā)明中的模型轉換策略的目標模型為SmartC模型,由于SmartC擅長描述汽車電子領域,UML語言擅長于描述通用建模過程,該模型轉換策略的出現(xiàn),解決了在汽車電子領域,通用建模過程領域細化的問題。4.同時解決了UML模型不擅于表達實時控制,算法建模方面的缺陷,以及SmartC在需求建模上的弱勢,將兩者優(yōu)勢互補,揚長避短,以提高模型開發(fā)的效圖1本發(fā)明SmartC模型關系圖圖2本發(fā)明模型轉換操作流程圖圖3本發(fā)明UML模型到SmartC模型的轉換流程圖具體實施例方式一種從UML模型轉換至SmartC模型的轉換方法,包括如下步驟1)分析UML模型中的對象圖和狀態(tài)圖,提取UML模型狀態(tài)圖中狀態(tài)與轉移條件可執(zhí)行代碼中的OSEK標準API;2)分析OSEK標準API中涉及不同實體之間交互的函數(shù),并以此為標準,將UML狀態(tài)圖轉換成為支持OSEK標準的SmartC模型。其中,步驟l)中分析UML模型中的對象圖和狀態(tài)圖為將對象在系統(tǒng)中的整個生命周期轉換為SmartC模型中任務層中的Task,并通過分析狀態(tài)圖中所屬狀態(tài)和狀態(tài)轉移條件判斷任務間的邏輯關系和任務對于外部資源的調用關系,確定Task與其它SmartC元素之間的關系。所述Task與其它SmartC元素之間的關系包括(1)、任務與任務之間的關系;(2)、任務與事件之間的關系;(3)、任務與資源之間的關系;(4)、任務與定時器之間的關系。本發(fā)明具體操作為一)從項目文件夾下的對象(模型)圖與狀態(tài)圖中讀取數(shù)據(jù)。因為這些數(shù)據(jù)在項目文件夾下都以XML文件形式進行保存,所以需要通過處理XML文件,將其還原成為UML建模環(huán)境中所定義的數(shù)據(jù)結構;二)使用模型轉換算法對數(shù)據(jù)進行處理1)、讀取對象模型圖中的所有擁有狀態(tài)圖的對象,由一個狀態(tài)圖生成一個代表自身的Task(以后簡稱為本Task),讀取等待庫,若等待庫中有與本Task同名的項,則創(chuàng)建;對于每個狀態(tài)圖,讀取其中的DefaultConnector,isAlarm值是否為true,若為true,為該Task生成一個Alarm,并生成一條連線,從Alarm連至Task;若為false,則不生成Alarm;3)、遍歷該狀態(tài)圖中的所有Transition與State,判斷Transition中的Action與State中的Actionln、ActionOut:若包含SetEvent(TaskTypeTaskID,EventMaskTypeMask),則生成名為Mask的Event,并連接本Task與Event,然后判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接Event與新創(chuàng)建的Task;若有,則僅連接Event與目標Task;若包含ActivateTask(TaskTypeTaskID),判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接本Task與新創(chuàng)建的Task;若有,則僅連接本Task與目標Task;若包含GetResource,判斷目標Resource是否已被創(chuàng)建,若有則將源Task與目標Resource進行連接,若無則創(chuàng)建目標Resource,并連接。若包含ReleaseResource,判斷目標Resource是否已被創(chuàng)建,若有則將目標Resource與Task相連,若無則創(chuàng)建目標Resource,并連接。三)處理完成之后,系統(tǒng)將啟動一個創(chuàng)建向導,用以創(chuàng)建目標SmartC文件。在創(chuàng)建向導的初始化工作中,對SmartC模型的分析結果進行加載。下面結合附圖對本發(fā)明做進一步的描述圖1指出了本發(fā)明SmartC模型關系圖,關系包括1.任務與任務之間的關系;2.任務與事件之間的關系;3.任務與資源之間的關系;4.任務與定時器之間的關系。為了使UML圖能夠順利地轉換為支持SmartOSEKOS的SmartC,我們在狀態(tài)圖中默認提供了對于OSEK標準API庫的支持,對狀態(tài)圖的分析正是基于這些標準API之間關系的分析,從而得到相應的SmartC任務層模型。圖2指出了本發(fā)明模型轉換操作流程圖,具體如下1.需要從項目文件夾下的對象(模型)圖與狀態(tài)圖中讀取數(shù)據(jù)。因為這些數(shù)據(jù)在項目文件夾下都以XML文件形式進行保存,所以需要通過處理XML文件,將其還原成為UML建模環(huán)境中所定義的數(shù)據(jù)結構;2.使用模型轉換算法對數(shù)據(jù)進行處理后,得到SmartC模型的分析結果;3.處理完成之后,系統(tǒng)將啟動一個創(chuàng)建向導,用以創(chuàng)建目標SmartC文件。在創(chuàng)建向導的初始化工作中,對SmartC模型的分析結果進行加載。圖3指出了本發(fā)明UML模型到SmartC模型的轉換流程圖,具體如下1.讀取對象模型圖中的所有擁有狀態(tài)圖的對象,由一個狀態(tài)圖生成一個代表自身的Task(以后簡稱為本Task),讀取等待庫,若等待庫中有與本Task同名的項,則創(chuàng)建;2.對于每個狀態(tài)圖,讀取其中的DefaultConnector,isAlarm值是否為true,若為true,為該Task生成一個Alarm,并生成一條連線,從Alarm連至Task;若為false,則不生成Alarm;3.遍歷該狀態(tài)圖中的所有Transition與State,判斷Transition中的Action與State中的Actionln、ActionOut:a)若包含SetEvent(TaskTypeTaskID,EventMaskTypeMask),貝U生成名為Mask的Event,并連接本Task與Event,然后判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接Event與新創(chuàng)建的Task;若有,則僅連接Event與目標Task;b)若包含ActivateTask(TaskTypeTaskID),判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接本Task與新創(chuàng)建的Task;若有,則僅連接本Task與目標Task;c)若包含GetResource,判斷目標Resource是否己被創(chuàng)建,若有則將源Task與目標Resource進行連接,若無則創(chuàng)建目標Resource,并連接。d)若包含ReleaseResource,判斷目標Resource是否己被創(chuàng)建,若有則將目標Resource與Task相連,若無則創(chuàng)建目標Resource,并連接。以下是與本發(fā)明相關的從OSEK標準API中提取的五個涉及到不同對象之間交互的函數(shù)。ActivateTask涉及不同Task之間的交互,WaitEvent/SetEvent涉及Task與Event之間的交互,GetResource/ReleaseResouce涉及Task與Resource之間的交互,具體如表所示表1ActivateTask函數(shù)說明<table>tableseeoriginaldocumentpage12</column></row><table><table>tableseeoriginaldocumentpage13</column></row><table>權利要求1.一種從UML模型轉換至SmartC模型的轉換方法,包括如下步驟1)分析UML模型中的對象圖和狀態(tài)圖,提取UML模型狀態(tài)圖中狀態(tài)與轉移條件可執(zhí)行代碼中的OSEK標準API;2)分析OSEK標準API中涉及不同實體之間交互的函數(shù),并以此為標準,將UML狀態(tài)圖轉換成為支持OSEK標準的SmartC模型。2、根據(jù)權利要求1所述的一種從UML模型轉換至SmartC模型的轉換方法,其特征在于步驟O中分析UML模型中的對象圖和狀態(tài)圖為將對象在系統(tǒng)中的整個生命周期轉換為SmartC模型中任務層中的Task,并通過分析狀態(tài)圖中所屬狀態(tài)和狀態(tài)轉移條件,判斷任務間的邏輯關系和任務對于外部資源的調用關系,確定Task與其它SmartC元素之間的關系。3、根據(jù)權利要求2所述的一種從UML模型轉換至SmartC模型的轉換方法,其特征在于所述Task與其它SmartC元素之間的關系包括(1)、任務與任務之間的關系;(2)、任務與事件之間的關系;(3)、任務與資源之間的關系;(4)、任務與定時器之間的關系。4、根據(jù)權利要求1或2所述的一種從UML模型轉換至SmartC模型的轉換方法,其特征在于所述步驟l)是以UML模型數(shù)據(jù)為輸入數(shù)據(jù),圍繞著對象圖中的對象為核心概念,分析對象與其它模型元素之間的關素。5、根據(jù)權利要求1或2所述的一種從UML模型轉換至SmartC模型的轉換方法,其特征在于所述步驟1)是在狀態(tài)圖中的DefaultConnector,作為狀態(tài)自動機的初始狀態(tài),賦予了判定該狀態(tài)圖,是否需要Alarm的開關變量isAlarm,當isAlarm為true是,則表示該任務需要Alarm激活;當isAlarm為false時,則表示該任務不需要Alarm激活,可能被其它任務激活,或被事件激活。6、根據(jù)權利要求1或2所述的一種從UML模型轉換至SmartC模型的轉換方法,其特征在于所述步驟1)中,通過分析狀態(tài)圖中狀態(tài)與轉移條件可執(zhí)行代碼OSEK標準API,從中提取出對其它對象產生影響的操作。7、根據(jù)權利要求6所述的一種從UML模型轉換至SmartC模型的轉換方法,其牛寺征在于所述的f喿作包括ActivateTask,GetResource,ReleaseResource,SetEvent,WaitEvent。8、根據(jù)權利要求1所述的一種從UML模型轉換至SmartC模型的轉換方法,其特征在于所述步驟l)為讀取對象模型圖中的所有擁有狀態(tài)圖的對象,由一個狀態(tài)圖生成一個代表自身的Task,讀取等待庫,若等待庫中有與本Task同名的項,則創(chuàng)建;對于每個狀態(tài)圖,讀取其中的DefaultConnector,isAlarm值是否為true,若為true,為該Task生成一個Alarm,并生成一條連線,從Alarm連至Task;若為false,貝U不生成Alarm;所述步驟2)為遍歷該狀態(tài)圖中的所有Transition與State,判斷Transition中的Action與State中的Actionln、ActionOut:若包含SetEvent,則生成名為Mask的Event,并連接本Task與Event,然后判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接Event與新創(chuàng)建的Task;若有,則僅連接Event與目標Task;若包含ActivateTask,判斷名為TaskID的Task是否被創(chuàng)建,若否,則創(chuàng)建名為TaskID的Task,并連接本Task與新創(chuàng)建的Task;若有,則僅連接本Task與目標Task;若包含GetResource,判斷目標Resource是否已被創(chuàng)建,若有則將源Task與目標Resource進行連接,若無則創(chuàng)建目標Resource,并連接;若包含ReleaseResource,判斷目標Resource是否己被創(chuàng)建,若有則將目標Resource與Task相連,若無則創(chuàng)建目標Resource,并連接。9、根據(jù)權利要求1所述的一種從UML模型轉換至SmartC模型的轉換方法,其特征在于在步驟l)之前,從項目文件夾下的對象圖與狀態(tài)圖中讀取數(shù)據(jù),通過處理XML文件,將其還原成為UML建模環(huán)境中所定義的數(shù)據(jù)結構;在步驟2)之后,系統(tǒng)將啟動一個創(chuàng)建向導,用以創(chuàng)建目標SmartC文件。全文摘要本發(fā)明涉及嵌入式集成開發(fā)環(huán)境技術,主要是實現(xiàn)一種從UML模型轉換至SmartC模型的轉換方法。本發(fā)明一種從UML模型轉換至SmartC模型的轉換方法,包括如下步驟1)分析UML模型中的對象圖和狀態(tài)圖,提取UML模型狀態(tài)圖中狀態(tài)與轉移條件可執(zhí)行代碼中的OSEK標準API;2)分析OSEK標準API中涉及不同實體之間交互的函數(shù),并以此為標準,將UML狀態(tài)圖轉換成為支持OSEK標準的SmartC模型。本發(fā)明分析了UML模型的總體特點,從所有的模型圖中提取出對象圖與狀態(tài)圖兩種模型用于模型轉換,而不需要分析UML中的所有模型。由于SmartC擅長描述汽車電子領域,UML語言擅長于描述通用建模過程,該模型轉換策略的出現(xiàn),解決了在汽車電子領域,通用建模過程領域細化的問題。文檔編號G06F9/44GK101295246SQ20081006208公開日2008年10月29日申請日期2008年5月28日優(yōu)先權日2008年5月28日發(fā)明者杰丁,吳朝暉,張莉蘋,紅李,博胡申請人:浙江大學